nielsie95
04-19-2008, 11:12 AM
Hey,
In the past I have once attempted to create a syntax highlighter in SCAR. I can't really remember what actually happened to it. But after seeing the SCAR Notepad by Dan Cardin I decided to give it another try.
It highlights keywords, strings, comments, numbers just like SCAR would. I did my best to not let it flicker much.
http://img178.imageshack.us/img178/7195/syntaxhighlighterscartt5.png
program New;
const
Keywords = 'const|type|var|begin|end|array|set|record|string| if|then|else|while|' +
'for|to|downto|do|with|repeat|until|case|of|goto|l abel|procedure|' +
'function|nil|and|or|not|xor|div|mod|external|stdc all|cdecl|raise|' +
'try|except|on|finally|as|in|is|out|program|shr|sh l|forward';
re_KeyWords = '(\b('+Keywords+')\b)';
re_String = '('#39')';
re_Comment = '(([{]|[(] |[/][/]))';
re_Numbers = '(\d)';
re_Regex = re_KeyWords+'|'+re_String+'|'+re_Comment+'|'+re_Nu mbers;
clKeyword = clBlack;
clString = clFuchsia;
clInteger = clNavy;
clComment = clGreen;
var
f: TForm;
r: TRichEdit;
PALL: Boolean;
function MinNoZero(a, b: Integer): Integer; //Idea from Ron
begin
Result := a;
if (a <= 0) or ((b > 0) and (b < a)) then
Result := b;
end;
procedure ParseIt(OffSet: Integer; s: string);
var
sStart, sLen: Integer;
t, c, pStart, pEnd: Integer;
DotFound: Boolean;
begin
t := GetTickCount;
s := LowerCase(s);
c := -2;
with r do
begin
//Lines.BeginUpdate;
sStart := SelStart;
sLen := SelLength;
SelStart := OffSet - 1;
SelLength := Length(s) + 2;
SelAttributes.Style := [];
SelAttributes.Color := clBlack;
pStart := RegexPos(s, re_Regex);
while (pStart > 0) do
begin
pEnd := pStart;
case s[pStart] of
'a'..'z':
begin
while (pEnd <= Length(s)) do
case s[pEnd] of
'a'..'z': Inc(pEnd);
else Break;
end;
SelStart := pStart + OffSet + c;
SelLength := Max(pEnd - pStart, 1);
SelAttributes.Style := [fsBold];
SelAttributes.Color := clKeyword;
end;
'0'..'9':
begin
DotFound := False;
while (pEnd <= Length(s)) do
case s[pEnd] of
'0'..'9': Inc(pEnd);
'.':
begin
DotFound := True;
Inc(pEnd);
end;
else Break;
end;
if (not DotFound) then
begin
SelStart := pStart + OffSet + c;
SelLength := Max(pEnd - pStart, 1);
SelAttributes.Style := [];
SelAttributes.Color := clInteger;
end;
end;
'(', '{', '/':
begin
case s[pStart] of
'(': pEnd := MinNoZero(PosEx('*)', s, pStart), Length(s) + 1) + 1;
'{': pEnd := MinNoZero(PosEx('}', s, pStart), Length(s) + 1) + 1;
'/': pEnd := MinNoZero(PosEx(#13, s, pStart), Length(s) + 1) + 1;
end;
SelStart := pStart + OffSet + c;
if (not PALL) then
SelLength := Max(pEnd - pStart, 1) + 1
else
SelLength := Max(pEnd - pStart, 1);
if (s[pStart] = '{') then
Dec(pEnd);
SelAttributes.Style := [];
SelAttributes.Color := clComment;
end;
#39:
begin
pEnd := MinNoZero(PosEx(#39, s, pStart + 1), PosEx(#13, s, pStart + 1)) + 1;
if (pEnd <= 0) then
pEnd := Length(s) + 1;
SelStart := pStart + OffSet + c;
SelLength := Max(pEnd - pStart, 1);
SelAttributes.Style := [];
SelAttributes.Color := clString;
end;
end;
Delete(s, 1, pEnd - 1);
c := c + pEnd - 1;
pStart := RegexPos(s, re_Regex);
end;
SelStart := sStart;
SelLength := sLen;
//Lines.EndUpdate;
end;
WriteLn('ParseIt took: '+IntToStr(GetTickCount - t)+'ms');
end;
function InComment(p: Integer): string;
var
a, b, sStart, sLen: Integer;
t: string;
begin
Result := '';
with r do
begin
t := Lines.Text;
//Lines.BeginUpdate;
sStart := SelStart;
sLen := SelLength;
a := MinNoZero(Pos('{', t), Pos('(*', t));
while (a > 0) do
begin
if (a > p) then
Break;
SelStart := a;
SelLength := 1;
if (SelAttributes.Color <> clString) then
begin
case t[a] of
'{': b := PosEx('}', t, a + 1);
'(': b := PosEx('*)', t, a + 1);
end;
if ((p < b) or (b <= 0)) then
begin
case t[a] of
'{': Result := '{';
'(': Result := '(*';
end;
Break;
end;
a := MinNoZero(PosEx('{', t, b), PosEx('(*', t, b));
Continue;
end;
a := MinNoZero(PosEx('{', t, a + 1), PosEx('(*', t, a + 1));
end;
SelStart := sStart;
SelLength := sLen;
//Lines.EndUpdate;
end;
end;
procedure ParseLine;
var
cLine, LineStart: Integer;
s, t: string;
begin
with r do
begin
cLine := Perform($00C9, SelStart, 0);
s := Lines[cLine];
Delete(s, Length(s) - 1, 2);
if (Trim(s) = '') then
Exit;
LineStart := Perform($00BB, cLine, 0);
t := InComment(LineStart);
if (t <> '') then
begin
Insert(InComment(LineStart), s, 1);
LineStart := LineStart - Length(t);
end;
ParseIt(LineStart + 1, s);
end;
end;
procedure OnChange(Sender: TObject);
var
Mask: Integer;
begin
with r do
begin
Mask := Perform($0400 + 69, 0, 0); //EM_SETEVENTMASK
Perform($000B, 0, 0); //WM_SetRedraw
Lines.BeginUpdate;
if PALL then
ParseIt(1, Lines.Text)
else
ParseLine;
PALL := False;
Lines.EndUpdate;
Perform($000B, 1, 0);
Invalidate;
Perform($0400 + 69, 0, Mask);
end;
end;
procedure OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
with r do
begin
if (ssShift in Shift) then
begin
if ((Key = 221) or (Key = 219)) then
PALL := True
else
if (Key = 57) then
begin
if (SelStart > 0) and (SelStart < GetTextLen) then
if (Lines.Text[SelStart + 1] = '*') then
PALL := True;
end
else
if (Key = 56) then
begin
if (SelStart > 0) then
if (Lines.Text[SelStart] = '(') then
PALL := True;
end
end
else
if (Key = 86) and (ssCtrl in Shift) then
PALL := True
else
if (SelLength > 0) then
begin
if ((Pos('{', SelText) > 0) and (Pos('}', SelText) <= 0)) or
((Pos('(*', SelText) > 0) and (Pos('*)', SelText) <= 0)) then
PALL := True;
end
else
if (Key = 8) then
begin
if (SelStart > 0) then
if (Lines.Text[SelStart] = '{') or (Lines.Text[SelStart] = '}') then
PALL := True;
if (not PALL) and (SelStart > 1) and (SelStart < GetTextLen) then
if ((Lines.Text[SelStart] = '*') and (Lines.Text[SelStart - 1] = '(')) or
((Lines.Text[SelStart] = '(') and (Lines.Text[SelStart + 1] = '*')) or
((Lines.Text[SelStart] = '*') and (Lines.Text[SelStart + 1] = ')')) or
((Lines.Text[SelStart] = ')') and (Lines.Text[SelStart - 1] = '*')) then
PALL := True;
end
else
if (Key = 46) then
begin
SelLength := 1;
if (SelStart > 0) and (SelStart < GetTextLen) then
if (Lines.Text[SelStart + 1] = '{') or (Lines.Text[SelStart + 1] = '}') then
PALL := True;
if (not PALL) and (SelStart > 0) and (SelStart < GetTextLen - 1) then
if ((Lines.Text[SelStart + 1] = '(') and (Lines.Text[SelStart + 2] = '*')) or
((Lines.Text[SelStart] = '(') and (Lines.Text[SelStart + 1] = '*')) or
((Lines.Text[SelStart + 1] = '*') and (Lines.Text[SelStart + 2] = ')')) or
((Lines.Text[SelStart] = '*') and (Lines.Text[SelStart + 1] = ')')) then
PALL := True;
end
else
PALL := False;
end;
end;
procedure LoadForm;
begin
f := CreateForm;
with f do
begin
Position := poDesktopCenter;
ClientWidth := 600;
ClientHeight := 400;
Caption := 'Syntax Highligter';
end;
r := TRichEdit.Create(f);
with r do
begin
Align := alClient;
Parent := f;
Font.Name := 'Courier New';
Font.Size := 10;
ScrollBars := ssBoth;
HideScrollBars := False;
WordWrap := False;
OnChange := @OnChange;
OnKeyDown := @OnKeyDown;
end;
f.ShowModal;
end;
var
v: TVariantArray;
begin
ThreadSafeCall('LoadForm', v);
end.
~Nielsie95
BobboHobbo
09-28-2008, 01:22 PM
Lol, this is weird. I took the script in your signature and it worked fine.
Thats a diffrent one, heres the one:
[SCAR]program DraynorWillowCutter;
{.include SRL/SRL/Misc/Smart.scar}
{.include SRL/SRL.scar}
{.include SRL/SRL/Reflection/Reflection.scar}
{.include srl/srl/misc/users.scar}
{.include SRL\SRL\Skill\Woodcutting.SCAR}
{.include SRL\SRL\Skill\Magic.SCAR}
const
Vers = '6.25'; //DO NOT TOUCH.
{[~~~~~~~[Instructions]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~]
[~ How To set up: ]
[~ ]
[~ 1. Put players in Draynor bank ]
[~ 2. Have axes in first slot of invent ]
[~ 3. Start Script and fill in the Players Form. ]
[~ 4. Drag cross hair into RS and press start ]
[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~]
}
const
ClearBug = True; //Clear the debug every proggie?
SRLIDBH = ''; //SRL-Stats ID
SRLPass = ''; //SRL-Stats PW
var
x, y, HP, HPTime, willowlog, Chopped, Banked, Bankedd, xC, yC, BankDTM,
Axe, responded, LapTime, BestLapTimeBH, II, I, BrokenAxeDTM, Answer,
dsx, dsy: Integer;
Timer, AB: LongInt;
WalkAngle: Extended;
B1, B2, B3, B4, ColorSign: string;
TheEnt: TNPC;
EndLearningToolBH: Boolean;
BHForm: TForm;
Top1, BywhoL, WorldL, CurrentVersionL, LastestVersionL, CurrentVersionL1, LatestVersionL1: TLabel;
ExtraBox, VersionBox: TGroupBox;
UseAutoResponderCB, RunCB, AntibanCB: TCheckBox;
WorldE: TEdit;
PlayerSetup, DownLoadB, StartB: TButton;
Memo1: TMemo;
versionBH, version1, Outdated: string;
BHWillows, AxeDTM: integer;
// When the form is closed, this code will be executed.
function ConvertTime(TheTimer: integer): string;
var
RHours, Minutes, Seconds, RMinutes, RSeconds: LongInt;
Time: string;
begin
Seconds := TheTimer div 1000;
Minutes := Seconds div 60;
RHours := Minutes div 60;
Time := IntToStr(Seconds) + ' Seconds';
if Minutes <> 0 then
begin
RSeconds := Seconds mod (Minutes * 60);
Time := IntToStr(Minutes) + ' Minutes and ' + IntToStr(RSeconds) +
' Seconds';
end;
if RHours <> 0 then
begin
RMinutes := Minutes mod (RHours * 60);
RSeconds := Seconds mod (Minutes * 60);
Time := IntToStr(RHours) + ' Hours, ' + IntToStr(RMinutes) +
' Minutes and ' + IntToStr(RSeconds) + ' Seconds';
end;
Result := Time;
end;
function GetMarkedTime(TheInteger: Integer): integer;
begin
Result := GetSystemTime - TheInteger;
end;
procedure BeatRecordTiming(TheLapTimeBH: integer);
begin
if BestLapTimeBH = 0 then
begin
BestLapTimeBH := GetMarkedTime(TheLapTimeBH);
exit;
end;
if GetMarkedTime(TheLapTimeBH) <= BestLapTimeBH then
begin
BestLapTimeBH := GetMarkedTime(TheLapTimeBH);
end;
end;
procedure LearningToolBHOnClose(Sender: TObject; var Action: TCloseAction);
begin
if (not (BHForm.ModalResult = 1)) then
EndLearningToolBH := True;
end;
procedure ResetVars;
begin
X := 0; Y := 0; Xc := 0; Yc := 0;
end;
procedure PlayerForm;
begin
SRLPlayerForm(True, [], ['Loads', 'Bank Pin'], [], []);
Writeln('Current Players Loads ' + IntToStr(Players[CurrentPlayer].Integers[0]));
Writeln('Current Players Bank Pin ' + IntToStr(Players[CurrentPlayer].Integers[1]));
end;
function CalculateDecsions: boolean;
begin
if (RunCB.Checked) then
begin
Result := True;
Writeln('Using Always Run');
end;
if (UseAutoResponderCB.Checked) then
begin
Result := True;
Writeln('Using AutoResponder');
end;
if (AntibanCB.Checked) then
begin
Result := True;
Writeln('Using Higher Antiban');
end;
end;
function AccessDenied: boolean;
var
I: integer;
begin
for i := 1 to 10 do
if GetDebugLine(I) = 'Access to outgoing connection denied by user' then
begin
ClearDebug;
Result := True;
end;
end;
procedure CheckVersion;
begin
Writeln('Checking Version...')
Version1 := GetPage('http://bh-draynor-willow.freehostia.com/willowcutter.txt');
if (AccessDenied) then
begin
Writeln('Cant access Version checker, Checking = Terminated...');
Writeln('Continuing with version ' + Vers);
Exit;
end;
VersionBH := Between('/*', '/*', Version1);
B1 := '//';
B2 := '^^';
B3 := '//^';
B4 := '*^';
Outdated := Between(B1 + B2, B3 + B4, Version1);
if (Vers = VersionBH) then
begin
writeln('You have the Latest Version: ' + Vers);
Exit;
end else
Writeln('You are OUTDATED, Updating script..');
BHWillows := RewriteFile(AppPath + 'BH Draynor Willow Cutter ' + VersionBH + '.scar', false);
WriteFileString(BHWillows, Outdated);
Writeln('SuccessFully Downloaded');
Writeln('Script In: ' + ScriptPath + 'BH Draynor Willow Cutter ' + VersionBH);
end;
procedure HandleButtons(Senders: TObject);
begin
case Senders of
PlayerSetup:
begin
PlayerForm;
StartB.Enabled := true;
end;
StartB:
begin
BHForm.ModalResult := mrOk;
end;
DownLoadB:
begin
Version1 := GetPage('http://bh-draynor-willow.freehostia.com/willowcutter.txt');
if (AccessDenied) then
begin
Writeln('Cant access Version checker, Checking = Terminated...');
Writeln('Continuing with version ' + Vers);
Exit;
end;
VersionBH := Between('/*', '/*', Version1);
B1 := '//';
B2 := '^^';
B3 := '//^';
B4 := '*^';
Outdated := Between(B1 + B2, B3 + B4, Version1);
BHWillows := RewriteFile(ScriptPath + 'BH Draynor Willow Cutter ' + VersionBH + '.scar', false);
WriteFileString(BHWillows, Outdated);
Writeln('SuccessFully Downloaded');
Writeln('Script In: ' + ScriptPath + 'BH Draynor Willow Cutter ' + VersionBH);
end;
end;
end;
procedure DrawImages(Sender: TObject);
var
Picture: Integer;
Canvas: TCanvas;
begin
//Form Title
Picture := BitmapFromString(484, 364, 'beNrtvXuQHNWV7tty+P7h' +
'CM4NBDF2TNy4uCU1BCjUegw+ngc+ZnyvHb7mHubEzHhG5oCvw ICNp' +
'UGWkISkVqvVUrdoqZGQGBnzEsg2jwEEGGxs87ANNg9hkDFYYI xHIP' +
'M0AxaIY8O9cfyH7yqt6pUr9yt3ZmVVZ1V9K77oyM7alZWVtfN Xu76' +
'99t7bj1073meo9+ie951Q0wdOruvPT+05/pT3098V430rrPKsS4b+' +
'Pq/GtvaJtm5xaO/evaPnf7yw6On6JUTDHq3yaEladH2mz+j50Ek9d' +
'Hxn+cGxeaKh8RNFG5XGNycaHfq4U3LxSaPLPm5r6p8d3ds37Y T+fv' +
'o7tuLk1KOrEk3p6Zl6RA+fNkn2j62eJxpdOZeljzm6du76gTm JhhM' +
'NrZ0tGtkwXTQwPM2p4XXly3hfcg763AYG+t1ansg4zspFsxw6 163l' +
'Z8xkUWVYuWAWadWSJT5ReSq2/AszWcah6AQ+dVyP74UC0vUkpvzAe' +
'f2ZGlo0O5d8x/Fet4mLQKJrsmTBCXWdloj2nz//eFt598cUoIeW/v' +
'3/zlrxj8eIVv/zh23tPRyDp/USZG5d0MN/H7rov+TdZkzRhrHNB6c' +
'N+kuS1yXMDozNMMSgJhyxCNTMarukT5G4Xj82gzW20aESWD1x KHkh' +
'Q/qc9VfPigjFsHpjGtFuVo98PJEL1HVcC2PXnCwitLL0TpJmNeP6 p' +
'Dk16e+C8ZETRWPD80TJMYfnEa5FmtUpjc3I1NDI9MIKHFbel/e1Ir' +
'i9cuksOQ5tJ8rP6hCoF8zie5yRbotAXTuBBV6mOWXXE2exvNz Oy2o' +
'ft/OyOgzbBpWX1bQzzGqNXN7mf2O2ecO5vf60I/kvi4lNcrKaKwAR' +
'm1sazGpSPKsjiQ1WO1ktv2j0bUjbNqt9MlhN7cZ4VmtVnNXyv hpkt' +
'RyneawOULowq331BKzOKwF1TLuaca1ZTRvC4QLbgmve5n/pJWJYTV' +
'WXbRD5vc+sPnHBMSRd0vi3ALGbxGrxcHiD6rC+nWVP9VnNp8p/C7M' +
'6Ufuz2v40Q68Vx2q3Fs3i14pkdSOgTqkQq3U9CbDavi/A6sKsFg9E' +
'iF3KtjTUGddhVpOomOHjGXy2uV0M181gtc9vl5td2iGV9UBqW vVx9' +
'jAN3nYzq/Vn12xWx/jAMazOB+qcHgiJEMf1hDZ8ZQTUzvsCrG6Q1c' +
'X86kwfm0DNL8Ty0ZXKDCg/UCitFQlqvoNCnYwbZ/i0t1D4/HbjZrd' +
'xLbrAI4PVsq35nJfVAW7z72Kjz3Fs/cm55ONzjMYumufUutG5TsVw' +
'u7Dszy77O0Kx2sftTFAHfOC8rJbyJB+rdRkt3e9miOuJuX9BI j5b3' +
'30R9kbK6k90sppv2Hb3QAr41QEfWzew41ktPp7he8zv74mHdi OsHl' +
'sXIetZPr/d5++B1dVnte+zawar433gvAbI5LLad19MIqvhV9vbxVh' +
'ti+FMrNZmddjHXt8Irgux2ue3+/y9yrLaKcIvn3aAzx/5q4/+7Sc/' +
'QX8LsFqeG2Y1n0MMq8N9BwVYrT+7ZrM67ANngprTP5rNarcsV vvuC' +
'7C6gn41bxdmtTCZWR3wrieX1SzDb9e3MPt76/2/BcDqqrHa/uyifP' +
'KiHgj3LdZznhd5feMwqKvGapaZT56VHwJWV4TVvkpOZXx9PQP D0xb' +
'O7LHHO9T4fPgvbzgVwLVzvMPImulODa+a5pQel0ESv13vpLfA vxkD' +
'/Vkx3KZLJH2Rq0fnkphFjbB67KKTE3k4rH+bOwtM/bOjmbek3r5pv' +
'tdKaQLUgefq89fnsGFsnsgeJBXu5y0g/uwKsDrF5wtnJfKwevl5M/' +
'm1aMPH6jCoSdzw9uE3l3xM1szxlTFOO8knL2nsTF4+6++Rssa 8ZI6' +
'FCenvE2lW+7gtHohO2yilY9FwsLl7sZ5uXQarzT5HD6hbz2rx 21vA' +
'as2i5rHa7vMyCvCoQ+Etif6NZHX4uU5QG7h2strXz9vurM5sV JcI6' +
'nJZneSTV5jVLVVRVjejb9EeF1PPtS7EaqccfY6usca5cN0gq5 2KyR' +
'PLy2qDRU1ita/Py2a1wDYW14rVvudqUNvn4GO1rz+rqRkjZbE60WS' +
'DulxWZ46RKZfVf0pHgNVGyYqz2nYwnGNbGtnWyXvOGs6k1ezi f20C' +
'63/B6gKstr3cZrOanwtWs+zrH8PqMKglOcSJ3Ho3ZRDLzjJgdWVZn ' +
'TlsvPC2HNxoV/8pK9597+39zz+46zuX7fzG6QaNk/wQBXDj6TKHTy' +
'SujadXmdUGiwKs/lN0vPbqr17Y//gjD15/+y1Dl2z6vw1W6/yEsAf' +
'CElALY2M8EP1cm9X6HHys9uUeVIHVPi89zOoGQS3XPwBqZxkB 75uv' +
'v6jryY6RM8OsXn32R42qNbjoL2NYfenIP8lTfvfGSwafjWMWY zXnV' +
'7cvq5sxFsY5LqaG67EZArE/5YlDv3/77rvHuM4zqJetnEWspr8k+p' +
'f2m5/mRGMmwGr9m9R8+tJZuTS4pjdTKwcT6fa/5vZKJV+qzOrRucI' +
'i3demlZfVRrzwwuPXXnMON7k5PyFlmEyIeEsi3mrk0p6tWz5i +8y0' +
'k8U09j3X7lsk8TkYO/X71X2s5lx/4322JoXVTi99+fkza3KxuhHrw' +
'77+dhKIYwyOdZxHH35YV4z777vP3ZaeKH/FRV8w6tIVF38hhtX3f2' +
'+nPOXRB24JEzjgUXeDByKN4XK3+SWY3oVZzfHMC08xlkmE6IU z66z' +
'mPV3FalGTWC3EJiBzn5eT1SSZ15SlQW17F5rVJPu5zjwQEp9D JKvp' +
'siRz/blAPSms9vkzPlY3Dmr7+tugdozBmTgIv8rVl12mq8TLL77I+' +
'32s/uG3rzZq0Q+/e3UMq18+8LQ85aqtZ4PVrRkL4xsX0yCra1Xl5a' +
'fzsjoD123Fav5NoVlN/zaP1RTvvffO5/+PaQFW6wY2bTCNfd6FwWr' +
'dwDZ2GljWznYMq5O5/irDap8/42R1XlAbnrPv+tNLM6iP+2CPdwzO' +
'GWZyoFElhlev1o8arH5u38NG+ZcO7BNW1136LO8i09noTlYLT nlbT' +
'IyytrUZEmD18Lpp8/t72Do+ddlJ3/j66bu+c9mh379t0+O665Yyq0' +
'Xdw2oZ+8OU9oHax2pioOEPEDm/uuMT133zjG/fufLJJ297++2Xnbj' +
'+2mWfC7NaJEYHi70LY2dMDrYAmdvehq2dyWpRdVjNMq5/HdSK1eyp' +
'hrOpbVD7fGm+/jIWhhDNf3mDHqWN+hiciXEx9stRW1rXh+t37fI55' +
'yTnN749/bWB2esuX5q0xw483Rms9uYHVt6vrmWDDM/xsZrOh9rJ9s' +
'xIb7zxhuldHzrknEPJPmAqenrcinx6A5FK2XJJ81wzXHNbt6t Fg+v' +
'n6HF8ml1MPJvVhDjxB3TDtY7WvmlfueCCQ++8Yzzxt799xuBt jDZt' +
'/Qh7F7SR97mJU22BWjetRb6xnD5Wl8Vt+ghEkTl7cv0TUKdZXRj UB' +
'q5T81QfFn1NGNA2yjhf8f777tOV4dGHH/aNmty07NNOVl+19WyHf6' +
'4w++gDtySW+Pd2Fliwpp1YnXMMIy9D0Iz86lCutZ/VVIBY7Z7G//s' +
'324VtxZQJqMGnh5chKIvVvvmscrFa/AEnq9lt+NVzvzKe+9NHd7We' +
'1dL/yIimDTo9Z15iG7Farn8xVtug9nnOTlaTuF0trWsp43tFw7L+3' +
'Ztv+kredtNNTlZffP2Y2z+fwOzv/uOlgFldIqs1QlvggWTiugCrm+' +
'dX61zrAKuNvFPNuh3r5rc1qzNxnYvVkq9IcBBK52K1U5rVzEY b11/' +
'd8Ym8rGbZecUFWM39j77zbyNWJznVHlZHgjrgS9NDjlzuCWIL pdkG' +
'YRM7bI8bNWHzhg3OYkbSiMQPHr/XeZ7M2HWL/zoyH68UVgtCW+NXh' +
'3Edz+omzQfi26YPKMxqnXeaF6RVZnUY13k9EMICs9rAdSmslj y6//' +
'rfTn3nf6TMkCefvK0Aq315xZEeiF4/13fyXcLqwMhE8aVZ3lzuCd+' +
'DER0JatKvf5X64qb2s7MYNbm1VWIT2Lkm763fXCfFfv3MIy1g NSO0' +
'QduzFFwXYHXz/Gq9zXVmaOVsknGh7LxTH0iff/bxdmQ147qRkP5Hw' +
'sLCmXVW63b16EginqEuntXOPLotl1yS7mQ8FOgNtF9LWP3fhz 77wG' +
'P3ykNOVl/3zTMeuP/SAwce/e1rz+hXpD3bLt3e2zedTsyZs/eqKk/' +
'x40eu1X2L+vporpLuvm+bPOuVV582HiWZYzrUQ6ObPvbjB6+h Z9XH' +
'bb176Kl9d3/1q//s5nOQ1Vfs+MIjD9383C9TZCM2EuuuvuyySFYTA' +
'O3Gj9xTX9k4/+EnEs+ZcM1OSOZi6KLvffvb+uBPPfFEZvObTl6j+9' +
'Khf/Kt8/jU43dLse/eujVmhEvhsTCa2zHtaidmd4yc+cYbbzz7VOo' +
'jo38fuu8mPVbIPo4eWLRj6Mzz/z7E6vu/lbKeXt93b9ivvvWatVL4' +
'rTdf8fnSe3Z89rUn7vgfrz0rhf/ne+8QVJ/9ztizt63ds/UzXJ45T' +
'KC2v9TsvFOfB3LXjeNtyuoGOd8aVht5dMYRbvq383Kx+vKr/+75V/' +
'YbD/Hny4i++qq/o+Y6MTkze/DhPbucrN59+4r0cNdDkaw+eDDxSP/' +
'tlmXxrNaQN139n94Sz+rdNw69+4eMN/7uH/4gjdi8rKZ76uMnT3vx' +
'RfP6s3EtTkgMqzdv2GCclV3mX7ds0WUMS+S7N2/1sVpfhE2rP908V' +
'hsq4IHceOXaP/w+4yOjAlTMiet777hKit1721VhVv/ut78xjhz2q1' +
'/6adKvR+C1y+y7Ycnv/2N/5o3G5fkm5ZUNbVYbeaeCqZ89dGfS0Pr' +
'DO02CbXuxWtQkVoueffZefQRq+spDOufZyWoCtRPCmtW5kr1/9vNb' +
'nWNhjGI7r/9iJquv/ea5Gu82qH2slra0Lx54YGcMq3/9q0fi3zg1s' +
'51mtc76sG+oGZ+a9vZbB+2j6RExMaBmEZ/1QYjMxtN125v7H6/ftS' +
't5C/seca7zSHBWXwGHIgk8Kaw2GtLhoML2EZ577jkp8OZvXwywevx' +
'fPuaw/Yf+IuAz65KPX/bPRhlqTkeeOZcnDssStEYBzjtlk602LniC' +
'UTs3n5PK7dyxxF5A3HlA2e8rb+x3sjpQvsX7J4vVd39/VB/hwIFHx' +
'ScxUuns1/K1ljmv22A1Fd6zZ9fXv366vDS14enlTA5//XSb1XufuD' +
'X1C/2ZezJZ/e/790j5x/bujmS1flYgNmz4mzCrX34pBfw333zpG1c' +
'uGVz6l+xXD69eTW1pbSDwgMFwTrUN5IMHDzpPT4CZOeKGM/FYT/30' +
'bn0Qbidr4GtPm00SeiO+7whB63dv3Zo86/G7K8vqF/fvS31kr794z' +
'SVfufCs/8z+JG1QW9qYO4WeYh9HF3jiiSd8hueBAwfsD+4XN1/o85' +
'kJjLYBImUI3Waz56E7v7dsGpfZsW7+3mvPFVeEn6vXCrfZqPt BuMx' +
'dN45TQ1rKfGXjfI0vo7xxQH0cZ3ljf8z5xBynSft9rNZrfDeD 1QTP' +
'VKL1a8+wQ2LnPBuv9fOf3yoQptb4lVecynnFZ33uLwznhArc8 a0LI' +
'xv2Tzxxq70O4xU7P2d+fJs+5sSvuM268JZLT4lh9Y8fvEbjnZ 7Fn9' +
'TyHefaTesAq40W9SM/uVkPWtT8NLrnDh06FJjrwziHR39Uz1h+59D' +
'By7ZduGnZpxmSlw7908BZ/ayYhWZEt167LtXUT7eTjYa3+Db6G2fz' +
'hg32nCR0nOTX97XrcrN6kZKnpG/eP6Nk0v94xvGJXC3qh+67yYd0e' +
'sjZupbG86+e/Ik8+s2Lz/ONhXl5/1M2qwmnPr/6tSfuSAaKPnKdUe' +
'b5H12RanH98HJnrvXPrzn7rRcekwa5j9W6b/Efzv/PP7jjcvp2kEf' +
'ffucg7dTsMvoi7QM2GPbxfa/bmv2TxWrb3HDmPNvFdDu83ms5kVds' +
'oDg8gJEgn5oP8LVnnGvmHnzrJV3sW99eH2C1pq6zV9HJajFMm O06C' +
'W3H7jHnTAi2rtu1NDX++jf7UqPLrTwQY8zgNy5d4supdp7t/T+8tz' +
'7Pv8JjJKgNVtvjXPSj677814ZDwkegBrYNcP1E/azaF0r1WE3t58z' +
'WcqAFTk/XrL75axcmiVUPf8cJ6rWfn+Xjks+v/p/vvaMNEKPM//f7' +
'g4bLETM3iI/Vvjh46OCmzRdKn6N2CXRfZOmsto/ve93W7K8mqzldx' +
'FnMALVTdg5wzAk4WX3vD7anqs3BlwKsfleZM85eRR+rBdQGq//6nL' +
'8ITHGg9bs3U98p2zZ+Nsxqo8Puzddf8uVUO1xuwyJWrI4EtR7 eSNI' +
'jVmqDVjafLce8bsdSo2PRHh1jZ4/oUTZ0cKPPsams/tfx5ZGsNpyN' +
'zav+IcxqKqDLv/3Wm/Raoq9feZE89P++9y7vNFhN7e3ke3//U3/84' +
'x+1CWz71T/e/H9KAcKy7WnbvYeR6zDGs/q9P7xz143j0udoHMHYXy' +
'6r7eP7Xrc1+6vDap3Xp+dcMoq99dbLmaB25gAXY/XYxWaF9DkbBOf' +
'MXkUfqy+78nNGmaG1szlnOIbVm8Y+HW5UO/Orjab1RUs/5ZzrwziB' +
'OvossR1KuC7AavFV6o327+yUw9K20RNqJ5DY2SN69DoPXW8Nq 5mQR' +
'knaY7N63b98Mlej2tm0Jj5rXBO9k6bC17fJfmE1tbelwO1Xrt LzbD' +
'x87/W2X60tDtq2PW0zk/zacyPnBsmLViL2D+64PG8iR+OsrloeiOT' +
'u6jEXmtU2t23K+eZ60jKWEXeiknDN8hFV9xI614Xxzec8NjzP kHFk' +
'31t++ul7UhXy8d1GAbtX0S6jZbzuffdus8vQR8B5aEbhgeX9I sn9u' +
'P8HO3WZ3dcNxcxZbQzc/uG3r5Y8vdpAdQ+rOZ/Z8D24RR0DaimvBz' +
'kajeeXX3haitF2wvD77vMlkBgDHvXXkEwJ5VzT3Ly8i/t9Mlm9yMF' +
'zH6tJRl/kj+5MJTnv3rlyxenHkHT+hi1tdNRMiT0/1Kz+xc8Ti/6h' +
'B+7SD/Hgl1RtP7N///4k0e7VF5+1feb33krs4n03LLG9aJ3OVzfSb' +
'1sbnickJkfu4gtPoXb+zx66U/cqMrGNJJCuytnTuJ5EVr/33iHeGd' +
'P8DrPaN59zYVbfcvMy41RtVhu9ipduPyWe1c4yuVht9CqmDBD/nNW' +
'GDfLcvodjWG37HvGgNljtM6Vrb3OimN55w2UX6FfRlrUxR59+ ljHV' +
'6mSxWlrXrOd+8RNdZvuaU2JYTa3lVGv8wHMayN+94xvJCJffv qQfI' +
'u3c8N+1AULoJlzb+c/iLX9v2TRtgDj9Z22S6ME1tL+AX+2kEzWnDW' +
'LTT4A2YnXpbXvGdctYTSA94XOp1c1eeGFPWay253P+5Fl9F1+ z6pd' +
'P3/NCMDUuQFcjS5DobbD6sb27kybKq08HDhXPalYMq999N3V68XNW ' +
'62f98Y9/NAbCRLI6xqM2QM3Sx9HtZ8Yywfyrw6mUsA2L/kY/Xedd6' +
'zn6dPa1LGFgq0FW1/2cNKsZ1z5Wa1y/m56WmUEdZrX9RSC+tMj3uk' +
'ar+/5vXcYtbT0uZs+Oz+rx5oREnYnn85+NVBCJ3//H/rtuHM/lV/v' +
'yinesm2/g+tZr1rZLfnUzfJiacd0SVjNIT1ma+ka+88GbI1nt6ygU' +
'VrM4r35s+EJ7eF0BVj+oEjwo9u/fY7Ba9yrST8vwoH7n60YWLlAmf' +
'uqkYicQP+wlwGrtS9fGad5/C7H69l3DiSn9+0PG0zXJ9Rx9OiPRsE' +
'0yr0BeVie4jmO14Nook8lqJ43tg1NzOnGkb7pCP0RgTxo8//IxZrU' +
'eby6ONP/V+XLX71gSmOtDU90IapAf+OHlkX51IN+YmnZvvXPQHrpY' +
'/fzqBlltHN+J61wtQ+lzZOm+SFv8vbPhspTztnzHub7y9vU/vE76P' +
'IeUv7Hza5/TdlwUqwfm+LRpgzna66KNJ8m1uunfVK/iu4d4Zzwf9E' +
'P2SwdgIo26wAFzkapwmQKgNrRz/ByjB7PWcr4jsUP3P/PI0DmzDTm' +
'9Dp16bcx8kvnuhpbO9sl3HQYX9xoK47TmHp/zYZPVnnRolq/lbDyR' +
'2Pv965MkT2pIy7OI28m1/e1vGNSDp/VeO5oYIwdf/41A1Zh/w0a04' +
'UXv3HxOYJj5e2+98vNrzrab1rnymQ1iUKM9M786bz5zxfOrW8 9q/u' +
'p5fN/j+gifPKsvF6vpCAFW3/iNL5m15d1DP3ts9/W7vrhp8GPrl89' +
'hxbOa9OrLqR/p99yzTa7VK68kDz322C2NEzKe1Q3itGWsDoPatqbZ' +
'8XjxQHL737N7m81qArhhWRtDGotdARvUgetQgNVh5AZAnclqP YRcJ' +
'/U9vueHtgFCrCalft5++Ugm8A/uuFx2PvOzH9krczm96H03LHnrhc' +
'd8xN6z47Nhvzqcbzx33pG68PPPPp6ZX503n7ni+dWtZ/XUI3qO+mj' +
'qsr/42vO1U4pmNf/KCLDasJef2XfP6Nq5LAF1XlbfcsMyI9GaL9Ql' +
'Wz+TypL1zMBcmH4xhY0pNYqx2jlvUimsDiP6uA/28F/Dsv7+LanJG' +
'C/fMN9mNQE8+ZZ84Bbao5NbXvnN0yV+Fs6SNqgjWa0diQCrw5B/9/' +
'dv2/Odaidckvp0Oh+1sTWrX3n+KW3f8aper774rGEOS6Pa+Vf70nu' +
'2fubhe683hslwXHzhKWEPJJxvnFnebhjnymeueH5161lN+pnq iavd' +
'hpePBQr7sqB9rP7Rvdt9oG6E1SSjC2/XrnPpQlFD2pkA3EpWG7NAy' +
'+C+sIw8EN/JN8jqzOa0sNqA87vpeedsUJMI4AmZDzxNe/Y9lswucs' +
'+3tnEHYgVZ/eKB51J5IMtPiQG1kQfy3JM/sVn91COpJGrnMBnN6rt' +
'vSGyTx35wA0HgCZVgIz0UxOH1px0ZILbtY1OD3LgUrz1xRyN5 F5nl' +
'Oz5nr0Cutd07puka5vyl208xnr5p7GPFsyayzIpNGz6m+Rxgd cCrZ' +
'D32aGrIBv07tHJ2avCXa3XXFrDaWLjQN2N/OL/a1w3XCKuHT59Gis' +
'E1SYPXCOaw1sgXp7N0Mfr3vT8krcqrN586cv50VjNYPbx0mig vq7U' +
'pUUtuv3u3s5ghKpb6yCbcDK0btn45saz33EU0fuiBu2wTm0FN umz1' +
'f9WWNe359lXJ4Pen99zOiKa/xAcb12Ef28D1e2+9UpiNxmx7YHULW' +
'P1qevLP664ZayjDLaszrrazJFZffqkJk5dffjnTQ2gBq41ZoA OJao' +
'Fxiz73pjCrGdSRrLb7ClNfi4f9DSerXz3wi2QAyPcvT6F7AtQ kXwO' +
'7MKtH1kxvhNW6retMh3ZKp3nodA4tI2ua2Kuf9d07viFHE1yn huUu' +
'/i+vPp+0q2/ZtkBYzbh2strnY9/55SMDAMzFRgP7zqVhwOoSWb0/n' +
'eF88OBLYVA3zuoS29XUij74u5d8PMlMD2seq43khxgbxDBAAu vSFm' +
'C1UDqS1SQmsHYwUn1e31jvY7XB58T7evwum9V1LZ1dIqvr69/5WT3' +
'4pV4neLWHbIwKd8owQDidg17axrWeTO9bV60Kf3EQq//9Fw9KgR/f' +
'+bXU7XYY0VrcuhZohL1re86QAvnVxloDkgfSbfNXt4zVV17xO b1gC' +
'gftLJ3V76Vd5ad/cY9N6UsvOuXVl54uwOo7b13vY7UxPq7FrNYDQG' +
'Ka1kajOuDe5Dpbg9J5WU1Mdl7bS1Z9xsfq6y45w/mUu765OsDqzOy' +
'OvO1qxjVz22a1E9d6mGFM09qYzvTCHec5QW1kTeuuxl8/+2SmtaLL' +
'UwPbZrWB67B3rQc/UvDMqJH51Ts3n0MyZkZtu/zqcvenWD0xJo4Xr' +
'7Tl9Rk81vQ3d5774APXOJujN123zPcqGa8V1N6f7jaesu/nd1+0+i' +
'S+PXd97dzHHr7FeXffdPUyvpdl4ojaeOQ0ruk4zudG9iryIiy B0SX' +
'FUMnPPXQo9SX1xhtv+I75VLrzSE4+fiyM/HzWcoKaNPL56ZkaO28G' +
'6WtrTnZeXn507MxE+rnOp+xY/XHN6pSWJ2qI1aumkZjPIuK2k9VOX' +
'Bs9jDoj2hx1uOcuXfLRfT+pfTu4PgXDgtahDZCAIRNw0Q1cv7 7vXh' +
'lC6PSudT6JDI1sfEwfv2iX51cXY3WByAR1YVZf+dXPRZ7Dvp/dnU5' +
'aO3T5pvlhVpOcq6JE9irWaridf6Ia/DZaM2FSW8h+YtDcyweeNkaU' +
'7N459MTElKG+dWHkOM60MeMEJH+gGawm6c7B+vwDv3wwzGptW U+0u' +
'96utbrzs3ps3Yy8rBZiz+/vCbSrazqzprAF/fZbbxIhr7h0kB+ljW' +
'9dterg66kVEp954Sl5rboDY30Wzgovh83MIQyU17iWVu7PHrq TOPz' +
'za84W73rfDUv0Ork1w/OFx4vNX20EvVbk/NWdnV/dAlZTG/vSi0/J' +
'BHVhVpOoJR8+h3ffPXTTrlor+uAbjgb/v//yER+r6RLpuZEjexXpi' +
'cxhd65g2p/hYjGsJjhrULN+/Uzu9RYDoG49q3+597vGK/7ots1hVu' +
'/98Y0Os7ooq1n6OhOWSQFWMzCJn2yGhFltE9toXYeDW9T0WnTBn ZT' +
'mk3l6z+3GE199/omAwfLrZ580ygc8GcF1/GlTA7vY/NWpL7J3Dhrz' +
'7HVzfnVTWU2UvuWGZXyEprKadN9d3jXB9//qkbolsmg2NaTtAr974' +
'yUnq6XRazRNA72K+rnevG7LTg8U1uMWbVCzbr12nTF7v+M9vv mmXs' +
'c8MG6uxay+/cpFxiveuO3zYVbvvsJ8Cu1pkNVaYVaL9cGsDnggmtU' +
'pndZrN54dt8/rvxm9diXzmVntw3VtPMu1K42nf/uqrwRYbZjnmWmE' +
'uVj97HfGCs9fTY325599vDZ5lJqvqWvnRHWyWsumaDyf9//6kX1P3' +
'X3Pd7ddsukzgT67gMweQKOAvyuQgPzYw7ccnFgwhTboX3Y5tC 998Z' +
'r/6xd779aN6tuvG7ZZrd0JI5/Z2atoG7++d+Sw3KOnTrLneavp8Gx' +
'IV20++9Ef3aKXHeSG9KMPP2zMklEKq+3362S15q1Tlyw056ql PbQ/' +
'MBeWMXaj9pSl82psX+LRykQxrGbZJZnhooUze5xUH144ra6zE 2lWS' +
'zP1m6P/be8Prt3/i1RyGv1LO+kh3btHr+Xs9SPxd8ffftmcJWbT2R' +
'+mR33sveLSwXjDRHBNx6QTe/nll6kZ//q+e/VseO+99QrtuevG8Tu' +
'/fKRv/mqoBazW7d6wori6sgEtzSmVD6B9aZ9sUBszuTl7FTWZi103' +
'3zV0zt3kZLW9bkvARQ/PHSRj4vR4NwPUzupUgNVOOY8fqMb0N5LVA' +
'ThnysdqnR+SgDqC1fEKsFqIbXja+tGYXO4Yae9acziQdw3MVp DVMX' +
'1tmazmxJUYVttrLJbFaptyev4Nu1cxDOoYVjveS4VZrUFq/MhlXNu' +
'sjqmNTlDr49v+p4Hr2kFayGpRC1idCWpmNW/7ioU5LITXe8K4jsm7' +
'zlTV8pmrm19dBqvzThkRALWsqR1mtW+NxcZZbSNOT3Fv9ypmg jqT1' +
'd73UklW2y1euSV5gwpoVhdoPwSOb7xWLK47mtXCWGZ1GNcxR5 Njxr' +
'SuM/Ouwx931fKZ2yK/2qdM/hScM9Oa2l2Duo7rCd7anXG+NRZTIyC' +
'Cc/g41+PLHCFo9CrW6qpnRI9v3WF7HQffe8nwQzxrvzbCauc4C81q ' +
'Z4uXN+TfvQ2HE9H6VZwE0M81+VwSq70MV32Xm5dMFW08R+n0R Jp1q' +
'ejpcSsuFs7sKXzNhc/aQok0Q6hiOP2QTL+6avnM7ZJfXYzVhSeiN3' +
'AtrUqNa9r2sdq3xmIkpe31+CKHB+pexVoNH5jTOKt976VSrLZ bvEb' +
'nUeQP3ngZI5fl9o8xQ9qC1UzIEpXpaQckJ2P73mFc8zd4wLsO ux+V' +
'ymeufn41fyKaz/rfAKsbAbWBa81qxrW2oG1W22ss8tts/JQCQ7N1r' +
'2Id1EFW81vIZLXvvThZzcdsJatta8K3pl652771/jJ97Dquq81qw+' +
'zNqxj85n0unZLte2d2NcoPLv5Ct/2QsKqWz9wW+dXMZ5vbPlaXBUP' +
'dViQs0zl/6jjTdvbNxcRrLPLbJJUOamO+I+lVTEDtZ7X+jRBmNct4' +
'L86cEH3M1rA64CHbnqThJze47ZuEM/O5fMJVZnWDoM6kbrHnOn3vz' +
'MwQ7Y8JruNZDeXKAzF8qkg/pEQkat+YQH3SHNN2Xn/+HJb9XEIclS' +
'eVDmpjGg3pVTQ8au11iGzvfd3oXJZvHWHGNb8X51xV9jHdfkh OVod' +
'9D2eL2pi72PCTS9l2zo0cfq7hmY8P9CXaUI58rN6y5ihWpDlM uK7C' +
'7e9rXRteSjauJ/pMa7g+0/SugdnSc/Zsn6plrBZcB1jteyK1RZvEa' +
'mMhP+5VtDsTfaC2vfdMVst7sVntO6aP1eHVxmM8ameLWuDpW4 PPaB' +
'UX3g6s8ed77qSzml60tnFBos1fmpro/0lUHQLE+N4xedca12B1U1k' +
'tPpVhVhdg9Uf+6qN/+8lP0N8CuDYQnauLsAVyZn2EWa29d4PVdk61' +
'TgvR+w1W62M6WR0GdQyrYzzqqm1rOLSe1XVQu1hdcQiEuxqL4 TrXC' +
'SCPOj6/WlrRzOoArjNZPfXPjmZWk3r7puXOu64qpQPpeU4PhLR6dC' +
'5776sn3A/Nal9OtW+/eNd1P9+fE1Ibh75gViOsjvSoq7Zt+NWtZHU' +
'C6jSr26XNlonryFGNGtdGBibyq0vIr1a3PP32sdOefbIJQHA+ ob9f' +
'WE2if8WLrhp7G2H1ujR+RYNj80TDW/vYz6GNke3HiobGTyT5cqq9u' +
'dYTfggfs8Zt1feqB/IMnJV9qRv3qKu2Hfart24sR5rbW0aOEjlZ3V' +
'4/sb24PutIVl5cywRWyK8uLb+6bFYLqA1cc6uvHSltt6UbZ7Uvp9 q' +
'bax3B6tqnGfedWK5HXZHtSrG6HR1RB67PSuE6H7EjWI086nz5 1dFw' +
'LtCuZmlWt4DYAf8kl7USyMeLZLXIZrUvp9qba22tX2awOh7U1 HjuG' +
'I860q9uMavbtwPLZrWN63hi16AdZDXyqPPlV5fKahKxWuOa9t isbp' +
'IlYndN+pRN6WDudOOsZhk51RvHT2SZudautSb13K3xoPaxuk0 96ki' +
'/upWsbvd8A5vVNq7txW4CQgpHaXkgmVjW3YtBVnPfIreuWQJqm9 WF' +
'cS251qR4OBtrpJrja/RkSp6xKprJY1v7RD4m+6RZzVjmPD0BNWnso' +
'nmyP7UGsT5PtU5B/O8FHrbgA7U9F0eVPeqwX02xbego1o7NR5eibR' +
'cdlWgoUY3VF7Sx+xGQjOWppYVPbPNsVGB1W7NaN7CN+etsVuf FtaZ' +
'0x7BacqoNVsv+ElktQ8xsVrepR+3zq6V6g9XNwLVMHghWtzur 9VDE' +
'MKvD8yaJsyFwdszzHIRzYI7rTFbbz/Wxmh/1sdpxDorVThGrRQJqR' +
'961Z3XdMKgNVre1R+3zqw1cg9Xl4lrP9Tq8cFqDrEYedWx+dQ VY7f' +
'OQjTHm3nme/aAOzHEdZrXvuTar9VhCJ6jd55CT1d686zhWD5zV72N' +
'1W3vUPr/aqORgdbm4NljNKsZq5FGXOH914THmMRP7G2MVbZdDy5t7' +
'nLe8xefRtXMTBeeU1pQ2QM0SP2TN9mPXTDSq7eMwyWNYrRv5z vdSg' +
'NXJgqqqUd12HnXAry7A6hSHfVJ8ThI/1iSs7uyf4UnT+vypIr22Ql' +
'5WI4+63Pmrq8Nqb+5x3vIRrPY91wa1PUeHZrXvOHlZHXgv5bK 6vTz' +
'qsF8NVreY1bwyTjyrkUedd/7qYqweWloOruNZ7c09zls+gtW+5/pY' +
'refo0Kz2HUdYzU/JZHXgvRRmtZGn144edXhe6xazuht6uGJYzRpc3' +
'BvjgSCPusD81dVnNcvMPc5b3uVR26x2ziltGCDSt8hzdAync0 KY1S' +
'zjOOJm6zZ5mNUs53spl9Xt5VFnzmsNVk8iq1lI4WjqOuZlreH VEJ+' +
'XzwksMVCfO3T5nBglucqayUpbt/Q5RSiW5/ry9PRY8lUeDavjyLNs' +
'r1vPj5rk6aXnR7Xfeyms1rhrU786kGudl8Mx6kJQy/XU6ynodRa0h' +
'ldNYwGz3czqZJ7nOFYnucr5WS3PbZDVchwNatvrzmS1/d4L5OwFWN' +
'2+fnVgLuvmsZpHLHYbNMBqsNpgtZ4JKhLLYRVgtc/3cCrAakM+r9t' +
'gtXMu696je3gszHEfrOeB0EYBXHeYX22vGyVzgzSJ1TK0vHuI QXWP' +
'WU1VjllNG01iNfKr24LVPFbdmAaqk1jNIiyz122vERPIqa4he qAGa' +
'mY1HSGS1QauO8yvbjGrO2kOkHhRTeO2AbOa616A1VSBi70Q8q sNUN' +
'dYPdAfViOsjmk/j66ca8sGNWls9TzS1rV9xaXm4dm+7dhMjW9PFMP' +
'qFeNurfVo3ehc9k+MOaDCOdVTj+jhvl26Tep/F9XWIMiL607yqwMN' +
'7BCrh4pLvuO6itVU92rt6lWH29Wr6o1qqnt1RK9R2jCd+VPgV ZBfb' +
'baoD6M4E9etZ7XM18eIpo0T+vsZ1F3Fal9ONd0vJG7bsJjVeW cF6T' +
'C/erJY3VWy656P1cKfAq/Sg0BUOwxW+3Kq+buyTunD4+WpALM6F66' +
'7J78arC63k6vugayaSuK6Z7Na2hgFKP0nBKLaIcQO5FQLqAXR GtQ1' +
'nTO7EVZ3ZH41WF2uZS2IToHa8kC40uYCNSCAaC9ia1YTmSWnW iYJ5' +
'IYN/xolPo+cPz3RF2vKy+rOzq9O4XqoHHXDfE0+Vkvd27LmqNQywR' +
'sdAqgRXYJrYrXkVOv5twnR4hyWyOrOy682nRCwumEPhBAtda8 UVgP' +
'UiA7AtTGuX7NaZLM6jGvn3E2dkV+dMZd1c1jdbeMW9fh6sBoB Vk8K' +
'qzsgvzo8lzVYXTVWA9SIDsC1mSrpY/UXpzsVMyKmY/KrI+ey9uJ3R' +
'T6lWL2wpm4ANb1Zg9V6jWCN6PVjdYHVCLC6GazuAL86PJc1WA 1WIx' +
'AtZrWsONk4qzt4PhCwukRQF2B1ZnIjWI0Aq8FqsHrSWT20dvb eYID' +
'ViE5g9VKv75FakzcPqH0eiIG4TprECawuAdRrjnJKjy0a39wn Gh2v' +
'iy7UyIbpIpl/TwRWIzqY1fY6BYJoDNVHtCDiWU3tarAa0Z2s9q1Tg' +
'LkUEK2snExssBqByMVqVHjEpFRRsBqBiGE14xq1HVEFXDtZXQ PyOi' +
'VF6cEVvSTUXkSHsHqRR+fM5jVlUNURk4/rS44ibdlxtCiZ1x2sRnQ' +
'9q3mdAlR1BFiNQFSc1ajniOrgGqxGgNVOVpNQzxFgNQIx+ax2 8VkL' +
'9RxRHVa71yQFqxFgNViNAKsRCLAagQCrEYjGWM0ze6CeI6rO6 nVeV' +
'mMsDKJzWJ1uRQ+c1c+SWZhQzxFgNQIBViMQYDUCUYzVenZT1H MEWI' +
'1AgNUIRIOs1hM31bTGFOowogPqv5geWmA1ovqsFoHVCLAarEZ Un9X' +
'vO6E+ISRv1NbFAKsRYDUCUVVWM6iPP+X9Bq5RhxFgNQIx6awm RH/o' +
'pLoI1MxqvYou6jACrEYgWsfqi47auqVPpFlNTevpM2piVpPAa gRYj' +
'UBUitUEalLv0TVWS9MarEaA1QhEpVhNNJ7S0zP1iDquSRrUYD UCrE' +
'YgqsDq9WMzSITrk+bUxP9qoQ4jOoPVKxfMMgRWIypYV3dsPjr Aamp' +
'Xg9UIsBqBqCyrpa7alAarEWA1AlE1VvuIjTqMAKsRiKqx2hbq MKID' +
'6n8Y1KjniOrU1a0b+zSrRWA1AqxGPUeA1QhEBVmNeo4AqxEIs BqBA' +
'KsRiAZZjXqOAKsRCLAagWgGq3kqVJ2zhzqM6GBWo02CaFNWy5 zVRl' +
'o16jACrEYgqsNqmbN6YGyGU6jDiI5hNbw+RLuzmgRWIzqb1ei XQbQ' +
'1q2XOasKyvfYiWI3ojPqPPnREu7Oa56xmUDvXXkQdRoDVCMSk s/qk' +
'OXWnmkFtr72IOowAqxGI6rBa3A9j7UXUYQRYjUBMOqulD3HqE T3Ot' +
'RdRhxGdzerB03pJqOeIdmE1y1h7EX2LiM5m9eCZvWA1oi1YvX Y8pQ' +
'G19uIFYzMuAKsRncvqGqgnhHqOqAqrt8SyWtZeBKsRYDUCUVl Wi8B' +
'qRAezWoMarEaA1QgEWI1ANM7qVVv7Voy7RQ+RUIcRncfq1Z//sAis' +
'RlSf1e87oQesRoDVYDUCrEYgwGoEAqxGIMBqRJewOizUYUTns VrjG' +
'qxGVKqujm3tcwqsRoDVYDUCrEYgqslqwTVYjQCrEQiwGoEohd VLso' +
'Q6jOhUVmsnBPUcAVYjEGA1AgFWIxBgNaKDWc0LwYDVCLAarEZ Uk9W' +
'yDO6fnwpWI7qa1StOPwasRlSqro5vP5bFoCZ96CSwGgFWg9UI sBqB' +
'AKsRiEZZzSsqgtUIsBqsRlST1bzRe3RtDVywGgFWg9WICrJaB FYjw' +
'GqwGgFWIxBgNQLROKtZmd2LqMMIsBqBqAKrSZi7CdGFrK4PhD mnJt' +
'RzREXq6sj2Y51iVn/g5B6wGgFWIxBVZjUPYASrEV3F6mQZL7Aa0Q6' +
'sXoL5qxFgNViNqExdpZazk9UGmdeOm0IdRnQeqwe/1GsI9RxRHVY7' +
'cQ1WI8BqsBpRNVZ/4OQesBoBVoPViCqzmvsQwWoEWA1WIypbV319i' +
'zacRaOHhTqM6EBWL+41hHqOAKsRCLAagQCrEQiwGgFWow4jwG oEAq' +
'xGIMBqBCIvq0eVNm87ioQ6jOg8VpMGFvezhldNI6GeI8BqBAK sRiA' +
'aZPX7TqjlXZN4489P7QGrEd3AasE1WI1oL1YzqI8/5f2Ca7AaAVYj' +
'EBVhNSH6QyfVRaBmVjOlt11SE+owolNZTRpaOZuFeo6oJquHt/ax2' +
'P2YPqMmZjUJrEaA1QhEpVhNoCb1Hl1jtTStwWpEl7BacI16jq g4q9' +
'eO903p6Zl6RB3XJAY1WI3oElbv3bsXrEZUn9Xch0i4PmlOTcx n1pa' +
'La0IdRnRA/V8/MCfA6vXDc1DPERWpq2Nb+5xiVlO7GqxGgNUIRMVZ' +
'bfgeYDUCrEYg2oLVeycCdRgBViMQk85q4jO3nw1RBV616FMk1 GFEB' +
'9T/0bVzwWpEu7B6dNwhsBoBVoPVCLAagQCrEQiwGoEAqxHdwOoamU ' +
'ccAqsRnVT/w2NhBteD1Yiq1NXxzX1jG2fYAqsRYDVYjag+q6XGgtW' +
'ILmT16MhcsBrRXqw2iA1WI8BqBKKyrK7hes1RJLAa0fGsHrto Hg/4' +
'Wjc6F/UcUZG66gQ1WI3oZlZTJSdcE6jBakQ7sppxDVYjOpLVJy44h' +
'iSgJtG/Hzi5B/UcAVYjEFVrVxOfmdIMarAa0aas5lYHWI3o1Ha1SF' +
'aFRj1HVIfVIxum2wKrEd3Zrp7f38OgRrsa0RmsBq4RnQdqsBo BViM' +
'QVWY1g5qqN7Fa+hZ7jwarEZ3Aaqw4gOiYRrVU74Uze0ZH5pLW jc79' +
'1HG1BexQyRGTXl0Zy8OrpokGV/SyYliN1jWik0DNAqsRncpqxjXqM' +
'6It6nxtHtSVcwNToXIlZ1aLUL0Rkw7qUlitiY1AVDZqlGYFWc 2TgW' +
'hWrwauEZMN6gKsbmVEvvTg4t73ndDD+tBJtbRYEb8d/R6H19WUo7z' +
'1XBK9qL6G68dm5NJAhFaOTBcNDE9j1d7sml5WgDbNVs3X/dB/apJq' +
'IwdXz3Mqge3KueuXz2lQgTe4fniOgWtuXYPYiFb+BjT4vHLpr ESL6' +
'ppEDkRq8Eu9dS3ubTGr6S6mv61nNb0u/Z10UHcJqwnONq6F2AhEU8' +
'PZlm5TVie4TrN6+oy6GMKZrM4un34ug7oYq3koXDFWM6iZ1ZN +5Tu' +
'D1WFcM5ltXK9WunD9HNEFo3NF54/3+UQH5I0LxmaIlqyf49SyodmZ' +
'0vVkyCOupTpvnKsi/+VHU6v1pWet52K17TVKI97lSLZdcpStzdvcG' +
't7aJ1p1WL7zXLb9WENrlEaixTf+lMNx8227SZu2jLN45/j2Y1n6Wf' +
'o8Y7R23C0fHPSwcZ/v0TGs5o3eo3tIte0Vh3f6Wc0bXJ42vOWVBNQ' +
'FWC0VjxSmNJ0GlZQbkH0esUGqcOW7h9U2rguzmj9H+bf1rBZR hf/U' +
'cT3GTh+rdb1tDatZS7b28XnShk3pBlk9chjFdPwp6RBKg9VNw fXil' +
'DSrY1QvH1e4ZhdPbAu0Sfq+yAR1ANd0u0nJ4095//LhacsPt6hXDv' +
'ayKnLZm81qzeS8fB5aOjssZqb8G3ZCWLzugK0LPdLcFtFBVoz NE+m' +
'HNJ/1cXx8Xu3RwEC/SNdPo8nBuYjGzs2rptqy6+2WC46qa41b9DYT' +
'dF/slma15pjBaj7P0lkt4ns/UKDZfNbKxWfS8vNmssDqEllt/KBj0' +
'bbN6g+d1MMiUDOr6RXpL1hdIquF2GB1mNW+ehtmdaqZDVaD1X 5WJ1' +
'qRW1IzC7Oa7QsSb7A77fPfnO4Hm+fMaga1sLoF11N1Q08J7M/Lanl' +
'uXlbzsxphNV/qEK5XhnAtY8+Fz/RvI6zm88nFaj4HzWr6N4bV/Fo2' +
'q23Z9dZgta63LWO1yKY0XxPNavp3pBCxG2d1/TqD1S1hNXc3SPuBW' +
'rYFWC0H0T4G45r7E9l/C/cnUhnu6BRQdy2r5VkFWG18ECFcr8xuWj' +
'OfmQ+NtKv1+eRtVzOu+Rxi2tX6tTJB7ay39Qb2kqlcb2kjMUA mm9V' +
'C7DUT3C4d1JGs1te5sqxuTVp1QKvP+XBNizy6IFEMqH35ez5W S54z' +
'Sfor6VMzfIwaJQ6TnDjMv+l0Z5AhgbPuTCQtW9miHoR0hucU3 86qs' +
'dpuS9s/3ms/ZM7rr2txXbXrfHgj3K4WEbedZojBbd3/KEC2z0ce8v' +
'VXSkteK8BnJ6jrlXmxt1Xjq7cbz5/K4npLG5u/pLQkUUyfo2a1ZlQ' +
'j7WrRmrQfEqNGvA4nqA1cl96HqPlMWrLgBFYMqKlNu/rzH3brnxtS' +
'JK6rxmr5Fal9DFJHstpK3Z9iYFk/5CtjwJx3Mqvt40eymoHj7SPIy' +
'WoSNbx5rlQNh7ys9p1PDKuF2MY5+Fjtey0fq331tsqsFmIb16 SVrP' +
'Zd50qxmkHdPFbH4LoOaovVcvUKsNqZax3P6qlH1I8jPobB6kz 5WN0' +
'yT0nTVbNa89agt4Fr5367gBPUGsuFWc2fo7ePID+rZV5rMUMK tKt9' +
'5xPJajmH1ZZZHWa1fi0fq331VlgtqhSr5ZqsmTBDYsSXonRW6 +uci' +
'9WS4t4MVguom8pqxnWA2Darbc85ntV2TojsjGc1a0pPD1V+rv Yk6X' +
'ZsO1b7NnQxlpPV8qjd2LZBbR/K2DY8kLCHpj1/9lqJ4YkBkt8DIUo' +
'zqwO4zvRAuG+Rz8foW4zxQAjLzGoD104PhMT1mV6rVlcXZ8uo tzao' +
'I1mdytlrsgdCyGVWR+Jat4FL8UC4P5Gvc4E8al+fQont6oSTi s8rT' +
'j8m0T+WI/rlRZo9vYc3ZJv+rjjrGC2fj+F1SFxiVgcKpFitleY2VX' +
's+W81breUe6Xk/JE+vlal6kaw2IOxsNn/igz0in2HibIdzgaFlJ+l' +
't1polf8MKvwuNYv79ngK1Uu06nzuLlHHA5f0LZ/bQX9LQ2tkiSeoz' +
'fOzVafyyapVnbB6fD21o6WK+djthmc4hzGfjHq97botmJRMyB CX1d' +
'vDMXtH6s450auM5U0Wa2/Q2JetPs1ozysfqFUpLtrpl5OzRNYlvUR' +
'veclms5uuc1/ewzyeez6TzzzieVRarMa4f0XbRtaymdnWnstrnLU8' +
'Wq33nUzqrE1z7WY1JyRBtPcWZwWpRg6x2avVhQ7v2MzDI6kzf w/fb' +
'OZLViZrDan6P5bI6V6PaMRdKGawukPvhO58YVrP/UxarQWlEBxC7Z' +
'azW7atOZbV+j61ntYi95Vx9i9wLVi6rJfeDzyevR83EJlDT30 xW14' +
'3i0x0CqBGdhGvur5T7yMdtH2P1HFBOhjtyoTP5rM7Be49/YabImwP' +
'gkWb14GmJ1p92ZCLNbdX/qFk9smY6y36PzvmBW8Bq9ivWRI9/0eOD' +
'Co8lT/FZ5SEMruite2IreuN9DyO3vDCrAWpE5+Fa87AYq3myPh+oH' +
'bnQbctqQrTgWoPafo/VZ7UxPqgirBZic255FKjBakQXsLp2+zTGag' +
'a1PefGan/edSar6+nilWS14NpmtX6Pk8LqzLmeDPdDjw9qBqtF8aw' +
'+7oM1RNNfYvX5848vxmqAGtGZuG6A1QJq55wb0sBm39LoW4yZ 66Oa' +
'rGZciwdCGttYnw/H6FusMquHD8+hzbn6jcyn11RWG/nMkdtgNaJjm' +
'9aiCG7bk6n65twQLNd/C6c5r48ZmOvDyeflZySKGfsQMzxNczsl1S' +
'85vHSaKIXrDfU5Foy1OXysjhkX0+CcqIXna4phdSNjyX2+B5G ZRaA' +
'mLZwJViMQJbCaSCX5Ib45N/Ky2puXW0lWE6ITXIPVpbKa/oLVCETj' +
'rGZQC6t9c274nJMYVqfycqvK6gTXnjXvAqzmtwZW26wWnbjgG LAag' +
'SjGas7xc+ZdG3NuhEHt80A4j5q934BHzZRm72VyWc24rhE7D6 v1bw' +
'ew2sdqtKsRiBSrD88ZUpe6pzSrRbx+QaJ0e1vm3NDjaLRSfPb n5sn' +
'48RSflZacdoLux6R/WXnn5IliuB5Ho+aDMtaVFl7pNe80q2WxYNuT' +
'Fz+kaqzW59+U/sT5bkTX1llGuxqBaBqrZc6NZrPa6MdsI1b7PHmw2' +
'olrsBqBaITV9XUeLVb7VE85jma12/dQMvox25TV2pNvO1Ync1M3zO' +
'r6HCBpp5pxDVYjEIVZnVrnMYLVvvJ0NEx72EahWZ2am7qkdjX zWXM' +
'bHggCoVldS7TQuHZxW+RY59GFdDFJfOUxU2U7VhUmtv2ZCqtj fh/5' +
'2tUi7qtF3yICYbO6lsMcwWrvOo8eVvvK41Zq6wrj/EwbYbUQ21hfE' +
'qxGIIxbz920DrI6tc5jBKulPO6jDsM1/22Q1bK+pJgh8KsRCOO+cx' +
'sgHg+ktobj8n7Of3a6H4YHQtLlcRN1TLXhz9ToW2zEA6ENZrX GNVi' +
'NQGSz2sXt2mTXKqcuUlIeN1HHVBsZUx/Dal2XjDx5kYwrx1gYBKJB' +
'VjOoC7Mad1CH1RywGoGoIKsF1IWFO6jDao49FqZBVmOMOQLRC Kvr6' +
'3w1BmqwGqwGqxGIZrM6qu2dJdxBHc/q1FjUCFbr+RLBagQCrEaA1Q' +
'gEWA1Wg9VgNQIx6ay2170FqxH0aUp9KJHVxjxOYDUCIXdcuNn sW/c' +
'WrEbN0fWhQVbvTYfM4wRWIxCa1QPn9bN8jWp73dscGSBgdYfW HF0f' +
'eImcGFanuH3GTEPGPE4BJtPfga13OYWahuhCVvvWvQWrUXN0f SiL1' +
'UJsnscJrEYgIlntW/dWT+iU0cwGqzuX1VIfSmS1zONE22A1AhHJap' +
'ax7q1zOmuwuttqjtQHWSa4LA+ENsBqBMLB6sX9dZ2ntDgR3W6 y7m1' +
'g3QGMW+yqmsP1wZhTMZGuP74e5wVeLZzZQ3/BagRC7jh9TwVYLeve' +
'htcdAKvBarAagZhEVkeuOwBWd0/Nqa8F3BxWs8BqBKJBVot4znnM3' +
'QRWt57VQxdf6xRqGqIj77ihpbOdSjHcs/7LyqUTc1nrCdY8wh3Uaa' +
'w+3J+YYvXifqfAagQCrEaA1WA1AqzOZHW8cAd1Cas5707XH/oXrEY' +
'gGrzj9u7dC1YjSm9XM66Z22hXIxClsHr9wBxb+h4cWptoYKDf qZUX' +
'zhINrulNtKIu3EGd9otM1xDW4W95Y04Po88arEYgwGpEFVgtx OY5P' +
'RJog9UIBFiNaHnN+fNTe3ysljk96mZIsF3tXGUgc/5qsBoBVoPViE' +
'hWm7hWoCZKM6sNXGtWBygNViMQxh03unauKIXr4WxphvPIiIB wB3U' +
'kq0nJ97vumz6vf+HMntToqrQyQQ1WIxBgNaJEVn/g5J68rI4BNViN' +
'QLSA1Tw9CFjdwTVHzwPjZHWDoAarEYhms1rPvwdWd2rN+dRxP WYfR' +
'wSr40GdyWrM3YToLlaPzM3U4Po5Tq0fm2HLntd6bOMMEu6gDq s5BM' +
'waope7NbRotlM+LDsLg9UIRJNY7ZvXGqwGqwOs9hUGqxGIRlj NHM5' +
'ktfYzT1xwDO6gDqs5deujYVb7SoLVCEQjrNZtZqcHwuJ5rWmD DRC0' +
'q8FqJ6sDoAarEQh9x41dNM+pDWOJ1o3OZdle9Oh4H8tgNc+VK v+iX' +
'd2BrF4+J6TzHTJA7SyjBVYjEAVY7fOiY1hNwh0EVoPVCEQprK bWby' +
'SrtRftZLUt3EHdwOp6uvXybFALq3lMui4p/4LVCITcccxnvl8E1Hv' +
'37nV6ICz2omlDDJBMVsMD6QZWp/oyolmt+WxwO8DqwDZqGqJTWc0a' +
'33zixvG6iNWyTRpSGhybx/4GbQxv7cvU2IRwB3U2q+2+DKOAg9WH9' +
'xvzXeungNUIhGa1Mc8wWI3Iy2pfX0YMq4XYRj0EqxEIm9XUqG ZKx7' +
'SrRWA1WG2zOjVPSByrZb5r3ka7GoGw7ziiNLNa4xqsRuT1QFj 1vHr' +
'XQ2EPhDaY1RrXYDUCIXfcqiVLFs6ss1q3qzWuhzwa2X5svHAH dQOr' +
'67maEaA2PJD1A3OoHhqTQYHVCESY1UbrGqxGgNUIxKSzmuRkt eA6k' +
'tX1OavB6i5mdaT7YYJ6+RznQnJgNQIRyWrGdQyrU3NWg9VgNV iNQD' +
'SB1SQD0ZrJe/1hg9qHa9xB3cnqEKgHMgRWIxC5WB1oVxOufbm1YHW' +
'Xszqw4EvzWD1lyhTUNERns9rAdSSrpVFt59aC1V3LaiefOTfP SKv2' +
'UZqrUF5WE6hvvm03ahoCrPb51WyGcG4t+ha7nNXhJRQ5d7qeU +0Hd' +
'QFWM6jBakQ3sFrjOi+rKThfy+ds4w7qBlaHKZ0aQm4gemLBZW 2mgd' +
'UIhI/VgutcrGYxq9Gu7lpWZ65LTkx2zPuhWG2YafGsJlA/NP9/YaG' +
'mIbqE1YzrAqzGWJiuZXUmpQXU9Xk/Biyz2mI1KS+r+z7z1yTUNET3' +
'sJoEViNiWB1DaQ1q2mBWm7geTon7PsBqBCKT1ZG4dnJ7jUu4g zqs5' +
'kRSugbqNIdrY8mHTTjrxSxGx/sY1EMXXxspZvXR/9v/SkJNQ3Qbq3' +
'MRG6wGqzMp3WxWw69GdPAdt3H8xExcO4n9vhPqpiJv6IRqsLr LWT0' +
'6MtdJ6YAMVrPiWc24vvm23Zu2jKOmIbqZ1Qauic/Cagb18ae8X3AN' +
'Vnctq4nSrMliNXL2EB3M6gK4ZlB/6KS6CNRgdbfVHFlJWSSgNuTkc' +
'IxysZpxjTHmCLBa41rcj+kzamJWk8BqsHoSWc24Rk1DdDCr8+ J66h' +
'E9bIP0Hl1jtTSthdVsjIDV3cZq/twnkdUk1DQEWG20rqkFQ9BmXJO' +
'cc1mD1d3Dav25g9UIRLl3HN1WDeKaByM4Qa1xjTuow2rOhrF5 Wvbn' +
'PqZWRs6Uc2FlsBqB0KymW0zPsJeL1dSu1qz2zWUNVnc2q32fO 1iNQ' +
'JR1x/HNZS/dlTeLLzyXNVjdPazWnztYjUCUdcc511iMxHVgbhCZyx' +
'p+dZd4ICz+3GkjlwECViMQjbA6E9eDY/OcoruMxwjr+w53UIfVnPH' +
'txxrKnBc3r8BqBAKsRoDVCEQb3XHGnB5lsdoW7qBuYLUhngdV b8u/' +
'vMdHaa6NYDUCYbBaz+nRDFbTdwHuoC5ktWayZrUBbRvUYDUCY dxx9' +
'pwe8X2LulNJj3dYrbR2vI8EVndezYkxMYw1FrV8cxHoxD+wGo GQO8' +
'6e0yM+Zy+e1XT34Q7qQlYLsfUai8Z6izao0a5GIJysNub0KAD qTFZ' +
'PPQKs7lJWC5/tbV+jWgRWIxByxxlzesSPW8zFahLuoK71QGjDaFfL' +
'o2s8TgjnaYPVCITccRvVnB553Q/NZ63B9XNs4Q7qeFav8WvhzB7nt' +
'k951/ACqxHdwGqZ0yNvlyJYDVaD1QhEy1idK6fa53uA1WD1mrIFVi' +
'MQxVgd8KjBarAarEYgqsNq3zpNep1TsBqszqtlSmA1AgFWI8B qBKJ' +
'LWO1cUw+sBqsjsWyvxQlWIxBgNQKsRiA64I7T6wXEsFpP16D5 7NPQ' +
'2tki3EQdDOqRaFDb6yaD1QhEuay21z8Fq8HqeFb71k0GqxGIE lntW' +
'/80ntXAdQeDeiQO1M51k8OsDp7MFLAaAVYXYzUvW6DXL9CsxoR7 nQ' +
'rqSWG1k9ioYAiw2rlWtQFqYbVev0BAzTs5cP3bq6pkztcUz2p jjXu' +
'wGoHIxWpWZh4Iz4Fm5H7oRrW9foEGtQjRRhEzq15kHgjXn/g8EM1k' +
'LR+uwWoEWM2s5nl1nKwW98NYv8D3+3fl0lkhLfLo3Hw6f/7xIj6C3' +
'hOjgeX9hoZWznZq/cCcRMP5pHMgxzf3iUbH3RrbWtdxH+whTT2i9p' +
'f3yNyJ9kpbvs/CLhmzPlcBVnP9KcbqdPt5CliN6GZWh3EdZjXhgm0' +
'QY/0C3+/fSWF1g5RuhNU8gbOxp3FWs5jVjGuZOzHMav1ZRLLa7o+Y' +
'LFY7H+JajVsbAVb7xr9oGesXSMfiwEA///6ljQxKN4fVBrczRa9VL' +
'qs1n21ux7OaOWmw2qkAfvmzCCPaYLWvP6KpY8x9rHZ6IGA1oh tYrd' +
'cij8F1CkGKUYQs+Q2u+Ub45TZVJJOXf2FmYTkb1Y36HiqhJa+/odv' +
'VItoT03422tKak/aS8cNBPmvxZxFZmOXrj2jqPHvxfYtSq3FrI8Bq' +
'TewAq+U3+OSyukRQl8JqIbaxPmw8qw1OtpjVvv4IsBqBmCxWx +Ca5' +
'WS1yGC126ZuDqtzeR1RHnUZrJY1B3lbGtW2D+xktcHJRlhtqP 6tkd' +
'5jlPH1R0wWqzkhxHBFwGoEWB0idgSrde5Bs1kdT+m61Pk0j9V ifTC' +
'rBdc+H9jpgQgnnaDOxWp+UZvPNre1jP6IZq81YJBZy9nVCFYj OpLV' +
'+tZYMTZPVADXWgmrF/ez7PxqZ1+h5u2SBSckOs0jVSYG1KmvAw+fU' +
'92FHj475xI0tH5shk8LZ/bwhu4rtH1gO99jOEK+XDunocHfC8LnxJ' +
'YJQt6ZE1hiXl9kHghYjQCrBxvGNRNbg9qRX102q2Nb0RVjtc8 Hbh6' +
'rje8F3a42vXQXq505gWA1AjGJrG4Q1ySD1an86kWzbJ+2AKvz 2R1x' +
'rGZSaVbrFLvCrHb60j4fOJLV9jEzWW18L2jLmljtNKsj8/omkdU8O' +
'gasRnQtq9eNzm0c1yTCI+f0Ci19Pm08q3P70jnb1YxrOxe6GK vDvr' +
'ThAzvHvDhB7Txmpgci3wtG3yKzugCuJ53VyK9GdAmrtTSredX yxnG' +
'98tyJnL0Jx8Pn03pb0dFwzu1RW16HnQtdwOsQRfrS4gPH+B56 IKEv' +
'59mnAHIXzsxI5Nu64zhRMxguOwuw+nCfI1iN6GpWN45rm9U+n 7ZEU' +
'C8/b2YxVvtyoRthdaYvLT5wPKvDOc/VZ/WUdNis9mV9YK0BRHey2v' +
'Y8bVZvaNgPMUZ/+3zaEkHtY3Vgnm1fLrSB6PpVcrG63hRP78nlS8e' +
'zOpzzXIDVmSqL1Qznm2/brcU7NauxNAwCoF6mQO30PJ2sZpWFa5Lh' +
'05YLaierw/NsB3KhNaiTdSc9bWnGNR9H50jH+NLxrK5zz5PzXFlWG' +
'5T+uy8/QdLEBqsRCM1qls/ztP0QYTVJzzXUCK6XnzFTfNrWeNS+92' +
'uPXiEsL5zZw3yWN27niq8d79MyvG4bs/J+8+bdhcyEiWM2g8/btyX' +
'a8a/HORXPbRvU0//hN5u2jJM0rguzGrhGdCSol/k9z3hW84jFwqwW' +
'n7acFvUXMjxq3/uNYbUvV9zANRPb8LoFxfJ+S2S1HLPtWE2gZlYbZ' +
'kgjrAauEZ0H6mV+zzOG1XWvQI0xp3/DrHbkVJ8xk1UKqDNZ7Xu/Tl' +
'aLbFbrXHFn05pYTeB1Nq0jx7ME5otmHffBHvnbPN+DEM2v7mQ 1XUZ' +
'mNZ0Gl5cNm9XORrXNalKDrGZcg9iINqW0DWqR4Xk6c0J87WrG tXA7' +
'DGp3TrXF6sKgzmQ1y3i/zhk8bFaziMacK243pwXUhFxmdQFcC6gD8' +
'0W3ktX6d4TNanp1/suIpitTgNWk0lmtiY1AtFEwkxcq2bjm39GRY2' +
'RIhjeb6Yf4vGLxQ0QNedRKvnEuvCwCv1/9vaOZrPtVDZxy/mEYuQt' +
'nZhQI09V3rQxvhCHZPN/D9ue1JUKirzzeoNPgv0xs91wiitUM6tvv' +
'20t/p8x5yGhal8VqqJMkbTnNipULZolWnPmXolXn/ZVozaK/IfX2T' +
'Tuhv/9vP/kJXQ8v3zX06JOPk/7xEx+cf+oskmHHja76eKKhROObTx' +
'RtHE805JFvfQ2fAqwWzzOe1UJsw5sNr4due8UNstpsS8exWt5 vNVn' +
'tu1Y2q5vnUfv8eYPVsoKYbl3HsJpALawmgdVQJK4bYfVH/uqjuh4S' +
'old86WRCNOH6xE9/YNpRU4xu7gqy2l5HKYbV4s2KGRJoWnNh7RXTv' +
'w2y2uF7xLHauX5WJKtLEQPZN8zQ56vH9zmWy2rtzxtNa25Oc7 uaRC' +
'ccw2q2PjSr9T0CKEHNYDWJWK1x/YkPTyFckwjUVBs/8L6E1Sao25n' +
'VYn0wqzWuA641lSEQ8XOJQjonJC+r3R51m7Bat1cDyXjaV8+V H1JW' +
'7gfjl35K2IjW7gcjOgBqA9fiVDOoNasbzwOBcY1AGMHjZej3P jMtn' +
'Hdt+Nt6yHlg/fESPWqnxi6al8gzJmUkOn0uUrYP7OOtc77oZsiHYh' +
'J7Pr6cPW5UsxNC/+onhpvWQmkGdZNYjYQQBELSSyJZLcQ2/O1uY7X' +
'PB3ay2jlfdKVYzRLXOsxqA9eMaAPUVEZVMIyLQSDKJHYkq8Xf Hljc' +
'76S0sJo5FsNqOw+5jVitfeByfQw79U7Pbp2L1ZljYbR0PnbAC fHNB' +
'8IFrAo2BaBGIErEdYwHQhvM6gCudZszzGpfHnLFPRAW+8BN8p x9Od' +
'LNZnXMa2liS+iHGmc1QI1ABHCtuRfoXlw4s6e2ztfS2QPn9Yu coA7' +
'gWk+aZ+chh/lsrDkrKn0e5rDYW2heW9oGtYHQGD7nYnXgtXKJp0Jt' +
'BNdgNQJRFqtryxBYrPZ5uT5W+/KQwWoNavt6NoPV4dfKJb0yl81qV' +
'92bggViEIhiuB5dGzsFn4/V2sv1sdqXh5zJalnxMJPVmfNy5GU1e0' +
'HGHjlyPNDsFWzttbd817MAq+3rEGC1/VoFWO1cbsBf96aA1QhEPKv' +
'p3szLaucUfOzlhvoW1VwfRh5ypket235hVsfMy1GsXc24Zt7G e7xO' +
'Yju5ba+xSNezgEctoHZeB2ffouRjF/454PM9ZL+WgWuwGoHIy+q8u' +
'B5aNJs1sLif/QHa8LHayM2TPORUv+HGGaLxzX0s21PduqWP5WtUx6' +
'xpmLddLSrs8RrHCRfm61k4f893HZy5ebleK8Bqm9jOJb3AagS iAKv' +
'pFtaszotrJrZmtRPXtf1pVksecpjVPk/Vx+r4NQ0LtKvn9/c07vHa' +
'+erNYLXvOrSA1YGORWcxsBqBKMbqArjm1c+1TFBbrHb6HmFWa 0/Vx' +
'+r4NQ1zsVryzBv0eOU4TrO6xHExvusQGPNSWPRGwnkgYcsarE YgYl' +
'it+xZF8QvHZOI62VOI1SzCMnuq4n74WD0+MdA7c03DAn2LxFj ZQwd' +
'nn6FA3yKzukRc+1xr4zqExyc2okAeiAFn+NUIRDFWy9xTY8Pz RIVb' +
'10NLZ6e00i0fnwOs5t/ptOHjko3r8DpZBbRwZo89Q4hMphffD0jH4' +
'Y29e/fGvJdGxps3dX4S+eYKeNGa0vCrEYhmsLqId10ZVmeuadgIq4' +
'0+uyqzuqnzk8iVcTahbSwHeA5cIxAxoPaxuuaHLJ9THNdFWW3 nBov' +
'vEcnqvOvVBjKxnavA6D67wmPAmdXsjej9tjfCiwL41tuKea1m zE8i' +
'F8RpRDtZ7eM5WI1ANM5qVstY7csNbh6rY+amtucG4T67Rubr0 O1qx' +
'rUvM2RyWe3LJxcPxMdqo8PRWUxXSNyVCIQN6o3jJ2pWj48kSn F75V' +
'xRDKv1OukpRfsevtzgJrE6cm7qmPma8o4B1+1qke99yZJbrWF 1ruv' +
'j9KWduLa7F9MPAdcIhAnqAqyOaV03zmpfbnAzWB0/N3UzWK2b1nbe' +
'tc3qRtrwxVgdeX3soeUGro0C+l/rIaw1gEDU1xqQtcYI0XUfMprVm' +
'bhunNW+3GBhtXMZQZ+/Wtbc1E1iNeNa8q7FDMnFWN81cR7H7guIZH' +
'Xg+mANLwSi3NCLQpJSPmQ0q8O4bpzVLCM3WPoW9Tn7mFbMfw7 PTd0' +
'8Vksrmllt4Dqvnxxmta8vIPP3SPj6YBFYqHHpJVyTtXQ965to 6WEd' +
'0llme3dOFmkNrndLr+u6Wmnw8HqIg+nFbVmy31511/A8h9JM1hLTw' +
'zGvRems9q0XEJenJ7nBxtBpfc4204r5z875TvOuKVCM1dK6ll y+XI' +
'q5JpnzpWT6ReHrA85ATcJ1MVb7vLsqsFqIbXiePlZ757Uo1wN pjNW' +
'SG6yhZJ+z5lJh/3nSWa3zrvOCOnxNYuZLaYjV/z/M/SBa');
Canvas := GetBitmapCanvas(Picture);
CopyCanvas(Canvas, BHForm.Canvas, 0, 0, 484, 364, 0, 0, 484, 364);
end;
// This form was parsed using: DFM Form Parser v.23 by Ron.
procedure LearningToolBH;
var
TimeLearningToolBH: Integer;
begin
TimeLearningToolBH := GetSystemTime;
BHForm := CreateForm;
with BHForm do
begin
OnClose := @LearningToolBHOnClose;
OnPaint := @DrawImages;
Position := poScreenCenter;
BorderStyle := bsSingle;
BorderIcons := [biMinimize, biSystemMenu];
ClientWidth := 485;
ClientHeight := 365;
Caption := 'BH - Draynor Willow Cutter';
Color := clBtnFace;
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [];
PixelsPerInch := 96;
end;
Top1 := TLabel.Create(BHForm);
with Top1 do
begin
Parent := BHForm;
Left := 0;
Top := 0;
Width := 487;
Height := 57;
Caption := 'BH - Draynor Willows';
Font.Color := clWhite;
Font.Height := -47;
Font.Name := 'Lucida Sans Unicode';
Font.Style := [];
ParentFont := False;
end;
BywhoL := TLabel.Create(BHForm);
with BywhoL do
begin
Parent := BHForm;
Left := 24;
Top := 344;
Width := 258;
Height := 13;
Caption := 'Script Created by: BobboHobbo for SRL-Forums ONLY';
end;
ExtraBox := TGroupBox.Create(BHForm);
with ExtraBox do
begin
Parent := BHForm;
Left := 24;
Top := 216;
Width := 233;
Height := 113;
Caption := 'Extra'#39's';
ParentColor := False;
TabOrder := 0;
end;
WorldL := TLabel.Create(ExtraBox);
with WorldL do
begin
Parent := ExtraBox;
Left := 56;
Top := 96;
Width := 34;
Height := 13;
ParentColor := False;
Caption := 'World?';
end;
UseAutoResponderCB := TCheckBox.Create(ExtraBox);
with UseAutoResponderCB do
begin
Parent := ExtraBox;
Left := 16;
Top := 24;
Width := 201;
Height := 17;
ParentColor := False;
Caption := 'Use Auto Responder? *BETA*';
TabOrder := 0;
end;
RunCB := TCheckBox.Create(ExtraBox);
with RunCB do
begin
Parent := ExtraBox;
Left := 16;
Top := 48;
Width := 89;
Height := 17;
Caption := 'Always Run?';
ParentColor := False;
TabOrder := 1;
end;
AntibanCB := TCheckBox.Create(ExtraBox);
with AntibanCB do
begin
Parent := ExtraBox;
Left := 16;
Top := 72;
Width := 121;
Height := 17;
Caption := 'Use more Antiban?';
ParentColor := False;
TabOrder := 2;
end;
WorldE := TEdit.Create(ExtraBox);
with WorldE do
begin
Parent := ExtraBox;
Left := 16;
Top := 88;
Width := 33;
Height := 21;
MaxLength := 3;
TabOrder := 3;
ParentColor := False;
Text := '108';
end;
PlayerSetup := TButton.Create(BHForm);
with PlayerSetup do
begin
Parent := BHForm;
Left := 304;
Top := 232;
Width := 137;
Height := 25;
Caption := 'Player Setup';
TabOrder := 1;
OnClick := @HandleButtons;
end;
Memo1 := TMemo.Create(BHForm);
with Memo1 do
begin
Parent := BHForm;
Left := 16;
Top := 80;
Width := 225;
Height := 113;
with Memo1.Lines do
begin
Add('Thank you, for trying out BH - Draynor Willow ');
Add('Cutter.');
Add('');
Add('Need Help?');
Add('Post onto my thread:');
Add('http://www.srl-forums.com/forum/bh-draynor-');
Add('willow-t28864.html');
end;
ReadOnly := True;
TabOrder := 2;
end;
VersionBox := TGroupBox.Create(BHForm);
with VersionBox do
begin
Parent := BHForm;
Left := 264;
Top := 88;
Width := 209;
Height := 105;
Caption := 'Script Details';
TabOrder := 3;
end;
CurrentVersionL := TLabel.Create(VersionBox);
with CurrentVersionL do
begin
Parent := VersionBox;
Left := 136;
Top := 24;
Width := 21;
Height := 13;
Caption := Vers;
end;
LastestVersionL := TLabel.Create(VersionBox);
with LastestVersionL do
begin
Parent := VersionBox;
Left := 136;
Top := 40;
Width := 21;
Height := 13;
Caption := VersionBH;
end;
CurrentVersionL1 := TLabel.Create(VersionBox);
with CurrentVersionL1 do
begin
Parent := VersionBox;
Left := 8;
Top := 24;
Width := 122;
Height := 13;
Caption := 'Your Current Version:';
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [fsBold];
ParentFont := False;
end;
LatestVersionL1 := TLabel.Create(VersionBox);
with LatestVersionL1 do
begin
Parent := VersionBox;
Left := 8;
Top := 40;
Width := 122;
Height := 13;
Caption := 'Latest Version Out :';
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [fsBold];
ParentFont := False;
end;
DownLoadB := TButton.Create(VersionBox);
with DownLoadB do
begin
Parent := VersionBox;
Left := 48;
Top := 64;
Width := 105;
Height := 25;
Caption := 'Download Latest';
TabOrder := 0;
OnClick := @HandleButtons;
end;
StartB := TButton.Create(BHForm);
with StartB do
begin
Parent := BHForm;
Left := 304;
Top := 272;
Width := 137;
Enabled := False;
Height := 25;
Caption := 'Click here to Start';
TabOrder := 4;
OnClick := @HandleButtons;
end;
WriteLn('Form compiled in ' + IntToStr(GetSystemTime - TimeLearningToolBH) + ' milliseconds!');
end;
procedure SafeLearningToolBH;
var
V: TVariantArray;
begin
SetArrayLength(V, 0);
ThreadSafeCall('LearningToolBH', V);
end;
procedure ShowLearningToolBHModal;
begin
BHForm.ShowModal;
end;
procedure SafeShowLearningToolBHModal;
var
V: TVariantArray;
begin
SetArrayLength(V, 0);
ThreadSafeCall('ShowLearningToolBHModal', V);
end;
procedure MainLearningToolBH;
begin
try
SafeLearningToolBH;
SafeShowLearningToolBHModal;
finally
CalculateDecsions;
except
WriteLn('An error seems to have occurred in: LearningToolBH');
end;
end;
procedure WalkToBank; forward;
procedure Banking(BAxe: boolean); forward;
procedure FastMouseFlag(PosX, PosY, Ranx, Rany: integer); forward;
function GetCurrentLevel(Skill: string): Integer; forward;
procedure Setup2; forward;
procedure WalkToWillows; forward;
procedure RelocatePlayer(PlayersLocation: string); forward;
Function FindAxeBH:boolean; forward;
procedure Post(say, Use: string);
begin
Writeln(' ' + say + ':' + use);
Players[CurrentPlayer].Loc := Use;
end;
function DeathWalk: TPointArray;
begin
SetLength(Result, 21);
Result[0] := Point(3229, 3217);
Result[1] := Point(3236, 3217);
Result[2] := Point(3235, 3226);
Result[3] := Point(3228, 3232);
Result[4] := Point(3222, 3239);
Result[5] := Point(3218, 3246);
Result[6] := Point(3209, 3246);
Result[7] := Point(3200, 3246);
Result[8] := Point(3188, 3243);
Result[9] := Point(3177, 3244);
Result[10] := Point(3171, 3237);
Result[11] := Point(3162, 3239);
Result[12] := Point(3157, 3233);
Result[13] := Point(3144, 3229);
Result[14] := Point(3130, 3224);
Result[15] := Point(3120, 3219);
Result[16] := Point(3111, 3222);
Result[17] := Point(3107, 3233);
Result[18] := Point(3105, 3244);
Result[19] := Point(3096, 3248);
Result[20] := Point(3092, 3241);
for II := 0 to High(Result) do
if not (WalkToTile(Result[II], 1, 1)) then
begin
II := 0;
WalkToTile(Result[II], 3, 2);
I := I + 1;
if i > 5 then
begin
Break;
Logout;
Writeln('Reflection Failed - Logging out');
Exit;
end;
end else
continue;
end;
function IsWoodcutting: boolean;
begin
Result := InRange(GetMe.Animation, 867, 879);
end;
{
[================================================== =================]
[ function FindChats(Messages: tstringarray): Boolean;
[ Description: Finds the chat in the last line.
[================================================== =================]
}
var
Talked: integer;
function InChatMulti(Text: TStringArray): Boolean;
var
s: string;
i, n: Integer;
begin
if GetLastChatText(s) then
begin
n := Length(Text) - 1;
for i := 0 to n do
if (Pos(Text[i], s) > 0) then
begin
Result := True;
SaveToChatLog;
Marktime(Talked);
Exit;
end;
end;
end;
procedure AutoResponder;
var
OldName: string;
begin
SaveToChatLog;
if (TimeFromMark(Talked) > 25000) then
Exit;
if (OldLine = TheLine) or (TheName = OldName) or (pos(Players[CurrentPlayer].Nick, TheName) > 0) then
Exit;
if InChatMulti(['hello', 'hi', 'yo', 'sup', 'hey']) then
begin
Wait(1000 + Random(500));
case Random(6) of
0: Typesend('hello');
1: Typesend('hey sup?');
2: Typesend('yo');
3: Typesend('hey');
4: Typesend('sup');
5: Typesend('heey');
6: Typesend('gooday');
end;
Responded := Responded + 1;
MarkTime(Talked);
end;
if InChatMulti([Players[CurrentPlayer].Nick]) then
begin
Wait(1000 + Random(500));
case Random(6) of
0: Typesend('hello');
1: Typesend('hey');
2: Typesend('yo');
3: Typesend('heyz');
4: Typesend('sup');
5: Typesend('hi');
6: Typesend('?');
end;
Responded := Responded + 1;
MarkTime(Talked);
end;
if InChatMulti(['wc', 'woodcut', 'cut']) and
InChatMulti(['lv', 'leve']) and
not (InChatMulti(['Cong', 'lations'])) then
begin
Wait(1000 + Random(500));
case Random(4) of
0: TypeSend(IntToStr(Players[CurrentPlayer].Integers[2]));
1: TypeSend(IntToStr(Players[CurrentPlayer].Integers[2]) + ' u?');
2: TypeSend(IntToStr(Players[CurrentPlayer].Integers[2]) + ' here');
3: TypeSend(IntToStr(Players[CurrentPlayer].Integers[2]) + ' :)');
end;
Responded := Responded + 1;
MarkTime(Talked);
end;
end;
{
[================================================== =================]
[ function InFight: Boolean;
[ Description: Finds a fight.
[ By Frozen Soul.
[================================================== =================]
}
function InFight: Boolean; //Credits to Frozen Soul
begin
if not (LoggedIn) then
Exit;
if Players[CurrentPlayer].Integers[4] = 0 then
begin
Players[CurrentPlayer].Integers[4] := SmartGetFieldArrayInt(0, CurrentLevels, 3);
end else
if Players[CurrentPlayer].Integers[4] > HP then
if TimeFromMark(HPTime) >= 60000 then
begin
x := TimeFromMark(HPTime) - 60000;
MarkTime(HPTime);
DecEx(HPTime, x);
Inc(HP);
end;
if FindColor(x, y, 65280, 217, 129, 297, 209) then
begin
x := GetMMLevels('hp', ColorSign);
if x = -1 then
begin
Result := FindFight;
Exit;
end;
if (x < HP) then
begin
Result := True;
WriteLn('******** FOUND FIGHTING RANDOM ********');
WriteFileString(TheFile, '******** FOUND FIGHTING RANDOM ********' + Chr(13));
TakeScreen('Found Fight');
Inc(Fights);
MarkTime(HPTime);
HP := GetMMLevels('hp', ColorSign);
if HP = -1 then
HP := Players[CurrentPlayer].Integers[4];
end;
end;
end;
function FindLost: boolean;
begin
if not (LoggedIn) then
Exit;
if not TileOnMM(Point(3092, 3247)) and not TileOnMM(Point(3090, 3231)) then
begin
Result := true;
end;
end;
{
[================================================== =================]
[ procedure FindRandoms;
[ Description: Finds all the possible randoms
[================================================== =================]
}
procedure FindRandoms;
begin
if (not (LoggedIn)) then
Exit;
FindNormalRandoms;
if (UseAutoResponderCB.Checked) then
begin
AutoResponder;
end;
if (FindDead) or (FindLost) then
begin
Post('Note:', ' Player is lost relocating...');
RelocatePlayer('Lost');
end;
if (InFight) then
begin
RunTo('W', True)
FFlag(3);
Wait(100 + random(500));
if FindSymbol(x, y, 'fish') then
begin
mouse(x, y + 20, 6, 6, true);
Post('Found', ' Fish Symbol');
FFlag(2);
Exit;
end else
begin
Post('Error', ' Running Back from fight.');
Logout;
end;
end;
end;
{
[================================================== =================]
[ Procedure Post(say, Use: string);
[ Description: Quickly writes the line and the location.
[================================================== =================]
}
function FindEntReflectionBH(React: boolean): boolean;
var
EntxBH, EntyBH: integer;
begin
if not (LoggedIn) then
Exit;
if (IsWoodCutting) and (FindColorTolerance(EntxBH, EntyBH, 195836, 595, 109, 602, 118, 15)) then
begin
if (FindNPC('Tree', TheEnt)) then
begin
Writeln('Found a Ent');
if (React) then
begin
FastMouseFlag(MMcx + 3, MMcy, 8, 8);
end;
Inc(EntsAvoided);
Result := True;
end;
end;
end;
procedure XtremeWait(WaitTime: integer);
var
WW:integer;
begin
MarkTime(WW);
repeat
FindRandoms;
FindEntReflectionBH(true);
wait(100 + random(50));
Until(TimeFromMark(WW) > WaitTime - 150);
end;
procedure MouseAntiBan;
var
B, D: Integer;
begin
if not (LoggedIn) then
Exit;
D := MouseSpeed;
MouseSpeed := MouseSpeed + random(15);
repeat
MMouse(x - 312 + random(1100), y + random(400), 2, 2);
Inc(B);
XtremeWait(1000 + random(1000));
until (not IsWoodCutting or (B > 3) or not LoggedIn)
MouseSpeed := D;
end;
function GetBestAxeBH: Boolean;
var
InvAxe, Ix, Iy: Integer;
begin
if not LoggedIn then exit;
srl_LoadBitmaps([47, 48, 49, 50, 51, 52, 53, 54]);
for InvAxe := 1 to 8 do
if FindBitmapToleranceIn(srl_GetBitmap(55 - InvAxe), Ix, Iy, MIX1, MIY1, MIX2, MIY2, 10) then
begin
break;
Mouse(Ix, Iy, 5, 5, true);
end;
if (InvAxe = 0) then
begin
Result := False;
Writeln('No axe was found.');
srl_FreeBitmaps;
Exit;
end;
case (InvAxe) of
1: begin
Players[CurrentPlayer].Strings[0] := 'Dragon';
WriteLn('Best Dragon axe');
end;
2: begin
Players[CurrentPlayer].Strings[0] := 'Rune';
WriteLn('Best Rune axe');
end;
3: begin
Players[CurrentPlayer].Strings[0] := 'Addy';
WriteLn('Best Addy axe');
end;
4: begin
Players[CurrentPlayer].Strings[0] := 'Mith';
WriteLn('Best Mith axe');
end;
5: begin
Players[CurrentPlayer].Strings[0] := 'Black';
WriteLn('Best Black axe');
end;
6: begin
Players[CurrentPlayer].Strings[0] := 'Steel';
WriteLn('Best Steel axe');
end;
7: begin
Players[CurrentPlayer].Strings[0] := 'Iron';
WriteLn('Best Iron axe');
end;
8: begin
Players[CurrentPlayer].Strings[0] := 'Bronze';
WriteLn('Best Bronze axe');
end;
end;
Result := True;
srl_FreeBitmaps;
end;
procedure AntiBanBH;
begin
if not (LoggedIn) then
Exit;
if TimeFromMark(AB) < 5000 then
exit;
if not IsWoodCutting then
exit;
case random(20) of
0: begin
IdleTime(1000 + Random(1000), 500, 0.5);
Wait(200 + random(800));
end;
2: if (AntibanCB.Checked) then
begin
PickupMouse;
end;
1: begin
HoverSkill('random', false);
if (AntibanCB.Checked) then
GameTab(1 + random(10));
Wait(300 + random(100));
GameTab(4);
MarkTime(AB);
end;
13: begin
PickUpMouse;
MarkTime(AB);
end;
5,6,7,12: MouseAntiBan;
4: begin
GameTab(1 + Random(12));
wait(800 + random(500));
GameTab(4)
MarkTime(AB);
end;
8: begin
RandomRClick;
wait(500 + random(500));
MarkTime(AB);
end;
9: begin
GameTab(1 + random(10));
wait(100 + random(1000));
GameTab(1 + random(10));
wait(100 + random(1000));
GameTab(4);
MarkTime(AB);
end;
10: if (AntibanCB.Checked) then
begin
IdleTime(2000 + Random(3000), 500, 0.5);
end;
end;
end;
{
[================================================== =================]
[ function RockDDTM: Integer;
[ Description: Loads the RockDDTM.
[================================================== =================]
}
function RockDDTM: Integer;
var
dtmMainPoint: TDTMPointDef;
dtmSubPoints: array[0..2] of TDTMPointDef;
TempTDTM: TDTM;
begin
dtmMainPoint.x := 629;
dtmMainPoint.y := 35;
dtmMainPoint.AreaSize := 0;
dtmMainPoint.AreaShape := 0;
dtmMainPoint.Color := 5134671;
dtmMainPoint.Tolerance := 50;
dtmSubPoints[0].x := 625;
dtmSubPoints[0].y := 33;
dtmSubPoints[0].AreaSize := 1;
dtmSubPoints[0].AreaShape := 0;
dtmSubPoints[0].Color := 3029039;
dtmSubPoints[0].Tolerance := 50;
dtmSubPoints[1].x := 630;
dtmSubPoints[1].y := 38;
dtmSubPoints[1].AreaSize := 1;
dtmSubPoints[1].AreaShape := 0;
dtmSubPoints[1].Color := 4344899;
dtmSubPoints[1].Tolerance := 50;
dtmSubPoints[2].x := 631;
dtmSubPoints[2].y := 32;
dtmSubPoints[2].AreaSize := 1;
dtmSubPoints[2].AreaShape := 0;
dtmSubPoints[2].Color := 1713179;
dtmSubPoints[2].Tolerance := 50;
TempTDTM.MainPoint := dtmMainPoint;
TempTDTM.SubPoints := dtmSubPoints;
Result := AddDTM(TempTDTM);
end;
{
[================================================== =================]
[ function FindRockDDTM(A, B, C, D: integer): boolean;
[ Description: Finds the RockDDTM in a percific area.
[================================================== =================]
}
function FindRockDDTM(A, B, C, D: integer): boolean;
var TheDTM: Integer;
begin
TheDTM := RockDDTM;
Result := FindDTMRotated(TheDTM, X, Y, A, B, C, D, -Pi, Pi, 0.1, WalkAngle);
FreeDTM(TheDTM);
end;
{
[================================================== =================]
[ procedure AxeBroken;
[ Description: Detects broken axes and banks and gets a new one.
[================================================== =================]
}
procedure AxeBroken;
begin
{if not (LoggedIn) then
Exit;
FindRandoms;
if not FindDTMRotated(AxeDTM, X, Y,MIx1,MIy1,MIx2,MIy2, -Pi, Pi, 0.1, WalkAngle) then
begin
Writeln('Ent Broke the axe.');
WalkToBank;
Banking(true);
WalkToWillows;
end; }
end;
{
[================================================== =================]
[ procedure RelocatePlayer(PlayersLocation: string);
[ Description: When message sent to here it fixes the problem by relocating.
[================================================== =================]
}
procedure RelocatePlayer(PlayersLocation: string);
var
TimesBH: integer;
begin
if not (LoggedIn) then
Exit;
case PlayersLocation of
'NormalTree': begin
if FindSymbol(x, y, 'fish') then
begin
mouse(x, y + 20, 6, 6, true);
Post('Found', ' Fish Symbol');
FFlag(2);
Exit;
end;
end;
'Lost':
begin
if not TileOnMM(Point(3222, 3217)) then
begin
CastSpell(1);
repeat
Wait(2000);
Inc(TimesBH);
until (TileOnMM(Point(3222, 3217)) or (TimesBH > 10) or not LoggedIn);
if (TimesBH > 10) or not LoggedIn then
begin
Logout;
Post('Lost', ' Lost');
Exit;
end;
end else
begin
DeathWalk;
if TileOnMM(Point(3092, 3241)) then
begin
Writeln('Made it back from being Lost!');
Setup2;
WalkToWillows;
end else
begin
Post('Failed', ' Failed Walk back from Lost.');
end;
end;
end;
end;
end;
{
[================================================== =================]
[ function DetectNormalTree: boolean;
[ Description: If finds a NormalTree it sends information to RelocatePlayer.
[================================================== =================]
}
function DetectNormalTree: boolean;
begin
Result := IsUpText('Tre');
FindRandoms;
if (Result) then
begin
RelocatePlayer('NormalTree');
end;
end;
{
[================================================== =================]
[ procedure PlayerStats;
[ Description: Goes with the progress report.
[================================================== =================]
}
procedure PlayerStats;
var
Active: string;
Loc: string;
i: Integer;
begin
if Players[CurrentPlayer].Integers[2] = 0 then
begin
Players[CurrentPlayer].Integers[2] := GetCurrentLevel('WoodCutting');
end else
begin
if Players[CurrentPlayer].Active = True then
Active := 'True'
else
Active := 'False';
Writeln(' Name : ' + Players[CurrentPlayer].Name);
Writeln(' Player : ' + inttostr(CurrentPlayer));
Writeln(' Active : ' + Active);
if Players[CurrentPlayer].loc = '' then
Writeln(' Location : Unknown')
else
Writeln(' Location : ' + Players[CurrentPlayer].loc);
Writeln(' Using a : ' + Players[CurrentPlayer].Strings[0] + ' Axe.');
Writeln(' Start WC Lv : ' + IntToStr(Players[CurrentPlayer].Integers[2]));
Writeln(' Total WC Lvs Gained : ' + IntToStr(Answer));
WriteLn('[================================================== =================================]');
for I := 0 to HowManyPlayers - 1 do
begin
if Players[i].loc = '' then
begin
loc := 'Unknown';
end;
if Players[i].Active then
Active := 'True '
else
Active := 'False ';
Writeln(' ' + (IntToStr(I)) + ': ' + Players[I].Name + ' = ' + Active +
+ 'WC Lv: ' + IntToStr(Players[I].Integers[2]) + ' '
+ 'Worked: ' + IntToStr(Players[i].Worked) + ' min. '
+ 'Axe: ' + Players[CurrentPlayer].Strings[0] + ' '
+ 'Location:' + Players[i].loc
+ ' Random In: ' + Players[i].Rand);
end;
WriteLn('[================================================== =================================]');
end;
end;
{
[================================================== =================]
[ procedure ProgressReport;
[ Description: Reports the scripts stats.
[================================================== =================]
}
function PadEx(S: string; I: Integer): string;
var
II: Integer;
begin
for II := 1 to I do
Result := Result + S;
end;
procedure ProgressReport;
begin
if clearbug then
begin
ClearDebug;
end;
SRLRandomsReport;
WriteLn('[================================================== =====]');
WriteLn('[ ~ Progress Report ~ V ' + Vers + ' ]');
WriteLn('[================================================== =====]');
Writeln('[ Script Worked for ' + TimeRunning + PadEx(' ', 36 - Length(TimeRunning)) + ']');
Writeln('[ Banked ' + +IntToStr(Banked) + ' load[s].' + PadEx(' ', 38 - Length(IntToStr(Banked))) + ']');
Writeln('[ Chopped ' + IntToStr(Chopped) + ' Log[s].' + PadEx(' ', 38 - Length(IntToStr(Chopped))) + ']');
if Responded > 0 then
Writeln('[ Responed ' + IntToStr(responded) + PadEx(' ', 45 - Length(IntToStr(Responded))) + ']');
if Answer > 0 then
Writeln('[ Gained ' + IntToStr(Answer) + ' Total WC Levels' + PadEx(' ', 31 - Length(IntToStr(Answer))) + ']');
if Axe > 0 then
Writeln('[ Ents Broke the Axe ' + IntToStr(Axe) + ' Time[s].' + PadEx(' ', 26 - Length(IntToStr(Axe))) + ']');
Writeln('[ Fastest Load ' + ConvertTime(BestLapTimeBH));
writeln('[================================================== =====]');
PlayerStats;
end;
procedure RunPercentage(HowMuchPercent: integer);
var
RunPercent: Integer;
ColourSign: string;
begin
RunPercent := GetMMLevels('run', ColourSign);
if (RunPercent > HowMuchPercent) then
begin
SetRun(True);
end;
end;
{
[================================================== =================]
[ procedure WalkToWillows;
[ Description: Walks to the willows in draynor from the bank.
[================================================== =================]
}
procedure WalkToWillows;
begin
if not (LoggedIn) then
Exit;
makeCompass('s');
ResetVars;
if (RunCB.Checked) then
begin
RunPercentage(20);
end else
begin
case Random(3) of
0: SetRun(true);
1: Setrun(false);
2: ;
end;
end;
if (FindRockDDTM(588, 12, 639, 58)) then
begin
Post('Found', ' The RockDTM');
Mouse(x + 30, y + 5, 9, 12, true);
FFlag(2);
Exit;
end;
Post('Error', ' Couldnt Find RockDDTM (using backup)');
if FindSymbol(x, y, 'fish') then
begin
mouse(x, y + 20, 6, 6, true);
Post('Found', ' Fish Symbol');
FFlag(2);
Exit;
end;
Post('Error', ' Symbol Walk Failed Using last chance backup');
if RadialWalk(FindWaterColor, 25, 78, 68, -25, -5) then
begin
Post('Found', ' Used RadialWalk');
wait(5000);
FFlag(2);
Exit;
end;
BankDTM := DTMFromString('78DA634C666260A86240017FFE303170016 94' +
'620FE0F048C203525A86AFEFD1386AB0101007A1109D6');
if FindDTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2, -Pi, Pi, 0.1, WalkAngle) or FindSymbol(x, y, 'bank') then
begin
Mouse(647, 46, 10, 10, true);
wait(500);
FreeDTM(BankDTM);
FFlag(2);
WalkToWillows;
Exit;
end;
FreeDTM(BankDTM);
Post('Error', ' BackupWalk Failed, Relocating..');
RelocatePlayer('Lost');
end;
procedure FastMouseFlag(PosX, PosY, Ranx, Rany: integer);
var
Repeated: integer;
begin
if (not LoggedIn) then Exit;
repeat
Mouse(PosX, PosY, Ranx, Rany, true);
PosX := PosX + 1;
PosY := PosY + 1;
Repeated := Repeated + 1;
Wait(100 + random(100));
until (FlagPresent or (Repeated = 25));
end;
{
[================================================== =================]
[ function EntFinderBHText: boolean;
[ Description: Finds Ents by IsUpText.
[================================================== =================]
}
function EntFinderBHText(react: boolean): boolean;
var
BHX, BHY: integer;
begin
if (InvFull) or (not LoggedIn) then
Exit;
Result := FindColorTolerance(BHX, BHY, 388075, 80, 6, 127, 20, 30);
if (Result) and IsUpText('hop') then
begin
if React then
begin
FastMouseFlag(MMcx + 3, MMcy, 2, 2);
EntsAvoided := EntsAvoided + 1;
end;
end;
end;
function FindObjTPAEx(var x, y: integer; color, tol, cts, ObjWidth, ObjHeight, minCount: Integer; UpText: tstringarray): Boolean;
var
I, j, tcts: Integer;
myPoint: TPoint;
Points: TPointArray;
aPoints: T2DPointArray;
s: string;
begin
FindRandoms;
tcts := GetColorToleranceSpeed;
if CTS * 9 mod 3 <> 0 then
CTS := 1;
ColorToleranceSpeed(cts);
FindColorsSpiralTolerance(x, y, Points, Color, MSX1, MSY1, MSX2, MSY2, Tol);
aPoints := TPAtoATPAEx(Points, ObjWidth, ObjHeight);
SetLength(Points, 0);
for I := 0 to Length(aPoints) - 1 do
begin
FindRandoms;
if Length(aPoints[I]) < minCount then
Continue;
myPoint := MiddleTPA(aPoints[I]);
FindRandoms;
MMouse(myPoint.X, myPoint.Y, 0, 0);
Wait(100 + Random(50));
ColorToleranceSpeed(1);
s := rs_getuptext;
for j := 0 to high(uptext) do
if pos(uptext[j], s) <> 0 then
begin
x := myPoint.X;
y := myPoint.Y;
Result := True;
ColorToleranceSpeed(tcts);
Exit;
end;
ColorToleranceSpeed(cts);
end;
ColorToleranceSpeed(tcts);
end;
function FindWillowTPA(Click: boolean): boolean;
var
hhx, hhy: integer;
begin
Result := FindObjTPAEx(hhx, hhy, 2244145, 11, -1, 8, 8, 15, ['illo']);
if (Result) then
begin
if (Click) then
begin
if not (EntFinderBHText(False)) and IsupText('illo') then
begin
Mouse(hhx, hhy, 2, 2, true);
Writeln('Found Tree at X: ' + IntToStr(HHx) + ' Y: ' + IntToStr(HHy));
FFlag(0);
end;
end;
hhx := dsx;
hhy := dsy;
end;
end;
{
[================================================== =================]
[ procedure FindGainedLevel;
[ Description: Adds 1 to the progress report if gains a level.
[================================================== =================]
}
procedure FindGainedLevel;
var
StartLevel, EndLevel: integer;
begin
StartLevel := Players[CurrentPlayer].Integers[2];
EndLevel := Players[CurrentPlayer].Integers[3];
Answer := EndLevel - StartLevel;
end;
{
[================================================== =================]
[ function EntFinderBH: boolean;
[ Description: Finds ent by SRL's ent.
[================================================== =================]
}
{
[================================================== =================]
[ procedure CuttingStuff;
[ Description: The Cutting loop.
[================================================== =================]
}
procedure CuttingStuff;
begin
if not (LoggedIn) then
Exit;
repeat
if FindWillowTPA(true) then
begin
DetectNormalTree;
MarkTime(Timer);
FFlag(0);
repeat
If not LoggedIn then Break;
Wait(1000 + Random(2000));
FindEntReflectionBH(true);
wait(500 + random(200));
AntibanBH;
AxeBroken;
wait(500 + random(200));
FindRandoms;
Wait(1000 + random(1000));
until (invfull or (TimeFromMark(Timer) > 25000 + Random(15000)) or not IsWoodCutting);
Post('Notice', ' Tree Gone.');
end else
begin
Continue;
end;
until (InvFull or not LoggedIn);
end;
{
[================================================== =================]
[ procedure WalkToBank;
[ Description: Walks to the bank in draynor from the willows.
[================================================== =================]
}
procedure WalkToBank;
begin
if not (LoggedIn) then
Exit;
wait(10 + random(10));
if not (RunCB.Checked) then
begin
case Random(3) of
0: SetRun(true);
1: Setrun(false);
2: wait(100 + random(10));
end;
end;
FindRandoms;
wait(100 + random(10));
ResetVars;
if FindDTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2, -Pi, Pi, 0.1, WalkAngle) then
begin
Mouse(x - 7, y, 3, 6, true);
Post('Found', ' Bank DTM');
FFlag(0);
Exit;
end;
FindRandoms;
Post('Error', ' Couldnt find DTM using backup');
if FindSymbol(x, y, 'bank') then
begin
mouse(x, y, 2, 2, true);
Post('Found', ' Bank Symbol');
FFlag(2);
Exit;
end;
FindRandoms;
if FindSymbol(x, y, 'fish') then
begin
mouse(x, y + 20, 6, 6, true);
Post('Found', ' Fish Symbol');
FFlag(2);
WalkToBank;
Exit;
end;
FindRandoms;
Post('Error', ' Couldnt find Bank Symbol and DTM Relocating..');
RelocatePlayer('Lost');
end;
{
[================================================== =================]
[ function CountItemDTM(DTM: Integer): boolean;
[ Description: Counts the dtm selected.
[================================================== =================]
}
function CountItemDTM(DTM: Integer): boolean;
var
i, x, y: Integer;
TB: Tbox;
begin
GameTab(4);
for i := 1 to 28 do
begin
TB := InvBox(i);
if ExistsItem(i) then
if FindDTM(DTM, x, y, TB.x1, TB.y1, TB.x2, TB.y2) then
Inc(Chopped);
Result := true;
end;
end;
{
[================================================== =================]
[ function CountItemDTM1(DTM: Integer): boolean;
[ Description: Counts the dtm selected. (Returns as an integer)
[================================================== =================]
}
function CountItemDTM1(DTM: Integer): Integer;
var
i, x, y: Integer;
TB: Tbox;
begin
GameTab(4);
for i := 1 to 28 do
begin
TB := InvBox(i);
if ExistsItem(i) then
if FindDTM(DTM, x, y, TB.x1, TB.y1, TB.x2, TB.y2) then
Inc(Result);
end;
end;
{
[================================================== =================]
[ procedure Banking(BAxe: boolean);
[ Description: Banks, true if is banking a broken axe and false if not
[================================================== =================]
}
procedure DoTheMath;
begin
Banked := Banked + 1;
Bankedd := Bankedd + 1;
ReportVars[2] := 1;
Players[CurrentPlayer].Integers[3] := GetCurrentLevel('WoodCutting');
end;
procedure Banking(BAxe: boolean);
var
Zz: integer;
begin
if not (LoggedIn) then
Exit;
FindRandoms;
repeat
OpenBankFast('db');
FindRandoms;
Inc(Zz);
if Zz > 1 then
begin
MakeCompass('S');
if FindDTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2, -Pi, Pi, 0.1, WalkAngle) then
begin
Mouse(x - 7, y, 3, 6, true);
Post('Found', ' Bank DTM');
FFlag(0);
end else
begin
if FindSymbol(x, y, 'fish') then
begin
mouse(x, y + 20, 6, 6, true);
Post('Found', ' Fish Symbol');
FFlag(0);
end;
end;
if FindDTMRotated(BankDTM, x, y, MMX1, MMY1, MMX2, MMY2, -Pi, Pi, 0.1, WalkAngle) then
begin
Mouse(x - 7, y, 3, 6, true);
Post('Found', ' Bank DTM');
FFlag(0);
end;
end;
until ((BankScreen) or (PinScreen) or (zz = 3));
if Zz = 3 then
begin
Logout;
Post('Error', ' Failed to Open Bank (FSB1)');
Exit;
end;
if (PinScreen) then
begin
InPin(IntToStr(Players[CurrentPlayer].Integers[1]));
Wait(500 + Random(250));
end;
if (BAxe) then
begin
if (BankScreen) then
begin
BrokenAxedtm := BitmapFromString(6, 12, 'z78DA3330200CDC700003' +
'A2F552A206972CF12EA1AE6B315562EAA2DCCDB80000FF8D5 941');
if (FindBitmapMaskTolerance(BrokenAxedtm, x, y, MIX1, MIY1, MIX2, MIY2, 5, 5)) then
begin
Mouse(x, y, 1, 1, true);
wait(1000 + random(100));
end;
FreeBitmap(BrokenAxeDTM);
if GetBestAxeBH then
begin
CloseBank;
Axe := Axe + 1;
ReportVars[1] := 1;
Exit;
end;
Post('Error', ' No Spare Axe!');
Logout;
Exit;
end;
end;
if (BankScreen) then
begin
WillowLog := DTMFromString('78DA639CC6C4C0F08C0105B8DA493048026 94' +
'620FE0F048C1D40356F18D000231209A47B816AEE1050331F A8E6' +
'2601358B89B06B0A50CD07FC6A00A65B0DB2');
CountItemDTM(WillowLog);
ReportVars[0] := CountItemDTM1(WillowLog);
Deposit(2, 28, true);
wait(20 + random(20));
FreeDTM(WillowLog);
wait(20 + random(20));
CloseBank;
BeatRecordTiming(LapTime);
DoTheMath;
FindGainedLevel;
ProgressReport;
Disguise('Done [' + IntToStr(Bankedd) + '/' + IntToStr(Players[CurrentPlayer].Integers[0]) + '] Loads');
Exit;
end else
begin
Post('Error', ' Cant Find Bank.');
Logout;
end;
end;
function FindAxeBH:boolean;
var
InvAxe, WieldAxe, Ix, Iy: Integer;
begin
if not LoggedIn then exit;
srl_LoadBitmaps([47, 48, 49, 50, 51, 52, 53, 54]);
GameTab(5);
for WieldAxe := 0 to 7 do
if FindBitmapToleranceIn(srl_GetBitmap(54 - WieldAxe), Ix, Iy, 566, 285, 606, 327, 10) then
begin
break;
end else
begin
GameTab(4)
for InvAxe := 0 to 7 do
if FindBitmapToleranceIn(srl_GetBitmap(54 - InvAxe), Ix, Iy, MIX1, MIY1, MIX2, MIY2, 10) then
break;
end;
if (InvAxe = 8) and (WieldAxe = 8) then
begin
Result := False;
Writeln('No axe was found.');
srl_FreeBitmaps;
Exit;
end;
EquipAxe := (WieldAxe - InvAxe < 0);
case Min(WieldAxe, InvAxe) of
0: begin
Players[CurrentPlayer].Strings[0] := 'Dragon';
WriteLn('Using Dragon axe');
end;
1: begin
Players[CurrentPlayer].Strings[0] := 'Rune';
WriteLn('Using Rune axe');
end;
2: begin
Players[CurrentPlayer].Strings[0] := 'Addy';
WriteLn('Using Addy axe');
end;
3: begin
Players[CurrentPlayer].Strings[0] := 'Mith';
WriteLn('Using Mith axe');
end;
4: begin
Players[CurrentPlayer].Strings[0] := 'Black';
WriteLn('Using Black axe');
end;
5: begin
Players[CurrentPlayer].Strings[0] := 'Steel';
WriteLn('Using Steel axe');
end;
6: begin
Players[CurrentPlayer].Strings[0] := 'Iron';
WriteLn('Using Iron axe');
end;
7: begin
Players[CurrentPlayer].Strings[0] := 'Bronze';
WriteLn('Using Bronze axe');
end;
end;
Result := True;
srl_FreeBitmaps;
end;
procedure Setup;
begin
ClearDebug;
CheckVersion;
MainLearningToolBH;
if (EndLearningToolBH) then
TerminateScript;
SmartSetupEx(StrToInt(WorldE.Text), True, True, False);
SetTargetDC(SmartGetDC);
SetupSRL;
ScriptID := '669';
SRLID := SRLIDBH;
SRLPassword := SRLPass;
wait(1000);
if (not (LoggedIn)) then
LoginPlayer;
AxeDTM := DTMFromString('78DA63CC60616058CCC8800C9A930518248 13' +
'448F43F10301603D52C455503918591403A01A866270135E9 4035' +
'F309A84902AA59835F0D002D200A83');
end;
{************************************************* ******************
Function GetCurrentLevel(Skill: String): Integer;
By: n3ss3s Modded by BH.
Description: Returns the current level of the skill Skill.
************************************************** ******************}
function GetCurrentLevel(Skill: string): Integer;
begin
Result := SmartGetFieldArrayInt(0, CurrentLevels, 8);
end;
function AllPlayersFalse: boolean; // Thanks to Mickaliscious =D
var ActivePlayers, i: byte;
begin
for i := 0 to High(Players) do
if Players[i].Active then Inc(ActivePlayers);
if ActivePlayers = 0 then Result := True;
end;
procedure Setup2;
begin
if (UseAutoResponderCB.Checked) then
begin
SetChat('on', 1);
end;
MarkTime(LapTime);
SetAngle(true);
FindRandoms;
Disguise('Done [' + IntToStr(Bankedd) + '/' + IntToStr(Players[CurrentPlayer].Integers[0]) + '] Loads');
if Players[CurrentPlayer].Integers[2] = 0 then
begin
Players[CurrentPlayer].Integers[2] := GetCurrentLevel('Woodcutting');
end;
BankDTM := DTMFromString('78DA634C666260A86240017FFE303170016 94' +
'620FE0F048C203525A86AFEFD1386AB0101007A1109D6');
if not (FindAxeBH) then
begin
OpenBankFast('db');
if GetBestAxeBH then
begin
CloseBank;
Exit;
end else
begin
Post('Error', ' Cant find an axe, Logging out.');
Logout;
end;
end;
end;
begin
Setup;
repeat
repeat
Setup2;
WalkToWillows;
CuttingStuff;
WalkToBank;
Banking(False);
until (Bankedd >= (Players[CurrentPlayer].Integers[0])) or (not (LoggedIn));
if (Bankedd >= (Players[CurrentPlayer].Integers[0])) then
begin
writeln('Loads done, Chaning player');
Players[CurrentPlayer].Loc := 'Bank. Loads done.';
ProgressReport;
Logout;
NextPlayer(true);
Bankedd := 0;
end;
if not (LoggedIn) then
begin
Writeln('Choosing Next Player');
NextPlayer(false);
Bankedd := 0;
end;
until (AllPlayersFalse);
FreeForm(BHForm);
FreeDTM(AxeDTM);
end.
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.