diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.cpp b/src/sbbs3/ctrl/ConfigWizardUnit.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5341af1667c3702d72bd617c4a1575208411a9ee --- /dev/null +++ b/src/sbbs3/ctrl/ConfigWizardUnit.cpp @@ -0,0 +1,474 @@ +/* Synchronet Control Panel (GUI Borland C++ Builder Project for Win32) */ + +/* $Id$ */ + +/**************************************************************************** + * @format.tab-size 4 (Plain Text/Source Code File Header) * + * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * + * * + * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * See the GNU General Public License for more details: gpl.txt or * + * http://www.fsf.org/copyleft/gpl.html * + * * + * Anonymous FTP access to the most recent released source is available at * + * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * + * * + * Anonymous CVS access to the development source and modification history * + * is available at cvs.synchro.net:/cvsroot/sbbs, example: * + * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login * + * (just hit return, no password is necessary) * + * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src * + * * + * For Synchronet coding style and modification guidelines, see * + * http://www.synchro.net/source.html * + * * + * You are encouraged to submit any modifications (preferably in Unix diff * + * format) via e-mail to mods@synchro.net * + * * + * Note: If this box doesn't appear square, then you need to fix your tabs. * + ****************************************************************************/ +//--------------------------------------------------------------------------- + +#include <vcl.h> +#pragma hdrstop + +#include "MainFormUnit.h" +#include "ConfigWizardUnit.h" +#include <stdio.h> // sprintf +#include <winsock.h> // addresses and such +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" + +#define ILLEGAL_FILENAME_CHARS "\\/|<>+[]:=\";,%" +#define ILLEGAL_QWKID_CHARS "*?" ILLEGAL_FILENAME_CHARS + +char ctrl_dir[MAX_PATH+1]; +short tz_val[]= { + 0 + ,AST + ,EST + ,CST + ,MST + ,PST + ,YST + ,HST + ,BST + ,MID + ,VAN + ,EDM + ,WIN + ,BOG + ,CAR + ,RIO + ,FER + ,AZO + ,LON + ,BER + ,ATH + ,MOS + ,DUB + ,KAB + ,KAR + ,BOM + ,KAT + ,DHA + ,BAN + ,HON + ,TOK + ,SYD + ,NOU + ,WEL +}; + +char* tz_str[]={ + "Universal (UTC/GMT)" + ,"U.S. - Atlantic" + ,"U.S. - Eastern" + ,"U.S. - Central" + ,"U.S. - Mountain" + ,"U.S. - Pacific" + ,"U.S. - Yukon" + ,"U.S. - Hawaii/Alaska" + ,"U.S. - Bering" + ,"Midway" + ,"Vancouver" + ,"Edmonton" + ,"Winnipeg" + ,"Bogota" + ,"Caracas" + ,"Rio de Janeiro" + ,"Fernando de Noronha" + ,"Azores" + ,"London" + ,"Berlin" + ,"Athens" + ,"Moscow" + ,"Dubai" + ,"Kabul" + ,"Karachi" + ,"Bombay" + ,"Kathmandu" + ,"Dhaka" + ,"Bangkok" + ,"Hong Kong" + ,"Tokyo" + ,"Sydney" + ,"Noumea" + ,"Wellington" +}; + +//--------------------------------------------------------------------------- +__fastcall TConfigWizard::TConfigWizard(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::FormShow(TObject *Sender) +{ + char str[128]; + int i; + int status; + + memset(&scfg,0,sizeof(scfg)); + sprintf(scfg.ctrl_dir,"%.*s",sizeof(scfg.ctrl_dir)-1 + ,MainForm->CtrlDirectory.c_str()); + scfg.size=sizeof(scfg); + if(!load_cfg(&scfg,NULL,FALSE)) { + sprintf(str,"Failed to load configuration files from %s",scfg.ctrl_dir); + Application->MessageBox(str,"ERROR",MB_OK|MB_ICONEXCLAMATION); + Close(); + return; + } + + if(MainForm->FirstRun) { + TIME_ZONE_INFORMATION tz; + memset(&tz,0,sizeof(tz)); + GetTimeZoneInformation(&tz); + /* How to convert to SMB tz format? */ + scfg.sys_timezone=0; + } else { + SystemNameEdit->Text=AnsiString(scfg.sys_name); + SystemLocationEdit->Text=AnsiString(scfg.sys_location); + SysopNameEdit->Text=AnsiString(scfg.sys_op); + SystemPasswordEdit->Text=AnsiString(scfg.sys_pass); + InternetAddressComboBox->Text=AnsiString(scfg.sys_inetaddr); + QWKIDEdit->Text=AnsiString(scfg.sys_id); + QNetTaglineEdit->Text=AnsiString(scfg.qnet_tagline); + AllNodesTelnetCheckBox->Checked + =(scfg.sys_nodes==MainForm->bbs_startup.last_node); + } + + NewUsersCheckBox->Checked=!(scfg.sys_misc&SM_CLOSED); + FeedbackCheckBox->Checked=scfg.node_valuser; + AliasesCheckBox->Checked=scfg.uq&UQ_ALIASES; + NewUsersCheckBoxClick(Sender); + + if(scfg.sys_misc&SM_USRVDELM) + DeletedEmailYesButton->Checked=true; + else if(scfg.sys_misc&SM_SYSVDELM) + DeletedEmailSysopButton->Checked=true; + else + DeletedEmailNoButton->Checked=true; + + DNSAddressEdit->Text=MainForm->mail_startup.dns_server; + MaxMailUpDown->Position=MainForm->mail_startup.max_clients; + MaxFtpUpDown->Position=MainForm->ftp_startup.max_clients; + NodesUpDown->Position=scfg.sys_nodes; + + for(i=0;i<sizeof(tz_str)/sizeof(tz_str[0]);i++) { + char str[128]; + if(tz_val[i] && !(tz_val[i]&US_ZONE)) + sprintf(str,"%c%u:%02u %s" + ,tz_val[i]&WESTERN_ZONE ? '-':'+' + ,(tz_val[i]&0xfff)/60 + ,(tz_val[i]&0xfff)%60 + ,tz_str[i] + ); + else + strcpy(str,tz_str[i]); + TimeZoneComboBox->Items->Add(str); + } + for(i=0;i<sizeof(tz_val)/sizeof(tz_val[0]);i++) + if((scfg.sys_timezone&((short)~DAYLIGHT))==tz_val[i]) + break; + + TimeZoneComboBox->ItemIndex=i; + DaylightCheckBox->Enabled=scfg.sys_timezone&US_ZONE; + DaylightCheckBox->Checked=scfg.sys_timezone&DAYLIGHT; + if(scfg.sys_misc&SM_MILITARY) + Time24hrRadioButton->Checked=true; + else + Time12hrRadioButton->Checked=true; + if(scfg.sys_misc&SM_EURODATE) + DateEuRadioButton->Checked=true; + else + DateUsRadioButton->Checked=true; + + WizNotebook->PageIndex=0; + ProgressBar->Max=WizNotebook->Pages->Count-1; + IllegalCharsLabel->Caption="Illegal characters: '" + ILLEGAL_QWKID_CHARS "'"; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::NextButtonClick(TObject *Sender) +{ + if(ProgressBar->Position==ProgressBar->Max) /* Finished */ + { + // Write Registry keys + if(AllNodesTelnetCheckBox->Checked) + MainForm->bbs_startup.last_node=NodesUpDown->Position; + MainForm->ftp_startup.max_clients=MaxFtpUpDown->Position; + MainForm->mail_startup.max_clients=MaxMailUpDown->Position; + strcpy(MainForm->mail_startup.dns_server,DNSAddressEdit->Text.c_str()); + + MainForm->SaveSettings(Sender); + + // Write CNF files + strcpy(scfg.sys_name,SystemNameEdit->Text.c_str()); + strcpy(scfg.sys_id,QWKIDEdit->Text.c_str()); + strcpy(scfg.sys_location,SystemLocationEdit->Text.c_str()); + strcpy(scfg.sys_op,SysopNameEdit->Text.c_str()); + strcpy(scfg.sys_pass,SystemPasswordEdit->Text.c_str()); + strcpy(scfg.sys_inetaddr,InternetAddressComboBox->Text.c_str()); + strcpy(scfg.qnet_tagline,QNetTaglineEdit->Text.c_str()); + scfg.sys_nodes=NodesUpDown->Position; + scfg.sys_timezone=tz_val[TimeZoneComboBox->ItemIndex]; + if(DaylightCheckBox->Checked) + scfg.sys_timezone|=DAYLIGHT; + if(Time24hrRadioButton->Checked) + scfg.sys_misc|=SM_MILITARY; + else + scfg.sys_misc&=~SM_MILITARY; + if(DateEuRadioButton->Checked) + scfg.sys_misc|=SM_EURODATE; + else + scfg.sys_misc&=~SM_EURODATE; + if(NewUsersCheckBox->Checked) + scfg.sys_misc&=~SM_CLOSED; + else + scfg.sys_misc|=SM_CLOSED; + if(AliasesCheckBox->Checked) + scfg.uq|=UQ_ALIASES; + else + scfg.uq&=~UQ_ALIASES; + scfg.node_valuser=FeedbackCheckBox->Checked; + + if(DeletedEmailYesButton->Checked) + scfg.sys_misc|=(SM_USRVDELM|SM_SYSVDELM); + else if(DeletedEmailNoButton->Checked) + scfg.sys_misc&=~(SM_USRVDELM|SM_SYSVDELM); + else { + scfg.sys_misc|=SM_SYSVDELM; + scfg.sys_misc&=~SM_USRVDELM; + } + + if(!save_cfg(&scfg,3)) { + Application->MessageBox("Error saving configuration" + ,"ERROR",MB_OK|MB_ICONEXCLAMATION); + } + Close(); + return; + } + WizNotebook->PageIndex++; + ProgressBar->Position=WizNotebook->PageIndex; + if(ProgressBar->Position==ProgressBar->Max) /* Last page */ + NextButton->Caption="&Finish"; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::BackButtonClick(TObject *Sender) +{ + WizNotebook->PageIndex--; + ProgressBar->Position=WizNotebook->PageIndex; + NextButton->Caption="&Next >"; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::CancelButtonClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::LogoImageClick(TObject *Sender) +{ + LogoImage->Visible=false; + ProgressBar->Visible=false; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::TitleLabelClick(TObject *Sender) +{ + LogoImage->Visible=true; + ProgressBar->Visible=true; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::WizNotebookPageChanged(TObject *Sender) +{ + TFont* current; + + switch(WizNotebook->PageIndex) { + case 0: + current=IntroductionLabel->Font; + NextButton->Enabled=true; + break; + case 1: + current=IdentificationLabel->Font; +// ActiveControl=SystemNameEdit; + if(!SysopNameEdit->Text.Length()) { + char username[41]; + DWORD len=sizeof(username)-1; + GetUserName(username,&len); + SysopNameEdit->Text=AnsiString(username); + } + if(!SystemNameEdit->Text.Length()) { + char bbsname[41]; + DWORD len=sizeof(bbsname)-1; + GetComputerName(bbsname,&len); + SystemNameEdit->Text=AnsiString(bbsname); + } + VerifyIdentification(Sender); + break; + case 2: + current=TimeLabel->Font; + NextButton->Enabled=true; + break; + case 3: + current=InternetLabel->Font; + if(!InternetAddressComboBox->Items->Count) { + if(scfg.sys_inetaddr[0]) + InternetAddressComboBox->Items->Add(scfg.sys_inetaddr); + char hostname[128]; + gethostname(hostname,sizeof(hostname)-1); + InternetAddressComboBox->Items->Add(hostname); + HOSTENT* host=gethostbyname(hostname); + SOCKADDR_IN addr; + for(int i=0;host->h_addr_list[i];i++) { + addr.sin_addr.s_addr + =*((DWORD*)host->h_addr_list[i]); + InternetAddressComboBox->Items->Add(inet_ntoa(addr.sin_addr)); + } + } + VerifyInternetAddresses(Sender); + break; + case 4: + current=QWKLabel->Font; + if(!QWKIDEdit->Text.Length()) { + char bbsname[41]; + char qwkid[9]; + int len=0; + strcpy(bbsname,SystemNameEdit->Text.UpperCase().c_str()); + for(char*p=bbsname;*p && len<8;p++) { + if(strchr(ILLEGAL_QWKID_CHARS,*p)) + continue; + if(!len && isdigit(*p)) + continue; + if(*p<=' ') + continue; + qwkid[len++]=*p; + } + qwkid[len]=0; + QWKIDEdit->Text=AnsiString(qwkid); + } + if(!QNetTaglineEdit->Text.Length()) { + QNetTaglineEdit->Text = SystemNameEdit->Text + + " - " + InternetAddressComboBox->Text; + } + VerifyQWK(Sender); + break; + case 5: + current=MaximumsLabel->Font; + NextButton->Enabled=true; + break; + case 6: + current=OptionsLabel->Font; + NextButton->Enabled=true; + break; + case 7: + current=VerifyLabel->Font; + VerifyPassword(Sender); + if(!NextButton->Enabled) + ActiveControl=SysPassVerifyEdit; + break; + case 8: + current=CompleteLabel->Font; + break; + default: + return; + } + + /* default to inactive */ + IntroductionLabel->Font->Color=clGray; + IdentificationLabel->Font->Color=clGray; + QWKLabel->Font->Color=clGray; + TimeLabel->Font->Color=clGray; + InternetLabel->Font->Color=clGray; + MaximumsLabel->Font->Color=clGray; + OptionsLabel->Font->Color=clGray; + VerifyLabel->Font->Color=clGray; + CompleteLabel->Font->Color=clGray; + + /* active */ + current->Color=clYellow; + + BackButton->Enabled=WizNotebook->PageIndex; +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::VerifyIdentification(TObject *Sender) +{ + NextButton->Enabled=(SystemNameEdit->Text.Length() + && SystemLocationEdit->Text.Length() + && SysopNameEdit->Text.Length() + && SystemPasswordEdit->Text.Length() + ); +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::VerifyPassword(TObject *Sender) +{ + NextButton->Enabled=(SystemPasswordEdit->Text==SysPassVerifyEdit->Text); +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::VerifyQWK(TObject *Sender) +{ + char qwk_id[9]; + + sprintf(qwk_id,"%.*s",sizeof(qwk_id)-1 + ,QWKIDEdit->Text.c_str()); + NextButton->Enabled=( + strlen(qwk_id)>=2 + && isalpha(qwk_id[0]) + && strcspn(qwk_id,ILLEGAL_QWKID_CHARS)==strlen(qwk_id) + && QNetTaglineEdit->Text.Length()); +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::QNetTaglineEditKeyPress(TObject *Sender, + char &Key) +{ + if(Key==1) /* Ctrl-A */ + QNetTaglineEdit->SetSelTextBuf("\1"); +} +//--------------------------------------------------------------------------- + +void __fastcall TConfigWizard::VerifyInternetAddresses(TObject *Sender) +{ + NextButton->Enabled=(InternetAddressComboBox->Text.Length() + && DNSAddressEdit->Text.Length()); +} +//--------------------------------------------------------------------------- +void __fastcall TConfigWizard::TimeZoneComboBoxChange(TObject *Sender) +{ + DaylightCheckBox->Enabled=tz_val[TimeZoneComboBox->ItemIndex]&US_ZONE; + if(!DaylightCheckBox->Enabled) + DaylightCheckBox->Checked=false; +} +//--------------------------------------------------------------------------- + +void __fastcall TConfigWizard::NewUsersCheckBoxClick(TObject *Sender) +{ + AliasesCheckBox->Enabled=NewUsersCheckBox->Checked; + FeedbackCheckBox->Enabled=NewUsersCheckBox->Checked; +} +//--------------------------------------------------------------------------- + diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.dfm b/src/sbbs3/ctrl/ConfigWizardUnit.dfm new file mode 100644 index 0000000000000000000000000000000000000000..0e5d5e28f9ca8cdbd911a07a4278a6a917ba67ab --- /dev/null +++ b/src/sbbs3/ctrl/ConfigWizardUnit.dfm @@ -0,0 +1,1160 @@ +object ConfigWizard: TConfigWizard + Left = 489 + Top = 424 + Width = 599 + Height = 408 + Caption = 'Configuration Wizard' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnShow = FormShow + PixelsPerInch = 120 + TextHeight = 16 + object Shape1: TShape + Left = 0 + Top = 8 + Width = 198 + Height = 367 + Brush.Color = clBlack + end + object TitleLabel: TLabel + Left = 20 + Top = 20 + Width = 141 + Height = 32 + Caption = 'Synchronet' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clWhite + Font.Height = -23 + Font.Name = 'Arial Black' + Font.Style = [] + ParentColor = False + ParentFont = False + OnDblClick = TitleLabelClick + end + object IntroductionLabel: TLabel + Left = 20 + Top = 63 + Width = 105 + Height = 21 + Caption = 'Introduction' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clYellow + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object IdentificationLabel: TLabel + Left = 20 + Top = 87 + Width = 113 + Height = 21 + Caption = 'Identification' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object QWKLabel: TLabel + Left = 20 + Top = 159 + Width = 68 + Height = 21 + Caption = 'QWK-ID' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object InternetLabel: TLabel + Left = 20 + Top = 135 + Width = 68 + Height = 21 + Caption = 'Internet' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object MaximumsLabel: TLabel + Left = 20 + Top = 183 + Width = 96 + Height = 21 + Caption = 'Maximums' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object OptionsLabel: TLabel + Left = 20 + Top = 207 + Width = 68 + Height = 21 + Caption = 'Options' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object VerifyLabel: TLabel + Left = 20 + Top = 231 + Width = 53 + Height = 21 + Caption = 'Verify' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object LogoImage: TImage + Left = 8 + Top = 16 + Width = 177 + Height = 41 + Picture.Data = { + 0A544A504547496D616765F62C0000FFD8FFFE000857414E473202FFE000104A + 46494600010101006400640000FFDB004300100B0C0E0C0A100E0D0E12111013 + 18281A181616183123251D283A333D3C3933383740485C4E404457453738506D + 51575F626768673E4D71797064785C656763FFDB0043011112121815182F1A1A + 2F63423842636363636363636363636363636363636363636363636363636363 + 6363636363636363636363636363636363636363636363FFC0001108008B0310 + 03012100021101031101FFC4001F000001050101010101010000000000000000 + 0102030405060708090A0BFFC400B5100002010303020403050504040000017D + 01020300041105122131410613516107227114328191A1082342B1C11552D1F0 + 2433627282090A161718191A25262728292A3435363738393A43444546474849 + 4A535455565758595A636465666768696A737475767778797A83848586878889 + 8A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5 + C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8 + F9FAFFC4001F0100030101010101010101010000000000000102030405060708 + 090A0BFFC400B511000201020404030407050404000102770001020311040521 + 31061241510761711322328108144291A1B1C109233352F0156272D10A162434 + E125F11718191A262728292A35363738393A434445464748494A535455565758 + 595A636465666768696A737475767778797A82838485868788898A9293949596 + 9798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2 + D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C0301 + 0002110311003F00F3FA2800A2800A2800A2800A2800A2800A2800A2800A2800 + A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A280 + 0A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A28 + 00A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2 + 800A2800A2800A2801D1C6F2B848D19D8F40A326B5ED7C3975280D3BAC23D3A9 + AC6B578D25AEE6B4E939EC6A41E1AB251FBC79643F5C0AB4BA0E9ABFF2EC0FD5 + 89FEB5E74F1751BD343B161E0B715B42D35863ECC07D188FEB5567F0C59BFF00 + AA79223F5C8FD694717522F5D42587835A6864DE7876EADC168CACA83D383593 + 246F1B6D752A7DC57A54AB46AAD0E3A949C1EA368AD8C828A0028A0028A0028A + 0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A002B5341B28AF6 + EA413A6F8D1338C91CE7DBF1ACAB49C60DA2E9C54A49337BFB0F4EFF009F7FFC + 7DBFC697FB0B4EFF009F7FFC7DBFC6BCCFAD55EE772A14FB08DA1E9A149FB3F4 + 1FDF6FF1AE5B50B716D74C8BF70F2BF4AEAC3569CE4D499857A518ABC4AD4577 + 1CA1450014500145001450014500145001450014500145001450014500145001 + 4500145001450014500145001450014500145002A2339C22963E8066AD269D70 + D8DCA13FDE35129A8EE5462E5B1B96FE0ABC9E04956E6101C64020D49FF0825E + FF00CFDC1F91AE0799413B599B7B07DC3FE104BDFF009FB83F23585AC698FA4D + EFD9A495247DA1895CE067EB5AD0C646B4F9522274B955EE51A2BB4C828A002A + F699A6C9A84B81F2C4BF79F1FA0F7A8A93508B932A11729591D6D9D95BD947B6 + 08C0CF56EE7EA6ACD78939393E667A914A2AC8507069E0E6A1941466900B591A + AD9A28F336068CF0CA474AD68C9C644548DE260CFA5ABE5ADDB07FBADFE359D2 + 44F136D914A9F7AF5E9D4E6D1EE79D3872EAB619456C66145001450014500145 + 0014500145001450014500145001450014500145001450015D2F8563C5BCF2E3 + EF305FC87FF5EB9B14ED499B505EF9BD4A2BC83D044572DB6073ED8AE575D51B + A16EE411FCABB309F118623E132A8AF50E00A2800A2800A2800A2800A2800A28 + 00A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2 + 802482DE5B86DB1216F7EC2B56DB474501AE1B71FEEAF4AC2AD6E4D16E6B4E9F + 36AF6345628E14DB1A2A8F61503F2E0571C5B6EECE86ADA23BEB35D9690AFA20 + FE553578B2DD9A3DC2BCD3C67217F11CE08FB8AAA3FEF907FAD7A196AFDEBF43 + 1ADF0987457BA720514012DB40D73711C29F79CE3E95DB5AC11DB5BA4318C2A8 + C7D7DEB83192DA275E1A3BB2714E15E79D84525C4511C3B807D2912FA0271BF1 + F5155ECE4D5C97349D8B2AC194153907BD2D645054576BE65AC8BFECE69C7469 + 83D8E7F1DC524889326C95430F7ED5E8DFAA393D4CCBAD35E305E1CBA7A77154 + 2BB29CF9D1CD38F2B0A2B42028A0028A0028A0028A0028A0028A0028A0028A00 + 28A0028A0028A0028A002BB2D063F2B4987D5B2C7F135C78C7EE25E6746197BC + 68D02BCB3B8AF7ED8882FA9AE5B5B6CDCA2FF752BBB08BDE473621E866D15E91 + C414500145001450014500145001450014500145001450014500145001450014 + 50014500145001450014500145002805880A0927B0AD6B2D1C901EE891FEC0FE + B58D6A9C8BCCD29C3999ACA891A85450AA3A0028AF3EF7DCEC435CE054118DD7 + 08BEA40AB8EC4BDCF42518503D052D7885B0AF2AF114824D7EF581C8F348FCB8 + FE95E9E58BF7927E4615F6466D15ED9CA145006E786200D34D391F74051F8FFF + 00AABA3AF2B12EF519DF415A0870A5EDC572B37665CE14B912C6C8FF00DE1CE6 + A12A46704381E95D6B6307B96ECAE96042ADB88CE4003A55AFED08BFB8FF0095 + 613A6DBB9A466920FED08FFB8FF9523DEC6D1B2847E463A54FB263E745682D91 + A54246E53D41ABBF62B6FF009E43F5AA9D4927A0A3056D451656E3FE590FCCD4 + 2FA4583B166B642C7BF352AB4E3AA6374E2F7462C9A5DAC808D850838CA9ACEB + 8D2658F2626120F4E86BD1A75DDED23927496F12DF87B4A5BA9A492EA3CC71FC + BB5B8CB56FFF006369DFF3EA9FAD73E23113551A8BD0D68D28B85E483FB1B4EF + F9F54FD6A1B9D334D8222DF658F3DBAD631AF55BB731A3A54D2BD8874DD2ACA6 + 89E492DD0E5B03AD5BFEC5D3BFE7D53F5AA9E22A293498A34A16D83FB174FF00 + F9F54AAF77A4596C548ED5771F4CD28E22A5F56374616D8A71F8662DFBA499B6 + FF00757FC6AF47A1E9E83FD46E3EACC4D693C5CDFC3A111C3C56E2BE8BA7B2E3 + ECCA3E848ACFBBF0DC6C0B5AC854FF0075F91F9D14F1538BF7B5413A116B4D0C + 0B8B696D6429321522A2AF52325257470B4D3B30A2988BB67A55D5E00D1A6D8F + FBEDC0FF00EBD6BC1E1B854033CCEE7D146057256C4A8BE58EE7453A1CDAC8B4 + 9A1D828FF525BDCB1A79D1EC08C7D997F026B91E22A3EA742A30EC412F87EC9C + 7C81E33FECB67F9D65DE68171002F091320EC06187E15BD2C53BDA6655282B5E + 2649041C118345779C81D4E2BBDB68FC9B68A31FC0807E95C18D7A24756196AD + 93515E71D855BC569248D1064E326A9B6830CF3B4D73233138C2AF0057442ABA + 6B4DCCE54F9DEA4EBA269CA31F6607EAC4FF005A6C9A0E9F203884A13DD58D0B + 15553BDC1D0A76B58C7D4BC3D2DB2196D98CB18E4823E61FE358B5E951AAAAC6 + E7155A6E9CAC1D4E05759A468D68D680CF0891C9E49CD658BA92843DD2F0F052 + 96A5F1A269A7FE5D53F334EFEC3D37FE7D13F335E6FD66AFF31D9EC69F6317C4 + 5A75BC2D6F0D95B012C84F0B924D4BA7F84F7287BE94827FE59C7FD4D767D69C + 2926F59330F60A551A5A246C47E1CD2917FE3DB77BB313FD6B9CF15DA5A59DCC + 11DAC223CA12D8279E78ACF0D5EA54AA949E85D7A50853BA46153E28A49E411C + 48CEE7A051935EA3692BB3812BE88DFB1F08DD4C035D48B029FE11F3356D41E1 + 1D3631FBCF3663FED3E3F957955F1EEF6A7F79DB4F0C92BCCB43C39A4A8C7D8D + 7F1663FD6A393C2DA4C8B8103467D5643FD6B99636B277B9ABA14EDB1977BE0A + 182D657273FDC9475FC47F857357BA7DD5849B2EA168CF627A1FA1AF4B0D8B55 + BDD7A338EAD170D56C56ABB65A6CB74039F923F53D4FD2BAAA4D423766508B93 + B1D1689A2D94B77E5CB0F98A1093B89ADFFF00847348FF009F18FF0033FE35E2 + D7C55553D19DB1A50B6C28F0DE8E7FE5C63FCCFF008D64789F43B2834F416368 + 893BC800604F4C1A5471555D44A52D052A71B3B229E9DE0A96601EF26F294FF0 + A8E6B760F086910E0B42F291DDDCFF004AD2BE6136ED4F444468C56FA960F867 + 472306C53F0247F5ACEBEF04D84CA4DA4925BBF604EE5FD79FD6B1A78FAB17EF + 3BA1CA9459C66ABA55D69373E4DD2633CAB8FBAC3DAA957BB4E6AA454A3B3391 + AB3B30A500B1C2824FA0AB11A9A6F87B50D44FEEE3D89DD9F802BA5B3F02DB20 + 06F2E6490FF7631B4579B89C7AA6F961AB3A2147AC8D48FC2BA347FF002E818F + FB4EC7FAD3DBC33A3B0C1B14FC091FD6BCD78DAEDDF98DBD9C7B112F8534C8A4 + 32408F1376C3671F9D55BBD1EE2DC164FDEA0EEA391F85691C54A6FF00785462 + 92B232CF5A8A490A8E2BAE2AE26EC5CD0215BCBE293AEF40A4906BA55D22C118 + 32DB2860720F35C989A9284F962F41ADAE5DA2B8462138ACC9740D2A695E592C + A367762CC4E7926B5A75674F583B09C53DCE6FC65A6D8E9F656E6D2D52277939 + 619CE00E95C857BF839CA7494A4EECE3AA929590515D46674BE182BF639401F3 + 0939FA607FF5EB6ABC8AFF00C467A34BE0428A7035833502AAE30CA08F7A85AC + A13CA82A7D8D0A4E22714C85EC5B394704FBF06A26578F89148F7ED5AA9A910E + 2D075A29923E262B22904F519AD4ACAA1AC028AC8B315862471FED1A6152CC00 + E49E0576A3999B304421855076EBF5A92B8DBBBB9D0959074AC3D4EEBCC936A9 + E056D423795CCEABB23534F8FCBB288772327F1AB1594DDE4CB8EC8426994914 + 145300A4A09666EAD6D1C88199720F06B98BCB36B66C8C98CF43E95E96167A72 + B38EBC75B956BA1D27440A16E2EC024F2B1FA7D6B6C454E48E9BB33A30E696A6 + F018181D28AF28EF0A2800A28031F5AD29278DAE2150B28E481FC55CC57A9859 + F342CFA1C35E3CB2BAEA58D3E2F3AFE08FB1719FA57735CF8D7EF246D865A362 + D2D709D21DF34B486828A063979E2B8BD7ED16D35260830920DE07A575E0E56A + 8D7739B12AF1B952C937DDC63DF3F9577562BB6D53DF9AD31CF6446156E591D6 + 9D5E633B462C286E0CCC017030A7D055814DBB8D2B0F53DAB83F154DE6EB720C + FDC50BFE7F3AEAC0AFDEB7E473E2DFB857D27499B539C2A7CB18FBCE7B5777A6 + E996BA7421208C6EC7CCE7A9AD31D5FF00E5DAF999E1A9E9CECBB4A0E2BCB3B0 + 75148428A86EED20BD81A0B88C3A3763DBDC7BD38C9C5DD10D5D599C44BA07D8 + B50749FE6881CC7FED0F7ABE380457AD3ABED52673421C9746B78797F7D349E8 + 00ADEAF32BFC6CD96C148D1A3BABB282C9F773DAB1BD8092941A42168A423375 + FD35353D2A684A832005A33E8C2BCAD559982A8249EC2BDBCB677838BE872D65 + AA65FB7D2D9B0D336D1FDD1D6BACD0BC3B19559E68C2C67EEAF76FAD3C5E2796 + 3A174A9DB5675288B1A04450AA3A0029D5E19B85140828A00C6D6B4B578DAE60 + 5C38E5D4771EBF5AE5663C57A9859F3475E8291B3E125CDCCADE89FD6BAAAE4C + 57F158D6C84269335CE30A4CE2819C67C409326C630DFDF62BF960FF003AE3AB + E8B04AD423FD7538AB7C6C28AEB3234B43BE5B3BA2B21C45270C7D0F635D6021 + 8020E41E8457998B85A7CDDCEEC3CAF1B0B4EAE43A10B4E15208282011823228 + 194AE6D3683240304755F5FA55359B3DEBA60F9918C972B1DBF1DEB655B7283E + A3359D55B174C751581A18D28C4F20FF0068D58B087748653D17A7D6BA64ED13 + 14B53468AE63629EA3722184A83F31AC100CD32AF7638AEDA0AD1B9CD55DDD8E + A0615401D00C504D719D2266A19A748465CF3E82A92BBB21376215D423279560 + 3D6AD0218020E41E95528389319290B49505321B988CB1119E3D31DEB2668301 + A39572A7839AE8A52E8635110E97A385BB69E5F9A343FBB07B9F7FA56F5557A9 + CF2152872C429090AA589C01DEB0352B35F460E00635345324C0ED3C8EA0D5B8 + 34AE4A926EC49454140402307A1AE4357B5F267F300E18E0FD6BAF092B4EC73E + 215E3724F0EC7BF5456FEE296FE9FD6BADA9C5BFDE15865EE0A296B90DC826BA + 8E1386C96F41490DEC72B84C1527A66AFD9BB5C9E757B1668ACCD051D6B9FF00 + 16C798E0971D095FF3F956F8676AA8C6BABD366469285AE891D857731AEC455F + 418AD71AFDE48CF0DB0EA7839AE06758A29E0D218ECF7AE06481B52D5EE1F9D8 + 64393EBCF4AEDC1BE5E691CD8957491DC69F669676CB1A800E39C55B06B8672E + 693674A565616ABDD5E4168332BE09E8A3926A6317276426D2576531AF41BB1E + 5C98F5E2B4A09E3B8884913654D5D4A3282BB263352D897A52D6236666BB106B + 78E5C728D8FC0FF915875DD41DE0633DCDDF0FA62D647FEF3D6B038AE4ABF1B2 + 96C3B39A4665452CC40503249ED5981952F88AD51CAA23C80771C0AB9A7EA505 + F83E5E55D7AAB75ADA7879423CCC9BA7A22ED19AE701722B8092D22B7BA9C46A + 07EF1B27F1AEDC1C9AE6444A3D4D2D134F17975B9C6628F96F73D8575C000303 + A5678A9DE76EC35B0554D4AFE3D3ED8CB20C93C2A8EE6B9E1173928A19CBCDAE + DFCEE4AC8235F451441AD5F42E18CC641DD5F9CD7A9F56A695AC473B3ABB0BB4 + BDB549D0633C11E86AC579728F2C9A2C2B86D7E0167A83C6A3E57F9D47B1FF00 + EBE6BAB04FDFB132D8AB6D77776A0985CC40F523BD741E1CBBBABAB893CF99DD + 557A135D588A70E472B6A28377B1D0D266BCA342AEA331834FB894120AC64823 + B1C715C44BE22BC887CD74E4FA03CD7A183A31A89DD11526E1B18FA8EA371A8C + AAF70E5B68C2E7B0AA95ED420A11514714A4E4EEC28AB242AFD86AD716584CEF + 8BFBADDBE959D4A6AA46CCB84DC1DD1D05A6B16D723AEC6F4357D1D5C655811E + D5E554A7283B33D084D4B543C1A7562CB168A430AC4B9884770E141033C56D45 + EACCEAAD08C311DEB6ED9F75BC67FD915559684D27A92E68DD5CE6E65CCA4DDB + A81C935A51288A3083B56951E8919C16AC7EEA6BB8552C7802B348D0E7EF6E0C + F3139E2974D4DF7B1FA2FCD5DF6E5A671DEF337E8AE03B02B16EA42F33127BD6 + D456A6551E8440FA56CDA67ECB1E7D2AEB6C4D3DC9A90D731B323B897C980B00 + 327A56709BCD6DAC339E2B6A71D2E6537AD8D04408814740296A2F72EC154750 + 98861183C0E4D5D357913376453EB52DA4AB1CDB98E06306B792BAB1927665EF + B643FDEFD28FB643FDE3F9561ECE46BCE84FB6C3FDE3F9552D5A05B9B695A320 + E7E618ABA69C249B266D4A2D22AF85A3FF008F897E8A3FCFE55D0D18977AAC28 + 2FDDA0A47711C6CFFDD19AC2D735662B31762CC724F5A75BAEEB88F9E322BB1E + 88E65B9BA7A9C74A4AE13AC2B03C54F98634F461FC8D6F865FBD4635BE0652F0 + FC5BE6FF007980AEC2AB18FF00784E1D7B82D283CD719D224D324119791B03F9 + D66C9AC4849F29001FED726B5A54B9B57B113A9CBA2203ABDD1C8DC9CFFB3468 + 76AA27518C84F989F535BCA2A9C1D8C937392B9D2D2D79E758D9655861791BA2 + 8CD7273CCF3CCD239CB31AEAC3477673D67B218A0B100024FA5741A144F0A48A + EC32D8217D2B4C435C962292D6E6B500E2BCE3A0A7AC11FD9EFF00518FCEB9D3 + D2BB70FF000184F73A4D1D7669D17FB593FAD5EAE3A9F1B2D6C158FE25B864B5 + 8E1538F31B2D8F4157415EA214B630A1B5966E546147527A56B68B0C50DEA912 + 6F908238E95DB5A7EEB488847AB3A3CD2E457985582B869DC34D238E8CC4FEB5 + D7845AB225B1D668D07D9B4E8C63E671BDBF1ABD935CD51DE6D95617355EEACE + DAF36FDA220FB7A649E2A632717742B100D1F4F1FF002ECBF99FF1A3FB1F4FFF + 009F65FCCFF8D6BEDEA770B22CDBDBC56B1F9702044CE702A5CD64DB6EEC6158 + 3E268548826C0DC32B9EFF00E7AD6B41DAA213D8E6A635D0F8517114EFF415E8 + 623F84C887C46F939A2BCA3631FC573183C3F7255B6B36D51F8919FD335E6B5E + DE5CBF74DF99C7887EF241457A273855E8748BC9E25963452AC320EE1513A918 + 2BC8A8C1C9D90FFEC3BEFF009E6BFF007D0A5FEC2BEFF9E6BFF7D0ACBEB34CD3 + D84C46D16F631B991401DF754D126A507F079AA3D186693AB4EA2D46A13832EC + 5A9CD1604C1D0FA48B8FD6B56CEF16E4118C30E7AF5AE2AB4925CC8E9A752FA3 + 2D52D729BA0A836C0EEFE6919ED9354AFD04EDD4AD35AC67EE9C55AB45D96E17 + 39C135729371D498A499351591A10245FE94F21E83A54F552772520ACED52E76 + 2F94A793D6AA946F2429BB44C726B4F454CBCB27A00A2BAEAE9067353D668D6A + 2B80EC0270A49E805605C30DE7DEB7A0B531ABB11AB7A574312EC8957D001555 + FA0A9751D41AE636286A8F8455FC6A969E37DDAFA0C9AEA8694CC25ACCD9A69A + E7366281920564DE1CDC39EB935AD2DCCEA6C4229E96B2CCA5A303D3935BB928 + EACC926F617EC175FECFE747D82E7D17F3A5ED603E490D7B1B844676DB85EBCD + 25B4AC8C637E8453BA9A76159C5EA5AD1211059B71F7A463FAE3FA568D73D577 + 9B66F4D5A290B505E36DB661FDE2054477454B632D8050493803D68B378E5BB8 + D51D58839201CD75EBCAD9CDD5237A8AE13A82B96F12CBBA745F73FE15D5845F + BC31C43F70B1E1A8FEEB63D5BFA574B518A77A8C7417B88296B94DD18BA8CCD3 + 5C119F953802A931C0C7AD7A14D5A291C937777110126B7B4450239180E49033 + 515DFBA551F88D4538E29D5E7B3B0A1ADC9B2C08CE37B05AE76BB70EBDC396B7 + C45A4952DE302301A52393E95ADA1ABEC9256C9DC7009A9ADF036FA853F89235 + 81CD2D701B999AE49B6D523CF2EFFA0AC36FBB5DF417B8615373ABB45D96912F + A20A981C5704B56CD4766B9ED75C1D463565DC11338FC6B5C3AF7C896C519259 + 251863851D157802AE787D036A4CDFDC435D93D29BB10B5674D45798591DCC86 + 3B695FFBA84FE95C4A0DF3A21E84E2BB70AB46C89743BB5C2A81E8314B915C45 + 583228C8A420C8A32298583349BA81D8326B1BC487FD162FF7FF00A56B47F888 + 1EC72B29E6BAAF0CA6DD3D9BFBCF5DF8AFE119C3735F75264D7986D639BF1C49 + B3478D011F3CC011EC013FE15C1D7BB805FB9F99C388F8C28AEE300AECF4F39D + 3EDF1FF3CD7F9571E2FE1474E1F7658A506B80EC1B3C5E74453383D8D6718268 + CE0A9FA8AD29C95ACCCE69EE896279BA7965D4F50455D8608E33BD6158DC8E76 + D4CDDB66386BBA27A5AC4D06C8E123662718158F2CA5989CD6D497533A8C62DC + 3AF463F4AD2D3A5F36371C706AEAC7DDB934DEB62E515CA740514011CF288626 + 73DBA573B3CA6590B1EF5D5878EECE7ACFA11135BBA426DB20DDDC93FD2AF11F + 011457BC5EA2B88EB22BA7D9031F5E2B9F99B2D5D5411CF558EB342F751A8EEC + 335D1D4E2374551D828AE73631F549374E467A714CD2CFFA50CF706BB12B5339 + 9BF7CD83495CA740959D3DAC81C951B949E315AD3924F5339ABA1B1DACAE7952 + A3D4D68C682340ABD053A92BE88508DB51D4564595352976C6B10FBCC771FE95 + 9E572A4F71C835D14D5A2633D59AF6CBB2DD0631C67F3E6A506B096ACD9682D5 + 4BF6F9634F726887C413D8E6B57B8669CC20E157A8F5356BC2F16EBB924C7DD5 + C7E75E8CD72D0671475AA750296BCA3BD013804FA5717AD49BEF719E8BFCF9AE + CC1AF7CE6C4BF74DFF000FC7B21C9ECA056CD73D7779B36A6AD04148EDB6366F + 419AC4D0E3E6D5A3DC7646CDEE4E2A16D5720E2119F76FFEB57B11A0EDAB3CE7 + 54D0B6CF96BE69C9C64FD6B77479032C8A001EC2B8F10BDD674D2DCD4A729EC6 + BCF67615356B01A8E9F25BEEDAC7946F461D2B9E8B4EBE8A3549A072E3825464 + 1FC6BB28558A872C8E6AB4DB97322EDAE95712B8DEA635EE5BFC2BA086258625 + 8D06154605635EA29688BA706B563E9C0E6B999A339CD5AE45C5EED53958FE51 + F5EF55146F9157D580AF460B96291CD277675EBC003D053ABCD37615CD6AAFBF + 5197DB03F4ADF0EBDE6673D8A84E056AF86D32F70FF415D35BF86C88FC46F668 + DD5E71A58A9ABCA23D3663EA00FCCD7270BA473AB904E0835DD864F9199CF468 + EE1183A061D08C8A5AE02C2B9CD7EEF52B1BADF148C2DDC0DA401807B8AE8C3C + 6329DA44C9B4AE8CB5D6F536E93B7E43FC2AF585CEAD7B308D6E580FE26DA30B + 5DB52951826EC446526CD7FB05FF00FD051BFEFD0A3EC37FFF004146FF00BF42 + B8BDA53FE4FC4D35EE34D9DF0049D55801D7F742B9FBCBB9A6F9679CCA149DA4 + 802B7A1C937751B58995D2DCCF63B9863D6BB1D0D366991FB926B4C6690489A5 + BB3428CD7986E6078B74EB8D46CA2FB2A6F689CB15CF2463B571A745D4C75B19 + FF00EF835ED60ABD38D2E593B338EB539395D228D15E91CA15D46817025B1119 + 3F3447047B76AE6C52BC2E6F41DA669D2D79A770E0696A40294503428A5A960C + CEBEB8DE7621E075F7ACF6EB5D74D591CF3776379AD0D1DBF7922FA8069D5F81 + 8A9FC48D5A2B88EB0A28031B55BADEFE5A9E075ACC2735E8528DA271D4779095 + D4DB47E55BC69FDD502B2C4BD1234A3BB24A2B90E8296A4FB620BEB588C72C6B + B282F74E5AAF52EE909BAECB7F75735B758D77EF9AD2F842827009F4AC4D0E76 + EDF74AC7DE8B7631C8AE3AA9CD7A16F76C725FDEB9BC8CB220653C1A5AE13A90 + 86929830A281050CE91219243F28EDEA7D28DF440634CE6699A46EA4E7142807 + 0A7A31C575ECAC8E7DD9B2060628AE43A051546F5B37207F740AA86E29EC7277 + 8FE65DCADEAC6BA1F0BC5B6D6593FBCD8AF4313A51B1C7475A97372815E51DC8 + 65C36D81CFB5711767CED41C7ABEDFE95DF83EACE6C4F4475FA5AEDB5CFAB55F + 06B8AA6B2674C3E142D54D565F274D9DFBEC38A505792412768B382A551B980F + 538AF7CF24E897BD5CD367F22E46E3F2B706BCCA8AF168EE83B4933A10734EAF + 34ED1C0E69D523014ECD2626159BAB6A22DA330C4DFBD6E38FE115A52873C922 + 272E5573063FEB566C17CCD4211FED67F2AEF9ECCE68EE8EAA806BCA3A85CD72 + 770FBEEA66F5727F5AE9C32D5994C8DCE056E787576D9BBF767ADABFF0C98FC4 + 6B6696BCE3432BC44FB6C157FBCE057338AF4B0DFC331A9B9D4E897A2E2D1636 + 6FDE463047A8EC6B4F35C5563CB368D56AAE1934D650EA55C0653D411906B302 + A9D32C8B6E36C99F618AB31C6912ED8D1517D1462AE55252566C2C8751517198 + BAE6A4151AD613963C391DBDAB9A9326BD4C343961AF530A8EEC48E362E38E2B + B3D2B034F88039E2A318EF143A48B79A2BCE370A86EDFCBB39DF76DDB1B1CFA7 + 14E2AED09EC794515F547921562C6EDECAE04A9C8E8C3D454CA2A51698E2F95D + CEB2D2EE1BC88491367D54F51F5A9EBC7945C5D99E945A92BA141A7D4B2828A4 + 00EEA832CC00AA1717A5C6D8F81DCD5C217772672B6853CE69300D749806D156 + B4C056EBAF5539A99BF75951F891AF45711D2155AFAE041013FC47A55415E490 + A4ECAE73D2396624D32BD2471135A47E6DD449D8B0CD74F5C9897AA47451D985 + 15CC6E64EA92664C7A56677AEFA4BDD38EA3F78D7D15311C92772715A55C955D + E6CE8A7F0A0A8AE9F65BB9F6A88AD4A6F439D7396A96215E83D8E45B9617505B + 274573F2B9C735A892A4A328D9EF5CB520D7BDDCDE9C93D07521AC8D18521603 + A902988825BB8E3E07CC7DAA84D33CCD963F41E95B4216D599CA57D111D10B79 + 9A941003F772EDF80E3F5ADBA332EC6DD15C67480EB59773200F3487A0CD694D + 6A44DE8728492493D4D765A247E56970823EF7CD5DB8C7EE24736197BCD9A14B + 5E61DA56D424096A49381DEB8DB4064BD527D4B1AEFC2AB424CE4C43BC923B6B + 35D96B18F6CD4D5C12DD9D91D8783593E27976696573CBB0157415EA448ABA41 + 9C752A9DAC0FA1CD7B8796744AC19030E846696BCE6761A765A918C049B951D0 + D6B453C728CA3835C5569F2BBA3AA9CEEAC4B4E07B1AE766C3A98F2C710CC922 + A0FF0068E2924DE881BB189ABF88E3B64296DF3391C1AC8676772CE72C7A9AF4 + A8D1F671BBDD9C552A734ACBA13274AD0D15776A00FF007549A557E16386E8E8 + E96BCB3A46C8DB2367FEE826B91539CD75E1968CCAA741243C5749A2A6CD322F + 7C9FD6AF11F0130DCBF45701A987E237FF005099F5247E5589915E9505FBB461 + 3F8874333C12ACB136D653C574763ADC1380B391149EFD0FE35388A4E6B996E1 + 097466987560083907B8A322BCEB1B583228CD160B114F770DBAE669153EA79F + CAB12FF5D69018ED4145EEE7A9FF000AE9A145CDDDEC4CA5CA631249C9E69BCF + 602BD239C5C9F5ADFD02F14C46D9DB0C0E573DC561888DE1A1A537691B3466BC + C3A2C266A86B92797A2DE3633FBA61F98C7F5AD29ABCD2F314B48B3CCE8AFA73 + C80A2802486796DE40F139461DC56CDAF8848016E63CFF00B4BFE15CF5A8AA9A + ADCDA9D570D3A1A70EA56F30CA367DAA71769D81AF3E54E49D99D6A69EA84377 + FDD4FCCD46D73337036AFD28505D46E4FA15DD598E59893F5A61435A2666D09B + 4D3A18CCB2840704D537A5C496A5AFECE6FF009E83F2AB36D6AB01272598F19A + E7955BAB23550B3B9628CD626805800493C0AC1D42E1A79491F7474AE8A11F7A + E6755E9628D15DA73162D64F2265931C8AD417AEC321862B9EAC2EEE6B4E5656 + 0FB649FDE149F6C93FBDFA565ECD17CECA7779918B8E49ED5487DEAE986C632D + CD0B4BB68A1D8A7183E953FDBE4FEF7E958CA9A6DB345369086FE4FEF54735DB + CB19466E0D0A9A4EE3736CA07EF54F10ADA5B192333597CCE89FDD5CFE74B63A + 934388E52768E8DDC56EA9F35248CB9F96773663BE908CAC9B87AD38DF4BFDE1 + 5C6E92B9D2A6C6B5EC87F8B15134ECDD589A6A0909C9B1BBE96AAC4905DDDA5B + 27AB9E8B5574AB875BA9672417231935B461FBB6DF53373F7D1ABFDA527A8FCA + 8FED297D47E55CFEC51AFB562FF694BEA3F2AAB7B2E34E95FBB0C7E7551A6A2D + 58529DD33040C903D6BA58AFE48A258D48DAA3038AE8C4454AC99951972DD8FF + 00ED397D47E547F69CDEA3F2AE4F63137F6AC82FEF9A5B494391F7481F8F1593 + A628F399CF4515D34E3CB4DD8C672E69A379753955401B7038E94EFED49BFD9F + CAB9BD8C4DFDA317FB526F51F9565EBB7AF711448E47049E95A51A494D322A54 + 6E2D18D457A0719A7A75C878C42E70CBF773DC55DC915C75236933A60EE850C4 + 5491C8EA72AC41F6AC9A4CB4CB49A8DCA74933F5A7FF006BDC81D57F2AC5D18B + 34556488A6D4EE9972662A073C7158F77A9F2423191CFF00113C0AE8A3455F44 + 6552ABEA67C45A6BA4DC492CC326B6C72DF8D6D5BA232A64C182AF269D6F7F25 + AC85E1201231C8CD7338732B33752B163FB7AF3FE7A27FDF028FEDEBDFF9E8BF + F7C0ACFEAB4FB15EDA40759BC991919D76B0C1F94542A71C93814D538C348873 + 396E412DC2E48539A9E2D6EF218D638E450AA3006C156E8A9AB488E769E83BFE + 120BFF00F9EABFF7C0A55D7EFCFF00CB453FF00151F55A7D87ED6445737B3DE3 + AB4EC1980C0C0C5463DEAD45455909BBEAC29A580A603A3BB9A13FBA99D3FDD3 + 8AB0BAE5F2F1E7E7EAA2A654213DD0D546B61B2F88EF107CD70ABFF0119A8E2D + 62EAF431FB4C80038207CBFCA858584573585ED9B76B8D2493924927B9A2A805 + E293340C42E0533CDC1C8383ED4D21365A8F5ABC886166240ECDCD4BFF000915 + E018F909F5DB593C2D37A94AB4911BF89EEE31F33C43FE0359DA87892F2F6D9E + DC90237E1BE500915AD2C1C1494BB113AEED63168AF40E40A2800A2800048390 + 706ACC57F711747DC3D1B9A99414B72A3271D8BB16B3DA48CFD54D5B8F53B67F + E3DA7FDA18AE49E1DAD8E88D54F72C24F1B8CABAB7D0D3F70AE77168D6E98D38 + AB3A7AE6566F414A5F0B1C772FD2D731B051480CED42E739890F4EA45661E6BB + 6946D139E6EEC6940693CAF435B5CCEC28539A8EEEE4DB43F29F9DBA7B7BD097 + 33484DD95C862D58E312A7E2B5656FEDDC7FACC7D4554A8B5B0A3513DC537907 + 695698D736EC79956A5424BA0F9E3DC12EADC1E655C5453EA1124D84F9D31D47 + AD52A726F5139A4B41CB7B030FBF8FA8A77DAE0FF9EAB49D39760E75DC437507 + FCF55A963BDB71C19545274E4D6C35389937B289AEDDD4E573807DAA0AEB8AB4 + 5239E4EEEE4B0DC4B01CC6C40F4ED5763D490FFAC42A7D4722A274F9B545C276 + D193ADE5BB0FF583F1E28FB541FF003D56B0F672EC6BCF1EE35AFA04FE32C7D8 + 5569F5391C6221B07AF53571A4DEB2265534B229331624B1249EE6A4B69BC993 + 71E41E0D7435756314F5B9A02E6123FD60A5F3E0FF009EAB5CDCB2EC6D75DC3C + F83FE7AAD437B708D6DE5A386CB02714E317757427256D0A28DB5D58F620D6A8 + B8808CF9AB575537B1306BA879F07FCF65A5F3EDFF00E7B2D65CB2EC69CD1EE5 + 7BE9E330EC8DC3163CE3D29BA7BC48AFE6385248EB5A72BE422EB98B827B6FF9 + ECB47DA2DBFE7B2D65CB3EC69CD1EE1F69B6033E72D65DDCFE7CBB80C28E0569 + 4A0D3BB22A495AC8868AE8310048390706AF41A8BA80B32EF1EBDEA270E64546 + 5CACB897D6CFFC7B4FA30A7FDAEDFF00E7AAD72BA73EC6EA71EE35AFED97FE5A + 67E80D5793551D228F3EEC6AA345BDC4EA25B1466B99663F3B923D074A8ABA92 + 5156460DB6EEC9ACD956E519C80A32727E95A7F6A807FCB55AC2AC5B7A1A41A4 + 869B984F3E68349F6987FE7A0A8E49762F99771AF790A8E1B71F4029B05E46EC + DE661001C64F5AAF66ED7279D5C9FEDB0A8F95D698F788FF007A518F4A954DEF + 62B9D0CFB445FF003D0535AEE25FE227E82A9424C4E6881EF58F08A07B9A9E0D + 48280258FF0015AA74AEB42554D4B2B7F6E7A3E3EA3141BE8BB482B2F65234E7 + 431AF62C67CC15135F443A6E6FA0AA54D92E6885EFCFF0A7E66A07B995FAB903 + D0715B469A5B99B9B7B1175A9AD6E5ADA4DC0641E08AA947995894ECEE6A26A1 + 6EC3EF953E8453CDE43FF3D13FEFAAE474A48E8E788C3791F6913F314C6BB4C7 + FAC5FCF34D537D81CD11B5D45DE4FCAA337B18E818D68A9B21CD11B5F37F0A01 + F5A85EE257EAE40F6E2B48D34B721CDB22A2B42028A0028A0028A0028A0028A0 + 02A459E55FBB2B8FA31A4D27B8D36B61E2F2E40C099FF3AE9B40663A7F992C9B + 99D89E4F6E95C98A845434474509373D59A6187A8FCE94BA8EAC3F3AF36CCED2 + 36B98947DF078CE0553B9BD2E0A46303D4F5AD214DDEECCE52EC52A4C0AE9310 + C0F4A368A77011996342CC7017926B0EEA7371317EDD00F6ADE8AD6E6555E962 + 1A2BA4C028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A002 + 8A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A00 + 28A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0 + 028A0028A0028A0028A0028A002AC5B5ECD6BC46DF2FF74F22A6515256638C9C + 5DD1A50EB3137132321F51C8AB69796D2FDD9533E84E2B8674651D8EA8D55224 + DC0FA50706B32C695A6115498869DDEB51C922443323851EE6AD2BE8896EC65D + DDD99CED5C88C76F5AAB5DB08F2AB1CD277770A2A890A2800A2800A2800A2800 + A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A280 + 0A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A28 + 00A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2800A2 + 800A280155D97EEB11F43527DA67FF009ED27FDF46A5C53DD0D49A1DF6CB9FF9 + ECFF009D1F6CB9FF009ECD53ECE1D87CF2EE35AEA76EB33FE06A3249392493EF + 56A296C26DBDC4A298828A0028A0028A0028A0028A0028A0028A0028A0028A00 + 28A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0 + 028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A + 0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028 + A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A002 + 8A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A00 + 28A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0028A0 + 028A00FFD9} + Stretch = True + Transparent = True + Visible = False + OnDblClick = LogoImageClick + end + object CompleteLabel: TLabel + Left = 20 + Top = 255 + Width = 85 + Height = 21 + Caption = 'Complete' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object TimeLabel: TLabel + Left = 20 + Top = 111 + Width = 126 + Height = 21 + Caption = 'Time and Date' + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -18 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object BackButton: TButton + Left = 305 + Top = 327 + Width = 88 + Height = 31 + Caption = '< &Back' + Enabled = False + TabOrder = 0 + OnClick = BackButtonClick + end + object NextButton: TButton + Left = 393 + Top = 327 + Width = 89 + Height = 31 + Caption = '&Next >' + TabOrder = 1 + OnClick = NextButtonClick + end + object CancelButton: TButton + Left = 495 + Top = 327 + Width = 89 + Height = 31 + Cancel = True + Caption = '&Cancel' + TabOrder = 2 + OnClick = CancelButtonClick + end + object WizNotebook: TNotebook + Left = 209 + Top = 14 + Width = 360 + Height = 267 + PageIndex = 6 + TabOrder = 3 + OnPageChanged = WizNotebookPageChanged + object TPage + Left = 0 + Top = 0 + Caption = 'Intro' + object Label13: TLabel + Left = 8 + Top = 8 + Width = 337 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'Welcome' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object IntroMemo: TMemo + Left = 8 + Top = 40 + Width = 345 + Height = 217 + TabStop = False + Alignment = taCenter + BorderStyle = bsNone + Color = clBtnFace + Lines.Strings = ( + 'This wizard will take you through the configuration of the ' + 'basic parameters required to run a Synchronet bulletin ' + 'board system. All of these parameters may be changed ' + 'later using this wizard or the Synchronet configuration utilty ' + '(SCFG).' + '' + 'You really should have an active Internet connection in ' + 'order to complete this configuration wizard accurately. So if ' + 'you'#39're not already connected, please do so now.') + ReadOnly = True + TabOrder = 0 + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Identification' + object Label1: TLabel + Left = 8 + Top = 144 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'System Operator (your name, nickname, or alias)' + end + object SystemNameLabel: TLabel + Left = 8 + Top = 16 + Width = 241 + Height = 25 + AutoSize = False + Caption = 'System Name (try to be original)' + end + object Label2: TLabel + Left = 8 + Top = 80 + Width = 209 + Height = 25 + AutoSize = False + Caption = 'System Location (city, state)' + end + object Label3: TLabel + Left = 8 + Top = 208 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'System Password (super secret password for sysops)' + end + object SysopNameEdit: TEdit + Left = 8 + Top = 168 + Width = 177 + Height = 24 + MaxLength = 40 + TabOrder = 2 + OnChange = VerifyIdentification + end + object SystemNameEdit: TEdit + Left = 8 + Top = 40 + Width = 177 + Height = 24 + MaxLength = 40 + TabOrder = 0 + OnChange = VerifyIdentification + end + object SystemLocationEdit: TEdit + Left = 8 + Top = 104 + Width = 177 + Height = 24 + MaxLength = 40 + TabOrder = 1 + OnChange = VerifyIdentification + end + object SystemPasswordEdit: TEdit + Left = 8 + Top = 232 + Width = 177 + Height = 24 + CharCase = ecUpperCase + MaxLength = 40 + PasswordChar = '*' + TabOrder = 3 + OnChange = VerifyIdentification + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Time' + object GroupBox1: TGroupBox + Left = 8 + Top = 88 + Width = 345 + Height = 81 + Caption = 'Time Format' + TabOrder = 0 + object Time12hrRadioButton: TRadioButton + Left = 8 + Top = 24 + Width = 129 + Height = 17 + Caption = '12 hour (am/pm)' + TabOrder = 0 + end + object Time24hrRadioButton: TRadioButton + Left = 8 + Top = 48 + Width = 129 + Height = 17 + Caption = '24 hour (military)' + TabOrder = 1 + end + end + object GroupBox2: TGroupBox + Left = 8 + Top = 176 + Width = 345 + Height = 81 + Caption = 'Date Format' + TabOrder = 1 + object DateUsRadioButton: TRadioButton + Left = 8 + Top = 24 + Width = 217 + Height = 17 + Caption = 'American (mm/dd/yy)' + TabOrder = 0 + end + object DateEuRadioButton: TRadioButton + Left = 8 + Top = 48 + Width = 217 + Height = 17 + Caption = 'European (dd/mm/yy)' + TabOrder = 1 + end + end + object GroupBox3: TGroupBox + Left = 8 + Top = 8 + Width = 345 + Height = 73 + Caption = 'Time Zone' + TabOrder = 2 + object TimeZoneComboBox: TComboBox + Left = 8 + Top = 32 + Width = 185 + Height = 24 + Style = csDropDownList + ItemHeight = 0 + ParentShowHint = False + ShowHint = True + TabOrder = 0 + OnChange = TimeZoneComboBoxChange + end + object DaylightCheckBox: TCheckBox + Left = 208 + Top = 32 + Width = 129 + Height = 24 + Caption = 'Daylight Savings' + TabOrder = 1 + end + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Internet' + object Label4: TLabel + Left = 8 + Top = 16 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'Your Internet Address (static IP or host name)' + end + object Label5: TLabel + Left = 8 + Top = 80 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'DNS Server IP Address (i.e. your ISP'#39's DNS server)' + end + object DNSAddressEdit: TEdit + Left = 8 + Top = 104 + Width = 241 + Height = 24 + MaxLength = 127 + TabOrder = 1 + OnChange = VerifyInternetAddresses + end + object InternetAddressComboBox: TComboBox + Left = 8 + Top = 40 + Width = 241 + Height = 24 + ItemHeight = 0 + TabOrder = 0 + OnChange = VerifyInternetAddresses + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'QWK' + object Label9: TLabel + Left = 8 + Top = 144 + Width = 297 + Height = 25 + AutoSize = False + Caption = 'BBS QWK-ID (system name abbreviation)' + end + object Label10: TLabel + Left = 8 + Top = 208 + Width = 297 + Height = 25 + AutoSize = False + Caption = 'QWK Network Tagline (system advertisement)' + end + object IllegalCharsLabel: TLabel + Left = 120 + Top = 168 + Width = 233 + Height = 25 + AutoSize = False + Caption = 'IllegalCharsLabel' + end + object QWKIDEdit: TEdit + Left = 8 + Top = 168 + Width = 89 + Height = 24 + CharCase = ecUpperCase + MaxLength = 8 + TabOrder = 0 + OnChange = VerifyQWK + end + object QNetTaglineEdit: TEdit + Left = 8 + Top = 232 + Width = 345 + Height = 24 + MaxLength = 127 + TabOrder = 1 + OnChange = VerifyQWK + OnKeyPress = QNetTaglineEditKeyPress + end + object Memo1: TMemo + Left = 8 + Top = 16 + Width = 337 + Height = 113 + TabStop = False + BorderStyle = bsNone + Color = clBtnFace + Lines.Strings = ( + 'Your BBS'#39's QWK-ID is used for unique system ' + 'identification in QWK message packets. QWK message ' + 'packets are utilized in off-line mail readers and some ' + 'message networks (e.g. DOVE-Net). Your QWK-ID ' + 'should be an abbreviation of your system name and may ' + 'consist of up to eight valid DOS filename characters, ' + 'and must begin with a letter.') + ReadOnly = True + TabOrder = 2 + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Maximums' + object Label6: TLabel + Left = 7 + Top = 16 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'Maximum Number of Simultaneous BBS Users (nodes)' + end + object Label7: TLabel + Left = 7 + Top = 80 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'Maximum Number of Simultaneous FTP Sessions' + end + object Label8: TLabel + Left = 7 + Top = 144 + Width = 345 + Height = 25 + AutoSize = False + Caption = 'Maximum Number of Simultaneous Mail Sessions' + end + object NodesEdit: TEdit + Left = 8 + Top = 40 + Width = 41 + Height = 24 + TabOrder = 0 + Text = '1' + end + object NodesUpDown: TUpDown + Left = 49 + Top = 40 + Width = 19 + Height = 24 + Associate = NodesEdit + Min = 1 + Max = 250 + Position = 1 + TabOrder = 1 + Wrap = False + end + object MaxFtpEdit: TEdit + Left = 8 + Top = 104 + Width = 41 + Height = 24 + TabOrder = 2 + Text = '0' + end + object MaxFtpUpDown: TUpDown + Left = 49 + Top = 104 + Width = 19 + Height = 24 + Associate = MaxFtpEdit + Min = 0 + Max = 500 + Position = 0 + TabOrder = 3 + Wrap = False + end + object MaxMailEdit: TEdit + Left = 8 + Top = 168 + Width = 41 + Height = 24 + TabOrder = 4 + Text = '0' + end + object MaxMailUpDown: TUpDown + Left = 49 + Top = 168 + Width = 19 + Height = 24 + Associate = MaxMailEdit + Min = 0 + Max = 500 + Position = 0 + TabOrder = 5 + Wrap = False + end + object AllNodesTelnetCheckBox: TCheckBox + Left = 104 + Top = 40 + Width = 249 + Height = 25 + Caption = 'All nodes are accessible via Telnet' + Checked = True + State = cbChecked + TabOrder = 6 + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Options' + object GroupBox4: TGroupBox + Left = 8 + Top = 8 + Width = 345 + Height = 105 + Caption = 'New Users' + TabOrder = 0 + object FeedbackCheckBox: TCheckBox + Left = 8 + Top = 72 + Width = 305 + Height = 17 + Caption = 'Require new user feedback (e-mail)' + TabOrder = 0 + end + object NewUsersCheckBox: TCheckBox + Left = 8 + Top = 24 + Width = 249 + Height = 17 + Caption = 'Allow users to logon as '#39'New'#39 + TabOrder = 1 + OnClick = NewUsersCheckBoxClick + end + object AliasesCheckBox: TCheckBox + Left = 8 + Top = 48 + Width = 305 + Height = 17 + Caption = 'Allow users to use aliases (nicknames)' + TabOrder = 2 + end + end + object GroupBox5: TGroupBox + Left = 7 + Top = 120 + Width = 345 + Height = 105 + Caption = 'Users Can View Deleted Messages' + TabOrder = 1 + object DeletedEmailYesButton: TRadioButton + Left = 8 + Top = 24 + Width = 129 + Height = 17 + Caption = 'Yes' + TabOrder = 0 + end + object DeletedEmailNoButton: TRadioButton + Left = 8 + Top = 48 + Width = 129 + Height = 17 + Caption = 'No' + TabOrder = 1 + end + object DeletedEmailSysopButton: TRadioButton + Left = 8 + Top = 72 + Width = 129 + Height = 17 + Caption = 'Sysops Only' + TabOrder = 2 + end + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'PasswordVerification' + object Label11: TLabel + Left = 8 + Top = 8 + Width = 337 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'System Password Verification' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object SysPassVerifyEdit: TEdit + Left = 88 + Top = 216 + Width = 177 + Height = 24 + CharCase = ecUpperCase + MaxLength = 40 + PasswordChar = '*' + TabOrder = 0 + OnChange = VerifyPassword + end + object SysPassVerificationMemo: TMemo + Left = 8 + Top = 40 + Width = 337 + Height = 161 + TabStop = False + Alignment = taCenter + BorderStyle = bsNone + Color = clBtnFace + Lines.Strings = ( + 'At this point you must re-enter the system password that ' + 'you created earlier in this configuration wizard. ' + '' + 'This same password will be required of you' + '(via the SY: prompt)' + 'when you logon to the BBS with any user account' + 'that has System Operator (sysop) privilages ' + '(i.e. level 90 or higher).') + ReadOnly = True + TabOrder = 1 + end + end + object TPage + Left = 0 + Top = 0 + Caption = 'Complete' + object Label12: TLabel + Left = 8 + Top = 8 + Width = 337 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'Congratulations!' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object CompleteMemo: TMemo + Left = -1 + Top = 40 + Width = 361 + Height = 217 + Alignment = taCenter + BorderStyle = bsNone + Color = clBtnFace + Lines.Strings = ( + 'You have completed the initial configuration ' + 'of the basic parameters required to run Synchronet - ' + 'the only intelligent choice in BBS software' + 'for the Internet Age.' + '' + 'Thanks for choosing Synchronet!') + ReadOnly = True + TabOrder = 0 + end + end + end + object ProgressBar: TProgressBar + Left = 304 + Top = 304 + Width = 177 + Height = 20 + Min = 0 + Max = 100 + TabOrder = 4 + Visible = False + end +end diff --git a/src/sbbs3/ctrl/ConfigWizardUnit.h b/src/sbbs3/ctrl/ConfigWizardUnit.h new file mode 100644 index 0000000000000000000000000000000000000000..cfd1aedc7e08b57966472a984ee9274020a677b9 --- /dev/null +++ b/src/sbbs3/ctrl/ConfigWizardUnit.h @@ -0,0 +1,107 @@ +//--------------------------------------------------------------------------- + +#ifndef MainUnitH +#define MainUnitH +//--------------------------------------------------------------------------- +#include <Classes.hpp> +#include <Controls.hpp> +#include <StdCtrls.hpp> +#include <Forms.hpp> +#include <ComCtrls.hpp> +#include <ExtCtrls.hpp> +#include <jpeg.hpp> +#include "sbbs.h" +//--------------------------------------------------------------------------- +class TConfigWizard : public TForm +{ +__published: // IDE-managed Components + TShape *Shape1; + TButton *BackButton; + TButton *NextButton; + TButton *CancelButton; + TNotebook *WizNotebook; + TMemo *IntroMemo; + TLabel *TitleLabel; + TLabel *IntroductionLabel; + TLabel *IdentificationLabel; + TLabel *QWKLabel; + TLabel *InternetLabel; + TLabel *MaximumsLabel; + TLabel *OptionsLabel; + TLabel *Label1; + TEdit *SysopNameEdit; + TEdit *SystemNameEdit; + TLabel *SystemNameLabel; + TLabel *Label2; + TEdit *SystemLocationEdit; + TLabel *Label3; + TEdit *SystemPasswordEdit; + TLabel *Label4; + TLabel *Label5; + TEdit *DNSAddressEdit; + TLabel *Label6; + TEdit *NodesEdit; + TUpDown *NodesUpDown; + TLabel *Label7; + TEdit *MaxFtpEdit; + TUpDown *MaxFtpUpDown; + TLabel *Label8; + TEdit *MaxMailEdit; + TUpDown *MaxMailUpDown; + TLabel *Label9; + TEdit *QWKIDEdit; + TLabel *Label10; + TEdit *QNetTaglineEdit; + TProgressBar *ProgressBar; + TLabel *VerifyLabel; + TImage *LogoImage; + TMemo *CompleteMemo; + TEdit *SysPassVerifyEdit; + TLabel *CompleteLabel; + TMemo *SysPassVerificationMemo; + TLabel *Label11; + TMemo *Memo1; + TLabel *IllegalCharsLabel; + TLabel *TimeLabel; + TGroupBox *GroupBox1; + TRadioButton *Time12hrRadioButton; + TRadioButton *Time24hrRadioButton; + TGroupBox *GroupBox2; + TRadioButton *DateUsRadioButton; + TRadioButton *DateEuRadioButton; + TGroupBox *GroupBox3; + TComboBox *TimeZoneComboBox; + TCheckBox *DaylightCheckBox; + TComboBox *InternetAddressComboBox; + TCheckBox *AllNodesTelnetCheckBox; + TLabel *Label12; + TLabel *Label13; + TGroupBox *GroupBox4; + TGroupBox *GroupBox5; + TRadioButton *DeletedEmailYesButton; + TRadioButton *DeletedEmailNoButton; + TCheckBox *FeedbackCheckBox; + TCheckBox *NewUsersCheckBox; + TRadioButton *DeletedEmailSysopButton; + TCheckBox *AliasesCheckBox; + void __fastcall NextButtonClick(TObject *Sender); + void __fastcall CancelButtonClick(TObject *Sender); + void __fastcall BackButtonClick(TObject *Sender); + void __fastcall FormShow(TObject *Sender); + void __fastcall LogoImageClick(TObject *Sender); + void __fastcall TitleLabelClick(TObject *Sender); + void __fastcall WizNotebookPageChanged(TObject *Sender); + void __fastcall VerifyIdentification(TObject *Sender); + void __fastcall VerifyPassword(TObject *Sender); + void __fastcall VerifyQWK(TObject *Sender); + void __fastcall QNetTaglineEditKeyPress(TObject *Sender, char &Key); + void __fastcall VerifyInternetAddresses(TObject *Sender); + void __fastcall TimeZoneComboBoxChange(TObject *Sender); + void __fastcall NewUsersCheckBoxClick(TObject *Sender); +private: // User declarations + scfg_t scfg; +public: // User declarations + __fastcall TConfigWizard(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +#endif diff --git a/src/sbbs3/ctrl/sbbsctrl.bpr b/src/sbbs3/ctrl/sbbsctrl.bpr index 1fc13eb32fd378164a4168daaeeb83b917e28150..809944f16247a8d2fd1326a63737521f9d18a583 100644 --- a/src/sbbs3/ctrl/sbbsctrl.bpr +++ b/src/sbbs3/ctrl/sbbsctrl.bpr @@ -10,7 +10,7 @@ NodeFormUnit.obj StatsFormUnit.obj AboutBoxFormUnit.obj StatsLogFormUnit.obj CodeInputFormUnit.obj ClientFormUnit.obj SpyFormUnit.obj ..\ringbuf.obj UserListFormUnit.obj UserMsgFormUnit.obj - PropertiesDlgUnit.obj EventsFormUnit.obj"/> + PropertiesDlgUnit.obj EventsFormUnit.obj ConfigWizardUnit.obj"/> <RESFILES value="sbbsctrl.res"/> <IDLFILES value=""/> <IDLGENFILES value=""/> @@ -21,7 +21,7 @@ StatsFormUnit.dfm AboutBoxFormUnit.dfm StatsLogFormUnit.dfm CodeInputFormUnit.dfm ClientFormUnit.dfm SpyFormUnit.dfm UserListFormUnit.dfm UserMsgFormUnit.dfm PropertiesDlgUnit.dfm - EventsFormUnit.dfm"/> + EventsFormUnit.dfm ConfigWizardUnit.dfm"/> <LIBFILES value="sbbs.lib mailsrvr.lib ftpsrvr.lib"/> <LIBRARIES value="VCLX50.lib bcbsmp50.lib vcl50.lib"/> <SPARELIBS value="vcl50.lib bcbsmp50.lib VCLX50.lib"/> diff --git a/src/sbbs3/ctrl/sbbsctrl.cpp b/src/sbbs3/ctrl/sbbsctrl.cpp index 4e231ccdb71fd5281a5f4b7ed0f2fb0aaa0286a6..b39675e1a6f36d437739d8b2decece0ca9621e9f 100644 --- a/src/sbbs3/ctrl/sbbsctrl.cpp +++ b/src/sbbs3/ctrl/sbbsctrl.cpp @@ -62,13 +62,14 @@ USEFORM("UserListFormUnit.cpp", UserListForm); USEFORM("UserMsgFormUnit.cpp", UserMsgForm); USEFORM("PropertiesDlgUnit.cpp", PropertiesDlg); USEFORM("EventsFormUnit.cpp", EventsForm); +USEFORM("ConfigWizardUnit.cpp", ConfigWizardForm); //--------------------------------------------------------------------------- #include "MainFormUnit.h" #include "SpyFormUnit.h" #include "CtrlPathDialogUnit.h" TSpyForm *SpyForms[MAX_NODES]; //--------------------------------------------------------------------------- -WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmd, int) { memset(SpyForms,0,sizeof(SpyForms)); try