Contributor: MATTHEW CSULIK

{
Hello again!

I send to You a toolbar button component, which looks like the Explorer
3.0's toolbar button. Resource file and a number of button images are included.
These need to extracted using XX3402.  See below for more information.

This component made under Delphi 2.0, and NOT tested with Delphi 1.0 (but I
think it works under 1.0).

Kind regards
        Matthew Csulik
        matthew-c@usa.net

---------------------------------------------------------
-                                                       -
-  ToolButton.pas                                       -
-  **************                                       -
-  This component and it's bitmaps are completely FREE. -
-                                                       -
---------------------------------------------------------

{usage:                                                                        }
{ just assign three bitmap (included) to the Color, Disabled, and Mono bitmaps;}
{ set the right color for transparentcolor;                                    }
{ and USE IT!                                                                  }

unit Toolbutton;

interface

{ written by Matthew }
{ matthew-c@usa.net  }

uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls;

type
   TToolButtonState = (tbsUp, tbsDown);
   TToolButtonStyle = (tstTextBitmap, tstBitmap);
   TMouseState = (msIn, msOut);

   TToolButton = class(TGraphicControl)
   private
      State: TToolButtonState;
      MouseState: TMouseState;
      FStyle: TToolButtonStyle;
      FColorBitmap, FMonoBitmap, FDisabledBitmap: TBitmap;
      FTransparentColor: TColor;
      procedure SetColorBitmap(Value: TBitmap);
      procedure SetMonoBitmap(Value: TBitmap);
      procedure SetDisabledBitmap(Value: TBitmap);
      procedure SetStyle(Value: TToolButtonStyle);
      procedure SetTransparentColor(Value: TColor);
      procedure CMMouseEnter(var Message: TMessage);
         message CM_MOUSEENTER;
      procedure CMMouseLeave(var Message: TMessage);
         message CM_MOUSELEAVE;
      procedure CMEnabledChanged(var Message: TMessage);
         message CM_ENABLEDCHANGED;
      procedure CMSysColorChange(var Message: TMessage);
      	 message CM_SYSCOLORCHANGE;
      procedure CMTextChanged(var Message: TMessage);
      	 message CM_TEXTCHANGED;
   protected
      procedure Paint; override;
   public
      constructor Create(AOwner: TComponent); override;
      destructor Destroy; override;
      procedure Click; override;
      procedure DblClick; override;
      procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
         X, Y: integer); override;
      procedure MouseMove(Shift: TShiftState; X, Y: Integer);
         override;
      procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
         X, Y: integer); override;
   published
      property Caption;
      property ColorBitmap: TBitmap read FColorBitmap write SetColorBitmap;
      property DisabledBitmap: TBitmap read FDisabledBitmap write
SetDisabledBitmap;
      property MonoBitmap: TBitmap read FMonoBitmap write SetMonoBitmap;
      property TransparentColor: TColor read FTransparentColor write
SetTransparentColor default clOlive;
      property Style: TToolButtonStyle read FStyle write SetStyle;
      property Enabled;
      property ParentShowHint;
      property ShowHint;
      property Visible;
      property OnClick;
      property OnMouseDown;
      property OnMouseMove;
      property OnMouseUp;
   end;

procedure Register;

implementation

constructor TToolButton.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);
   FTransparentColor:= clOlive;
   FColorBitmap:= TBitmap.Create;
   FMonoBitmap:= TBitmap.Create;
   FDisabledBitmap:= TBitmap.Create;
   Caption:= Name;
   State:= tbsUp;
   Style:= tstTextBitmap;
   MouseState:= msOut;
end;

destructor TToolButton.Destroy;
begin
   FColorBitmap.Free;
   FMonoBitmap.Free;
   FDisabledBitmap.Free;
   inherited Destroy;
end;

procedure TToolButton.Paint;
var
   CX,CY: integer;
begin
   CX:= Width div 2;
   CY:= Height div 2;
   if csDesigning in ComponentState then
   begin
      with inherited Canvas do
      begin
         Pen.Style := psDash;
         Brush.Style := bsClear;
         Rectangle(0, 0, Width, Height);
         Brush.Color:= clBtnFace;
	 FillRect(Rect(0,0,Width,Height));
         if Style = tstTextBitmap then
         begin
            BrushCopy(Rect(CX-(MonoBitmap.Width div 2),CY-(MonoBitmap.Height
div 2)-10,
	       CX+(MonoBitmap.Width div 2),CY+(MonoBitmap.Height div 2)-10),
	          MonoBitmap, Rect(0,0,MonoBitmap.Width,MonoBitmap.Height),
TransparentColor);
	    Font.Color:= clBlack;
	    Font.Name:= 'MS Sans Serif';
	    Font.Size:= 8;
	    Font.Style:= [];
	    TextOut(CX-(TextWidth(Caption) div 2),CY+5,Caption);
         end
         else
         begin
            BrushCopy(Rect(CX-(MonoBitmap.Width div 2),CY-(MonoBitmap.Height
div 2),
	       CX+(MonoBitmap.Width div 2),CY+(MonoBitmap.Height div 2)),
	       MonoBitmap, Rect(0,0,MonoBitmap.Width,MonoBitmap.Height),
TransparentColor);
         end;
      end;
   end
   else
   begin
      with inherited Canvas do
      begin
         Brush.Style := bsClear;
         Brush.Color:= clBtnFace;
	 FillRect(Rect(0,0,Width,Height));
      end;
      if Enabled then
      begin
         if (State = tbsUp) and (MouseState = msOut) then
         begin
            with Canvas do
            begin
               Brush.Style:= bsClear;
               Brush.Color:= clBtnFace;
	       if Style = tstTextBitmap then
               begin
                  BrushCopy(Rect(CX-(MonoBitmap.Width div
2),CY-(MonoBitmap.Height div 2)-10,
                     CX+(MonoBitmap.Width div 2),CY+(MonoBitmap.Height div
2)-10),
                        MonoBitmap,
Rect(0,0,MonoBitmap.Width,MonoBitmap.Height), TransparentColor);
                  Font.Color:= clBlack;
                  Font.Name:= 'MS Sans Serif';
                  Font.Size:= 8;
                  Font.Style:= [];
                  TextOut(CX-(TextWidth(Caption) div 2),CY+5,Caption);
 	       end
               else
               begin
                  BrushCopy(Rect(CX-(MonoBitmap.Width div
2),CY-(MonoBitmap.Height div 2),
                     CX+(MonoBitmap.Width div 2),CY+(MonoBitmap.Height div 2)),
                        MonoBitmap,
Rect(0,0,MonoBitmap.Width,MonoBitmap.Height), TransparentColor);
               end;
            end;
         end
         else if (State = tbsUp) and (MouseState = msIn) then
         begin
            with Canvas do
            begin
	       FillRect(Rect(0,0,Width,Height));
	       Pen.Color:= clbtnHighlight;
               Polyline([Point(Width-1,0),Point(0,0),Point(0,Height-1)]);
               Pen.Color:= clbtnShadow;
               Polyline([Point(Width-1,1),Point(Width-1,Height-1),Point(1,He
ight-1)]);
               Brush.Style:= bsClear;
               Brush.Color:= clBtnFace;
	       if Style = tstTextBitmap then
               begin
                  BrushCopy(Rect(CX-(ColorBitmap.Width div
2),CY-(ColorBitmap.Height div 2)-10,
                     CX+(ColorBitmap.Width div 2),CY+(ColorBitmap.Height div
2)-10),
                        ColorBitmap,
Rect(0,0,ColorBitmap.Width,ColorBitmap.Height), TransparentColor);
                  Font.Color:= clBlack;
                  Font.Name:= 'MS Sans Serif';
                  Font.Size:= 8;
                  Font.Style:= [];
                  TextOut(CX-(TextWidth(Caption) div 2),CY+5,Caption);
	       end
               else
               begin
                  BrushCopy(Rect(CX-(ColorBitmap.Width div
2),CY-(ColorBitmap.Height div 2),
                     CX+(ColorBitmap.Width div 2),CY+(ColorBitmap.Height div
2)),
                        ColorBitmap,
Rect(0,0,ColorBitmap.Width,ColorBitmap.Height), TransparentColor);
               end;
            end;
         end
         else if (State = tbsDown) and (MouseState = msIn) then
         begin
            with Canvas do
            begin
               Brush.Style:= bsClear;
               Brush.Color:= clBtnFace;
	       FillRect(Rect(0,0,Width,Height));
	       Pen.Color:= clbtnShadow;
               Polyline([Point(Width-1,0),Point(0,0),Point(0,Height-1)]);
               Pen.Color:= clbtnHighlight;
               Polyline([Point(Width-1,1),Point(Width-1,Height-1),Point(1,He
ight-1)]);
	       if Style = tstTextBitmap then
               begin
                  BrushCopy(Rect(CX-(ColorBitmap.Width div
2)+1,CY-(ColorBitmap.Height div 2)-9,
                     CX+(ColorBitmap.Width div 2)+1,CY+(ColorBitmap.Height
div 2)-9),
                        ColorBitmap,
Rect(0,0,ColorBitmap.Width,ColorBitmap.Height), TransparentColor);
                  Font.Color:= clBlack;
                  Font.Name:= 'MS Sans Serif';
                  Font.Size:= 8;
                  Font.Style:= [];
                  TextOut(CX-(TextWidth(Caption) div 2)+1,CY+6,Caption);
	       end
               else
               begin
                  BrushCopy(Rect(CX-(ColorBitmap.Width div
2)+1,CY-(ColorBitmap.Height div 2)+1,
                     CX+(ColorBitmap.Width div 2)+1,CY+(ColorBitmap.Height
div 2)+1),
                        ColorBitmap,
Rect(0,0,ColorBitmap.Width,ColorBitmap.Height), TransparentColor);
               end;
            end;
         end;
      end
      else
      begin		               {Disabled}
         with Canvas do
         begin
	    Brush.Style:= bsClear;
            Brush.Color:= clBtnFace;
	    FillRect(Rect(0,0,Width,Height));
	    if Style = tstTextBitmap then
            begin
               BrushCopy(Rect(CX-(FDisabledBitmap.Width div
2),CY-(FDisabledBitmap.Height div 2)-10,
                  CX+(FDisabledBitmap.Width div
2),CY+(FDisabledBitmap.Height div 2)-10),
                     FDisabledBitmap,
Rect(0,0,FDisabledBitmap.Width,FDisabledBitmap.Height), TransparentColor);
               Font.Name:= 'MS Sans Serif';
               Font.Size:= 8;
               Font.Style:= [];
               Font.Color:= clbtnHighlight;
               TextOut(CX-(TextWidth(Caption) div 2)+1,CY+6,Caption);
               Font.Color:= clbtnShadow;
               TextOut(CX-(TextWidth(Caption) div 2),CY+5,Caption);
	    end
            else
            begin
               BrushCopy(Rect(CX-(FDisabledBitmap.Width div
2),CY-(FDisabledBitmap.Height div 2),
                  CX+(FDisabledBitmap.Width div
2),CY+(FDisabledBitmap.Height div 2)),
                     FDisabledBitmap,
Rect(0,0,FDisabledBitmap.Width,FDisabledBitmap.Height), TransparentColor);
            end;
         end;
      end;
   end;
end;

procedure TToolButton.Click;
begin
   inherited Click;
end;

procedure TToolButton.DblClick;
begin
   inherited Click;
end;

procedure TToolButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
   inherited MouseDown(Button, Shift, X, Y);
   if (Button = mbLeft) and Enabled then
   begin
      if State <> tbsDown then
      begin
         State:= tbsDown;
         Invalidate;
      end;
   end;
end;

procedure TToolButton.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
   inherited MouseMove(Shift, X, Y);
end;

procedure TToolButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
   inherited MouseUp(Button, Shift, X, Y);
   State:= tbsUp;
   Invalidate;
end;

procedure TToolButton.CMMouseEnter(var Message: TMessage);
begin
   MouseState:= msIn;
   if Enabled then
      Invalidate;
end;

procedure TToolButton.CMMouseLeave(var Message: TMessage);
begin
   if State = tbsDown then
   begin
      State:= tbsUp;
      Invalidate;
   end;
   MouseState:= msOut;
   if Enabled then
      Invalidate;
end;

procedure TToolButton.CMEnabledChanged(var Message: TMessage);
begin
   Invalidate;
end;

procedure TToolButton.CMSysColorChange(var Message: TMessage);
begin
   Invalidate;
end;

procedure TToolButton.CMTextChanged(var Message: TMessage);
begin
  Invalidate;
end;

procedure TToolButton.SetColorBitmap(Value: TBitmap);
begin
   if FColorBitmap <> Value then
   begin
      FColorBitmap.Assign(Value);
      Invalidate;
   end;
end;

procedure TToolButton.SetMonoBitmap(Value: TBitmap);
var
   x,y: integer;
begin
   if FMonoBitmap <> Value then
   begin
      FMonoBitmap.Assign(Value);
      FDisabledBitmap.Height:= FMonoBitmap.Height;
      FDisabledBitmap.Width:= FMonoBitmap.Width;
      for x:= 0 to FDisabledBitmap.Width do
      begin
         for y:= 0 to FDisabledBitmap.Height do
         begin
            if FMonoBitmap.Canvas.Pixels[x,y] = clWhite then
               FDisabledBitmap.Canvas.Pixels[x,y]:= clbtnHighlight;
            if FMonoBitmap.Canvas.Pixels[x,y] = clGray then
               FDisabledBitmap.Canvas.Pixels[x,y]:= clbtnShadow;
         end;
      end;
      Invalidate;
   end;
end;

procedure TToolButton.SetDisabledBitmap(Value: TBitmap);
const
  ROP_DSPDxax = $00E20746;
var
   MonoBmp, TmpImage: TBitmap;
   IRect: TRect;
   IWidth,IHeight: integer;
begin
   if FDisabledBitmap <> Value then
   begin
      FDisabledBitmap.Assign(Value);
      IWidth:= FDisabledBitmap.Width;
      IHeight:= FDisabledBitmap.Height;
      IRect:= Rect(0,0,IWidth,IHeight);
      TmpImage:= TBitmap.Create;
      MonoBmp:= TBitmap.Create;
      TmpImage.Width:= FDisabledBitmap.Width;
      TmpImage.Height:= FDisabledBitmap.Height;
      MonoBmp.Width:= FDisabledBitmap.Width;
      MonoBmp.Height:= FDisabledBitmap.Height;
      with MonoBmp do
      begin
         Assign(FDisabledBitmap);
         Canvas.Brush.Color := clBlack;
         if Monochrome then
         begin
            Canvas.Font.Color := clWhite;
            Monochrome := False;
            Canvas.Brush.Color := clWhite;
         end;
         Monochrome := True;
      end;
      with TmpImage.Canvas do
      begin
         Brush.Color := clBtnFace;
         FillRect(IRect);
         Brush.Color := clBtnHighlight;
         SetTextColor(Handle, clBlack);
         SetBkColor(Handle, clWhite);
         BitBlt(Handle, 1, 1, IWidth, IHeight,
         MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
         Brush.Color := clBtnShadow;
         SetTextColor(Handle, clBlack);
         SetBkColor(Handle, clWhite);
         BitBlt(Handle, 0, 0, IWidth, IHeight,
         MonoBmp.Canvas.Handle, 0, 0, ROP_DSPDxax);
      end;
      FDisabledBitmap.Assign(TmpImage);
      TmpImage.Free;
      MonoBmp.Free;
      Invalidate;
   end;
end;

procedure TToolButton.SetStyle(Value: TToolButtonStyle);
begin
   if FStyle <> Value then
   begin
      FStyle:= Value;
      Invalidate;
   end;
end;

procedure TToolButton.SetTransparentColor(Value: TColor);
begin
   if FTransParentColor <> Value then
   begin
      FTransparentColor:= Value;
      Invalidate;
   end;
end;

procedure Register;
begin
   RegisterComponents('Matthew', [TToolButton]);
end;

end.

{ the following contains addition files that should be included with this
  file.  To extract, you need XX3402 available with the SWAG distribution.

  1.     Cut the text below out, and save to a file  ..  filename.xx
  2.     Use XX3402  :   xx3402 d filename.xx
  3.     The decoded file should be created in the same directory.
  4.     If the file is a archive file, use the proper archive program to
         extract the members.

{ ------------------            CUT              ----------------------}


*XX3402-006403-230497--72--85-59226------TBBMPS.ZIP--1-OF--2
I2g1--E++U+6+AaH6G9hcx9WLE+++DM++++E++++KaxjPIxpR0-BPqtj9a7hQ5JBkF4+A+W9
VkAsVgzSiM3zpz5BO7r8PmK2VxsdB+Y2qiv5-QINK+B9MQ8QjiAjL2Br0NBKICwxb725MoWM
h2WP+WNh5sOKm0kO4mh3ZhZM+ymdtPzqHLTo0Jyw+J-9+kEI++6+0+0eYm2WXHvv6qU+++1q
++++3++++3djPqpDRLEUF4ZnMK7gNKEiMapkRMmx1MIk16GBn+0AEKbd-cV2nnejxaXN8F7h
g5CFc5XMCJzoySQs9q5wEbhcapdY5RnZ8tlBRpdacWWppW-xDCaRZdYc0lWWRDg1C7EpDsNK
22ofE+iU1GUKPW9uxgb5b1tva5RswENEGkA23++0++U+WNAV6ZwDA0Fs++++xU+++-A+++-O
PqxhHrJo62BjP4xmNKEiMapkRMkl0gEk1+FpC71qbb4ZMEhrBZmTjlU0eToozwJDA8HpfOkI
UGCGJUinGBzh38i1yZ1jGmxN7WzmJAL0Igmo3L5JKYb45-b1H3iF9ZVZNlvyEF1N3H1FoCwh
-MMt+dr+BG-tiVRlRyx+dCQ2h3LjShEvL5wkzzs+I2g1--E++U+6+D0G6G6WLTWlLk+++DM+
+++D++++KaxjPIZi62pjPawiMapkRMn-2M+U1+HDWEJMVgzAo63zqz4RoeX89yMsaD4V0Qb0
2XXC4scfOwzOFWpMikzwFSUmEa-GNOipdaZxcHK-GQJK311FDsG4q9Zl5clo6spAOEvMawDD
iTaiX5zoskBEGkA23++0++U+pN6V6Y9+oL-a++++xU+++-A+++-OPqxhGKsUF4ZnMK7gNKEi
MapkRIn71M+k1+g8+n+4noUNc-7zpi4RoPdH7PsVeJi7-nWpLHb5QRs2LA2xi+oihDPQu+y4
dVYg8uCEKagYrVytkv6mGZ4+40sT+MNGwmDOWYNHWb+9tmNQ73m6yCoXbrBnHwQRL5k+I2g1
--E++U+6+D8G6G9sgV4hPU+++DM++++G++++KaxjPIZi62BjP4xmNKEiMapkRMkl0c+k12IX
2JkxVaAUEwS0irQd0AstKixIQ8p7os6U7jrtw5uOzPX-up7hefJfUfZlUPwG1oLQf+rdm1Yf
eSp-fKvKVamkJo9rw+I-s1GUWMJoZVUoH74k9AlM00Cd2k0yjTClBztljwDhvUBEGkA23++0
++U+TMcV6fzoaNhM++++xU++++o+++-HMLNZ62pjPawiMapkQz9xlU+-NI0g+QE0IAn6k+6K
Pk1W6rkEX+cO676B1F+8-230EC9+UEB+YTxUlD1zDsE0EN+EY104+MV-n+MUVX2nRdc-F6A-
Z+yYkE9A-4U4--xe1wlO+3-9+kEI++6+0+-oWW2W6AMO4pU+++1q++++2E+++3BVRaIUF4Zn
MK7gNKEiMapkQz9xlU+-NI0g+QE0IAn6k+6KPk1W6rkEX+cO676B1F+8-230EC9+UEB+YTxU
lD1zDsE0EN+EY104+MV-n+NU-TnMOEME1ENEDd1y+C9m2u+N25mcDH-f+J-9+kEI++6+0+-O
WW2WFXGa0qo+++1q++++2++++3BVRaIUEqxgPr7ZN0tWPL-nwjr4++3ZE8k-l+7EnAX++VNj
+C6XT-0A0VcUYUoB2+c2EI7+sg0-+o0Fzq12wDwzV+7-Y-0EA6M-VU8UH+4nyFYUJQ21cRht
IDYA6-cAc5kUTO1XFwQDcDU-6BL-UsDD+CJnA7iLUk2nn3c+I2g1--E++U+6+D4A6G6fDYx+
NU+++DM++++C++++I57dPbEUHKxiPmtWPL-pXP2JU1+6FD5V+6tVSSylUPrfK4SoH4IPCGvO
0HY65oWCwnPNZRdHqxFWOz3aTxPIP2q7HdGVxttYp92lZCV24S8pSgQ1j+AenRrJN6O3yyFk
nE2OmtPe6A5v283PPKi+sgPrvEBEGkA23++0++U+tMkV6hfB7rxg++++xU+++-6+++-EQaZi
R0-2OLBVMalZN0tWPL-pHH2GU0+AWsRvTMMXRzn+rSwswnGSpAapBWquqN9a2YcsnVhNZqBr
P-A9pj+vzefbNSx7P3cylVXiK-mM7P3dyKVjFItdpIpHHEYdEaoU8on8x3JmHqh6ENDIfGeU
Pp1lM42AaEjCwS9vxU3EGkA23++0++U+kckV6ig1waBt++++xU+++-2+++-EQaZiR0-1Pqlj
QaJY9a7hQ5JBAF60AEVQ7pTElKRMNWMzgDQvqh97X2ymmNBGLFgLCCpQ+Xggg9bSRWHin+jn
TCE7KyW8Tx+QeWNtiAEmle0msa4h7+yLKDcLsJBuAo6pKoUFgxTPsDlwa7F1JwYxPR28SeLP
t44Pk5EXxejEi+6pq-T6QT5vxUBEGkA23++0++U+hcYV6VsLHHpg++++xU++++s+++-EMLBo
NG-BPqtj9a7hQ3JBiF4+A+kHRnFiCANU1bfKcTM6OPBB0aOW1N9BwRWF3AiCgqsbAbNW6SMP
+wPkbHWal1wwaysdGZaYpVeR5USxdmVZYScPgOY+lbgVaIfdIpgoRGkJEMkMsZUp9c-7KIft
fB0bLSzJgAyb3p-9+kEI++6+0+0dWG2WxsTioL++++1q++++2U+++3-VQrFZ62FdQq3WP4JY
9a7hQ3JCiF4+A+knRnFdA4Ak-nrfI5i2hBYa-ECZcUqGnLDMZbGKYnXfRYf21Wn+T4CEoLo1
XWbk1siVKEWH3eXK0eRvGSwVH3eUwcKzZ2IITUAdKhSrJlymIeUI2c98MoIPCeKWdS7OUtzx
-kZfgjCnx+7EGkA23++0++U+VcYV6f6fTtaG++++xU+++-2+++-EMLBoNG-1PqljQaJY9a7h
Q5DmzQM++KJ+f+52+Z1AmA+03aw+sWBw26k84W0G1EoE0UF-EY1Wk621E75zMAHkzny2+Y4E
270MWE+i610-US32FoR50vityKYUhsKtiDXwvzyz6Lnj6msEzUZD2DzzvmAnUTknNwsQa+bY
+s5-HCM0c+Lg-HDN0s0ag+DtlRkA4sc9NU9BrQr+k+aoNU8MV+2+I2g1--E++U+6++SD6G7Y
VhtqV++++DM++++E++++EqxkSG-1PqljQaJY9a7hQ5DmzQM++KJ+f+52+Z1AmA+03axUk+IO
676B1F+8-230EC9+UEB+YTxUlD1zDsE0EN+EY114-0MiE+0YPHcuCZd+x+M4VVOUBdvzyzyr
J5Fox61spJ-yzSzzDFjsXvV+y0SQETnxzswMJnBws1Zntf-lzSwD1G-1ezxzM+PFtSI387M-
+3-9+kEI++6+0+-qVG2Wri2ReK6+++1q++++2E+++2xkNKsUF4ZnMK7gNKEiMapkQz9xlU+-
NI0g+QE0IAn6k+6KPq1+-FcUYUoB2+c2EI7+sg0-+o0Fzq12wDwzV+7-Y-0Ea6YC7Y-AbAYD
ZDrzsECAbj+TaSPzk6xATzUDdm5OzoDJEKWU+0T652ucyQXK+E-EGkA23++0++U+z6EV6ZEM
wCdp++++xU+++-++++-DQ4Ji62BjP4xmNKEiMapkQz9xlU+-NI0g+QE0IAn6k+6KPq1+-FcU
YUoB2+c2EI7+sg0-+o0Fzq12wDwzV+7-Y-0Ea6YCddS1kQkCA4WTqPwP05OInzWBH9SPUsJV
x6tWwruUMTxz37jD+4inBdw-ZhwBdc20ZXCvRyyq-7YzcuANqHc+I2g1--E++U+6+8pN806d
husGIE+++DM++++A++++HaJr62pjPawiMapkQz9xlU+-NI0g+QE0IAn6k+6KPk1W6rkEX+cO
676B1F+8-230EC9+UEB+YTxUlD1zDsE0EN+EY104+MV-lgPA66s-RKWMSQnAI1vI5aOsfQM+
I2g1--E++U+6+AVg9G7OG9EHIk+++DM++++E++++HaJr62FdQq3WP4JY9a7hQ5DmzQM++KJ+
f+52+Z1AmA+03aw+sWBw26k84W0G1EoE0UF-EY1Wk621E75zMAHkzny2+Y4E27+kVU46EQP4
z21FzlycEwDAsqS4we5qAABhBEM+I2g1--E++U+6+6hN806zB2u3Mk+++DM++++D++++HaJr
62BjP4xmNKEiMapkQz9xlU+-NI0g+QE0IAn6k+6KPk1W6rkEX+cO676B1F+8-230EC9+UEB+
YTxUlD1zDsE0EN+EY104+MV-lgMJ5I1EM4lQzTzrzxx+iVt6zGSHLw++sJQkEzZ+Swe-c-Vi
en2+I2g1--E++U+6+07SN0608mxMN++++DM++++B++++G4JgQ0-BPqtj9a7hQ5JBiF4+A+kH
NkNU12fTSEBupe5qO7a8BZVqS-fYFsYQ8xhycb-2fJ59e+ZnucszS+rRWlWIcfLKEiaNu9q6
EGaODJ1YFEL0UtWCFd4Q8LkFUkwPYY5VMPKk2SvFBuoUxnPSzmtEGkA23++0++U+AJtY6cMw
mmNf++++xU+++-2+++-6NKlk62FdQq3WP4JY9a7hQ5JBgEq+A+k9UXqQkFWd5v1n1bBDuoaN
K6DRJ-I9HVorfieQpmC74nn+TL0FfThJzZ1ngRMI3WqopVeQu2QWIZWooAe2GFxAFLbFw6Wp
K--CROeWUSh54EMJ4ZAh28DwtpXYn-DMn-xPQxw9I2g1--E++U+6+5BSN09+uYbrW++++DM+
+++E++++G4JgQ0-1PqljQaJY9a7hQ5JBAEc1AEl9cEzcAvdvv-1criyoV+v7BwkBxsWPPZ9y
R3+sD8FmQbGf53iFF7nvslA4bikfyr9o8NmvLw6zZ-4KAgX99MtO8trKHqVhY7RP5D71HBbd
NXcN4IUN0qK5F4+369njPvCBxrI43UypulTGv3chHPN3O8PaypqNyntZ94BVzszPF9tEGkA2
3++0++U+G6YV6UnHLltW++++xU++++k+++-1RLEUHKxiPmtWPL-hX12CU1+6FH2s4szVGA6B
r9qCAoTfs7auJi0rFVAzzPno3vcTZO1HjPbLvcbanApx9T-LVYQn60cWPuIIHpcSOUq6WgWP
DV64KNF+ILtF03EFPAZMvcjXvjAduXymzXC5PZ-9+kEI++6+0++eWG2W1BBT5a6+++1q++++
2++++2BpR0-2OLBVMalZN0tWPL-hX12CU1+6FH2s4szVGA6Br9qCAoTfs7auJi0rFVAzzPno
3vcTZO1HjPbLvcbanApx9T-LVYQn60cWPuIIHpcSOUq6WgWPDV64KNF+ILtF03EFPAZMvcjX
vjAduXymzXC5PZ-9+kEI++6+0++FWG2W-J+FdKU+++1q++++1k+++2BpR0-1PqljQaJY9a7h
Q5DmzQM++KJ+f+52+Z1AmA+03aw+sWBw26k84W0G1EoE0UF-EY1Wk621E75zMAHkzny2+Y4E
27+kVUAHNkVxqAHM-I9P41gXoHN569GlWQoNW+MKe2ta04I+BQn++26n41-1dP5HM2I+I2g1
--E++U+6+1KD6G8j-+qFM++++DM++++B++++EqxkSG-BPqtj9a7hQ5JBEEu+A+X1p+Ts16wa
ys3rjyCNdypJLaQ9oqWAg29O+Zirkn7qMWOaXg54oBrykhBonuOIl37fdR9WKKjNZ77MmXQK
LJGzEC5Ko1aSb0EtUBWlUZV-+KoRFMnGgTSL7p-9+kEI++6+0++eXm2WVMMAoKI+++1q++++
2E+++2BjQ5YUF4ZnMK7gNKEiMapkRIkl0c-+18iQSrq4cy+DrDqCQtxqHyfYKdBKI--nZsOY
BBhyGi2+Nr0uCQWMiQYTf7Na7LmAA5fjG08zF7HkAQ7MjpXMGALSeGvWYiTV0h9fqwCIpoPD
KgqHhWfK96IqOZIzi+-EGkA23++0++U+X6IV6hlGhr3T++++xU++++o+++-DQ4Ji62pjPawi
MapkQz9xlU+-NI0g+QE0IAn6k+6KPq1+-FcUYUoB2+c2EI7+sg0-+o0Fzq12wDwzV+7-Y-0E
a6YC7Y-AbAY7tYm+oFBa6hCQ2nWFuEYnsHF2yomcCUUB3C+2aQA7BFzNCU-EGk20AUgI++6+
***** END OF BLOCK 1 *****

*XX3402-006403-230497--72--85-03713------TBBMPS.ZIP--2-OF--2
0+17Ym2WvODGsZo+++1q++++2++++++++++++0++hc2+++++KaxjPIxpR0-BPqtj9a7hQ3-9
+E6m0lE++U+6+8eH6G8BDjgXO++++DM++++I++++++++++++6+0qUMg+++-OPqxhHrJo62Fd
Qq3WP4JY9a7hQ3-9+E6m0lE++U+6+6aH6G7T1n+YS++++DM++++H++++++++++++6+0qUGI-
++-OPqxhHrJo62BjP4xmNKEiMapkI2g-+X693++0++U+w76V6W7Ry93T++++xU++++w+++++
+++++++U+9O-nU2++3djPqp7PW-BPqtj9a7hQ3-9+E6m0lE++U+6+BKG6G70kB3kNU+++DM+
+++H++++++++++++6+0qUJc0++-OPqxhGKsUF4ZnMK7gNKEiMapkI2g-+X693++0++U+wd6V
6jWm2Opi++++xU+++-6++++++++++++U+9O-wE6++3djPqp7PW-1PqljQaJY9a7hQ3-9+E6m
0lE++U+6+5q86G8zx7aPK++++DM++++B++++++++++++6+0qUMw1++-HMLNZ62pjPawiMapk
I2g-+X693++0++U+R6cV6W144VhM++++xU+++-2++++++++++++U+9O-2UE++3BVRaIUF4Zn
MK7gNKEiMapkI2g-+X693++0++U+KccV6YModUhh++++xU+++-+++++++++++++U+9O-aEE+
+3BVRaIUEqxgPr7ZN0tWPL-EGk20AUgI++6+0+1lX02W8ntDE4M+++1q++++1U++++++++++
+0++hc2o-E++I57dPbEUHKxiPmtWPL-EGk20AUgI++6+0+1ZX02WqgobTqk+++1q++++2U++
+++++++++0++hc54-E++I57dPbEUF4ZnMK7gNKEiMapkI2g-+X693++0++U+kckV6ig1waBt
++++xU+++-2++++++++++++U+9O-MUM++3-mOKto62BjP4xmNKEiMapkI2g-+X693++0++U+
hcYV6VsLHHpg++++xU++++s++++++++++++U+9O-0UQ++3-VQrFZ62pjPawiMapkI2g-+X69
3++0++U+eMYV6jS5vh3k++++xU+++-6++++++++++++U+9O-cUQ++3-VQrFZ62FdQq3WP4JY
9a7hQ3-9+E6m0lE++U+6+6O76G8m8ryNYU+++DM++++F++++++++++++6+0qUI66++-EMLBo
NG-1PqljQaJY9a7hQ3-9+E6m0lE++U+6++SD6G7YVhtqV++++DM++++E++++++++++++6+0q
UEA7++-1Pr-t62BjP4xmNKEiMapkI2g-+X693++0++U+RcIV6hvV5OZW++++xU+++-2+++++
+++++++U+9O-hEY++2xkNKsUF4ZnMK7gNKEiMapkI2g-+X693++0++U+z6EV6ZEMwCdp++++
xU+++-+++++++++++++U+9O-FUc++2xkNKsUEqxgPr7ZN0tWPL-EGk20AUgI++6+0+0hKGUW
8PSi2Z2+++1q++++1++++++++++++0++hc5d0U++HaJr62pjPawiMapkI2g-+X693++0++U+
m4kh6Zd6h-BH++++xU+++-+++++++++++++U+9O-N+g++2tZRm-2OLBVMalZN0tWPL-EGk20
AUgI++6+0+09KGUWDnFCVKA+++1q++++1k+++++++++++0++hc5Z0k++HaJr62BjP4xmNKEi
MapkI2g-+X693++0++U+6ZtY6U6f9pVY++++xU++++o++++++++++++U+9O-REk++2VZP5+U
HKxiPmtWPL-EGk20AUgI++6+0++lLaEWVXn97ag+++1q++++2E+++++++++++0++hc221E++
G4JgQ0-2OLBVMalZN0tWPL-EGk20AUgI++6+0+-nLaEWkCd7xsU+++1q++++2+++++++++++
+0++hc4S1E++G4JgQ0-1PqljQaJY9a7hQ3-9+E6m0lE++U+6+2W76G6AopwSMU+++DM++++A
++++++++++++6+0qUJEC++-1RLEUHKxiPmtWPL-EGk20AUgI++6+0++eWG2W1BBT5a6+++1q
++++2++++++++++++0++hc5U1U++ErJo62FdQq3WP4JY9a7hQ3-9+E6m0lE++U+6+-476G63
I-4ZO++++DM++++D++++++++++++6+0qUL+D++-1RLEUEqxgPr7ZN0tWPL-EGk20AUgI++6+
0++pXm2WfkEBYK++++1q++++1E+++++++++++0++hc232+++EqxkSG-BPqtj9a7hQ3-9+E6m
0lE++U+6+0eD6G83VUnFNE+++DM++++F++++++++++++6+0qUN+E++-1Pr-t62FdQq3WP4JY
9a7hQ3-9+E6m0lE++U+6+6m36G9QIfRlLk+++DM++++B++++++++++++6+0qUGEF++-DQ4Ji
62pjPawiMapkI2g3-U+++++S+-s+DkQ++8sF++++++++
***** END OF BLOCK 2 *****


{ ---------------------------  CUT   --------------------------- }
{ the following contains addition files that should be included with this
  file.  To extract, you need XX3402 available with the SWAG distribution.

  1.     Cut the text below out, and save to a file  ..  filename.xx
  2.     Use XX3402  :   xx3402 d filename.xx
  3.     The decoded file should be created in the same directory.
  4.     If the file is a archive file, use the proper archive program to
         extract the members.

{ ------------------            CUT              ----------------------}


*XX3402-000267-230497--72--85-31147-------TBRES.ZIP--1-OF--1
I2g1--E++U+6+0Fs9G8avVUYXE+++Bk-+++C++++J4xjP27pR5FjPWtYMr7XM4-UI+1WzzwV
4-poA16ka61ZaFV0UB+T05oMb-V0cHkze1c-+HsKa-sB67O+MYM4W9+06kACo+-41+oB2+c2
EI7+sg0-+m0PkEXYC1+3Ua0rzaQk7UPMZoB-AN1R+EIMP+ukInXEqEoA5EoQ1FmMuXgO4Acf
sCmCPWHq1j934TtXQlgGynwIT0P8uk-EGk20AUgI++6+0++YS0oWdisM76o+++1Q+E++1U++
+++++++++0++hc2+++++J4xjP27pR5FjPWtYMr7EGkI4++++++2++E+w++++iE++++++
***** END OF BLOCK 1 *****