anchor.diff:          Buffers: array[0..31] of Pointer;
           Count: NativeUInt;
         end;
  +      AttainableTree: Boolean;
         HotPool: record
           First: TCPFNode;
           Last: TCPFNode;
  -        KnownPathNode: PCPFNode;
  +        LastLockedNode: PCPFNode;
  +      end;
  +      ExcludedPool: record
  +        First: TCPFNode;
  +        Last: TCPFNode;
         end;
         HeuristedPool: record
           First: TCPFNode;
  
positive.code:       TilesChanged: Boolean;
        SectorsChanged: Boolean;
        Sectors: PByte;
        FinishPoint: TPoint;
        PathlessFinishPoint: TPoint;
        ChangedFinishCount: Cardinal;
  
        Weights: record
          Current: PCPFWeightsInfo;
  
negative.code:         NativeInt(Self.Width) * StartPoint.Y + StartPoint.X)^) then
          goto path_not_found;
      end;
  
      // hot nodes
      if (FNodes.HotPool.First.Next <> @FNodes.HotPool.Last) then
        FlushHotPoolNodes;
  
      // allocate start node
      Node := AllocateHeuristedNode(StartPoint.X, StartPoint.Y);
      NodeInfo := Node.NodeInfo;
      StartPoint.Node := Node;
      if (NodeInfo and Integer($00ff0000) = 0{excluded test}) or
        (FActualInfo.Weights.Cardinals[NodeInfo shr 24] = PATHLESS_TILE_WEIGHT) then goto path_not_found;
      if (NodeInfo and FLAG_KNOWN_PATH <> 0) then
      begin
        StartPoint.KnownPathNode := Node;
  