prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  graph --table=file.html does not show outdated packages
  They were previously shown in colors. I guess adding a column "outdated" will resolve this issue.
  
  </issue>
  <code>
  [start of conans/assets/templates/search_table_html.py]
  1 
  2 content = """
  3 <!DOCTYPE html>
  4 <html lang="en">
  5     <head>
  6         <title>Conan | {{ search.reference }}</title>
  7         <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
  8         <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap.min.css"/>
  9         <style>
  10             tr td {
  11                 white-space:nowrap;
  12             }
  13         </style>
  14     </head>
  15     <body>
  16         <div class="container-fluid">
  17         <h1>{{ search.reference }}</h1>
  18         <div class="info">
  19             <p>
  20                 Depending on your package_id_mode, any combination of settings, options and requirements
  21                 can give you a different packageID. Take into account that your configuration might be
  22                 different from the one used to generate the packages.
  23             </p>
  24         </div>
  25 
  26         <table id="results" class="table table-striped table-bordered" style="width:100%">
  27             <thead>
  28                 {%- set headers = results.get_headers(keys=['remote', 'package_id']) %}
  29                 {%- set headers2rows = headers.row(n_rows=2) %}
  30                 <tr>
  31                     {%- for category, subheaders in headers2rows %}
  32                         <th class="text-center" rowspan="{% if subheaders|length == 1 and not subheaders[0] %}2{% else %}1{% endif %}" colspan="{{ subheaders|length }}">
  33                             {{ category }}
  34                         </th>
  35                     {%- endfor %}
  36                 </tr>
  37                 <tr>
  38                     {%- for category, subheaders in headers2rows %}
  39                         {%- if subheaders|length != 1 or subheaders[0] != '' %}
  40                             {%- for subheader in subheaders %}
  41                                 <th>{{ subheader|default(category, true) }}</th>
  42                             {%- endfor %}
  43                         {%- endif %}
  44                     {%- endfor %}
  45                 </tr>
  46             </thead>
  47             <tbody>
  48                 {%- for package in results.packages() %}
  49                     <tr>
  50                         {%- for item in package.row(headers) %}
  51                             <td>{{ item if item != None else ''}}</td>
  52                         {%- endfor %}
  53                     </tr>
  54                 {%- endfor %}
  55             </tbody>
  56             <tfoot>
  57                 <tr>
  58                     {%- for header in headers.row(n_rows=1) %}
  59                     <th>{{ header }}</th>
  60                     {%- endfor %}
  61                 </tr>
  62             </tfoot>
  63         </table>
  64 
  65         <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
  66         <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.20/datatables.min.js"></script>
  67         <script type="text/javascript" src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap.min.js"></script>
  68         <script>
  69             $(document).ready(function() {
  70                 // Setup - add a text input to each footer cell
  71                 $('#results tfoot th').each( function () {
  72                     var title = $(this).text();
  73                     $(this).html( '<input type="text" class="form-control filter-input" placeholder="Filter '+title+'" style="width:100%"/>' );
  74                 });
  75 
  76                 var table = $('#results').DataTable( {
  77                     "dom": "lrtip",
  78                     "lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]],
  79                     "pageLength": 10,
  80                     "columnDefs": [
  81                         { className: "cell_border_right", "targets": [ {{ headers.keys|length + headers.settings|length -1 }}, {{ headers.keys|length + headers.settings|length + headers.options|length -1 }}  ] },
  82                         { className: "cell_border_right monospaced", "targets": [{{ headers.keys|length -1 }}, ]}
  83                     ]
  84                 });
  85 
  86                 // Apply the search
  87                 table.columns().every( function () {
  88                     var that = this;
  89 
  90                     $( 'input', this.footer() ).on( 'keyup change clear', function () {
  91                         if ( that.search() !== this.value ) {
  92                             that
  93                                 .search( this.value )
  94                                 .draw();
  95                         }
  96                     } );
  97                 } );
  98             });
  99         </script>
  100     </div>
  101     </body>
  102 </html>
  103 """
  104
  [end of conans/assets/templates/search_table_html.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/conans/assets/templates/search_table_html.py b/conans/assets/templates/search_table_html.py
  --- a/conans/assets/templates/search_table_html.py
  +++ b/conans/assets/templates/search_table_html.py
  @@ -25,7 +25,7 @@
   
           <table id="results" class="table table-striped table-bordered" style="width:100%">
               <thead>
  -                {%- set headers = results.get_headers(keys=['remote', 'package_id']) %}
  +                {%- set headers = results.get_headers(keys=['remote', 'package_id', 'outdated']) %}
                   {%- set headers2rows = headers.row(n_rows=2) %}
                   <tr>
                       {%- for category, subheaders in headers2rows %}
  
verification_info: {"golden_diff": "diff --git a/conans/assets/templates/search_table_html.py b/conans/assets/templates/search_table_html.py\n--- a/conans/assets/templates/search_table_html.py\n+++ b/conans/assets/templates/search_table_html.py\n@@ -25,7 +25,7 @@\n \n         <table id=\"results\" class=\"table table-striped table-bordered\" style=\"width:100%\">\n             <thead>\n-                {%- set headers = results.get_headers(keys=['remote', 'package_id']) %}\n+                {%- set headers = results.get_headers(keys=['remote', 'package_id', 'outdated']) %}\n                 {%- set headers2rows = headers.row(n_rows=2) %}\n                 <tr>\n                     {%- for category, subheaders in headers2rows %}\n", "issue": "graph --table=file.html does not show outdated packages\nThey were previously shown in colors. I guess adding a column \"outdated\" will resolve this issue.\n", "before_files": [{"content": "\ncontent = \"\"\"\n<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <title>Conan | {{ search.reference }}</title>\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\"/>\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap.min.css\"/>\n        <style>\n            tr td {\n                white-space:nowrap;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container-fluid\">\n        <h1>{{ search.reference }}</h1>\n        <div class=\"info\">\n            <p>\n                Depending on your package_id_mode, any combination of settings, options and requirements\n                can give you a different packageID. Take into account that your configuration might be\n                different from the one used to generate the packages.\n            </p>\n        </div>\n\n        <table id=\"results\" class=\"table table-striped table-bordered\" style=\"width:100%\">\n            <thead>\n                {%- set headers = results.get_headers(keys=['remote', 'package_id']) %}\n                {%- set headers2rows = headers.row(n_rows=2) %}\n                <tr>\n                    {%- for category, subheaders in headers2rows %}\n                        <th class=\"text-center\" rowspan=\"{% if subheaders|length == 1 and not subheaders[0] %}2{% else %}1{% endif %}\" colspan=\"{{ subheaders|length }}\">\n                            {{ category }}\n                        </th>\n                    {%- endfor %}\n                </tr>\n                <tr>\n                    {%- for category, subheaders in headers2rows %}\n                        {%- if subheaders|length != 1 or subheaders[0] != '' %}\n                            {%- for subheader in subheaders %}\n                                <th>{{ subheader|default(category, true) }}</th>\n                            {%- endfor %}\n                        {%- endif %}\n                    {%- endfor %}\n                </tr>\n            </thead>\n            <tbody>\n                {%- for package in results.packages() %}\n                    <tr>\n                        {%- for item in package.row(headers) %}\n                            <td>{{ item if item != None else ''}}</td>\n                        {%- endfor %}\n                    </tr>\n                {%- endfor %}\n            </tbody>\n            <tfoot>\n                <tr>\n                    {%- for header in headers.row(n_rows=1) %}\n                    <th>{{ header }}</th>\n                    {%- endfor %}\n                </tr>\n            </tfoot>\n        </table>\n\n        <script type=\"text/javascript\" src=\"https://code.jquery.com/jquery-3.3.1.js\"></script>\n        <script type=\"text/javascript\" src=\"https://cdn.datatables.net/v/dt/dt-1.10.20/datatables.min.js\"></script>\n        <script type=\"text/javascript\" src=\"https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap.min.js\"></script>\n        <script>\n            $(document).ready(function() {\n                // Setup - add a text input to each footer cell\n                $('#results tfoot th').each( function () {\n                    var title = $(this).text();\n                    $(this).html( '<input type=\"text\" class=\"form-control filter-input\" placeholder=\"Filter '+title+'\" style=\"width:100%\"/>' );\n                });\n\n                var table = $('#results').DataTable( {\n                    \"dom\": \"lrtip\",\n                    \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]],\n                    \"pageLength\": 10,\n                    \"columnDefs\": [\n                        { className: \"cell_border_right\", \"targets\": [ {{ headers.keys|length + headers.settings|length -1 }}, {{ headers.keys|length + headers.settings|length + headers.options|length -1 }}  ] },\n                        { className: \"cell_border_right monospaced\", \"targets\": [{{ headers.keys|length -1 }}, ]}\n                    ]\n                });\n\n                // Apply the search\n                table.columns().every( function () {\n                    var that = this;\n\n                    $( 'input', this.footer() ).on( 'keyup change clear', function () {\n                        if ( that.search() !== this.value ) {\n                            that\n                                .search( this.value )\n                                .draw();\n                        }\n                    } );\n                } );\n            });\n        </script>\n    </div>\n    </body>\n</html>\n\"\"\"\n", "path": "conans/assets/templates/search_table_html.py"}]}