Treffer: PyVRP: a high-performance VRP solver package
Weitere Informationen
We introduce PyVRP, a Python package that implements hybrid genetic search in a state-of-the-art vehicle routing problem (VRP) solver. The package is designed for the VRP with time windows (VRPTW), but can be easily extended to support other VRP variants. PyVRP combines the flexibility of Python with the performance of C++, by implementing (only) performance critical parts of the algorithm in C++, while being fully customisable at the Python level. PyVRP is a polished implementation of the algorithm that ranked 1st in the 2021 DIMACS VRPTW challenge and, after improvements, ranked 1st on the static variant of the EURO meets NeurIPS 2022 vehicle routing competition. The code follows good software engineering practices, and is well-documented and unit tested. PyVRP is freely available under the liberal MIT license. Through numerical experiments we show that PyVRP achieves state-of-the-art results on the VRPTW and capacitated VRP. We hope that PyVRP enables researchers and practitioners to easily and quickly build on a state-of-the-art VRP solver.
Comment: Pre-print of accepted paper in INFORMS Journal on Computing. 24 pages, 1 figure, 2 listings
AN0179391267;7ee01jul.24;2024Sep04.05:01;v2.2.500
PyVRP: A High-Performance VRP Solver Package
We introduce PyVRP, a Python package that implements hybrid genetic search in a state-of-the-art vehicle routing problem (VRP) solver. The package is designed for the VRP with time windows (VRPTW) but can be easily extended to support other VRP variants. PyVRP combines the flexibility of Python with the performance of C++ by implementing (only) performance-critical parts of the algorithm in C++ while being fully customizable at the Python level. PyVRP is a polished implementation of the algorithm that ranked first in the 2021 DIMACS VRPTW challenge and, after improvements, ranked first on the static variant of the EURO meets NeurIPS 2022 vehicle routing competition. The code follows good software engineering practices and is well documented and unit tested. PyVRP is freely available under the liberal MIT license. Through numerical experiments, we show that PyVRP achieves state-of-the-art results on the VRPTW and capacitated VRP. We hope that PyVRP enables researchers and practitioners to easily and quickly build on a state-of-the-art VRP solver. History: Accepted by Ted Ralphs, Area Editor for Software Tools. This paper has been accepted for the INFORMS Journal on Computing Special Issue on Software Tools for Vehicle Routing. Funding: Funding was provided by TKI Dinalog, Topsector Logistics, and the Dutch Ministry of Economic Affairs and Climate Policy. Supplemental Material: The software that supports the findings of this study is available within the paper and its Supplemental Information (https://pubsonline.informs.org/doi/suppl/10.1287/ijoc.2023.0055) as well as from the IJOC GitHub software repository (https://github.com/INFORMSJoC/2023.0055). The complete IJOC Software and Data Repository is available at https://informsjoc.github.io/. There is a video associated with this paper. Click here to view the Video Overview. To save the file, right click and choose "Save Link As" from the menu.
Keywords: vehicle routing problem; time windows; hybrid genetic search; open source; C++; Python
1. Introduction
This paper describes PyVRP, a Python package that provides a high-performance implementation of the hybrid genetic search (HGS) algorithm for vehicle routing problems (VRPs) ([18]). PyVRP currently supports two well-known VRP variants: the capacitated VRP (CVRP) and the VRP with time windows (VRPTW) ([14]). The implementation builds on the open-source HGS-CVRP implementation of [17] but has added support for time windows and has been completely redesigned to be easy to use as a highly customizable Python package while maintaining speed and state-of-the-art performance.
Whereas HGS-CVRP is implemented completely in C++, PyVRP adopts a different philosophy: only performance-critical parts of the algorithm are implemented in C++, and all other parts are implemented in Python. Besides easily using the algorithm, this gives the user additional flexibility to customize the algorithm using Python. The provided HGS implementation is one example of a large family of VRP algorithms that can be built using the building blocks that PyVRP provides. As the performance-critical parts remain in C++, the added flexibility and ease of use that Python offers barely impact the algorithm performance.
PyVRP comes with precompiled binaries for Windows, MacOS, and Linux and can be easily installed from the Python package index using "pip install pyvrp." This allows users to directly solve VRP instances or implement variants of the HGS algorithm using Python, inspired by the examples in PyVRP's documentation. Users can customize various aspects of the algorithm using Python, including population management, crossover strategies, granular neighborhoods, and operator selection in the local search. Additionally, for advanced use cases such as supporting additional VRP variants, users can build and install PyVRP directly from the source code. We actively welcome community contributions to develop support for additional VRP variants within PyVRP and provide some guidelines for this in our online documentation.
The goal of PyVRP, which is made available under the liberal MIT license, is to provide an easy-to-use, extensible, and well-documented VRP solver that generates state-of-the-art results on a variety of VRP variants. This can be used by practitioners to solve practical problems and by researchers as a starting point or strong baseline when aiming to improve the state of the art. The name "PyVRP" has deliberately been chosen to not mention a specific algorithm or VRP variant, providing flexibility with respect to the underlying heuristic algorithms and supported VRP variants.
Through the Python ecosystem, we enable a wide audience to easily use the software. We especially hope that PyVRP will help machine learning (ML) researchers interested in vehicle routing to easily build on the state of the art and move beyond LKH-3 ([4]) as the most commonly used baseline ([1]). Using ML for vehicle routing problems is a promising and active research area, but so far, it has not been able to advance the state of the art; this may change when ML researchers can build on a flexible and high-quality implementation of a state-of-the-art VRP solver.
PyVRP is a complete Python library for solving multiple VRP variants, accompanied by unit tests, online documentation, and examples on its use cases. The library has been tested in practice: earlier versions of the software ranked first in the VRPTW track of the 12th DIMACS implementation challenge ([6]) and, after improvements, ranked first on the static VRPTW variant of the EURO meets NeurIPS 2022 vehicle routing competition ([16]). Compared with the versions used to win these challenges, the PyVRP implementation has been simplified further and significantly rewritten to improve its overall design and testability. In particular, complex components with limited contribution to the overall performance have been removed to strike a balance between simplicity and performance. The result is simpler and more robust than the individual challenge solvers, which were quite complex and optimized for the specific challenge problem sets. In Section 6, we show that PyVRP still yields excellent performance, using numerical experiments on public benchmarks following the conventions used in the DIMACS implementation challenge.
The rest of this paper is structured as follows. In Section 2, we briefly introduce the CVRP and VRPTW and the benchmarking conventions PyVRP supports. In Section 3, we discuss several other open-source VRP solvers and highlight the novelty of PyVRP. Then, in Sections 4 and 5, we discuss the technical implementation and PyVRP package, respectively. In Section 5, we present two examples to demonstrate how the package can be used. Section 6 presents PyVRP's performance on established benchmark instances. Finally, Section 7 concludes the paper.
2. Problem Description
PyVRP currently supports two VRP variants: CVRP and VRPTW. The CVRP aims to construct multiple routes, each starting and ending at the same depot, to serve a set of customers while minimizing total distance. The total demand of customers in a single vehicle is limited by the vehicle capacity. The VRPTW generalizes the CVRP by adding the constraint that each customer must be visited within a certain time window. For both CVRP and VRPTW, PyVRP supports minimizing distances, not the number of vehicles used. A simple procedure to support fleet minimization can be developed on top of PyVRP by first finding a feasible solution with some number of vehicles and then removing one vehicle at a time until no feasible solution is found. PyVRP has been designed to handle instances of these problems with up to several thousand customers.
2.1. CVRP
Formally, the capacitated VRP consists of customers
2.2. VRPTW
For the VRPTW, each customer additionally has a service time
2.3. Conventions
There are different conventions on the definitions of the constraints and objectives for CVRP and VRPTW, especially relating to rounding of (Euclidean) distances and other data in existing benchmark instances (see, e.g., [15]). PyVRP supports
3. Related Projects
As many algorithms developed in the literature have not been open sourced, the primary goal of PyVRP is to open-source a state-of-the-art VRP solver that is easy to use and customize. We are aware of the following related projects:
Whereas each of these projects has their own merit, PyVRP has a unique combination of scope, performance, flexibility, and ease-of-use, making it a useful addition to this set of projects.
4. Technical Implementation
PyVRP implements a variant of the HGS algorithm of [18]. At its core, our implementation consists of a genetic algorithm, a population, and a local search improvement method. We explain these in the following sections, but refer to our documentation[2] for a full overview of the class and function descriptions and other helper classes and methods we do not describe here.
4.1. Overview of HGS
HGS is a hybrid algorithm that combines a genetic algorithm with a local search algorithm. It maintains a population with feasible and infeasible solutions. Initially, solutions are created by randomly assigning customers to routes (feasibility is not required), which ensures diversity in the search. Then, in every iteration, two parents are selected from the population and combined using a crossover operator to create a new
In each iteration, the new offspring solution is improved using local search, which considers time windows and capacities as soft constraints by penalizing violations. This way, the local search considers a smoothed version of the problem, which helps the genetic algorithm to converge toward promising regions of the solution space. The penalty weights are automatically adjusted such that a target percentage of the local search runs result in a feasible solution. After the local search, the offspring is inserted into the population. Once the population exceeds a certain size, a survivor selection mechanism removes solutions that contribute the least to the overall quality and diversity of the population.
4.2. Genetic Algorithm
The genetic algorithm is implemented in Python and defines the main search loop. In every iteration of the search loop, the genetic algorithm selects two (feasible or infeasible) parent solutions from the population. A crossover operator takes the two parent solutions and uses those to generate an offspring solution that inherits features from both parents.
After crossover completes, the offspring solution is improved using local search and then added to the population. If this improved offspring solution is feasible and better than our current best solution, it becomes the new best observed solution. Finally, after the main search loop completes, the genetic algorithm returns a result object that contains the best observed solution and detailed runtime statistics.
4.3. Local Search
We provide an efficient local search implementation to improve a new offspring solution. This improvement procedure is typically the most expensive part of the HGS algorithm. Software profiling suggests that, in PyVRP, it accounts for 80%–90% of the runtime, which is why the local search is implemented in C++. The implementation explores a granular neighborhood ([13]) in a very efficient manner using user-provided operators. These operators evaluate moves in different neighborhoods, and the local search algorithm applies the move as soon as it yields a direct improvement in the objective value of the solution. The search is repeated until no more improvements can be made. We distinguish
Users are free to supply their own node and route operators, but for convenience, we already provide a large set of efficient operators, which we describe next.
4.3.1. Node Operators.
Node operators each evaluate (and possibly apply) a move between two customers
PyVRP currently implements the following node operators:
(N, M)-exchange
This operator considers exchanging a consecutive route segment of n > 0 nodes starting at
MoveTwoClientsReversed
This operator considers a (2, 0)-exchange where
2-OPT
The 2-OPT operator represents the routes of
4.3.2. Route Operators.
Route operators consider moves between route pairs, avoiding the granularity restrictions imposed on the node operators. This enables the evaluation of much larger neighborhoods, whereas additional caching opportunities ensure these evaluations remain fast. PyVRP provides two route operators by default:
RELOCATE*
The RELOCATE* operator finds and applies the best (1, 0)-exchange move between two routes. RELOCATE* uses the (
SWAP*
The SWAP* operator of [17] considers the best swap move between two routes but does not require that the swapped customers are inserted in each other's place. Instead, each is inserted into the best location in the other route. We enhance the implementation of [17] with time window support, further caching, and earlier stopping when evaluating "known-bad" moves.
4.4. Population Management
The population is implemented in Python, using feasible and infeasible subpopulations that are implemented in C++ for performance. New solutions can be added to the population, and parent solutions can be requested from it for crossover. These parents are selected by a
The population is initialized with a minimal set of random solutions. New solutions obtained by the genetic algorithm are added to it as they are generated. Once a subpopulation reaches its maximal size, survivor selection is performed that reduces the subpopulation to its minimal size. This survivor selection is done by first removing duplicate solutions and then by removing those solutions that have the worst fitness based on the biased fitness criterion of [17]. This fitness criterion balances solution quality based on the solution's objective value and diversity w.r.t. to other solutions in the subpopulation, evaluated using a diversity measure supplied to the population. We implement a directed variant of the broken pairs distance, but a user can also supply their own diversity measure.
5. The PyVRP Package
The PyVRP package is developed in a GitHub repository.[3] The repository contains the C++ and Python source code, including unit and integration tests, as well as documentation and examples introducing new users to PyVRP. Additionally, the repository uses automated workflows that build PyVRP for different platforms (currently Linux, Windows, and MacOS) such that a user can install PyVRP directly from the Python package index using "pip install pyvrp" without having to compile the C++ extensions themselves.
5.1. Package Structure
The top-level pyvrp namespace contains some of the components of Section 4 and important additional classes. These include the Model modeling interface, the GeneticAlgorithm and Population, along with a read function that can be used to read benchmark instances in various formats (through the VRPLIB Python package). Crossover operators that can be used together with the GeneticAlgorithm are provided in pyvrp.crossover. Further, the pyvrp.diversity namespace contains diversity measures that can be used with the Population. The pyvrp.search namespace contains the LocalSearch class, the operators, and the compute_neighbours function that computes a granular neighborhood. Stopping criteria for the genetic algorithm are provided by pyvrp.stop. These include stopping criteria based on a maximum number of iterations or runtime and also variants that stop after a number of iterations without improvement. Finally, pyvrp.plotting provides utilities for plotting and analyzing solutions.
5.2. Example Use
We present two examples for different audiences. The first example, Listing 1 in Figure 1, shows the modeling interface of PyVRP and how that can be used to define and solve a CVRP instance. This interface is particularly convenient for practitioners interested in solving VRPs using PyVRP. The second example, in Listing 2 of Figure 2, shows the different components in PyVRP and how they can be used to solve a VRPTW instance. This example is helpful for understanding how PyVRP's implementation of HGS works and can be used as a basis to customize the solution algorithm.
Graph: Figure 1. (Color online) Listing 1: Using PyVRP's Modeling Interface to Solve a CVRP Instance
Graph: Figure 2. (Color online) Listing 2: PyVRP Example Usage
We will first present the modeling interface in Listing 1 of Figure 1.
The modeling interface is available as Model and can be used to define all relevant instance attributes: the depot, clients, vehicle types, and the edges connecting all locations. After defining an instance, it can be solved by calling the solve method on the model. Once solving finishes, a result object res is returned. This object contains the best-found solution (res. best) and statistics about the solver run. The result object can be printed to display the solution and some relevant statistics. Additionally, the results can be plotted, which we will show how to do in Listing 2 in Figure 2.
In Listing 2 of Figure 2, we solve the 1,000-customer RC2_10_5 instance of the Homberger and Gehring VRPTW set of benchmarks. Rather than using the modeling interface's high-level solve method, here, we set everything up explicitly. The code assumes that the RC2_10_5 instance is available locally.
Listing 2 of Figure 2 first reads a benchmark instance in standard format and constructs a random number generator with fixed seed. It then defines the local search method. We use the default granular neighborhood computed by compute_neighbours, but this can easily be customized by providing an alternative neighborhood definition. Then, we add all node and route operators described in Section 4.3 to the local search object. This is not required: any subset of these operators is also allowed and might even improve the solver performance in specific cases. Finally, the penalty manager and population are initialized. These track, respectively, the weights of constraint violation penalties and the feasible and infeasible solution subpopulations. An initial population should also be provided to the genetic algorithm: here, we generate 25 random solutions. A user may wish to apply alternative population generation methods here. Finally, the genetic algorithm is initialized and run until a stopping criterion is met; in this case, the stopping criterion is 60 seconds of runtime. We plot the solver trajectory and best observed solution in Figure 3.
Graph: Figure 3. Detailed Statistics Collected from a Single Run of Listing 2Notes. (a) Average diversity of the feasible and infeasible subpopulations. It is clear from this figure that periodic survivor selection improves diversity. (b) The best and average objectives of both subpopulations, which improve over time as the search progresses. (c) Iteration runtimes (in seconds), including a trendline. (d) The best observed solution.
5.3. Extending PyVRP
Before writing new code for PyVRP, a few things must be decided about the new constraint. Hard constraints might require changes to PyVRP data structures. Soft constraints typically require modifications to the cost evaluation functions. Additionally, the new constraint likely requires additional data attributes that must be added to PyVRP's data instance object and solution representation. Once that new data are available, the search method can be updated to compute the correct cost deltas of each available move. Some of the cost delta evaluation may need to be cached to ensure an efficient implementation—this is particularly the case for time-related costs, which PyVRP already supports. Entirely new problem aspects might need to develop such caching as part of the extension.
Because we have developed several extensions to PyVRP already, there are some examples available of previous work. We have summarized guidelines for extending PyVRP in our online documentation.[4]
6. Experiments
In this section, we present PyVRP's performance on widely used CVRP and VRPTW benchmark instances. We compare PyVRP's performance with both the best known solutions (BKSs) and with results from the literature, accounting for CPU differences by adjusting the time limits based on the PassMark score. PyVRP is benchmarked on an AMD EPYC 7H12 CPU with a PassMark single-thread performance of 2014. We benchmark PyVRP version 0.5.0, which is available as a static archive on the IJOC GitHub repository ([19]). The BKSs were obtained from the CVRPLIB repository on February 28, 2023.
6.1. CVRP
We evaluate our solver for CVRP on the X benchmark instances of [15]. This set includes 100 instances and covers diverse problem characteristics, such as customer geography, demand distributions, and route lengths. We follow the convention to minimize the total distance. The distances are computed by taking the Euclidean distances rounded to the nearest integer. The parameter settings used in our experiments are shown in Table 1. We solve each instance with 10 different seeds and present the average total distance rounded to one decimal. We compare our solver with the results of state-of-the-art CVRP solvers HGS-2012 ([18]) and HGS-CVRP ([17]). We use the time limits of [17]: each instance is solved for
Table 1. Parameters Values for CVRP and VRPTW
1
Table 2 presents the summarized results for CVRP. We report both the
Table 2. Benchmark Results for CVRP on X Instances of [15]
Table 3. Benchmark Results for CVRP on X Instances
<p> <ephtml> <table><thead valign="bottom"><tr><th align="left" rowspan="1" colspan="1" /><th align="center" colspan="2" rowspan="1">PyVRP</th><th align="center" colspan="2" rowspan="1">HGS-2012</th><th align="center" colspan="2" rowspan="1">HGS-CVRP</th><th align="center" rowspan="1" colspan="1">BKS</th></tr><tr><th align="left" rowspan="1" colspan="1">Instance</th><th align="center" rowspan="1" colspan="1">Cost</th><th align="center" rowspan="1" colspan="1">Gap</th><th align="center" rowspan="1" colspan="1">Cost</th><th align="center" rowspan="1" colspan="1">Gap</th><th align="center" rowspan="1" colspan="1">Cost</th><th align="center" rowspan="1" colspan="1">Gap</th><th align="center" rowspan="1" colspan="1">Cost</th></tr></thead><tbody valign="top"><tr><td rowspan="1" colspan="1">X-n101-k25</td><td align="center" rowspan="1" colspan="1">27,591.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">27,591.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">27,591.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">27,591</td></tr><tr><td rowspan="1" colspan="1">X-n106-k14</td><td align="center" rowspan="1" colspan="1">26,376.0</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">26,408.8</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">26,381.4</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">26,362</td></tr><tr><td rowspan="1" colspan="1">X-n110-k13</td><td align="center" rowspan="1" colspan="1">14,971.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,971.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,971.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,971</td></tr><tr><td rowspan="1" colspan="1">X-n115-k10</td><td align="center" rowspan="1" colspan="1">12,747.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">12,747.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">12,747.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">12,747</td></tr><tr><td rowspan="1" colspan="1">X-n120-k6</td><td align="center" rowspan="1" colspan="1">13,332.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,332.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,332.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,332</td></tr><tr><td rowspan="1" colspan="1">X-n125-k30</td><td align="center" rowspan="1" colspan="1">55,541.9</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">55,539.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">55,539.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">55,539</td></tr><tr><td rowspan="1" colspan="1">X-n129-k18</td><td align="center" rowspan="1" colspan="1">28,940.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">28,940.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">28,940.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">28,940</td></tr><tr><td rowspan="1" colspan="1">X-n134-k13</td><td align="center" rowspan="1" colspan="1">10,916.2</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">10,916.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">10,916.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">10,916</td></tr><tr><td rowspan="1" colspan="1">X-n139-k10</td><td align="center" rowspan="1" colspan="1">13,590.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,590.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,590.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">13,590</td></tr><tr><td rowspan="1" colspan="1">X-n143-k7</td><td align="center" rowspan="1" colspan="1">15,719.2</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">15,700.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">15,700.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">15,700</td></tr><tr><td rowspan="1" colspan="1">X-n148-k46</td><td align="center" rowspan="1" colspan="1">43,448.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">43,448.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">43,448.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">43,448</td></tr><tr><td rowspan="1" colspan="1">X-n153-k22</td><td align="center" rowspan="1" colspan="1">21,220.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">21,223.5</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">21,225.0</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">21,220</td></tr><tr><td rowspan="1" colspan="1">X-n157-k13</td><td align="center" rowspan="1" colspan="1">16,876.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">16,876.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">16,876.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">16,876</td></tr><tr><td rowspan="1" colspan="1">X-n162-k11</td><td align="center" rowspan="1" colspan="1">14,138.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,138.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,138.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">14,138</td></tr><tr><td rowspan="1" colspan="1">X-n167-k10</td><td align="center" rowspan="1" colspan="1">20,557.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">20,557.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">20,557.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">20,557</td></tr><tr><td rowspan="1" colspan="1">X-n172-k51</td><td align="center" rowspan="1" colspan="1">45,607.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">45,607.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">45,607.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">45,607</td></tr><tr><td rowspan="1" colspan="1">X-n176-k26</td><td align="center" rowspan="1" colspan="1">47,817.0</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">47,812.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">47,812.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">47,812</td></tr><tr><td rowspan="1" colspan="1">X-n181-k23</td><td align="center" rowspan="1" colspan="1">25,569.4</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">25,570.2</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">25,569.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">25,569</td></tr><tr><td rowspan="1" colspan="1">X-n186-k15</td><td align="center" rowspan="1" colspan="1">24,149.6</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">24,145.2</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">24,145.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">24,145</td></tr><tr><td rowspan="1" colspan="1">X-n190-k8</td><td align="center" rowspan="1" colspan="1">16,996.2</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">16,992.4</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">16,983.3</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">16,980</td></tr><tr><td rowspan="1" colspan="1">X-n195-k51</td><td align="center" rowspan="1" colspan="1">44,236.1</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">44,225.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">44,225.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">44,225</td></tr><tr><td rowspan="1" colspan="1">X-n200-k36</td><td align="center" rowspan="1" colspan="1">58,583.2</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">58,589.6</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">58,578.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">58,578</td></tr><tr><td rowspan="1" colspan="1">X-n204-k19</td><td align="center" rowspan="1" colspan="1">19,568.5</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">19,565.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">19,565.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">19,565</td></tr><tr><td rowspan="1" colspan="1">X-n209-k16</td><td align="center" rowspan="1" colspan="1">30,672.6</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">30,658.7</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">30,656.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">30,656</td></tr><tr><td rowspan="1" colspan="1">X-n214-k11</td><td align="center" rowspan="1" colspan="1">10,874.6</td><td align="center" rowspan="1" colspan="1">0.17</td><td align="center" rowspan="1" colspan="1">10,877.0</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">10,860.5</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">10,856</td></tr><tr><td rowspan="1" colspan="1">X-n219-k73</td><td align="center" rowspan="1" colspan="1">117,602.3</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">117,601.7</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">117,596.1</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">117,595</td></tr><tr><td rowspan="1" colspan="1">X-n223-k34</td><td align="center" rowspan="1" colspan="1">40,486.3</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">40,455.3</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">40,437.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">40,437</td></tr><tr><td rowspan="1" colspan="1">X-n228-k23</td><td align="center" rowspan="1" colspan="1">25,752.4</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">25,742.7</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">25,742.8</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">25,742</td></tr><tr><td rowspan="1" colspan="1">X-n233-k16</td><td align="center" rowspan="1" colspan="1">19,238.4</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">19,233.1</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">19,230.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">19,230</td></tr><tr><td rowspan="1" colspan="1">X-n237-k14</td><td align="center" rowspan="1" colspan="1">27,049.9</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">27,049.4</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">27,042.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">27,042</td></tr><tr><td rowspan="1" colspan="1">X-n242-k48</td><td align="center" rowspan="1" colspan="1">82,875.4</td><td align="center" rowspan="1" colspan="1">0.15</td><td align="center" rowspan="1" colspan="1">82,826.5</td><td align="center" rowspan="1" colspan="1">0.09</td><td align="center" rowspan="1" colspan="1">82,806.0</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">82,751</td></tr><tr><td rowspan="1" colspan="1">X-n247-k50</td><td align="center" rowspan="1" colspan="1">37,285.0</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">37,295.0</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">37,277.1</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">37,274</td></tr><tr><td rowspan="1" colspan="1">X-n251-k28</td><td align="center" rowspan="1" colspan="1">38,769.4</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">38,735.9</td><td align="center" rowspan="1" colspan="1">0.13</td><td align="center" rowspan="1" colspan="1">38,689.9</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">38,684</td></tr><tr><td rowspan="1" colspan="1">X-n256-k16</td><td align="center" rowspan="1" colspan="1">18,880.0</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">18,880.0</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">18,839.6</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">18,839</td></tr><tr><td rowspan="1" colspan="1">X-n261-k13</td><td align="center" rowspan="1" colspan="1">26,604.5</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">26,594.0</td><td align="center" rowspan="1" colspan="1">0.14</td><td align="center" rowspan="1" colspan="1">26,558.2</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">26,558</td></tr><tr><td rowspan="1" colspan="1">X-n266-k58</td><td align="center" rowspan="1" colspan="1">75,620.7</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">75,646.8</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">75,564.7</td><td align="center" rowspan="1" colspan="1">0.11</td><td align="center" rowspan="1" colspan="1">75,478</td></tr><tr><td rowspan="1" colspan="1">X-n270-k35</td><td align="center" rowspan="1" colspan="1">35,315.2</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">35,306.4</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">35,303.0</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">35,291</td></tr><tr><td rowspan="1" colspan="1">X-n275-k28</td><td align="center" rowspan="1" colspan="1">21,245.8</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">21,247.8</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">21,245.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">21,245</td></tr><tr><td rowspan="1" colspan="1">X-n280-k17</td><td align="center" rowspan="1" colspan="1">33,592.6</td><td align="center" rowspan="1" colspan="1">0.27</td><td align="center" rowspan="1" colspan="1">33,573.0</td><td align="center" rowspan="1" colspan="1">0.21</td><td align="center" rowspan="1" colspan="1">33,543.2</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">33,503</td></tr><tr><td rowspan="1" colspan="1">X-n284-k15</td><td align="center" rowspan="1" colspan="1">20,304.1</td><td align="center" rowspan="1" colspan="1">0.44</td><td align="center" rowspan="1" colspan="1">20,248.0</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">20,245.5</td><td align="center" rowspan="1" colspan="1">0.15</td><td align="center" rowspan="1" colspan="1">20,215</td></tr><tr><td rowspan="1" colspan="1">X-n289-k60</td><td align="center" rowspan="1" colspan="1">95,304.3</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">95,350.4</td><td align="center" rowspan="1" colspan="1">0.21</td><td align="center" rowspan="1" colspan="1">95,300.9</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">95,151</td></tr><tr><td rowspan="1" colspan="1">X-n294-k50</td><td align="center" rowspan="1" colspan="1">47,214.0</td><td align="center" rowspan="1" colspan="1">0.11</td><td align="center" rowspan="1" colspan="1">47,217.8</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">47,184.1</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">47,161</td></tr><tr><td rowspan="1" colspan="1">X-n298-k31</td><td align="center" rowspan="1" colspan="1">34,250.5</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">34,235.9</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">34,234.8</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">34,231</td></tr><tr><td rowspan="1" colspan="1">X-n303-k21</td><td align="center" rowspan="1" colspan="1">21,862.0</td><td align="center" rowspan="1" colspan="1">0.58</td><td align="center" rowspan="1" colspan="1">21,763.4</td><td align="center" rowspan="1" colspan="1">0.13</td><td align="center" rowspan="1" colspan="1">21,748.5</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">21,736</td></tr><tr><td rowspan="1" colspan="1">X-n308-k13</td><td align="center" rowspan="1" colspan="1">25,895.4</td><td align="center" rowspan="1" colspan="1">0.14</td><td align="center" rowspan="1" colspan="1">25,879.8</td><td align="center" rowspan="1" colspan="1">0.08</td><td align="center" rowspan="1" colspan="1">25,870.8</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">25,859</td></tr><tr><td rowspan="1" colspan="1">X-n313-k71</td><td align="center" rowspan="1" colspan="1">94,244.0</td><td align="center" rowspan="1" colspan="1">0.21</td><td align="center" rowspan="1" colspan="1">94,127.7</td><td align="center" rowspan="1" colspan="1">0.09</td><td align="center" rowspan="1" colspan="1">94,112.2</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">94,043</td></tr><tr><td rowspan="1" colspan="1">X-n317-k53</td><td align="center" rowspan="1" colspan="1">78,360.8</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">78,374.8</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">78,355.4</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">78,355</td></tr><tr><td rowspan="1" colspan="1">X-n322-k28</td><td align="center" rowspan="1" colspan="1">29,885.6</td><td align="center" rowspan="1" colspan="1">0.17</td><td align="center" rowspan="1" colspan="1">29,887.5</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">29,848.7</td><td align="center" rowspan="1" colspan="1">0.05</td><td align="center" rowspan="1" colspan="1">29,834</td></tr><tr><td rowspan="1" colspan="1">X-n327-k20</td><td align="center" rowspan="1" colspan="1">27,620.3</td><td align="center" rowspan="1" colspan="1">0.32</td><td align="center" rowspan="1" colspan="1">27,580.4</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">27,540.8</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">27,532</td></tr><tr><td rowspan="1" colspan="1">X-n331-k15</td><td align="center" rowspan="1" colspan="1">31,147.8</td><td align="center" rowspan="1" colspan="1">0.15</td><td align="center" rowspan="1" colspan="1">31,114.0</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">31,103.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">31,102</td></tr><tr><td rowspan="1" colspan="1">X-n336-k84</td><td align="center" rowspan="1" colspan="1">139,627.1</td><td align="center" rowspan="1" colspan="1">0.37</td><td align="center" rowspan="1" colspan="1">139,437.1</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">139,273.5</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">139,111</td></tr><tr><td rowspan="1" colspan="1">X-n344-k43</td><td align="center" rowspan="1" colspan="1">42,136.8</td><td align="center" rowspan="1" colspan="1">0.21</td><td align="center" rowspan="1" colspan="1">42,086.0</td><td align="center" rowspan="1" colspan="1">0.09</td><td align="center" rowspan="1" colspan="1">42,075.6</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">42,050</td></tr><tr><td rowspan="1" colspan="1">X-n351-k40</td><td align="center" rowspan="1" colspan="1">25,998.8</td><td align="center" rowspan="1" colspan="1">0.40</td><td align="center" rowspan="1" colspan="1">25,972.8</td><td align="center" rowspan="1" colspan="1">0.30</td><td align="center" rowspan="1" colspan="1">25,943.6</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">25,896</td></tr><tr><td rowspan="1" colspan="1">X-n359-k29</td><td align="center" rowspan="1" colspan="1">51,674.7</td><td align="center" rowspan="1" colspan="1">0.33</td><td align="center" rowspan="1" colspan="1">51,653.8</td><td align="center" rowspan="1" colspan="1">0.29</td><td align="center" rowspan="1" colspan="1">51,620.0</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">51,505</td></tr><tr><td rowspan="1" colspan="1">X-n367-k17</td><td align="center" rowspan="1" colspan="1">22,827.2</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">22,814.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">22,814.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">22,814</td></tr><tr><td rowspan="1" colspan="1">X-n376-k94</td><td align="center" rowspan="1" colspan="1">147,729.4</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">147,719.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">147,714.5</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">147,713</td></tr><tr><td rowspan="1" colspan="1">X-n384-k52</td><td align="center" rowspan="1" colspan="1">66,155.7</td><td align="center" rowspan="1" colspan="1">0.35</td><td align="center" rowspan="1" colspan="1">66,163.7</td><td align="center" rowspan="1" colspan="1">0.36</td><td align="center" rowspan="1" colspan="1">66,049.1</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">65,928</td></tr><tr><td rowspan="1" colspan="1">X-n393-k38</td><td align="center" rowspan="1" colspan="1">38,310.4</td><td align="center" rowspan="1" colspan="1">0.13</td><td align="center" rowspan="1" colspan="1">38,281.4</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">38,260.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">38,260</td></tr><tr><td rowspan="1" colspan="1">X-n401-k29</td><td align="center" rowspan="1" colspan="1">66,264.0</td><td align="center" rowspan="1" colspan="1">0.17</td><td align="center" rowspan="1" colspan="1">66,305.3</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">66,252.5</td><td align="center" rowspan="1" colspan="1">0.15</td><td align="center" rowspan="1" colspan="1">66,154</td></tr><tr><td rowspan="1" colspan="1">X-n411-k19</td><td align="center" rowspan="1" colspan="1">19,735.6</td><td align="center" rowspan="1" colspan="1">0.12</td><td align="center" rowspan="1" colspan="1">19,723.8</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">19,720.3</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">19,712</td></tr><tr><td rowspan="1" colspan="1">X-n420-k130</td><td align="center" rowspan="1" colspan="1">107,903.6</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">107,843.3</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">107,839.8</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">107,798</td></tr><tr><td rowspan="1" colspan="1">X-n429-k61</td><td align="center" rowspan="1" colspan="1">65,556.2</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">65,565.4</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">65,502.7</td><td align="center" rowspan="1" colspan="1">0.08</td><td align="center" rowspan="1" colspan="1">65,449</td></tr><tr><td rowspan="1" colspan="1">X-n439-k37</td><td align="center" rowspan="1" colspan="1">36,422.6</td><td align="center" rowspan="1" colspan="1">0.09</td><td align="center" rowspan="1" colspan="1">36,426.4</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">36,395.5</td><td align="center" rowspan="1" colspan="1">0.01</td><td align="center" rowspan="1" colspan="1">36,391</td></tr><tr><td rowspan="1" colspan="1">X-n449-k29</td><td align="center" rowspan="1" colspan="1">55,596.2</td><td align="center" rowspan="1" colspan="1">0.66</td><td align="center" rowspan="1" colspan="1">55,598.1</td><td align="center" rowspan="1" colspan="1">0.66</td><td align="center" rowspan="1" colspan="1">55,368.5</td><td align="center" rowspan="1" colspan="1">0.25</td><td align="center" rowspan="1" colspan="1">55,233</td></tr><tr><td rowspan="1" colspan="1">X-n459-k26</td><td align="center" rowspan="1" colspan="1">24,191.1</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">24,199.3</td><td align="center" rowspan="1" colspan="1">0.25</td><td align="center" rowspan="1" colspan="1">24,163.8</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">24,139</td></tr><tr><td rowspan="1" colspan="1">X-n469-k138</td><td align="center" rowspan="1" colspan="1">222,327.0</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">222,364.3</td><td align="center" rowspan="1" colspan="1">0.24</td><td align="center" rowspan="1" colspan="1">222,170.1</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">221,824</td></tr><tr><td rowspan="1" colspan="1">X-n480-k70</td><td align="center" rowspan="1" colspan="1">89,600.2</td><td align="center" rowspan="1" colspan="1">0.17</td><td align="center" rowspan="1" colspan="1">89,665.0</td><td align="center" rowspan="1" colspan="1">0.24</td><td align="center" rowspan="1" colspan="1">89,524.4</td><td align="center" rowspan="1" colspan="1">0.08</td><td align="center" rowspan="1" colspan="1">89,449</td></tr><tr><td rowspan="1" colspan="1">X-n491-k59</td><td align="center" rowspan="1" colspan="1">66,751.4</td><td align="center" rowspan="1" colspan="1">0.40</td><td align="center" rowspan="1" colspan="1">66,723.7</td><td align="center" rowspan="1" colspan="1">0.36</td><td align="center" rowspan="1" colspan="1">66,641.5</td><td align="center" rowspan="1" colspan="1">0.24</td><td align="center" rowspan="1" colspan="1">66,483</td></tr><tr><td rowspan="1" colspan="1">X-n502-k39</td><td align="center" rowspan="1" colspan="1">69,252.4</td><td align="center" rowspan="1" colspan="1">0.04</td><td align="center" rowspan="1" colspan="1">69,300.8</td><td align="center" rowspan="1" colspan="1">0.11</td><td align="center" rowspan="1" colspan="1">69,239.5</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">69,226</td></tr><tr><td rowspan="1" colspan="1">X-n513-k21</td><td align="center" rowspan="1" colspan="1">24,263.4</td><td align="center" rowspan="1" colspan="1">0.26</td><td align="center" rowspan="1" colspan="1">24,206.5</td><td align="center" rowspan="1" colspan="1">0.02</td><td align="center" rowspan="1" colspan="1">24,201.0</td><td align="center" rowspan="1" colspan="1">0.00</td><td align="center" rowspan="1" colspan="1">24,201</td></tr><tr><td rowspan="1" colspan="1">X-n524-k153</td><td align="center" rowspan="1" colspan="1">154,881.0</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">154,890.1</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">154,747.6</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">154,593</td></tr><tr><td rowspan="1" colspan="1">X-n536-k96</td><td align="center" rowspan="1" colspan="1">95,173.6</td><td align="center" rowspan="1" colspan="1">0.35</td><td align="center" rowspan="1" colspan="1">95,205.1</td><td align="center" rowspan="1" colspan="1">0.38</td><td align="center" rowspan="1" colspan="1">95,091.9</td><td align="center" rowspan="1" colspan="1">0.26</td><td align="center" rowspan="1" colspan="1">94,846</td></tr><tr><td rowspan="1" colspan="1">X-n548-k50</td><td align="center" rowspan="1" colspan="1">86,855.6</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">86,970.8</td><td align="center" rowspan="1" colspan="1">0.31</td><td align="center" rowspan="1" colspan="1">86,778.4</td><td align="center" rowspan="1" colspan="1">0.09</td><td align="center" rowspan="1" colspan="1">86,700</td></tr><tr><td rowspan="1" colspan="1">X-n561-k42</td><td align="center" rowspan="1" colspan="1">42,834.2</td><td align="center" rowspan="1" colspan="1">0.27</td><td align="center" rowspan="1" colspan="1">42,783.9</td><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1">42,742.7</td><td align="center" rowspan="1" colspan="1">0.06</td><td align="center" rowspan="1" colspan="1">42,717</td></tr><tr><td rowspan="1" colspan="1">X-n573-k30</td><td align="center" rowspan="1" colspan="1">50,925.0</td><td align="center" rowspan="1" colspan="1">0.50</td><td align="center" rowspan="1" colspan="1">50,861.2</td><td align="center" rowspan="1" colspan="1">0.37</td><td align="center" rowspan="1" colspan="1">50,813.0</td><td align="center" rowspan="1" colspan="1">0.28</td><td align="center" rowspan="1" colspan="1">50,673</td></tr><tr><td rowspan="1" colspan="1">X-n586-k159</td><td align="center" rowspan="1" colspan="1">190,643.4</td><td align="center" rowspan="1" colspan="1">0.17</td><td align="center" rowspan="1" colspan="1">190,759.3</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">190,588.1</td><td align="center" rowspan="1" colspan="1">0.14</td><td align="center" rowspan="1" colspan="1">190,316</td></tr><tr><td rowspan="1" colspan="1">X-n599-k92</td><td align="center" rowspan="1" colspan="1">108,813.2</td><td align="center" rowspan="1" colspan="1">0.33</td><td align="center" rowspan="1" colspan="1">108,872.3</td><td align="center" rowspan="1" colspan="1">0.39</td><td align="center" rowspan="1" colspan="1">108,656.0</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">108,451</td></tr><tr><td rowspan="1" colspan="1">X-n613-k62</td><td align="center" rowspan="1" colspan="1">59,795.0</td><td align="center" rowspan="1" colspan="1">0.44</td><td align="center" rowspan="1" colspan="1">59,801.0</td><td align="center" rowspan="1" colspan="1">0.45</td><td align="center" rowspan="1" colspan="1">59,696.3</td><td align="center" rowspan="1" colspan="1">0.27</td><td align="center" rowspan="1" colspan="1">59,535</td></tr><tr><td rowspan="1" colspan="1">X-n627-k43</td><td align="center" rowspan="1" colspan="1">62,439.1</td><td align="center" rowspan="1" colspan="1">0.44</td><td align="center" rowspan="1" colspan="1">62,558.7</td><td align="center" rowspan="1" colspan="1">0.63</td><td align="center" rowspan="1" colspan="1">62,371.6</td><td align="center" rowspan="1" colspan="1">0.33</td><td align="center" rowspan="1" colspan="1">62,164</td></tr><tr><td rowspan="1" colspan="1">X-n641-k35</td><td align="center" rowspan="1" colspan="1">63,993.0</td><td align="center" rowspan="1" colspan="1">0.49</td><td align="center" rowspan="1" colspan="1">64,086.0</td><td align="center" rowspan="1" colspan="1">0.63</td><td align="center" rowspan="1" colspan="1">63,874.2</td><td align="center" rowspan="1" colspan="1">0.30</td><td align="center" rowspan="1" colspan="1">63,682</td></tr><tr><td rowspan="1" colspan="1">X-n655-k131</td><td align="center" rowspan="1" colspan="1">106,851.9</td><td align="center" rowspan="1" colspan="1">0.07</td><td align="center" rowspan="1" colspan="1">106,865.4</td><td align="center" rowspan="1" colspan="1">0.08</td><td align="center" rowspan="1" colspan="1">106,808.8</td><td align="center" rowspan="1" colspan="1">0.03</td><td align="center" rowspan="1" colspan="1">106,780</td></tr><tr><td rowspan="1" colspan="1">X-n670-k130</td><td align="center" rowspan="1" colspan="1">146,893.7</td><td align="center" rowspan="1" colspan="1">0.38</td><td align="center" rowspan="1" colspan="1">147,319.0</td><td align="center" rowspan="1" colspan="1">0.67</td><td align="center" rowspan="1" colspan="1">146,777.7</td><td align="center" rowspan="1" colspan="1">0.30</td><td align="center" rowspan="1" colspan="1">146,332</td></tr><tr><td rowspan="1" colspan="1">X-n685-k75</td><td align="center" rowspan="1" colspan="1">68,532.3</td><td align="center" rowspan="1" colspan="1">0.48</td><td align="center" rowspan="1" colspan="1">68,498.0</td><td align="center" rowspan="1" colspan="1">0.43</td><td align="center" rowspan="1" colspan="1">68,343.1</td><td align="center" rowspan="1" colspan="1">0.20</td><td align="center" rowspan="1" colspan="1">68,205</td></tr><tr><td rowspan="1" colspan="1">X-n701-k44</td><td align="center" rowspan="1" colspan="1">82,462.8</td><td align="center" rowspan="1" colspan="1">0.66</td><td align="center" rowspan="1" colspan="1">82,457.9</td><td align="center" rowspan="1" colspan="1">0.65</td><td align="center" rowspan="1" colspan="1">82,237.3</td><td align="center" rowspan="1" colspan="1">0.38</td><td align="center" rowspan="1" colspan="1">81,923</td></tr><tr><td rowspan="1" colspan="1">X-n716-k35</td><td align="center" rowspan="1" colspan="1">43,616.9</td><td align="center" rowspan="1" colspan="1">0.56</td><td align="center" rowspan="1" colspan="1">43,615.1</td><td align="center" rowspan="1" colspan="1">0.56</td><td align="center" rowspan="1" colspan="1">43,505.8</td><td align="center" rowspan="1" colspan="1">0.31</td><td align="center" rowspan="1" colspan="1">43,373</td></tr><tr><td rowspan="1" colspan="1">X-n733-k159</td><td align="center" rowspan="1" colspan="1">136,526.4</td><td align="center" rowspan="1" colspan="1">0.25</td><td align="center" rowspan="1" colspan="1">136,512.5</td><td align="center" rowspan="1" colspan="1">0.24</td><td align="center" rowspan="1" colspan="1">136,426.9</td><td align="center" rowspan="1" colspan="1">0.18</td><td align="center" rowspan="1" colspan="1">136,187</td></tr><tr><td rowspan="1" colspan="1">X-n749-k98</td><td align="center" rowspan="1" colspan="1">77,801.3</td><td align="center" rowspan="1" colspan="1">0.69</td><td align="center" rowspan="1" colspan="1">77,783.0</td><td align="center" rowspan="1" colspan="1">0.67</td><td align="center" rowspan="1" colspan="1">77,655.4</td><td align="center" rowspan="1" colspan="1">0.50</td><td align="center" rowspan="1" colspan="1">77,269</td></tr><tr><td rowspan="1" colspan="1">X-n766-k71</td><td align="center" rowspan="1" colspan="1">115,135.3</td><td align="center" rowspan="1" colspan="1">0.63</td><td align="center" rowspan="1" colspan="1">114,894.6</td><td align="center" rowspan="1" colspan="1">0.42</td><td align="center" rowspan="1" colspan="1">114,764.5</td><td align="center" rowspan="1" colspan="1">0.30</td><td align="center" rowspan="1" colspan="1">114,417</td></tr><tr><td rowspan="1" colspan="1">X-n783-k48</td><td align="center" rowspan="1" colspan="1">72,915.8</td><td align="center" rowspan="1" colspan="1">0.73</td><td align="center" rowspan="1" colspan="1">73,027.6</td><td align="center" rowspan="1" colspan="1">0.89</td><td align="center" rowspan="1" colspan="1">72,790.7</td><td align="center" rowspan="1" colspan="1">0.56</td><td align="center" rowspan="1" colspan="1">72,386</td></tr><tr><td rowspan="1" colspan="1">X-n801-k40</td><td align="center" rowspan="1" colspan="1">73,655.2</td><td align="center" rowspan="1" colspan="1">0.48</td><td align="center" rowspan="1" colspan="1">73,803.3</td><td align="center" rowspan="1" colspan="1">0.68</td><td align="center" rowspan="1" colspan="1">73,500.4</td><td align="center" rowspan="1" colspan="1">0.27</td><td align="center" rowspan="1" colspan="1">73,305</td></tr><tr><td rowspan="1" colspan="1">X-n819-k171</td><td align="center" rowspan="1" colspan="1">158,745.0</td><td align="center" rowspan="1" colspan="1">0.39</td><td align="center" rowspan="1" colspan="1">158,756.1</td><td align="center" rowspan="1" colspan="1">0.40</td><td align="center" rowspan="1" colspan="1">158,511.6</td><td align="center" rowspan="1" colspan="1">0.25</td><td align="center" rowspan="1" colspan="1">158,121</td></tr><tr><td rowspan="1" colspan="1">X-n837-k142</td><td align="center" rowspan="1" colspan="1">194,291.2</td><td align="center" rowspan="1" colspan="1">0.29</td><td align="center" rowspan="1" colspan="1">194,636.5</td><td align="center" rowspan="1" colspan="1">0.46</td><td align="center" rowspan="1" colspan="1">194,231.3</td><td align="center" rowspan="1" colspan="1">0.26</td><td align="center" rowspan="1" colspan="1">193,737</td></tr><tr><td rowspan="1" colspan="1">X-n856-k95</td><td align="center" rowspan="1" colspan="1">89,129.8</td><td align="center" rowspan="1" colspan="1">0.19</td><td align="center" rowspan="1" colspan="1">89,216.1</td><td align="center" rowspan="1" colspan="1">0.28</td><td align="center" rowspan="1" colspan="1">89,037.5</td><td align="center" rowspan="1" colspan="1">0.08</td><td align="center" rowspan="1" colspan="1">88,965</td></tr><tr><td rowspan="1" colspan="1">X-n876-k59</td><td align="center" rowspan="1" colspan="1">99,824.3</td><td align="center" rowspan="1" colspan="1">0.53</td><td align="center" rowspan="1" colspan="1">99,889.4</td><td align="center" rowspan="1" colspan="1">0.59</td><td align="center" rowspan="1" colspan="1">99,682.7</td><td align="center" rowspan="1" colspan="1">0.39</td><td align="center" rowspan="1" colspan="1">99,299</td></tr><tr><td rowspan="1" colspan="1">X-n895-k37</td><td align="center" rowspan="1" colspan="1">54,281.0</td><td align="center" rowspan="1" colspan="1">0.78</td><td align="center" rowspan="1" colspan="1">54,255.9</td><td align="center" rowspan="1" colspan="1">0.74</td><td align="center" rowspan="1" colspan="1">54,070.6</td><td align="center" rowspan="1" colspan="1">0.39</td><td align="center" rowspan="1" colspan="1">53,860</td></tr><tr><td rowspan="1" colspan="1">X-n916-k207</td><td align="center" rowspan="1" colspan="1">329,935.4</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">330,234.0</td><td align="center" rowspan="1" colspan="1">0.32</td><td align="center" rowspan="1" colspan="1">329,852.0</td><td align="center" rowspan="1" colspan="1">0.20</td><td align="center" rowspan="1" colspan="1">329,179</td></tr><tr><td rowspan="1" colspan="1">X-n936-k151</td><td align="center" rowspan="1" colspan="1">133,365.1</td><td align="center" rowspan="1" colspan="1">0.49</td><td align="center" rowspan="1" colspan="1">133,613.7</td><td align="center" rowspan="1" colspan="1">0.68</td><td align="center" rowspan="1" colspan="1">133,369.9</td><td align="center" rowspan="1" colspan="1">0.49</td><td align="center" rowspan="1" colspan="1">132,715</td></tr><tr><td rowspan="1" colspan="1">X-n957-k87</td><td align="center" rowspan="1" colspan="1">85,678.0</td><td align="center" rowspan="1" colspan="1">0.25</td><td align="center" rowspan="1" colspan="1">85,823.3</td><td align="center" rowspan="1" colspan="1">0.42</td><td align="center" rowspan="1" colspan="1">85,550.1</td><td align="center" rowspan="1" colspan="1">0.10</td><td align="center" rowspan="1" colspan="1">85,465</td></tr><tr><td rowspan="1" colspan="1">X-n979-k58</td><td align="center" rowspan="1" colspan="1">119,781.8</td><td align="center" rowspan="1" colspan="1">0.68</td><td align="center" rowspan="1" colspan="1">119,502.3</td><td align="center" rowspan="1" colspan="1">0.44</td><td align="center" rowspan="1" colspan="1">119,247.5</td><td align="center" rowspan="1" colspan="1">0.23</td><td align="center" rowspan="1" colspan="1">118,976</td></tr><tr><td rowspan="1" colspan="1">X-n1001-k43</td><td align="center" rowspan="1" colspan="1">73,001.0</td><td align="center" rowspan="1" colspan="1">0.89</td><td align="center" rowspan="1" colspan="1">73,051.4</td><td align="center" rowspan="1" colspan="1">0.96</td><td align="center" rowspan="1" colspan="1">72,748.8</td><td align="center" rowspan="1" colspan="1">0.54</td><td align="center" rowspan="1" colspan="1">72,355</td></tr><tr><td rowspan="1" colspan="1">Mean</td><td align="center" rowspan="1" colspan="1">63,275.5</td><td align="center" rowspan="1" colspan="1">0.22</td><td align="center" rowspan="1" colspan="1">63,285.8</td><td align="center" rowspan="1" colspan="1">0.21</td><td align="center" rowspan="1" colspan="1">63,206.1</td><td align="center" rowspan="1" colspan="1">0.11</td><td align="center" rowspan="1" colspan="1">63,106.7</td></tr><tr><td rowspan="1" colspan="1">Gap of mean</td><td align="center" rowspan="1" colspan="1" /><td align="center" rowspan="1" colspan="1">0.27</td><td align="center" rowspan="1" colspan="1" /><td align="center" rowspan="1" colspan="1">0.28</td><td align="center" rowspan="1" colspan="1" /><td align="center" rowspan="1" colspan="1">0.16</td><td align="center" rowspan="1" colspan="1" /></tr></tbody></table> </ephtml> </p>