Efficient Server Side Paging with the ASP.NET GridView Control

Posted by: Malcolm Sheridan , on 2/4/2009, in Category ASP.NET
Views: 157767
Abstract: The following article demonstrates how to use the ObjectDataSource control with the GridView control and Linq To SQL to create efficient server side ASP.NET GridView Paging.
Efficient Server Side Paging with the ASP.NET  GridView Control
 
When people talk about paging with the GridView control, they’re normally talking about the default, out of the box, vanilla paging that comes built in the GridView control. This is good for demos or small databases. But what happens to the performance of your website if you connect to a database with thousands of records? The application won’t fall over, but the decline in performance will be noticeable. That is because GridView paging retrieves all records from the SQL Server and displays only what is required. One of the best ways to handle this scenario is to use the GridView control with an ObjectDataSource control and specify the methods you will use for manual paging.
The following example will utilize Visual Studio 2008, LINQ to SQL and SQL Server 2008.
Open Visual Studio 2008 and choose File > New > Web > ASP.NET Web Application.
Paging
Add a new Linq To SQL file to the project and connect to the Northwind database. Drag the Customers table onto the designer. This is the table that will be referenced in the example. 
Paging
Now that the database layer exists, let’s turn our attention to the ObjectDataSource. The ObjectDataSource has two methods that are required for efficient paging. These are SelectMethod and SelectCountMethod. The following parameters are required for both methods:
int maximumRows, int startPageIndex, int startRowIndex
These values will be passed by the ObjectDataSource to the methods we define.
Add a new Class file to the project and name it Northwind.cs or Northwind.vb. This will be a partial class as this example will extend the functionality of the Northwind class defined in the Linq To SQL file. The following code is required for paging:
C#
using System.Linq;
 
namespace Paging
{
    public partial class Northwind
    {
        private NorthwindDataContext Context
        {
            get;
            set;
        }
 
        public Northwind()
        {
            Context = new NorthwindDataContext();
        }
 
        public int GetCustomerCount(int maximumRows, int startPageIndex, int startRowIndex)
        {
            return Context.Customers.Count();
        }
       
        public IQueryable<Customer> GetCustomers(int maximumRows, int startPageIndex, int startRowIndex)
        {
            var query = Context.Customers.Skip(startRowIndex).Take(maximumRows);
            return query;           
        }
    }
}
 
VB.NET
Imports System.Linq
 
Namespace Paging
      Partial Public Class Northwind
            Private privateContext As NorthwindDataContext
            Private Property Context() As NorthwindDataContext
                  Get
                        Return privateContext
                  End Get
                  Set(ByVal value As NorthwindDataContext)
                        privateContext = value
                  End Set
            End Property
 
            Public Sub New()
                  Context = New NorthwindDataContext()
            End Sub
 
            Public Function GetCustomerCount(ByVal maximumRows As Integer, ByVal startPageIndex As Integer, ByVal startRowIndex As Integer) As Integer
                  Return Context.Customers.Count()
            End Function
 
            Public Function GetCustomers(ByVal maximumRows As Integer, ByVal startPageIndex As Integer, ByVal startRowIndex As Integer) As IQueryable(Of Customer)
                  Dim query = Context.Customers.Skip(startRowIndex).Take(maximumRows)
                  Return query
            End Function
      End Class
End Namespace
The GetCustomers method accepts the arguments that are passed by the ObjectDataSource. It utilizes the Skip and Take methods to only return the rows needed for the GridView, not the whole contents of the table. The GetCustomerCount method returns a count of all the records in the table. That is all that is required for our methods. Now we need to connect this up to a GridView control and see the results.
Open the Default.aspx page. Drag a GridView control onto the page. Open the Smart Tag and select Choose Data Source. Select <New data source...>:
Data Source
A wizard will open and guide you through the setup. The first screen defines the Data Source Type:
DataSource Type
Select Object and click OK. The following screen asks you to choose a Business Object. Select Paging.Northwind and click Next:
Paging.Northwind
The following screen asks you to choose a Data Method. Select GetCustomers and click Next:
GetCust
The final screen asks you to define the parameters. Leave the Value blank for as it will be passed by the ObjectDataSource. Once this is done click Finish to close the wizard:
Params
The final step is to select the GridView and set AllowPaging to true. Then select the ObjectDataSource and set EnablePaging to true. The hard work is complete. To test this you can use SQL Profiler to see the SQL that is executed on the database. The following code is a sample of what is executed on the SQL Server:
SELECT [t1].[CustomerID], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Address], [t1].[City], [t1].[Region], [t1].[PostalCode], [t1].[Country], [t1].[Phone], [t1].[Fax]
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]) AS [ROW_NUMBER], [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
    FROM [dbo].[Customers] AS [t0]
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
 
The code that is generated utilises the ROW_NUMBER() function which limits the numbers of rows that are returned.
By handling the paging as shown in this example, your ASP.NET website will be able to display thousands of records efficiently in a GridView and let the user page through data without delays that are common when dealing with large data sets. This will not only improve performance on the web server, but it will also decrease the amount of data that is sent to the client. The source code of the article can be downloaded from here.
Give a +1 to this article if you think it was well written. Thanks!
Recommended Articles
Malcolm Sheridan is a Microsoft awarded MVP in ASP.NET, a Telerik Insider and a regular presenter at conferences and user groups throughout Australia and New Zealand. Being an ASP.NET guy, his focus is on web technologies and has been for the past 10 years. He loves working with ASP.NET MVC these days and also loves getting his hands dirty with jQuery and JavaScript. He also writes technical articles on ASP.NET for SitePoint and other various websites. Follow him on twitter @malcolmsheridan


Page copy protected against web site content infringement by Copyscape


User Feedback
Comment posted by Fatih on Wednesday, February 4, 2009 10:30 PM
Does not "Linqdatasource" already support serverside paging out of the box? Why not use that one?
Comment posted by Malcolm Sheridan on Thursday, February 5, 2009 6:53 AM
@Faith
Yes that is true.  The LinqDataSource does server side paging out of the box.  The downside to this is if you have existing business objects which return collections, they're not available to the LinqDataSource unless they return the System.Data.Linq.Table<> type.  The ObjectDataSource however does allow this and it more flexible in that scenario.
Comment posted by Malcolm Sheridan on Thursday, February 5, 2009 6:54 AM
@Faith
Yes that is true.  The LinqDataSource does server side paging out of the box.  The downside to this is if you have existing business objects which return collections, they're not available to the LinqDataSource unless they return the System.Data.Linq.Table<> type.  The ObjectDataSource however does allow this and it more flexible in that scenario.
Comment posted by babon on Thursday, February 5, 2009 10:08 AM
I was looking out for this functionality and found your article. Many thanks to you.
Comment posted by Brock Babuškov on Friday, February 6, 2009 8:56 PM
Best to read! I remember reading scott mitchell article where he propos solution using stored procedures. With just SQL and LINQ as your sample what additional advantage does I get?
Comment posted by Malcolm Sheridan on Saturday, February 7, 2009 7:57 AM
@Brock Babuškov
The main advantage is when you use LINQ to SQL, the SQL is generated for you, so you don't have to predefine a stored procedure to produce what the LINQ query does automatically.  
Comment posted by Marko on Saturday, February 7, 2009 4:13 PM
awesome, thank you ;)
Comment posted by Joseph Van Valen on Tuesday, February 17, 2009 2:43 PM
IS this approach exclusive to SqlServer 2005 and up? Will it work for SqlServer 2000 also? I don't believe the ROW_NUMBER function is supported there.
Comment posted by Malcolm Sheridan on Tuesday, February 17, 2009 10:05 PM
@Joseph Van Valen
This functionality will work with SQL Server 2000.  The SQL that is generated isn't as pretty or compact as what SQL Server 2005 generates, but it does work.

You're correct, the ROW_NUMBER function does not exist in SQL Server 2000.
Comment posted by sangam uprety on Saturday, March 14, 2009 4:39 AM
Thanks for the tips, it is really efficient, mostly if we do have thousands of row to be fetched from database!
Comment posted by Thanigainathan on Monday, March 16, 2009 1:29 PM
Hi,
This is very nice article . Thanks for letting this know.

Regards,
Thani
Comment posted by Biruk on Monday, March 16, 2009 2:49 PM
Nice Article! It would be even nicer if it has sorting capability as well.

BE
Comment posted by Jamie on Saturday, April 4, 2009 2:45 PM
Great article, many thanks.

You need to set the SelectCountMethod on the ObjectDataSource to GetCustomerCount (in your example) manually.  It seems obvious in retrospect, but it might confuse other beginners like myself.
Comment posted by Jim on Wednesday, April 15, 2009 8:30 AM
super article. I would like to know how to add a query to the class that filters the data such that it can still be paged.
Thanks

Jim
Comment posted by Malcolm Sheridan on Thursday, April 16, 2009 6:32 AM
@Jim
To add a query you need to update the GetCustomers method:
var query = Context.Customers.Where(o => o.Surname == "Search String").Skip(startRowIndex).Take(maximumRows);

Then you'll need to update the GetCustomerCount method to filter the same data.  That's it!
Comment posted by ssss on Friday, May 15, 2009 3:02 AM
sssss
Comment posted by sumeet on Tuesday, June 16, 2009 7:13 AM
good article! one query can we paginate without using ROW_NUMBER() in query? How?
Comment posted by alice on Friday, June 26, 2009 8:13 AM
Nice introduction! Being a freshman in blogging, I read lots of literature as far as what and how to write. http://www.ebook-search-queen.com/  helps me with the books, and your post with inspiration! Thanks!
Comment posted by bill on Wednesday, July 1, 2009 6:44 AM
I have a problem with the above. In SQL profiler the first sql code which is execute is "SELECT TOP(x)" where x is the number of paging records. Later on it then does the ROWNUMBER query and count query. Why is it doing a select top every time the page is loaded? Has anyone else tested this using the SQL profiler to see the exectued query?
Comment posted by bill on Wednesday, July 1, 2009 8:48 AM
Just to add - I am using listview and datapager for this - is this the problem?
Comment posted by Malcolm Sheridan on Wednesday, July 1, 2009 9:12 PM
@bill
That is what the IQueryable Skip and Take methods.  They use the ROWNUMBER so only the records you want to display on that page are returned, not the entire table.
Comment posted by bill on Thursday, July 2, 2009 7:54 AM
@ Malcolm - I understand that, but every time i go to a page its doing a SELECT TOP, SELECT COUNT and A SELECT ROW query. IE, three different queries where it should only be 2 - the count and the efficient t-sql. Any ideas?
Comment posted by Sobin on Monday, August 24, 2009 1:52 AM
Sir,
What if I want to customize my select query? My select query is now created dynamically based on the selection of the user in the UI(The query includes table joining also).Can I pass this as the select query to the object datasource at run time and fetch values and then bind to the gridview? Also the paging should work as in your great article....... Thanks
Comment posted by Guhan on Wednesday, September 9, 2009 1:14 AM
i will bind image in Gridview for Ex(three rows records)
Mr.Raja,Mr.bill,Mr.Dipak
Mr.BB,Mr.CC,Mr.DD
Mr.AB,Mr.AC,Mr.AD
how to bind in Gridview including Paging..


Comment posted by amigoface on Thursday, September 10, 2009 6:39 AM
hi

great article (short and efficient )

now i am highely interested to make some filters in my application
for example a date range filter at runtime
and some other filters

how it can be done with this approch ?

thanks and good day
Comment posted by Malcolm Sheridan on Sunday, September 27, 2009 3:47 AM
@amigoface,@Sobin
Yes you should be able to add an extra filter in the GetCustomers method to allow for searching by say the contact name.  You should try it and let me know.
Comment posted by Joe on Friday, November 6, 2009 11:46 AM
With enterprise level systems I really try to avoid Linq like it's the black plague. Stick with DAL->SP->DB and your application won't have as many scalability issues. If you don't believe me, just run the profiler against your typical Linq application and watch in horror :)
Comment posted by Malcolm Sheridan on Saturday, November 7, 2009 6:19 AM
@Joe
I will disagree with you on avoiding LINQ to SQL in the enterprise.  You can use stored procedures with LINQ to SQL, so if you have issues with the generated T-SQL, then use them.  I am a big fan of stored procedures, and I'm a big fan of LINQ to SQL.  
Comment posted by Kostya Batanin on Monday, November 16, 2009 7:45 PM
Nice article, thank you guys.

I find it very confusing that the SelectCount method has to take the same SelectParameters as the Select method since the SelectCount method does not use any of those parameters at all. But I think this is Microsoft's fault.

An alternative way of writing this code could be done like this.

ObjectDataSource:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
  SelectMethod="GetCustomers" TypeName="Paging.Northwind"
  EnablePaging="true" SelectCountMethod="GetCustomerCount"
  MaximumRowsParameterName="maximumRows"
  StartRowIndexParameterName="startRowIndex">
</asp:ObjectDataSource>

Select and SelectCount methods:

public int GetCustomerCount()
  {
    return Context.Customers.Count();
  }

  public IQueryable<Customer> GetCustomers(int maximumRows, int startRowIndex)
  {
    var query = Context.Customers.Skip(startRowIndex).Take(maximumRows);
    return query;
  }

This way there is no reason to specify unnecessary parameters in the signatures of the methods. I've also removed the startPageIndex parameter from the Select method as well, as far as I understand it's not needed for this particular example?

Cheers!
Comment posted by fdfsfdfdsfs on Thursday, January 5, 2012 7:23 AM
fvfsaf
Comment posted by vxvxvx on Thursday, January 5, 2012 7:24 AM
dsadsadasdasdasdasdasdasda
Comment posted by Sushant on Wednesday, August 21, 2013 5:10 AM
hi, i want to if i'm using DTO how can I implement this, since I need to format the data . please help
Comment posted by cvx on Friday, October 11, 2013 5:18 AM
fdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgddddddddddddddddddddddddddddddddddddddddddddfdghdhfghghhhhhgdddddddddddddddddddddddddddddddddddddddddddd

Post your comment
Name:  
E-mail: (Will not be displayed)
Comment:
Insert Cancel