ソースを参照

Merge branch 'newicons' into main

Martijn Laan 4 年 前
コミット
dcba369fca

+ 50 - 1
Components/BitmapImage.pas

@@ -41,6 +41,7 @@ type
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
+    function InitializeFromIcon(const Instance: HINST; const Name: PChar; const BkColor: TColor; const AscendingTrySizes: array of Integer): Boolean;
   published
     property Align;
     property Anchors;
@@ -74,13 +75,61 @@ procedure Register;
 implementation
 
 uses
-  Resample;
+  Math, Resample;
 
 procedure Register;
 begin
   RegisterComponents('JR', [TBitmapImage]);
 end;
 
+function TBitmapImage.InitializeFromIcon(const Instance: HINST; const Name: PChar; const BkColor: TColor; const AscendingTrySizes: array of Integer): Boolean;
+var
+  Flags: Cardinal;
+  Handle: THandle;
+  Icon: TIcon;
+  I, Size: Integer;
+begin
+  { Find the largest regular icon size smaller than the scaled image }
+  Size := 0;
+  for I := Length(AscendingTrySizes)-1 downto 0 do begin
+    if (Width >= AscendingTrySizes[I]) and (Height >= AscendingTrySizes[I]) then begin
+      Size := AscendingTrySizes[I];
+      Break;
+    end;
+  end;
+  if Size = 0 then
+    Size := Min(Width, Height);
+
+  { Load the desired icon }
+  Flags := LR_DEFAULTCOLOR;
+  if Instance = 0 then
+    Flags := Flags or LR_LOADFROMFILE;
+  Handle := LoadImage(Instance, Name, IMAGE_ICON, Size, Size, Flags);
+  if Handle = 0 then
+    Handle := LoadImage(Instance, Name, IMAGE_ICON, 0, 0, Flags);
+  if Handle <> 0 then begin
+    Icon := TIcon.Create;
+    try
+      Icon.Handle := Handle;
+
+      { Set sizes (overrides any scaling) }
+      Width := Icon.Width;
+      Height := Icon.Height;
+
+      { Draw icon into bitmap }
+      Bitmap.Canvas.Brush.Color := BkColor;
+      Bitmap.Width := Width;
+      Bitmap.Height := Height;
+      Bitmap.Canvas.Draw(0, 0, Icon);
+
+      Result := True;
+    finally
+      Icon.Free;
+    end;
+  end else
+    Result := False;
+end;
+
 constructor TBitmapImage.Create(AOwner: TComponent);
 begin
   inherited Create(AOwner);

BIN
Files/SetupClassicIcon.ico


+ 11 - 3
ISHelp/isetup.xml

@@ -87,7 +87,7 @@
 <body>
 
 <p>
-<b>Inno Setup version 6.1.3</b><br/>
+<b>Inno Setup version 6.2.0</b><br/>
 <b>Copyright &copy; 1997-2021 Jordan Russell. All rights reserved.</b><br/>
 <b>Portions Copyright &copy; 2000-2021 Martijn Laan. All rights reserved.</b><br/>
 <extlink href="https://jrsoftware.org/">Inno Setup home page</extlink>
@@ -4810,7 +4810,7 @@ DiskSliceSize=1457664
 </setuptopic>
 
 <setuptopic directive="WizardImageFile">
-<setupdefault><tt>compiler:WIZMODERNIMAGE.BMP</tt></setupdefault>
+<setupdefault><i>(blank)</i></setupdefault>
 <body>
 <p>Specifies the name(s) of the bitmap file(s) to display on the left side of the wizard. Wildcards are supported and the files(s) must be located in your installation's <link topic="sourcedirectorynotes">source directory</link> when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.</p>
 <p>256-color bitmaps may not display correctly in 256-color mode, since it does not handle palettes.</p>
@@ -4824,6 +4824,8 @@ DiskSliceSize=1457664
 <tr><td>225%</td><td>355x700</td></tr>
 <tr><td>250%</td><td>410x797</td></tr>
 </table>
+<p>If this directive is not specified or is blank, built-in wizard images supporting multiple DPI settings will be used.</p>
+<p>To use the old default wizard images set this directive to <tt>compiler:WIZMODERNIMAGE.BMP</tt>.</p>
 <example><pre>WizardImageFile=myimage.bmp,myimage2.bmp</pre></example>
 <p><b>See also:</b><br/>
 <link topic="setup_wizardsmallimagefile">WizardSmallImageFile</link><br/>
@@ -4833,7 +4835,7 @@ DiskSliceSize=1457664
 </setuptopic>
 
 <setuptopic directive="WizardSmallImageFile">
-<setupdefault><tt>compiler:WIZMODERNSMALLIMAGE.BMP</tt></setupdefault>
+<setupdefault><i>(blank)</i></setupdefault>
 <body>
 <p>Specifies the name(s) of the bitmap file(s) to display in the upper right corner of the wizard. Wildcards are supported and the file(s) must be located in your installation's <link topic="sourcedirectorynotes">source directory</link> when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.</p>
 <p>256-color bitmaps may not display correctly in 256-color mode, since it does not handle palettes.</p>
@@ -4847,6 +4849,8 @@ DiskSliceSize=1457664
 <tr><td>225%</td><td>119x123</td></tr>
 <tr><td>250%</td><td>138x140</td></tr>
 </table>
+<p>If this directive is not specified or is blank, built-in wizard images supporting multiple DPI settings will be used.</p>
+<p>To use the old default wizard images set this directive to <tt>compiler:WIZMODERNSMALLIMAGE.BMP</tt>.</p>
 <example><pre>WizardSmallImageFile=mysmallimage.bmp,mysmallimage2.bmp</pre></example>
 <p><b>See also:</b><br/>
 <link topic="setup_wizardimagefile">WizardImageFile</link><br/>
@@ -5080,8 +5084,12 @@ DiskSliceSize=1457664
 </setuptopic>
 
 <setuptopic directive="SetupIconFile">
+<setupdefault><i>(blank)</i></setupdefault>
 <body>
 <p>Specifies a custom program icon to use for Setup/Uninstall. The file must be located in your installation's <link topic="sourcedirectorynotes">source directory</link> when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.</p>
+<p>It is recommended to include at least the following sizes in your icon: 16x16, 32x32, 48x48, 64x64, and 256x256.</p>
+<p>If this directive is not specified or is blank, a built-in icon supporting the above sizes will be used.</p>
+<p>To use the old default icon set this directive to <tt>compiler:SetupClassicIcon.ico</tt>.</p>
 <example><pre>SetupIconFile=MyProgSetup.ico</pre></example>
 </body>
 </setuptopic>

+ 25 - 0
ISHelp/isxfunc.xml

@@ -2597,6 +2597,31 @@ end;</pre></example>
         <prototype>function ScaleY(Y: Integer): Integer;</prototype>
         <description><p>Takes a Y coordinate or height and returns it scaled to fit the size of the current dialog font. If the dialog font is 8-point MS Sans Serif and the user is running Windows in Small Fonts (96 dpi), then Y is returned unchanged.</p></description>
       </function>
+      <function>
+        <name>InitializeBitmapImageFromIcon</name>
+        <prototype>function InitializeBitmapImageFromIcon(const BitmapImage: TBitmapImage; const IconFilename: String; const BkColor: TColor; const AscendingTrySizes: TArrayOfInteger): Boolean;</prototype>
+        <description><p>Initializes the given bitmap image with an icon from the given icon file using the given background color for transparent parts.</p>
+<p>The bitmap image should be scaled already and the function will load the largest fitting icon which has a size from the given array of sizes. After loading the function will set the size of the bitmap image to the loaded size.</p>
+<p>The array must be sorted already from smallest to highest size.</p>
+<p>Returns True if the icon could be loaded, False otherwise.</p></description>
+        <example><pre>procedure InitializeWizard;
+var
+  Page: TWizardPage;
+  BitmapImage: TBitmapImage;
+begin
+  Page := CreateCustomPage(wpWelcome, 'Test', 'Test');
+
+  BitmapImage := TBitmapImage.Create(Page);
+  
+  with BitmapImage do begin
+    Width := ScaleX(32);
+    Height := ScaleY(32);
+    Parent := Page.Surface;
+  end;
+
+  InitializeBitmapImageFromIcon(BitmapImage, 'MyProg.ico', Page.SurfaceColor, [32, 48, 64]);
+end;</pre></example>
+      </function>
     </subcategory>
   </category>
   <category>

+ 45 - 32
Projects/CompExeUpdate.pas

@@ -18,7 +18,7 @@ uses
 
 procedure UpdateSetupPEHeaderFields(const F: TCustomFile;
   const IsVistaCompatible, IsTSAware, IsDEPCompatible, IsASLRCompatible: Boolean);
-procedure UpdateIcons(const FileName, IcoFileName: String);
+procedure UpdateIcons(const FileName, IcoFileName: String; const DeleteUninstallIcon: Boolean);
 procedure UpdateVersionInfo(const F: TCustomFile;
   const NewBinaryFileVersion, NewBinaryProductVersion: TFileVersionNumbers;
   const NewCompanyName, NewFileDescription, NewTextFileVersion, NewLegalCopyright,
@@ -319,7 +319,7 @@ begin
   Result := True;
 end;
 
-procedure UpdateIcons(const FileName, IcoFileName: String);
+procedure UpdateIcons(const FileName, IcoFileName: String; const DeleteUninstallIcon: Boolean);
 type
   PIcoItemHeader = ^TIcoItemHeader;
   TIcoItemHeader = packed record
@@ -379,14 +379,47 @@ type
     Result := True;
   end;
 
+  function DeleteIcon(const H: THandle; const M: HMODULE; const ResourceName: PChar): PGroupIconDir;
+  var
+    R: HRSRC;
+    Res: HGLOBAL;
+    GroupIconDir: PGroupIconDir;
+    I: Integer;
+    wLanguage: Word;
+  begin
+    { Load the group icon resource }
+    R := FindResource(M, ResourceName, RT_GROUP_ICON);
+    if R = 0 then
+      ResUpdateErrorWithLastError('FindResource failed (1)');
+    Res := LoadResource(M, R);
+    if Res = 0 then
+      ResUpdateErrorWithLastError('LoadResource failed (1)');
+    GroupIconDir := LockResource(Res);
+    if GroupIconDir = nil then
+      ResUpdateErrorWithLastError('LockResource failed (1)');
+
+    { Delete the group icon resource }
+    if not GetResourceLanguage(M, RT_GROUP_ICON, ResourceName, wLanguage) then
+      ResUpdateError('GetResourceLanguage failed (1)');
+    if not UpdateResource(H, RT_GROUP_ICON, ResourceName, wLanguage, nil, 0) then
+      ResUpdateErrorWithLastError('UpdateResource failed (1)');
+
+    { Delete the icon resources that belonged to the group }
+    for I := 0 to GroupIconDir.ItemCount-1 do begin
+      if not GetResourceLanguage(M, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage) then
+        ResUpdateError('GetResourceLanguage failed (2)');
+      if not UpdateResource(H, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage, nil, 0) then
+        ResUpdateErrorWithLastError('UpdateResource failed (2)');
+    end;
+
+    Result := GroupIconDir;
+  end;
+
 var
   H: THandle;
   M: HMODULE;
-  R: HRSRC;
-  Res: HGLOBAL;
-  GroupIconDir, NewGroupIconDir: PGroupIconDir;
+  OldGroupIconDir, NewGroupIconDir: PGroupIconDir;
   I: Integer;
-  wLanguage: Word;
   F: TFile;
   Ico: PIcoHeader;
   N: Cardinal;
@@ -423,38 +456,18 @@ begin
       if M = 0 then
         ResUpdateErrorWithLastError('LoadLibraryEx failed (1)');
       try
-        { Load the 'MAINICON' group icon resource }
-        R := FindResource(M, 'MAINICON', RT_GROUP_ICON);
-        if R = 0 then
-          ResUpdateErrorWithLastError('FindResource failed (1)');
-        Res := LoadResource(M, R);
-        if Res = 0 then
-          ResUpdateErrorWithLastError('LoadResource failed (1)');
-        GroupIconDir := LockResource(Res);
-        if GroupIconDir = nil then
-          ResUpdateErrorWithLastError('LockResource failed (1)');
-
-        { Delete 'MAINICON' }
-        if not GetResourceLanguage(M, RT_GROUP_ICON, 'MAINICON', wLanguage) then
-          ResUpdateError('GetResourceLanguage failed (1)');
-        if not UpdateResource(H, RT_GROUP_ICON, 'MAINICON', wLanguage, nil, 0) then
-          ResUpdateErrorWithLastError('UpdateResource failed (1)');
-
-        { Delete the RT_ICON icon resources that belonged to 'MAINICON' }
-        for I := 0 to GroupIconDir.ItemCount-1 do begin
-          if not GetResourceLanguage(M, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage) then
-            ResUpdateError('GetResourceLanguage failed (2)');
-          if not UpdateResource(H, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage, nil, 0) then
-            ResUpdateErrorWithLastError('UpdateResource failed (2)');
-        end;
+        { Delete default icons }
+        OldGroupIconDir := DeleteIcon(H, M, 'MAINICON');
+        if DeleteUninstallIcon then
+          DeleteIcon(H, M, 'Z_UNINSTALLICON');
 
         { Build the new group icon resource }
         NewGroupIconDirSize := 3*SizeOf(Word)+Ico.ItemCount*SizeOf(TGroupIconDirItem);
         GetMem(NewGroupIconDir, NewGroupIconDirSize);
         try
           { Build the new group icon resource }
-          NewGroupIconDir.Reserved := GroupIconDir.Reserved;
-          NewGroupIconDir.Typ := GroupIconDir.Typ;
+          NewGroupIconDir.Reserved := OldGroupIconDir.Reserved;
+          NewGroupIconDir.Typ := OldGroupIconDir.Typ;
           NewGroupIconDir.ItemCount := Ico.ItemCount;
           for I := 0 to NewGroupIconDir.ItemCount-1 do begin
             NewGroupIconDir.Items[I].Header := Ico.Items[I].Header;

ファイルの差分が大きいため隠しています
+ 1413 - 378
Projects/CompForm.dfm


+ 4 - 0
Projects/CompForm.pas

@@ -20,6 +20,10 @@ unit CompForm;
 {$WARN SYMBOL_PLATFORM OFF}
 {$ENDIF}
 
+{$IFDEF STATICCOMPILER}
+{$R IMAGES2.RES}
+{$ENDIF}
+
 interface
 
 uses

+ 196 - 882
Projects/CompWizard.dfm

@@ -74,835 +74,165 @@ object WizardForm: TWizardForm
         Height = 314
         Anchors = [akLeft, akTop, akBottom]
         Picture.Data = {
-          07544269746D61707E670000424D7E670000000000007600000028000000A400
-          00003A0100000100040000000000086700000000000000000000100000001000
-          000000000000000080000080000000808000800000008000800080800000C0C0
-          C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
-          FF00444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          44444444444444444444444444444444444444440000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000044444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444400004444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          444444444444444444444444444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444440000444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444444444444444444444466666666666666664444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444000044444444444444444444
-          4444444444444466666666666666664444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          44444444444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444
-          4444444444444444444444444444446666666666666666444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444400004444444444444444444444444444
-          4444446666666666666666444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000444444444444
-          4444444444444444444444666666666666666644444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444440000444444444444444444444444444444444466
-          6666666666666644444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444444444444444444
-          4444444444444466666666666666664444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444000044444444444444444444444444444444446666666666
-          6666664444444444444444444444444444444444444444444444444444444444
-          444444444444444444444444444444444444444444444444444444440000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444444644444444444444444444
-          4444446666666666666666444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444400004444446664444444444444444444444444666666666666666644
-          4444444444444444444444644444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444440000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000444466666664444444444444444444444466
-          6666666666666644444444444444444444446666644444444444444444444444
-          4444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000444666666666444444444444444444444466666666666666664444444444
-          4444444444466666664444444444444444444444444444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000046666666666666444444444444444444446666666666
-          6666664444444444444444444666666666664444444444444444444444444444
-          4444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00006666
-          6666666666644444444444444444446666666666666666444444444444444444
-          6666666666666444444444444444444444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00006666666666666666644444444444444444666666666666666644
-          4444444444444466666666666666666444444444444444444444444444444444
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000666666666666
-          6666664444444444444444666666666666666644444444444444466666666666
-          666666664444444444444444444444444444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000666666666666666666664444444444444466666666666666664444444444
-          4446666666666666666666666644444444444444444444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000066666666666666666666
-          6444444444444466666666666666664444444444446666666666666666666666
-          64444444444444444444444444444444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00006666
-          6666666666666666666444444444446666666666666666444444444466666666
-          6666666666666664444444444444444444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C600004666666666666666666666664444
-          4444446666666666666666444444444666666666666666666666664444444444
-          44444444444444444444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000444666666666
-          6666666666666644444444666666666666666644444446666666666666666666
-          666644444444444444444444444444444444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000444466666666666666666666666444444466
-          6666666666666644444466666666666666666666666444444444444444444444
-          4444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444466666666666666
-          6666666664444466666666666666664444666666666666666666666664444444
-          44444444444444444444444444444444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6000044444446666666666666666666666644446666666666
-          6666664446666666666666666666666644444444444444444444444444444444
-          4444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444444446666666666666666666
-          6666446666666666666666446666666666666666666666444444444444444444
-          44444444444444444444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C00004444444444666666666666666666666664666666666666666666
-          6666666666666666666664444444444444444444444444444444444444444444
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000444444444444666666666666666666666666
-          6666666666666666666666666666666666644444444444444444444444444444
-          4444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000444444444444466666666666666666666666666666666666666666666666
-          6666666666444444444444444444444444444444444444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000044444444444444466666666666666666666666666666
-          6666666666666666666666664444444444444444444444444444444444444444
-          4444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00004444
-          4444444444446666666666666666666666666666666666666666666666666664
-          4444444444444444444444444444444444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444446666666666666666666666666666666666
-          66666666666664444446C6C44444444444444444444444444444444444444444
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000444444444444
-          44444446666666666666666666666666666666666666666666664444446C6C6C
-          444444444444444444444444444444444444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444444444666666666666666666666666666666666666666
-          664444444C6C6C6C6C4444444444444444444444444444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000044444444444444444444
-          446666666666666666666666666666666666666664444446C6C6C6C6C6C44444
-          44444444444444444444444444444444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00006666
-          6666666666666666666666666666666666666666666666666666666666666666
-          6666666666666666666666666666644444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C600006666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666666666666666
-          66666444444444444444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000666666666666
-          6666666666666666666666666666666666666666666666666666666666666666
-          666666666666666666666444444444444444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000666666666666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666666666666444
-          4444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000066666666666666666666
-          6666666666666666666666666666666666666666666666666666666666666666
-          66666666666664444444444444444444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6000066666666666666666666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666644444444444
-          4444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00006666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666666666666666
-          66666444444444444444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C00006666666666666666666666666666666666666666666666666666
-          6666666666666666666666666666666666666666666664444444444444444444
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000666666666666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666666666666444
-          4444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000666666666666666666666666666666666666666666666666666666666666
-          6666666666666666666666666666666666666444444444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000066666666666666666666666666666666666666666666
-          6666666666666666666666666666666666666666666666666666644444444444
-          4444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00004444
-          444444444444444466666666666666666666666666666666666666666666C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444446666666666666666666666666666666666
-          66666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000444444444444
-          4444466666666666666666666666666666666666666666666666666C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C444444444444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444666666666666666666666666666666666666666666666
-          666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444444444444444444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000044444444444444666666
-          66666666666666666666666666666666666666666666666666C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C4444444444444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444
-          4444444466666666666666666666666666666666666666666666666666666666
-          6666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C600004444444444466666666666666666
-          666666666666666666666666666666666666666666666C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C444444444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000444444444666
-          666666666666666666664466666666666666664666666666666666666666666C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444444444444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000444444446666666666666666666666644466
-          6666666666666644666666666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C4444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444466666666666666
-          6666666664444466666666666666664444666666666666666666666666C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6000044444666666666666666666666664444446666666666
-          66666644444666666666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C444444444444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004446666666666666666666666644
-          44444466666666666666664444444666666666666666666666666C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C4444444444444444444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C00004466666666666666666666666444444444666666666666666644
-          444444666666666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4
-          444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000666666666666666666666664444444444466
-          666666666666664444444444666666666666666666666666C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C44444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000666666666666666666666644444444444466666666666666664444444444
-          4666666666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000066666666666666666666444444444444446666666666
-          6666664444444444444666666666666666666666666C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C4444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00006666
-          6666666666666664444444444444446666666666666666444444444444446666
-          66666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00006666666666666666644444444444444444666666666666666644
-          44444444444444666666666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C44444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000666666666666
-          6666444444444444444444666666666666666644444444444444444666666666
-          66666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000666666666666664444444444444444444466666666666666664444444444
-          444444444666666666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C4444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000066666666666664444444
-          4444444444444466666666666666664444444444444444444466666666666666
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00006666
-          6666666444444444444444444444446666666666666666444444444444444444
-          4444666666666666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C600006666666666444444444444444444
-          44444466666666666666664444444444444444444444466666666C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC767676768CCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000466666664444
-          4444444444444444444444767676767676768644444444444444444444444446
-          666C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000444666644444444444444444444444444767
-          676767676767676864444444444444444444444466C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767676767676767676767686CC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444444444444444444
-          444444444448676767666668676767676767676768644444444444444446C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6000044444444444444444444444444444446767676766666
-          6666867676767676767676864444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCC76767676CCCCCCCCCCCCCC867676767676767
-          6768CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444444444444444444444444444
-          44467676767666666666664444444486767676767676767686444C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C00004444444444444444444444444444444767676766666666666644
-          44444444444867676767676767676866C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCC86767676
-          767676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000444444444444444444444444444444476767
-          676666666666664444444444444444444444486767676767676767C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000444444444444444444444444444444467676767666666666664444444444
-          44444444444444448676767676767676768C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC867
-          67676767676767686CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000044444444444444444444444444444446767676766666
-          6666664444444444444444444444444444444444448676767676767676767C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00004444
-          4444444444444444444444444447676767644444444444444444444444444444
-          4444444444444444444446C8676767676767676766C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCC76767676
-          8CC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCC86767676767676768CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444444767676767676767676764444444444444
-          4444444444444444444444444444444444444446C6C6C6C6C867676767676767
-          68C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000444444444444
-          4444447676767676767676767674444444444444444444444444444444444444
-          44444444444444446C6C6C6C6C6C6C86867676767676768C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCC7676767676767676767
-          676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCC8676767676767676768CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444486767676444486767676767444444444444444444444
-          44444444444444444444444444444444446C6C6C6C6C6C6C6C6C6C7676767676
-          767676768C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C000044444444444444446767
-          6767444444476767676444444444444444444444444444444444444444444444
-          444444444446C6C6C6C6C6C6C6C6C6C6C6C7676767676767676768C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCC68676767676767676768CCCCCCCCCCCCCCCCCCCCC00004444
-          4444444444446767676744444447676767644444444444444444444444444444
-          444444444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C86767
-          6767676767676766C6C6C6C6C6C6C6C600004444444444444444767676764444
-          4446767676744444444444444444444444444444444444444444444444444444
-          4444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C86767676767676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCC867676767CCCCCCCCCCCCCCCC0000444444444444
-          4444767676764444444676767674444444444444444444444444444444444444
-          4444444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C8676766C6C6C6C6C6C6C6C0000444444444444444467676767444444476767
-          6764444444444444444444444444444444444444444444444444444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC000044444444444444446767
-          6767444444476767676444444444444444444444444444444444444444444444
-          44444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C6000044444444444444447676767644444446767676744444
-          4444444444444444444444444444444444444444444444444444444444446C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCC76767CCCCCCCCCCCCCCCC00004444444444444444767676764444
-          4446767676744444444444444444444444444444444444444444444444444444
-          444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000444444444444444467676767C6C6C6C767676766C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC67676CCCCCCCCCCCCCCCC0000444444444444444467676767C6C6C6C76767
-          6766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          00004444444444444444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767
-          CCCCCCCCCCCCCCCC00004444444444444444767676766C6C6C667676767C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C00004444
-          44444444444467676767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCC
-          CCCCCCCC0000444444444444444467676767C6C6C6C767676766C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000444444444444
-          4444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767
-          676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC
-          00004444444444444444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C000044444444444444446767
-          6767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC00004444
-          44444444444467676767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C600004444444444444444767676766C6C
-          6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC0000444444444444
-          4444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000444444444444444467676767C6C6C6C76767
-          6766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC000044444444444444446767
-          6767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C600004444444444444444767676766C6C6C667676767C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCC76767CCCCCCCCCCCCCCCC00004444444444444444767676766C6C
-          6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000444444444444444467676767C6C6C6C767676766C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC67676CCCCCCCCCCCCCCCC0000444444444444444467676767C6C6C6C76767
-          6766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          00004444444444444444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCC686CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767
-          CCCCCCCCCCCCCCCC00004444444444444444767676766C6C6C667676767C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C676767686C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C00004444
-          44444444444467676767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC767
-          67676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCC
-          CCCCCCCC0000444444444444444467676767C6C6C6C767676766C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C676767676C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000444444444444
-          4444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C67
-          6C6C6C6C6C6C676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767
-          676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7676CCCCCCCCCCC67676767CCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC
-          00004444444444444444767676766C6C6C667676767C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6767676C6C6C6C6C676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C000044444444444444446767
-          6767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C676767676C6C6
-          C6C6C676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCC767676767CCCCCCCC676767676CCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC00004444
-          44444444444467676767C6C6C6C767676766C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6867676767686C6C6C6C676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C600004444444444444444767676766C6C
-          6C667676767C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6767676767686C6C6C6767
-          67676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCC7676767676CCCCCCC67676767CCCCCCCCCC676CCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC0000444444444444
-          4444767676764444444676767674444444444444444444444444444444444767
-          6767676444444767676764444C6C6C67676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000444444444444444467676767444444476767
-          6764444444444444444444444444444444444476767676764444467676767444
-          46C6C6767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCC6767676767CCCCC76767676CCCCCCC67676767CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC000044444444444444446767
-          6767444444476767676444444444444444444444444444444444444676767676
-          7444467676767444C6C67676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C6000044444444444444447676767644444446767676744444
-          4444444444444444444444444444444467676767684447676767644C6C676767
-          6767686C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCC6767676768CC67676767CCCC6767676767676CCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCC76767CCCCCCCCCCCCCCCC00004444444444444444767676764444
-          4446767676744444444444444444444444444444444444444867676767644767
-          67676C6C6767676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C00004444444444444444676767674444444767676764444444444444
-          4444444444444444444444444486767676764676767676C6767676767676C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC767676767676767676C6767676767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC67676CCCCCCCCCCCCCCCC0000444444444444444467676767444444476767
-          6764444444444444444444444444444444444444444476767676767676767676
-          7676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000444444444444444476767676444444467676767444444444444444444444
-          4444444444444444444467676767676767676767676767676C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCC7686CCCCCCCCCCCCC676
-          767676767676767676767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767
-          CCCCCCCCCCCCCCCC000044444444444444447676767644444446767676744444
-          444444444444444444446767676868444444446767676767676767676767676C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C00004444
-          4444444444446767676744444447676767644444444444444444444444447676
-          76767676768444467676767676767676767676C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCC67676767CCCCCCCCCCCCCCCCCCCCCCCCC6767676767676767676767676767
-          6767676767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCC
-          CCCCCCCC00004444444444444444676767674444444767676764444444444444
-          4444444444447676767676767676767676767676767676767676C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C60000444444444444
-          4444767676764444444676767674444444444444444444444444676767676767
-          676767676767676767676767676C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767
-          676CCCCCCCCCCCCCCCCCCCCCCCCC767676767676767676767676767676767676
-          768CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC
-          0000444444444444444476767676444444467676767444444444444444444444
-          444467676767676767676767676767676767676767676768686C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6676766C6C6C6C6C6C6C6C000044444444444444446767
-          6767444444476767676444444444444444444444444476767676767676767676
-          767676767676767676767676767686C6C6C6C6C6C6C6C6C6C6C6C6C6C6C76767
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCC68676767676767676767676767676767676767676767
-          6767676768CCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC00004444
-          4444444444446767676744444447676767644444444444444444444444444444
-          4486767676767676767676767676767676767676767676767676C6C6C6C6C6C6
-          C6C6C6C6C6C76767C6C6C6C6C6C6C6C600004444444444444444767676764444
-          4446767676744444444444444444444444444444444444446867676767676767
-          676767676767676767676767676C6C6C6C6C6C6C6C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7676767676767676767676767676767676
-          767CCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC0000444444444444
-          4444767676764444444676767674444444444444444444444444444444444444
-          4C6C6C6767676767676767676767676767676767676C6C6C6C6C6C6C6C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000444444444444444467676767444444476767
-          676444444444444444444444444444444444444446C6C6767676767676767676
-          76767676767676767676C6C6C6C6C6C6C6C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCC676767676767676767676767676767676767676CCCCC
-          CCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC000044444444444444446767
-          67674444444767676764444444444444444444444444444444444446C6C67676
-          767676767676767676C6C686767676767676C6C6C6C6C6C446C6C6C6C6C76767
-          C6C6C6C6C6C6C6C6000044444444444444447676767644444446767676744444
-          4444444444444444444444444444446C6C6767676767676767676767676C6C6C
-          6C686767676C6C6C6C6C6C444C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCC676767676767676767676767676CCCCCCCCCCCCC68CCCCCCCCCCCCC
-          CCCCCCCCCCC76767CCCCCCCCCCCCCCCC00004444444444444444767676764444
-          444676767674444444444444444444444444444444446C6C6767676767676767
-          6767676767676C6C6C6C6C6C6C6C6C6C6C6C44444C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C00004444444444444444676767674444444767676764444444444444
-          44444444444444444446C6C6767676767676C67676767676767676C6C6C6C6C6
-          C6C6C6C6C6C4444446C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67
-          67676767676CC767676767676767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC67676CCCCCCCCCCCCCCCC0000444444444444444467676767444444476767
-          6764444444444444444444444444444446C6C6767676767676C6C67676767676
-          76767676C6C6C6C6C6C6C6C6C444444446C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000444444444444444476767676444444467676767444444444444444444444
-          444444446C6C6767676767676C6C676767676767676767678C6C6C6C6C6C6C6C
-          444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6767676767676
-          CCCCC67676767C76767676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767
-          CCCCCCCCCCCCCCCC000044444444444444447676767644444446767676744444
-          444444444444444444444C6C6C6767676767676C6C6C676767676C6767676767
-          676C6C6C6C6C6C44444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C00004444
-          44444444444467676767444444476767676444444444444444444444444446C6
-          C6767676767676C6C6C6C676767676C6767676767676C6C6C6C6C44444444444
-          46C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7676767676CCCCCCCC767
-          67676CCCC76767676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCC
-          CCCCCCCC00004444444444444444676767674444444767676764444444444444
-          444444444446C6C6C6C676767676C6C6C6C6C676767676C6C6767676767676C6
-          C6C444444444444446C6C6C6C6C76767C6C6C6C6C6C6C6C60000444444444444
-          444476767676444444467676767444444444444444444444446C6C6C6C6C6767
-          676C6C6C6C6C676767676C6C6C6767676767676C6C444444444444444C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767
-          676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCC67676767CCC
-          CCCC76767676767CCCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC
-          0000444444444444444476767676444444467676767444444444444444444444
-          6C6C6C6C6C6C6C676C6C6C6C6C6C676767676C6C6C6C67676767676844444444
-          444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C000044444444444444446767
-          6767444444476767676444444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C676767676C6C6C6C67676767674444444444444444446C6C6C6C6C76767
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC676767676CCCCCCCCC67
-          676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC00004444
-          444444444444676767674444444767676764444444444444444446C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C676767676C6C6C6C6C6767674444444444444444444
-          46C6C6C6C6C76767C6C6C6C6C6C6C6C600004444444444444444767676764444
-          44467676767444444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6767
-          67676C6C6C6C6C6C6767644444444444444444444C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676767CCCCCCCCCCCC67CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC0000444444444444
-          4444767676764444444676767674444444444444446C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C676767676C6C6C6C6C6C6C64444444444444444444444C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000444444444444444467676767444444476767
-          676444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C676767676C6
-          C6C6C6C6C4444444444444444444444446C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCC67676CCCCCCCCCCCCCCCC000044444444444444446767
-          67674444444767676764444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C676767676C6C6C6C6C444444444444444444444444446C6C6C6C6C76767
-          C6C6C6C6C6C6C6C6000044444444444444447676767644444446767676744444
-          4444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C686C6C6C6C6C44
-          4444444444444444444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCC76767CCCCCCCCCCCCCCCC00004444444444444444767676764444
-          444676767674444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C44444444444444444444444444444C6C6C6C6C6676766C6C6C6C
-          6C6C6C6C0000444444444444444467676767444444476767676444444446C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444444444444
-          444444444444444446C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCC67676CCCCCCCCCCCCCCCC0000444444444444444467676767444444476767
-          6764444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C444444444444444444444444444444446C6C6C6C6C76767C6C6C6C6C6C6C6C6
-          0000444444444444444476767676444444467676767444446C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444444444444444444444
-          444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767
-          CCCCCCCCCCCCCCCC00004444444444444444767676764444444676767674446C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444444444
-          4444444444444444444444444C6C6C6C6C6676766C6C6C6C6C6C6C6C00004444
-          44444444444467676767444444476767676446C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444444444444444444444
-          46C6C6C6C6C76767C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCC67676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC67676CCCCCCCC
-          CCCCCCCC000044444444444444446767676744444447676767644446C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444444444444444444
-          444444444444444446C6C6C6C6C76767C6C6C6C6C6C6C6C60000444444444444
-          444476767676444444467676767444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C444444444444444444444444444444444444444C6C6C6C
-          6C6676766C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767
-          676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767CCCCCCCCCCCCCCCC
-          000044444444444444447676767644444446767676744444446C6C6C6C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444444444444467676
-          844444444C6C6C6C6C6676766C6C6C6C6C6C6C6C000044444444444444446767
-          6767444444476767676444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          C6C6C6C4444444444444444444444444446767676768644446C6C6C6C6C76767
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCC767676767676768CCCCCCCCCC67676CCCCCCCCCCCCCCCC00004444
-          4444444444446767676744444447676767644444444446C6C6C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6C6C6C4444444444444444444444444444467676767676767
-          676768C6C6C76767C6C6C6C6C6C6C6C600004444444444444444767676764444
-          44467676767444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C4444
-          444444444444444444444444447676768676767676767676768676766C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CC676767CCC867676767676767676767CCCCCCCCCCCCCCCC0000444444444444
-          44447676767644444446767676744444444444446C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C6C444444444444444444444444444444447676764444444486767676
-          767676766C6C6C6C6C6C6C6C0000444444444444444467676767444444476767
-          676444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C444444444444444
-          444444444444444444676767444444444C6C686767676767C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCC76767676CCCCCCC67676767CCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC767676
-          CCCCCCCCCCCCCCCCCC767676CCCCCCCCCCCCCCCC000044444444444444446767
-          676744444447676767644444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C4
-          44444444444444444444444444444444446767674444444446C6C6C6C6676768
-          C6C6C6C6C6C6C6C6000044444444444444447676767644444446767676744444
-          4444444444446C6C6C6C6C6C6C6C6C6C6C6C6C44444444444444444444444444
-          4444444444767676444444444C6C6C6C6676767C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCC67676767CCCCCCC76767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC676767CCCCCCCC
-          CCCCCCCCC767676CCCCCCCCCCCCCCCCC00004444444444444444767676764444
-          4446767676768444444444444444446C6C6C6C6C6C6C6C6C6C6C444444444444
-          44444444444444444444444444767676444444444C6C6C6C7676766C6C6C6C6C
-          6C6C6C6C00004444444444444444676767674444444767676767676768644444
-          44444446C6C6C6C6C6C6C6C6C6C4444444444444444444444444444444444444
-          446767674444444446C6C6C7676766C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCC76767676CCCCCCC67676767676767676768CCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC767676CCCCCCCCCCCCCC76
-          76768CCCCCCCCCCCCCCCCCCC0000444444444444444467676767444444476767
-          67676767676767676768644446C6C6C6C6C6C6C6C44444444444444444444444
-          4444444444444444446767674444444446C6C6676767C6C6C6C6C6C6C6C6C6C6
-          0000444444444444444476767676444444467676767676767676767676767676
-          846C6C6C6C6C6C6C444444444444444444444444444444444444444444767676
-          444444444C6C6676767C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC6767
-          6767CCCCCCCC67676767676767676767676767676767686CCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC676767CCCCCCCCCCCC6767678CCCCC
-          CCCCCCCCCCCCCCCC000044444444444444447676767644444444467676767676
-          767676767676767676767676766C6C4444444444444444444444444444444444
-          4444444444767676444444444C667676766C6C6C6C6C6C6C6C6C6C6C00004444
-          4444444444446767676744444444444867676767676767676767676767676767
-          6767686444444444444444444444444444444444444444444467676744444444
-          46C7676766C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCC
-          CCCCCCCCCCC68676767676767676767676767676767676767686CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCC767676CCCCCCCCCC7676768CCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444676767674444444444444444444867676767
-          6767676767676767676767676767676864444444444444444444444444444444
-          446767674444444447676766C6C6C6C6C6C6C6C6C6C6C6C60000444444444444
-          4444767676764444444444444444444444448676767676767676767676767676
-          767676767676844444444444444444444444444444767676444444447676767C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCC67676767CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCC8676767676767676767676767676767676767676CCCCCCC
-          CCCCCCCCCCCCCCCCCC676767CCCCCCC7676767CCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444476767676444444444444444444444444444444444486
-          7676767676767676767676767676767676768644444444444444444444767676
-          4444444676767C6C6C6C6C6C6C6C6C6C6C6C6C6C000044444444444444446767
-          6767444444444444444444444444444444444444444867676767676767676767
-          6767676767676767686444444444444444676767444444676767C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCC76767676CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC867676767676767676767676767676767676768C
-          CCCCCCCCCC767676CCCCC6767676CCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444
-          4444444444446767676768644444444444444444444444444444444444444444
-          4448676767676767676767676767676767676767676844444467676744446767
-          6766C6C6C6C6C6C6C6C6C6C6C6C6C6C600004444444444444444767676767676
-          7686844444444444444444444444444444444444444444448676767676767676
-          7676767676767676767676768476767644447676766C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C0000CCCCCCCCCCCCCCCC676767676767676767686CCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCC86767676767676767676767676767676767
-          67676767CCC767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000444444444444
-          4444767676767676767676767676864444444444444444444444444444444444
-          444444444486767676767676767676767676767676767676447676767C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000444444444444444467676767676767676767
-          6767676768444444444444444444444444444444444444444444444867676767
-          6767676767676767676767676767676746C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000CCCCCCCCCCCCCCCCC676767676767676767676767676767676CCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC867676767676767676767676767676
-          7676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444444444444444467
-          6767676767676767676767676767676768444444444444444444444444444444
-          44444444444444486767676767676767676767676767676446C6C6C6C6C6C6C6
-          C6C6C6C6C6C6C6C6000044444444444444444444867676767676767676767676
-          7676767676767684444444444444444444444444444444444444444444467676
-          7676767676767676767676444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCC
-          CCCCCCCCCCCCCCCCCCCCC867676767676767676767676767676767676768CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC76767676767676767676767676CCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444444444444444444444444444
-          8676767676767676767676767676767676767676864444444444444444444444
-          44444444444676767444448676767676767644444C6C6C6C6C6C6C6C6C6C6C6C
-          6C6C6C6C00004444444444444444444444444444444448676767676767676767
-          6767676767676767676768644444444444444444444444444447676764444444
-          676767676744444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCC86767676767676767676767676767676767676
-          76CCCCCCCCCCCCCCCCCCCCCCCCC676767CCCCCCC7676767CCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000444444444444444444444444444444444444
-          4444444867676767676767676767676767676767676768444444444444444444
-          4447676764444448676767444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
-          0000444444444444444444444444444444444444444444444444867676767676
-          7676767676767676767676767686444444444444444676767444444676767444
-          444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8676767676767676767676767676767
-          67676768CCCCCCCCCCC767676CCCCC6767676CCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC000044444444444444444444444444444444444444444444
-          4444444444448676767676767676767676767676767676767676844444467676
-          7444467676764444444444444C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C00004444
-          4444444444444444444444444444444444444444444444444444444448676767
-          6767676767676767676767676767676768476767644447676764444444444444
-          46C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000CCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC86767676767676767676767676
-          76767676767676767CCC7676768CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCC00004444444444444444444444444444444444444444444444444444
-          4444444444444444444867676767676767676767676767676767676764476767
-          674444444444444446C6C6C6C6C6C6C6C6C6C6C6C6C6C6C60000444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          867676767676767676767676767676767676767674444444444444444C6C6C6C
-          6C6C6C6C6C6C6C6C6C6C6C6C0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC867676767676767676767
-          6767676767676767CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          0000444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444448676767676767676767676767676767644444444
-          4444444444444444444444444444444444444444000044444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444486767676767676767676767676444444444444444444444444444444444
-          44444444444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC86767676767676
-          767676CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444446867676767676764444444444444444444
-          4444444444444444444444444444444400004444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444448676767444444444444444444444444444444444444444444444
-          444444440000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0000444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444440000444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC000044444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444000044444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          444444444444444444444444444444444444444444444444444444440000CCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00004444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444400004444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444440000CCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCC0000444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          0000444444444444444444444444444444444444444444444444444444444444
-          4444444444444444444444444444444444444444444444444444444444444444
-          44444444444444444444444444444444444444440000CCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-          CCCCCCCCCCCCCCCC0000}
+          0954506E67496D61676589504E470D0A1A0A0000000D49484452000000A40000
+          013A080600000098AEF9C6000000017352474200AECE1CE90000000467414D41
+          0000B18F0BFC6105000000097048597300000EC300000EC301C76FA864000013
+          5B4944415478DAEDDD099C54D595C7F1736EEFAC0D8271810664D14162DC7064
+          51B60644518C4693CC602699C499E0249A8C89445010449044C76532F8517134
+          C6B84602B844655351A2514654D42838A2E2CA22A0C8FE4EEE7DAFEDEEEAAA6E
+          BAFADDEA3A55FDFF7E62BAABBBAAFA55F58FFB96BAF59A3FFE7CD73E02508211
+          2468822041150409AA2048500541822A0812544190A00A8204551024A8822041
+          150409AA2048500541822A0812544190A00A8204551024A8822041150409AA20
+          48500541822A0812544190A00A8204551024A8822041150409AA204850054182
+          2A0812544190A00A8204551024A8822041150409AA2048500541822A08125441
+          90A00A8204551024A8822041150409AA2048500541822A0812544190A00A8204
+          551024A8822041150409AA2048500541822A0812544190A00A8204551024A882
+          2041150409AA2048500541822A0812544190A00A8204551024A8822041150409
+          AA2048500541822A0812544190A00A8204551024A8822041150409AA20485005
+          41822A0812544190A00A8204551024A8822041150409AA2048500541822A0812
+          544190A00A8204551024A8822041150409AA204850257783FC6203F1829F192A
+          2C2239FDBA805A75C8F6128107B91BE4BA156C16FE9CDDA7C1D9370774E8D1D9
+          5E22F0207783FCDBA36C9EB8220A72DC8D42DD4E946C2F12C497BB41BE7C3F9B
+          A7AE89821C7B8DD0612723C83C90BB413E3F97CDF3B744418E9929D4BB1241E6
+          819C0D92975FCFFCD2DD5190A3A6091D310641E6819C0D92164D67F3C6C35190
+          2326091D792682CC03B91BE42313D9BCBD2C0A72E82F858E3A0741E6819C0D92
+          E74D605EBF320A72F08542C78E479079207783BCE73CC31BDE0C3F0F064C10EA
+          FF030499079A3FC81D9F11BDF32C538F4142654D7F75857F77A6E1AD1F869FCB
+          09FF2A72E28F9B1CA46CDF44FCCED34C3D87C65A2688AFF9837CFD21368BAF64
+          39B02FC929D3032AAF68DA82DF526978E7B6F07339F63C91C13F6D5A901BDE22
+          7E62AAE14D6F535079B950DFD331D26651564648F71A347FFA0651AB8EEE1862
+          40871E9BDE7D8890F9ED0043124417BF71AEC8905FA41792BBED9AA56C96CC60
+          DAF325C981FF4032EEFA20D508397DC9BBFCD89B9FB1DF27C22EAEBDC722C374
+          D1A02E7256BF4EF88740D9DA86FCEC3DE23F9E6FD8C62925ED48865C9CDE71C4
+          5D5F90B979B8F9EAA2F4FBA6C8F04B1B7F7B1B343F7733D34B7731EFDD4D6223
+          946FDD1A5087E4D17AF7BE807EF4C73566EDA61D7E9F03B68B2B51E345854453
+          86779311BD3AB4F828B3B753B37E25F1C39718DEFDB95D0A43C13F9E6FF794CF
+          132A2CDEFF6DB77D44E68E71D541EEEB3D4678CCB4C6FD32EDF6223D399BCDDB
+          4F863548715B92B1B385BA1C9FF2F6AB3FDECE17CC5FCB7B83CCB6525268E897
+          277791538FE8D8A2A3CCEE5EF6EB0FDBEDC9E9D130610A480E1F6D47BAC94205
+          450DDF6EC31A32F7FC73CD08D97B94C89819FBFF456EB123F3A3930C6F5C43E1
+          2AD36A68BB719F8D70C2FC3566F5C75F66FEB9B0CF424981A129232A6458CFF2
+          161B65D60FFBB85527BF703B576F0F1E7A9CC8A8A9426D0FAAFF46767435F326
+          5407191C364468EC6F1AFE25AE5DC6BCF46AE69D9F55FD60FB0FE0F87F111990
+          7AEF5CEC6ABDA490B95D7181E76DC7489F6B57D6792228FC37627F265D32A4AB
+          8C39BC658E94590F92F6EE225E349D79CDA2EA5FBC74E84172DAEC803A764F7D
+          1BBBBA358F5C5273FD6E03C5EE90A4FE0506F6E1ADBA8FCD737398ECF662F597
+          7B8F141A39C56E2294A4BC5991216E5F9299189DFA82744AEDEA7B4A65850C3D
+          ACE58D94D90FD27151FEE93F0C7FF44ACDD74ACBEDEAF4B2D4D3CA6AAFEA2DE9
+          6247D5B36E4ABEDEAECF8997CEAE8ABDE6DB72D0D749CE9A13D417A31D14EDC8
+          683216A35337483732EEDA5BB38CA5F6F2C4A15D65749F963552EA08D2D9BA9E
+          78FE8586EDC76A8565149CFC9F42479E61778B6BF5F1D2DD6C965F5F13E4C147
+          919C333748BCBF0F889F9866235F95F06569DF85E4CC1B03B21F53B18313D991
+          31B335527290334675A3E94BDEB37BF5B5A2B4C3F454BB4D39A4058D947A8274
+          ECCE0ACFFBB1613BB2D52CA1898E330EFC49F51E383F770BF35FE7D60479E011
+          24DFB9B36A23D4FEEEDE7F81CDE35398766C4EB8FBF010D3593705D4B977CA1F
+          EF2A2CB73166BC464A0EF2AD8B8FA3856F6CA6498FAF4B88B2ACC88E94432A64
+          549F967148485790CE5B8B99175F111E1FACB598247D468A0CFB95DDD36843FC
+          D4B5CC2FDF571364C7C348C6DF1B05F9F2FDCC2B6E62DEB33DE16EC5AE9EA5D2
+          6E33DAFB49F944D8FFDAD9188B0C358B54413AF7BDB291AE5C9A3C525E61B729
+          4FEE91FF23A5BE209D97EE65F3CC751C8E76B58423E198AB037EDE8E907F7BB4
+          661CB3ABDFE03BBF0BF8D9FF615E3D2F797C73C739075F2474CC771BFC85BA1B
+          BA2D033742B2FDACE673F791A3EF85D7612EA8FA5E53D517A4B3C08E9493EB8C
+          94A576A4BC7468858CEC9DDF23A5CE2025B03B23B3985F5B90F42B17F7DAB70D
+          8C3F5B57F3C552BB2AEED44BF88355D5878F126ED3F70C11378997FD0D7F6EC1
+          8A6CA5ADECFF1536E16E1B0AD21D727223E58C65EF27AEBEED0F9A36B29B0CEE
+          D13E6FA3D419A4B36707F1639399DF7926D6165DD07D90907BCF4D5159C616D5
+          45D9AA90D35ACE8682745C946EA4BCEC897713474ABBF73D797845DEBECCA837
+          48C74DC478E0DF0C6F79B74937970EDD49BE7573D01C53CADA141B2E2D687C94
+          FB0B325C7E1BE53D76A49C5967A474DB9457DA917250F7FC1B297507E96C7E87
+          78C185863FFF24AD9B49DBAF918CBB2120BBC3D31C5C89E5A505A6B187D21B13
+          64F8386C94F35FDF4C972F7A3769EF7BD2B0FC1B29B317E4EE2FC303D7B46B1B
+          D14EFB71E7160E2FEFD84AE1840BF7B5F0E35637679179C796B4EE5ECADA1375
+          3E5CA8D47E2C6E1B6D6716B7B1BF497BB9C45DB67BACA5F66349BBE87271ABD8
+          0FA9CCAEB65B17356E57A7B141868FC54679F7CB76A47CF27DDA5367A49C31AA
+          9B0CEC963F23A5BF20BFD840B4710D8733C2DD2B242E2417D5AEADE174311B1E
+          871F776C0D23E4606FB61F7B023185519C2E58176E69BBF0101395D8CB365C29
+          AD0AD9ADFE3BF5166AD339E93EDCE8D8C18E928DF979E904192E9F8D729E1D29
+          A7D891B2769465C54C970DEB96371332FC0579CF786336BC95EDC7D32C82CE7D
+          88BE7B5790EA7B9DCA3213A4E3A2FC831D2967D96DCA3DB5A6C3B5B2ABEF19A3
+          7BC88915ED723E4A6F41F21FC61BDED43282944E7D48FEA9F9830C7FB68DF2C1
+          D736D1D445EF25465935520ECDF1913283ABEC2DD1AA7A670EAEB2C35575D52A
+          BB34BA2CA5E5595D65272CAB8DF2F7AB36D0EC27D7274459566CE8AA51DD737A
+          A4D4BF53E302DEB8D6EED46C4EEBEEA5ACA30DA79744DB846DA3ED40F7310777
+          6A523E3E1BE503AB37D1B4C575474A4397BB091939FA32A3FEC33E5BD647877D
+          6ACF026A847056CFB81B032AEF92D6ED9A2A53877D1A7C8C36CA3B5FDA40BF7E
+          2A71A46C5D5C40578DEE262774CDBD915277906E949C37C1988D4DDB360D773E
+          BE7953108E8419968903E38DE1A2BCFF553B522E798FF6268C9405346544D79C
+          9B90A137C81433C99B427A8F14696066B80F9978E930ADC768A3BCE3FF3EA5DF
+          3CFD415294B34EE92EFDBBB4CD99287506E9DEA6FAF4755553CCEACCF86977A8
+          8D7527F1979B12BFDEFA00BB57514ABCED83BA0F91E4E86F8B9CF4F3C449BE71
+          9F38CADCE48AA63D65D1848CE94BDF4F88D2ADBEA75656C8E01C7999516790AF
+          2D60B3F46A5B52E2A2C9013D494EFB75C0CB6633BFFFD784BAA4EB0922C3260A
+          3F724978168AC4475940C1F05F091D392EADE967E1C714D3CFECE7E1F73235FD
+          ACA95C94B7DB91F29A3A23A5DD9CA099A7F490E37360A4D417E43BCFB0796C32
+          BBD93EB51693A4D73091E193C4BD04C88F5ECABC76496290BD46889C3A4B68E7
+          36E2A533EDF797258EAE4565149C7295508FC1F54ED0756F5D68CA68D7149908
+          327C1E6C94F786937CEB8C942505E1DB21B48F94BA82DCBC8EF8C17F0FCF6851
+          B38405D199294EBAA87A3B300C6EF5FCC4208F3C339AF3E8B8EDCFE537D8EBFC
+          2961940DCF50E1FE62433DEF66CCF65B187C7151FEEFCA4FE9DAE57546CA1263
+          B7297BC87187EA1D29F504F9F927C40B2E32BCF9FF6BBE56584AC1A09F0A1D75
+          76C2E45A7EF6B7CC2BEF4C0CF2B8EF890CFA49ADB7160644AF3CC8FCEC8DCC36
+          D0EA2FBBB73BB859406DBF967231B2F5262F9F41868FB36A42C655CBDCDE77CD
+          D75D945754EA9D90A123C87D7BDC09A898D7BF50F33E19F786AC119385ECAA3A
+          E9FA2FDCC1E62F73129A09065C20D4FFFBC9D75DBBD46E8FCEE2F015A3AFEEBB
+          4BFFE87DDCF59C21A3A480B96D33BF0DD67790E1E3B451CE7DF113BAEE990FEA
+          4419EE7D0776A4CCE4436C92EC07696324BB93625E5F581363FB8AE844019D7A
+          A6BE8D1DF9CC93B313831C3A311A4953D9F836F123130D6F7DAFE6FA7DCF10B2
+          3B41F545E90EE3B46AE4AB2E4DD11C4186CFA59B90B16A433875ADEE4839ADB2
+          BB0CE8A6EBE079F6837CF14EE6E76E620EA2C59083BF41326A5A40ED0FA9FF36
+          6F3ECEE6F1CB13831C7DA5D0E1A3EB7F72B77E189D07F2A397A39FE3CE25E446
+          D5E3CEABF7366E942C49E360773A9A2BC8F0B1DA286FAD1A29F7D51929678FE9
+          111C73489B8CFDEC746537C8354BA23D6AB7BDE70ECDD83D651A79F9FE0F62AF
+          FB0B9B8517250679C60D42DD0734FCAFDD6D4B2EBA928DDB43773B3BEEDD886E
+          CFBBF7887A6F579EA13DEFA453A964899B797EE9B00AA95432F33C7B417EF42A
+          F143179B7056903BACD3FF07E2FE6BD42B2AF6B6E6811F2664129C735B40077F
+          7DFFB7757BE02FDC1E9DE08AC4EE7997939CFE5F011DD42FE5D5DDC1EFF625FE
+          57DD5A8274ECA6092D3EFFA820FE3DC5979D20DDF91D1F38DFD0F64FEDCE4B1B
+          0A5F4549E754CA9BD791B9EBDCC420C7DF5FFFC9A95279FD21E6E5D731BB2971
+          AD0FB441DF1A50BB83535ED54D9A28F49CA4A620DDC953574C38A6650629EEC0
+          F5C3BF30E6C355767D511EAD32BBF64F6F75B17D1399DBC62406F9C33F07E45E
+          3E4C873BE58ADB64D8B18582438E26197B4DC0A5ED92AE96EEC489C6D0136474
+          6AE9161B64F549EF3B1F4E327ABA1DD57AA47D17B2773715CC39C9D4BC12C3B4
+          EF82E501A738FB6EADB3DCA5E6DED5F8F894F04F8C04EE542B7DC7265DDDCD71
+          2C4B73F2847675FF41ACB8E0E8161A64D59F0591EE03855B756CF2DD1817E457
+          07BCED766760834C7A70141DE4DEB67B5FD0D01999E5CBCDC4EB56D4FBA74A32
+          3142661B82F4CCDC769ADD06DD105D68DDD9AEB21F497A42DDAE4847BBFDE762
+          7451EE6DE2539EA93DED6C4290BE17FCAE6F1BB6AB5B47EC6A5FC6DF97F484D6
+          7E8F8B1B20BFD81DC8AE7D92D6F6AA0BD10599EDC7EB1B82F4BDE0F7FFC8F0C7
+          D11977E5A0A348CE9D9BF484A63A64B37D4F203BF6363E4A775A67777AE76C3F
+          5EDF10A4EF055FF8330EB7FBC89D637C80C8B81B9222ABEFD4CC3BED28E946CB
+          FDFD8C36B6E8D23CDB99F90A82F4EDCF93D8AC591CFD35D8DE95D119CEEA6868
+          9284DB9E74A3A5FD5FD2EDDC6ABA75517E8E8C5F4190BE177CD9D5CCAF462727
+          0DFA9D2D347C6252588D795BAA0BD3AEC1DDCBBD617D857635EFB618F3B6C42A
+          08D2F782AF98C3FCE21DD12AFBF8EF8B0CBC2029C8A6BCF9AAA54090BEADFC3D
+          9B67FF3B1A21DD24DE14B376F2F180B62F08D2B7D5F3D92C9D1905E9DE6BD3EF
+          CCA42033397D2CD72148DFDE7E8ACDA313A3204F9D2DD4734852906E0FBB1841
+          A68420B3201F5F61F10541363353F52A0D86C7D41064337307B4DB64F03D31B9
+          0E41C6F4E917BBE9C0368DF8E3EED4BCEFAFCE550832A6EFDDF7A6995A5911F4
+          3CA0E1BF37E32654B42DF13FC33BDF20C89806CE5965CACB0AE9EC7E9D6444AF
+          72E9DABE846A6F21BA008B0BA3E38E6871FF10644C2EC8DA9733F9B6D1960041
+          C68420FD4290312148BF10644C08D22F04191382F40B41C68420FD4290312148
+          BF10644C08D22F04191382F40B41C68420FD4290312148BF10644C08D22F0419
+          1382F40B41C68420FD4290312148BF10644C08D22F04191382F40B41C68420FD
+          4290312148BF10644C08D22F04191382F40B41C68420FD4290312148BF10644C
+          08D22F04191382F40B41C68420FD4290312148BF10644C08D22F04191382F40B
+          41C68420FD4290312148BF10644C08D22F04191382F40B41C68420FD42903121
+          48BF10644C08D22F04191382F40B41C68420FD4290312148BF10644C08D22F04
+          191382F40B41C68420FD4290312148BF10644C08D22F04191382F40B41C68420
+          FD4290312148BF10644C08D22F04191382F40B41C68420FD4290312148BF1064
+          4C08D22F04191382F40B41C68420FD4290312148BF10644C08D22F04191382F4
+          0B41C68420FD429031D50D12FC4290694290998520D38420330B41A609416616
+          8204480141822A0812544190A00A8204551024A8822041150409AA2048500541
+          822A0812544190A00A8204551024A8822041150409AA2048500541822A081254
+          4190A00A8204551024A8822041150409AA2048500541822A0812544190A00A82
+          04551024A8822041150409AA2048500541822A0812544190A00A8204551024A8
+          822041150409AA2048500541822A0812544190A00A8204551024A88220411504
+          09AA2048500541822A0812544190A00A8204551024A8822041150409AA204850
+          0541822A0812544190A00A8204551024A8822041150409AA2048500541822A08
+          12544190A00A8204551024A8822041150409AA2048500541822A0812544190A0
+          0A8204551024A8822041150409AA2048500541822A0812544190A00A82045510
+          24A8822041150409AA2048500541822A0812544190A00A820455FE0EFF72D649
+          7188BC220000000049454E44AE426082}
         Stretch = True
       end
       object WelcomeLabel1: TNewStaticText
@@ -1780,59 +1110,43 @@ object WizardForm: TWizardForm
           Height = 55
           Anchors = [akTop, akRight]
           Picture.Data = {
-            07544269746D61707A060000424D7A0600000000000076000000280000003700
-            0000370000000100040000000000040600000000000000000000100000001000
-            0000000000008400000084848400C6C6C600FFFFFF00FFFFFF00FFFFFF00FFFF
-            FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
-            FF00444444444444444444444444444444444444444444444444444444404444
-            4444444444444444444444444444444444444444444444444440444444444444
-            4444444444444444444444444444444444444444444044444444444444444444
-            4444444444444444444444444444444444404444444444444443333333444444
-            4444444444444444444444444440444444444444443333333333333444444444
-            4444444444444444444044444444444444334444433333333333444444444444
-            4444444444404444444444433333444444444433333333333444444444444444
-            4440444444444433333344444444444444433333333334444444444444404444
-            4444443334334444444444444444444433333334444444444440444444444433
-            4433444444444444444444444444433444444444444044444444443344334444
-            4444444444444444444443344444444444404444444444334433444444444444
-            4444444444444334444444444440444444444433443344444444444444444444
-            4444433444444444444044444444443344334444444444444444444444444334
-            4444444444404444444444334433444444444444444444444444433444444444
-            4440444444444433443344444444444444444444444443344444444444404444
-            4444443344334444444444444444444444444334444444444440444444444433
-            4433444444444444444444444444433444444444444044444444443344334444
-            4444444443444444444443344444444444404444444444334433444444444444
-            4334444444444334444444444440444444444433443344444444333443344434
-            4444433444444444444044444444443344334444444433344334433344444334
-            4444444444404444444444334433444444444333433433344444433444444444
-            4440444444444433443344444444443333333344444443344444444444404444
-            4444443344334444444344433333334444444334444444444440444444444433
-            4433444444333333333334444444433444444444444044444444443344334444
-            4443333333333334444443344444444444404444444444334433444444444443
-            3333333334444334444444444440444444444433443344444444443333333333
-            4444433444444444444044444444443344334444444443333333344444444334
-            4444444444404444444444334433444444443333433333444444433444444444
-            4440444444444433443344444444333443343334444443344444444444404444
-            4444443344334444444443444334433444444334444444444440444444444433
-            4433444444444444433444344444433444444444444044444444443344334444
-            4444444443344444444443344444444444404444444444334433444444444444
-            4444444444444334444444444440444444444433443344444444444444444444
-            4444433444444444444044444444443344334444444444444444444444444334
-            4444444444404444444444334433444444444444444444444334433444444444
-            4440444444444433443344444444444444444444333333344444444444404444
-            4444443344334444444444444444444433333334444444444440444444444433
-            4433344444444444444444443344333444444444444044444444443344333333
-            3444444444444444334443344444444444404444444444334443333333333444
-            4444444433443344444444444440444444444433444444443333333333444444
-            3343334444444444444044444444443334444444444433333333333433333444
-            4444444444404444444444333333334444444444433333333333444444444444
-            4440444444444444333333333344444444443333333444444444444444404444
-            4444444444444333333333344444334334444444444444444440444444444444
-            4444444443333333333333433444444444444444444044444444444444444444
-            4444443333333333444444444444444444404444444444444444444444444444
-            4433333444444444444444444440444444444444444444444444444444444444
-            4444444444444444444044444444444444444444444444444444444444444444
-            444444444440}
+            0954506E67496D61676589504E470D0A1A0A0000000D49484452000000370000
+            003708030000009F052274000000017352474200AECE1CE90000000467414D41
+            0000B18F0BFC6105000001D7504C5445FFFFFFFAE7D6F1AE76F8DAC1EFA464F7
+            D3B4EEA05EFEFDFBF6CBA7EE9D58FEFCFAEFA364F4C39AED9952FEFBF9F2B684
+            F7D0AFE4F0F890C4E391C4E4A4CEE8FEFEFEFAE6D5EC9043F8DAC0F3BB8DED94
+            4CFDF3ECEFA160F1B0799CCAE62289C8228AC886BEE1F8D8BEEA8733F5C8A2F2
+            B47FEC9145FAE5D4EC9246EEA05FFEFBF8FAFCFCFDFDFDFCFCFC8FC3E3228AC9
+            86BFE1F5C79FEB852FF0AC72EB8F40F7D2B3EA8937EC944AFEFEFD82BBDF238A
+            C987BFE1EA842FEFA669EE9E5AEB8A38EA8630EB8B3BFBEADB8FC2E2FBFCFC81
+            BBDF88C0E1EB8732F9DCC32289C9F7D2B2F5C9A4F4C196F3B988F0A86BEB8B39
+            F2B480F3BD8FF5C59DF6CDABF8D6B9F9DEC8FDF7F180BADF89C0E2EB8D3BEA89
+            35ED9951EFA15F7FBADE8AC0E2FDF6F0FBEDE1FAE5D3F2B683EB8E3FFBE9DAFC
+            F1E8FEFAF78AC1E2FAE4D2EB8B3AF1AD757DB9DE8BC1E2FCF0E7EC9144EB8C3B
+            F9DDC6F8DBC2F1AD73F4C0947DB8DE8DC2E2FDF9F5EE9B56EC954BFBEADCF4BE
+            91EA85317CB8DEFEFDFCF0AA6FFDF4ECF2B37EFCF1E7FAE2CE8EC2E23493CDF1
+            AF78F3BB8CFDF8F4F9E0CAED974FFCEFE490C3E3238AC8F6D0AFF4C399EA8632
+            FBEDE0F9DFC9F6CAA6EB8D3EFCF0E5F7D1B1FCFDFE64ADD9D8EAF5F8FBFC90C3
+            E259A7D658A7D6976A4558000000097048597300000EC300000EC301C76FA864
+            0000023B4944415478DAED955F48145118C5BFB3195B52B622B377B6720343B6
+            C8AC5516F62522AD207A0BEAD5D7A82C7A11A4D422B08528A296A27A3302699F
+            9308AD087A8B5628F641D6226A4B19849642CBFE8CDF9D3F8BE9CCB8CE4B44FB
+            71B9C3CCE577CFB9E75EEE80FC15FE2A07FCF6C5ADC04F5FDC4ACC2E930B7E97
+            FD2ACC186FD5D36572C1AA699D1F6BF085FB1AE0732DA083F85B009A975E1898
+            208AE023D106E09B16B506A007DE7AAEAF01C85323C6280620B74DCAE9922A86
+            50D03C388A63FCC756BC48001F0AC9AF54E2D603CFBD38252458698CE51E9342
+            C21A0AE7D943EC91D73E54CF3673900A1EDA1309436FAD8AAA5F59CD81836861
+            A5D1F89346E6EA1FECA88751F7156170A4D6BD8F0E3A70ADB9E6864F7F1C94E8
+            C85E0C4F28AAF459432422CF760F38FB4CCA1847592F5ED808DC36BE35993EB9
+            5723E3DB6FB9ADEFE8CBA9FDAF62D96446AE4521231A8B2335966D493B739D2C
+            78279EC0D33D97CD48AC7D3038889D9923979CB82EC62EB6AEDEF2BA0DD9214E
+            C43E47727DB244F2EE7CD01EEFC19BCDE7E9DCF0BE3E0A75D4F5CA282DBD75A4
+            68B21D4666577A111739712F47D43F74B09B28057429AAC9756084DAED967BB7
+            900BF6A7641A57709A13D1AEE294DC838515CE2FE2ACBA864E4E7F92A768B27C
+            CE6F81A21B97684F4962924A7996C7A9C51927834BFA4CE3B84CD29CBE7CBD1B
+            C7F8A0F8D0BB099C15B47CBD036D033AF9E0369DB94E1EE5EAD3AF5EC567C567
+            C5E77FE4F3D0205FF1E6EF47D1EC67A99DBCE0E6939628B7FBBAFCFA57B83987
+            B69D473A0117C30000000049454E44AE426082}
           Stretch = True
         end
         object PageNameLabel: TNewStaticText

+ 35 - 29
Projects/Compile.pas

@@ -31,7 +31,7 @@ type
 implementation
 
 uses
-  CompPreprocInt, Commctrl, Consts, Classes, IniFiles, TypInfo, AnsiStrings, Math,
+  CompPreprocInt, Commctrl, Consts, Classes, IniFiles, TypInfo, AnsiStrings, Math, Generics.Collections,
   PathFunc, CmnFunc2, Struct, Int64Em, CompMsgs, SetupEnt,
   FileClass, Compress, CompressZlib, bzlib, LZMA, ArcFour, SHA1,
   MsgIDs, SetupSectionDirectives, LangOptionsSectionDirectives, DebugStruct, VerInfo, ResUpdate, CompExeUpdate,
@@ -358,7 +358,8 @@ type
     procedure WriteDebugEntry(Kind: TDebugEntryKind; Index: Integer; StepOutMarker: Boolean = False);
     procedure WriteCompiledCodeText(const CompiledCodeText: Ansistring);
     procedure WriteCompiledCodeDebugInfo(const CompiledCodeDebugInfo: AnsiString);
-    function CreateMemoryStreamsFromFiles(const ADirectiveName, AFiles: String): TList;
+    function CreateMemoryStreamsFromFiles(const ADirectiveName, AFiles: String): TObjectList<TCustomMemoryStream>;
+    function CreateMemoryStreamsFromResources(const AResourceNamesPrefixes, AResourceNamesPostfixes: array of String): TObjectList<TCustomMemoryStream>;
   public
     AppData: Longint;
     CallbackProc: TCompilerCallbackProc;
@@ -571,7 +572,7 @@ begin
   until (Result <> '') or (S = '');
 end;
 
-function TSetupCompiler.CreateMemoryStreamsFromFiles(const ADirectiveName, AFiles: String): TList;
+function TSetupCompiler.CreateMemoryStreamsFromFiles(const ADirectiveName, AFiles: String): TObjectList<TCustomMemoryStream>;
 
   procedure AddFile(const Filename: String);
   begin
@@ -586,7 +587,7 @@ var
   H: THandle;
   FindData: TWin32FindData;
 begin
-  Result := TList.Create;
+  Result := TObjectList<TCustomMemoryStream>.Create;
   try
     { In older versions only one file could be listed and comma's could be used so
       before treating AFiles as a list, first check if it's actually a single file
@@ -623,8 +624,21 @@ begin
       end;
     end;
   except
-    for I := Result.Count-1 downto 0 do
-      TMemoryStream(Result[I]).Free;
+    Result.Free;
+    raise;
+  end;
+end;
+
+function TSetupCompiler.CreateMemoryStreamsFromResources(const AResourceNamesPrefixes, AResourceNamesPostfixes: array of String): TObjectList<TCustomMemoryStream>;
+var
+  I, J: Integer;
+begin
+  Result := TObjectList<TCustomMemoryStream>.Create;
+  try
+    for I := 0 to Length(AResourceNamesPrefixes)-1 do
+      for J := 0 to Length(AResourceNamesPostfixes)-1 do
+        Result.Add(TResourceStream.Create(HInstance, AResourceNamesPrefixes[I]+AResourceNamesPostfixes[J], RT_RCDATA));
+  except
     Result.Free;
     raise;
   end;
@@ -4221,16 +4235,12 @@ begin
         SetSetupHeaderOption(shWizardImageStretch);
       end;
     ssWizardImageFile: begin
-        if Value = '' then
-          Invalid;
         WizardImageFile := Value;
       end;
     ssWizardResizable: begin
         SetSetupHeaderOption(shWizardResizable);
       end;
     ssWizardSmallImageFile: begin
-        if Value = '' then
-          Invalid;
         WizardSmallImageFile := Value;
       end;
     ssWizardSizePercent: begin
@@ -7673,8 +7683,7 @@ var
   SetupFile: TFile;
   ExeFile: TFile;
   LicenseText, InfoBeforeText, InfoAfterText: AnsiString;
-  WizardImages: TList;
-  WizardSmallImages: TList;
+  WizardImages, WizardSmallImages: TObjectList<TCustomMemoryStream>;
   DecompressorDLL, DecryptionDLL: TMemoryStream;
 
   SetupLdrOffsetTable: TSetupLdrOffsetTable;
@@ -7682,7 +7691,7 @@ var
 
   function WriteSetup0(const F: TFile): Longint;
 
-    procedure WriteStream(Stream: TMemoryStream; W: TCompressedBlockWriter);
+    procedure WriteStream(Stream: TCustomMemoryStream; W: TCompressedBlockWriter);
     var
       Size: Longint;
     begin
@@ -8224,7 +8233,8 @@ var
       if SetupIconFilename <> '' then begin
         AddStatus(Format(SCompilerStatusUpdatingIcons, ['SETUP.E32']));
         LineNumber := SetupDirectiveLines[ssSetupIconFile];
-        UpdateIcons(ConvertFileName, PrependSourceDirName(SetupIconFilename));
+        { This also deletes the UninstallImage resource. Removing it makes UninstallProgressForm use the custom icon instead. }
+        UpdateIcons(ConvertFileName, PrependSourceDirName(SetupIconFilename), True);
         LineNumber := 0;
       end;
       AddStatus(Format(SCompilerStatusUpdatingVersionInfo, ['SETUP.E32']));
@@ -8460,8 +8470,6 @@ begin
     SetupHeader.ChangesEnvironment := 'no';
     SetupHeader.ChangesAssociations := 'no';
     BackSolid := False;
-    WizardImageFile := 'compiler:WIZMODERNIMAGE.BMP';
-    WizardSmallImageFile := 'compiler:WIZMODERNSMALLIMAGE.BMP';
     DefaultDialogFontName := 'Tahoma';
     SignToolRetryCount := 2;
     SignToolRetryDelay := 500;
@@ -8712,10 +8720,16 @@ begin
     { Read wizard image }
     LineNumber := SetupDirectiveLines[ssWizardImageFile];
     AddStatus(Format(SCompilerStatusReadingFile, ['WizardImageFile']));
-    WizardImages := CreateMemoryStreamsFromFiles('WizardImageFile', WizardImageFile);
+    if WizardImageFile <> '' then
+      WizardImages := CreateMemoryStreamsFromFiles('WizardImageFile', WizardImageFile)
+    else
+      WizardImages := CreateMemoryStreamsFromResources(['WizardImage'], ['100', '150']);
     LineNumber := SetupDirectiveLines[ssWizardSmallImageFile];
     AddStatus(Format(SCompilerStatusReadingFile, ['WizardSmallImageFile']));
-    WizardSmallImages := CreateMemoryStreamsFromFiles('WizardSmallImageFile', WizardSmallImageFile);
+    if WizardSmallImageFile <> '' then
+      WizardSmallImages := CreateMemoryStreamsFromFiles('WizardSmallImage', WizardSmallImageFile)
+    else
+      WizardSmallImages := CreateMemoryStreamsFromResources(['WizardSmallImage'], ['100', '125', '150', '175', '200', '225', '250']);
     LineNumber := 0;
 
     { Prepare Setup executable & signed uninstaller data }
@@ -9004,7 +9018,7 @@ begin
             { update icons }
             AddStatus(Format(SCompilerStatusUpdatingIcons, ['SETUP.EXE']));
             LineNumber := SetupDirectiveLines[ssSetupIconFile];
-            UpdateIcons(ExeFilename, PrependSourceDirName(SetupIconFilename));
+            UpdateIcons(ExeFilename, PrependSourceDirName(SetupIconFilename), False);
             LineNumber := 0;
           end;
           SetupFile := TFile.Create(ExeFilename, fdOpenExisting, faReadWrite, fsNone);
@@ -9125,16 +9139,8 @@ begin
     DecryptionDLL.Free;
     DecompressorDLL.Free;
     SetupE32.Free;
-    if WizardSmallImages <> nil then begin
-      for I := WizardSmallImages.Count-1 downto 0 do
-        TStream(WizardSmallImages[I]).Free;
-      WizardSmallImages.Free;
-    end;
-    if WizardImages <> nil then begin
-      for I := WizardImages.Count-1 downto 0 do
-        TStream(WizardImages[I]).Free;
-      WizardImages.Free;
-    end;
+    WizardSmallImages.Free;
+    WizardImages.Free;
     FreeListItems(LanguageEntries, SetupLanguageEntryStrings, SetupLanguageEntryAnsiStrings);
     FreeListItems(CustomMessageEntries, SetupCustomMessageEntryStrings, SetupCustomMessageEntryAnsiStrings);
     FreeListItems(PermissionEntries, SetupPermissionEntryStrings, SetupPermissionEntryAnsiStrings);

+ 1 - 0
Projects/ISCmplr.dpr

@@ -37,6 +37,7 @@ uses
   VerInfo in 'VerInfo.pas';
 
 {$R *.RES}
+{$R IMAGES2.RES}
 
 function ISDllCompileScript(const Params: TCompileScriptParamsEx): Integer;
 stdcall;

BIN
Projects/Images.res


BIN
Projects/Images2.res


+ 1 - 1
Projects/NewDisk.dfm

@@ -22,7 +22,7 @@ object NewDiskForm: TNewDiskForm
   TextHeight = 13
   object DiskBitmapImage: TBitmapImage
     Left = 8
-    Top = 8
+    Top = 10
     Width = 48
     Height = 48
   end

+ 1 - 3
Projects/NewDisk.pas

@@ -80,9 +80,7 @@ begin
   OKButton.Caption := SetupMessages[msgButtonOK];
   CancelButton.Caption := SetupMessages[msgButtonCancel];
 
-  DiskBitmapImage.Bitmap.Handle := LoadBitmap(HInstance, 'DISKIMAGE');  {don't localize};
-  DiskBitmapImage.ReplaceColor := RGB(255, 0, 255);
-  DiskBitmapImage.ReplaceWithColor := Color;
+  DiskBitmapImage.InitializeFromIcon(HInstance, 'Z_DISKICON', Color, [48, 64]); {don't localize}
 
   TryEnableAutoCompleteFileSystem(PathEdit.Handle);
 

+ 3 - 2
Projects/ScriptFunc.pas

@@ -347,7 +347,7 @@ const
   );
 
   { Other }
-  OtherTable: array [0..32] of AnsiString =
+  OtherTable: array [0..33] of AnsiString =
   (
     'procedure BringToFrontAndRestore;',
     'function WizardDirValue: String;',
@@ -381,7 +381,8 @@ const
     'function GetUninstallProgressForm: TUninstallProgressForm;',
     'function CreateCallback(Method: AnyMethod): Longword;',
     'function IsDotNetInstalled(const MinVersion: TDotNetVersion; const MinServicePack: Cardinal): Boolean;',
-    'function IsMsiProductInstalled(const UpgradeCode: String; const PackedMinVersion: Int64): Boolean;'
+    'function IsMsiProductInstalled(const UpgradeCode: String; const PackedMinVersion: Int64): Boolean;',
+    'function InitializeBitmapImageFromIcon(const BitmapImage: TBitmapImage; const IconFilename: String; const BkColor: TColor; const AscendingTrySizes: TArrayOfInteger): Boolean;'
   );
 
 implementation

+ 12 - 3
Projects/ScriptFunc_R.pas

@@ -27,7 +27,7 @@ uses
   Struct, ScriptDlg, Main, PathFunc, CmnFunc, CmnFunc2, FileClass, RedirFunc,
   Install, InstFunc, InstFnc2, Msgs, MsgIDs, NewDisk, BrowseFunc, Wizard, VerInfo,
   SetupTypes, Int64Em, MD5, SHA1, Logging, SetupForm, RegDLL, Helper,
-  SpawnClient, UninstProgressForm, ASMInline, DotNet, Msi;
+  SpawnClient, UninstProgressForm, ASMInline, DotNet, Msi, BitmapImage;
 
 var
   ScaleBaseUnitsInitialized: Boolean;
@@ -625,12 +625,12 @@ begin
     CrackCodeRootKey(Stack.GetInt(PStart-1), RegView, RootKey);
     Arr := NewTPSVariantIFC(Stack[PStart-3], True);
     Stack.SetBool(PStart, GetSubkeyOrValueNames(RegView, RootKey,
-    Stack.GetString(PStart-2), @Arr, True));
+      Stack.GetString(PStart-2), @Arr, True));
   end else if Proc.Name = 'REGGETVALUENAMES' then begin
     CrackCodeRootKey(Stack.GetInt(PStart-1), RegView, RootKey);
     Arr := NewTPSVariantIFC(Stack[PStart-3], True);
     Stack.SetBool(PStart, GetSubkeyOrValueNames(RegView, RootKey,
-    Stack.GetString(PStart-2), @Arr, False));
+      Stack.GetString(PStart-2), @Arr, False));
   end else if Proc.Name = 'REGQUERYSTRINGVALUE' then begin
     CrackCodeRootKey(Stack.GetInt(PStart-1), RegView, RootKey);
     S := Stack.GetString(PStart-2);
@@ -1907,6 +1907,8 @@ var
   AnsiS: AnsiString;
   Arr: TPSVariantIFC;
   ErrorCode: Cardinal;
+  N, I: Integer;
+  AscendingTrySizes: array of Integer;
 begin
   PStart := Stack.Count-1;
   Result := True;
@@ -2045,6 +2047,13 @@ begin
     Stack.SetBool(PStart, IsMsiProductInstalled(Stack.GetString(PStart-1), Stack.GetInt64(PStart-2), ErrorCode));
     if ErrorCode <> 0 then
       raise Exception.Create(Win32ErrorString(ErrorCode));
+  end else if Proc.Name = 'INITIALIZEBITMAPIMAGEFROMICON' then begin
+    Arr := NewTPSVariantIFC(Stack[PStart-4], True);
+    N := PSDynArrayGetLength(Pointer(Arr.Dta^), Arr.aType);
+    SetLength(AscendingTrySizes, N);
+    for I := 0 to N-1 do
+      AscendingTrySizes[I] := VNGetInt(PSGetArrayField(Arr, I));
+    Stack.SetBool(PStart, TBitmapImage(Stack.GetClass(PStart-1)).InitializeFromIcon(0, PChar(Stack.GetString(PStart-2)), Stack.GetInt(PStart-3), AscendingTrySizes));
   end else
     Result := False;
 end;

+ 1 - 6
Projects/SelLangForm.pas

@@ -161,12 +161,7 @@ begin
   OKButton.Caption := SetupMessages[msgButtonOK];
   CancelButton.Caption := SetupMessages[msgButtonCancel];
 
-  IconBitmapImage.Bitmap.Canvas.Brush.Color := MainPanel.Color;
-  IconBitmapImage.Bitmap.Width := Application.Icon.Width;
-  IconBitmapImage.Bitmap.Height := Application.Icon.Height;
-  IconBitmapImage.Bitmap.Canvas.Draw(0, 0, Application.Icon);
-  IconBitmapImage.Width := IconBitmapImage.Bitmap.Width;
-  IconBitmapImage.Height := IconBitmapImage.Bitmap.Height;
+  IconBitmapImage.InitializeFromIcon(HInstance, 'MAINICON', MainPanel.Color, [32, 48, 64]);
 
   KeepSizeY := True;
 end;

BIN
Projects/Setup.res


BIN
Projects/SetupLdr.res


+ 2 - 2
Projects/Struct.pas

@@ -17,8 +17,8 @@ uses
 
 const
   SetupTitle = 'Inno Setup';
-  SetupVersion = '6.1.3';
-  SetupBinVersion = (6 shl 24) + (1 shl 16) + (3 shl 8) + 0;
+  SetupVersion = '6.2.0';
+  SetupBinVersion = (6 shl 24) + (2 shl 16) + (0 shl 8) + 0;
 
 type
   TSetupID = array[0..63] of AnsiChar;

+ 4 - 4
Projects/UninstProgressForm.dfm

@@ -108,10 +108,10 @@ object UninstallProgressForm: TUninstallProgressForm
           497
           58)
         object FWizardSmallBitmapImage: TBitmapImage
-          Left = 440
-          Top = 1
-          Width = 55
-          Height = 55
+          Left = 451
+          Top = 13
+          Width = 32
+          Height = 32
           Anchors = [akTop, akRight]
           BackColor = clWindow
           Center = True

+ 2 - 4
Projects/UninstProgressForm.pas

@@ -112,10 +112,8 @@ begin
 
   PageNameLabel.Font.Style := [fsBold];
   PageNameLabel.Caption := SetupMessages[msgWizardUninstalling];
-  WizardSmallBitmapImage.Bitmap.Canvas.Brush.Color := MainPanel.Color;
-  WizardSmallBitmapImage.Bitmap.Width := Application.Icon.Width;
-  WizardSmallBitmapImage.Bitmap.Height := Application.Icon.Height;
-  WizardSmallBitmapImage.Bitmap.Canvas.Draw(0, 0, Application.Icon);
+  if not WizardSmallBitmapImage.InitializeFromIcon(HInstance, 'Z_UNINSTALLICON', MainPanel.Color, [32, 48, 64]) then {don't localize}
+    WizardSmallBitmapImage.InitializeFromIcon(HInstance, 'MAINICON', MainPanel.Color, [32, 48, 64]); {don't localize}
   if SetupMessages[msgBeveledLabel] <> '' then begin
     BeveledLabel.Caption := ' ' + SetupMessages[msgBeveledLabel] + ' ';
     BeveledLabel.Visible := True;

+ 3 - 69
Projects/Wizard.pas

@@ -731,71 +731,6 @@ constructor TWizardForm.Create(AOwner: TComponent);
   using the FormCreate event, because if an exception is raised in FormCreate
   it's not propagated out. }
 
-  procedure LoadSelectDirAndGroupImages;
-
-    procedure IconToBitmapImage(const AIcon: HICON; const Ctl: TBitmapImage; const BkColor: TColor);
-    begin
-      if AIcon <> 0 then begin
-        try
-          with Ctl.Bitmap do begin
-            Width := 32;
-            Height := 32;
-            Canvas.Brush.Color := BkColor;
-            Canvas.FillRect(Rect(0, 0, 32, 32));
-            DrawIconEx(Canvas.Handle, 0, 0, AIcon, 32, 32, 0, 0, DI_NORMAL);
-          end;
-        finally
-          DestroyIcon(AIcon);
-        end;
-      end;
-    end;
-
-  var
-    FileInfo: TSHFileInfo;
-    Path: String;
-  begin
-    { Set sizes (overrides any scaling) }
-    SelectDirBitmapImage.Width := 32;
-    SelectDirBitmapImage.Height := 32;
-    SelectGroupBitmapImage.Width := 32;
-    SelectGroupBitmapImage.Height := 32;
-
-    try
-      { We have to extract the icons ourself using ExtractIcon because the
-        icons SHGetFileInfo returns differ in size depending on whether
-        "Use large icons" is turned on, and we don't want that.
-        Note: We *could* avoid SHGetFileInfo altogether and pass 'shell32.dll'
-        and a hard-coded index directly to ExtractIcon, but I'm worried that
-        might not work in a future Windows version. }
-      if (SHGetFileInfo('c:\directory', FILE_ATTRIBUTE_DIRECTORY, FileInfo,
-          SizeOf(FileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICONLOCATION) <> 0) and
-         (FileInfo.szDisplayName[0] <> #0) then
-        IconToBitmapImage(ExtractIcon(HInstance, FileInfo.szDisplayName,
-          FileInfo.iIcon), SelectDirBitmapImage, SelectDirPage.Color);
-
-      if WindowsVersionAtLeast(6, 0) then begin
-        { On Windows Vista and 7, use the "Taskbar and Start Menu Properties"
-          icon as there is no longer a separate icon for Start Menu folders }
-        IconToBitmapImage(ExtractIcon(HInstance,
-          PChar(AddBackslash(WinSystemDir) + 'shell32.dll'), 39),
-          SelectGroupBitmapImage, SelectProgramGroupPage.Color);
-      end
-      else begin
-        Path := GetShellFolder(False, sfPrograms, False);
-        if Path = '' then
-          Path := GetShellFolder(True, sfPrograms, False);
-        if Path <> '' then begin
-          if (SHGetFileInfo(PChar(Path), 0, FileInfo, SizeOf(FileInfo),
-              SHGFI_ICONLOCATION) <> 0) and (FileInfo.szDisplayName[0] <> #0) then
-            IconToBitmapImage(ExtractIcon(HInstance, FileInfo.szDisplayName,
-              FileInfo.iIcon), SelectGroupBitmapImage, SelectProgramGroupPage.Color);
-        end;
-      end;
-    except
-      { ignore any exceptions }
-    end;
-  end;
-
   function SelectBestImage(WizardImages: TList; TargetWidth, TargetHeight: Integer): TBitmap;
   var
     TargetArea, Difference, SmallestDifference, I: Integer;
@@ -936,10 +871,9 @@ begin
   WizardBitmapImage2.Stretch := (shWizardImageStretch in SetupHeader.Options);
   WizardSmallBitmapImage.Bitmap := SelectBestImage(WizardSmallImages, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height);
   WizardSmallBitmapImage.Stretch := (shWizardImageStretch in SetupHeader.Options);
-  PreparingErrorBitmapImage.Bitmap.Handle := LoadBitmap(HInstance, 'STOPIMAGE');
-  PreparingErrorBitmapImage.ReplaceColor := RGB(255, 0, 255);
-  PreparingErrorBitmapImage.ReplaceWithColor := PreparingPage.Color;
-  LoadSelectDirAndGroupImages;
+  SelectDirBitmapImage.InitializeFromIcon(HInstance, 'Z_DIRICON', SelectDirPage.Color, [32, 48, 64]); {don't localize}
+  SelectGroupBitmapImage.InitializeFromIcon(HInstance, 'Z_GROUPICON', SelectProgramGroupPage.Color, [32, 48, 64]); {don't localize}
+  PreparingErrorBitmapImage.InitializeFromIcon(HInstance, 'Z_STOPICON', PreparingPage.Color, [16, 24, 32]); {don't localize}
 
   { Initialize wpWelcome page }
   RegisterExistingPage(wpWelcome, WelcomePage, nil, '', '');

+ 1 - 1
build.bat

@@ -19,7 +19,7 @@ rem  Once done the installer can be found in Output
 
 setlocal
 
-set VER=6.1.2
+set VER=6.2.0
 
 echo Building Inno Setup %VER%...
 echo.

+ 20 - 42
iscrypt.iss

@@ -2,8 +2,16 @@
 // Include file with support functions to download encryption support
 // Must be included before adding [Files] entries
 //
+#if FileExists('iscrypt-custom.ico')
+  #define iscryptico      'iscrypt-custom.ico'
+  #define iscrypticosizes '[32, 48, 64]'
+#else
+  #define iscryptico      'iscrypt.ico'
+  #define iscrypticosizes '[32]'
+#endif
+//
 [Files]
-Source: "iscrypt.ico"; Flags: dontcopy
+Source: "{#iscryptico}"; DestName: "iscrypt.ico"; Flags: dontcopy
 Source: "{tmp}\ISCrypt.dll"; DestDir: "{app}"; Flags: ignoreversion external skipifsourcedoesntexist touch
 
 [Code]
@@ -14,18 +22,6 @@ var
   ISCryptPage: TWizardPage;
   ISCryptCheckBox: TCheckBox;
 
-function GetModuleHandle(lpModuleName: LongInt): LongInt;
-external '[email protected] stdcall';
-function ExtractIcon(hInst: LongInt; lpszExeFileName: String; nIconIndex: LongInt): LongInt;
-external '[email protected] stdcall';
-function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
-external '[email protected] stdcall';
-function DestroyIcon(hIcon: LongInt): LongInt;
-external '[email protected] stdcall';
-
-const
-  DI_NORMAL = 3;
-  
 procedure CreateCustomOption(Page: TWizardPage; ACheckCaption: String; var CheckBox: TCheckBox; PreviousControl: TControl);
 begin
   CheckBox := TCheckBox.Create(Page);
@@ -43,41 +39,23 @@ function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconF
   ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage;
 var
   Page: TWizardPage;
-  Rect: TRect;
-  hIcon: LongInt;
+  BitmapImage: TBitmapImage;
   Label1, Label2: TNewStaticText;
 begin
   Page := CreateCustomPage(AAfterID, ACaption, ASubCaption);
   
-  try
-    AIconFileName := ExpandConstant('{tmp}\' + AIconFileName);
-    if not FileExists(AIconFileName) then
-      ExtractTemporaryFile(ExtractFileName(AIconFileName));
-
-    Rect.Left := 0;
-    Rect.Top := 0;
-    Rect.Right := 32;
-    Rect.Bottom := 32;
+  AIconFileName := ExpandConstant('{tmp}\' + AIconFileName);
+  if not FileExists(AIconFileName) then
+    ExtractTemporaryFile(ExtractFileName(AIconFileName));
 
-    hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 0);
-    try
-      with TBitmapImage.Create(Page) do begin
-        with Bitmap do begin
-          Width := 32;
-          Height := 32;
-          Canvas.Brush.Color := Page.SurfaceColor;
-          Canvas.FillRect(Rect);
-          DrawIconEx(Canvas.Handle, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL);
-        end;
-        Width := Bitmap.Width;
-        Height := Bitmap.Width;
-        Parent := Page.Surface;
-      end;
-    finally
-      DestroyIcon(hIcon);
-    end;
-  except
+  BitmapImage := TBitmapImage.Create(Page);
+  with BitmapImage do begin
+    Width := ScaleX(32);
+    Height := ScaleY(32);
+    Parent := Page.Surface;
   end;
+  
+  InitializeBitmapImageFromIcon(BitmapImage, AIconFileName, Page.SurfaceColor, {#iscrypticosizes});
 
   Label1 := TNewStaticText.Create(Page);
   with Label1 do begin

+ 2 - 3
setup.iss

@@ -15,7 +15,7 @@
 [Setup]
 AppName=Inno Setup
 AppId={code:GetAppId|Inno Setup 6}
-AppVersion=6.1.3
+AppVersion=6.2.0
 AppPublisher=jrsoftware.org
 AppPublisherURL=https://www.innosetup.com/
 AppSupportURL=https://www.innosetup.com/
@@ -37,8 +37,6 @@ LicenseFile=license.txt
 TimeStampsInUTC=yes
 TouchDate=none
 TouchTime=00:00
-WizardImageFile=compiler:WizModernImage-IS.bmp
-WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
 #ifdef SIGNTOOL
 SignTool=issigntool
 SignTool=issigntool256
@@ -126,6 +124,7 @@ Source: "files\Setup.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\SetupLdr.e32"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Default.isl"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\Languages\*.isl"; DestDir: "{app}\Languages"; Flags: ignoreversion touch
+Source: "files\SetupClassicIcon.ico"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\WizModernImage.bmp"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\WizModernImage-IS.bmp"; DestDir: "{app}"; Flags: ignoreversion touch
 Source: "files\WizModernSmallImage.bmp"; DestDir: "{app}"; Flags: ignoreversion touch

+ 26 - 144
whatsnew.htm

@@ -28,19 +28,39 @@ For conditions of distribution and use, see <a href="https://jrsoftware.org/file
 
 <p><b>Want to be notified by e-mail of new Inno Setup releases?</b> <a href="https://jrsoftware.org/ismail.php">Subscribe</a> to the Inno Setup Mailing List!</p>
 
-<p><a name="6.1.3"></a><span class="ver">6.1.3-dev </span><span class="date">(?)</span></p>
+<p><a name="6.2.0"></a><span class="ver">6.2.0-dev </span><span class="date">(?)</span></p>
+<p><span class="head2">QuickStart Pack removed</span></p>
 <ul>
   <li>The QuickStart Pack installer has been removed because of a lack of added value.</li>
   <li>The standard Inno Setup installer now offers to download encryption support if it's missing, like the QuickStart Pack installer did before.</li>
 </ul>
-</p>
-<p>
+<p><span class="head2">Inno Setup FAQ updated</span></p>
 <ul>
   <li>The content of the <a href="https://jrsoftware.org/isfaq.php">Inno Setup FAQ</a> is now <a href="https://github.com/jrsoftware/isfaq/blob/main/isfaq.html">available on GitHub</a> where you can suggest new entries or other improvements using the Edit button.</li>
   <li>The Inno Setup FAQ has been updated with updated versions of articles taken from the Inno Setup Knowledge Base which is now hidden from the website.</li>
 </ul>
-</p>
-<p>
+<p><span class="head2">Graphics modernized</span></p>
+<ul>
+  <li>Updated all Compiler IDE's toolbar icons and the wizard images used by the Compiler IDE's New Script Wizard wizard.</li>
+  <li>Updated the default application icon used by Setup and Uninstall if [Setup] section directive <tt>SetupIconFile</tt> is not set. To use the old icon again set <tt>SetupIconFile</tt> to <tt>compiler:SetupClassicIcon.ico</tt>.</li>
+  <li>[Setup] section directives <tt>WizardImageFile</tt> and <tt>WizardSmallImageFile</tt> now default to a blank value which makes Setup use new built-in wizard images.  To use the old wizard images again set <tt>WizardImageFile</tt> and <tt>WizardSmallImageFile</tt> to <tt>compiler:WizModernImage.bmp</tt> and <tt>compiler:WizModernSmallImage.bmp</tt> respectively.</li>
+  <li>Updated Uninstall's default small wizard image if [Setup] section directive <tt>SetupIconFile</tt> is not set. Before it would use Setup's default application icon in this case.</li>
+  <li>Updated the folder, group, and stop icons used by Setup's <i>Select Destination Location</i>, <i>Select Start Menu Folder</i>, and <i>Preparing to Install</i> wizard pages.</li>
+  <li>Updated the disk icon used by Setup's <i>Setup Needs the Next Disk</i> form.</li>
+  <li>Pascal Scripting change: Added new <tt>InitializeBitmapImageFromIcon</tt> support function.</li>
+</ul>
+<p>All these icon and images updates include the automatic use of higher quality versions (which were not available before) on higher DPI settings. This includes new automatic use of higher quality icons for the icon on Setup's <i>Select Setup Language</i> form and Uninstall's small wizard image if <tt>SetupIconFile</tt> is set.</p>
+<p>Example screenshots:</p>
+<ul>
+  <li>Setup wizard pages <a href="https://jrsoftware.org/images/is-welcome-org.png">Select Destination Location</a> and <a href="https://jrsoftware.org/images/is-finished-org.png">Setup Completed</a> at 100% DPI.</li>
+  <li>Setup wizard pages <a href="https://jrsoftware.org/images/is-welcome-org-175.png">Select Destination Location</a> and <a href="https://jrsoftware.org/images/is-finished-org-175.png">Setup Completed</a> at 175% DPI.</li>
+  <li>Compiler IDE themes <a href="https://jrsoftware.org/images/is-ide-org.png">Light</a> and <a href="https://jrsoftware.org/images/is-ide-dark-org.png">Dark</a> at 100% DPI.</li>
+</ul>
+<p>Comparison screenshots of the previous version:</p>
+<ul>
+  <li>Setup wizard pages <a href="https://jrsoftware.org/images/is-welcome-org-175-old.png">Select Destination Location</a> and <a href="https://jrsoftware.org/images/is-finished-org-175-old.png">Setup Completed</a> at 175% DPI in version 6.1.2.</li>
+</ul>
+<p><span class="head2">Other changes</span></p>
 <ul>
   <li>Links displayed by [Setup] section directives <tt>LicenseFile</tt>, <tt>InfoBeforeFile</tt> and <tt>InfoAfterFile</tt> are now executed as the original user if possible when clicked.</li>
   <li>Added new [Setup] section directives <tt>MissingMessagesWarning</tt> and <tt>NotRecognizedMessagesWarning</tt> to disable warnings about messages missing or not recognized for a language.</li>
@@ -65,145 +85,7 @@ For conditions of distribution and use, see <a href="https://jrsoftware.org/file
 
 <p>Contributions via <a href="https://github.com/jrsoftware/issrc" target="_blank">GitHub</a>: <b>Thanks to Sergii Leonov and Dom Gries for their contributions.</b></p>
 
-<p><a name="6.1.2"></a><span class="ver">6.1.2 </span><span class="date">(2020-11-15)</span></p>
-<ul>
-  <li>Compiler IDE change: Added new <i>Print... (Ctrl+P)</i> menu item to the <i>File</i> menu.</li>
-  <li>Minor tweaks.</li>
-</ul>
-
-<p><a name="6.1.1"></a><span class="ver">6.1.1-beta </span><span class="date">(2020-10-29)</span></p>
-<p><span class="head2">Compiler IDE updates</span></p>
-<p>Various improvements have been made to the Compiler IDE:</p>
-<ul>
-  <li>Added new <i>Find Previous (Shift+F3)</i> menu item to the <i>Edit</i> menu. The <i>Find Next (F3)</i> menu item now always searches down.</li>
-  <li>Added new <i>Find in Files... (Shift+Ctrl+F)</i> menu item to the <i>Edit</i> menu which shows the results in a <a href="https://i.imgur.com/WeX3T4b.png">new "Find Results" view</a>.</li>
-  <li>The Compiler IDE's New Script Wizard now offers <a href="https://i.imgur.com/IyJZTZY.png">an option to create a file assocation</a>.</li>
-  <li>Added autocomplete support for <a href="https://i.imgur.com/gz4hlV8.png">constants</a>, <a href="https://i.imgur.com/6q15Ik8.png">event functions</a>, <a href="https://i.imgur.com/PpWvzxg.png">flags</a>, <a href="https://i.imgur.com/TTbESLq.png">sections</a>, and <a href="https://i.imgur.com/YSbzJ5B.png">Inno Setup Preprocessor (ISPP) directives</a>.</li>
-</ul>
-<p><span class="head2">Other changes</span></p>
-<ul>
-  <li>The /PORTABLE=1 command line parameter accepted by Inno Setup's own installers has been improved to allow side-by-side installations. For example, to quickly install a new version to the current user's desktop without affecting already installed versions use the following command line parameters: <tt>/portable=1 /silent /currentuser</tt>.</li>
-  <li>Setup's and Uninstall's Back and Next buttons no longer display outdated &quot;<&quot; and &quot;>&quot;  markers.</li>
-  <li>Added new topic to the help file listing the additional <a href="https://jrsoftware.org/ishelp/index.php?topic=compformshortcuts">Compiler IDE keyboard commands</a> which are not listed in the menus. Added new <i>Keyboard Commands</i> menu item to the Compiler IDE's <i>Help</i> menu to open this topic.</li>
-  <li>ISPP change: Added new <tt>SaveStringToFile</tt> support function.</li>
-  <li><i>Fix:</i> Calling DLL functions which return a 64-bit integer now gives correct result values.</li>
-  <li>Minor tweaks.</li>
-</ul>
-
-<p>All official translations have now been updated for the changes in the previous version. Thanks to the maintainers for their time.</li>
-
-<p><a name="6.1.0"></a><span class="ver">6.1.0-beta </span><span class="date">(2020-09-13)</span></p>
-<p><span class="head2">Per-user fonts</span></p>
-<p>Per-user fonts are now supported if Setup is running on Windows 10 Version 1803 and later:</p>
-<ul>
-  <li>[Files] section parameter <tt>FontInstall</tt> can now be used in <a href="https://jrsoftware.org/ishelp/index.php?topic=admininstallmode">non administrative installs</a>. Requires Windows 10 Version 1803 or later to successfully install a font.</li>
-  <li>The <tt>{fonts}</tt> constant has been renamed to <tt>{commonfonts}</tt>.  The old name is still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't.</tt>
-  <li>Added new <tt>{userfonts}</tt> constant. Only Windows 10 Version 1803 and later supports <tt>{userfonts}</tt>. Same directory as <tt>{localappdata}\Microsoft\Windows\Fonts</tt>.</li>
-  <li>Added new <tt>{autofonts}</tt> constant which automatically maps to <tt>{commonfonts}</tt> unless the installation is running in non administrative install mode, in which case it maps to <tt>{userfonts}</tt>. It is recommended to update your scripts to use <tt>{autofonts}</tt> as much as possible to avoid mistakes.</li>
-  <li>Updated all examples to use <tt>{autofonts}</tt> instead of <tt>{fonts}</tt>.</li>
-  <li>Pascal Scripting change: The <tt>UnregisterFont</tt> support function now has an extra parameter.</li>
-</ul>
-<p><span class="head2">Compiler IDE updates</span></p>
-<p>Various improvements have been made to the Compiler IDE:</p>
-<ul>
-  <li>If the script uses Inno Setup Preprocessor (ISPP) functionality, the Compiler IDE now automatically <a href="https://i.imgur.com/IVI2nk3.png">shows the preprocessor output</a> in a tab so you can check it. This can be turned off in the options.</li>
-  <li>The Compiler IDE now automatically opens (up to 10) <tt>#include</tt> files in tabs which allow you to <a href="https://i.imgur.com/iDrhOSs.png">edit and debug</a> these files from within the Compiler IDE. The list of <tt>#include</tt> files is updated after opening a new main file and after each compilation. This can be turned off in the options. If the option is not turned off, a new <i>Save All</i> menu item is added to the <i>File</i> menu.</li>
-  <li>If <tt>#include</tt> files are modified since last compile, the script is now automatically re-compiled before running it. This works even if the option to automatically open <tt>#include</tt> files is turned off.</li>
-  <li>Added new <i>Next Tab</i> and <i>Previous Tab</i> menu items to the <i>View</i> menu.</li>
-  <li>Added new topic to the help file explaining the various <a href="https://jrsoftware.org/ishelp/index.php?topic=scriptdebug">integrated debugger menu items</a> in the <i>Run</i> menu which can be used to debug your [Code] section.</li>
-  <li><a href="https://i.imgur.com/wHoJ3FG.png">Improved highlighting</a> for the [CustomMessages] and [Messages] sections.</li>
-  <li>Added new <a href="https://i.imgur.com/c9wGM3M.png">MessageBox Designer</a> menu item to the <i>Tools</i> menu to design and insert <tt>MsgBox</tt> or <tt>TaskDialogMsgBox</tt> calls for the [Code] section.</li>
-  <li>Added new <i>Step Out</i> menu item to the <i>Run</i> menu to unpause Setup until it reaches the end of the current function, then pause it on the next line.</li>
-  <li>Added buttons to the Welcome dialog to <a href="https://jrsoftware.org/isdonate.php">Donate</a> to support Inno Setup (Thank you!) and to <a href="https://jrsoftware.org/ismail.php">Subscribe</a> to the Inno Setup Mailing List to be notified by e-mail of new Inno Setup releases.</li>
-  <li>The Run Parameters dialog now shows a list of most recently used parameters.</li>
-</ul>
-<p><span class="head2">Built-in download support for [Code]</span></p>
-<p>Pascal Scripting now supports downloading files and checking SHA-256 hashes:</p>
-<ul>
-  <li>Added new <tt>DownloadTemporaryFile</tt> support function to download files without using a third-party tool:
-  <ul>
-    <li>Supports HTTPS (but not expired or self-signed certificates) and HTTP.</li>
-    <li>Redirects are automatically followed and proxy settings are automatically used.</li>
-    <li>Safe to use from services unlike existing third-party tools.</li>
-    <li>Supports SHA-256 hash checking of the downloaded file.</li>
-    <li>Supports basic authentication.</li>
-  </ul>
-  </li>
-  <li>Added new <tt>CreateDownloadPage</tt> support function to easily <a href="https://i.imgur.com/deliPb8.png">show the download progress</a> to the user. See the new <i><a href="https://jrsoftware.github.io/issrc/Examples/CodeDownloadFiles.iss">CodeDownloadFiles.iss</a></i> example script for an example.</li>
-  <li>Added new <tt>DownloadTemporaryFileSize</tt> support function to get the size of a file without downloading it.</li>
-  <li>Added new <tt>GetSHA256OfFile</tt>, <tt>GetSHA256OfString</tt>, and <tt>GetSHA256OfUnicodeString</tt> support functions to calculate SHA-256 hashes.</li>
-  <li><b>Change in default behavior:</b> Setup no longer disables itself entirely while <tt>PrepareToInstall</tt> is running. Instead only the Cancel button is disabled.</li>
-</ul>
-<p><span class="head2">Inno Setup Preprocessor (ISPP) updates</span></p>
-<p>ISPP now uses 64-bit integers and has new functions to more easily compare version numbers:</p>
-<ul>
-  <li>ISPP's <tt>int</tt> type is now a signed 64-bit integer type.</tt>
-  <li>Support function <tt>FileSize</tt> now supports 64-bit file sizes.</li>
-  <li>Added new <tt>GetPackedVersion</tt>, <tt>PackVersionNumbers</tt>, <tt>PackVersionComponents</tt>, <tt>ComparePackedVersion</tt>, <tt>SamePackedVersion</tt>, <tt>UnpackVersionNumbers</tt>, <tt>UnpackVersionComponents</tt>, and <tt>VersionToStr</tt> support functions.</li>
-  <li>Support function <tt>GetFileVersion</tt> and <tt>ParseVersion</tt> have been renamed to <tt>GetVersionNumbersString</tt> and <tt>GetVersionComponents</tt> respectively. The old names are still supported, but it is recommended to update your scripts to the new names and the compiler will issue a warning if you don't.</li>
-</ul>
-<p>Similar Pascal Scripting changes have been done for [Code]:</p>
-<ul>
-  <li>Added new <tt>FileSize64</tt> support function.</li>
-  <li>Added new <tt>GetPackedVersion</tt>, <tt>PackVersionNumbers</tt>, <tt>PackVersionComponents</tt>, <tt>ComparePackedVersion</tt>, <tt>SamePackedVersion</tt>, <tt>UnpackVersionNumbers</tt>, <tt>UnpackVersionComponents</tt>, <tt>GetVersionComponents</tt>, and <tt>VersionToStr</tt> support functions. This makes ISPP and [Code] support the same list of version related functions.</li>
-</ul>
-<p><span class="head2">Other changes</span></p>
-<ul>
-  <li><i>Fix:</i> Inno Setup 6.0.5 no longer supported Windows Vista.</li>
-  <li><b>Change in default behavior:</b> [Setup] section directive <tt>MinVersion</tt> now defaults to <tt>6.1sp1</tt>, so by default Setup will not run on Windows Vista or on versions of Windows 7 and Windows Server 2008 R2 which have not been updated. Setting <tt>MinVersion</tt> to <tt>6.0</tt> to allow Setup to run on Windows Vista is supported but not recommended: Windows Vista doesn't support some of Setup's security measures against potential DLL preloading attacks so these have to be removed by the compiler if <tt>MinVersion</tt> is below <tt>6.1</tt> making your installer less secure on all versions of Windows.</li>
-  <li>Inno Setup's version number doesn't display &quot;(u)&quot; at the end anymore since the Unicode version has been the only version for quite some time now.</li>
-  <li>Added new [Run] and [UninstallRun] sections flag: <tt>dontlogparameters</tt>. If this flag is specified, the command line parameters for the program will not be included in the log file.</li>
-  <li>If there are [UninstallRun] section entries without a <tt>RunOnceId</tt> parameter the compiler will now warn you about this. By assigning a string to <tt>RunOnceId</tt>, you can ensure that a particular [UninstallRun] entry will only be executed once during uninstallation. The warning can be disabled using new [Setup] section directive <tt>MissingRunOnceIdsWarning</tt>.</li>
-  <li>Added new [Icons] section parameter: <tt>AppUserModelToastActivatorCLSID</tt>. Specifies the Windows 10 Application User Model Toast Activator CLSID for the shortcut. Ignored on earlier Windows versions.</li>
-  <li>Setup's prompts to overwrite or keep existing files have been made more user friendly:
-  <ul>
-    <li>Setup now shows <a href="https://i.imgur.com/AnF6qo8.png">more user friendly prompts</a> to overwrite or keep existing files if the <tt>confirmoverwrite</tt> flag is set.</li>
-    <li>Setup now shows <a href="https://i.imgur.com/VBDuZ7U.png">more user friendly prompts</a> to keep or overwrite existing files if the <tt>promptifolder</tt> flag is set.</li>
-  </ul>
-  </li>
-  <li>Console-mode compiler (ISCC) change: Warnings and errors are now <a href="https://i.imgur.com/9VvbFGJ.png">colorized</a>.</li>
-  <li>Pascal Scripting changes:
-  <ul>
-    <li>Added new <tt>CalculateButtonWidth</tt> function to the <tt>TSetupForm</tt> support class.</li>
-    <li>The <tt>ACaption</tt> and <tt>ADescription</tt> parameters of the various <tt>Create...Page</tt> support functions may now specify Setup messages containing shorthands like <tt>[name]</tt>.</li>
-    <li><i>Fix:</i> Support function <tt>WizardSelectComponents</tt> now also updates component sizes and the current selection's required disk space.</li>
-  </ul>
-  </li>
-  <li>ISPP changes:
-  <ul>
-    <li>Using <tt>#pragma verboselevel</tt> now automatically turns on verbose mode.</li>
-    <li>Added new <tt>Message</tt>, <tt>Warning</tt>, and <tt>Error</tt> support functions.</li>
-    <li>ISPP's output is now cleaner and warnings are colorized.</li>
-  </ul>
-  <li>Various documentation improvements.</li>
-  <li>Minor tweaks.</li>
-</ul>
-
-<p>Contributions via <a href="https://github.com/jrsoftware/issrc" target="_blank">GitHub</a>: <b>Thanks to Gavin Lambert and Sergii Leonov for their contributions.</b></p>
-
-<p>Some messages have been added and changed in this version: (<a href="https://github.com/jrsoftware/issrc/commit/9e03ea4de5b8639937d2c4024ec8582a7e63b048">View differences in Default.isl</a>).</p>
-<ul>
-  <li><b>New messages:</b>
-  <ul>
-    <li>DownloadingLabel, ButtonStopDownload, StopDownload, ErrorDownloadAborted, ErrorDownloadFailed, ErrorDownloadSizeFailed, ErrorFileHash1, ErrorFileHash2, ErrorProgress, ErrorFileSize.</li>
-    <li>ExistingFileNewerSelectAction, ExistingFileNewer2, ExistingFileNewerOverwriteExisting, ExistingFileNewerKeepExisting, ExistingFileNewerOverwriteOrKeepAll.</li>
-    <li>FileExistsSelectAction, FileExists2, FileExistsOverwriteExisting, FileExistsKeepExisting, FileExistsOverwriteOrKeepAll.</li>
-  </ul>
-  </li>
-  <li><b>Previously optional messages which must now always be set:</b>
-  <ul>
-    <li>ComponentsDiskSpaceGBLabel, DiskSpaceGBLabel, PrepareToInstallNeedsRestart.</li>
-  </ul>
-  <li><b>Removed messages:</b>
-  <ul>
-    <li>ExistingFileNewer, FileExists.</li>
-  </ul>
-  </li>
-</ul>
-
-<p>Note: Not all official translations have been updated for these changes at this moment.</li>
-
-<p><a href="https://jrsoftware.org/files/is6.0-whatsnew.htm">Inno Setup 6.0 Revision History</a></p >
+<p><a href="https://jrsoftware.org/files/is6.1-whatsnew.htm">Inno Setup 6.1 Revision History</a></p >
 
 </body>
 </html>

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません