diff --git a/.gitattributes b/.gitattributes
index 57fa5393..4429a7bf 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,75 @@
-/*.sql diff
-*.sql diff
+# Custom for Visual Studio
+*.ascx text
+*.cmd text
+*.ps1 text
+*.psm1 text
+*.coffee text
+*.config text
+*.cs text diff=csharp
+*.csproj text merge=union
+*.css text
+*.cshtml text
+*.htm text
+*.html text
+*.js text
+*.msbuild text
+*.resx text merge=union
+*.ruleset text
+*.Stylecop text
+*.targets text
+*.tt text
+*.txt text
+*.vb text
+*.vbhtml text
+*.vbproj text merge=union
+*.xml text
+*.xunit text
+*.sln text eol=crlf merge=union
+*.settings text
+
+# STANDARD TO MSYSGIT
+*.DOC DIFF=ASTEXTPLAIN
+*.DOC DIFF=ASTEXTPLAIN
+*.DOCX DIFF=ASTEXTPLAIN
+*.DOCX DIFF=ASTEXTPLAIN
+*.XLS binary
+*.XLS binary
+*.XLSX binary
+*.XLSX binary
+*.PPT binary
+*.PPTX binary
+*.DOT DIFF=ASTEXTPLAIN
+*.DOT DIFF=ASTEXTPLAIN
+*.PDF DIFF=ASTEXTPLAIN
+*.PDF DIFF=ASTEXTPLAIN
+*.RTF DIFF=ASTEXTPLAIN
+*.RTF DIFF=ASTEXTPLAIN
+
+
+*.JPG BINARY
+*.PNG BINARY
+*.GIF BINARY
+*.ICO BINARY
+*.BMP BINARY
+*.MDF BINARY
+*.LDF BINARY
+*.MAFF BINARY
+
+# EOL = lf
+*.HTM eol=lf merge=union
+*.HTML eol=lf merge=union
+*.MD eol=lf merge=union
+
+# T-SQL files
+*.sql eol=crlf merge=union
+/*.sql diff
+*.sql diff
+
+# linguist overrides
+*.cs linguist-language=C#
+*.ps1 linguist-language=Powershell
+*.psd1 linguist-language=Powershell
+*.psm1 linguist-language=Powershell
+*.R linguist-language=R
+*.sql linguist-language=TSQL
+
diff --git a/.github/bug_report.md b/.github/bug_report.md
new file mode 100644
index 00000000..cfaa64e5
--- /dev/null
+++ b/.github/bug_report.md
@@ -0,0 +1,16 @@
+---
+name: Bug report
+about: Create a bug report to help us improve
+
+---
+
+Include the version number of the script you're using.
+If it's not the current version, upgrade to the current version and test that before reporting a bug - we fix a lot of stuff in each new build.
+
+**What is the current behavior?**
+
+**If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via http://sqlfiddle.com**
+
+**What is the expected behavior?**
+
+**Which versions of SQL Server and which OS are affected by this issue? Did this work in previous versions of our procedures?**
diff --git a/.github/feature_request.md b/.github/feature_request.md
new file mode 100644
index 00000000..257aee58
--- /dev/null
+++ b/.github/feature_request.md
@@ -0,0 +1,25 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+
+---
+
+Fixes # .
+
+Changes proposed in this pull request:
+ -
+
+How to test this code:
+ -
+
+Has been tested on (remove any that don't apply):
+ - Case-sensitive SQL Server instance
+ - SQL Server 2008
+ - SQL Server 2008 R2
+ - SQL Server 2012
+ - SQL Server 2014
+ - SQL Server 2016
+ - SQL Server 2017
+ - SQL Server 2019
+ - Amazon RDS
+ - Azure SQL DB
diff --git a/.github/sql_help.md b/.github/sql_help.md
new file mode 100644
index 00000000..383c7685
--- /dev/null
+++ b/.github/sql_help.md
@@ -0,0 +1,9 @@
+---
+name: SQL HELP
+about: Describe your problem and get help
+
+---
+
+1. Operation system with detailed version (Windows, Ubuntu, Macos etc.). Example: `Microsoft Windows [Version 10.0.16299.248]`
+2. Relation database type (SQL Server preferred, Orcale, MySQL, PostgreSQL, SQLite etc.) with detailed version. Example: `Microsoft SQL Server 2017 (RTM-CU1) (KB4038634) - 14.0.3006.16 (X64) ... on Windows 10 Pro 10.0`
+3. Demo script (if necessary) to reproduce your problem.
diff --git a/.gitignore b/.gitignore
index 0693ab01..82eb1833 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-Sort
\ No newline at end of file
+Files
diff --git a/ADS/README.md b/ADS/README.md
new file mode 100644
index 00000000..fc138499
--- /dev/null
+++ b/ADS/README.md
@@ -0,0 +1,76 @@
+# Azure Data Studio (ADS)
+[Azure Data Studio](https://github.com/microsoft/azuredatastudio) is a open source cross-platform database tool for data professionals using the Microsoft family of on-premises and cloud data platforms on Windows, MacOS, and Linux.
+
+
+## Useful Links
+
+- [Official ADS List of Extensions](https://github.com/microsoft/azuredatastudio/wiki/List-of-Extensions)
+- [Latest Release](https://github.com/microsoft/azuredatastudio/releases/latest)
+
+## Download the latest Azure Data Studio release
+
+| Platform | Download Link |
+|--------------------------|-------------------------------------------------|
+| Windows User Installer | https://go.microsoft.com/fwlink/?linkid=2132348 |
+| Windows System Installer | https://go.microsoft.com/fwlink/?linkid=2132347 |
+| Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2132518|
+| macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2132519 |
+| Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2132349 |
+| Linux RPM | https://go.microsoft.com/fwlink/?linkid=2132351 |
+| Linux DEB | https://go.microsoft.com/fwlink/?linkid=2132350 |
+
+
+## Azure Data Studio extensions
+
+| Extension | Repository Link | Release Date | Version | .vsix download link | Description |
+|---------------------------------------|-----------------|--------------|----------|---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
+| [SQL Server Import] | [Github][1] | 2020-05-15 | 0.15.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2131183) | Streamlines the data import process by providing a wizard that simplifies copying flat files (`.csv`, `.txt`, `.json`) into a SQL Server table |
+| [PostgreSQL extension (preview)] | [Github][2] | 2020-03-26 | 0.2.6 | [GO](https://go.microsoft.com/fwlink/?linkid=2099772) | Enables users to connect, query, and manage Postgres databases with Azure Data Studio |
+| [Query Editor Boost][3] | [Github][3] | 2020-02-17 | 0.4.1 | [Github][https://github.com/dzsquared/query-editor-boost/releases/] | This extension adds several features helpful with query writing in Azure Data Studio |
+| [SQL Server Dacpac] | [Github][1] | 2020-06-04 | 1.5.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2099885) | Provides an easy-to-use wizarding experience to deploy and extract [`.dacpac`] files and import and export `.bacpac` files |
+| [SQL Server Profiler] | [Github][1] | 2019-12-18 | 0.11.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2099574) | Provides a simple SQL Server tracing solution similar to SSMS Profiler, allowing users to create and manage traces and analyze and replay trace results |
+| [SQL Server Agent] | [Github][1] | 2020-04-16 | 0.47.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2099884) | Helps manage and troubleshoot SQL Server Agent jobs and configuration (early preview) |
+| SQL Server Admin Pack | [Github][1] | 2019-03-14 | 0.0.2 | [GO](https://go.microsoft.com/fwlink/?linkid=2099889) | A collection of popular database administration extensions to help manage SQL Server |
+| [SQL Server Schema Compare] | [Github][1] | 2020-06-17 | 1.5.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2099886) | Provides an easy-to-use experience to compare the schemas from [`.dacpac`] files and databases and apply the changes from source to target |
+| [PowerShell Extension] | [Github][6] | 2020-04-15 | 2020.4.0 | [GO](https://go.microsoft.com/fwlink/?linkid=2099773) | Provides rich PowerShell language support for Azure Data Studio |
+| [SandDance for Azure Data Studio] | [Github][7] | 2020-06-24 | 3.0.0 | [Vsix](https://github.com/microsoft/SandDance/releases/latest) | Provides interactive visualizations that help users explore, understand, and present their data |
+| [SandDance for VSCode][8] | [Github][7] | 2020-06-24 | 3.0.0 | [Vsix][8] | Provides interactive visualizations that help users explore, understand, and present their data for `.csv` or `.tsv` files |
+| [Server Reports][1] | [Github][1] | 2020-04-27 | 0.2.2 | [GO][https://go.microsoft.com/fwlink/?linkid=2099768] | Provides useful information about the server's performance, such as: DB Space Usage, DB Buffer Usage, CPU Utilization, Backup Growth Trend |
+| [whoisactive][1] | [Github][1] | 2020-04-27 | 0.1.4 | [GO][https://go.microsoft.com/fwlink/?linkid=2099774] | Displays insights from sp_whoisactive, a useful tool for activity monitoring and troubleshooting, as graphs and tasks inside an Azure Data Studio |
+| [SQL Database Projects extension] | [Github][1] | 2020-04-27 | 0.3.0 | [GO][https://go.microsoft.com/fwlink/?linkid=2143820] | Extension for developing SQL databases in a project-based development environment |
+
+
+## Azure Data Studio Articles
+
+| Title | Author | Modified |
+|------------------------------------------------------------|------------------------------------------|------------|
+| [Integrating Azure Data Studio with Git and GitHub] | Rajendra Gupta | 2020-07-03 |
+| [Working with Git components in Azure Data Studio] | Rajendra Gupta | 2020-07-09 |
+
+[1]:https://github.com/Microsoft/azuredatastudio
+[2]:https://github.com/microsoft/azuredatastudio-postgresql
+[3]:https://github.com/dzsquared/query-editor-boost/
+[4]:https://github.com/dzsquared/query-editor-boost/releases/latest
+[5]:https://github.com/microsoft/azuredatastudio-postgresql
+[6]:https://github.com/PowerShell/vscode-powershell/
+[7]:https://github.com/Microsoft/SandDance
+[8]:https://marketplace.visualstudio.com/items?itemName=msrvida.vscode-sanddance
+[`.dacpac`]:https://docs.microsoft.com/en-us/sql/relational-databases/data-tier-applications/data-tier-applications
+
+[SQL Server Import]:https://docs.microsoft.com/en-us/sql/azure-data-studio/sql-server-import-extension
+[PostgreSQL extension (preview)]:https://docs.microsoft.com/en-us/sql/azure-data-studio/postgres-extension
+[SQL Server Dacpac]:https://docs.microsoft.com/en-us/sql/azure-data-studio/sql-server-dacpac-extension
+[SQL Server Profiler]:https://docs.microsoft.com/en-us/sql/azure-data-studio/sql-server-profiler-extension
+[SQL Server Agent]:https://docs.microsoft.com/en-us/sql/azure-data-studio/sql-server-agent-extension
+[SQL Server Compare]:https://docs.microsoft.com/en-us/sql/azure-data-studio/schema-compare-extension
+[PowerShell Extension]:https://docs.microsoft.com/en-us/sql/azure-data-studio/powershell-extension
+[SandDance for Azure Data Studio]:https://docs.microsoft.com/en-us/sql/azure-data-studio/sanddance-extension
+[SQL Database Projects extension]:https://docs.microsoft.com/en-gb/sql/azure-data-studio/extensions/sql-database-project-extension
+
+[Integrating Azure Data Studio with Git and GitHub]:https://www.sqlshack.com/integrating-azure-data-studio-with-git-and-github/
+[Working with Git components in Azure Data Studio]:https://www.sqlshack.com/working-with-git-components-in-azure-data-studio/
+
+
+### TODO Links
+
+- https://github.com/microsoft/azuredatastudio/issues/2752#issuecomment-487315692
diff --git a/Articles/Arrays and Lists in SQL Server 2008.htm b/Articles/Arrays and Lists in SQL Server 2008.htm
deleted file mode 100644
index 880f43b4..00000000
--- a/Articles/Arrays and Lists in SQL Server 2008.htm
+++ /dev/null
@@ -1,1087 +0,0 @@
-
-
-
-
-
-
-Arrays and Lists in SQL Server 2008
-
-
-
Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters
In the public forums for SQL Server, you often see people asking How do I use
-arrays in SQL Server? Or Why does SELECT * FROM tbl WHERE col IN (@list)
-not work? The short answer to the first question is that SQL Server does not have
-arrays – SQL Server has tables. Upto SQL Server 2005, there was no way to pass a table
-from a client, but you had to pass a comma-separated string or similar to SQL Server, and then you would unpack that list into a table in your stored procedure.
-
This changed with SQL 2008. The
- advent of table-valued parameters makes it dirt simple to pass a comma-separated list to SQL Server. In this article I will introduce a simple and perfectly reusable class for this task. Table-valued parameters are also great when you want to load data to SQL Server through a stored procedure; you no longer have to build XML documents that you shred in SQL Server. In this article I show you how to load a master-detail file into SQL Server tables in two different ways: read the entire file into memory or stream it directly. What I am not showing – because it's so simple – is that if you already have your data in a DataTable object, you can pass that DataTable as the value for your TVP.
-The examples are in C# and VB .NET, using the SqlClient API, and the main body of the article covers this environment. For other environments such as Java or Entity Framework, there is a quick overview of what is possible at the end of the article.
-
There is an accompanying article: Arrays and Lists in SQL Server 2005 and Beyond
- (and an even older for SQL 2000) where I in detail describe various methods to pass a list of values in a
-string and unpack them into a table in SQL Server. For the hard-core geeks there are two performance indexes, one labelled SQL 2008 and an older labelled SQL 2005, where I relate data from performance tests of the methods described in
-the articles, including table-valued parameters.
Some of the sample code in this article refers to the Northwind database.
- This database does not ship with SQL Server, but you can download the script to
-install it from Microsoft's web site.
You have a number of key values, identifying a couple of rows in a table, and
- you want to retrieve these rows. If you are the sort of person who composes
- your SQL statements in
- client code, you might have something that looks like this:
-
cmd.CommandText = "SELECT ProductID, ProductName FROM Northwind.dbo.Products " & _
- "WHERE ProductID IN (" & List & ")"
-reader = cmd.ExecuteReader()
-
List is here a string variable that you somewhere have assigned a comma-separated list, for instance "9,12,27,39".
-
-
This sort of code is bad practice, because you should never interpolate
- parameter values into your query string. (Why, is beyond the scope of this
- article, but I discuss this in detail in my article
- The Curse and Blessings of Dynamic SQL,
- particularly in the sections on
- SQL Injection and Caching
- Query Plans.)
-
-
Since this is bad practice, you want to use stored
- procedures. However, at first glance you don't seem to find that any apparent
- way to do this. Many have tried with:
-
CREATE PROCEDURE get_product_names @ids varchar(50) AS
- SELECT ProductID, ProductName
- FROM Northwind.dbo.Products
- WHERE ProductID IN (@ids)
-
But when they test:
-
EXEC get_product_names '9,12,27,37'
-
The reward is this error message:
-
Server: Msg 245, Level 16, State 1, Procedure get_product_names, Line 2
-Syntax error converting the varchar value '9,12,27,37' to a column
-of data type int.
-
This fails, because we are no longer composing an SQL statement dynamically,
- and @ids
- is just one value in the IN clause. An IN clause that could also read:
-
... WHERE col IN (@a, @b, @c)
-
Or more to the point, consider this little script:
-
CREATE TABLE #csv (a varchar(20) NOT NULL)
-go
-INSERT #csv (a) VALUES ('9,12,27,37')
-INSERT #csv (a) VALUES ('something else')
-SELECT a FROM #csv WHERE a IN ('9,12,27,37') -- Returns one row.
-
So now you know why col IN (@list) does not work. Or rather: you know now that it works differently from
-your expectations. In the following we will look into how to solve this kind
-of problem with table-valued parameters.
-
Before I go on, I should add that sometimes you may find yourselves in the (very
-unfortunate) situation when you have a delimited list in a table
-column in your database. To unpack such a list, you would need any of the methods that I discuss in
-Arrays
-and Lists for SQL 2005 and Beyond;
-TVPs cannot help you here.
Let's first look at how to use TVPs in T‑SQL without involving a client. To be able to declare a TVP, you first need
- to create a table type like this:
-
CREATE TYPE integer_list_tbltype AS TABLE (n int NOT NULL PRIMARY KEY)
-
That is, after CREATE TYPE you specify the type name followed by AS TABLE and then
-comes the table definition,
-using the same syntax as CREATE TABLE. You cannot use everything you can use with CREATE
-TABLE, but you can define PRIMARY KEY, UNIQUE and CHECK constraints, you can use IDENTITY and DEFAULT definitions,
-and you can define computed columns. Once you have this table type, you can use it
-to declare table variables:
-
DECLARE @mylist integer_list_tbltype
-
However, you cannot use the type with CREATE TABLE (it could have been nutty with temp tables!), nor can you use it for
-the declaration of the return table in a multi-step table function. The raison d'être for table types is to make it possible to declare table-valued parameters for stored procedures or user-defined functions. Here is one example:
-
CREATE PROCEDURE get_product_names @prodids integer_list_tbltype READONLY AS
- SELECT p.ProductID, p.ProductName
- FROM Northwind.dbo.Products p
- WHERE p.ProductID IN (SELECT n FROM @prodids)
-
The body of the procedure brings no surprises. The code looks just as it would have if @prodids had been a local
-table variable. The parameter declaration on the other hand includes a keyword hitherto not seen in this
-context: READONLY. This keyword means what it says: you cannot modify the contents of the table parameter in any
-way in the procedure. As an aside, this restriction makes TVPs far less useful than they could have been;
-often you want to pass data between stored procedures as I discuss in my article How to
-Share Data Between Stored Procedures. However, for the task at hand, passing data from a client, the READONLY
-restriction is no major obstacle.
(Here I use the new syntax for INSERT that permits me to specify values for more than one row in the VALUES clause.)
-You can also use TVPs with sp_executesql:
-
DECLARE @mylist integer_list_tbltype,
- @sql nvarchar(MAX)
-SELECT @sql = N'SELECT p.ProductID, p.ProductName
- FROM Northwind..Products p
- WHERE p.ProductID IN (SELECT n FROM @prodids)'
-INSERT @mylist VALUES(9),(12),(27),(37)
-EXEC sp_executesql @sql, N'@prodids integer_list_tbltype READONLY', @mylist
-
There are a few peculiarities, though. This does not work:
-
EXEC get_product_names NULL
-
but results in this error message:
-
Msg 206, Level 16, State 2, Procedure get_product_names, Line 0
-Operand type clash: void type is incompatible with integer_list_tbltype
-
It is quite logical when you think of it: NULL is a scalar value, not a table value. But what do you think about
-this:
-
EXEC get_product_names
-
You may expect this to result in an error due to the missing parameter, but instead this runs and produces an empty
-result set! The same happens with:
-
EXEC get_product_names DEFAULT
-
The scoop is that a table-valued parameter always has the implicit default value of an empty table. Whether this is
-good or bad can be disputed, but if there were to be explicit default values, Microsoft would have to invent a lot of
-syntax for it. And in most cases, the default value you want is probably the empty table, so it is not entirely unreasonable.
-
Permissions
-
One thing with table types which is not apparent is that you need permission
- to use a table type. This can be demonstrated in this script:
-
CREATE USER testuser WITHOUT LOGIN
-go
-EXECUTE AS USER = 'testuser'
-go
-DECLARE @p integer_list_tbltype
-go
-REVERT
-go
-DROP USER testuser
-
(What we do here is to create a loginless user, and then impersonate that
-user. This is a quick way to test permissions. For more details on impersonation,
-see my article Giving Permissions through Stored
-Procedures.)
-
The output from this script is puzzling:
-
Msg 229, Level 14, State 5, Line 1
-The EXECUTE permission was denied on the object 'integer_list_tbltype',
-database 'tempdb', schema 'dbo'.
-
But the message is to be taken by the letter. To be able to use a table type,
-you need to have EXECUTE permission on the type. (This does not apply to normal
-scalar types, but it does apply to user-defined CLR types.) To grant permission
-on a type, the syntax is:
-
GRANT EXECUTE ON TYPE::integer_list_tbltype TO testuser
-
The TYPE:: prefix is needed to specify the object class.
-
Restrictions
-
It is maybe not so surprising that you cannot use table-valued parameters across linked servers, given that there are many restrictions with linked servers. But it does not stop there: you cannot even use table-valued parameters across databases. If you try something like:
-
USE tempdb
-go
-CREATE TYPE tobbe AS TABLE (a int NOT NULL PRIMARY KEY)
-go
-CREATE PROCEDURE tobbe_sp @t tobbe READONLY AS
- SELECT a FROM @t
-go
-USE otherdb
-go
-CREATE TYPE tobbe AS TABLE (a int NOT NULL PRIMARY KEY)
-go
-DECLARE @t tobbe
-EXEC tempdb..tobbe_sp @t
-
The error message is:
-
Msg 206, Level 16, State 2, Procedure tobbe_sp, Line 0
-Operand type clash: tobbe is incompatible with tobbe
-
And if you try
-
CREATE PROCEDURE tobbe_sp @t otherdb.dbo.tobbe READONLY AS
- SELECT a FROM @t
-
You get the message:
-
Msg 117, Level 15, State 2, Procedure tobbe_sp, Line 1
-The type name 'otherdb.dbo.tobbe' contains more than the maximum number of prefixes. The maximum is 1.
-
This some awkward message informs us that the data type for a parameter cannot be a three-part name with a database component.
-
You cannot create stored procedures or
- user-defined functions in the CLR that
- take a table-valued parameter. But the
- other way works: you can call a T‑SQL procedure with a TVP from a CLR procedure, using the same mechanisms you use from a client and which is what we will
-look at next.
Passing values to TVPs from ADO .NET is very straightforward, and requires very little extra code compared to passing
- data to regular parameters. You need .NET Framework 3.5 SP1 or higher to have support for TVPs. You can only use TVPs with SqlClient; you cannot use TVPs with the classes in the System.Data.OleDb or System.Data.Odbc namespaces.
-
The specifics can be summarised as:
-
-
For the data type you specify SqlDbType.Structured.
-
You specify the name of the table type in the TypeName property of the parameter.
-
You set the Value property of the parameter to something suitable.
-
-
Exactly what is suitable then? There is an MSDN topic that suggest that the three choices are List<SqlDataRecord>, a DataTable or a DbDataReader. It turns out that this is not the full story. I have not been able – and nor have I really tried – to find the exact requirements, but it seems that you can pass anything that implements IEnumerable and IDataRecord, and then DataTable is a special case that goes beyond that. Exactly what you can use and not use is not particularly interesting. I would suggest that in practice you will use one of these four:
-
-
List<SqlDataRecord>.
-
Custom-written classes that implement IEnumerable<SqlDataRecord> and IEnumerator<SqlDataRecord>.
-
DataTable.
-
A DbDataReader of some sort.
-
-
Of these, you would use the first two for general-purpose programming. The only reason to pass a DataTable is that you already have the data in such an object. If you have the data somewhere else – in a file, on a wire etc – there is no reason to fill a DataTable when you can use a List which is more lightweight. On the same token, the only reason you would use a DbDataReader, is because you have a DbDataReader anyway. That is, if the data for your TVP comes from an Oracle database, you can pass an OracleDataReader directly – no need to populate a List or a DataTable.
-
For this reason, in this article I focus on the first two alternatives, and all examples use either a custom-written class or a List<SqlDataRecord>.
-
One caveat about DataTable and DbDataReader: if your TVP has an IDENTITY column or a computed column, you may not be able to get these columns to work with your objects. In this case, you can always use a List or a custom-written iterator, since this gives you access to some more options to define the metadata for the TVP, and I will briefly cover how to do this later.
-
About the Sample Code
-
Before we move on, I like to give a quick introduction to the demo files that accompany this article. They are compiled in two zip files, one with the demos in C# and one with the same demos in Visual Basic .NET. Use the language that is the most convenient to you. In the text itself, I sometimes show the code in C# and sometimes in VB .NET. If you are more comfortable with the language I'm not using for the moment, please refer to the corresponding file in the other language. For instance, if I refer to TVPDemo.DemoHelper.cs, you can rely on that there is also a TVPDemo.DemoHelper.vb file in the zip file with the VB code.
-
Beside the source code in C# and VB .NET, the zip files also include an SQL script and a file with sample data for one of the demos. There is also a file compile.bat you can use to compile the files. There are however no project/solution files for Visual Studio, as that goes a little above my head.
-
I will cover the code in the zip files as we arrive to the examples where they belong. There is however one class I like to highlight here and now, and that is the TVPDemo.DemoHelper class. This class includes some utility routines that are of little interest for the article as such. There is one thing I like to highlight, though, to wit the connection string:
You may have to change it to fit your environment. Particularly, if you only have Express Edition installed, you should probably use .\SQLEXPRESS for Data Source instead of the single dot.
-
In the article, the code mainly appears without comments, since I explain the code in the text. However, in the source files, the code is thoroughly commented.
-
Disclaimer: My expertise is in SQL Server, and I only write .NET code left-handedly. While I have done my best to adhere what I think is best practice, you may see things which makes you think "I would never do something like that". It is not unlikely that you will be right. Please let me know in such case!
-
Sending a Comma-Separated List to SQL Server
-
The Arrays and Lists articles take their base in the problem of using a comma-separated list in SQL Server. Programmers often encounter them, because there are form controls that produce such lists. (Or so the .NET programmers I know keep telling me.) The other articles in this series present solutions to transform these lists into a table in SQL Server. Here I'm showing you a much better solution: transform the list in the client and pass it to a table-valued parameter. SQL Server should spend its resources on reading and writing tabular data, not string processing. Not only are the resources better spent this way, the solution is also much simpler and cleaner with help of the class CSV_splitter that I will introduce.
-
Using the CSV_splitter Class
-
Using the CSV_splitter class is extremely simple. All your application code sees is a call to the constructor and that's it. Here is an example where we call a stored procedure with a TVP. We use the table type and the stored procedure I used in the T‑SQL section above.:
-
CREATE TYPE integer_list_tbltype AS TABLE (n int NOT NULL PRIMARY KEY)
-go
-CREATE PROCEDURE get_product_names @prodids integer_list_tbltype READONLY AS
- SELECT p.ProductID, p.ProductName
- FROM Northwind.dbo.Products p
- WHERE p.ProductID IN (SELECT n FROM @prodids)
-
In the set of demo files you find CSVDemo.vb which includes the
-procedure CSV_to_SP that calls get_product_names, and it is no more complicated
-than this.
-
Private Sub CSV_to_SP()
-
- Using cn As SqlConnection = TVPDemo.DemoHelper.SetupConnection(), _
- cmd As SqlCommand = cn.CreateCommand()
-
- cmd.CommandType = CommandType.StoredProcedure
- cmd.CommandText = "dbo.get_product_names"
-
- cmd.Parameters.Add("@prodids", SqlDbType.Structured)
- cmd.Parameters("@prodids").Direction = ParameterDirection.Input
- cmd.Parameters("@prodids").TypeName = "integer_list_tbltype"
- cmd.Parameters("@prodids").Value = _
- new TVPDemo.CSV_splitter("9,12,27,37")
-
- Using da As new SqlDataAdapter(cmd), _
- ds As new DataSet()
- da.Fill(ds)
- TVPDemo.DemoHelper.PrintDataSet(ds)
- End Using
- End Using
-End Sub
-
To a large extent, very typical code to call a stored procedure. We first set up a connection and create a command object. We move on to state which stored procedure to call, and we define the single parameter that get_product_names accepts. Finally, we invoke the procedure, and in this example I have chosen to use DataAdapter.Fill together with a method in my DemoHelper class that prints the result set. In a real-world scenario you may prefer to use ExecuteReader or whatever fits you.
-
(I assume that most readers are acquainted with Using, but in case you are not: this statement permits you to declare a variable
- that is accessible in the enclosed block, and when the block exits, any Dispose method of the class will be invoked. This is
- highly recommendable for SqlConnection and SqlCommand objects. If you just leave it to garbage collection to take care of
-them, you may spew SQL Server with a lot of extra connections. Using is available in C# as well, but spelt using.)
-
The interesting part is the four statements that set up the parameter. The first adds the parameter and defines the type:
Specifying the direction of the parameter is somewhat superfluous; since TVPs are read-only, Input is the only choice. Nevertheless, I have included it for clarity. Next we introduce the name of the table type in SQL Server, by setting the special parameter property TypeName:
Strictly speaking, this is not necessary when calling a stored procedure, since SQL Server knows the type anyway.
- However, it is definitely best practice to always specify the type. For
- one thing, this will give you a clearer error message when there is a mismatch between the structure you pass from the client and the table type in SQL Server.
-
And now – drum roll! – it's time pass an actual value to the TVP:
-
cmd.Parameters("@prodids").Value = new TVPDemo.CSV_splitter("9,12,27,37")
-
You create a new CSV_splitter object which you pass as the parameter value. And as the parameter to the constructor you pass your list of comma-separated integers. Since this is a sample, the list is a constant; in practical code you would of course have a variable here.
-
All you need to do to get this to work is to put the CSV_splitter class in place. Which is very simple, since the code is included in the download files. You only need to change the namespace to fit your local conventions. The joy is that this class is perfectly reusable, and while I will cover the internals of the class in a second, all you really need to know if you are in a hurry is this:
-
-
The class assumes a list of integers – more precisely Int64. If you want a list of strings, you will need to clone the class.
-
The constructor takes an optional parameter which permits you to specify a different delimiter. (But it has to be a single-character delimiter.)
-
Empty elements in the string are ignored.
-
-
You might ask: what if I don't use stored procedures? Can I still use TVPs and the CSV_splitter class? Sure enough. The file CSVDemo.vb also includes this routine:
-
Private Sub CSV_to_SQL()
-
- Using cn As SqlConnection = TVPDemo.DemoHelper.SetupConnection(), _
- cmd As SqlCommand = cn.CreateCommand()
-
- cmd.CommandType = CommandType.Text
- cmd.CommandText = " SELECT p.ProductID, p.ProductName " & _
- " FROM Northwind.dbo.Products p " & _
- " WHERE p.ProductID IN (SELECT n FROM @prodids)"
-
- cmd.Parameters.Add("@prodids", SqlDbType.Structured)
- cmd.Parameters("@prodids").Direction = ParameterDirection.Input
- cmd.Parameters("@prodids").TypeName = "integer_list_tbltype"
- cmd.Parameters("@prodids").Value = _
- New TVPDemo.CSV_splitter("1, 11, 76, 34")
-
- Using da As new SqlDataAdapter(cmd), _
- ds As new DataSet()
- da.Fill(ds)
- TVPDemo.DemoHelper.PrintDataSet(ds)
- End Using
- End Using
-End Sub
-
It is very similar to CSV_to_SP. The one thing to observe is this line:
When you use CommandType.Text, it is compulsory to specify the name of the table type. For stored procedures you can leave it out, but as I noted above, best practice is to always include the type name.
-
Inside the CSV_splitter Class
-
As I discussed above, the object you pass as the value for a TVP must implement IEnumerable<SqlDataRecord> and IEnumerator<SqlDataRecord>. I guess most .NET programmers understand what this means. In case you don't: an interface consists of a number of members with well-defined signatures, but without any code. To implement an interface you write a class that includes the members of the interface with exactly those signatures – now with code added. To this you can add other members as you like. You don't have to worry too much about inadvertently leaving something out – the compiler will inform you of any small detail you forget. Some interfaces feature over 20 members, but these two interfaces are quite slender with in total four methods and one property.
-
While the main purpose is to feed a table-valued parameter, it is worth noting that since CSV_splitter implements IEnumerable, you can use the class in this way.
-
foreach (SqlDataRecord rec in new TVPDemo.CSV_splitter("1,2,3,4")) {
- Console.WriteLine (rec.GetInt64(0).ToString());
-}
-
Not that this is particularly useful, but it gives an understanding what this is all about.
-
I will now walk you through the inside of the CSV_splitter class, which you find in TVPDemo.CSV_splitter.cs. For reference, here is the using section:
-
using System;
-using System.Collections.Generic;
-using Microsoft.SqlServer.Server;
-
Nothing startling here. (Most people would probably add a few more namespaces, but I refer to some classes in full for clarity.) The class declaration looks like this:
-
public class CSV_splitter : IEnumerable<SqlDataRecord>,
- IEnumerator<SqlDataRecord>
-
-
That is, this class implements both IEnumerable and IEnumerator. This is possibly disputable; some people may prefer to have one class per interface, but I could not really see the point in this. (I did say that I'm normally not a .NET programmer, didn't I?)
-
The class has a few private member variables:
-
string input; // The input string.
-char delim; // The delimiter.
-int start_ix; // Start position for current list element.
-int end_ix; // Position for the next list delimiter.
-SqlDataRecord outrec; // The record we use to return data.
-
input is the comma-separated list itself and delim is the delimiter. start_ix and end_ix keep track of where in the string we are. The most interesting member is outrec. As the snippet above shows, each iteration produces an instance of SqlDataRecord and as we shall see, it comes from this outrec variable.
-
To permit for an alternate delimiter, the class has two constructors which in the C# version fork off to a common private method.
First the constructor saves the input parameters into the private members. Next comes the key part: the constructor creates an instance of SqlDataRecord that matches the table type for the table-valued parameter. The constructor for SqlDataRecord accepts an array of SqlMetaData objects. (Both these classes are in the Microsoft.SqlServer.Server namespace.) These classes are closely related: the raison d'être for SqlMetaData is exactly to describe a single column in an SqlDataRecord and ultimately a column in SQL Server.
-
SqlMetaData has a whole slew of constructors to accommodate the various data types in SQL Server and I cover some of the variations as we encounter them. For the CSV splitter we use the simplest constructor of them all and pass only the column name and the data type. You may note that the column we define in SqlMetaData differs from the column in integer_list_tbltype on two accounts:
-
-
The column names are not the same. I have made them different on purpose to show that what names you put in the column definition with SqlMetaData has no importance in the context of passing data to TVPs.
-
The data type is BigInt, while in the table type the column is int. I chose to use BigInt to make the class as general as possible. That is, you can use the class with any integer data type. (Of course, I could have used bigint in the table type as well, but since product IDs in Northwind are int, I used that type.) As we shall see later, this generalism comes with a price.
-
-
The last line in the constructor is a call to Reset which is one of the methods required by the IEnumerator interface. Its task is to initiate start_ix and end_ix, and we set them to values that indicate that we have not starting scanning the string yet:
Next comes the part of the class that implements IEnumerable. This interface requires the implementation of a single method: GetEnumerator, which should return an object that implements IEnumerator. Since the class implements both interfaces, it returns itself:
What is a little tricky is that the interface IEnumerable<T> requires that you also implement the non-generic version (and for some reason, the latter cannot be public).
-
The interface IEnumerator requires you to implement three methods MoveNext, Reset and Dispose and one read-only property, Current. We have already looked at Reset, and Dispose is only there to permit you to explicitly close files or SQL connections without waiting for garbage collection. That leaves MoveNext and Current as the two interesting members.
-
The purpose of MoveNext is to permit the caller to move to the next value in the iteration which the caller can retrieve with Current. MoveNext is a boolean function and should return true as long as there is a new item to retrieve with Current. If the caller moves past the last item, the method should return false.
The first action is to set start_ix to be one step ahead of end_ix. This is followed by a while loop of which the purpose is to skip adjacent delimiters. (Imagine that you have a string like "1,2,,4".) If we at this point find that start_ix is equal to the length of the string, we are past the last character in the string, and we return false to the caller to indicate that the iteration is over.
-
Else start_ix is now at the first character in the next value, and we set end_ix to be at the delimiter following this value. If there is no delimiter after the last value, we pretend that there is one any way. Since there is at least one more value in this case, we return true.
-
That is, all we do here is to position start_ix and end_ix. In the Current property we make use of these values. This property should return the same type as IEnumerable<T> was instantiated with, that is, SqlDataRecord. Here is how our Current property looks like:
-
public SqlDataRecord Current {
- get {
- string str = this.input.Substring(this.start_ix,
- this.end_ix - this.start_ix);
- this.outrec.SetInt64(0, Convert.ToInt64(str));
- return this.outrec;
- }
-}
-
We first extract the
- substring
-between start_ix and end_ix - 1, and then we convert that value to Int64 to set the only column in the outrec which we then return. From a logical point of view, the code could just as well have read:
-
public SqlDataRecord Current {
- get {
- string str = this.input.Substring(this.start_ix,
- this.end_ix - this.start_ix);
- SqlDataRecord outrec = new SqlDataRecord(
- new SqlMetaData("nnnn", System.Data.SqlDbType.BigInt));
- outrec.SetInt64(0, Convert.ToInt64(str));
- return outrec;
- }
-}
-
And there would have been no need to have outrec as a variable on class level, but it seemed to me slightly more efficient to create the record once and reuse it.
-
When you implement IEnumerable<T> you must also implement a non-generic version, and we just let it invoke the generic version.
-What you have seen in MoveNext and Current is fairly normal string-parsing code. There is certainly room for all sorts of improvements: multi-character delimiters, alternate delimiters, trim blanks. (A string like "1,2, ,3" will cause a run-time error in Convert.ToInt64.) If you want to handle comma-separated lists of strings, you can easily clone the class – or make the type a parameter or make the class generic. I leave all these ideas as exercises to the reader.
-
To conclude, you can see that implementing a custom-iterator to feed a TVP is by no means any advanced matter, and we will leverage on this later in this article.
Before we move on to the next demo, we will learn some more theory, mainly from the perspective of performance. The other Arrays and Lists articles discuss performance, so why not this one? In the first two subsections we will look at how TVPs performs compared to methods where we send a comma-separated list or similar to SQL Server. In the last subsection, we will discuss whether the TVP should have a primary key, and how we can improve performance when we know have data that is sorted. In passing, we will also learn how to work with IDENTITY columns and computed columns in the table type.
As you have understood from the fact that I devoted an article solely to table-valued parameters, this is the
- preferred method for passing a list of values to SQL Server. One important reason is simplicity: writing a stored procedure that
- accepts a table-valued parameter is straightforward. Not that using a list-to-table function is a big deal, but relational databases are centred around tables. And as you have seen, passing a value to
- a TVP from ADO .NET is
- a very simple affair. TVPs also have the advantage that you can add constraints to the table type to enforce uniqueness or some other type of contract. Nor do you have to worry in your database code about format errors in a comma-separated list.
-
Does this also mean that this method gives you the best performance? In general, yes. In each and
- every case? No. When running the tests for the performance appendix, I did find situations where other methods
- outperformed TVPs. However, I believe that in the long run TVPs will you give you better performance than any other
- method. There are two reasons for this:
-
Data is already in table format. With all other methods, cycles need to be spent on parsing a character string
- to get the data into table format. In my tests, the fixed-length method performed better in some tests with integer data. Indeed, this method just chops up a fixed-length string reading from a
- table of numbers, so it is very similar to reading from a table variable. However, TVPs have one more ace up the sleeve:
-
The optimizer gets a clue. For all other methods, the optimizer has no understanding of what is going on.
- In many situations you get a useful plan nevertheless, but with methods based on inline T‑SQL functions the optimizer often lose grip
- entirely and produce a plan that is nothing but a disaster. And even if the plan is useful, it may not be the most optimal because the optimizer
- has no idea how many rows your list of values will produce, which means that if you use the list in a query with other
- tables, row estimates are likely to be way off.
-
This is different for table-valued parameters. Just like table variables, table-valued parameters do not have
- distribution statistics, but there is nevertheless one piece of information: cardinality. That is, the first time you call a procedure that
- takes a TVP, the optimizer sniffs the TVP – as sniffs all other parameters – and the optimizer sees that
- the TVP has so and so many rows. This gives the optimizer better odds for good estimates for the number of rows in
- the rest of the query.
-
Not that it is perfect: There is the general problem that the sniffed value may be atypical. (For a closer discussion on parameter sniffing, see my article Slow in the Application, Fast in SSMS?.) And it
- is not always correct information leads to the best plan; in the performance appendix for SQL 2008 you can read about a case where SQL Server chooses an incorrect plan, when it has more accurate cardinality information. But as I discuss in the appendix this concerns only a window of the input size. Furthermore, cardinality is far from sufficient in all cases. Consider the query:
-
SELECT * FROM Orders WHERE CustomerID IN (SELECT custid FROM @custids)
-
Say that there are four values in @custids. If they are just four plain customers,
- seeking the non-clustered index on CustomerID is good. But if they are the top four customers accounting for 40 % of the volume, you want a table scan. But
- since a TVP does not have distribution statistics, the optimizer
- cannot distinguish the cases. The workaround is
- simple: bounce the data over a temp table and take benefit of that temp tables have distribution statistics. Since that workaround
- is the same as for all list-to-table functions, you may argue that when you need to do this, there is no special
- performance advantage of TVPs.
A reasonable question is: does TVP incur more calling overhead than regular parameters? The answer is yes. In my
- tests I found that passing 50 000 integer values to an unindexed TVP from ADO .NET took
- 40-50 ms compared to
- 20-35 ms for a comma-separated list. (Note that these numbers apply to the specific hardware that I used for the tests.) For a TVP with a primary key, the overhead was around 150 ms.
-
While this overhead may seem considerable, you need to put it in perspective
- and look at the total execution time, and in most cases, the server-side
- execution time exceeds the numbers in the previous paragraph with a wide
- margin. As just one
- data point: in my test, the server-side execution time for my join test over
- 50 000 list elements was 213 ms for a non-indexed TVP, and the best non-TVP method (fixed-length
- binary input) needed 420 ms. The performance appendix for SQL 2008 has more details.
-
As for the extra overhead when there is a primary key, we will discuss this more closely in the next section.
-
Primary Keys and Sorted Data – Looking Closer at the SqlMetaData constructors
-
The SqlMetaData class has no less than 15 constructors. They control in total 17 read-only properties – i.e., once set you can't change them. To a great extent which constructor to use depends on the data type. For a string or a binary column you use a constructor that includes the maxLength parameter, for a decimal column you need one that exposes scale and precision etc. I am not covering all constructors and properties here, but I refer you to the .NET documentation.
-
Here I will discuss four parameters to control special properties for table-valued parameters. They appear in several constructors, and a constructor either has all four or none of these parameters. Here is the C# declaration for the simplest of these constructors:
-
public SqlMetaData(
- string name,
- SqlDbType dbType,
- bool useServerDefault,
- bool isUniqueKey,
- SortOrder columnSortOrder,
- int sortOrdinal)
-
The first of these parameters, useServerDefault, serves a different purpose than the other three. You may guess from the name what it is all about, but your guess may not be exactly right. When you specify this parameter as true, SQL Server will ignore any value you set for the column but always set the column to its default value. Sounds corny? Here is the scoop: the SqlDataRecord must have exactly as many columns as your table type has. But what if your table type includes an IDENTITY column or a computed column which you cannot assign values to? It is for that sort of columns you specify useServerDefault as true. It's also useful for columns with a default of newid() or NEXT VALUE FOR. (The latter is for sequences, a feature added in SQL 2012.)
-
The other three parameters, isUniqueKey, columnSortOrder and sortOrdinal are related and they exist in order to permit a performance enhancement. But before we can discuss what purpose they serve and how they work, we need to take one step back and look at the declaration for the table type we used with get_product_names.
-
CREATE TYPE integer_list_tbltype AS TABLE (n int NOT NULL PRIMARY KEY)
-
The table type has a primary key, and thus it assumes that the values in the TVP are unique. Is this a good thing? To start with, when you design your tables, you should always look for a natural primary key, and this includes table variables and temp tables. One reason is that if you write your code under the assumption that a certain column or a set of columns is unique, you should also state this in the table declaration as an assertion. If your assumption is incorrect, your code will die early and not produce incorrect results.
-
But there is also a performance aspect. Let's look at the code for get_product_names again:
-
CREATE PROCEDURE get_product_names @prodids integer_list_tbltype READONLY AS
- SELECT p.ProductID, p.ProductName
- FROM Northwind.dbo.Products p
- WHERE p.ProductID IN (SELECT n FROM @prodids)
-
For SQL Server, the query is equivalent to:
-
SELECT p.ProductID, p.ProductName
-FROM Northwind.dbo.Products p
-JOIN @prodids ps ON ps.n = p.ProductID
-
If the table type would not have a primary key, this would not be true. Instead the equivalent query would be:
-
SELECT DISTINCT p.ProductID, p.ProductName
-FROM Northwind.dbo.Products p JOIN @prodids ps ON ps.n = p.ProductID
-
That is, SQL Server would have to add an operator somewhere to remove duplicate values. This comes with an extra cost. Of course, for four values in the TVP this is entirely negligible, but assume that there are has 50 000 values. Now the difference is starting to be measurable, and you can see this in the performance appendix.
-
However, as I noted above, I found in my performance tests that there is considerable difference in overhead when passing data to a TVP with a primary key and one without. And indeed, from what I have said this far, this is a zero-sum game. If the TVP has a primary key, there is no need for a Sort or Hash operator in the query above to remove duplicates. But when the data arrives, SQL Server must sort it so that it can be stored according to the index. Only if the TVP is used in more than one query, there is a performance gain with the primary key.
-
If we don't know anything about the data we are passing to SQL Server, we can't do any better. But what if we know that the data already is sorted according to the index? This is where the three parameters isUniqueKey, columnSortOrder and sortOrdinal come into play. They permit you to specify that the data is sorted and how. isUniqueKey should be true in this case. columnSortOrder can take any of the values SortOrder.Unspecified, SortOrder.Ascending and SortOrder.Descending. (The SortOrder enum is in the System.Data.SqlClient namespace.) For sorted data you would use any of the latter two; Unspecified is the value you use when you use a constructor with these parameters to be able to specify true for useServerDefault. Finally, SortOrdinal specifies where in the unique key the column appears. Use 0 for the first column in the key, 1 for the second etc. Use ‑1 for SortOrder.Unspecified. (If you want to see an example on this, stay tuned. They will be coming.)
-
You need to use these parameters with care. It goes without saying that you need to ensure that the data you have really is sorted. If you sort the data or create the sort keys yourself, you have control, but it may be precarious to rely on data coming from an outside source to be sorted. If you are mistaken, SQL Server will not let you get away with it, but produce an error message like this one.
-
Msg 4819, Severity 16, State: 1, Procedure , Line no: 0
-Cannot bulk load. The bulk data stream was incorrectly specified as sorted or the
-data violates a uniqueness constraint imposed by the target table. Sort order
-incorrect for the following two rows: primary key of first row: (gamma), primary
-key of second row: (delta).
-Msg 3621, Severity 0, State: 0, Procedure , Line no: 1
-The statement has been terminated.
-
There is another thing to watch out for, and in this case SQL Server will stay silent. Inspired by what we have read, we may get the idea to change the constructor for the CSV_splitter class, so that outrec is created in this way:
-
this.outrec = new SqlDataRecord(
- new SqlMetaData("nnnn", SqlDbType.BigInt,
- false, true, SortOrder.Ascending, 0));
-
If you make this change and then run the CSVdemo program, you will find that it runs just fine. But wait! In the procedure CSV_to_SQL there is this line:
-
cmd.Parameters("@prodids").Value = New TVPDemo.CSV_splitter("1, 11, 76, 34")
-
Data is out of order, so an error message is to be expected. Still we did not get any. Why? Recall that CSV_splitter uses BigInt to be as reusable as possible, while the table type has an integer column. Because of the data-type mismatch, SQL Server decides to ignore the information that the data is sorted and sorts it anyway. If you change the type to SqlDbType.Int and try again, you will get the error message above.
-
Thus, to be sure that SQL Server does not decide to sort behind your back, you should make sure that you create the SqlDataRecord object so that it matches your table type exactly. To be precise, you can have a mismatch as long as SQL Server feels that it can trust the conversion to not affect the sort order. If you want to be sure, the simplest way to test is to send data out of order. If you get error message 4819, the plot worked, else it did not. You can also use Profiler, and include the event Performance:Show Statistics XML Profile and run the application. If you also add SP:StmtCompleted you will see the insertion into the TVP as encrypted text. This helps you to locate the query plan, and it should not include a Sort or Hash operator.
-
Character data is particularly difficult in this context. The first thing to note is that the length must match. That is, if you define the column in .NET as
-
new SqlMetaData("charcol", SqlDbType.NVarChar, 120,
- false, true, SortOrder.Ascending, 0);
-
but the target column is nvarchar(20), SQL Server will ignore your sorting parameters and sort the data. Another complication is that character data can be sorted in many ways, that is, according to different collations. If you look through the constructors for SqlMetaData you will find two parameters localeID and compareOptions which seem like they could be used to specify the collation. I tested this, but I found that they had no effect. From what I can tell, SQL Server assumes that character data is always sorted according to the database collation. If the data you send with the TVP is sorted according to a different collation, you will get an error once there is a deviation. You can of course specify an explicit collation for the column in the table type, and it may save you from error messages about data being non-unique. However, my testing indicates that if a key column has a different collation from the database collation, SQL Server will ignore the sorting parameters and always sort the incoming data stream.
-
Loading Data through Table-Valued Parameters
-
We will look at one more example. This time we will see how we can use table-valued parameters to easily load lots of data to SQL Server. There are several other options for this task: BCP, BULK INSERT, SQL Server Integration Services and the SqlBulkCopy class. But none these options permit you to send data directly to a stored procedure. We will learn two ways to do this. The plain way where we read the file into memory and a more efficient way where we stream the file to the TVP. I've taken the opportunity to cover some ground beyond the topic of TVPs, so you may learn some other tricks in this chapter as well.
-
The Setup
-
For this example we will look at loading data into these two tables:
-
CREATE TABLE Albums (AlbumID int IDENTITY,
- Artist nvarchar(200) NOT NULL,
- Title nvarchar(200) NOT NULL,
- ReleaseDate date NULL,
- Length time(0) NULL,
- CONSTRAINT pk_Albums PRIMARY KEY (AlbumID)
-)
-
-CREATE TABLE Tracks (AlbumID int NOT NULL,
- TrackNo tinyint NOT NULL,
- Title nvarchar(200) NOT NULL,
- Length time(0) NULL,
- CONSTRAINT pk_Tracks PRIMARY KEY (AlbumID, TrackNo),
- CONSTRAINT fk_Tracks_Albums FOREIGN KEY(AlbumID)
- REFERENCES Albums(AlbumID)
-)
-
We have a music collection, and Albums includes information about an album, and Tracks details the tracks for the albums. All and all, a fairly typical master-detail scenario. These table definitions, as well as other SQL code in this chapter, are inclued in the file fileloaddemo.sql which you find among the demo files.
-
Our task is to load new albums with their tracks into the database, from the file Albums.csv which is also included in the demo files. Here are some sample lines from this file:
-
A,Adrian Belew,Desire Caught By the Tail,,33:25
-T,1,Tango Zebra,458553,
-T,2,Laughing Man,332460,
-T,3,The Gypsy Zurna,187141,
-T,4,Portrait of Margaret,240718,
-T,5,Beach Creatures Dancing Like Cranes,197564,
-T,6,At the Seaside Cafe,113319,
-T,7,Guernica,127216,
-T,8,"""Z""",338416,
-A,"Al di Meola, John McLaughlin, Paco de Lucia",Friday Night in San Francisco,8/10/1981,42:09
-T,1,A. Mediterranean Sundance-B. Rio Ancho,708780,
-T,2,Short Tales of the Black Forest,535484,
-T,3,Frevo Rasgado,486608,
-T,4,Fantasia Suite,541492,
-T,5,Guardian Angel (McLaughin),247066,
-A,David Bowie,"""Heroes""",14/10/1977,40:56
-T,1,Beauty and the Beast,217182,
-
The first field defines whether the line contains an album (A) or a track (T). On an Album line, the fields are Artist. Album title, Release date and Length in minutes and seconds. On a Track line, the fields are Track number, Track title and Length in milliseconds. That is, the fields are the same as in the tables, except for one thing: there is no AlbumID. It is part of our loading task to assign this id.
-
As for the format, you can note that some fields are quoted in double quotes, but this happens only when the field includes a comma or a double quote. Some fields include a plethora of double quotes; this happens when the double quotes are part of the value. (You may recall that the name of David Bowie's classic album from 1977 really is "Heroes" with quotes and all.)
-
An aside: you cannot load this file with BCP or BULK INSERT in a simple way. To start with, they cannot really cope with master-detail formats at all, but you would have to load the data into a staging table to be able to separate albums and tracks. And this is only possible it there is an equal number of fields on each line. As it happens, Excel – which I used to create this file – was kind to add an extra comma at the end of the Tracks lines, so this is not an issue here. Instead, the real killer is the inconsistent quoting. As long as a field is consistently quoted through a file, you can load quoted fields with BCP or BULK INSERT, if you use a format file that specifies delimiters that include the quotes. But in this file where only some values are in quotes and where these values include the field delimiter, BCP and BULK INSERT are completely lost. These tools are designed to read a binary stream, and do they not do string parsing.
-
We need two table types and a stored procedure. The table types mirror the file with one addition:
-
CREATE TYPE Albums_tbltype AS TABLE
- (TempID int NOT NULL,
- Artist nvarchar(200) NOT NULL,
- Title nvarchar(200) NOT NULL,
- ReleaseDate date NULL,
- Length time(0) NULL,
- PRIMARY KEY (TempID)
-)
-
-CREATE TYPE Tracks_tbltype AS TABLE
- (TempID int NOT NULL,
- TrackNo tinyint NOT NULL,
- Title nvarchar(200) NOT NULL,
- Length time(0) NULL,
- PRIMARY KEY (TempID, TrackNo)
-)
-go
-
Since there is no album ID in the file, the loading process must assign new ids. As long as we have the file, we know which tracks that go with which albums, since the file is ordered. But when we load the data into different tables that order is lost, since tables are unordered objects by definition. For this reason, both table types include a column TempID, which is a temporary ID that uniquely identifies an album during the loading process.
-
The stored procedure is worth dwelling on for an extra second:
-
CREATE PROCEDURE LoadAlbums @Albums Albums_tbltype READONLY,
- @Tracks Tracks_tbltype READONLY AS
-
-DECLARE @idmap TABLE (TempID int NOT NULL PRIMARY KEY,
- AlbumID int NOT NULL UNIQUE)
-
-SET XACT_ABORT ON
-BEGIN TRANSACTION
-
-MERGE Albums A
-USING @Albums T ON 1 = 0
-WHEN NOT MATCHED BY TARGET THEN
- INSERT(Artist, Title, ReleaseDate, Length)
- VALUES(T.Artist, T.Title, T.ReleaseDate, T.Length)
-OUTPUT T.TempID, inserted.AlbumID INTO @idmap(TempID, AlbumID)
-;
-
-INSERT Tracks(AlbumID, TrackNo, Title, Length)
- SELECT i.AlbumID, T.TrackNo, T.Title, T.Length
- FROM @Tracks T
- JOIN @idmap i ON i.TempID = T.TempID
-
-COMMIT TRANSACTION
-go
-
To start with, the procedure sets up a user-defined transaction so that we don't end up loading only the albums. While I am a strong advocate of error handling, I don't use TRY-CATCH here. In the interest of brevity, I let it suffice with SET XACT_ABORT ON to make sure that any error aborts and rolls back the transaction. (If you want directions for error handling, please see my article Error Handling in SQL Server 2005 and Later.)
-
What may surprise the reader is the MERGE statement. This is a pure insert operation (for the sake of the example, I am completely ignoring that the album may already be in the database), so why use MERGE? And with that weird condition 1 = 0? By using this condition we make sure that no rows in the source match the target. That is, all rows in @Albums will match the condition WHEN NOT MATCHED BY TARGET, and thus all rows in @Albums will be inserted into Albums. Or in another words, this is a complicated way of saying:
Why all this? The answer lies in the OUTPUT clause. We need to map the TempID in @Albums to the IDENTITY values generated for AlbumID in Albums, so that we can insert the correct AlbumID values into Tracks, and this is the purpose of the table variable @idmap. If you try to make the mapping with INSERT, you will find that this does not work, because in the OUTPUT clause for INSERT you only have access to the columns in the target table. This is different with MERGE; with MERGE you have access to both target and source columns in the OUTPUT clause.
-
When inserting into Tracks there is no need for extra fireworks, and we can use plain INSERT where we pick up the album IDs from the@idmap table.
-
Take One: Reading the File Into a List
-
There are two example programs to load the file, and we will first look at fileloaddemo1.cs which reads the file into two List<SqlDataRecord>, one for albums and one for tracks. This program starts of with a number using clauses, of which one may be surprising:
System is needed as always of course, and System.Data includes SqlDBType and more. SqlClient is what this text is all about. We need System.Collections.Generic for the class List<T>, and as noted previously we get SqlDataRecord and SqlMetaData from Microsoft.SqlServer.Server. But staunch fans of C# may be appalled by the appearance of Visual Basic here. As I pointed out above, the format of this file is somewhat complex. While I could have written the code to parse the lines on my own, I said to myself "this file has been generated by Excel; there must be code out there that performs this task". So I did a search on Google, and I was quickly pointed to the class TextFieldParser that exists in the namespace Microsoft.VisualBasic.FileIO.
-
If you want to use this class from C#, you need to add a reference to Microsoft.VisualBasic.dll. VB programmers get this DLL automatically.
-
Fileloaddemo1 includes two routines of interest, read_file and load_albums. The latter first calls read_file and then calls the stored procedure LoadAlbums. We will look at read_file first. Here is the declaration:
-
private static void read_file (string filename,
- out List<SqlDataRecord> albums,
- out List<SqlDataRecord> tracks) {
-
It accepts a file name and return album and track data in the two List parameters. The first few lines in read_file are pretty dull:
The two items from System.Globalization are some jazz needed when we parse the date and time fields, I'll return to them later. The variable album_no is more interesting: this variable will feed the TempID columns in the table parameters.
-
The next two statements are significantly hotter, because this is where we set up the SqlMetaData definitions that map to our table types:
-
SqlMetaData[] albums_tbltype =
- { new SqlMetaData("id", SqlDbType.Int, false,
- true, SortOrder.Ascending, 0),
- new SqlMetaData("artist", SqlDbType.NVarChar, 200),
- new SqlMetaData("album", SqlDbType.NVarChar, 200),
- new SqlMetaData("released", SqlDbType.Date),
- new SqlMetaData("length", SqlDbType.Time, 0, 0)};
-
-SqlMetaData[] tracks_tbltype =
- { new SqlMetaData("id", SqlDbType.Int, false,
- true, SortOrder.Ascending, 0),
- new SqlMetaData("trackno", SqlDbType.TinyInt, false,
- true, SortOrder.Ascending, 1),
- new SqlMetaData("title", SqlDbType.NVarChar, 200),
- new SqlMetaData("length", SqlDbType.Time, 0, 0)};
-
In difference to the CSV_splitter class, we don't create any SqlDataRecord at this point; since we are adding to a List, we will need a new SqlDataRecord object each time. Whence, we only create the SqlMetaData arrays in advance.
-
Here we see some more examples of using the special parameters for the SqlMetaData constructor to specify that the data is sorted. For albums_tbltype there is a single column in the sort key, while for tracks_tbltype there is a composite key and as you see we specify that both columns are unique. We set the parameter sortOrdinal to 0 and 1 respectively. Admittedly, to some extent this contradicts what I said previously about ensuring that the data is sorted. The id columns are no problem; we are generating the id values in our code and we have full control over them. But the track numbers comes from the file and in a real-world scenario, we may not be able to rely on that the track numbers come in numeric order.
-
Here are also examples of SqlMetaData constructors where we specify the length for the string columns. For the time columns we need to use a constructor that exposes scale and precision, even if time only has one of them.
-
In the C# version we create the lists at this point:
-
albums = new List<SqlDataRecord>();
-tracks = new List<SqlDataRecord>();
-
(In the VB code this happens in load_albums since VB did not seem to like it when I passed uninitialised variables.)
-
Next we open the file by creating a TextFieldParser object:
-
TextFieldParser fp = new TextFieldParser(filename,
- System.Text.Encoding.Default);
-
In total, this class offers eight different constructors. For this demo, we use one where we pass the name of the file (there are also constructors accept a Stream object instead) and the encoding. The default for the TextFieldParser is UTF-8, but CSV files from Excel appears to always be ANSI files. (And since one of the tracks from "Heroes" is called Neuköln it matters for the sample file.)
The TextFieldParser can handle both delimited files and fixed-length formats. Here we set up the file to be comma-delimited. We also specify that there are fields enclosed in quotes. Yet an option, that we don't make use of, is to specify comment tokens.
-
Once this is done, we have completed the preparations and can read the file.
-
while (! fp.EndOfData) {
- String[] fields = fp.ReadFields();
-
The ReadFields method consumes the next set of fields and returns them in a string array. (If the file does not comply with the expected format, the method will throw an exception, but I have not included any error handling to keep the example down in length.) Depending on fields[0] we take different paths:
-
if (fields[0] == "A") {
- SqlDataRecord album_rec = new SqlDataRecord(albums_tbltype);
If we have an A in the first field, we create an SqlDataRecord that aligns with the table type for albums, and then we go on and populate the fields, using various Set methods of the SqlDataRecord class. Above, we save the temporary id (which we first increment), the artist name and the album title. As you see, we refer to the columns by number, starting on 0. If you prefer to access the columns by name, you need to use the GetOrdinal method:
Note here that you need to use the name you specified in the SqlMetaData constructor; you cannot use the names in the table type.
-
The ReleaseDate column is a little more complex for two reasons: it is permitted to be NULL, and date formats are always problematic. Here is the code:
We use TryParseExact to see if there is a legit date in the field. It just so happens that the dates in the file are on the format DD/MM/YYYY, because I generated the CSV file with my regional settings set to English (Australia). (Had I used my regular Swedish settings, the CSV file would have had semicolon as delimiter, which would have been less interesting with regards to the double quotes.) When reading dates from text input – be that a file or text box – you should never assume that all dates are well-formed. There may be a mix of different date formats, and there may be completely bogus dates like 1992-02-30. If the parsing succeeds, we set the date column in album_rec, else we set it to NULL.
-
When I composed this demo program, the release date proved to be the most difficult to get right. It turned out that it is not sufficient to specify an exact date format. When I tested the program, I had switched back to Swedish settings where the date format is YYYY-MM-DD. Eventually I found that I could not leave the third parameter null, but I had to use an explicit value to state that I wanted to ignore regional settings, whence this no_culture. no_datetime_style is the value for an enum parameter which is mandatory with TryParseExact.
-
The last album field is the length, which is handled similarly:
It first calls read_file to fill albums and tracks, and then it calls the stored procedure LoadAlbums. The only difference to the code we saw for comma-separated list is this line:
-
cmd.Parameters["@Albums"].Value = albums;
-
That is, we pass a List object and not an custom-written iterator.
-
While this code may seem trivial, it is worth emphasising the flexibility. Here we pass a List object, but if we would change our mind and want to pass something else, we can do that very easily. In fact, this is exactly what we will do in a second.
-
Take Two: Streaming the File
-
The sample file that comes with this article is short; there are only five albums. But imagine that you have a very large file, tens of megabytes in size. With the solution above, you would have to read the entire file into memory before you start sending the data to SQL Server. Is that really necessary? No, and you might already have guessed how we can approach this. If we can write a custom-iterator for a comma-separated list, we should be able to write an iterator that reads the file, so that SqlClient can send a row to SQL Server as soon as we have read it.
-
Now, the fact that this is a mater-detail file makes this a little more complicated. If we have two TVPs, we would need two iterator classes, one for albums and one for tracks. And these classes would both have to read the file, which thus would be read twice. To avoid this, I decided to use a single table type that can accommodate both row types. Depending on how different headers and details are from each other, this can be quite messy. Thankfully, our albums-and-tracks example is quite forgiving in this sense. (At this point I can sense objection from some readers who think that it is possible to have two table types and still only read the file once. Permit me to come back to this idea after I have gone through the streaming example.)
-
Here is the table type (which you also find in fileloaddemo.sql):
-
CREATE TYPE AlbumTracks_tbltype AS TABLE
- (TempID int NOT NULL,
- TrackNo tinyint NOT NULL,
- Artist nvarchar(200) NULL,
- Title nvarchar(200) NOT NULL,
- ReleaseDate date NULL,
- Length time(0) NULL,
- PRIMARY KEY (TempID, TrackNo),
- CHECK (TrackNo = 0 AND Artist IS NOT NULL
- OR TrackNo > 0 AND Artist IS NULL
- AND ReleaseDate IS NULL)
-)
-
I did not add the A/T field to the table type; instead I use TrackNo as the distinguishing column; TrackNo = 0 indicates that this is a header row. I've also added constraints to state rules that are unique for album rows (Artist must be present) and track rows (must not have Artist and ReleaseDate). Such CHECK constraints help to detect errors in the client program.
-
To use this table type, there is a second stored procedure, similar to the one we looked at previously:
-
CREATE PROCEDURE LoadAlbums_2 @AlbumTracks AlbumTracks_tbltype READONLY AS
-
-DECLARE @idmap TABLE (TempID int NOT NULL PRIMARY KEY,
- AlbumID int NOT NULL UNIQUE)
-
-SET XACT_ABORT ON
-BEGIN TRANSACTION
-
-MERGE Albums A
-USING (SELECT TempID, Artist, Title, ReleaseDate, Length
- FROM @AlbumTracks
- WHERE TrackNo = 0) AT ON 1 = 0
-WHEN NOT MATCHED BY TARGET THEN
- INSERT(Artist, Title, ReleaseDate, Length)
- VALUES(AT.Artist, AT.Title, AT.ReleaseDate, AT.Length)
-OUTPUT AT.TempID, inserted.AlbumID INTO @idmap(TempID, AlbumID)
-;
-
-INSERT Tracks(AlbumID, TrackNo, Title, Length)
- SELECT i.AlbumID, AT.TrackNo, AT.Title, AT.Length
- FROM @AlbumTracks AT
- JOIN @idmap i ON i.TempID = AT.TempID
- WHERE AT.TrackNo > 0
-
-COMMIT TRANSACTION
-
In demo files, there is a sample program fileloaddemo2.vb that calls this procedure. Here is the code that calls LoadAlbums_2:
-
Private Sub LoadAlbums
-
- Using cn As SqlConnection = TVPDemo.DemoHelper.SetupConnection(), _
- cmd As SqlCommand = cn.CreateCommand()
-
- cmd.CommandType = CommandType.StoredProcedure
- cmd.CommandText = "dbo.LoadAlbums_2"
-
- cmd.Parameters.Add("@AlbumTracks", SqlDbType.Structured)
- cmd.Parameters("@AlbumTracks").Direction = ParameterDirection.Input
- cmd.Parameters("@AlbumTracks").TypeName = "AlbumTracks_tbltype"
-
- cmd.Parameters("@AlbumTracks").Value = _
- new TVPDemo.AlbumReader("Albums.csv")
-
- cmd.ExecuteNonQuery()
- End Using
-End Sub
-
You have seen this pattern a couple of times now. What is different from fileloaddemo1 is that there is no call to read_file, but instead there is an instantiation of the class TVPDemo.AlbumReader. This is analogous to when we worked with comma-separated strings of integers, and when we look inside TVPDemo.AlbumReader.vb there is a mix of what we saw in CSV_splitter.cs and fileloaddemo1.cs. The most startling difference may be that this time I show the code is in Visual Basic... So I will rash through the code fairly quickly. The important takeaway is that writing a class that streams a file to a TVP is by no means complicated.
-
Here is the Imports section:
-
Imports System
-Imports System.Data
-Imports System.Collections.Generic
-Imports Microsoft.SqlServer.Server
-Imports Microsoft.VisualBasic.FileIO
-
Again Microsoft.VisualBasic.FileIO is featured, but I like to remind you that the choice of using the TextFieldParser class is due to the specific file format. While it is likely to be useful for CSV files in general, you may have a file format for which it is less suitable. Particularly, it is not that you need to use this class only because you are streaming to a TVP.
-
The class declaration:
-
Public Class AlbumReader
- Implements IEnumerable(Of SqlDataRecord), _
- IEnumerator(Of SqlDataRecord)
-
is no different from the CSV_splitter. I implement both interfaces in the same class. There are some global members:
-
Dim AlbumNo As Integer ' Current album.
-Dim fp As TextFieldParser ' Our file-reading class.
-Dim Outrec As SqlDataRecord ' The record we use to return data.
-
-Dim NoCulture As New System.Globalization.DateTimeFormatInfo
-Dim NoDateTimeStyle As System.Globalization.DateTimeStyles = _
- System.Globalization.DateTimeStyles.None
-
AlbumNo is the TempID for the current album and fp is the object for the file we are reading. Outrec is a single output record that I reuse just like in the CSV_splitter class. Then follows the System.Globalization jazz.
-
The constructor:
-
Public Sub New (FileName As String)
- Me.AlbumNo = 0
-
- Me.Outrec = new SqlDataRecord( _
- New SqlMetaData("id", SqlDbType.Int, false, _
- true, System.Data.SqlClient.SortOrder.Ascending, 0), _
- New SqlMetaData("trackno", SqlDbType.TinyInt, false, _
- true, System.Data.SqlClient.SortOrder.Ascending, 1), _
- New SqlMetaData("artist", SqlDbType.NVarChar, 200), _
- New SqlMetaData("title", SqlDbType.NVarChar, 200), _
- New SqlMetaData("released", SqlDbType.Date), _
- New SqlMetaData("length", SqlDbType.Time, 0, 0))
-
- Me.fp = New TextFieldParser(FileName, System.Text.Encoding.Default)
- fp.TextFieldType = FieldType.Delimited
- fp.Delimiters = New String() {","}
- fp.HasFieldsEnclosedInQuotes = True
-End Sub
-
Again, we take the occasion to state that our TVP is sorted to save SQL Server from sorting when the data arrives. The last few lines set up the TextFieldParser class for reading a CSV file.
-
Next comes GetEnumerator and in Visual Basic, the two functions must have different names:
-
Function GetEnumerator_nongeneric As System.Collections.IEnumerator _
- Implements System.Collections.IEnumerable.GetEnumerator
- Return Me
-End Function
-
Public Function GetEnumerator_generic As IEnumerator (Of SqlDataRecord) _
- Implements IEnumerable (Of SqlDataRecord).GetEnumerator
- Return Me
-End Function
-
Observe here that this is identical to CSV_splitter.vb, and trust me: the implementation in AlbumReader.cs looks exactly to what I showed you for the CSV_splitter class. That is, as long as you follow the pattern with implementing IEnumerable and IEnumerator in the same class, GetEnumerator will always look the same.
-
The Reset method is somewhat brutal:
-
Public Sub Reset Implements IEnumerator(Of SqlDataRecord).Reset
- Throw New NotImplementedException("AlbumReader.Reset")
-End Sub
-
I could not think of anything to put here. Well, I guess a proper Reset method could restart the file, but I'm not sure I want that to happen. I chanced to see a blog post that used this pattern, which I decided to copy. Since there is no reason why SqlClient would have to call Reset when you pass a TVP, you could always implement Reset this way. (But try to remember to change the class name in the argument to the exception constructor.)
-
Next we look at the Current property, which is very straightforward here, even if there is some level of noise due to the requirement to have both a generic and a non-generic implementation:
-
ReadOnly Public Property Current_generic As SqlDataRecord _
- Implements IEnumerator (Of SqlDataRecord).Current
- Get
- Return Me.Outrec
- End Get
-End Property
-
-ReadOnly Property Current_nongeneric As Object _
- Implements System.Collections.IEnumerator.Current
- Get
- Return Me.Outrec
- End Get
-End Property
-
In the CSV_splitter class, I put the final extraction in Current, but in this class I have put all work to fill Outrec in MoveNext, and that is probably you will do most of the time.
-
Now, if you think of what we have seen so far, there are really only two things you have craft from scratch when you implement a new custom-iterator for a TVP: the constructor and MoveNext. As for GetEnumerator, Reset and Current, you simply clone from your previous effort. Oh, I forgot: you need to implement Dispose as well:
-
Public Sub Dispose Implements IDisposable.Dispose
- Me.fp.Close()
- Me.fp.Dispose()
-End Sub
-
This time, there is something real to dispose of.
-
Left to show is the implementation of MoveNext, which is very much a rehash of the loop in read_file above, why I only include an outline to highlight the one thing that is different: since this is MoveNext we should return False if we are at end of file, else True.
-
Public Function MoveNext As Boolean _
- Implements IEnumerator (Of SqlDataRecord).MoveNext
-
- If Me.fp.EndOfData Then _
- Return False
-
- Dim Fields() As String = fp.ReadFields()
-
- If Fields(0) = "A" Then
- ' ...
- Else If Fields(0) = "T" Then
- ' ...
- Else
- Throw New Exception("Illegal record type '" & fields(0) & "'.")
- End If
-
- Return True
-End Function
-
We have now looked at two classes that both feed a TVP. While they have lot of common when we look at the code, there is nevertheless one important distinction. The CSV_splitter class is intended to be a general class that you can reuse in many places. AlbumReader, on the other hand, is specific to a certain problem. You would have to write a new class for every new file or data source you read. And as you have seen, this is no big deal at all. Just remember that if there is a DbDataReader class for your data source, you should pass a data-reader object to your TVP directly; no need to write your own class in this case.
-
Performance Considerations
-
Before you start to stream files all over town, I like to add some words of caution. While the pattern I have shown here is very practical and neat, it is not the most optimal. It will serve you well for large files – but not for very large files. I wanted to prove that a streamed file is not buffered in the client, why I wrote a very stupid file reader which just chopped up the file into chunks of 1024 bytes and passed it to a TVP with a binary(1024) column. I was able to load an 80 MB file this way, although it took some time. (But the memory consumption in the client stayed flat, proving that data was indeed streamed.) When I tried a 500 MB file, my reward was a timeout message and a TDS error. I never investigated very closely what the underlying reason was, but I assume that I hit a resource limit. Maybe I triggered an auto-grow of the log file which took too long.
-
An advantage with TVPs is that they make it simple to implement a polished well-packaged solution using stored procedures. But keep in mind that the table parameter is an intermediate storage. This intermediate storage may be in memory or on disk, depending on how SQL Server decides to handle it, but it is intermediate storage. For this reason, it will always be more efficient if you can load the data directly into the target table through BCP, BULK INSERT or the SqlBulkCopy class. As I noted previously, BCP and BULK INSERT are not able to handle files with formats that require stateful parsing. Since SqlBulkCopy is an API, you have more control and you could use a class like the TextFieldParser to feed an SqlBulkCopy session to load data into the target table directly.
-
(In case you are thinking that XML or delimited strings could be an alternative here, permit me to point out that they, too, represent intermediate storage. If you pass a 50 MB XML document, it is very likely that SQL Server will spill it to disk.)
-
When you insert or update large amounts of data, there is always reason to consider chopping up the operation in batches. This applies no matter you are loading data from an outside source like a file, or if you copy data from one table to another. If for no other reason, it helps to keep the transaction-log size in check. In the context of loading a file through a TVP, this means that you need to call your procedure for every batch. There are two challenges here:
-
-
Implement the batching as such.
-
Make the process restartable in case of a crash half-way through the file.
-
-
I will not go into details here, but let if suffice with a brief discussion. The first point is not too difficult. You could pass the custom-iterator a Stream object and a batch size, and the custom-iterator would read that many of number of lines from the file. Or you could keep it simple: use a moderate batch size and fill a List with one batch at a time, and don't stream at all.
-
Making the process restartable may be more difficult. For a simple MERGE scenario (that is, if-not-exists-insert-else-update) you may accept to run part of the file twice. But there are scenarios where re-running part of a file would alter the outcome, for instance when columns are updated incrementally. Or INSERT-only scenarios like the one we have looked at in this article, where a re-run would result in primary-key violations or even worse: load of duplicate data. You can add WHERE NOT EXISTS in the stored procedure as a simple way out, but it may prove to have an undesirable performance impact for all loads, not only restarted ones. The best solution is likely to depend on the exact situation.
-
Finally, let's discuss the specific problem with master-detail files a little more closely. I said previously that with two table types and two iterators, both iterators would have to read the file from start to end. You may object to this statement and suggest that there could be a single class that reads the file and which puts the rows into two queues, one for albums and one for tracks. The custom-iterators would read from these queues. But, no, this will not fly. Well, it would fly in the sense that you would be able to load the file. However, you not would achieve the aim of preserving memory in the client process. Why?
-
Keep in mind that SqlClient sends the data to SQL Server over single a communication line where it has to respect the TDS protocol. And if you look in the TDS specification, you will find that the data for one TVP has to be sent in a single sequence. That is, SqlClient cannot interleave data for the two TVPs, but it will have to read all data for one TVP first. Which means that the data for the other TVP will be buffered into in this queue and take up memory which was exactly what we wanted to avoid. There is simply a law of nature working against us here: the data in the file comes in a different order than we want to process it, and there is no way around it. The best you can do is to stream the detail rows and buffer the header rows (of which there are likely to be fewer). But this appears to be messy to implement – it may be simpler use a batchwise implementation with a List<SqlDataRecord>.
-
It is worth noticing that neither my solution with a single table type overcomes problem with having to reorder the data. As long as the procedure has not started executing, no reordering has occurred, but all data has been buffered in SQL Server – in memory or in tempdb. However, when the procedure runs, it scans the table variable twice. Depending on the situation and hardware configuration this may be a better – or worse – solution than having the client to read the file twice. It goes without saying that if you are facing this scenario, and performance is critical for you, you should benchmark several solutions.
This article has focused on using table-valued parameters with ADO .NET and SqlClient for two reasons. 1) It's a very common environment. 2) It's very simple to use TVPs from SqlClient. Before I conclude this article, I will give a brief exposé over other APIs and whether they support table-valued
- parameters. I also discuss what options you have if your API does not support
-TVPs.
You can use table-valued parameters with ODBC. You need to specify SQL Server Native
-Client 10.0 or later as your ODBC driver. SQL Server Native Client is a DLL that implements both an ODBC driver and an OLE DB provider for SQL Server. It comes with SQL Server and is freely redistributable.
-
As I have not worked with ODBC myself, I cannot assess how smooth or difficult it is to use TVPs
- with ODBC. I believe that as with ADO .NET there are two ways to pass a
-TVP through ODBC: streaming and non-streaming. Just like ADO .NET, ODBC exposes properties to specify that your data is sorted, to avoid sorting in SQL Server when the TVP has a primary key.
-
Books Online have two examples on using table-valued parameter in the section Table-Valued Parameters (ODBC) . There is also a sample on Codeplex.
You can use table-valued parameters with OLE DB, if you use the SQLNCLI10 provider or later, that is the OLE DB half of SQL
-Server Native Client. OLE DB offers two models for passing TVPs. One is the push model, where you create a rowset
-with the metadata, fill the rowset with your data, and in the regular parameter area, you pass the rowset pointer. This is the same basic idea as passing a List with ADO .NET, but you need to write more code. (As always with
-OLE DB, I'm tempted to say.)
-
The alternative is the pull model, which essentially is a role reversal where the consumer needs to implement
-IRowset
-on its own whereupon the provider will read from the rowset as a consumer. This model is intended for streaming scenarios, where you get data from an external source, and you don't want
-any intermediate storage in the client.
-
I can't find anything in SQL Server Books Online that discusses how to specify that your data source is already sorted, so I don't know if this is possible. I have a suspicion, though, that they rely on general OLE DB functionality. To define a table parameter, you need to use the interface ITableDefinitionWithConstraints, and this interface has a method AddConstraint that permits you to specify a primary key. It is a little embarrassing that I don't know, since I have actually implemented TVPs with OLE DB (see below under Perl).
-
Whether you can use TVPs if you use the OLE DB Consumer Templates, I don't know. I've only worked with "naked" OLE DB
-myself, never the consumer templates.
-
You can find a sample for the pull model on CodePlex. I have not found any sample for
-the push model, but if you are desperate you can download the source code for my Perl module (see below), but you will find it difficult to find the forest among the all the trees there.
No, you cannot use table-valued parameters with old ADO. Yes, ADO sits on top of OLE DB, and you can use SQLNCLI10 as the
-OLE DB provider with ADO. But ADO itself has not been updated for the new data types added in SQL 2005 and later cannot
-work with them.
None of them have support for table-valued parameters. Ironic isn't it? Microsoft touts them as the hottest and
-best way to access SQL Server, and then you find you don't have access to all features. The obvious workaround, besides
-using one of the older list-to-table methods, is to make a direct call from ADO .NET and bypass that language-integrated
-thing. Arguable, this causes your code to have a mix of paradigms. But it could be a first step from moving away from
-LINQ/EF entirely. (Wait, did I just say that? OK, let it be said: I am not a fan of neither of these technologies, as I
-feel that they serve to increase the object/relational impedance between client-side developers and
-SQL Server people.)
-
See also the section Further Reading for some useful links in this area.
The version of the Microsoft SQL Server JDBC Driver
-that is current of this writing (4.0) does not seem to support table-valued parameters. But please check Microsoft's site for
-updates. I don't know whether JDBC drivers for SQL Server from other vendors support
-TVPs, but it
-could definitely be worth investigating.
Microsoft has a PHP driver for SQL Server. The current version of this writing is 3.0. What I can understand, it does not support table-valued parameters. The driver is available with source code on Codeplex.
If you use the standard DBI/DBD modules, I doubt that you will find any support for table-valued parameters. However,
-the best option for connecting to SQL Server – as long you do not need to support other data sources
-– is
-Win32::SqlServer, of which I am the author myself. And, yes, it supports table-valued
-parameters. However, I found in my performance tests that the performance for passing TVPs is very poor. It took two seconds to pass a TVP with 50 000 values. Compare this with 50-150 ms for ADO .NET. I cannot say whether this is due to OLE DB or my own miserable programming.
As you have realised when you've read this small summary is that if you are using VB6, VBA, Access, Java, PHP – and
-probably a few more environments which I did not list here – you cannot use TVPs directly in your API. If you need to
-pass a list of values, you should use any of the methods that I discuss in my article
-Arrays
-and Lists for SQL 2005 and Beyond.
-
If you need to call a stored procedure that takes a table-valued parameter, you can always do this by writing a
-wrapper procedure that takes a comma-separated list (or an XML document for multi-column TVPs) as a parameter
-and inserts the data
-to a table variable and then calls the inner procedure. Say for instance that you need to call get_product_names from VB6:
-
CREATE PROCEDURE get_product_names_wrapper @prodids nvarchar(MAX)
-DECLARE @prodid_table integer_list_tbltype
-INSERT @prodid_table(n)
- SELECT number FROM iter_intlist_to_tbl(@prodids)
-EXEC get_product_names @prodid_table
-
If you think creating a procedure is too much, you can submit a parameterised command batch:
-
DECLARE @prodid_table integer_list_tbltype
-INSERT @prodid_table(n)
- SELECT number FROM iter_intlist_to_tbl(?)
-EXEC get_product_names @prodid_table
-
If you've never seen a parameterised command before, see the section on
-SQL Injection in my article on dynamic SQL for a
-brief introduction.
I like to thank my MVP colleagues who helped me by reviewing my demo program and
- with other research: Bob Beauchemin,
-Alejandro Mesa, Greg Low, Daniel Joskovski, Lenni Lobel and Adam Machanic.
-
If you have opinions, additions or just have spotted a language/grammar error, please mail me at
-esquel@sommarskog.se. If you have questions about using TVPs or arrays and
-lists in SQL Server in general, I advice you to post your questions to the appropriate public forum. Which forum you should use depends on the exact nature of your question. If you have questions related to C# and VB .NET, you should use a .NET forum. For questions on ADO .NET the SQL Server Data Access forum may be the best place, while T‑SQL questions goes into the T‑SQL forum.
2012-07-01 – More or less a total rewrite of the sections that cover .NET because of two reasons: I realised how simple it is to write a reusable class for parsing a comma-separated list and pass it to a table-valued parameter. The original version of the article incorrectly said you could not stream data to a TVP through ADO .NET, but that SqlClient would always buffer. This unfortunate error was due to a misunderstanding between me and a Program Manager at Microsoft. To the latter end, I have added examples how to load data from a file through a table-valued parameter, both streaming and non-streaming. For the other sections there mainly some language polishing, but I've added a caveat that you cannot use TVPs between stored procedures in different databases.
\ No newline at end of file
diff --git a/Articles/Backup/How to Build a SQL Server Disaster Recovery Plan with Google Compute Engine.pdf b/Articles/Backup/How to Build a SQL Server Disaster Recovery Plan with Google Compute Engine.pdf
new file mode 100644
index 00000000..d637b7db
Binary files /dev/null and b/Articles/Backup/How to Build a SQL Server Disaster Recovery Plan with Google Compute Engine.pdf differ
diff --git a/Articles/Backup/Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator.docx b/Articles/Backup/Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator.docx
new file mode 100644
index 00000000..38a4cbaf
Binary files /dev/null and b/Articles/Backup/Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator.docx differ
diff --git a/Articles/Backup/Permissions_Poster_SQL_Server_2008_R2.pdf b/Articles/Backup/Permissions_Poster_SQL_Server_2008_R2.pdf
new file mode 100644
index 00000000..9a459d05
Binary files /dev/null and b/Articles/Backup/Permissions_Poster_SQL_Server_2008_R2.pdf differ
diff --git a/Articles/Backup/Permissions_Poster_SQL_Server_2012.pdf b/Articles/Backup/Permissions_Poster_SQL_Server_2012.pdf
new file mode 100644
index 00000000..ad9257c6
Binary files /dev/null and b/Articles/Backup/Permissions_Poster_SQL_Server_2012.pdf differ
diff --git a/Articles/Backup/Permissions_Poster_SQL_Server_2014.pdf b/Articles/Backup/Permissions_Poster_SQL_Server_2014.pdf
new file mode 100644
index 00000000..c1a4713e
Binary files /dev/null and b/Articles/Backup/Permissions_Poster_SQL_Server_2014.pdf differ
diff --git a/Articles/Backup/Permissions_Poster_SQL_Server_2016_and_SQLDB.pdf b/Articles/Backup/Permissions_Poster_SQL_Server_2016_and_SQLDB.pdf
new file mode 100644
index 00000000..a68dfd7c
Binary files /dev/null and b/Articles/Backup/Permissions_Poster_SQL_Server_2016_and_SQLDB.pdf differ
diff --git a/Articles/Backup/Permissions_Poster_SQL_Server_vNext_and_SQLDB.pdf b/Articles/Backup/Permissions_Poster_SQL_Server_vNext_and_SQLDB.pdf
new file mode 100644
index 00000000..e6d03495
Binary files /dev/null and b/Articles/Backup/Permissions_Poster_SQL_Server_vNext_and_SQLDB.pdf differ
diff --git a/Articles/Backup/SQL Server Performance Tuning in Google Compute Engine.pdf b/Articles/Backup/SQL Server Performance Tuning in Google Compute Engine.pdf
new file mode 100644
index 00000000..034560ac
Binary files /dev/null and b/Articles/Backup/SQL Server Performance Tuning in Google Compute Engine.pdf differ
diff --git a/Articles/Backup/The Curse and Blessings of Dynamic SQL.htm b/Articles/Backup/The Curse and Blessings of Dynamic SQL.htm
new file mode 100644
index 00000000..82981937
--- /dev/null
+++ b/Articles/Backup/The Curse and Blessings of Dynamic SQL.htm
@@ -0,0 +1,2111 @@
+
+
+
+The Curse and Blessings of Dynamic SQL
+
+
+
+
+
+
+
An earlier version of this article is
+ also available in
+ German. Translations
+ provided by SQL Server MVP Frank Kalis.
+
Introduction
+
If you follow the various newsgroups on Microsoft SQL Server,
+you often see people asking why they can't do:
+
SELECT * FROM @tablename
+SELECT @colname FROM tbl
+SELECT * FROM tbl WHERE x IN (@list)
+
For all three examples you can expect someone to answer Use dynamic SQL
+ and give a quick example on how to do it. Unfortunately, for all three examples
+ above, dynamic SQL is a poor solution.
+ On the other hand, there are situations where dynamic SQL
+ is the best or only way to go.
+
In this article I will discuss the use of dynamic SQL
+ in stored procedures and to a minor extent from client languages. To set the
+ scene, I start with a very quick overview on application
+ architecture for data access. I then proceed to describe the feature dynamic
+ SQL as such,
+ with a quick introduction followed by the gory syntax details. Next, I continue with a discussion on SQL injection, a
+ security issue that it is essential to have good understanding of when
+ you work with dynamic SQL. This is followed by a section where I discuss why
+ we use stored procedures, and how that is affected by the use of dynamic SQL.
+ I carry on with a section on good practices and tips for writing
+ dynamic SQL. I conclude by reviewing a number of
+ situations where you could use dynamic SQL and
+ whether it is a good or bad idea to do it.
+
The article covers all versions of SQL Server from SQL6.5 to
+ SQL2008, with emphasis on SQL2000 and later
+versions.
Note: many of
+ the code samples in this text works against the pubs and Northwind databases
+ that ship with SQL2000 and SQL7, but not with SQL2005
+and later. You can download
+ these databases from
+
+ Microsoft's web site.
+
+
Before I describe dynamic SQL, I like to briefly discuss the various ways you can
+ access data from an application to give an overview of what I'll be
+ talking about in this article.
+
(Note: all through this text I will
+ refer to client as anything that accesses SQL Server from the outside.
+ In the overall application architecture that may in fact be a middle tier or
+ a business layer, but as that is of little interest to this article, I use
+ client in the sake of brevity.)
+
There are two main roads to go, and then there are forks and sub-forks.
+
+
Send SQL statements from the client to SQL
+ Server.
+
+
Rely on SQL generated by the client API, using options like
+ CommandType.TableDirect and methods like .Update. LINQ falls into this group as well.
+
Compose the SQL strings in the client code.
+
+
Build the entire SQL string with parameter values expanded.
+
Use parameterised queries.
+
+
+
Perform access through stored procedures.
+
+
Stored procedures in T-SQL
+
+
Use static SQL only.
+
Use dynamic SQL together with static SQL.
+
+
Stored procedures in a CLR language such as C# or VB .Net. (SQL2005
+ and later.)
+
+
+
Fork 1-a may be good for simple tasks, but you are likely to
+ find that you outgrow it as the complexity of your application increases.
+ In any case, this approach falls entirely outside the scope of this article.
+
Many applications are built along the principles of fork 1-b,
+ and as long as you take the sub-fork 1-b-ii, it does not have to
+ be bad. (Why 1-b-i is bad, is
+ something I will come back to. Here I will just drop two keywords:
+ SQL
+ Injection and Query-Plan Reuse.) Nonetheless, in many shops the mandate is
+ that you should use stored procedures. When you use stored procedures with
+ only static SQL, users do
+ not need direct permissions to access the tables, only permissions to execute the stored
+ procedures, and thus you can use the stored procedure to control what users
+ may and may not do.
+
The main focus for this text is sub-fork 2-a-ii. When used
+ appropriately, dynamic SQL in stored
+ procedures can be a powerful addition to static SQL. But some of the questions on the newsgroups leads to
+ dynamic SQL in stored procedures that are so meaningless, that these people
+ would be better off with fork 1-b instead.
+
Finally, fork 2-b, stored procedures in the CLR, is in many
+ regards very similar to fork 1-b, since all data access from CLR
+ procedures is through generated SQL strings, parameterised or unparameterised. If you have settled on SQL
+ procedures for your application, there is little point in rewriting them into
+ the CLR. However, CLR code can be a valuable supplement for tasks that are
+ difficult to perform in T-SQL, but you yet want to perform server-side.
In this chapter I will first look at some quick examples of dynamic SQL and
+ point out some very important implications of using dynamic SQL. I will then
+ describe sp_executesql and EXEC() in detail, the two commands you can use to
+ invoke dynamic SQL from T-SQL.
Understanding dynamic SQL itself is not difficult. Au contraire, it's rather
+ too easy to use. Understanding the fine details, though, takes a little
+ longer time. If you start out using dynamic SQL casually, you are bound to face
+ accidents when things do not work as you have anticipated.
+
One of the problems
+ listed in the introduction was how to write a stored procedure that takes a
+ table name as its input. Here are two examples, based on the two ways to do dynamic SQL in
+ Transact-SQL:
CREATE PROCEDURE general_select2 @tblname nvarchar(127),
+ @key varchar(10) AS
+EXEC('SELECT col1, col2, col3
+ FROM ' + @tblname + '
+ WHERE keycol = ''' + @key + '''')
+
Before I say anything else, permit me to point out that these are examples of
+ bad usage of dynamic SQL.
+ Passing a table name as a parameter
+ is not how you should write stored procedures, and one aim of this article is
+ to explain this in detail. Also, the two examples are not equivalent. While
+ both examples are bad, the second
+ example has several problems that the first does not have. What these
+ problems are will be apparent as you read this text.
+
Whereas the above looks very simple and easy, there are some very important things
+ to observe. The first thing is permissions. You may know that when you
+ use stored procedures, users do not need permissions to access the tables accessed by the stored procedure. This does not apply when
+ you use dynamic SQL! For the procedures above to execute
+ successfully, the users must have SELECT permission on the table in @tblname. In SQL2000 and earlier this is an absolute rule with no
+ way around it. Starting with SQL2005, there are alternatives, something I will
+ come
+ back to in the section The Permission System.
+
Next thing to observe is that the dynamic SQL is not part of
+ the stored procedure, but constitutes its own scope. Invoking a block
+ of dynamic SQL is akin to call a nameless stored procedure created ad-hoc. This
+ has a number of consequences:
+
+
Within the block of dynamic SQL, you cannot access local variables
+ (including table variables) or parameters of the calling stored procedure.
+ But you can pass parameters in and out to a block of dynamic SQL if you
+ use sp_executesql.
+
Any USE statement in the dynamic SQL will not affect the calling stored procedure.
+
Temp tables created in the dynamic SQL will not be accessible from the
+ calling procedure since they are dropped when the dynamic SQL exits.
+ (Compare to how temp tables created in a stored procedure go away when you
+ exit the procedure.) The block of
+ dynamic SQL can however access temp tables created
+ by the calling procedure.
+
If you issue a SET command in the dynamic SQL, the effect of the SET
+ command lasts for the duration of the block of dynamic SQL
+ only and does not affect the caller.
+
The query plan for the stored procedure does not include the dynamic SQL.
+ The block of dynamic SQL has a query plan of its own.
+
+
As you've seen there are two ways to invoke dynamic SQL, sp_executesql and
+ EXEC(). sp_executesql was added in SQL7, whereas EXEC() has been around
+ since SQL6.0. In application code, sp_executesql should be your choice 95%
+ of the time for reasons that will prevail. For now I will only give two
+ keywords: SQL Injection and
+ Query-Plan Reuse. EXEC() is mainly useful for quick throw-away things and DBA tasks, but also
+ comes to the rescue in SQL2000 and SQL7
+ when the SQL string exceeds 4000 characters. And, obviously, in SQL6.5, EXEC() is the sole choice. In the next
+ two sections we will look at these two commands in detail.
sp_executesql is a built-in stored procedure that takes two
+ pre-defined parameters and any number of user-defined parameters.
+
The first parameter @stmt is mandatory, and contains a batch of one or
+ more SQL statements. The data type of @stmt is ntext in SQL7 and SQL2000,
+ and nvarchar(MAX) in SQL2005 and later. Beware that you must pass an nvarchar/ntext
+ value (that is, a Unicode value). A varchar value won't do.
+
The second parameter @params is optional, but you will use it 90% of the
+ time. @params declares the parameters that you refer to in @stmt. The syntax
+ of @params is exactly the same as for the parameter list of a stored procedure. The
+ parameters can
+ have default values and they can have the OUTPUT marker. Not all parameters you declare must actually
+ appear in the SQL string. (Whereas all variables that appear in the SQL
+ string must be declared, either with a DECLARE inside @stmt, or in
+ @params.) Just like @stmt, the data
+ type of @params is ntext SQL2000 and earlier and nvarchar(MAX)
+since SQL2005.
+
The rest of the parameters are simply the parameters that you declared in
+ @params, and you pass them as you pass parameters to a stored procedure, either
+ positional or named. To get a value back from your output parameter, you must
+ specify OUTPUT with the parameter, just like when you call a stored
+ procedure. Note that the first two parameters, @stmt and @params, must be specified positionally. You
+ can provide the parameter names for them, but these names are blissfully ignored.
+
Let's look at an example. Say that in your database, many tables
+ have a column LastUpdated, which holds the time a row last was
+ updated. You want to be able to find out how many rows in each table that were modified at
+ least once during a period. This is not something you run as part of the application, but
+ something you run as a DBA from time to time, so you just keep it as a script
+ that you have a around. Here is what it could look like:
+
DECLARE @tbl sysname,
+ @sql nvarchar(4000),
+ @params nvarchar(4000),
+ @count int
+
+DECLARE tblcur CURSOR STATIC LOCAL FOR
+ SELECT object_name(id) FROM syscolumns WHERE name = 'LastUpdated'
+ ORDER BY 1
+OPEN tblcur
+
+WHILE 1 = 1
+BEGIN
+ FETCH tblcur INTO @tbl
+ IF @@fetch_status <> 0
+ BREAK
+
+ SELECT @sql =
+ N' SELECT @cnt = COUNT(*) FROM dbo.' + quotename(@tbl) +
+ N' WHERE LastUpdated BETWEEN @fromdate AND ' +
+ N' coalesce(@todate, ''99991231'')'
+ SELECT @params = N'@fromdate datetime, ' +
+ N'@todate datetime = NULL, ' +
+ N'@cnt int OUTPUT'
+ EXEC sp_executesql @sql, @params, '20060101', @cnt = @count OUTPUT
+
+ PRINT @tbl + ': ' + convert(varchar(10), @count) + ' modified rows.'
+END
+
+DEALLOCATE tblcur
+
I've put the lines that pertain directly to the dynamic SQL in bold face. You
+ can see that I have declared the @sql and @params variables to be of the maximum
+ length for nvarchar variables in SQL2000. In SQL2005
+and later, you may want to make it a routine to
+ declare @sql as nvarchar(MAX), more about this just below.
+
When I assign the @sql variable, I am careful to format the statement so that
+ it is easy to read, and I leave in spaces to avoid that two concatenated
+ parts are glued together without space in between, which could cause a syntax
+ error. I put the table name in
+ quotename() in case a table name has any special
+ characters in it. I also prefix the table name with "dbo.", which is a good habit, as we will see when we look at dynamic SQL and
+ query plans. Overall, I will cover this sort of
+ good practices more in detail later in the text. Note also the appearance of
+ '' around the date literal the rule in T-SQL is that to include the string
+ delimiter in a string, you must double it.
+
In this example, the dynamic SQL has three parameters: one mandatory input
+ parameter, one optional input parameter, and one
+ output parameter. I've assumed that this time the DBA wanted to see
+ all changes made after 2006-01-01, which is why I've left out @todate in the call
+ to sp_executesql. Since I left out one variable, I must specify the last,
+ @cnt by name the same rules as when you call a stored procedure. Note also
+ that the variable is called @cnt in the dynamic SQL, but @count in the
+ surrounding script. Normally, you might want to use the same name, but I
+ wanted to stress that the @cnt in the dynamic SQL is only visible within the
+ dynamic SQL, whereas @count is not visible there.
+
You may note that I've prefix the string literals with N to denote that
+ they are Unicode strings. As @sql and @params are declared as nvarchar,
+ technically this is not necessary (as long as you stick to your 8-bit character
+ set). However, when you provide any of the strings directly in the call to
+ sp_executesql, you must specify the N, as in this fairly silly example:
If you remove any of the Ns, you will get an error message. Since sp_executesql is a built-in stored procedure, there is no implicit
+ conversion from varchar.
+
You may wonder why I do not pass @tbl as a parameter as well. The answer is
+ that you can't. Dynamic SQL is just like any other SQL. You can't specify a
+ table name through a variable in T-SQL, that's the whole story. Thus, when you
+ need to specify things like table names, column names etc dynamically,
+ you must interpolate them into the string.
+
If you are on SQL2000 or SQL7, there is a limitation with sp_executesql
+ when it comes to the length of the SQL string. While the parameter is ntext,
+ you cannot use this data type for local variables. Thus, you will have to
+ stick to nvarchar(4000). In many cases this will do fine, but it is not
+ uncommon to exceed that limit. In this case, you will need to use EXEC(),
+ described just below.
+
Since SQL2005, this is not an issue. Here you can use the new data type
+ nvarchar(MAX) which can hold as much data as ntext,
+ but without the many restrictions of ntext.
EXEC() takes one parameter which is an SQL statement to
+ execute. The parameter can be a concatenation of
+ string variables and string literals, but cannot include calls to functions
+ or other operators. For very simple
+ cases, EXEC() is less hassle than sp_executesql. For instance, say that you
+ want to run UPDATE STATISTICS WITH FULLSCAN on some selected tables. It could
+ look like this:
+
FETCH tblcur INTO @tbl
+IF @@fetch_status <> 0 BREAK
+EXEC('UPDATE STATISTICS [' + @tbl + '] WITH FULLSCAN')
+
In the example with sp_executesql, I used quotename(), but here I've let it
+ suffice with adding brackets, in case there is a table named Order
+ Details (which there is in the Northwind database). Since EXEC only permits
+ string literals and string variables to be concatenated and not arbitrary
+ expressions, this is not legal:
+
EXEC('UPDATE STATISTICS ' + quotename(@tbl) + ' WITH FULLSCAN')
+
Best practice is to always use a variable to hold the SQL statement, so the
+ example would better read:
The fact that you can concatenate strings within EXEC() permits you to
+ make very quick things, which can be convenient at times, but it can lead to
+ poor habits in application code. However, there are situations where this is an
+ enormous blessing. As I mentioned, in SQL7 and SQL2000, you can in practice
+ only use 4000 characters in your SQL string with sp_executesql. EXEC does
+ not have this limitation, since you can say:
+
EXEC(@sql1 + @sql2 + @sql3)
+
Where all of @sql1, @sql2 and @sql3 can be 4000 characters long or even
+ 8000 characters as EXEC() permits you to use varchar.
+
Since you cannot use parameters, you cannot as easily get values out from
+ EXEC() as you can with sp_executesql. You can, however, use INSERT-EXEC
+ to insert the result set from EXEC() into a table. I will show you an example
+ later on, when I also show you how you can
+ use EXEC() to pass longer strings than 4000 characters to sp_executesql.
+
In SQL2005 and later, EXEC() permits impersonation so that you can say:
+
EXEC(@sql) AS USER = 'mitchell'
+EXEC(@sql) AS LOGIN = 'CORDOBA\Miguel'
+
This is mainly a syntactical shortcut that saves you from embedding the
+ invocation of dynamic SQL in EXECUTE AS and REVERT. (I discuss these
+ statements more in detail in my article
+ Granting Permissions Through Stored
+ Procedures.)
+
SQL2005 adds a valuable extension to EXEC(): you can use
+ it to execute
+ strings on linked servers. I will cover this form
+ of EXEC() in a separate section
+ later in this text.
Before you start to use dynamic SQL all over town, you need to learn about
+ SQL injection and how you protect your application against it. SQL
+ injection is a technique whereby an intruder enters data that causes your application
+ to execute SQL statements you did not intend it to. SQL injection is possible as soon there is dynamic SQL which is
+ handled carelessly, be that SQL statements sent from the client, dynamic SQL
+ generated in T-SQL stored procedures, or SQL batches executed from CLR stored
+ procedures. This is not a line of attack that is unique to
+ MS SQL Server, but all RDBMS are open to it.
+
Here is an example. The purpose of the procedure below is to permit users to
+ search for orders by various conditions. A real-life example of such a
+ procedure would have many more parameters, but I've cut it down to two to be
+ brief. (This is, by the way, a problem for which dynamic SQL is a very good
+ solution.) As the procedure is written, it is open for SQL injection:
+
CREATE PROCEDURE search_orders @custid nchar(5) = NULL,
+ @shipname nvarchar(40) = NULL AS
+DECLARE @sql nvarchar(4000)
+SELECT @sql = ' SELECT OrderID, OrderDate, CustomerID, ShipName ' +
+ ' FROM dbo.Orders WHERE 1 = 1 '
+IF @custid IS NOT NULL
+ SELECT @sql = @sql + ' AND CustomerID LIKE ''' + @custid + ''''
+IF @shipname IS NOT NULL
+ SELECT @sql = @sql + ' AND ShipName LIKE ''' + @shipname + ''''
+EXEC(@sql)
+
Before we look at a real attack, let's just discuss this from the point of view
+ of user-friendliness. Assume that the input for the parameters @custid and @shipname comes directly
+ from the user and a nave and innocent user wants to look for orders where ShipName is Let's Stop N Shop, so he enters Let's. Do you see
+ what will happen? Because @shipname includes a single quote, he will get a
+ syntax error. So even if you think that SQL injection is no issue to you,
+ because you trust your users, you still need to read this section, so that they
+ can search for Brian O'Brien and Samuel Eto'o.
+
So this is the starting point. A delimiter, usually a single quote, affects your dynamic SQL, and
+ a malicious user
+ can take benefit of this. For
+ instance, consider this input for @shipname:
+
' DROP TABLE Orders --
+
The resulting SQL becomes:
+
SELECT * FROM dbo.Orders WHERE 1 = 1 AND ShipName LIKE '' DROP TABLE orders --'
+
This is a perfectly legal batch of T-SQL, including the text in red. Since there is something called permissions in SQL Server, this
+ attack may or may not succeed. A plain
+ user who runs a Windows application and who logs into SQL Server with his
+ own login, is not likely to have
+ permissions to drop a table. But it is not uncommon for web applications to
+ have a general login that runs SQL queries on behalf of the users. And if this web app logs into SQL Server with sysadmin or db_owner
+ privileges, the attack succeeds. Mind you, with sysadmin rights, the
+ attacker can add users and logins as he pleases. And if the service account
+ for SQL Server has admin privileges in Windows, the attacker has access into
+ your network far beyond SQL Server through xp_cmdshell. (Which is
+ disabled by default on SQL2005 and later, but if the attacker has achieved
+ sysadmin rights on the server, he can change that.)
+
Typically, an attacker first tests what happens
+ if he enters a single quote (') in an input field or a URL. If this
+ yields a syntax error, the attacker knows that there is a vulnerability. He
+ then finds out if he needs any extra tokens to terminate the query, and then
+ he can add his own SQL statement. Finally he adds a comment character to kill
+ the rest of the SQL string to avoid syntax errors. Single quote is the most
+ common character to reveal openings for SQL injection, but if you have
+ dynamic table and column names, there are more options an attacker could
+ succeed with.
+ Take this dreadful version of general_select:
+
CREATE PROCEDURE general_select2 @tblname nvarchar(127),
+ @key varchar(10) AS
+EXEC('SELECT col1, col2, col3
+ FROM ' + @tblname + '
+ WHERE keycol = ''' + @key + '''')
+
and assume that @tblname comes from a URL. There are quite some options that
+ an attacker could use to take benefit of this hole.
+
And don't overlook numeric values: they can very well be used for SQL
+ injection. Of course, in a T-SQL procedure where the value is passed as an
+ int parameter there is no risk, but if a supposedly numeric value is directly
+ interpolated into an SQL string in client code, there is a huge potential for
+ SQL injection.
+
Keep in mind that user input comes from more places than just input fields on
+ a form. The most commonly used area for injection attacks on the Internet is
+ probably parameters in URLs and cookies. Thus, be very careful how you handle
+ anything that comes into your application from the outside.
+
You may think that it takes not only skill, but also luck for someone to find
+ and exploit a hole for SQL injection. But remember that there are too many hackers out there
+ with too much time on their hands. SQL injection is a serious security issue, and you
+ must take precautions to protect your applications against it.
+
One approach I seen mentioned from time to time, is to validate input data in some way, but in my opinion that is not
+the right way to go. Here are are the three steadfast
+ principles you need to follow:
+
+
Never run with more privileges than necessary. Users that log into an
+ application with their own login should normally only have EXEC
+ permissions on stored procedures. If you use dynamic SQL, it should be
+ confined to reading operations so that users only need SELECT permissions.
+ A web site that logs into a database should not have any elevated
+ privileges, preferably only EXEC and
+ (maybe) SELECT permissions. Never let the web site log in as sa!
+
For web applications: never expose error messages from SQL Server to the
+ end user.
+
Always used
+ parameterised statements. That is, in a T-SQL procedure use sp_executesql,
+ not EXEC().
+
+
The first point is mainly a safeguard, so that if there is a injection hole,
+ the intruder will not be able to do that much harm. The second point makes
+ the task for the attacker more difficult as he cannot get feedback from his
+ attempts.
+
But it is the third point that is the
+ actual protection, and that we will look a little closer at. The procedure search_orders above should be coded as:
+
CREATE PROCEDURE search_orders @custid nchar(5) = NULL,
+ @shipname nvarchar(40) = NULL AS
+DECLARE @sql nvarchar(4000)
+SELECT @sql = ' SELECT OrderID, OrderDate, CustomerID, ShipName ' +
+ ' FROM dbo.Orders WHERE 1 = 1 '
+IF @custid IS NOT NULL
+ SELECT @sql = @sql + ' AND CustomerID LIKE @custid '
+IF @shipname IS NOT NULL
+ SELECT @sql = @sql + ' AND ShipName LIKE @shipname '
+EXEC sp_executesql @sql, N'@custid nchar(5), @shipname nvarchar(40)',
+ @custid, @shipname
+
Since the SQL string does not include any user input, there is
+ no opening for SQL
+ injection. It's as simple as that. By the way, note that since we can include
+ parameters in the parameter list, even if they don't actually appear in the
+ SQL string, we don't need any complicated logic to build the parameter list,
+ but can keep it static. In the same vein, we can always pass all input
+ parameters to the SQL string.
+
As you may recall, you cannot pass everything as parameters to dynamic SQL,
+ for instance table and column names. In this case you must enclose all such
+ object names in quotename(), that I will return to in the section
+ Good Coding Practices and Tips for Dynamic SQL.
+
The example above was for dynamic SQL in a T-SQL stored procedure. The same advice
+ applies to SQL generated in client code or in a CLR stored procedure. Since
+ this is so important, here is an example of coding the above in VB6 and ADO:
+
Set cmd = CreateObject("ADODB.Command")
+Set cmd.ActiveConnection = cnn
+
+cmd.CommandType = adCmdText
+cmd.CommandText = " SELECT OrderID, OrderDate, CustomerID, ShipName " & _
+ " FROM dbo.Orders WHERE 1 = 1 "
+If custid <> "" Then
+ cmd.CommandText = cmd.CommandText & " AND CustomerID LIKE ? "
+ cmd.Parameters.Append
+ cmd.CreateParameter("@custid", adWChar, adParamInput, 5, custid)
+End If
+
+If shipname <> "" Then
+ cmd.CommandText = cmd.CommandText & " AND ShipName LIKE ? "
+ cmd.Parameters.Append cmd.CreateParameter("@shipname", _
+ adVarWChar, adParamInput, 40, shipname)
+End If
+
+Set rs = cmd.Execute
+
Since the main focus of this text is dynamic SQL in T-SQL procedures, I will
+ explain this example only briefly. In ADO you use ? as a parameter
+ marker, and you can only pass parameters that
+ actually appear in the SQL string. (If you
+ specify too many parameters, you will get a completely incomprehensible error
+ message.) If you use the SQL Profiler to see what ADO
+ sends to SQL Server, you will find that it invokes sp_executesql.
+
Protection against SQL injection is not the only advantage of using
+ parameterised queries. In the section Caching Query
+ Plans, we will look more in detail on parameterised queries and at a
+ second very important reason to use them. This section also includes an example of composing and sending a parameterised SQL statement for SqlClient
+ in VB .Net.
+
You may think that an even better protection against SQL injection is to use
+ stored procedures with static SQL only. Yes, this is true,
+ but! It
+ depends on how you call your stored procedures from the client. If you
+ compose an EXEC command into which you interpolate the input values, you are
+ back on square one and you are as open to SQL injection as ever.
+ In ADO, you need to call
+ your procedure with the command type adCmdStoredProc and use .CreateParameter to specify the parameters. By specifying adCmdStoredProc, you call the stored procedure through RPC,
+ Remote Procedure Call, which not only protects you against SQL
+ injection, but it is also more efficient. Similar measures apply to other client APIs;
+ all APIs I know of supply a way to call a stored procedure through RPC.
In the introduction, I presented various strategies for
+ data-access for an application, and I said that in many shops all data access
+ is through stored procedures. In this section, I will look a little closer at
+ the advantages with using stored procedures over sending SQL statements from
+ the client. I will also look at what happens when you use dynamic SQL in a
+ stored procedure, and show that you lose some of the advantages with stored
+ procedures, whereas other are unaffected.
Historically, using stored procedures has been the way to give users
+ access to data. In a locked-down database, users do not have permissions to
+ access tables directly. Instead, the application performs all
+ access through stored procedures that retrieve and update data in a
+ controlled way, so that users only get to see data they have access to, and
+ they cannot perform updates that violate business rules. This works as long as the
+ procedure and the tables have the same owner, typically dbo (the
+ database owner), through a mechanism known as ownership chaining.
+
As I have already mentioned, ownership chaining does not work when you
+ use dynamic SQL. The reason for this is very simple: the block of
+ dynamic SQL is not a procedure and does not have any owner.
+ Thus the chain
+ is broken.
+
SQL 2005 and later
+
In SQL2005 and later versions of SQL Server, this can be addressed by signing a procedure that uses dynamic
+ SQL with a certificate. You associate the certificate with a user, and grant
+ that user (which is a user that cannot log in) the rights needed for the
+ dynamic SQL to execute successfully. A second method is to use
+ the EXECUTE AS clause to impersonate a user that has been granted the
+ necessary permissions. This method is easier to use, but has side effects
+ that can have unacceptable consequences for auditing, row-level security
+ schemes and system monitoring. For this reason, my strong recommendation is
+ to use certificates.
+
Describing these methods more closely, would take up too much space here.
+ Instead I've written a separate article about them, Giving Permissions through Stored
+ Procedures, where I discusses both certificates and impersonation in
+ detail, and I also take a closer look on ownership chaining.
+
If you write CLR procedures that perform data access, the same is true
+ for them.
+ Ownership chaining never applies since all data access in a CLR procedure is
+ through dynamic SQL. But you can use certificates or
+ impersonation to avoid having to give users direct permissions on the
+ tables.
+
SQL 2000 and earlier
+
On SQL2000 there is no way
+ to combine dynamic SQL with the encapsulation of permissions that you can get
+ through stored procedures. Any use of dynamic
+ SQL requires that the users have direct permissions on the accessed tables. If your security
+ scheme precludes giving users permissions to access tables directly, you cannot
+ use dynamic SQL. It is that plain and simple. Depending on the
+ sensitivity of the data in the application, it may be acceptable to give the
+ users SELECT permissions on the tables (or on some tables) to permit the use
+ of dynamic SQL. I strongly recommend against granting users INSERT, UPDATE
+ and DELETE rights on tables only to permit dynamic SQL
+ in some occasional procedure.
+
There are however, some ways to arrange so that users only have access to the data through the application. All and
+all, there are three alternatives, application roles, "application
+ proxies" and Terminal Server. All require you to change the application architecture or infrastructure, so it
+ is nothing you introduce at whim.
+
Application roles were introduced in SQL7. Users log into SQL Server but have no permissions on their own beyond
+ the database access. Instead, the application activates the application role by
+ sending a password somehow embedded into it, and this application
+ role has the permissions needed. With "application proxies", the application authenticates the users outside SQL Server and logs into SQL
+ Server on their behalf with a proxy login. This proxy login impersonates the users in SQL Server, and
+ thus their permissions apply. However, since the users do not have any login on their own, they cannot
+ log into SQL Server outside the application. In Giving Permissions...,
+ I discuss these two methods a little further.
+
The final possibility is to put the application on Terminal Server. Users log into the terminal server which is set
+up so that all they can do is to run this application. Furthermore, the network is configured so that they cannot access SQL Server from their regular
+computers. Thus, the application is their only way to the data.
+
For all these methods, keep in mind about SQL injection, and do not grant more
+permissions than needed.
Every query you run in SQL Server requires a query plan. When you run a query
+ the first time, SQL Server builds a query plan for it or as the terminology
+ goes it compiles the query. SQL Server saves the plan in cache, and next time you run
+ the query, the plan is reused. The query plan stays in cache
+ until it's aged out because it has not been used for a while, or it is
+ invalidated for some reason. (Why this happens falls outside the scope of
+ this article.)
+
The reuse of cached query plans is very important for the performance
+ of queries where the compilation time is in par with the execution time or
+ exceeds it. If
+ a query needs to run for four minutes, it does not matter much if the query
+ is recompiled for an extra second each time. On the other hand, if the execution time of the
+ query is 40ms but it takes one second to compile the query, there is a
+ huge gain with the cached plan, particularly if the query is executed over and
+ over again.
+
Up to SQL6.5 the only plans there were put
+ into the cache were plans for stored
+ procedures. Loose batches of SQL were compiled each time. And since the
+ query plan for dynamic SQL is not part of the stored procedure, that included
+ dynamic SQL as well. Thus in SQL6.5, the use of dynamic SQL nullified the
+ benefit with stored procedures in this regard.
+
Starting with SQL7, SQL Server also caches the plans for bare statements
+ sent from a client or generated through dynamic SQL. Say that you send this
+ query from the client, or execute it with EXEC():
+
SELECT O.OrderID, SUM(OD.UnitPrice * OD.Quantity)
+FROM Orders O
+JOIN [Order Details] OD ON O.OrderID = OD.OrderID
+WHERE O.OrderDate BETWEEN '19980201' AND '19980228'
+ AND EXISTS (SELECT *
+ FROM [Order Details] OD2
+ WHERE O.OrderID = OD2.OrderID
+ AND OD2.ProductID = 76)
+GROUP BY O.OrderID
+
The query returns the total order amount for the orders in February 1998 that
+ contained the product Lakkalikri. SQL Server will put
+ the plan into the cache,
+ and next time you run this query, the plan will be reused. But only if it is exactly the same query.
+ Since the cache lookup is by a hash value computed from the query text, the cache is space- and case-sensitive.
+ Thus, if you add a
+ single space somewhere, the plan is not reused. More importantly, it is not
+ unlikely that next time you want to run the query for a different product, or a
+ different period.
+
All this changes, if you instead use sp_executesql to run your query
+ with parameters:
+
DECLARE @sql nvarchar(2000)
+SELECT @sql = 'SELECT O.OrderID, SUM(OD.UnitPrice * OD.Quantity)
+ FROM dbo.Orders O
+ JOIN dbo.[Order Details] OD ON O.OrderID = OD.OrderID
+ WHERE O.OrderDate BETWEEN @from AND @to
+ AND EXISTS (SELECT *
+ FROM dbo.[Order Details] OD2
+ WHERE O.OrderID = OD2.OrderID
+ AND OD2.ProductID = @prodid)
+ GROUP BY O.OrderID'
+EXEC sp_executesql @sql, N'@from datetime, @to datetime, @prodid int',
+ '19980201', '19980228', 76
+
The principle for cache lookup is the same as for a non-parameterised query:
+ SQL Server hashes the query text and looks up the hash value in the cache,
+ still in a case- and space-sensitive fashion. But since the parameter values
+ are
+ not part of the query text, the same plan can be reused even when the input
+ changes.
+
To make this really efficient there is one more thing you need to observe.
+ Do you see that I've prefixed all tables in the query with dbo? There
+ is a very important reason for this. Users can have different default schema, and up to SQL2000, all users had a
+default schema equal to their username. Thus, if default schema for user1 is user1, and this users runs a query that goes "SELECT ... FROM
+ Orders", SQL Server must first check if there is a table user1.Orders,
+ before it looks for dbo.Orders. Since user1.Orders could appear
+ on the scene at any time, user1 cannot share cache entry with a user different default schema. Yes, in SQL2005, it is perfectly possible that all users have dbo as their default schema, but it seems to be a bad idea to
+rely on it.
+
If you instead use stored procedures, it is not equally important to prefix
+ tables with dbo. Microsoft still recommends that you do, but even if
+ you don't, users with different default schema can share the same query
+ plan.
+
From what I have said here, it follows that if you use dynamic SQL with
+ EXEC() you lose an important benefit of stored procedures
+ whereas with sp_executesql you don't. At least in
+ theory. It's easy to forget that dbo, and if you leave it out in just a
+ single place in the query, you will get as
+ many entries in the cache for the query as there are users running it. Recall
+ also that the cache is space-
+ and case-sensitive, so if you generate the same query in several places, you
+ may inadvertently have different spacing or inconsistent use of case.
+ And this is not restricted to the SQL statement, the parameter list is as much part of the cache entry. Furthermore, since the cache lookup is by a hash value computed from the query text, I
+ would assume that this is somewhat more expensive than looking up a stored
+ procedure. In fact, under extreme circumstances, heavy use of dynamic SQL, can lead to serious
+ performance degradation. Some of my MVP colleagues have observed systems with
+ lots of memory (>20GB) when the plan cache has been so filled with plans
+ for SQL statements, that there have been hash collisions galore, and the
+ cache lookup alone could take several seconds. Presumably, the applications in
+ question either did not use parameterised queries at all, or they failed to
+ prefix tables with dbo.
+
So far, I've only talked about dynamic SQL in stored procedures. But in this
+ regard there is very little difference to SQL statements sent from
+ the client, or SQL statements generated in CLR procedures. The same rules
+ apply: unparameterised statements are cached but with little probability for
+ reuse, whereas parameterised queries can be as efficient as stored
+ procedures if you remember to always prefix the tables with dbo. (And still
+ with the caveat that the cache lookup is space- and case-sensitive.) Most client APIs implement
+ parameterised queries by calling sp_executesql under the covers.
+
In the section on SQL Injection, I included an example on how to do
+ parameterised queries with ADO and VB6.
+ Here is an example with VB .Net and SqlClient:
+
cmd.CommandType = System.Data.CommandType.Text
+cmd.CommandText = _
+ " SELECT O.OrderID, SUM(OD.UnitPrice * OD.Quantity)" & _
+ " FROM dbo.Orders O " & _
+ " JOIN dbo.[Order Details] OD ON O.OrderID = OD.OrderID" & _
+ " WHERE O.OrderDate BETWEEN @from AND @to" & _
+ " AND EXISTS (SELECT *" & _
+ " FROM dbo.[Order Details] OD2" & _
+ " WHERE O.OrderID = OD2.OrderID" & _
+ " AND OD2.ProductID = @prodid)" & _
+ " GROUP BY O.OrderID"
+
+cmd.Parameters.Add("@from", SqlDbType.Datetime)
+cmd.Parameters("@from").Value = "1998-02-01"
+
+cmd.Parameters.Add("@to", SqlDbType.Datetime)
+cmd.Parameters("@to").Value = "1998-02-28"
+
+cmd.Parameters.Add("@prodid", SqlDbType.Int)
+cmd.Parameters("@prodid").Value = 76
+
In contrast to ADO, SqlClient uses names with @ for parameters. The syntax
+ for defining parameters is similar to ADO, but not identical. This article is
+ long enough, so I will not go into details on how the Parameters
+ collection works. Instead, I refer you to MSDN where both SqlClient and ADO
+ are documented in detail. Whatever client API you are using,
+ please
+ learn how to use parameterised commands with it. Yes, there is a tone of
+ desperation in my voice. I don't know how many posts I've seen on the
+ newsgroups over the years where people build their SQL strings by
+ interpolating the values from input fields into the SQL string, and thereby
+ degrading the performance of their application, and worst of all opening
+ their database to SQL injection.
+
... and just when you thought you were safe, I need to turn this upside down. Recall what I said in the beginning of
+this section, that if the query is going to run for four minutes, one second extra for compilation is not a big deal.
+And if that recompilation slashes the execution time from forty minutes to four, there is a huge gain. Most queries
+benefit from cached parameterised plans, but not all do. Say that you have a query where the user can ask for data for
+some time span. If the user asks for a summary for a single day, there is a good non-clustered index that can be used
+for a sub-second response time. But if the request is for the entire year, the same index would be a disaster, and a
+table scan is better. Starting with SQL2005 you can force a
+ query to be recompiled each
+ time it is executed by adding OPTION (RECOMPILE)
+ to the end of the query, and thus you can still use sp_executesql to get the
+ best protection against SQL injection. On SQL2000
+ and earlier, it may in fact be better to interpolate critical parameters into the
+ query string when you need to force recompilation each time.
+
For the sake of completeness, I should mention that SQL
+ Server is able to auto-parameterise queries. If you submit:
+
SELECT OrderID, OrderDate FROM dbo.Orders WHERE CustomerID = N'ALFKI'
+
SQL Server may recast this as
+
SELECT OrderID, OrderDate FROM dbo.Orders WHERE CustomerID = @P1
+
so if next time you submit BERGS instead of ALFKI, the query plan will be reused.
+ Auto-parameterisation comes in two flavours: simple and forced. Simple is the
+ default and is the only option on SQL2000 and
+ earlier. With simple parameterisation, auto-parameterisation happens only with very simple
+ queries, and, it seems, with some inconsistency. With forced
+ parameterisation, SQL Server parameterises all queries that comes its way
+ (with some exceptions documented in Books Online). Forced parameterisation
+ is, in my opinion, mainly a setting to cover up for poorly designed
+ third-party application that uses unparameterised dynamic
+ SQL. For your own development you should not
+ rely on any form of auto-parameterisation. (But in the situation you really a want a new query
+ plan each time, you may have to verify that it doesn't happen when you don't
+ want to.)
+
They say seeing is believing. Here is a demo that you can try on yourself, if
+ you have SQL2005. First create this database:
+
CREATE DATABASE many_sps
+go
+USE many_sps
+go
+DECLARE @sql nvarchar(4000),
+ @x int
+SELECT @x = 200
+WHILE @x > 0
+BEGIN
+ SELECT @sql = 'CREATE PROCEDURE abc_' + ltrim(str(@x)) +
+ '_sp @orderid int AS
+ SELECT O.OrderID, O.OrderDate, O.CustomerID, C.CompanyName,
+ Prodcnt = OD.cnt, Totalsum = OD.total
+ FROM Northwind..Orders O
+ JOIN Northwind..Customers C ON O.CustomerID = C.CustomerID
+ JOIN (SELECT OrderID, cnt = COUNT(*), total = SUM(Quantity * UnitPrice)
+ FROM Northwind..[Order Details]
+ GROUP BY OrderID) AS OD ON OD.OrderID = O.OrderID
+ WHERE O.OrderID = @orderid'
+ EXEC(@sql)
+ SELECT @x = @x - 1
+END
+
Then in SQL Server Management Studio 2005, press F7
+ navigate down to the list of stored procedures. Select all procedures. Then
+ from the context menu select to script them as CREATE
+ TO to a new query window. How long time this takes depends on your
+ hardware, but on my machine it took 90 seconds and at the same time SQL
+ Server grabbed over 250MB of memory. If you
+ use the Profiler to see what Mgmt Studio is up to, you will see that for each
+ procedure, Mgmt Studio emits a couple of queries with the procedure name
+ embedded. That is, no parameterised statements. Once scripting is complete,
+ issue this command:
+
ALTER DATABASE many_sps SET PARAMETERIZATION FORCED
+
and redo the operation. On my machine scripting now completed in five
+ seconds!. This demonstrates that the difference between parameterised and
+ unparameterised can be dramatic. (And that Microsoft can not use their own
+ products properly.) If you run SQL Server on
+ your local machine, you can see this from one more angle, you can stop and restart
+ SQL Server before the two scripting operations, and then use Task Manager to
+ see how much physical memory SQL Server uses
+ in the two cases. That difference lies entirely in the plan cache.
+
This particular issue have been addressed in SQL Server Management Studio 2008. SSMS 2008 has its own scripting
+issues, but they have nothing to do with the topic of this article.
Another advantage with stored procedures over SQL sent from the client is that less bytes travel the network. Rather than sending a
+ 50-line query over the network, you only need to pass the name of a stored procedure
+ and a few parameters. This gets more significant if the computation requires
+ several queries, possibly with logic in between. If all logic is outside the
+ database, this could mean that data has to travel up to the client, only to travel back in the next moment. With stored procedures you can
+ use temp tables to hold intermediate results. (You can use temp tables
+ from outer layers as well, although it may require some careful use of your
+ client API.)
+
In this case, the dividing line goes between sending SQL from the client or
+ running stored procedures. If the stored procedures use static SQL only, or
+ invoke dynamic SQL does not matter, nor does it matter if it is a CLR procedure.
+ You still get the gains of reduced network traffic.
This is not a question of security or performance, but one of
+ good programming practice and modularising your code. By using stored procedures, you don't have to bog down
+your client code with the construction of SQL statements. Then again, it depends
+ a little on what you put into those stored procedure. Myself, I am of the
+ school that the business logic should be where the data is, and in this case
+ there is no dispute that you should use stored procedures to encapsulate your
+ logic.
+
But there are also people
+ who like to see the database as a unintelligent container of data, and who
+ prefer to have the business logic
+ elsewhere. In this case, the arguments for using stored procedures
+ for encapsulation may not be equally compelling. You could just as well employ careful programming practices in
+ your client language and send SQL strings.
+
Nothing of this changes if you use dynamic SQL in your stored procedures. The
+ stored procedure is still a container for some piece of logic, and how it
+ looks on the inside does not matter. I'm here assuming that most of your
+ procedures use static SQL only. If all your stored procedures
+ generate dynamic SQL, then you are probably better off in this regard to do it all in client code. Then again, sometimes there is no other application
+ than Query Analyzer or SQL Server Management Studio. (Typically this would be
+ tasks that are run by an admin.) In this case, the only container of logic
+ available is stored procedures, and it's immaterial whether they use dynamic
+ SQL or not.
In a complex system with hundreds of tables, you may need to know where a
+ certain table or column is referenced, because you are considering changing
+ or dropping it. If all access to tables is from static SQL in stored
+ procedures, you may be able find all references by using the system
+ stored procedure sp_depends or query a system table directly. (sysdepends
+ in SQL2000, sys.sql_dependencies in SQL2005
+and later. In SQL2008 there is also sys.sql_expression_dependencies.) I say may, because it is very difficult to maintain complete dependency
+ information in SQL Server. If you drop and recreate a table, all dependency
+ information for the table is lost. What I do myself is to regularly build an empty database
+ from our version-control system, and since our build tool
+ loads all tables before any stored procedure or trigger, I know that I can
+ trust the dependency information in that database.
+
If you throw dynamic SQL into the mix be that SQL sent from client,
+ dynamic SQL in T-SQL procedures, or SQL generated by CLR stored procedures
+ - you lose this opportunity. The alternative is to employ brute-force search,
+ and if the construction of dynamic SQL is confined to some well-defined set
+ of modules, this may work. If not, you may end up with a database where no
+ one ever dares to drop or change a column or a table, and which eventually
+ becomes unbearable complex and inefficient because of all the legacy baggage
+ it's carrying around.
+
While the main dividing line here is between static SQL and any form of
+ dynamic SQL, dynamic SQL in T-SQL
+stored procedures is probably the least harmful, as there is less code to search. You can even search
+ the column sys.sql_modules.definition using SQL. Available since SQL2005. In SQL2000 you
+ can search syscomments, but as the procedure text there is chopped into 4000-char slices, this is less
+reliable.
+
In any case, an occasional stored procedure that uses dynamic SQL is not
+ likely cause the Armageddon I pictured above. But it is
+ a good argument for being restrictive with dynamic SQL in any form.
One distinct advantage of writing stored T-SQL procedures is that you get a
+ syntax check directly. With dynamic SQL, a trivial syntax error may not show up
+ until run time. Even if you test your code carefully, there may be some query, or
+ some variation of a query, that is only run in odd cases and not covered in
+ your test suite.
+
It has to be admitted that the strength of this argument is somewhat reduced by the fact
+ that T-SQL is not too industrious on reporting semantic errors.
+ Because of deferred name resolution, SQL Server will not examine queries in
+ stored procedures, where one or more tables are missing, be that misspellings
+ or temp tables created within the procedure. Nevertheless, SQL Server
+ does report sufficiently many errors, for this to be a very important reason
+ to use stored procedures.
+
Another side of this coin is that when you write dynamic SQL, you embed the
+ SQL code into strings, which makes programming far more complex. Your SQL
+ code is a string delimited by single quotes('), and this string
+ may include strings itself, and to include a single quote into the string you
+ need to double it. You can easily get lost in a maze of quotes if you don't
+ watch out. (In the section Good Coding Practices
+ and Tips for Dynamic SQL, we will look a little closer
+ on how to deal
+ with this problem.) The most commonly used client languages with T-SQL -
+ Visual Basic, C#, C++, VBScript all use the double quote (")
+ as their string delimiter, so dynamic SQL in client code or CLR stored
+ procedures is less prone to that particular problem. Then again, in VB you
+ don't have multi-line strings, so at the end of each line you have to have a double
+ quote, an ampersand and an underscore for continuation. It sure does not
+ serve to make coding easier. You are relieved from all this hassle, if you
+ use stored procedures with static SQL only.
Somewhat surprisingly, one of the strongest arguments for stored procedures today may
+ be
+ that they permit you to quickly address bugs and performance problems in the
+ application.
+
Say that you generate SQL statements in your application, and that there is
+ an error in it. Or that it simply performs unbearably slow. To fix it, you need to
+ build a new executable or DLL, which is likely to contain other code that also
+ has changed since the module was shipped. This
+ means that before the fix can be put into production, the module will have to go
+ through QA and testing.
+
On the other hand, if the problem is in a stored procedure, and the fix is
+ trivial, you may be able to deploy a fix into production within an hour after
+ the problem was reported.
+
This difference is even more emphasised, if you are an ISV and you ship a
+ product that the customer is supposed administer himself. If your application
+ uses stored procedures, a DBA may be able to address problems directly
+ without opening a support case. For instance, if a procedure runs unacceptably
+ slow, he may be able to fix that by adding an index hint. In contrast,
+ with an application that generates SQL in the
+ client, his hands will be tied. Of course, as an ISV you may not want your
+ customers to poke around in your code, even less to change it. You may also prefer
+ to ship your procedures WITH ENCRYPTION to protect
+ your intellectual property, but this is best controlled
+ through license agreements. (If you encrypt your procedures, the DBA can still
+ change them, as long as he is able to find a way to decrypt them. Which any
+ DBA that knows how to use Google can do.)
+
In this case, it does not matter whether the stored procedure uses static SQL
+ only, or if it also uses dynamic SQL. For CLR procedures it depends on many objects
+ you have in your assemblies. If you have one assembly per object, installing a new version of a CLR procedure
+ is as simple as replacing a T-SQL procedure.
+
(I should add that SQL2005 offers a new feature that permits the DBA to
+ change the plan for a query without altering the code, by adding a plan guide.
+ This feature has been further enhanced in SQL2008. This is quite an advanced feature, and I refer to Books Online for details.)
Writing
+ dynamic SQL is a task that requires discipline to
+avoid losing control
+ over your code. If you
+ just go ahead, your code can become very messy, and be difficult to read, troubleshoot
+ and maintain. In this section, we will look at how to avoid this. I will also
+ discuss some special cases: how you can use sp_executesql for input longer
+ than 4000 chars in SQL2000, and how to use dynamic SQL with cursors, and the
+ combination of dynamic SQL and user-defined functions.
When you write a stored procedure that generates dynamic SQL, you should
+ always include a @debug parameter:
+
CREATE PROCEDURE dynsql_sp @par1 int,
+ ...
+ @debug bit = 0 AS
+...
+IF @debug = 1 PRINT @sql
+
When you get a syntax error from the dynamic SQL, it can be very confusing, and
+ you may not even discern where it comes from. And even when you do, it can be
+ very difficult to spot the error only by looking at the code that constructs the SQL.
+ Once the SQL code is slapped in your face, the error is much more likely to be apparent to you.
+ So always include a @debug parameter and a PRINT!
As I've already mentioned, one problem with dynamic SQL is that you often need to deal with nested
+ string delimiters. For instance, in the beginning of this article, I showed
+ you the procedure general_select2. Here it is again:
+
CREATE PROCEDURE general_select2 @tblname nvarchar(127),
+ @key varchar(10) AS
+EXEC('SELECT col1, col2, col3
+ FROM ' + @tblname + '
+ WHERE keycol = ''' + @key + '''')
+
(Again, I like to emphasise that this sort of procedure is poor use of
+ dynamic SQL.)
+
+SQL is one of those language where the method to include a string
+delimiter itself in a string literal is to double it. So those four consecutive
+single quotes ('''') is a string literal with the value of a one
+single quote (').
+This is a fairly simple example; it can get a lot worse. If you work with
+dynamic SQL, you must learn to master nested strings. Obviously, in this case you
+can easily escape the mess by using sp_executesql instead yet another reason
+to use parameterised statements. However, there are situations when you need to
+deal with nested quotes even with sp_executesql. For instance, earlier in this
+article, I had this code:
+
N' WHERE LastUpdated BETWEEN @fromdate AND '
+N' coalesce(@todate, ''99991231'')'
+
We will look at some tips of dealing with nested strings later in this
+ section.
+See that there is a space missing after FROM? When you compile the stored procedure
+you will get no error, but when you run it, you will be told that the columns
+keycol, col1, col2, col3 are missing. And since you know that the
+table you passed to the procedure has these columns you will be mighty confused. But this is
+the actual code generated, assuming the parameters foo and abc:
+This is not a syntax error, because FROMfoo is a column alias to col3.
+And, yes, it's legal to use a WHERE clause, even if there is no FROM clause. But
+since the columns cannot exist out of the blue, you get an error for that.
+ This is also a good example why you should use debug prints. If the code
+ looks like this:
It would be much easier to find the error by running the procedure with
+ @debug = 1. (Obviously, had we included the dbo prefix, this error
+ could not occur at all.)
+
Overall, good formatting is essential when working with dynamic SQL. Try to
+ write the query as you would have written it in static SQL, and then add the
+ string delimiters outside of that. T-SQL permits you to embed newlines in
+ string literals (as testified by the example above), so in contrast to VB,
+ you don't need a string delimiter on each line. An advantage of this is that
+ your debug PRINT is easier to read, and in the case of a syntax error the line
+ number in the error message may guide you.
+
You may prefer, though, to
+ have a string terminator on each line. A tip in such case is to do something
+ like this:
Passing table and column names as parameters to a procedure with dynamic SQL
+ is rarely a good idea for application code. (It can make perfectly sense for
+ admin tasks). As I've said, you cannot pass a table or a column name as a
+ parameter to sp_executesql, but you must interpolate it into the SQL string.
+ Still you should protect it against SQL
+ injection, as a matter of routine. It could be that bad it comes from user
+ input.
+
To this end, you should use the built-in function quotename() (added in
+ SQL7). quotename() takes two parameters: the first is a string, and the second
+ is a pair of delimiters to wrap the string in. The default for the second
+ parameter is []. Thus, quotename('Orders') returns
+ [Orders]. quotename() takes care of nested delimiters, so if you have
+ a really crazy table name like Left]Bracket, quotename() will
+ return [Left]]Bracket].
+
Note that when you work with names with several components, each component
+ should be quoted separately. quotename('dbo.Orders') returns
+ [dbo.Orders], but that is a table in an unknown
+ schema of which the first four characters are d, b, o and
+ a dot. As long as you only work with the dbo schema, best practice is to
+ add dbo in the dynamic SQL and only pass the table name. If you work
+ with different schemas, pass the schema as a separate parameter. (Although
+ you could use the built-in function parsename() to split up a
+ @tblname
+ parameter in parts.)
+
While general_select still is a poor idea as a stored procedure, here
+ is nevertheless a version that summarises some good coding
+ virtues for dynamic SQL:
+The main purpose of quotename() is to quote object names, which is why the
+default for the second parameter is brackets. But you can specify other
+delimiters as well, including single quotes, which means that any single quote
+in the input is doubled. Thus, if you for some reason prefer to use
+ EXEC(), you can use quotename() to protect yourself against SQL
+ injection by help of this function. Here is an example.
+
IF @custname IS NOT NULL
+ SELECT @sql = @sql + ' AND custname = ' + quotename(@custname, '''')
+
Say that @custname has the value D'Artagnan. This part of the dynamic SQL
+ becomes:
+
AND custname = 'D''Artagnan'
+
There is a limitation with quotename(): its input parameter
+ is nvarchar(128), so it does not handle long strings. A remedy is this user-defined function:
This version is for SQL2000. On SQL2005 and
+later, replace 1998 and 4000 with MAX,
+ to make it work for any string length. Here is an example of using this function:
+
IF @custname IS NOT NULL
+ SELECT @sql = @sql + ' AND custname = ' + dbo.quotestring(@custname)
+
+The result is the same as above.
+
+On SQL7, you would have to implement quotestring as a stored procedure.
+SQL6.5 does not have replace(), so you are a bit out of luck there.
+
+So with quotename() and quotestring(),
+do we have as good protection against SQL
+injection as we have with parameterised commands? Maybe. I don't know of any way to
+inject SQL that slips through quotename() or quotestring(). Nevertheless, you
+are interpolating user input into the SQL string, whereas with parameterised
+commands, you don't.
+
+(I
+should add that I got the suggestion to use quotename() or a user-defined
+function from SQL Server MVP Steve Kass.)
Another alternative to
+ escape the mess of nested quotes, is make use
+ of the fact that T-SQL actually has two string delimiters. To wit, if the
+ setting QUOTED_IDENTIFIER is OFF, you can also use double quotes(")
+ as a string delimiter. The default
+ for this setting depends on context, but the preferred setting is
+ ON, and it
+ must be ON in order to use XQuery, indexed views and indexes on computed columns.
+ Thus, this is not a first-rate alternative, but if you are aware of the caveats,
+ you can do this:
Since there are two different quote characters, the code is much easier to
+ read. The single quotes are for the SQL string and the double quotes
+ are for
+ the embedded string literals.
+
All and all, this is an inferior method to both sp_executesql and quotestring(), since you are not protected against SQL injection
+ (what if @key includes a double quote?). But it
+ would be OK to do for some sysadmin task (where SQL injection is not likely
+ to be an issue), and it may be the best way to go on SQL6.5.
There is a limitation with sp_executesql on SQL2000
+ and SQL7, since you cannot use longer SQL
+ strings than 4000 characters. (On SQL2005 and later,
+ you should use nvarchar(MAX) to avoid this
+ problem.) If you
+ want to use sp_executesql when your query string exceeds this limit to make use of parameterised query plans, there is actually a
+ workaround. To wit, you can wrap sp_executesql in EXEC():
This very simple: you cannot use dynamic SQL from used-defined functions
+ written in T-SQL. This is because you are not permitted do anything in a UDF
+ that could change the database state (as the UDF may be invoked as part of a
+ query). Since you can do anything from dynamic SQL, including updates, it is
+ obvious why dynamic SQL is not permitted.
+
I've seen more than one post on the newsgroups where people have
+ been banging their head against this. But if you want to use dynamic SQL in a
+ UDF, back out
+ and redo your design. You have hit a roadblock, and in SQL2000 there is no
+ way out.
+
In SQL2005 and later, you could implement your function as a CLR function. Recall that
+ all data access from the CLR is dynamic SQL. (You are safe-guarded, so that if
+ you perform an update operation from your function, you will get caught.) A
+ word of warning though: data access from scalar UDFs can often give performance
+ problems. If you say
+
SELECT ... FROM tbl WHERE dbo.MyUdf(somecol) = @value
+
and MyUdf performs data access, you have more or less created a hidden
+ cursor.
Not that cursors are something you should use very frequently, but people often
+ask about using dynamic SQL with cursors, so I give an example for the sake
+ of completeness. You cannot say DECLARE CURSOR EXEC(); you have to put the
+entire DECLARE CURSOR statement in dynamic SQL:
You may be used to using the LOCAL keyword with your cursors. However, it is
+ important to understand that you must use a global cursor, as a local cursor
+ will disappear when the dynamic SQL exits. (Because, as you know by now, the
+ dynamic SQL is its own scope.) Once you have declared the
+ cursor in this way, you can use the cursor in a normal fashion. You must be
+ extra careful with error-handling though, so that you don't exit the
+ procedure without deallocating the cursor.
+
There is however a way to use locally-scoped cursors with dynamic SQL.
+ Anthony Faull pointed out to me that you can achieve this with cursor variables, as in this example:
+
DECLARE @my_cur CURSOR
+EXEC sp_executesql
+ N'SET @my_cur = CURSOR STATIC FOR
+ SELECT name FROM dbo.sysobjects;
+ OPEN @my_cur',
+ N'@my_cur cursor OUTPUT', @my_cur OUTPUT
+FETCH NEXT FROM @my_cur
+
+You refer to a cursor variable, just like named cursors, but there is an @ in front,
+and, as you see from the example, you can pass them as a parameters. (I have to confess
+I have never seen any use for cursor variables until Anthony Faull was kind to send
+me this example.)
A special feature added in SQL2005 is that you can use EXEC() to run
+ pass-through queries on a linked server. This could be another instance of
+ SQL Server, but it could also be an Oracle server, an Access database, Active
+ directory or whatever. The SQL could be a single query or a sequence of
+ statements, and could it be composed dynamically or be entirely static. The syntax
+ is simple, as seen by this example:
+
EXEC('SELECT COUNT(*) FROM ' + @db + '.dbo.sysobjects') AT SQL2K
+
SQL2K is here a linked server that has been defined with
+ sp_addlinkedserver.
+
There is one thing that you can do with EXEC() at a linked server, that you
+ cannot do with EXEC() on a local server: you can use parameters, both for
+ input and output. The confuse matters, you don't use parameters with names
+ starting with @, instead you use question marks (?) as parameter
+ holders. Say that you are on an SQL2005 box, and you are dying to know how
+ many orders VINET had in the Northwind database. Unfortunately, SQL2005 does
+ not ship with Northwind, but you have a linked server set up to an instance
+ of SQL2000 with Northwind. You can run this:
+
DECLARE @cnt int
+EXEC('SELECT ? = COUNT(*) FROM Northwind.dbo.Orders WHERE CustomerID = ?',
+ @cnt OUTPUT, N'VINET') AT SQL2K
+SELECT @cnt
+
Note here that the parameter values must appear in the order the parameter
+ markers appear in the query. When passing a parameter, you can either specify a
+ constant value or a variable.
+
You may ask why the inconsistency with a different parameter marker from
+ sp_executesql? Recall that linked servers in SQL Server are always accessed
+ through an OLE DB provider, and OLE DB uses ? as
+ the parameter marker, a convention inherited from ODBC. OLE DB translates
+ that parameter marker as is appropriate for the data source on the other end.
+ (Not all RDBMS use @ for variables.)
+
As with regular EXEC(), you can specify AS USER/LOGIN to use impersonation:
+
EXEC('SELECT COUNT(*) FROM ' + @db + '.dbo.sysobjects')
+ AS USER = 'davidson' AT SQL2K
+
This begs the question: is davidson here a local user or a remote
+ user at SQL2K? Books Online is not very clear
+ about this, but I did some
+ quick experimenting, and found that what you are impersonating is a local user or login,
+ not a login on the remote server. (The login to use on the remote server can be
+ defined with sp_addlinkedsrvlogin.)
When you read the various newsgroups on SQL Server, there is almost every day
+ someone who asks a question that is answered with use dynamic SQL with a quick example
+ to illustrate, but ever so often the person answering forgets to tell
+about the implications on permissions or SQL injection. On top of that, far too many
+examples use EXEC() without any thought of query plans. And while many of these
+ questions taken by the letter have no other answer than dynamic SQL, there is
+ often a real business problem which has a completely different solution
+ without dynamic SQL and
+ a much better one.
+
So, in this section I will explore some situations where you could use dynamic
+SQL. You will see that sometimes dynamic SQL is a
+ good choice, but also that in many cases that it is an outright bad idea.
A common question is why the following does not work:
+
CREATE PROCEDURE my_proc @tablename sysname AS
+ SELECT * FROM @tablename
+
+
As we have seen, we can make this procedure work with help of dynamic SQL, but
+ it should also be clear that we gain none of the advantages with generating
+ that dynamic SQL in a stored procedure. You could just as well send the
+ dynamic SQL from the client. So, OK: 1) if the
+ SQL statement is very complex, you save some network traffic and you do encapsulation.
+2) As we have seen, starting with SQL2005 there are methods to deal with
+ permissions. Nevertheless, this is a bad idea.
+
There seems to be several reasons why people want to parameterise the table
+ name. One camp
+ appears to be people who are new to SQL programming, but have experience
+ from other
+languages such as C++, VB etc where parameterisation is a good thing. Parameterising
+the table name to achieve generic code and to increase
+maintainability seems like good programmer virtue.
+
But it is just that when it comes to database objects, the old truth does not
+hold. In a proper database design, each table is unique, as it describes a
+ unique entity. (Or at least it should!) Of course, it is not uncommon to end
+ up with a dozen or more look-up tables that all have an id, a name
+ column and some auditing columns. But they do describe different entities,
+ and their semblance should be regarded as mere chance, and future
+ requirements may make the tables more dissimilar.
+
Furthermore, when it comes to building a query plan, each table has its set
+ of statistics and
+ presumptions that are by no means interchangeable, as far as SQL Server is
+ concerned. Finally, in
+ a complex data model, it is important to get a grip of what's being used. When you start to pass table and column names as parameters, you definitely
+ lose control.
+
So if you want to do the above (save the fact that SELECT * should not be
+ used in production code), to save some typing, you are on the wrong path. It is
+much better to write ten or twenty stored procedures, even if they are similar
+to each other.
+
(If your SQL statements are complex, so that there actually is a considerable
+ gain in maintainability to only have them in one place, despite different
+ tables being used, you could consider using a
+ pre-processor like the one in C/C++. You would still have one set of
+ procedures per table, but the code would be in one single include file.)
This is a variation of the previous case, where there is a suite of tables
+ that actually do describe the same entity. All tables have the same columns, and the name includes some partitioning
+ component, typically year and sometimes also month. New tables are created as
+ a new year/month begins.
+
In this case, writing one stored procedure per table is not really feasible.
+ Not the least, because the user may want to specify a date range for a search, so even
+ with one procedure per table you would still need a dynamic dispatcher.
+
Now, let's make this very clear: this is a flawed
+ table design. You should not have one sales table per month, you should
+ have one single sales table, and the month that appear in the table
+ name, should be the first column of the primary key in the united sales table. But you may be stuck with a legacy
+application where you cannot easily change the table design. And, admittedly, there are situations where partitioning
+makes sense. The table may be huge (say over 10 GB
+ in size), or you want to be able age to out old data quickly. But in such case you should do partitioning properly.
+
In the following, I will look at three approaches to deal with partitioning without using dynamic SQL.
+
Partitioned Tables
+
Partitioned tables were added in SQL2005. You can divide a table in up to 999 partition according to a partition
+function. These partitions can be split up over different filegroups to spread out the load. Another important benefit
+of partitioned tables is that deleting a partition is a pure meta-data operation, which means that if you want to throw
+away all orders that are more than, say, 12 months old, you can do this with the wink of an eye.
+
Table partitioning is only available in Enterprise and Developer Edition, not in Standard. For this reason, I'm not
+going into further details, but refer you to Books Online.
+
Views and Partitioned Views
+
If you have an old application, where you cannot easily merge the umpteen sales tables into one, because it would break
+other parts of the application, a simple approach is
+ to define a view like this:
+
CREATE VIEW sales AS
+ SELECT year = '2006', col1, col2, ... FROM dbo.sales2006
+ UNION ALL
+ SELECT year = '2005', col1, col2, ... FROM dbo.sales2005
+ UNION ALL
+ ...
+
Instead of composing
+ the table name dynamically, you can now say:
+
SELECT ... FROM sales WHERE year = '2006' AND ...
+
Also, it's easy to add new tables to the view or remove old tables as the data is aged out. Unfortunately, this view is not terribly efficient, as the query will access
+ all tables in the view. Furthermore, the view is not updateable. But with a few more steps, you could make it into what SQL Server
+knows as a partitioned view,
+a feature added in SQL2000 (and available in all editions of SQL Server). A true partitioned view can be very efficient, because for
+ queries that include the partitioning column in the WHERE clause, SQL Server
+ will only access the relevant table(s). And such a view is updatable, so you
+ can insert data into it, and the data will end up in the right table.
+
Here is a
+ quick example/demo on how to properly set up a partitioned view. Assume that
+ as legacy of a poor design we have these three tables:
+
SELECT OrderID + 0 AS OrderID, OrderDate, CustomerID, EmployeeID
+INTO Orders96 FROM Northwind..Orders WHERE year(OrderDate) = 1996
+ALTER TABLE Orders96 ALTER COLUMN OrderID int NOT NULL
+
+SELECT OrderID + 0 AS OrderID, OrderDate, CustomerID, EmployeeID
+INTO Orders97 FROM Northwind..Orders WHERE year(OrderDate) = 1997
+ALTER TABLE Orders97 ALTER COLUMN OrderID int NOT NULL
+
+SELECT OrderID + 0 AS OrderID, OrderDate, CustomerID, EmployeeID
+INTO Orders98 FROM Northwind..Orders WHERE year(OrderDate) = 1998
+ALTER TABLE Orders98 ALTER COLUMN OrderID int NOT NULL
+go
+ALTER TABLE Orders97 ADD CONSTRAINT pk97 PRIMARY KEY (OrderID)
+ALTER TABLE Orders96 ADD CONSTRAINT pk96 PRIMARY KEY (OrderID)
+ALTER TABLE Orders98 ADD CONSTRAINT pk98 PRIMARY KEY (OrderID)
+
First step is to a add Year column to each table. These columns need a
+ default (so that processes that insert directly into these tables are
+ unaffected) and a CHECK constraint. Here is how it looks for Orders96:
+
ALTER TABLE Orders96 ADD Year char(4) NOT NULL
+ CONSTRAINT def96 DEFAULT '1996'
+ CONSTRAINT check96 CHECK (Year = '1996')
+
This column must be the first column in the primary key, so we need to drop
+ the current primary key and recreate it:
+
ALTER TABLE Orders96 DROP CONSTRAINT pk96
+ALTER TABLE Orders96 ADD CONSTRAINT pk96 PRIMARY KEY (Year, OrderID)
+
Again, this must be performed for all three tables. Finally, you can create
+ the view:
+
CREATE VIEW Orders AS
+ SELECT * FROM dbo.Orders96
+ UNION ALL
+ SELECT * FROM dbo.Orders97
+ UNION ALL
+ SELECT * FROM dbo.Orders98
+
Note: I have here use SELECT * to save some space in the article, but when you
+define your real view, you should list the colunms explicitly. There is a risk that columns could come in different
+order in the tables.
+
You now have a proper partitioned view that you can perform inserts and updates through. For instance you can run:
SELECT OrderID, OrderDate, EmployeeID
+FROM Orders
+WHERE Year = @year
+ AND CustomerID = N'BERGS'
+
SQL Server will at run-time only access the OrdersNN table that maps to
+ @year. If you look at the query plan casually, it may seem that all three
+ tables are
+ accessed, but if you check the Filter operators you will find something
+ called STARTUP EXPR. This means that SQL Server determines at
+ run-time
+ whether to access the table or not. (In fact, when I tested this, I only got this result on SQL2005 and SQL2008. On
+SQL2000, the start-up expression was not included for some reason I have not been able to understand.)
+
For your real-world case you may find it prohibitive to change the primary
+ key. In this case you could add a UNIQUE constraint with the partitioning
+ column + the real primary key. This will not be a proper partitioned view,
+ and the view will not be updatable,
+ but with some luck SQL Server may still apply start-up expressions, and access only one of the base tables.
+ At least I got it to work, when I ran a quick test. You
+ should verify that it works for your situation.
+
When a new table is added with a new year, the view needs to be redefined. If
+ this happens frequently, for instance by each month, you should probably set
+ up a job for this. I leave out example code, but it requires running
+ a cursor over sysobjects to compose a CREATE VIEW statement that you then
+ execute with sp_executesql or EXEC(). That would be an example of good use of
+ dynamic SQL.
+
This was a concentrated introduction to partitioned views. You can find the full rules for
+ partitioned views under the topic for CREATE VIEW in Books Online. Good
+ reading is also Stefan
+ Delmarco's detailed article
+ SQL
+ Server 2000 Partitioned Views.
+
Compatibility Views
+
If you have very many tables, there is a risk that you will hit a roadblock with a partitioned view: SQL Server only
+permits 256 tables in a query. Henrik Staun Poulsen suggested an alternate solution that evades this restriction. You first create that new table, with
+all the data in it. Then you drop the old tables, but replace them with views:
+
CREATE VIEW sales200612 AS
+ SELECT col1, col2, col3
+ FROM sales
+ WHERE yearmonth = '200612'
+
Old functions that uses dynamic SQL or whatever they do, can continue to do so. If they perform INSERT, UPDATE or
+DELETE operations, you need to implement INSTEAD OF triggers to support this.
+
Obviously, this solution requires you to produce a lot of code, but you don't have to write it by hand; you can
+easily write a program in the language of your choice to generate the views and triggers.
In this case people want to update a column which they select at run time.
+The above is actually legal in T-SQL, but what happens is simply that the
+ variable @colname
+is assigned the value in @value for each affected row in the table.
+
In this case dynamic SQL would call for the user to have UPDATE permissions
+on the table, something not to take lightly. So there is all reason to
+avoid it. Here is a fairly simple workaround:
+
UPDATE tbl
+SET col1 = CASE @colname WHEN 'col1' THEN @value ELSE col1 END,
+ col2 = CASE @colname WHEN 'col2' THEN @value ELSE col2 END,
+ ...
+
+If you don't know about the CASE expression, please look it up in Books Online.
+It's a very powerful SQL feature.
+
Then again, one would wonder why people want to do this. Maybe it's because their
+tables look like this:
The request here is to determine the name for a column in a result set at
+run-time. My gut reaction, is that this should be handled
+client-side. But if your client is a query window is Management Studio or
+similar, this is kind of difficult. In any case, this is simple to do without any
+dynamic SQL on SQL2005 and later:
+
DECLARE @mycolalias sysname
+SELECT @mycolalias = 'This week''s alias'
+
+CREATE TABLE #temp (a int NOT NULL,
+ b int NOT NULL)
+
+INSERT #temp(a, b) SELECT 12, 17
+
+EXEC tempdb..sp_rename '#temp.b', @mycolalias, 'COLUMN'
+
+SELECT * FROM #temp
+
That is, you first get the data into a temp table, and then you use
+sp_rename to rename the column along your needs. (You need to qualify sp_rename with tempdb to have
+it to operate in that database.) You will get
+an informational message Caution: Changing any part of an object name could
+break scripts and stored procedures, but you may be able to live with that.
+
+
This trick works on SQL2000 too, although not entirely without dynamic
+SQL:
+you need put the SELECT from the temp table in
+EXEC():
+
EXEC('SELECT * FROM #temp')
+
This is because on SQL2000, sp_rename apparently does not trigger a recompile,
+so if the the SELECT is in the same batch, the statement fails with Invalid
+column name 'b'. There is yet one thing to be aware of on SQL2000: you
+cannot use sp_rename in a stored procedure that is to be run by plain users, as sp_rename thinks
+you need to be a member of the db_owner or db_ddladmin database roles,
+even if this is only a temp table. This issue has been addressed in
+SQL2005.
In this case the table is in another database which is somehow determined
+dynamically. There seems to be several reasons why people want to do this, and
+ depending on your underlying reason, the solution is different.
If you for some reason have your
+ application spread over two databases, what you absolutely not should do is
+ to have code that says:
+
SELECT ... FROM otherdb.dbo.tbl JOIN ...
+
This is bad, because if someone asks for a second environment on the same
+ server, you have a lot of code to change.
+
The best solution for this particular problem is to use synonyms, added in SQL2005:
+
CREATE SYNONYM otherdbtbl FOR otherdb.dbo.tbl
+
You can then refer to otherdb.dbo.tbl as just otherdbtbl. If
+ there is a need for a second set of databases, you only have to update the
+ synonyms, and there is no need to use dynamic SQL.
+
Yet a way to avoid dynamic SQL is to use stored procedures for all
+ inter-database communication. That is, if you are in db1 and need to get data from
+ db2, you call a stored procedure in db2. This can be dynamic,
+ because EXEC permits you to specify a variable that holds the name of the
+ procedure to execute.
As above, I make use of that you can specify the procedure name dynamically
+ with EXEC. The trick here is that when you specify a system stored procedure
+ in three-part notation with the database name, the procedure executes in the
+ context of that database. Thus, the dynamic SQL in this example runs in
+ @dbname, not the current database.
This sounds to me like some sysadmin
+ venture, and for sysadmin tasks dynamic SQL is
+ usually a fair game, because neither caching nor permissions are issues.
+ Nevertheless there is an kind of alternative: sp_MSforeachdb, demonstrated by this example:
+
sp_MSforeachdb 'SELECT ''?'', COUNT(*) FROM sysobjects'
+
As you might guess, sp_MSforeachdb uses dynamic SQL internally, so
+ what you win is that you don't have to write the control loop yourself. I should
+ hasten to add that sp_MSforeachdb is not documented in Books Online,
+ which also means that use of it is not supported by Microsoft and it could be
+ changed or withdrawn from SQL Server without notice.
The scenario here is that you have a suite of databases with identical
+ schema. The typical reason they are different databases and not one, is that every
+ database serves a different customer, and each customer can access his
+ database (but of course no one else's). Some people
+ see a problem with the same stored procedures in fifty databases,
+ and believe that they face a maintenance nightmare. So they get the idea
+ that they should put the procedures in a "master" database. Yes, you can do that. It
+ will give you a much bigger maintenance problem, because your code will
+ entirely littered with dynamic SQL.
+ In fact, if you feel that this is the only alternative, you are better off
+ skipping stored procedures altogether and do all access from client code
+ instead. In such case there is only one place you need to specify the
+ database: the connection string.
+
What else can you do? Some people might suggest that you should collapse the
+ databases into one, and employ a strict
+ row-level security scheme. Personally, I would never accept such a solution
+ as a potential customer. In a complex application, bugs can easily lead to
+ that information is exposed to people who should not see it. Besides,
+ row-level security cannot be implemented entirely waterproof in SQL Server.
+ Whereas queries only would return the data they should, query plans and error
+ messages may indirectly disclose information to users who are not authorised
+ to see it.
+
Another wild approach is to use SQL Server's own master database and install the application procedures
+ as system procedures. I have not played with this for a long time, but I am told that it still works in SQL2008. In any case, this is entirely
+ unsupported. So while I mention the possibility, I don't give you the details
+ on how to do it and I strongly recommend that you don't go there.
+
What then is the real solution? Install the stored procedures in each database and develop
+ rollout routines for your SQL objects. You need this anyway, the day you want
+ to update the table definitions. This also permits you to have some
+ flexibility. Some customers may prefer to skip an upgrade. Other customers
+ may be prepared to pay for extra functions that only they have access to. Even more importantly, it permits you to easily scale out and move some
+ databases to a second server. I mentioned that as a customer, I would not
+ accept to share database with other customers. In fact, a security-aware
+ customer would not even accept to share the same instance of SQL Server, but
+ require his own instance.
+
(You may ask whether not synonyms could be used to implement the "master"
+ database. I have not been able to think of anything useful, but if you find
+ out something, please drop me a line.)
This question sometimes comes up. Most often people have problems with the
+ USE command. The correct solution is to avoid USE altogether in this case. In
+ fact, we have already seen how to do this:
It is fascinating how may people who put '1,2,3,4' in @list, and then are
+ puzzled why the query above does not return any rows. Well, if there is a row
+ where col has the value '1,2,3,4', you will get a match. These two
+ conditions are the same:
+
col IN (@list)
+col = @list
+
IN does not mean "parse whatever data there is at runtime as a
+ comma-separated list". It's a compile-time shortcut for
+ col =
+ @a OR col = @b OR ...
+
This is a very common question on the newsgroups, and Use dynamic SQL is a far too common answer.
+ Yes, you can do this with dynamic SQL, but it is an extremely poor solution.
+ You cannot pass the list as a parameter to sp_executesql, so you would have
+ to use EXEC() and be open to SQL injection. On
+ top of that, for long lists, IN has extremely poor performance in some
+ tests I did, it took SQL Server 15 seconds to build the query plan for a list
+ with 10000 elements.
+
The correct method is to unpack the list into a table with a user-defined
+ function or a stored procedure. In my article, Arrays and Lists in
+ SQL Server, I describe a whole range of ways to do this. I also present performance data for the various methods. (Dynamic SQL is at
+ the bottom of that list!) This is a long article, but there are jump-start
+ links in the beginning of the article, depending on which version of SQL
+ Server you are using.
CREATE PROCEDURE search_sp @condition varchar(8000) AS
+ SELECT * FROM tbl WHERE @condition
+
Just forget it. If you are doing this, you have not completed the transition
+ to use stored procedure and you are still assembling your SQL code in the client.
+But this example lapses into
A not too uncommon case is that the users should be able to select data from a broad set of
+parameters. The procedure search_orders in the section on
+ SQL injection
+ is a very simple example of this.
+
Any programmer that tackles this realises that writing a static solution
+ with a tailor-made query for each combination of input parameters is
+ impossible. It most cases, it's simple to write a single static query with conditions like:
+
AND (CustomerID = @custid OR @custid IS NULL)
+
But in SQL2005 and earlier if is not possible to get good performance from such a query, but the only option for good
+ performance is to use dynamic SQL. This changed in SQL2008, provided that you use the RECOMPILE hint. However that is a bit complicated, because the original implementation had a serious bug, so Microsoft reverted on that change for a while. Rather than going into details here, I refer you to my article, Dynamic Search Conditions, where I
+ discuss this type of searches in more detail and where I present several methods, both with dynamic SQL and
+ static SQL. This article exists in two versions, one for
+ SQL2008 and later, and one for earlier versions.
Another common request is to make a dynamic crosstab query, where you transform rows into columns. For instance, say
+that you want to display the number of orders handled by each employee in Northwind with one column per year. This query
+works well:
+
SELECT E.LastName,
+ [1996] = SUM(CASE Year(OrderDate) WHEN '1996' THEN 1 ELSE 0 END),
+ [1997] = SUM(CASE Year(OrderDate) WHEN '1997' THEN 1 ELSE 0 END),
+ [1998] = SUM(CASE Year(OrderDate) WHEN '1998' THEN 1 ELSE 0 END)
+FROM Orders O
+JOIN Employees E ON O.EmployeeID = E.EmployeeID
+GROUP BY E.LastName
+
But in many situations you don't exactly which columns you will have in the data, or even how many there will be. For
+instance, in this example, we may not know beforehand for which years there are orders.
+
One approach is to set an upper limit of how many output columns you support and use dummy names for the columns.
+Once you have run the query, you use the technique I described in the section SELECT col AS @myname.
+
+
However, in the very most cases, you will want to employ dynamic SQL for this. And there is not really any
+alternative. A SELECT statement returns a table, and a table has a known number of columns with known names, so there is
+no way you can write a static SELECT statement to achieve this.
+
The general technique is a two-step operation: 1) Get the unique values to pivot on. 2) with those values, generate a query like the one above. While it's a short description, it
+takes some time to get everything in place. You can make a shortcut with the stored procedure
+pivot_sp, something I have adapted from a procedure
+originally written by SQL
+Server MVP Itzik Ben-Gan. The procedure takes a number of parameters permitting you to specify the query, the rows to group
+by and to pivot by, and which aggregation operation you want.
+
As this article is already long enough, I don't go into details to try to explain how it works, but leave it to you
+to explore it on your own. I like to stress one thing though: The way pivot_sp is written, it is wide-open to
+SQL injection, and it is very difficult, not to say impossible to make the procedure
+fool-proof since it accepts query text as parameter. This is no problem as long as you use it as your own utility
+procedure and have full control over the input, but you should not make a procedure like this one accessible to anyone.
+Rather I recommend that you do
+
DENY EXECUTE ON pivot_sp TO public
+
To make sure that plain users cannot run it. If you make a call to pivot_sp in a stored procedure, this call
+will succeed as ownership chaining applies. The file for
+pivot_sp includes an example to demonstrate this.
+
Another option for dynamic crosstab is RAC, which is a third-party tool. I have never used it
+myself, but I have heard several good comments about it.
This can easily be handled without dynamic SQL in this way:
+
SELECT col1, col2, col3
+FROM dbo.tbl
+ORDER BY CASE @col1
+ WHEN 'col1' THEN col1
+ WHEN 'col2' THEN col2
+ WHEN 'col3' THEN col3
+ END
+
Again, review the CASE expression in Books Online, if you are not acquainted
+with it.
+
Note that if the columns have different data types you cannot lump them into
+ the same CASE expression, as the data type of a CASE
+ expression is always one and the same. Instead, you can do this:
+
SELECT col1, col2, col3
+FROM dbo.tbl
+ORDER BY CASE @col1 WHEN 'col1' THEN col1 ELSE NULL END,
+ CASE @col1 WHEN 'col2' THEN col2 ELSE NULL END,
+ CASE @col1 WHEN 'col3' THEN col3 ELSE NULL END
+
+If you also want to make it dynamic whether the order should be ascending or
+descending, add one more CASE:
+
SELECT col1, col2, col3
+FROM dbo.tbl
+ORDER BY CASE @sortorder
+ WHEN 'ASC' THEN CASE @col1
+ WHEN 'col1' THEN col1
+ WHEN 'col2' THEN col2
+ WHEN 'col3' THEN col3
+ END
+ ELSE NULL
+ END ASC,
+ CASE @sortorder
+ WHEN 'DESC' THEN CASE @col1
+ WHEN 'col1' THEN col1
+ WHEN 'col2' THEN col2
+ WHEN 'col3' THEN col3
+ END
+ ELSE NULL
+ END
+
Or use the form in the second example to deal with different data types.
+
SQL Server MVP Itzik Ben-Gan had a good article on this topic in the March
+2001 issue of SQL Server Magazine,
+where he offers other suggestions.
+
It should be added that these solutions has the disadvantage that they will always cause a sort which for a large
+data set could be expensive. If you add an ORDER BY clause in dynamic SQL, the optimizer may avoid the sort if there is
+a suitable index.
This is no longer an issue, since SQL2005 added new syntax that permits a variable:
+
SELECT TOP(@n) col1, col2 FROM tbl
+
On SQL2000, TOP does not accept variables, so you need to use dynamic SQL to use
+TOP. But there is an alternative:
+
CREATE PROCEDURE get_first_n @n int AS
+SET ROWCOUNT @n
+SELECT au_id, au_lname, au_fname
+FROM authors
+ORDER BY au_id
+SET ROWCOUNT 0
+
It can be disputed whether SET ROWCOUNT @n is really a better solution than
+ running a dynamic SQL statement with TOP. A dynamic TOP is probably a
+ better choice, as long as you can accept the security implications. (But it's
+ not worth to change the permissions only for this.)
+
I guess a common reason for wanting to do this is to implement paging in web
+ applications. SQL Server MVP Aaron Bertrand has an article which is the
+ standard reference on
+ this topic.
The desire here is to create a table of which the name is determined at
+ run-time.
+
If we just look at the arguments against using dynamic SQL in stored
+ procedures, few of them are really applicable here. If a stored procedure has a
+ static CREATE TABLE in it, the user who runs the procedure must have
+ permissions to create tables, so dynamic SQL
+ will not change anything. Plan caching obviously has nothing to do with
+ it. Etc.
+
Nevertheless: Why? Why would you want to do this? If you are creating tables on the fly in your
+ application, you have missed some fundamentals about database design. In a
+ relational database, the set of tables and columns are supposed to be
+ constant. They may change with the installation of new versions, but not during
+ run-time.
+
Sometimes when people are doing this, it appears that they want to construct
+unique names for temporary tables. This is completely unnecessary, as this is a
+built-in feature in SQL Server. If you say:
+
CREATE TABLE #nisse (a int NOT NULL)
+
then the actual name behind the scenes will be something much longer, and no
+other connections will be able to see this instance of #nisse.
+
If you want to create a permanent table which is unique to a user, but you
+ don't want to stay connected and therefore cannot use temp tables, it may be
+better to create one table that all clients can share, but where the first
+column is a key which is private to the client. I discuss this method a little
+ more closely in my article How to
+ Share Data between Stored Procedures.
Sometimes I see persons on the newsgroups that are unhappy, because they
+ create a temp table from dynamic SQL, and then they can't access it, because it
+ disappeared when the dynamic SQL exited. When told that they have to create the
+ table outside the dynamic SQL, they respond that they can't, because they don't
+ know the structure of the table until run-time.
+
One solution is to create a global temp table, one with two # in the name,
+ for instance ##temp. Such a table is visible to all processes (so you may have
+ to take precautions to make the name unique), and unless you explicitly drop it, it exists
+ until your process exits.
+
But the real question is: what are these guys up to? If you are
+ working with a relational database, and you don't know the structure of your
+ data until run-time, then there is something fundamentally wrong. As I have
+ never been able to fully understand what the underlying business requirements
+ are, I can't really provide any alternatives. But I would suggest that if you
+ need to go this road, you should seriously consider to run your SQL from a client
+ program. Because, all access
+ to that table would have to be through dynamic SQL, and composing
+ dynamic SQL strings is easier in languages with better string capabilities,
+ be that C#, VB or Perl.
This is similar to parameterising the database name,
+ but in this case we want to access a linked server of which the name is
+ determined at run-time.
+
Two of the solutions for dynamic database names apply here as well:
+
+
On SQL2005 and later, the best solution is probably to use synonyms:
+
CREATE SYNONYM myremotetbl FOR Server.db.dbo.remotetbl
+
If you can confine the access to the linked server to a stored procedure
+ call, you can build the SP name dynamically:
+
+If you want to join a local table with a remote table on some remote server,
+determined in the flux of the moment, dynamic SQL is probably the best way if
+you are on SQL2000.
+There exists however an alternative, although it's only usable in some
+situations. You can use sp_addlinkedserver to define the linked server at
+run-time,
+as demonstrated by this snippet:
+
EXEC sp_addlinkedserver MYSRV, @srvproduct='Any',
+ @provider='SQLOLEDB', @datasrc=@@SERVERNAME
+go
+CREATE PROCEDURE linksrv_demo_inner WITH RECOMPILE AS
+ SELECT * FROM MYSRV.master.dbo.sysdatabases
+go
+EXEC sp_dropserver MYSRV
+go
+CREATE PROCEDURE linksrv_demo @server sysname AS
+ IF EXISTS (SELECT * FROM master..sysservers WHERE srvname = 'MYSRV')
+ EXEC sp_dropserver MYSRV
+ EXEC sp_addlinkedserver MYSRV, @srvproduct='Any',
+ @provider='SQLOLEDB', @datasrc=@server
+ EXEC linksrv_demo_inner
+ EXEC sp_dropserver MYSRV
+go
+EXEC linksrv_demo 'Server1'
+EXEC linksrv_demo 'Server2'
+
+There are two procedures. linksrv_demo_inner is the procedure where we
+actually access the linked server. As the linked server must exist when the
+procedure is created, I first create a dummy entry for MYSRV, which I subsequently
+drop once the procedure has been created. (Not only must the linked server exist, it must also have the database and
+tables that you access.) linksrv_demo is the outside interface which takes a
+server name as a parameter, and then at run-time defines MYSRV to point to
+@server.
+
+The above is only possible under certain conditions:
+
+
The procedure must be run by someone who has privileges to set up
+ linked servers, normally only the roles sysadmin and setupadmin
+ have these permissions. Thus, plain users do not apply.
+
Since you change a
+ server-wide definition, you cannot have several instances of the procedure
+ running. (It goes without saying, that you should use the alias in this
+ procedure only.)
+
+
+As you can see in the example, I've added WITH RECOMPILE to linksrv_demo_inner.
+This is a safety precaution, to prevent that a cached plan does not access a
+different server. I don't think this is really necessary, as SQL Server should sense the
+changed definition. In fact, you may not even have to split the code over two
+procedures, but as they say, better safe than sorry.
The rowset functions OPENQUERY and OPENROWSET often calls for dynamic SQL. Their second argument
+ is an SQL string, and they do no accept variables.
+ (This is because the optimizer builds a plan for the distributed query when
+ the procedure is compiled.) So any single parameter you want to pass to the
+ SQL statement for that remote server requires you to use dynamic SQL. Since the
+ remote SQL string can include string literals, you
+ may have to deal with up to three
+ levels of nested quotes. If you don't watch out, you can spend a full day
+ looking at things like:
to try to find out if you might you have one ' too many or too
+ few.
+
Strict discipline is absolutely necessary when working with dynamic SQL for
+ OPENQUERY. The function quotestring()
+ that I showed you earlier can be of great help:
+
The built-in function quotename() is usually not useful here, as the SQL statement easily
+ can exceed the limit of 129 characters for the input parameter to
+ quotename().
+
+
On SQL2005 and later, you can use EXEC() to run an SQL statement on a
+ linked
+ server. Since EXEC() at linked servers can take parameters, this can make
+ things considerably easier. Then again, you can join OPENQUERY with local
+ tables, so that only rows of interest are brought across the wire. This you
+ cannot do with EXEC().
Say that you write a stored
+ procedure that is to present some data, and the GUI it is to be run from is
+ Query Analyzer or SQL Server Management Studio (presumably because it is a sysadmin procedure). To make the
+ output easy to digest, you want the column width to be so wide that no data
+ is truncated, but neither do you want any extraneous spaces. This is
+ something you can achieve with dynamic SQL. Typically you would use a temp table
+ to hold the data, in which case there are no permission issues.
+
Rather than giving an example, I refer you to the source code for the popular (but undocumented)
+ system procedure sp_who2. You can find the code by entering exec
+ master..sp_helptext sp_who2.
I've written this text with a main focus on application code, because it is
+ mainly in application tasks, bad usage of dynamic SQL can cause serious harm
+ by opening for SQL injection, poor
+ query-plan reuse, and result in code that is
+ difficult to read and maintain.
+
Here, I like to briefly discuss code is for maintenance jobs, code that
+ runs once a
+ night or once a week or even less frequently. Generally, for this sort of
+ code, dynamic SQL is almost always a fair game. Query
+ plans are rarely an issue. And if the code is to be run by users with
+ sysadmin privileges, there are no permissions issues. The same applies to
+ code that does not require permissions outside the database, and is to be run
+ by users with db_owner privileges.
+
There are however, two points about SQL injection I like to make.
+
+
If you are a DBA that writes some stored procedure to be run by junior
+ operators that do not have sysadmin privilege themselves, you must of
+ course take precaution against SQL injection, so that they don't outsmart
+ you.
+
If you write a job that performs operations on tables in
+ every database, be careful to use quotename() when you build the SQL strings.
+ This is particularly important if there are non-sysadmin users that own
+ databases. A user could create a table with a name that injects an SQL command
+ into
+ your maintenance script when you run it. If you are the DBA at a hosting
+ company, this is a risk that you definitely should not neglect.
I like to thank the following persons who have provided valuable suggestions
+ and input for this article: SQL Server MVPs Tibor Karaszi, Keith Kratochvil,
+ Steve Kass, Umachandar Jaychandran, Hal Berenson and Aaron Bertrand, as well as Pankul Verma,
+ Anthony Faull, Henrik Staun Poulsen, Karl Jones, Jim Higgins, Marcus
+ Hansfeldt, Gennadi Gretchkosiy, Jeremy Lubich and Simon Hayes. I also like to thank Frank Kalis for providing the
+German
+ translation.
+
Not the least I like to thank all you people who have pointed out typos
+and spelling errors. Just keep those letters and cards coming!
2015-04-14 A very small change, in fact the addition of a single dot that was missing in SET @sp in the section linked servers. Thanks to Jim Higgins for pointing out this error.
+
2011-06-23 Updated the text in the section on Dynamic Search Conditions to mention the RECOMPILE hint, since the bug mentioned in the entry from 2009-02-14 has been fixed.
+
2009-09-12 Gennadi Gretchkosiy pointed out using that SELECT * in a
+ partitioned view is not OK. If the columns come in different order in the underlying tables, you will get a mess.
+
2009-02-14 - Removed text in the section on Dynamic Search Conditions that referred
+to the new behaviour of OPTION (RECOMPILE) in SQL 2008, that Microsoft is now reverting
+on because of a serious
+bug.
+
2008-12-06 Modified the section on dynamic crosstab to stress that pivot_sp is
+open to SQL injection.
+
2008-12-02 Updated the article for SQL2008. Rewrote the section on Sales + @yymm
+tables and added one more approach. Added a section on dynamic crosstab. Various other minor
+changes.
+
2008-06-06 Added an example on how to deal with dynamic sort
+order in the section on ORDER BY.
2006-12-27 In the section Caching
+ Query Plans, added a note
+ on forced parameterisation and a demo of the performance penalty for failing
+ to use parameterised queries.
+
2006-07-25 Corrected syntax in example with
+ cursor variable after comment from Anthony Faull.
+
2006-04-23 Thoroughly reworked the article to cover SQL2005 in
+ full, resulting in lots of new text, lots of old text dropped, and many
+ sections rearranged. I'm now
+ more strongly favouring sp_executesql over EXEC(), and
+ I put more stress on SQL
+ injection. I also stress the importance of using parameterised statements for
+ query-plan reuse, and I note that prefixing with dbo is essential for
+ query-plan reuse. The examples of cases where (not) to use dynamic SQL have
+ had an overhaul as well, if not equally drastic. I'm now giving a very quick
+ example of partitioned views for the sales + @yymm case. The article now also
+ includes snippets for
+ parameterised commands from VB6 and VB .Net.
+
2005-04-17 Added example of EXEC +
+ sp_executesql with OUTPUT parameter. Added use of nvarchar(max) on
+ SQL2005 for quotestring and elsewhere.
+
2004-02-08
+ German translation now available. Minor language corrections.
+
2003-12-02 Added example of using
+ cursor variable with dynamic SQL. Modified description
+ of first parameter to sp_executesql.
\ No newline at end of file
diff --git a/Articles/Backup/To BLOB or Not To BLOB Large Object Storage in a Database or a Filesystem.pdf b/Articles/Backup/To BLOB or Not To BLOB Large Object Storage in a Database or a Filesystem.pdf
new file mode 100644
index 00000000..9ff7aec8
Binary files /dev/null and b/Articles/Backup/To BLOB or Not To BLOB Large Object Storage in a Database or a Filesystem.pdf differ
diff --git a/Articles/Backup/sql server on vmware best practices guide.pdf b/Articles/Backup/sql server on vmware best practices guide.pdf
new file mode 100644
index 00000000..fa1604fb
Binary files /dev/null and b/Articles/Backup/sql server on vmware best practices guide.pdf differ
diff --git a/Articles/Dynamic Search Conditions in T-SQL.htm b/Articles/Dynamic Search Conditions in T-SQL.htm
deleted file mode 100644
index 0d80cb20..00000000
--- a/Articles/Dynamic Search Conditions in T-SQL.htm
+++ /dev/null
@@ -1,1194 +0,0 @@
-
-
-
-
-
-Dynamic Search Conditions in T-SQL
-
-
-
It is very common in information systems to have functions where the users are able to search the data by selecting
- freely among many possible criterias. When you implement such a function with SQL Server there are two challenges: to produce the correct result and have good performance.
-
When it comes to the latter, there is a key theme: there is no single execution plan that is good for all possible search criterias. Rather, you want the query plan to be different depending on user input. There are two ways to achieve this. You can write a static SQL query and add the hint OPTION (RECOMPILE) which forces SQL Server to compile the query every time. Or you can use dynamic SQL to build a query string which includes only the search criterias the user specified. We will look at both these approaches in this article. They are both viable, and a good SQL programmer should have both in his toolbox since both have their strengths and weaknesses.
-
This article assumes that you are on SQL 2008 or later. A key feature of this article is OPTION (RECOMPILE), a query hint that was introduced already in SQL 2005, but which was implemented properly first in SQL 2008. And to be precise, you should be on at least Service Pack 2 of SQL 2008, or Service Pack 1 for SQL 2008 R2 to take benefit of this feature. For a full discussion of how this feature has changed forth and back, see the section The History of Forced Recompilation, which also discusses a bug with OPTION (RECOMPILE) fixed in the autumn of 2014.
-
If you are still on SQL 2005 or SQL 2000, there is an older version of this article where I cover additional techniques that are not equally interesting on SQL 2008 and later, thanks to OPTION (RECOMPILE).
-
I begin the article looking at some methods which are good for very simple cases where you only need to handle a very small set of choices and where the more general methods shoot over the target. The next chapter introduces the task in focus for the rest of the article: the requirement to implement the routine search_orders in the Northgale database which I introduce this chapter. The two main chapters of this article look at implementing this procedure with static and dynamic SQL.
Problems with dynamic search conditions come in several flavours. In the general case, there is a search form where the user can select between many search conditions, and this is also the main focus of this article. But
-sometimes you encounter problems with a small number of conditions that are more or less mutually exclusive. A typical example would be a form where a user can look up a customer by entering one of: 1) The name of the customer. 2) The customer number. 3) The customer's national registration number. (That is, what is called SSN,
-personnummer etc. depending on where you are.) There are indexes on all three columns.
-
None of the solutions in the main body in the article are not really suitable here. Forcing a recompile every time with OPTION (RECOMPILE) can add too much load to the system, particularly if these lookups are frequent. And dynamic SQL is just too much hassle for a simple problem like this one.
-
So let us look at more lightweight solutions that fit this problem. A very simple-minded way is to use IF:
-
IF @custno IS NOT NULL
- SELECT ... FROM customers WHERE custno = @custno
-ELSE IF @natregno IS NOT NULL
- SELECT ... FROM customers WHERE natregno = @natregno
-ELSE IF @custname IS NOT NULL
- SELECT TOP 200 ...
- FROM customers
- WHERE custname LIKE @custname + '%'
- ORDER BY custname
-ELSE
- RAISERROR('No search condition given!', 16, 1)
-
(The TOP 200 for the search on customer name limits the output in case the user would enter a very short search string, so that we don't return tens of thousands of customers.)
-
If you need to return data from other tables as well, and you don't want to repeat the join, you could enter all matching customer numbers into a table variable or a temp table, and then do your final join:
-
IF @custno IS NOT NULL
- INSERT @cust (custno) VALUES (@custno)
-ELSE IF @natregno IS NOT NULL
- INSERT @cust (custno) SELECT custno FROM customers WHERE natregno = @natregno
-ELSE IF @custname IS NOT NULL
- INSERT @cust (custno)
- SELECT TOP (200) custno
- FROM customers
- WHERE custname LIKE @custname + '%'
- ORDER BY custname
-ELSE
- RAISERROR('No search condition given!', 16, 1)
-
-SELECT ...
-FROM @cust c
-JOIN customers cst ON cst.custno = c.custno
-JOIN ...
-
There is however a potential performance problem here. No matter which choice the user makes, we want the optimizer to use the index on the chosen search column. But the way SQL Server builds query plans, this may not always happen. When the procedure is invoked and there is no plan in the cache, SQL Server builds the plan for the entire stored procedure and "sniffs" the current input values for the parameters. Say that the first user to make the search enters a customer number. This means that the branches for national registration number and customer name are optimised for NULL and under unfortunate circumstances this could lead to a plan with a table scan, which is not what you want. (For an in-depth discussion on parameter sniffing, see my article Slow in the Application – Fast in SSMS.)
-
To prevent this from happening, there are a couple of precautions you can take. One is to push the three SELECT statements down into three subprocedures, but admittedly this is a bit bulky. Another approach is to add explicit index hints, but you should always be restrictive with index hints. For instance, what if someone renames the index? That would cause the query to fail.
-
Rather, the best option is probably to use the OPTIMIZE FOR hint:
-
SELECT TOP 200 custno
-FROM customers
-WHERE custname LIKE @custname + '%'
-ORDER BY custname
-OPTION (OPTIMIZE FOR (@custname = N'ZZZZZZZ'))
-
This hint causes SQL Server to build the query plan for the value you specify. Obviously you should pick a value which is selective enough.
-
Whatever strategy you choose, you should test on production-size data that you get the plans you expect. Due to the sniffing issue, your test should look something like this:
That is, you should test with all three parameters as the parameter "sniffed" when the plan is built.
-
In this particular example, there is one more issue with the @custname parameter that I have ignored so far: the user could add a leading %, in which case a scan would be a better choice. If you need to support searches with a leading %, the best is to split this into two branches:
-
IF left(@custname, 1) <> '%'
- -- query as above
-ELSE
- -- same query, but with different value in OPTIMIZE FOR.
-
Using OR
-
If you don't like the multiple IF statements, you may be delighted to know that it is in fact perfectly possible do it all in one query as long as you can ignore leading % in @custname:
-
SELECT TOP 200 ...
-FROM customers
-WHERE (custno = @custno AND @custno IS NOT NULL) OR
- (natregno = @natregno AND @natregno IS NOT NULL) OR
- (custname LIKE @custname + '%' AND @custname IS NOT NULL)
-ORDER BY custname
-
The WHERE clause here essentially reads:
-
custno = @custno OR natregno = @natregno OR custname LIKE @custname + '%'
-
But the added conditions with IS NOT NULL serve a purpose. With them, the chances are good that the optimizer will pick a plan that seeks all three indexes using index concatenation. However, thanks to the IS NOT NULL conditions, SQL Server will add Filter operators with a startup expression so that at run-time, only one index is accessed. (I return to startup expressions in the section Optional Tables later in this article.)
-
This strategy usually works well as long as the search terms are all in the same table and all are indexed, but rarely (if ever) if the search terms are in different tables. In any case, you should never use this strategy blindly, but always verify that you get the plan – and the performance – you intended.
-
The Case Study: Searching Orders
-
-
We will now turn to a more general case with many search terms. We will work with implementing a stored procedure that
- retrieves information about orders in the Northgale database, which is an inflated version of Microsoft's classic Northwind database. See later in this chapter how to install it.
-
This is the interface that we expose to
- the user (well rather to a GUI or middle-layer programmer):
You see in the SELECT list what information the user gets. Here is a
- specification of the parameters:
-
-
-
Parameter
Function
-
@orderid
Retrieve this order only.
-
@fromdate
Retrieve orders made on @fromdate
- or later.
-
@todate
Retrieve orders made on @todate
- or earlier.
-
@minprice
Retrieve only order details that
- cost at least @minprice.
-
@maxprice
Retrieve only order details that
- cost at most @maxprice.
-
@custid
Retrieve only orders from this
- customer.
-
@custname
Retrieve only orders from customers whose name starts with @custname.
-
@city
Retrieve only orders from customers in this city.
-
@region
Retrieve only orders from customers in this region.
-
@country
Retrieve only orders from customers in this country.
-
@prodid
Retrieve only order details with
- this product.
-
@prodname
Retrieve only order details with a
- product starting with @prodname.
-
-
@employeestr
- @employeetbl
-
These two parameters serve the same purpose: return only orders for the specified employees. @employeestr is a comma-separated string with employee IDs, while @employeetbl is a table-valued parameter. See further the discussion below.
-
-
If the user leaves out a search condition, that search condition should not
- apply to the search. Thus, a plain EXEC search_orders should
- return all orders in the database. In this text I will discuss some different implementations of search_orders,
- unimaginatively named search_orders_1 etc. Some
- of them are included in whole in this text, others only in parts. All
- are available in the dynsearch-2008 directory on my web site. (The numbering of the procedures is
-quite out of order with the text due to the historic evolution of this article.)
-
The last two parameters in the parameter list serve the same purpose functionally. I have included both to illustrate two ways how to handle multi-valued parameters. When I see these questions on the forums, people almost always have a comma-separate list. This list must be cracked into a table to be usable in SQL Server, which easily can be done with a table-valued function. In my article Arrays and Lists in SQL Server 2005 you can find a whole slew of such functions.
-
My own preference is to use a table-valued parameter and I discuss this in detail in my article Arrays and Lists in SQL Server 2008. I have not included these two parameters in all search_orders procedures; they are only present when I want to illustrate a technique to handle them. Some procedures have only one of them. (In case you wonder why @employeetbl does not have a default value: Table-valued parameters can never have an explicit default value, but instead they always have the implicit default value of an empty table.)
-
The search_orders example is not overly complicated; each condition can be implemented with a
- single condition using =,<=, >= or LIKE. In a real-life application you may encounter more complex requirements:
-
-
User should be able to select how the output should be sorted.
-
Depending on input parameters you may need to access different tables or columns.
-
Users should be able to choose the comparison operator, for instance @country = 'Germany' or @country != 'Germany'.
-
Users should be able to add or remove columns from the output and for an aggregation query what to aggregate on.
-
Anything else you can imagine – or you were not able to imagine, but the users wanted it anyway.
-
-
In interest of keeping this article down in size, I have not included such parameters in search_orders. Nevertheless, I cover some of these points in the text that follows.
-
The Northgale Database
-
I wrote the first version of this article when SQL Server 2000 ruled the world. I worked from the Northwind database, which shipped with SQL 2000. However, since that database was so small, it was not possible for me to draw any conclusions at all about performance. For this reason, I composed the Northgale database, an inflated version of Northwind. Tables and indexes are the same, but I have exploded the data so
-that instead of 830 orders, there are 344035 of them.
-
To install Northgale, you first need to create the Northwind database on your server. Download the script to install it from Microsoft's web site. (If you are on SQL 2012 or later, beware that the script will fail if you have a surrogate-aware collation. Change the CREATE DATABASE statement to force a different collation, if this occurs to you.) Once you have Northwind in place, run Northgale.sql.
- To install Northgale, you need 4.6 GB of
-disk space. When the install has completed you can reclaim 4 GB by removing the log file Northgale_log2. (The script attempts to do this, but it always seems to fail. Rerunning the last statement in the script a little later seems to work.) By default, the
- database is installed in the same directory as the master database,
-but you can edit the script to change that. (There is no issue with surrogate collations for the Northgale script.)
-
The script for Northgale works by cross-joining the tables in Northwind and for important entities like IDs and names I have created new ones by combining the existing ids and the same goes for some of the names. I have reused the existing cities, countries and regions together with some extras that I needed for this article, so these columns do not have very good selectivity.
-
Northgale includes the table type intlist_tbltype used for the @employeetbl parameter as well as the table-valued function intlist_to_tbl to crack @employeestr into a table.
-
Keep in mind that Northgale still is a small database. It easily fits entirely into memory on a laptop with 4 GB of RAM. A
- poorly written query that requires a scan of, say, the Orders table,
- still returns within a few seconds. It's hopefully big enough to give a sense
- for how good or bad different solutions are, but I would advise you to not
- draw any far-reaching conclusions. It is also worth pointing out that the way
-the database was composed, the distribution of data is a bit skewed.
-
Static SQL with OPTION (RECOMPILE)
-
Why Static SQL?
-
Solutions for dynamic search conditions in static SQL almost always include the query hint OPTION (RECOMPILE), although there are a few simple cases where the hint is not needed, and we saw an example of this in the introducing chapter Alternate Key Lookup.
-
The advantages with these solutions are:
-
-
As long as the search conditions are moderately complex, the code you get is compact and relatively easy to maintain.
-
Since the query is recompiled every time, you get a query plan that is optimised for the exact search conditions at hand.
-
You don't have to worry about permissions; it works like it always does for stored procedures. That is, the user only needs to have permission to run the stored procedure; no direct permissions on the tables are needed.
-
-
But there are also disadvantages:
-
-
When requirements grow in complexity, the complexity of the query tends to grow non-linearly, so that what once was a relatively simple query evolves to a beast that hardly anyone understands, even less wants to touch.
-
If the search routine is called with high frequency, the recurring compilation may cause an overload on the server.
-
-
In the following I will elaborate these points in more detail.
-
Note that this section assumes that OPTION (RECOMPILE) works like it does in SQL 2008 SP2, SQL 2008 R2 SP1 and later versions. See the section The History of Forced Recompilation for more details how the hint worked in older versions.
-
The Basic Technique
-
The basic technique for static SQL with OPTION (RECOMPILE) is illustrated by
-search_orders_3, which I initially show in a simplified form without the parameters @employeestr and @employeetbl.
-
CREATE PROCEDURE search_orders_3
- @orderid int = NULL,
- @fromdate datetime = NULL,
- @todate datetime = NULL,
- @minprice money = NULL,
- @maxprice money = NULL,
- @custid nchar(5) = NULL,
- @custname nvarchar(40) = NULL,
- @city nvarchar(15) = NULL,
- @region nvarchar(15) = NULL,
- @country nvarchar(15) = NULL,
- @prodid int = NULL,
- @prodname nvarchar(40) = NULL AS
-
-SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
- c.CustomerID, c.CompanyName, c.Address, c.City, c.Region,
- c.PostalCode, c.Country, c.Phone, p.ProductID,
- p.ProductName, p.UnitsInStock, p.UnitsOnOrder
-FROM Orders o
-JOIN [Order Details] od ON o.OrderID = od.OrderID
-JOIN Customers c ON o.CustomerID = c.CustomerID
-JOIN Products p ON p.ProductID = od.ProductID
-WHERE (o.OrderID = @orderid OR @orderid IS NULL)
- AND (o.OrderDate >= @fromdate OR @fromdate IS NULL)
- AND (o.OrderDate <= @todate OR @todate IS NULL)
- AND (od.UnitPrice >= @minprice OR @minprice IS NULL)
- AND (od.UnitPrice <= @maxprice OR @maxprice IS NULL)
- AND (o.CustomerID = @custid OR @custid IS NULL)
- AND (c.CompanyName LIKE @custname + '%' OR @custname IS NULL)
- AND (c.City = @city OR @city IS NULL)
- AND (c.Region = @region OR @region IS NULL)
- AND (c.Country = @country OR @country IS NULL)
- AND (od.ProductID = @prodid OR @prodid IS NULL)
- AND (p.ProductName LIKE @prodname + '%' OR @prodname IS NULL)
-ORDER BY o.OrderID
-OPTION (RECOMPILE)
-
-
The effect of all the @x IS NULL clauses is that if an input
- parameter is NULL, then the corresponding AND-condition is always true. Thus, the only
- conditions that are in effect are those where the search parameter has a
- non-NULL value. Sounds simple enough, but there is a very big difference in performance with or without that last line present:
-
OPTION (RECOMPILE)
-
The hint instructs SQL Server to recompile the query every time. Without this hint, SQL Server produces a plan that will be cached and reused. This has a very important implication: the plan must work with all possible input values of the parameters. Due to parameter sniffing, the plan may be optimised for the parameter combination for the first search. That plan is likely to perform poorly with entirely different parameters, while it still would not be perfect for the initial parameter combination. For optimal response times when the user provides a single order ID, we want the optimizer to use the indexes on OrderID in Orders and Order Details and ignore everything else. But if the user performs a search on a product ID or a product name, we want to use the index on ProductID in Order Details and so on for other search criterias.
-
And this is exactly what we achieve with the hint OPTION (RECOMPILE). Since SQL Server is instructed to recompile the query every time, there is no need to cache the plan, why SQL Server can handle all the variables as constants. Thus, if the procedure is called like this:
-
EXEC search_orders_3 @orderid = 11000
-
SQL Server will in essence optimise this WHERE clause:
-
WHERE (o.OrderID = 11000 OR 11000 IS NULL)
- AND (o.OrderDate >= NULL OR NULL IS NULL)
- AND (o.OrderDate <= NULL OR NULL IS NULL)
- AND (od.UnitPrice >= NULL OR NULL IS NULL)
- AND (od.UnitPrice <= NULL OR NULL IS NULL)
- AND (o.CustomerID = NULL OR NULL IS NULL)
- ...
-
SQL Server is smart enough to remove all these NULL IS NULL from the query, so in essence it works with this WHERE clause:
-
WHERE o.OrderID = 11000
-
The choice of using the indexes on OrderID to drive the query becomes a no-brainer. And if you take this call:
-
EXEC search_orders_3 @custid = 'ALFKI'
-
The effective WHERE clause becomes:
-
WHERE (o.OrderID = NULL OR NULL IS NULL)
- AND (o.OrderDate >= NULL OR NULL IS NULL)
- AND (o.OrderDate <= NULL OR NULL IS NULL)
- AND (od.UnitPrice >= NULL OR NULL IS NULL)
- AND (od.UnitPrice <= NULL OR NULL IS NULL)
- AND (o.CustomerID = N'ALFKI' OR N'ALFKI' IS NULL)
- ...
-
The optimizer decides that the index on CustomerID is good.
-
Some more test cases that you can try and look at the query plan:
The two calls have the same set of parameters, but yet they produce different query plans. The first call searches for a single day for a customer with many orders. The second call searches a full year for a customer with a single order.
-
To better understand the benefit of OPTION (RECOMPILE), you can play with search_orders_3b, which is identical to search_orders_3, except that it does not have the query hint. Run the examples above with search_orders_3b and compare with the query plans for search_orders_3. Here is an exercise that is particularly illuminating: First run
-
EXEC sp_recompile search_orders_3b
-
to make sure that there is no plan in the cache for the procedure. Now run search_orders_3b first with @orderid = 11000 and then with @prodid = 76. You will notice that the latter is search is a tad slow. Flush the query plan with sp_recompile again and run these two searches in reverse order. That is, first run with @prodid = 76, and then with @orderid = 11000. You may find that it takes 20 seconds to retrieve that single order. This happens because the plan was optimised for a search on product ID and that plan did not work well with a search on order ID – but it did produce the correct result eventually.
-
The Coalesce Trap
-
Rather than using OR like above,
- some people write one of:
coalesce() is a function that takes a list of values as argument, and returns the
- first non-NULL value in the list, or NULL if there is no non-NULL value in the
- list. Thus, if @orderid is NULL, you get o.OrderID = o.OrderID,
- a complete no-op – or so it may seem.
- You can see a full example of this in search_orders_3a.
-
This yields code that is even more compact than using OR, but I strongly recommend that you stay away from this method, because there is a trap. Run this:
The first call return nine rows, but the last returns no rows at all!
- Why? The reason is that for the customer on this order, the column Region is NULL. When @region is NULL, the
- condition
-
c.Region = coalesce(@region, c.Region)
-
becomes in essence NULL = NULL. But in SQL, NULL is not equal to NULL. NULL stands for "unknown value", and any comparison with NULL yields neither true nor false in the three-valued logic of SQL, but unknown. Whence, no rows are returned.
-
To avoid this trap, some people write things like:
This is not only more kludgy, but since the column is entangled into an expression, this may preclude the use of any index on the column.
-
Another "workaround" is to write this particular condition as (c.Region = @region OR @region IS NULL) like in the original search_orders_3. But that begs the question why you should use the construct with coalesce or isnull at all, when it only works under some conditions. Thus, the simple advice is: stay away from this trap entirely.
-
Handling Multi-valued Parameters
-
Let's now look at how the parameters @employeestr and @employeetbl are handled in search_orders_3. Here are the last two conditions in the WHERE clause:
-
AND (o.EmployeeID IN (SELECT number FROM intlist_to_tbl(@employeestr)) OR
- @employeestr IS NULL)
-AND (o.EmployeeID IN (SELECT val FROM @employeetbl) OR @hasemptbl = 0)
-
intlist_to_tbl is a function that cracks a comma-separated list into table. This function is included in the Northgale database. @hasemptbl is a local variable which is defined first in the procedure:
-
DECLARE @hasemptbl bit = CASE WHEN EXISTS (SELECT * FROM @employeetbl)
- THEN 1
- ELSE 0
- END
-
This help variable is needed for the optimizer to understand that it can ignore @employeetbl when there are no rows in it. This does not work if the EXISTS test is in the main query itself.
While this works, there is a difference with regards to simple scalar parameters. For the latter, the optimizer knows the exact parameter values and builds the plan accordingly. As we saw in the example with @custid and a date interval, different parameter values can yield different plans. But this cannot happen with the multi-valued parameters in search_orders_3. All the optimizer knows about @employeetbl is the number of rows in the table variable. For @employeestr, it does not even know that. As long as the distribution of the values in the search column is fairly even, this may not be much of an issue. But if there are skews, it certainly matters.
-
One way to deal with this is to insert the values in a temp table. A temp table has distribution statistics which gives the optimizer more information. But if there are just a small number of values, you may have to force statistics update yourself, as auto-stats for a temp table happens first when six rows have been inserted/modified.
-
A more elaborate method is illustrated in the procedure search_orders_3c. The idea is that most of the time the users only want to search for two or three values at a time. Therefore, if there are up to four elements in the list, the procedure uses an IN expression, else it uses use a table variable. The procedure has this initial code:
-
DECLARE @rowc int,
- @emp1 int,
- @emp2 int,
- @emp3 int,
- @emp4 int,
- @hasemptbl bit = 0
-
-IF @employeestr IS NOT NULL
-BEGIN
- INSERT @employeetbl (rowno, employeeid)
- SELECT row_number() OVER(ORDER BY (SELECT 1)), number
- FROM intlist_to_tbl(@employeestr)
- SELECT @rowc = @@rowcount
-
- IF @rowc BETWEEN 1 AND 4
- BEGIN
- SELECT @emp1 = employeeid FROM @employeetbl WHERE rowno = 1
- SELECT @emp2 = employeeid FROM @employeetbl WHERE rowno = 2
- SELECT @emp3 = employeeid FROM @employeetbl WHERE rowno = 3
- SELECT @emp4 = employeeid FROM @employeetbl WHERE rowno = 4
- END
- ELSE IF @rowc > 4
- SELECT @hasemptbl = 1
-END
-
(For simplicity, search_orders_3c only has the parameter @employeestr, and @employeetbl resurfaces as a local work table.) If @employeestr has a value, we unpack the list into a table variable and we number the rows. If there are four values or less, we populate the variables @emp1 to @emp4. The last two conditions in the WHERE clause look like this:
-
AND (o.EmployeeID IN (@emp1, @emp2, @emp3, @emp4) OR @emp1 IS NULL)
-AND (o.EmployeeID IN (SELECT employeeid FROM @employeetbl) OR @hasemptbl = 0)
-
That is, the first condition applies if @emp1 has a value, which it has if the list had one to four values. The second condition only applies if @hasemptbl is 1, which happens if there are five or more values in the list.
-
You can compare the query plans for these three cases:
When I tested this on SQL 2012 with only EmployeeID 805 (the employee with the smallest number of orders), the first two calls resulted in a parallel plan which did not use the index on EmployeeID, whereas the last call produced a serial plan that used this index. Interesting enough on SQL 2014, where the new Cardinality Estimator comes into play, the first call produced a serial plan fairly similar to the plan for the third call. When I added 304 (the employee with the most number of orders) to the selection, the first call retained the same plan, whereas the call to search_orders_3c got a parallel plan. That is, with the strategy in search_orders_3c, you can get a plan which is tailored to the selected values.
-
I like to point out there is nothing magic with the number 4 here. You could set the limit to from any number from one to ten. Or even higher if you feel like, but I doubt that you will see any actual benefit with that long IN list over using a temp table or a table variable.
-
Choice of Sort Order
-
If users need to be able to choose the sort order, this can also easily be handled with static SQL. The basic pattern is:
-
ORDER BY CASE @sortcol WHEN 'OrderID' THEN o.OrderID
- WHEN 'EmployeeID' THEN o.EmployeeID
- WHEN 'ProductID' THEN od.ProductID
- END,
- CASE @sortcol WHEN 'CustomerName' THEN c.CompanyName
- WHEN 'ProductName' THEN p.ProductName
- END,
- CASE @sortcol WHEN 'OrderDate' THEN o.OrderDate
- END
-
That is, you have a parameter that holds the column to sort by (or some other identifier that maps to the column name) and then you use CASE to select that parameter. One very important thing to observe is that all branches in a CASE expression must have a similar data type. Recall that a CASE expression has a static data type, which is determined according to the rules of data-type precedence in SQL Server. That is, THEN-expressions that are of types with lower precedence will be converted to the type with the highest precedence in the CASE expression. If you mix string and numeric columns in the same CASE expression, attempts to sort on a string column, will die with a conversion error. Thus, you need to have one CASE expression for numeric columns, one for string columns, one for dates etc.
-
While this looks a little daunting, the optimizer is able to reduce this to an ORDER BY with a single column and build the plan best suited for that sorting – as long as you use OPTION (RECOMPILE) of course.
-
If you want to support both ascending and descending sorts, you will need to double everything:
-
ORDER BY CASE WHEN @isdesc = 1 THEN
- CASE @sortcol WHEN 'OrderID' THEN o.OrderID
- WHEN 'EmployeeID' THEN o.EmployeeID
- WHEN 'ProductID' THEN od.ProductID
- END DESC,
- CASE WHEN @isdesc = 0 THEN
- CASE @sortcol WHEN 'OrderID' THEN o.OrderID
- WHEN 'EmployeeID' THEN o.EmployeeID
- WHEN 'ProductID' THEN od.ProductID
- END ASC
-
For brevity, I included only the numeric columns here, but as you see, it's starting to get a little ugly. Now, imagine that users should be able to select multiple sort columns with different data types and also ascending/descending for each column. If you would try the above strategy above, it would grow to something completely unmanageable. So while you can do user-selected sorting with static SQL, it is only practical if you only need to support a single column or if all your sort columns have the same data type. If you encounter anything beyond that, it is time to consider a solution with dynamic SQL instead. Or – this is not an option that should be overlooked – sort the data client-side.
-
Optional Tables
-
Sometimes you may have a situation that requires you to access a table only if a certain condition is given. Let's add one more parameter to our procedure:
- @suppl_country. If this parameter is provided, the procedure should only
- return information about products with a supplier from the given
- country. You could implement this by joining to the Suppliers table,
- but a suggestion that I originally got from Phillipp Sumi is that you should use an EXISTS clause
- in this way:
-
@suppl_country IS NULL OR EXISTS (SELECT *
- FROM Suppliers s
- WHERE s.SupplierID = p.SupplierID
- AND s.Country = @suppl_country)
-
To illustrate this, I wrote search_orders_9, which is the same as search_orders_3 and with the line above added (and without the parameters for search on employees). If you run
-this:
and then look at the query plans, you will see that the first plan does not include Suppliers. This should not really come as a surprise, given what you have learnt about OPTION (RECOMPILE).
-
However, there is one more revelation to make, and to this end you need to comment out OPTION (RECOMPILE) from search_orders_9 and recreate it. Run the above again preceded by the command SET STATISTICS IO ON. If you look at the query plan for the first execution, you will see that Suppliers now appears in the plan. However, when you look at the output from SET STATISTICS IO ON, you will see something like this:
That is, even without the RECOMPILE hint, SQL Server is able to avoid the access to Suppliers. If you look in the execution plan, you find a Filter operator above the Clustered Index Seek on Suppliers. If you hover over this Filter operator, you find that it has a Startup Expression Predicate. That is, SQL Server decides at run-time whether to access the table. This is nothing new; we saw the same thing, in the section Using OR for alternate key lookup.
-
This is something which is good to keep in mind if you encounter a situation where your only dynamic search condition is that depending on a parameter you should filter the data depending on rows (not) existing in a certain table. It may be overkill to use OPTION (RECOMPILE) if a filter with a startup expression works. I like to remind you that you should always inspect the query plan and test that performance is acceptable.
-
Note: some people with a background in languages like C++ may find this trite and think that this is just a matter of operator shortcutting. However, there is no operator shortcutting in SQL, but in SQL operands can be computed in any order, and the behaviour would be the same if the condition was written as EXISTS () OR @suppl_country IS NULL.
-
Alternate Tables
-
A scenario you may encounter is that depending on a parameter, you should read from different tables. For instance, say that there is a parameter @ishistoric. If this parameter is 1, you should read from the tables HistoricOrders and HistoricOrderDetails instead. There are no such tables in Northgale so I cannot show a full-fledged procedure. But here is how the FROM clause in search_orders_3 would be written to accomodate the situation. You replace the join between Orders and Order Details with a derived table which is a UNION ALL query of two join queries that both have a WHERE clause which includes or excludes the query depending on the variable:
-
FROM (SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
- o.CustomerID, od.ProductID, o.EmployeeID
- FROM Orders o
- JOIN [Order Details] od ON o.OrderID = od.OrderID
- WHERE @ishistoric = 0
- UNION ALL
- SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
- o.CustomerID, od.ProductID, o.EmployeeID
- FROM HistoricOrders o
- JOIN HistoricOrderDetails od ON o.OrderID = od.OrderID
- WHERE @ishistoric = 1) AS u
-JOIN Customers c ON o.CustomerID = u.CustomerID
-JOIN Products p ON p.ProductID = u.ProductID
-
With OPTION(RECOMPILE) only one set of order tables will be accessed at run-time. (Even without the hint, you could expect a plan with a startup expression.)
-
It is worth observing, that the query has a certain amount of repetition – the SELECT list and the join conditions. The more alternate tables there are, the case for dynamic SQL grows stronger, as with dynamic SQL you can avoid much of that repetition.
-
When OPTION (RECOMPILE) Hurts You
-
We have now seen many of the advantages with using OPTION (RECOMPILE), but before you start to use it all over town, you need to understand that too frivolous use of OPTION (RECOMPILE) can cause severe pain to your system. There is after all a reason why SQL Server in the normal case caches query plans. Without plan caching there would be many systems crumbling under the load of query compilation.
-
You need to understand how often your query will be executed. Say that there are users running search_orders once a
-minute in peak activity. In this case, the extra time we spend on compilation is clearly ignorable, not the least if 50 ms of compilation can reduce execution time from five minutes to 100 ms. But assume instead that there are over 100 calls to the procedure every second. And assume furthermore, that @orderID is the only input parameter in the vast majority of these calls. Recompiling the query every time to produce the same plan all over again is a perfect waste of CPU resources.
-
One way to alleviate this situation is to introduce an IF statement so that you have:
-
IF @orderid IS NOT NULL
-BEGIN
- SELECT ...
- WHERE O.OrderID = @orderid
- AND -- Conditions on Order Details here.
- -- No OPTION (RECOMPILE) here!
-END
-ELSE
-BEGIN
- SELECT ...
- WHERE -- same conditions as before
- OPTION (RECOMPILE)
-END
-
By adding a separate branch for @orderid that does not have OPTION(RECOMPILE), the common requests for a single order can be served from a cached plan, whereas other conditions still result in compilation every time. Assume now that once you have this in production, you find that the load from compilation is still a tad high, and you identify that there many are requests with @custid and @fromdate, with @fromdate typically being at most a week ago.
-
This calls for one more branch without OPTION (RECOMPILE), and you can see a complete solution in
- search_orders_4. However, this procedure is not likely to work out well. You may recall the discussion on parameter sniffing earlier and this strikes here. Say that the first call to search_orders_4 happens to be a search on @prodid. Now the two branches for order ID and recent orders for a customer will be optimised for a search on product ID, which will result in catastrophic performance. This can be addressed with index hints, or you can shove the SELECT without OPTION (RECOMPILE) into subprocedures, and this is what I have done in search_orders_4a.
-
But this is about as far this path can take you. If you find more common input combinations that cause too much compilation, this gets out of hand, and that's where you need to look into dynamic SQL as with dynamic SQL, you can get one cached plan for each combination of input parameters. More about that later.
-
The History of Forced Recompilation
-
The RECOMPILE option is somewhat confusing, because through the course of SQL Server, it has existed in several flavours and with different behaviour. Here is a short history.
-
For as long as I have used SQL Server, there has been an option on procedure level to force recompilation:
-
CREATE PROCEDURE search_orders ... WITH RECOMPILE AS
-
There is also a similar option on the EXEC statement:
-
EXEC some_other_proc @p1, @p2, ... WITH RECOMPILE
-
The problem with these options is that SQL Server optimises a stored procedure query by query and performs no flow analysis. Thus, even if the procedure is a single query, SQL Server cannot assume that the input parameters will have the same values when the query is executed as they have at compile time. Therefore it builds a plan which produces the correct results no matter the parameter values. Even if such a one-size-fits-all plan is optimised for the parameter values sniffed, it is not a very efficient plan. Thus, as long as we only had this option, static SQL was not a good solution for dynamic search conditions.
-
In SQL 2005, Microsoft introduced statement-level recompilation, and that included the hint OPTION (RECOMPILE). However, Microsoft had not drawn the inference that the variables in the query could be handled as constants, but the plan still was compiled to be correct with all possible values of the variables. So also in SQL 2005, static SQL was still not a good solution.
-
Microsoft addressed this flaw with the release of SQL 2008. Now variables were handled as constants when you used OPTION (RECOMPILE) and static SQL became a serious contender as a solution for dynamic search conditions. However, SQL 2008 had only been out for a few months when a serious bug was revealed: if two users were both running a query with OPTION (RECOMPILE) with different parameters in parallel, they could get each other's results. This was not exactly a simple bug to fix, so Microsoft saw no choice but to revert to the old behaviour, which happened in SQL 2008 RTM CU4.
-
But there was a customer in Bulgaria who had invested heavily in the new behaviour, and they were able to convince Microsoft that they had to fix the bug for real and restore the good behaviour of OPTION (RECOMPILE). This happened in SQL 2008 SP1 CU5.
-
When it comes to SQL 2008 R2, it was released a little too soon after SQL 2008 SP1 CU5 to include the fix. As a consequence, SQL 2008 R2 RTM shipped with the old behaviour of OPTION (RECOMPILE) and the bug fix got into SQL 2008 R2 RTM CU1.
-
Thus, there are some versions of SQL 2008 for which OPTION (RECOMPILE) does not work as touted in this article. To determine whether your server has a correct implementation of OPTION
-(RECOMPILE), issue this command:
-
SELECT serverproperty('ProductVersion')
-
It should return 10.0.2746.0 (SQL 2008) or 10.50.1702.0 (SQL 2008 R2) or
- higher. Note that these versions are very old by now, and preferably you should be running the latest and last service pack, which is Service Pack 4 for SQL 2008 and Service Pack 3 for SQL 2008 R2. (As SQL 2008 and SQL 2008 R2 have gone out of mainstream support, there will be no more service packs.)
-
If you are on SQL 2012 or later, OPTION (RECOMPILE) always works in the same way, so you don't have to worry. Well, almost. In the autumn of 2014, a new bug with OPTION (RECOMPILE) was uncovered. The issue is the same as with the first bug: users running the same query with different parameters can get each other's results. But whereas the first bug was very simple to repro, this bug requires quite specific circumstances to exhibit as described in KB2965069. I am not going to repeat the KB article here, but I certainly recommend that you read it and decide whether the scenario could apply to your system. If you think it does, you should certainly apply the applicable cumulative update. (Or any CU released later.) The KB article does not list SQL 2008 and SQL 2008 R2, but I would assume that this is due to that they have gone out of mainstream support. I have no information on the matter, but my assumption is that the bug is present in these two versions as well. That is, this is a bug has been there since the new behaviour was restored in SQL 2008 SP1 CU5, and it took four years before it was observed.
-
Dynamic SQL
-
Why Dynamic SQL?
-
It might as well be said directly: solutions with dynamic SQL require more from you as a programmer. Not only in skill, but foremost in discipline and understanding of what you are doing. Dynamic SQL is a wonderful tool when used correctly, but in the hands of the unexperienced it far too often leads to solutions that are flawed and hopeless to maintain.
-
That said, the main advantages with dynamic SQL are:
-
-
Dynamic SQL gives you a lot more flexibility; as the complexity of the requirements grows, the complexity of the code tends to grow linearly or less than so.
-
Query plans are cached by the query string, meaning that commonly recurring search criterias will not cause unnecessary recompilations.
-
-
The disadvantages with dynamic SQL are:
-
-
As I said above, poor coding discipline can lead to code that is difficult to maintain.
-
Dynamic SQL introduces a level of difficulty from the start, so for problems of low to moderate complexity, it's a bit of too heavy artillery.
-
Because queries are built dynamically, testing is more difficult, and some odd combination of parameters can prove to yield a syntax error when a poor user tries it.
-
You need to consider permissions on the tables accessed by the dynamic SQL since users do not get permission just because the code in a stored procedure; it does not work that way.
-
Caching is not always what you want; sometimes you want different plans for different values of the same set of input parameters.
-
-
It may seem from this list that there are more disadvantages with dynamic SQL than advantages, but if you look more closely, you see that the list is more or less complementary with the corresponding list for static SQL. Static SQL with OPTION (RECOMPILE) is good for many everyday situations, but when the requirements of what the users should be able to do become to complex, or some the searches are too frequent for recurring recompilations to be permissible, this is when you turn to dynamic SQL, fully aware of that it comes with a price.
-
The Ways to Do Dynamic SQL
-
Whereas for static SQL, there is a single basic pattern to work from, there is more than way to implement solutions for dynamic SQL. There are three different choices where to construct the SQL code:
-
-
In a T‑SQL stored procedure.
-
In a CLR stored procedure.
-
Client-side.
-
-
And there are two choices for how to handle the input values from the users:
-
-
Inline them into the query string, that is, do something like ' AND col = ' + convert(varchar, @value)'.
-
Use parameterised queries with sp_executesql, so that the above fragment reads ' AND col = @value'.
-
-
Let's start with the latter, because this is not a matter of a choice in the normal manner. You don't pick one or the other as a matter of taste, phase of the moon, roll of a dice or the whim of the day. It cannot be enough emphasised: your norm and what you should use in 99.9 % of the time is parameterised queries. But there may be an occasional parameter where inlining is required for performance reasons. Once we have looked at the basic examples, we will look at such cases, as well as a discussion of why inlining is unacceptable in the general case.
-
On the other hand, the choice of where to construct the SQL code is to a large extent a matter of preference. None of them is intrinsically better than the other. Many people use T‑SQL procedures, and I will show you two implementations of search_orders using dynamic SQL in T‑SQL, one with a parameterised query, and one with inlined parameter values. It may seem natural to use T‑SQL to build a T‑SQL query, but the process of building a query is a matter of scalar logic and string manipulation for which traditional programming languages are better tools, and I will show implementations of search_orders as a CLR stored procedure, one in C# and one in VB .NET.
-
However, once you have made the realisation that it's better to use a traditional language to build the query string, you might ask yourself why it should be a stored procedure at all, why not do it client-side altogether? You would not be wrong in asking that question. Implementing your dynamic search entirely in client code is a perfectly legit choice as long as it fits in with the general development pattern for your application. That is, if the rule for the application is that all data access should be in stored procedures, you should stick to that pattern.
-
That said, you may encounter very complex requirements for your dynamic search. Not only should users be able to select search and sort criterias, but they should also be able to select the exact set of columns to return, they should be able to aggregate the data and freely choose aggregate function (e.g. AVG, SUM) and what columns to group by. For something as ultra-dynamic like this, there is really only one reasonable choice: build the dynamic query client-side and use the full powers of object-oriented programming. If you were to do this in a stored procedure, you would need umpteen parameters to describe the conditions, and only defining the interface would take a week – and it would still be a kludge. Because that is the straight-jacket of a stored procedure, be that T‑SQL or a CLR procedure, the parameter list.
-
You may think that you could do a hybrid, and build some parts of the query client-side and send for instance the WHERE clause as a parameter to a stored procedure. But this is the one thing you should never do. Either you build the query entirely client-side, or you build it in entirely in a stored procedure. If you mix, you create a strongly coupled dependency between client and stored procedure. In all software systems, you want components to be as loosely coupled as possible. Say that the DBA makes some changes to the data model: columns are renamed or moved to different tables. If you have a stored procedure accepts values for various search conditions, you only have to change the procedure; the client can remain affected and unaware of the change. But if you start to pass WHERE clauses, column lists and whatnots, you will have to change the client as well, and you have gained little with your stored procedure. In that case it's better to have it all in the client, fully aware of that the client code has be modified if the data model is changed.
-
I will not show any client-side examples of our order search in this article, since such an implementation should probably have an object-oriented interface with methods and properties quite different from the parameter interface of search_orders. Nevertheless, in the examples that follow, there are many points that are applicable also when you work client-side.
-
Permissions
-
With stored procedures using static SQL, you don't have to bother about permissions. As long as the procedure and the tables have the same owner, it is sufficient for the users to have rights to run the stored procedure because of a feature known as ownership chaining. But ownership chaining never applies to dynamic SQL. Even if you build the query string inside a stored procedure, the string is never part of the procedure itself, but constitutes its own owner-less scope.
-
If you build the query string client-side or in a CLR stored procedure, you will have no choice but to grant the users SELECT permissions on the tables and the views that appear in the query. This also includes as any list-to-table functions you may use.
-
Depending on your application, and how it is set up, granting SELECT permissions may be entirely uncontroversial or absolutely impermissible. Thankfully, in the case you build the query string in a T‑SQL procedure, there are two alternatives to arrange for the permissions:
-
-
Create a certificate and sign the procedure with this certificate. Create a user from the certificate, and grant this user the required SELECT permissions.
-
Add the clause EXECUTE AS 'someuser' to the procedure. This should be a user created WITHOUT LOGIN and which has been granted the required SELECT permissions.
-
-
I will not go into further details on these techniques here. Rather I refer you to my article Granting Permissions through Stored Procedures, where I discuss these techniques in detail.
-
Before you get any funny ideas, permit me to beat the dead horse of the hybrid solution a little more. You may think this sounds excellent, you could build the WHERE clause client-side and send it to a stored procedure which handles permissions problem for you. But this is again an awfully bad idea. You expose a stored procedure that accepts a WHERE clause. How do you in the stored procedure verify that this WHERE clause does not violate any security rules about what the user should see or not?
-
Implementing search_orders with a Parameterised Query
-
-
After these proceedings, it's time to look at search_orders_1 which is a T‑SQL procedure that builds a parameterised SQL statement. Because of its length, I have numbered the rows in the right margin:
On line 18, I declare the variable @sql which will hold my query string. The type should always be nvarchar(MAX). It should be MAX, so that you can fit any query in the variable. As for why it needs to be nvarchar, I will return to that. I'm ignoring the variable @paramlist for now. On line 20, I define the variable @nl which I set to the standard line-ending in Windows, CR-LF. While technically a variable, @nl is a constant in this procedure.
-
On lines 22-32, I compose the nucleus of the dynamic SQL query. That is, the query we will get when all input parameters are left out. Observe that I use two-part notation for the tables. You should always do this when you work with dynamic SQL for performance reasons. Exactly why, I will return to when I discuss caching and performance.
-
The condition WHERE 1 = 1 on line 32 is there so that all other conditions can be added as "AND something". I add @nl to the string, for reasons that will prevail.
-
-
On lines 34-72, I check all the single-valued search parameters. If a parameter is non-NULL, I add a condition for the corresponding column to the
-SQL string. I use the += operator which is a shortcut for @sql = @sql +. Note that if I want to include a quote in the query string, I need to double it, see for instance line 71. Again, I concatenate @nl after all conditions.
-
On lines 73-75, I handle the @employeestr parameter in the same manner as I did in search_orders_3. That is, I use the function intlist_to_tbl to crack the list into table format. You may have other ideas, but this is the way should do it as a first choice. As for alternatives, I will return to that later. Observe that just like the tables, I need to refer to the function with two-part notation.
-
On lines 77-79, I handle the parameter @employeetbl, and this is perfectly straightforward. The only deviation is that I use EXISTS to see whether this parameter was specified rather than checking for NULL.
-
Finally, on line 80 I add the ORDER BY clause.
-
You may note that for parameters that match columns that appear in multiple tables (@orderid, @custid, @prodid), I add conditions against both tables. This something I learnt very early in my SQL Server career that you should do to help the optimizer. It mattered more in those days when SQL Server did not have foreign-key constraints. Today, with proper foreign-key constraints (and which have not been applied with NOCHECK), the optimizer can move around the condition even if you apply it on the "wrong" table. But I added it nevertheless, and it's not a bad habit, as you may have some denormalised database design with redundant columns without a foreign-key relation between them. Nevertheless, I did not do this in the procedures with static SQL. I felt that in those procedures, the extra conditions add extra noise, but this is a less of an issue in code that builds a query string.
-
The Debug PRINT
-
On line 82-83, I do something very important: if the parameter @debug is 1, I print the SQL string. This is one more of these things that cannot be enough emphasised: always include a parameter that permits you to print the SQL string. One of the distinct disadvantages with dynamic SQL is that you can happen to concatenate the strings incorrectly leading to syntax errors, maybe only with some combination of input parameters. Finding this error by looking at the code that generates the dynamic SQL is hard, but once you see the SQL string, the error may be immediately apparent. For instance, a typical
-error is a missing space, leading to code that reads:
-
-
WHERE 1 = 1 AND o.OrderDate <= @todateAND p.ProductName LIKE @xprodname
-
If you look closely in the procedure code, I have already take precautions to avoid such goofs by having a leading space in most string literals, and also by adding the @nl parameter to each condition. However, that is not the main purpose of @nl. The reason I add @nl is to avoid that the query string becomes one single long line which is very difficult to read when I have to look at it. Thus, not only should you keep the code that generates the SQL string tidy, you should also produce an SQL string that is reasonably tidy.
-
If the query string is very long, it may be appear to be truncated in SQL Server Management Studio because it only prints the first 4000 characters. A workaround is to do:
-
IF @debug = 1
- SELECT @sql FOR XML PATH(''), TYPE
-
By the default, SSMS displays the first 2 MB of a returned XML document, which hopefully should be sufficient. You will have to accept that characters that are special to XML, like < are replaced by sequences such as <.
-
Running the Query
-
On lines 84 to 97, I set up the parameter list, and on lines 99 to 102 I execute the query using sp_executesql. It is extremely important to understand this system procedure. This is the vehicle to run parameterised queries.
-
sp_executesql is a system procedure that takes two fixed parameters. The first parameter is a batch of SQL statements and the second parameter is a parameter list. These parameters must be of the type nvarchar; you cannot pass varchar. (And thus I have declared the parameters @sql and @paramlist accordingly.) The remaining parameters are the actual parameters passed to the parameters in the parameter list. They must match the data types in the parameter list in the same way as when you call a regular stored procedure. That is, implicit conversion applies.
-
The system procedure executes the batch using the parameters values you pass it. If this sounds a little abstract, you can think of sp_executesql this way:
That is, you create a nameless stored procedure and execute it in one go.
-
In search_orders_1, the parameter names in the query string are the same as in the surrounding parameters in the stored procedure. But don't be lured. They are physically separate and I could have used completely different names and the procedure would still have worked. The key is that the dynamic SQL cannot see any variables in the calling procedure; the dynamic SQL is a procedure of its own.
-
You may note that the parameter list in @paramlist is static. That is, the set of parameters is always the same, despite that some of them may not appear in the actual query string. While it would be possible to extend the parameter list as new non-NULL search parameters are encountered, that would only be unnecessarily complicated. There is no law in T‑SQL against having unused parameters.
If you try these and inspect the query plans, you will see that
- the available indexes on the search columns are used with two exceptions: The index on Orders.EmployeeID is ignored, and on SQL 2008 and 2012, the index on Customers.City is not used. However, SQL 2014 uses this index. If you compare with the plans for search_orders_3, you will see that these are identical, except for the search on @custid alone.
-
I also encourage you to run the procedures with @debug = 1 to see the generated SQL.
-
Compilation and Caching
-
You have learnt that sp_executesql defines a nameless stored procedure and executes it directly. You may ask if this procedure is saved in the database. No, it is not. But, and this is the key, the query plan is saved in the cache. So the next time a user runs your search procedure with exactly the same set of search parameters, SQL Server will reuse the existing plan for that query.
-
That is, when you use static SQL, and there are these three calls.
And this will be a new compilation and a new cache entry. The existing plan for the search on OrderID alone is unaffected.
-
There is one qualification to make here, and it is one we have already touched: the table names must be specified in two-part notation, that is, with schema and table. If the query has FROM Orders without schema, SQL Server needs to consider the possibility that there may be an Orders table in the default schema of the user. And even if there isn't one right now, it might appear later. Therefore, SQL Server needs to have different cache entries for users with different default schemas. Now, normally users have dbo as their default schema, in which case this is a non-issue, but this is nothing you should rely on.
-
Special Search Conditions
-
For static SQL, we looked at how to implement some special search conditions. Let's review these for dynamic SQL as well.
-
Columns with Filtered Indexes
-
This was nothing I brought up with static SQL, because this is a non-issue with OPTION (RECOMPILE). But with cached plans, you need to be aware of this. Say that there is a Status column in the Orders table for which there are four possible values: N – New order, P – In process, E – Error, C – Processing completed. 99 % of the rows have the value C, and there is a filtered index on the Status column:
-
CREATE INDEX status_ix ON Orders(Status) WHERE Status <> 'C'
-
Say now that the search has a parameter @status where the user can search for orders with a specific status. If you simply mimic the code above, and do:
-
IF @status IS NOT NULL
- SELECT @sql += ' AND o.Status = @status'
-
SQL Server will not use the filtered index, no matter what value the user passes, because it has a produce a plan that works with all parameter values, including @status = 'C'. You need to add some logic to add an extra condition so that the the filtered index can be used:
-
IF @status IS NOT NULL
- SELECT @sql += ' AND o.Status = @status' +
- CASE WHEN @status <> 'C'
- THEN ' AND o.Status <> ''C'''
- ELSE ''
- END
-
Here I assumed for simplicity that @status is a single-valued parameter, but it seems likely that in a real-world application @status would be multi-valued; that is, the user is able to select a number of status values he is interested in. You would need to do the same checks and add extra conditions in the case the user's choice falls entirely within the filtered index (and you want it to be used).
-
Choice of Sort Order
-
It may seem that this could be done as simple as:
-
@sql += ' ORDER BY ' + @sortcol
-
This could easily handle multiple sort columns. That is, the client could pass a value like 'CustomerID, OrderID DESC'. This breaks the principle that the client should know nothing about the query. However, it is a little difficult to argue this point very strongly here. The syntax of the string is not very difficult. (And the assumption is that the application builds the string from users choices in a UI; the user does not write the call himself.) At first glance, some readers may think that the string above will result in an error with ambiguous column names. But since ORDER BY is evaluated after SELECT in an SQL query, you can use the column names defined in the SELECT list in the ORDER BY clause, and thus CustomerID and OrderID without prefix are legit here. Another argument against the client forming part of the query is that the data model may change. But these are columns in the result set which the client needs to have knowledge of anyway to be able bind them to columns in an output grid or similar. That is, if the DBA would decide that OrderID should now be order_id, you would have to change the query to read:
-
SELECT o.order_id AS OrderID, ...
-
to avoid breaking the client.
-
There is however the issue of SQL injection. Maybe it is a web application. Maybe the sort parameters are passed in a URL. Maybe the web application connects as sa. (Bad! Bad! Bad!). And then some user out on the evil Internet passes '1 SHUTDOWN WITH NOWAIT'. That is, this use of @sortcol opens for SQL injection. You can easily prevent this with quotename():
-
@sql += ' ORDER BY ' + quotename(@sortcol)
-
quotename adds brackets around the value, doubling any right brackets there may be in it, so that you still have a legal quoted identifier. But now you can no longer easily accept multi-column sort conditions or ASC/DESC in a single parameter. You would have to parse @sortcol to put in quotename where it's needed. Which is not trivial at all.
-
So, after all, I think it is much better to use CASE to map the input value to a sort column:
-
SELECT @sql += ' ORDER BY ' +
- CASE @sortcol WHEN 'OrderID' THEN 'o.OrderID'
- WHEN 'EmplyoeeID' THEN 'o.EmployeeID'
- WHEN 'ProductID' THEN 'od.ProductID'
- WHEN 'CustomerName' THEN 'c.CompanyName'
- WHEN 'ProductName' THEN 'p.ProductName'
- ELSE 'o.OrderID'
- END + CASE @isdesc WHEN 0 THEN ' ASC' ELSE ' DESC' END
-
This is reminiscent of how we did in search_orders_3, but it is still a lot simpler, since we don't need to have different CASE expressions for different data types, but we can use a single one. And it is also easy to handle a parameter to control ASC/DESC. If you want multiple sort columns, you will need to repeat the above, but it grows linearly and does not explode like it does for static SQL.
-
Observe that in the CASE for @sortcol I have an ELSE with a default sort order. Without the ELSE, the entire query string would become NULL if the application passes an unexpected value in @sortcol.
-
Optional Tables
-
The example with the @suppl_country parameter is of course trivial to handle with dynamic SQL:
-
IF @suppl_country IS NULL
- SELECT @sql += ' AND EXISTS (SELECT *
- FROM Suppliers s
- WHERE s.SupplierID = p.SupplierID
- AND s.Country = @suppl_country)'
-
It is just another condition to add.
-
Alternate Tables
-
This is also something which is quite simple to handle with dynamic SQL. Say that we have this parameter @ishistoric. In this case, lines 27-28 in search_orders_1 would read:
-
FROM dbo.' + CASE @ishistoric
- WHEN 0 THEN 'Orders'
- WHEN 1 THEN 'HistoricOrders'
- END + ' o
-JOIN dbo.' + CASE @ishistoric
- WHEN 0 THEN '[Order Details]'
- WHEN 1 THEN 'HistoricOrderDetails'
- END + ' od
-
You may get the idea that you should pass the table name from the application, but while it is almost acceptable for the sort column, it is entirely impermissible for the table names. The DBA should be free to rename a table without affecting an application that only uses stored procedures. And what if the application passes table name with schema and you wrap the full name in quotename()?
-
No, always map the application input to a table name through CASE.
-
Using the CLR
-
Let's now look at how implement search_orders in a CLR stored procedure. I've written two CLR procedures,
- search_orders_vb
- and search_orders_cs,
- that I will discuss in this section. As the code is fairly repetitive, I'm not including any of
-them in full here, but I only highlight some important points. (These points are also generally applicable for the data-access part of a client-side only implementation.)
-
Be aware that I will not go into any details on writing CLR stored procedures as such. If you have never
- worked with the CLR before, but are curious, I refer you to Books Online. At
- the end of this section there are instructions on how to create these two
-procedures in SQL Server.
-
The Parameter List
-
There is one deviation in the parameter list: the parameter @employeetbl is not there, since you cannot pass table-valued parameters to a CLR stored procedure. Thus, for CLR stored procedures, you will need to pass multi-valued parameters as a comma-separated string (or some other format like XML).
-
Setting up the Statement
-
This is how search_orders_cs starts off:
-
string Query;
-SqlCommand Command = new SqlCommand();
-
-Query = @"SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
- c.CustomerID, c.CompanyName, c.Address, c.City,
- c.Region, c.PostalCode, c.Country, c.Phone,
- p.ProductID, p.ProductName, p.UnitsInStock,
- p.UnitsOnOrder
- FROM dbo.Orders o
- JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
- JOIN dbo.Customers c ON o.CustomerID = c.CustomerID
- JOIN dbo.Products p ON p.ProductID = od.ProductID
- WHERE 1 = 1 ";
-
As you can see this is very similar to search_orders_1, including the dbo prefix. The rule that you should use two-part notation to maximise
- query-plan reuse applies to CLR procedures as well.
-
Defining the Parameters
-
So this should be plain vanilla for anyone who has written the teeniest piece of data-access code with ADO .NET. Except that I have seen so many examples on forums where people inline the parameter values into the query string. And it is equally impermissible no matter you build the query in T‑SQL or some other language. Your queries should always be parameterised. (Except for the very few cases inlining may be needed for performance.)
-
This is however not the place to give a full coverage of the SqlParameter class in .NET. If you have never heard of this class before (and you call yourself a .NET programmer), you will have to look at the examples and then study the class further in MSDN Library.
-
Here is how the @custid
- parameter is added in search_orders_cs:
-
if (! Custid.IsNull) {
- Query += " AND o.CustomerID = @custid" +
- " AND c.CustomerID = @custid";
- Command.Parameters.Add("@custid", SqlDbType.NChar, 5);
- Command.Parameters["@custid"].Value = Custid;
-}
-
As in the T‑SQL example, the query string is extended
- with the conditions for the
- parameter in both Orders and Customers.
-
What is different from T‑SQL is how we define the parameter list and supply
- the value. In T‑SQL the parameter list is a string, which includes all
- possible parameters. When working with the CLR, we only define the parameters
- that actually are in use. The reason for this difference is entirely a matter of convenience. We define a parameter by adding it to the Parameters
- collection of the Command object. The Add method has a number of overloads, but I prefer to use the ones that takes the parameter name and a type indicator from the SqlDbType enumeration. For parameters of the variable-length data types – char, varchar,
- nchar, nvarchar, binary and varbinary – I use an overload where I can also specify the length of the parameter. There is no means to pass precision or scale – used with the data types decimal, numeric, time, datetime2 and datetimeoffset – in the Add method, but the SqlParameter class has Precision and Scale properties which permits you to set these values after you have created the parameter.
-
Once the parameter is defined, I assign the value separately, although you could do all on a single line if you feel like:
If Not Custid.IsNull Then
- Query &= " AND o.CustomerID = @custid" & _
- " AND c.CustomerID = @custid" & VbCrLf
- Command.Parameters.Add("@custid", SqlDbType.NChar, 5)
- Command.Parameters("@custid").Value = Custid
-End If
-
It's very similar to the C# example. Different operator for string
- concatenation, parentheses to address elements in the collection and no
- semicolons.
-
Don't Forget to Specify the Length!
-
There is one thing about the parameter definition, I like to highlight:
I explicitly specify the length of the string parameter. ADO .NET permits you leave out the length when you add the parameter. ADO .NET also supplies the method AddWithValue that permits you to define a parameter and
-provide the value in a single call whereupon ADO .NET guesses the data type. Do not fall into the trap of using these shortcuts! The reason these alternatives are bad is that when ADO .NET constructs the call to sp_executesql for you, it will use the length
-of the actual parameter value when it builds the parameter list. Thus, if one user enters Alfred, the parameter will be declared as:
-
@custname nvarchar(6)
-
But if another user enters Berglund, the parameter will be declared as
-
@custname nvarchar(8)
-
When SQL Server looks up a query in the cache, it hashes the query text and the parameter list and performs a lookup on that hash value. That is, differences in the parameter list will result in different cache
-entries and more compilations. Note here the difference to OPTION (RECOMPILE). With the latter you get compilation every time, but the plans don't take up space in the cache. This happens here leading to cache bloat, which under extreme circumstances can lead to degraded
-overall performance on the SQL Server instance.
-
If you feel that you don't want to hardcode the length of the column in case it could change in the future, rather than leaving out the length, use the maximum length for the type, that is 8000 for char, varchar, binary and varbinary and 4000 for nchar and nvarchar.
-
Handling the Multi-Valued Parameter
-
I will have to admit that I was lazy and used the list-to-table function:
-
if (! Employeestr.IsNull) {
- Query += " AND o.EmployeeID IN" +
- " (SELECT number FROM intlist_to_tbl(@employeestr))";
- Command.Parameters.Add("@employeestr", SqlDbType.NVarChar, -1);
- Command.Parameters["@employeestr"].Value = Employeestr;
- }
-
While this works, the optimizer has no information of how many elements the list will return and it will guess 1. It would be a little prettier to use the CSV_splitter class that I present in my article Arrays and Lists in SQL Server 2008 to pass the value to a table-valued parameter but I leave that as an exercise to the reader. That would permit SQL Server to have knowledge of the number of elements when it builds the plan. As long as the lists are typically short, this is not likely to be any major issue.
This is very much is the standard way to run a query from a CLR procedure. You connect on the context connection, that is, the same connection you are already running on. SqlContext.Pipe.ExecuteAndSend runs the command and returns the result set to the client. SqlContext.Pipe.Send is how you do PRINT from a CLR procedure.
-
Loading the Examples
-
If you have any flavour of Visual Studio 2005 or later (including the Express
- editions), you can deploy search_orders_cs and search_orders_vb
- from Visual Studio. (But please don't ask me how to do it, Visual Studio
- just leaves me in a maze.)
-
Since the .NET Framework comes with Windows and includes compilers
- for the most
- common .NET languages, you can also load them without Visual Studio. First
- make sure that C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 (or
- corresponding) is in your path. Then run from a command-line window:
To load the DLLs into SQL Server, you can use
- load_clr_sp.sql.
- You will have to change the path in the CREATE ASSEMBLY command to where you placed the
- DLL. Note that the paths are as seen from SQL Server, so if you don't have SQL
- Server on your local machine, you will have to copy the
- DLLs to the SQL
- Server box, or specify a UNC path to your machine.
The query plans should be identical to search_orders_1, as the queries are the same. Hint: if you want to look at the query plans, you need to use Profiler,
- and get the Showplan XML event. For some reason, you don't see query
- plans for queries submitted from CLR code in Management Studio.
-
An Example with Unparameterised SQL
-
-
We will now turn to an example that does the forbidden: it inlines all parameters and does not use parameterised SQL. One reason I show you this is example is pure deterrence: to make you see how much more difficult this is than parameterised SQL. But there are also situations when inlining an occasional parameter may be a good idea to resolve a performance problem. Thus, it may be good to know the technique if you need to do this, but I like to stress that this is not a step that you should take lightly.
-
The name of the procedure for this is example is search_orders_2. I don't include the procedure in full here, but only comment on certain parts.
-
General Notes
-
-When building a non-parameterised query with the values inlined, you need to
-be very disciplined when you write your code. It's very easy to get lost in a maze of
-nested quotes. I often see people in SQL forms posting code like:
-
EXEC('SELECT col1, col2, ...
- FROM ...
- WHERE ' + CASE @par1 IS NULL THEN ' + col = ''' + @par + ''' + ...)
-
-This is difficult to read and maintain, and if it goes wrong, you have no idea
-what SQL you are actually generating. search_orders_2 aggregates the SQL
-code into a variable, and there is a @debug parameter so I can see the
-generate SQL code if needed. And to make the debug output easier to read I use the variable @nl like I did in search_orders_1.
-
To run the code I use EXEC(), but it works equally well with sp_executesql without any parameter list. Again, keep in mind that the dynamic SQL is a separate scope and cannot refer to variables in the surrounding procedure.
-
Handling String Values
-
To understand the problem, we will start with looking at a parameter in search_orders_2 which is unique to this procedure: @city_bad, which is bad implementation of the @city parameter that reflects what the naïve and inexperienced user may try:
While there are orders from customers in both Łódź (a Polish city) and Luleå (in Sweden), at least one of the procedure calls will come back empty-handed, exactly which depends on your collation. String literals preceded by N are nvarchar, and those without are varchar and can only hold characters for the code page of the collation and other characters are replaced by fallback characters. You can see this by running this SELECT:
-
SELECT 'Łódź', 'Luleå'
-
Again, exactly what you see depends on your collation, but you may see Lódz, Lodz, Lulea, or even have question marks in some places.
-
That is, however, the small problem. Assume instead that we want to search for customers in the capital of Chad, N'Djamena:
-
EXEC search_orders_2 @city_bad = N'N''Djamena'
-
This ends with syntax errors:
-
-
Msg 102, Level 15, State 1, Line 11
-
Incorrect syntax near 'Djamena'.
-
Msg 105, Level 15, State 1, Line 11
-
Unclosed quotation mark after the character string ' ORDER BY o.OrderID'.
-
-
Not what you call a good user experience. And there is also, as I said a few times, the issue of SQL injection. Try this:
-
EXEC search_orders_2 @city_bad = '''SHUTDOWN --'
-
As it happens this will not shut down you server, but you will get the informational message
-The SHUTDOWN statement cannot be executed within a transaction or by a stored procedure. But the important point is: you were able to inject SQL code where there should have been a city name.
-
Let us now look at the proper way to inline a string parameter. We have already mentioned the function quotename(), but it is time to give it a closer look. This built-in function delimits a string with the delimiter(s) you specify, and, this is the important part: if the string includes the closing delimiter, this character is doubled. The default delimiter is [], and the main purpose of quotename is to quote identifiers when you generate queries from metadata, but you can use other delimiters as seen in these examples:
And using the second of these examples, we can now see how the @city parameter should be implemented:
-
IF @city IS NOT NULL
- SELECT @sql += ' AND c.City = N' + quotename(@city, '''') + @nl
-
Here I have added the N to mark a Unicode literal and there is also @nl to make the debug output prettier. And I use quotename with single quote(') as the delimiter. If you try these searches:
You will find that the first two return lots of rows. The last does not return any rows – but nor does it attempt to shut down your SQL Server instance. (Credit for the idea of using quotename() this way goes my MVP colleague Steve Kass.)
-
You should always use quotename when you inline string parameters in your dynamic searches. There is a caveat, though: quotename is designed for quoting object names, and the input parameter is nvarchar(128). If the input value is longer, you get NULL back. However, I find it extremely unlikely that you can find a good case where it makes sense to inline a string parameter that long. (For a dynamic search, I should hasten to add. There are other situations you may need it, and in such case you can use my function
-quotestring() from my Curse and Blessings article.)
-
No, we have not said all there is to say about inlining string parameters yet. Let's return to that N. You should include that N only when the type of the parameter is nvarchar or nchar. It should not be there if you are comparing the value with a varchar or char column. Because of the rules for data-type precedence in SQL Server, the (var)char column will be implicitly converted to n(var)char and this affects how any index on the column can be used. If the column has a Windows collation, the index can still be used but in a slower way. If the column has an SQL collation, the index is of no use at all, why that N can cause serious performance problems when applied incorrectly.
-
So as you see, inlining string parameters is anything but easy.
-
Datetime Parameters
-
Compared to string values, date/time values are easier to deal with, but only in a relative way. People often go wrong with these as well. In search_orders_2, I handle the @fromdate parameter this way:
-
SELECT @fromdatestr = convert(char(23), @fromdate, 126)
-...
-IF @fromdate IS NOT NULL
- SELECT @sql += ' AND o.OrderDate >= ' + quotename(@fromdatestr, '''') + @nl
-
-
The whole key is the format code 126. The results in a string like this one 2003-04-06T21:14:26.627. This is the format mandated by the standard ISO 8601, and it is commonly used in XML. More
-importantly, it is one of the three formats for datetime literals in SQL Server of
-which the interpretation does not depend on the settings for date format and
-language. If you don't understand what I'm talking about, try these statements:
-
SET DATEFORMAT mdy
-SELECT convert(datetime, '02/07/09')
-SET DATEFORMAT dmy
-SELECT convert(datetime, '02/07/09')
-go
-SELECT convert(datetime, '2002-12-19') -- Fails!
-go
-SET LANGUAGE Swedish
-SELECT convert(datetime, 'Oct 12 2003') -- Fails! (It's "Okt" in Swedish.)
-
If you always use code 126 to produce a datetime string for your dynamic SQL, you don't have to worry about this. (When it comes to the newer date/time data types, there are a few more safe formats, but there is still a lot of datetime out there, so stick with code 126.) As for using an extra variable, this is mainly a matter keeping the code that produces the dynamic SQL clean.
-
Numeric Parameters
-
Numeric values are the easiest to inline, as you simply can apply convert:
-
IF @orderid IS NOT NULL
- SELECT @sql += ' AND o.OrderID = ' + convert(varchar(10), @orderid) +
- ' AND od.OrderID = ' + convert(varchar(10), @orderid) + @nl
-
Although, you have to be careful to make the string long enough to fit all possible values.
-
For some numeric parameters in the procedure, I use an intermediate string variable:
-
SELECT @minpricestr = convert(varchar(25), @minprice)
-...
-IF @minprice IS NOT NULL
- SELECT @sql += ' AND od.UnitPrice >= ' + @minpricestr + @nl
-
-
This is purely a matter of aesthetics.
-
If you get the idea to inline float or real values, you will need to be more careful, since with a casual use of convert you can lose precision. But it's a little difficult to see a case where you would need to do this in the first place.
-
Multi-valued Parameters
-
Let's now look at how the parameters @employeestr and @employeetbl should be handled. @employeestr is supposed to be a comma-separated string, so it sounds dirt simple:
-
IF @employeestr IS NOT NULL
- SELECT @sql += ' AND o.EmployeeID IN (' + @employeestr + ')' + @nl
-
But this would be bad mistake, as this would open the code for SQL injection. And while it is kind of difficult to make a serious intrusion in the 15-character long @city_bad, the data type of @employeestr is varchar(MAX), so there is all the space in the world for an intruder. But I pass my comma-separated list from SSRS, how could there be SQL injection? Answer: when you write your stored procedure, you should assume the worst. That is, a web application that runs as sa and sends data from a URL right into your parameter. Don't laugh, it happens. When you write your stored procedure, you should make your procedure bullet-proof and make no assumptions.
-
So here is how I handle the @employeestr parameter:
-
IF @employeestr IS NOT NULL
-BEGIN
- SELECT @employeestr =
- (SELECT ltrim(str(number)) + ','
- FROM intlist_to_tbl(@employeestr)
- FOR XML PATH(''))
-END
-
-SELECT @employeestr = substring(@employeestr, 1, len(@employeestr) - 1)
-...
-IF @employeestr IS NOT NULL
- SELECT @sql += ' AND o.EmployeeID IN (' + @employeestr + ')' + @nl
-
That is, I unpack the string into table format with that list-to-table function. Then I produce a new comma-separated list using the FOR XML PATH syntax. The intended purpose of FOR XML PATH is to generate an XML document, but Microsoft designed it so that if you don't give any element name (that's what the empty string after PATH means), you get a concatenated list of the values from a single-column query. This results in a list with a trailing comma, and I delete this comma in the subsequent SELECT. And then I use my local variable that I can fully trust with IN as in the original example. If @employeestr does not contain the comma-separated list as expected, it is likely that this will result in a conversion error inside intlist_to_tbl. Not very pretty, but it keeps the illegitimate input out.
-
The same solution is used for the parameter @employeetbl (which is not directly accessible from the SQL string):
-
IF EXISTS (SELECT * FROM @employeetbl)
-BEGIN
- SELECT @employeestr =
- (SELECT ltrim(str(val)) + ','
- FROM @employeetbl
- FOR XML PATH(''))
-END
-
Effects on Caching
-
I said previously that an advantage of using dynamic SQL over static SQL with OPTION (RECOMPILE) is that it reduces the amount of compilation, since the plan is cached. But this applies to parameterised SQL only. These two calls:
Generates two query plans and two compilations. This is because when SQL Server caches the plan for a query string it hashes the string, exactly as it stands, so the smallest difference produces a different hash value, why the plan for o.OrderID = 11000 cannot be reused when the query instead reads o.OrderID = 21000. The only time a plan can be reused is when someone makes a search on exactly the same parameter values.
-
That is, if you inline all parameters, the behaviour is quite similar to static SQL with OPTION (RECOMPILE). Except that you also litter the cache with all those plans that are rarely reused. That's a serious waste of memory. Although, this is a statement that requires some qualification, because there are some settings that changes this behaviour.
-
-
If the server-level configuration parameter optimize for ad hoc workloads is 1, SQL Server does not cache the plan on the first execution, but it only caches a so-called shell query so that it knows that it has seen the query. Only if the exact string reappears, the plan is cached. This configuration parameter, that was introduced in SQL 2008, is 0 by default, but the general recommendation is to set it to 1.
-
If the query string is very simple, SQL Server may replace a constant with a parameter holder, and thereby create a parameterised query by itself. It is not very likely that you would encounter this with a dynamic search of any complexity.
-
There is a database setting, forced parameterization. With this setting in force, SQL Server replaces all constants in a query string with parameter holders. With this setting, search_orders_2 will use the cache exactly like search_orders_1. The reason this setting exists is exactly to save the performance of poorly written applications that inline all parameter values.
-
-
Conclusion
-
I have now shown you a bad example, search_orders_2, which inlines all parameters and I hope you have gathered why this is a really poor choice as a general solution. But as we shall see in the next section, there are situations where may need to do this for a specific parameter.
-
When Caching Is Not What You Want
-
An advantage with parameterised dynamic SQL is that you get less compilation because plans can be reused. But caching is not always to your advantage. Earlier on in the article, we had this pair:
The choice of parameters is the same, but the profile is very different. ERNTC is the most active customer in Northgale with 591 orders in total, but the date interval is only one day. BOLSR, on the other hand, has only placed a single order, but the interval is the full year. There are indexes on both CustomerID and OrderDate. For the first call, the index on OrderDate looks like the best bet, whereas the index on CustomerID sounds more appealing for the second call. And, indeed, if you look at the query plans, this is what we get. (Sort of; the call for ERNTC uses both indexes and joins these.)
-
But what happens if we use search_orders_1 instead?
The plan is the same for both. When I tested, there was a yellow triangle on a hash match operator in the execution for BOLSR, indicating that the hash table spilled to disk (which certainly is not good for performance).
-
In the following, I will discuss some tactics you can use when you work a search that uses dynamic SQL and where the choice of plans is sensitive to the actual values.
-
OPTION (RECOMPILE)
-
For this particular case, OPTION (RECOMPILE) could be a simple way out. If the search has both @custid, @fromdate, and @todate, add OPTION (RECOMPILE):
-
IF @custid IS NOT NULL AND (@fromdate IS NOT NULL OR @todate IS NOT NULL)
- SELECT @sql += ' OPTION(RECOMPILE)' + @nl
-
More generally, when you identify that you have search parameters that both relate to indexed columns, and where the selectivity is very dependent on the actual parameter values, add OPTION (RECOMPILE), so that you always get the best plan you can get from the statistics.
-
Obviously, this strategy will add quite a few unnecessary compilations.
-
Changing the Query Text
-
As I discussed previously, SQL Server looks up queries in the cache by
- hashing the query text. This means that two queries with different text are
- different entries in the cache, even if they are logically equivalent. There
- are many ways to alter the query text, for instance you could do something
- like:
-
IF @fromdate IS NOT NULL AND @todate IS NOT NULL
-BEGIN
- SELECT @sql += CASE WHEN @fromdate = @todate
- THEN ''
- WHEN datediff(DAY, @fromdate, @todate) <= 7
- THEN ' AND 2 = 2 '
- WHEN datediff(DAY, @fromdate, @todate) <= 30
- THEN ' AND 3 = 3 '
- ...
-
The advantage with changing the query text depending on the parameter values over OPTION (RECOMPILE) is that you will not get as many compilations. But it also means that in some cases you
- will not run with the best plan, since predicting the exact breakpoint between different plans is hard. With some luck the damage is limited. Even if the plan for a single day is not the best for
- the span of a week,
- it may still yield acceptable performance. But you will have to know your data, and
- possibly tune as time goes.
-
Could this technique also be used to deal with the fact that different
- customers have a very different number of orders? Probably not. Counting
- the number of orders for a customer before we construct the query is taking
- it too far in my opinion, and it could be more expensive than what you save in
- the other end. If you really wanted to do this, you would probably have to maintain a separate table with order counts per customer. You would not have to maintain this table in real-time, but it would be sufficient to update it nightly or weekly.
-
Inlining Some Values
-
Sometimes you can resolve this sort of problems by inlining a specific parameter into the query. Typically, this would be a parameter with a very skewed distribution. Say that the search includes a @status parameter, and
- there are only four possible values for Orders.Status, whereof
- Completed accounts for 95 % of the values. A typical search may be for new orders,
-less than 1 % of the rows. This is a situation where it could make sense to inline the @status parameter. The four different values are really different searches.
-
You may recognize the situation from when I discussed filtered indexes where I presented a somewhat different approach. I think both approaches are valid. The solution I presented for filtered indexes, assumes that you know that there is a filtered index and that you also have some understanding of the distribution of the values. But maybe you don't know what the distribution between the small of handful of values will be in production, or what indexes a DBA may add in the future. By inlining you keep the doors open, and as long it is only a matter of small number of values, you will not produce that many extra plans.
-
What about the case where we had competing indexes like in the example with customer ID and a date interval? In this case, OPTION (RECOMPILE) works out better, since you avoid cache littering. Overall, inlining customer IDs on a general basis is likely to be a bad idea. But if you have five big-whiz customers that overtrump everything else, it may make sense to inline these customer IDs and parameterise the rest. The same applies to product IDs, if you have a very small number of huge-selling products and umpteen low-volume products. It's all about knowing your data.
-
Note: above I mentioned forced parameterisation. If your database is in this mode, inlining parameters is useless, since SQL Server will replace the constants with parameters anyway.
-
Index Hints and Other Hints
-
Sometimes index hints or query hints other than OPTION (RECOMPILE) can be useful. Returning to our example with ERNTC and BOLSR, we can make the observation that the index on CustomerID is always OK. It does not always give the best plan, but it does not give a really bad plan. Whereas, as I noted, the index on OrderDate resulted in hash spills for a long interval. So one strategy could be do:
-
FROM dbo.Orders o ' + CASE WHEN @custid IS NOT NULL AND
- (@fromdate IS NOT NULL OR
- @todate IS NOT NULL)
- THEN 'WITH (INDEX = CustomerID) '
- ELSE ''
- END
-
I cannot say that this is my favourite strategy. Overall, index hints is something you should use sparingly. Casually used, they can cause performance problems because you force the optimizer to use the completely wrong index.
-
A hint that makes a little more sense is the hint OPTIMIZE FOR. If you want plans to always be compiled with the big customers in mind, you could add
-
IF @custid IS NOT NULL
- @sql += ' OPTION (OPTIMIZE FOR (@custid = ''ERNTC''))'
-
Or if you want to discourage the optimizer from producing different plans depending on what it sniffs for the date parameters, you could add:
-
IF @fromdate IS NOT NULL AND @todate IS NOT NULL
- @sql += ' OPTION (OPTIMIZE FOR (@fromdate UNKNOWN, @todate UNKNOWN))'
-
The optimizer will now apply its standard assumption for a closed interval, which is 10 % or so, and typically too much to make the index interesting.
-
Conclusion
-
You have now learnt that there are two ways to implement dynamic search conditions: static SQL and dynamic SQL. Solutions with static SQL almost always use OPTION (RECOMPILE), except in a very simple cases where the optimizer's use of startup filters can be good enough. You have also seen that solutions with static SQL are easy to implement as long as the requirements are moderately complex. Once the requirements increase in complexity, the solutions with static SQL easily becomes unwieldy. A second disadvantage with solutions using OPTION (RECOMPILE) is that very frequent searches can incur an unwanted load on the system because of all the compilations.
-
More than half of the text in this article was taken up by the discussion on dynamic SQL. This is a good indication of the fact that dynamic SQL is more difficult to work with and requires more understanding from you as a programmer. But dynamic SQL has the advantage that when the requirements for what conditions to handle increase in diversity, the complexity of the code grows more linearly than with static SQL. Correctly used, dynamic SQL reduces the amount of resources needed for query compilation. A special issue with dynamic SQL that you must not forget is that you need to cater for permissions on the tables accessed by the dynamic SQL. Certificate signing is the best way to resolve this when direct SELECT permissions on the tables are not acceptable.
-
It is important to stress that you cannot only apply the methods in this article on auto-pilot. You need to make your own judgements. And moreover, you need to test your queries, both for logic and for performance. Since you may have a multitude of parameter combinations, it may not be feasible to test all combinations, but you should at least test all parameters in isolation, as well as combinations you expect to be common. With dynamic SQL, you should be careful to test all parameters in combination with some other parameter, because with dynamic SQL you can easily slip so that a certain combination results in a syntax error.
-
Finally, when testing for performance, you need a database of some size. The article was based on Northgale, and while larger than its source Northwind, it is still a very small database.
-
Feedback and Acknowledgements
-
All through the years of this article, and its predecessor, a lot of people have given valuable suggestions and input. My fellow SQL Server MVPs: Steve Kass, Marcello Poletti, Simon Sabin, Alejandro Mesa, Adam Machanic, and Umachandar
-Jaychandran. And all the rest of you: Mark Gordon, Phillipp
- Sumi, Thomas Joseph Olaes, Simon Hayes, Sloan Holliday, Travis Gan and Eric Garza .
- I would also like to give a special credit to Tony Rogerson, Steve Kass, Ivan Arjentinski and Graham Kent for their involvement
- with the bug with OPTION (RECOMPILE) in SQL 2008 RTM. My big thanks to all of you.
-
If you have questions or comments on the contents in the article, feel free
- to mail me at esquel@sommarskog.se. (And that most emphatically includes any spelling or grammar error that you spot!) If you are working with a specific problem and need help, you can mail me
- too. However, I would encourage you in such case to post your question on a
- public forum for SQL Server, as there are more people who can answer your
- questions. (And you may get your answer more rapidly!)
-
Revision History
-
-
2015-11-15
-
Corrected a couple of small errors in code fragments. In search_orders_1, I had failed to prefix the call to intlist_to_tbl with dbo, which is necessary to make sure that the cache entry can be shared among users.
-
2014-12-27
-
Not a total makeover, but a general overhaul in an attempt to make the presentation clearer. The introductions for static and dynamic SQL now both begin with a summary of advantages and disadvantages. Some significant additions to the content:
-
-
On popular demand: I'm now giving examples how you should handle multi-choice parameters. To this end there are two new two parameters to search_orders.
-
There is now a deeper discussion on dynamic sort order and alternate tables with more examples.
-
Reworked the text about the original bug with OPTION (RECOMPILE), since you should be on a much later service pack by now and added text about the new bug with OPTION (RECOMPILE) uncovered in the autumn of 2014.
-
-...and then there is a formatting makeover to adapt to my new style sheet.
-
-
2013-11-02
-
Travis Gan pointed out that in the section Performance: The Fine Print, there is a risk for parameter sniffing and I've added a short discussion on this. Also, corrected a silly error in the demo procedure search_orders_4. (The arguments to datediff were in the wrong order.)
-
2011-08-26
Håkan Borneland was kind to point out that my update of 2011-08-01 was not complete, but I still said that there was no service pack for SQL 2008 R2 in one place.
-
2011-08-01
Updated the article to reflect the release of Service Pack 1 for SQL 2008 R2.
There is now a Cumulative Update for SQL 2008 R2 with
-the corrected behaviour of OPTION (RECOMPILE).
-
2010-05-13
Updated the article for SQL 2008 R2. Note that
-RTM-version of R2 has the old behaviour of OPTION (RECOMPILE).
-
2009-11-22
Republished the article, since CU5 of SQL 2008 SP1
-restores the RTM behaviour of OPTION (RECOMPILE), but now without the bug.
-
2009-02-14
Pulled the article, since Microsoft had reverted to the
-old behaviour of OPTION (RECOMPILE) because of a bug.
-
-
2008-08-03
The first version of the article for SQL 2008. A lot of the material from the older version has been ripped out, and a new section on Alternate Key Lookup has been added. Static SQL is now covered before dynamic SQL.
\ No newline at end of file
diff --git a/Articles/Error and Transaction Handling in SQL Server.htm b/Articles/Error and Transaction Handling in SQL Server.htm
deleted file mode 100644
index b64e274d..00000000
--- a/Articles/Error and Transaction Handling in SQL Server.htm
+++ /dev/null
@@ -1,342 +0,0 @@
-
-
-
-
-
-Error and Transaction Handling in SQL Server
-
-
-
-
This article is the first in a series of three about error and transaction handling in SQL Server. The aim of this first article is to give you a jumpstart with error handling by showing you a basic pattern which is good for the main bulk of your code. This part is written with the innocent and inexperienced reader in mind, why I am intentionally silent on many details. The purpose here is to tell you how without dwelling much on why. If you take my words for your truth, you may prefer to only read this part and save the other two for a later point in your career.
-
On the other hand, if you question my guidelines, you certainly need to read the other two parts, where I go into much deeper detail exploring the very confusing world of error and transaction handling in SQL Server. Parts Two and Three, as well as the three appendixes, are directed towards readers with a more general programming experience, although necessarily not with SQL Server. This first article is short; Parts Two and Three are considerably longer.
Why do we have error handling in our code? There are many reasons. In a forms application we validate the user input and inform the users of their mistakes. These user mistakes are anticipated errors. But we also need to handle unanticipated errors. That is, errors that occur because we overlooked something when we wrote our code. A simple strategy is to abort execution or at least revert to a point where we know that we have full control. Whatever we do, simply ignoring an unanticipated error is something we should never permit us. This can have grave consequences and cause the application to present incorrect information to the user or even worse to persist incorrect data in the database. It is also important to communicate that an error has occurred, lest that the user thinks that the operation went fine, when your code in fact performed nothing at all.
-
In a database system, we often want updates to be atomic. For instance, say that the task is to transfer money from one account to another. To this end, we need to update two rows in the CashHoldings table and add two rows to the Transactions table. It's absolutely impermissible that an error or an interruption would result in money being deposited into the receiving account without it being withdrawn from the other. For this reason, in a database application, error handling is also about transaction handling. In this example, we need to wrap the operation in BEGIN TRANSACTION and COMMIT TRANSACTION, but not only that: in case of an error, we must make sure that the transaction is rolled back.
-
Essential Commands
-
We will start by looking at the most important commands that are needed for error handling. In Part Two, I cover all commands related to error and transaction handling.
-
TRY-CATCH
-
The main vehicle for error handling is TRY-CATCH, very reminiscent of similar constructs in other languages. The structure is:
If any error occurs in <regular code>, execution is transferred to the CATCH block, and the error-handling code
- is executed. Typically, your CATCH rolls back any open transaction and reraises the error, so that the calling client program understand that something went wrong. As for how to reraise the error, we will come to this later in this article.
-
Here is a very quick example:
-
BEGIN TRY
- DECLARE @x int
- SELECT @x = 1/0
- PRINT 'Not reached'
-END TRY
-BEGIN CATCH
- PRINT 'This is the error: ' + error_message()
-END CATCH
-
The output:
-
This is the error: Divide by zero error encountered.
-
-
We will return to the function error_message() later. It is worth noting that using PRINT in your CATCH handler is something you only would do when experimenting. You should never do so in real application code.
-
If <regular code> calls stored procedures or invokes triggers, any error that occurs in these will also transfer execution to the CATCH block. More exactly, when an error occurs, SQL Server unwinds the stack until it finds a CATCH handler, and if there isn't any, SQL Server sends the error message to the client.
-
There is one very important limitation with TRY-CATCH you need to be aware of: it does not catch compilation errors that occur in the same scope. Consider:
-
CREATE PROCEDURE inner_sp AS
- BEGIN TRY
- PRINT 'This prints'
- SELECT * FROM NoSuchTable
- PRINT 'This does not print'
- END TRY
- BEGIN CATCH
- PRINT 'And nor does this print'
- END CATCH
-go
-EXEC inner_sp
-
The output is:
-
-
This prints
-
-
Msg 208, Level 16, State 1, Procedure inner_sp, Line 4
-
Invalid object name 'NoSuchTable'.
-
-
-
As you see the TRY block is entered, but when the error occurs, execution is not transferred to the CATCH block as expected. This is true for all compilation errors such as missing columns, incorrect aliases etc that occur at run-time. (Compilation errors can occur at run-time in SQL Server due to deferred name resolution, a (mis)feature where SQL Server permits you to create a procedure that refers to non-existing tables.)
-
These errors are not entirely uncatchable; you cannot catch them in the scope they occur, but you can catch them in outer scopes. Add this code to the example above:
-
CREATE PROCEDURE outer_sp AS
- BEGIN TRY
- EXEC inner_sp
- END TRY
- BEGIN CATCH
- PRINT 'The error message is: ' + error_message()
- END CATCH
-go
-EXEC outer_sp
-
Now we get this output:
-
This prints
-
-
The error message is: Invalid object name 'NoSuchTable'.
-
-
This time the error is caught because there is an outer CATCH handler.
-
SET XACT_ABORT ON
-
Your stored procedures should always include this statement in the beginning:
-
SET XACT_ABORT, NOCOUNT ON
-
This turns on two session options that are off by default for legacy reasons, but experience has proven that best practice is to always have them on. The default behaviour in SQL Server when there is no surrounding TRY-CATCH is that some errors abort execution and roll back any open transaction, whereas with other errors execution continues on the next statement. When you activate XACT_ABORT ON, almost all errors have the same effect: any open transaction is rolled back and execution is aborted. There are a few exceptions of which the most prominent is the RAISERROR statement.
-
The option XACT_ABORT is essential for a more reliable error and transaction handling. Particularly, with the default behaviour there are several situations where execution can be aborted without any open transaction being rolled back, even if you have TRY-CATCH. We saw one such example in the previous section where we learnt that TRY-CATCH does not catch compilations errors in the same scope. An open transaction which is not rolled back in case of an error can cause major problems if the application jogs along without committing or rolling back.
-
For good error handling in SQL Server, you need both TRY-CATCH and SET XACT_ABORT ON. Of these two, SET XACT_ABORT ON is the most important. For production-grade code it's not really sufficient to rely on XACT_ABORT, but for quick and simple stuff it can do.
-
The option NOCOUNT has nothing to do with error handling, but I included in order to show best practice. The effect of NOCOUNT is that it suppresses messages like (1 row(s) affected) that you can see in the Message tab in SQL Server Management Studio. While these row counts can be useful when you work interactively in SSMS, they can degrade performance in an application because of the increased network traffic. The row counts can also confuse poorly written clients that think they are real result sets.
-
Above, I've used a syntax that is a little uncommon. Most people would probably write two separate statements:
-
SET NOCOUNT ON
-SET XACT_ABORT ON
-
There is no difference between this and the above. I prefer the version with one SET and a comma since it reduces the amount of noise in the code. As these statements should appear in all your stored procedures, they should take up as little space as possible.
-
General Pattern for Error Handling
-
Having looked at TRY-CATCH and SET XACT_ABORT ON, let's piece it together to a pattern that we can use in all our stored procedures. To take it slow and gentle, I will first show an example where I reraise the error in a simple-minded way, and in the next section I will look into better solutions.
-
For the example, I will use this simple table.
-
CREATE TABLE sometable(a int NOT NULL,
- b int NOT NULL,
- CONSTRAINT pk_sometable PRIMARY KEY(a, b))
-
Here is a stored procedure that showcases how you should work with errors and transactions.
-
CREATE PROCEDURE insert_data @a int, @b int AS
- SET XACT_ABORT, NOCOUNT ON
- BEGIN TRY
- BEGIN TRANSACTION
- INSERT sometable(a, b) VALUES (@a, @b)
- INSERT sometable(a, b) VALUES (@b, @a)
- COMMIT TRANSACTION
- END TRY
- BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- DECLARE @msg nvarchar(2048) = error_message()
- RAISERROR (@msg, 16, 1)
- RETURN 55555
- END CATCH
-
The first line in the procedure turns on XACT_ABORT and NOCOUNT in single statement as I showed above. This line is the only line to come before BEGIN TRY. Everything else in the procedure should come after BEGIN TRY: variable declarations, creation of temp tables, table variables, everything. Even if you have other SET commands in the procedure (there is rarely a reason for this, though), they should come after BEGIN TRY.
-
The reason I prefer to have SET XACT_ABORT, NOCOUNT ON before BEGIN TRY is that I see this as one line of noise: it should always be there, but that I don't want it to strain my eyes. This is certainly a matter of preference, and if you prefer to put the SET commands after BEGIN TRY, that's alright. What is important is that you should never put anything else before BEGIN TRY.
-
The part between BEGIN TRY and END TRY is the main meat of the procedure. Because I wanted to include a user-defined transaction, I introduced a fairly contrived business rule which says that when you insert a pair, the reverse pair should also be inserted. The two INSERT statements are inside BEGIN and COMMIT TRANSACTION. In many cases you will have some lines code between BEGIN TRY and BEGIN TRANSACTION. Sometimes you will also have code between COMMIT TRANSACTION and END TRY, although that is typically only a final SELECT to return data or assign values to output parameters. If your procedure does not perform any updates or only has a single INSERT/UPDATE/DELETE/MERGE statement, you typically don't have an explicit transaction at all.
-
Whereas the TRY block will look different from procedure to procedure, the same is not true for the CATCH block. Your CATCH blocks should more or less be a matter of copy and paste. That is, you settle on something short and simple and then use it all over the place without giving it much thinking. The CATCH handler above performs three actions:
-
-
Rolls back any open transaction.
-
Reraises the error.
-
Makes sure that the return value from the stored procedure is non-zero.
-
-
These actions should always be there. Always. You may argue that the line
-
IF @@trancount > 0 ROLLBACK TRANSACTION
-
is not needed if there no explicit transaction in the procedure, but nothing could be more wrong. Maybe you call a stored procedure which starts a transaction, but which is not able to roll it back because of the limitations of TRY-CATCH. Maybe you or someone else adds an explicit transaction to the procedure two years from now. Will you remember to add the line to roll back then? Don't count on it. I can also hear readers that object if the caller started the transaction we should not roll back.... Yes, we should, and if you want to know why you need to read Parts Two and Three. Always rolling back the transaction in the CATCH handler is a categorical imperative that knows of no exceptions.
-
The code for reraising the error includes this line:
-
DECLARE @msg nvarchar(2048) = error_message()
-
The built-in function error_message() returns the text for the error that was raised. On the next line, the error is reraised with the RAISERROR statement. This is an unsophisticated way to do it, but it does the job. We will look at alternatives in the next chapter.
-
Note: the syntax to give variables an initial value with DECLARE was introduced in SQL 2008. If you are on SQL 2005, you will need to split the line in one DECLARE and one SELECT statement.
-
Always reraise? What if you only want to update a row in a table with the error message? Yes, that is a situation that occurs occasionally, although you would typically do that in an inner CATCH block which is part of a loop. (I have a longer example demonstrating this in Part Three.) The outer CATCH block in a procedure is exactly for catching and reraising unexpected errors you did not foresee. Dropping these errors on the floor is a criminal sin. They must be reraised.
-
The final RETURN statement is a safeguard. Recall that RAISERROR never aborts execution, so execution will continue with the next statement. As long as all procedures are using TRY-CATCH and likewise all client code is using exception handling this is no cause for concern. But your procedure may be called from legacy code that was written before SQL 2005 and the introduction of TRY-CATCH. In those days, the best we could do was to look at return values. What you return does not really matter, as long as it's a non-zero value. (Zero is usually understood as success.)
-
The last statement in the procedure is END CATCH. You should never have any code after END CATCH for the outermost TRY-CATCH of your procedure. For one thing, anyone who is reading the procedure will never see that piece of code.
-
Having read all the theory, let's try a test case:
-
EXEC insert_data 9, NULL
-
The output is:
-
-
Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
-
- Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
-
-
Let's add an outer procedure to see what happens when an error is reraised repeatedly:
-
CREATE PROCEDURE outer_sp @a int, @b int AS
- SET XACT_ABORT, NOCOUNT ON
- BEGIN TRY
- EXEC insert_data @a, @b
- END TRY
- BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- DECLARE @msg nvarchar(2048) = error_message()
- RAISERROR (@msg, 16, 1)
- RETURN 55555
- END CATCH
-go
-EXEC outer_sp 8, 8
-
The output is:
-
-
Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9
-
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).
-
-
We get the correct error message, but if you look closer at the headers of this message and the previous, you may note a problem:
-
-
Msg 50000, Level 16, State 1, Procedure insert_data, Line 12
-
Msg 50000, Level 16, State 1, Procedure outer_sp, Line 9
-
-
The error messages give the location of the final RAISERROR statement that was executed. In the first case, only the line number is wrong. In the second case, the procedure name is incorrect as well. For simple procedures like our test procedures, this is not a much of an issue, but if you have several layers of nested complex stored procedures, only having an error message but not knowing where it occurred makes your troubleshooting a lot more difficult. For this reason, it is desirable to reraise the error in such a way that you can locate the failing piece of code quickly, and this is what we will look at in the next chapter.
-
Three Ways to Reraise the Error
-
Using error_handler_sp
-
We have seen error_message(), which returns the text for an error message. An error message consists of several components, and there is one error_xxx() function for each one of them. We can use this to reraise a complete message that retains all the original information, albeit with a different format. Doing this in each and every CATCH handler would be a gross sin of code duplication, and there is no reason to. You don't have to be in the CATCH block to call error_message() & co, but they will return exactly the same information if they are invoked from a stored procedures that your CATCH block calls.
The first thing error_handler_sp does is to capture the value of all the error_xxx() functions into local variables. (Exactly what all these mean, is something I am not covering in this introductory article, but I leave that for Part Two.) I will return to the IF statement in a second. Instead let's first look at the SELECT statement inside of it:
The purpose of this SELECT statement is to format an error message that we pass to RAISERROR, and which includes all information in the original error message which we cannot inject directly into RAISERROR. We need to give special treatment to the procedure name, since it will be NULL for errors that occur in ad-hoc batches or in dynamic SQL. Whence the use of the coalesce() function. (If you don't really understand the form of the RAISERROR statement, I discuss this in more detail in Part Two.)
-
The formatted error message starts with three asterisks. This serves two purposes: 1) We can directly see that this is a message reraised from a CATCH handler. 2) This makes it possible for error_handler_sp to filter out errors it has reraised once or more already with the condition NOT LIKE '***%' to avoid that error messages get modified a second time.
-
Here is how a CATCH handler should look like when you use error_handler_sp:
-
BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- EXEC error_handler_sp
- RETURN 55555
-END CATCH
-
Let's try some test cases.
-
EXEC insert_data 8, NULL
-EXEC outer_sp 8, 8
-
This results in:
-
-
Msg 50000, Level 16, State 2, Procedure error_handler_sp, Line 20
-
*** [insert_data], Line 5. Errno 515: Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
-
Msg 50000, Level 14, State 1, Procedure error_handler_sp, Line 20
-
*** [insert_data], Line 6. Errno 2627: Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).
-
-
The header of the messages say that the error occurred in error_handler_sp, but the texts of the error messages give the original location, both procedure name and line number.
-
I will present two more methods to reraise errors. However, error_handler_sp is my main recommendation for readers who only read this part. It's simple and it works on all versions of SQL Server from SQL 2005 and up. There is really only one drawback: in some situations SQL Server raises two error messages, but the error_xxx() functions return only information about one of them, why one of the error messages is lost. This can be quite difficult with administrative commands like BACKUP/RESTORE, but it is rarely an issue in pure application code.
-
Using ;THROW
-
In SQL 2012, Microsoft introduced the ;THROW statement to make it easier to reraise errors. Unfortunately, Microsoft made a serious design error with this command and introduced a dangerous pitfall.
-
With ;THROW you don't need any stored procedure to help you. Your CATCH handler becomes as simple as this:
-
BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- ;THROW
- RETURN 55555
-END CATCH
-
The nice thing with ;THROW is that it reraises the error message exactly as the original message. If there were two error messages originally, both are reraised which makes it even better. As with all other errors, the errors reraised by ;THROW can be caught in an outer CATCH handler and reraised. If there is no outer CATCH handler, execution is aborted, so that RETURN statement is actually superfluous. (I still recommend that you keep it, in case you change your mind on ;THROW later.)
-
If you have SQL 2012 or later, change the definition of insert_data and outer_sp, and try the tests cases again. The output this time:
-
-
-
Msg 515, Level 16, State 2, Procedure insert_data, Line 5
-
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
-
Msg 2627, Level 14, State 1, Procedure insert_data, Line 6
-
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).
-
-
The procedure name and line number are accurate and there is no other procedure name to confuse us. Also, the original error numbers are retained.
-
At this point you might be saying to yourself: he must be pulling my legs, did Microsoft really call the command ;THROW? Isn't it just THROW? True, if you look it up in Books Online, there is no leading semicolon. But the semicolon must be there. Officially, it is a terminator for the previous statement, but it is optional, and far from everyone uses semicolons to terminate their T‑SQL statements. More importantly, if you leave out the semicolon before THROW this does not result in a syntax error, but in a run-time behaviour which is mysterious for the uninitiated. If there is an active transaction you will get an error message – but a completely different one from the original. Even worse, if there is no active transaction, the error will silently be dropped on the floor. Something like mistakenly leaving out a semicolon should not have such absurd consequences. To reduce the risk for this accident, always think of the command as ;THROW.
-
It should not be denied that ;THROW has its points, but the semicolon is not the only pitfall with this command. If you want to use it, I encourage you to read at least Part Two in this series, where I cover more details on ;THROW. Until then, stick to error_handler_sp.
-
Using SqlEventLog
-
The third way to reraise an error is to use SqlEventLog, which is a facility that I present in great detail in Part Three. Here I will only give you a teaser.
-
SqlEventLog offers a stored procedure slog.catchhandler_sp that works similar to error_handler_sp: it uses the error_xxx() functions to collect the information and reraises the error message retaining all information about it. In addition, it logs the error to the table slog.sqleventlog. Depending on the type of application you have, such a table can be a great asset.
-
To use SqlEventLog, your CATCH hander would look like this:
-
BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- EXEC slog.catchhandler_sp @@procid
- RETURN 55555
-END CATCH
-
@@procid returns the object id of the current stored procedure, something that SqlEventLog uses when it writes the log information to the table. Using the same test cases, this is the output with catchhandler_sp:
-
-
-
Msg 50000, Level 16, State 2, Procedure catchhandler_sp, Line 125
-
{515} Procedure insert_data, Line 5
-
Cannot insert the value NULL into column 'b', table 'tempdb.dbo.sometable'; column does not allow nulls. INSERT fails.
-
Msg 50000, Level 14, State 1, Procedure catchhandler_sp, Line 125
-
{2627} Procedure insert_data, Line 6
-
Violation of PRIMARY KEY constraint 'pk_sometable'. Cannot insert duplicate key in object 'dbo.sometable'. The duplicate key value is (8, 8).
-
-
-
As you see, the error messages from SqlEventLog are formatted somewhat differently from error_handler_sp, but the basic idea is the same. Here is a sample of what is logged to the table slog.sqleventlog:
2 2015-01-25 22:40:24.395 2627 14 insert_data 6 Violation of ...
-
-
If you want to play with SqlEventLog right on the spot, you can download the file sqleventlog.zip. For installation instructions, see the section Installing SqlEventLog in Part Three.
-
Final Remarks
-
You have now learnt a general pattern for error and transaction handling in stored procedures. It is not perfect, but it should work well for 90-95 % of your code. There are a couple of limitations you should be aware of:
-
-
As we have seen, compilation errors such as missing tables or missing columns cannot be trapped in the procedure where they occur, only in outer procedures.
-
The pattern does not work for user-defined functions, since neither TRY-CATCH nor RAISERROR are permitted there.
-
When you call a stored procedure on a linked server that raises
- an error, this error may bypass the error handler in the procedure on the
- local server and go to directly to the client.
-
When a procedure is called by INSERT-EXEC, you will get an ugly error, because ROLLBACK TRANSACTION is
- not permitted in this case.
-
As noted above, if you use error_handler_sp or SqlEventLog, you will lose one error message when SQL Server raises two error messages for the same error. This is not an issue with ;THROW.
-
-
I cover these situations in more detail in the other articles in the series.
-
Before I close this off, I like to briefly cover triggers and client code.
-
Triggers
-
The pattern for error handling in triggers is not any different from error handling in stored procedures, except in one small detail: you should not include that RETURN statement. (Because RETURN with a value is not permitted in triggers.)
-
What is important to understand about triggers is that they are part of the command that fired the trigger, and in a trigger you are always in a transaction, even if you did not use BEGIN TRANSACTION. Sometimes I see people in SQL Server forums ask if they can write a trigger that does not roll back the command that fired the trigger if the trigger fails. The answer is that there is no way that you can do this reliably, so you better not even try. If you have this type of requirement, you should probably not use a trigger at all, but use some other solution. In Parts Two and Three, I discuss error handling in triggers in more detail.
-
-
Client Code
-
Yes, you should have error handling in client code that accesses the database. That is, you should always assume that any call you make to the database can go wrong. Exactly how to implement error handling depends on your environment, and to cover all possible environments out there, I would have to write a couple of more articles. And learn all those environments.
-
Here, I will only point out one important thing: your reaction to an error raised from SQL Server should always be to submit this batch to avoid orphaned transactions:
-
IF @@trancount > 0 ROLLBACK TRANSACTION
-
This also applies to the famous message Timeout expired (which is not a message from SQL Server, but the client API).
This is the end of Part One of this series of articles. If you just wanted to learn the pattern quickly, you have completed your reading at this point. If your intention is to read it all, you should continue with Part Two which is where your journey into the confusing jungle of error and transaction handling in SQL Server will begin for real.
-
If you have questions, comments or suggestions specific to this article, please feel free to contact me at esquel@sommarskog.se. This includes small things like spelling errors, bad grammar, errors in code samples etc. Since I don't have a publisher, I need to trust my readership to be my tech editors and proof-readers. :-) If you have questions relating to a problem you are working with, I recommend that you ask that question in a public forum, as this is more likely to give you a quick response.
-
For a list of acknowledgements, please see the end of Part Three. Below is a revision history for Part One.
-
...and don't forget to add this line first in your stored procedures:
When designing an application for SQL Server, you rarely want users to have
- full permissions to access the tables in the database. Many applications are
- designed to perform all database access through stored procedures, and it is
- through the stored procedures users can access and update data. The
- procedures perform validations of business rules to protect the integrity of
- the database.
-
In this article I will in depth discuss three different ways to achieve this:
This article applies to SQL 2005 SP2 and later. Particularly, there were
- some bugs and limitations in the RTM version of SQL 2005, that I don't touch, as
- there is no reason why you should be running SQL 2005 RTM or SP1. (And for that
- matter, SP2. You should have installed at least Service Pack 3 by now, if not
-SP4.) If you are using SQL 2000, you should know that this article focuses on features added in SQL 2005.
The classic method for granting permissions through stored procedures is
-
- ownership chaining. This is the prime method for plain table
- access, but there are permissions that are not grantable through ownership chaining. Two such cases that we will look at in this
- article are
- dynamic SQL and reloading a table through BULK INSERT. Due to its importance, ownership
- chaining is the first mechanism that I will cover in this article.
- However, before that I will discuss owner/schema-separation,
- a change in SQL 2005 that may boggle the mind of old-time users of SQL Server and which
- has some effects on ownership chaining.
-
- SQL 2005 introduced two new methods to give users access through stored
- procedures: you can sign procedures with certificates,
- and you can use impersonation with the EXECUTE AS clause.
- Both these methods permit you to encapsulate any permission in a stored
- procedure. Certificates are more complex to use, whereas EXECUTE AS can be
- deceivingly simple. To wit, EXECUTE AS has some side effects that can be
- nasty. If you are a developer, this text tries to make you aware of what harm
- casual use of EXECUTE AS could cause. And if you are a DBA, this
- article warns you of what creative developers can inflict to your database with EXECUTE AS.
-
Whereas the above-mentioned methods can be applied to individual procedures,
- application roles, "application proxies"
-and Terminal Server are
- solutions that you typically use on an application-wide scale. (I have put "application proxy" in
- quotes throughout the article, as this is a term that I've coined myself and
- it may not be established terminology.)
This article includes several example scripts that demonstrate the various
- methods. Before you start to run these scripts all over town, I like to point
- out a few things.
-
All these scripts assume that you are logged in with sysadmin rights,
- and I strongly recommend that you run the examples on a development machine.
- Some scripts assume that you have enabled xp_cmdshell, which is
- disabled by default. Enable it with sp_configure, if this is acceptable with your local security policy.
- The use of xp_cmdshell is mainly for convenience, and it is not
- required to demonstrate the essentials of the examples. You can perform
- those actions manually if needed.
-
- Furthermore, all scripts create at least one database and at least one login.
- Some scripts also create files in the file system. If the scripts run
- uninterrupted, all objects are dropped at the end; logins,
- databases and files alike. (So first check that you don't have any database
- with names that coincide with the databases in the scripts!)
-
The reason the scripts create databases is simplicity. That permits me to
- create objects, users etc in the database, and clean up all by dropping the
- database. The scripts create logins because it's difficult to
- demonstrate security features when running as sysadmin.
-
To contain everything into one script, I make heavily use of the
-EXECUTE
- AS and REVERT statements, although it will take until the second half of the
- article before I discuss them in detail. For now, just think of them as an
- alternative to open a second query window to run as a test user. If you
- prefer, you can stop the scripts at EXECUTE AS, log into a second query
- window as the test user to run the part up to REVERT.
Before I go on to the main body of this text, I would like to make a short digression
- about security in general.
-
Security is often in
- conflict with other interests in the programming trade. You have users screaming
- for a solution, and they want it now. At this point, they don't really care
- about security, they just want to get their business done. But if you give them a
- solution that has a hole, and that hole is later exploited, you are the one
- that will be hung. So as a programmer you
- always need to have security in mind, and make sure that you play your part right
-
One common mistake in security is to think "we have this
- firewall/encryption/whatever, so we are safe". I like to think of security of
- something that consists of a number of defence lines.
- Anyone who has worked with computer systems knows that there are a lot of changes
- in them, both in their configuration and in the program code. Your initial design
- may be sound and safe, but as the system evolves, there might suddenly be a
- security hole and a serious vulnerability in your system.
-
By having multiple lines of defence you can reduce the risk for this to happen.
- If a hole is opened, you can reduce the impact of what is possible to do
- through that hole. An integral part of this strategy is to never
- grant more permissions than is absolutely necessary. Exactly what this means in this
- context is something I shall return to.
Before we look at any of the methods to grant permissions, we need to look at
- a change in SQL 2005 which can be a bit breath-taking to users coming from
-older versions of SQL Server.
-
Since the dawn of time, SQL Server have permitted a four-part notation of
- objects, and it has usually been presented as
-
server.database.owner.object
-
But in SQL 2005 this changed to
-
server.database.schema.object
-
You may ask, what is this schema? The answer is that schema has
- always been there, but up to SQL 2000, schema and owner was always the same.
- In SQL 2005 owner and schema are two different entities.
-
The purpose of a schema is simple to understand: it permits you to have
- different namespaces in database. Say that for a larger application, there
- are several groups that work more or less independently. Each group could
- have their own schema for their specific objects to avoid name clashes.
- While you could do this in SQL 2000 as well, the fact that all schemas had
- different owners, made this unpractical. In SQL 2005 all schemas can have the
- same owner.
-
An example of a database with several schemas is the
-AdventureWorks
- database; the database which Microsoft use for all their samples since SQL 2005.
-
SQL Server comes with no less than 13 pre-defined schemas. That's a lot, but
- ten of them exist solely for backwards compatibility, and they are namesakes
- with predefined users and roles in SQL 2000. (Since users and roles also were
- schemas in SQL 2000, Microsoft figured that there could be applications using them.) You can drop the nine
- schemas that stem from roles (db_owner etc)
- from your database, and if you drop them from the model database, the
- schemas will not appear in new databases. For some reason you cannot drop the
- guest schema.
-
Two schemas, sys and INFORMATION_SCHEMA,
-are reserved for system objects, and you cannot create objects in these schemas.
-
Finally, there is the dbo schema, which is the only predefined schema
- you normally create objects in. The tacky name is short for database owner,
- and is a heritage from the previous days of owner/schema-unification.
There are several statements related to schemas and users, and I will give a brief
-overview here to point out the differences between the new commands added in SQL 2005, and the older system procedures from previous versions.
-
To create a schema, you use not surprisingly CREATE SCHEMA, and most often
- you just say like:
-
CREATE SCHEMA myschema
-
CREATE SCHEMA is one of these statements that must be alone in batch. That is,
- no statements can precede or follow it. That may seem a little funny for such
- a simple command, but there is an older form of CREATE SCHEMA which is more
- complex that was
- introduced in SQL 6.5 and which serves a different purpose. (Please see Books Online for details, if you really want to know.)
-
The preferred way to create a user since SQL 2005 is:
-
CREATE USER newuser [WITH DEFAULT_SCHEMA = someschema]
-
There are two system procedures to create users, sp_adduser and
-sp_grantdbaccess. They are both deprecated and will be removed eventually. There is an important difference between CREATE USER and
-the two system procedures: CREATE USER creates a user whose default schema is dbo,
- unless you specify otherwise. On the other hand, sp_adduser
- and sp_grantdbaccess
- for compatibility reasons
- perform the corresponding to:
-
CREATE SCHEMA newuser
-go
-CREATE USER newuser WITH DEFAULT_SCHEMA = newuser
-go
-ALTER AUTHORIZATION ON SCHEMA::newuser TO newuser
-
(The last command makes newuser owner of the schema created in his
- name.) Most likely, you don't need that schema, so there is
- good reason to avoid these old system procedures entirely.
-CREATE USER also has some
- options not offered by sp_adduser and sp_grantdbaccess. For
-instance, you can say:
-
CREATE USER thisdbonly WITHOUT LOGIN
-
This creates a database user that is not tied to a login. In some of the the test scripts, I use this option
-to create test users, but you will also see examples where WITHOUT LOGIN can be
-used to create a user that is a container for a certain permission. We will look
-at other options later in this article.
-
There is also CREATE ROLE that replaces sp_addrole in the same vein that CREATE USER
- replaces sp_adduser. That is, CREATE ROLE creates the role only.
- sp_addrole also creates a schema that you are unlikely to have any need
- for. And while we are at it, there is a CREATE LOGIN
-which replaces
- sp_addlogin. As with CREATE USER, CREATE LOGIN has some new options, that we will come back to
- later in this article.
-
Finally, there is DROP USER instead of sp_dropuser
- etc. A little note here: if you have users created with sp_addlogin or
-sp_grantdbaccess, sp_dropuser is the most convenient way to drop them, since there is a schema that needs to be dropped before you can drop
-the user, and DROP USER will not do that for you.
If you create objects in a schema that is owned by another user, the
- schema owner will be the owner of the objects you create, not you.
- Thus, if you give a user permission to create objects in a schema you own,
- but no other permissions in the schema, he will not be able to access the
- objects he creates.
-
This can be a bit of a surprise, but it's actually logical. Assume that all
- developers of an application have their own user, while they create objects in a
- common schema. For ownership chaining to work (which we look at in a second), all objects must have the same
- owner, so it much simpler if all objects are owned by the schema owner from
- the start. Else you would constantly have to change the ownership of the procedures.
Ownership chaining is the classical way of giving users access to objects
- through stored procedures in SQL Server. And while SQL Server provides two
- other methods, ownership chaining is what you will use 99 % of the time.
- Certificates and impersonation is something you only have reason to use when
- ownership chaining does not do the job.
-
How does ownership chaining work? Say that you have a procedure sp1
- owned by user A. sp1 performs a SELECT from tbl1 and tbl2.
- tbl1 is owned by A, whereas tbl2 is owned by user B. User C has
- permission to execute sp1. To be able run this procedure successfully,
- C needs SELECT permission on tbl2 but not
- on tbl1. Since
- sp1 and tbl1 have the same owner, the permission check is suppressed, and this is ownership
- chaining. Ownership chaining is also in effect in triggers,
- user-defined functions and views.
-
Now, this may seem a little complex to grasp, but in real life it is often a
- lot simpler. In my experience, having several object owners in a database is
- not very common. In very many cases, dbo, the database owner, owns all
- objects in a database. A common way to implement security in a database
- application is to perform all access
- through stored procedures that validates input parameters, enforces business
- rules etc. When dbo owns all procedures and tables, users only need permissions to execute the
- stored procedures. Thanks to ownership chaining, they do not need any direct
- permissions on the tables. But as we will learn soon, there are permissions
- that cannot be transferred through ownership chaining.
-
Note: in older versions of SQL Server, applications might have used different object owners in order to implement different namespaces, that is schemas. But since
-in SQL 2005, dbo can own all schemas, this should no longer be necessary.
Here is an example script that demonstrates ownership chaining. Despite what
- I said in the previous section about dbo owning everything, the
- example includes two objects owned by other users, to demonstrate what
- happens when the ownership chain is broken.
-
(Please refer to the introductory note about
- the example scripts in this article.)
-
USE master
-go
--- Create a test user and a test database.
-CREATE LOGIN testuser WITH PASSWORD = 'TesT=0=UsEr'
-CREATE DATABASE ownershiptest
-go
--- Move to the test database.
-USE ownershiptest
-go
--- Create a user to run the tests.
-CREATE USER testuser
-go
--- Create two database-only users that will own some objects.
-CREATE USER procowner WITHOUT LOGIN
-CREATE USER tableowner WITHOUT LOGIN
-go
--- Create three test tables. As this is an example to demonstrate
--- permissions, we don't care about adding any data to them.
-CREATE TABLE tbl1 (a int NOT NULL)
-CREATE TABLE tbl2 (b int NOT NULL)
-CREATE TABLE tbl3 (c int NOT NULL)
-go
--- Make the user tableowner owner of tbl3.
-ALTER AUTHORIZATION ON tbl3 TO tableowner
-go
--- Create a couple of stored procedures.
-CREATE PROCEDURE sp1 AS
- SELECT a FROM tbl1
-go
-CREATE PROCEDURE sp2inner AS
- SELECT a FROM tbl1
-go
-CREATE PROCEDURE sp2 AS
- SELECT b FROM tbl2
- EXEC sp2inner
-go
-CREATE PROCEDURE sp3 AS
- SELECT c FROM tbl3
-go
-CREATE PROCEDURE sp2procowner AS
- SELECT b FROM tbl2
- EXEC sp2inner
-go
--- Make procowner the owner of sp2procowner.
-ALTER AUTHORIZATION ON sp2procowner TO procowner
-go
--- Grant permissions to testuser to execute all procedures,
--- except for sp2inner.
-GRANT EXECUTE ON sp1 TO testuser
-GRANT EXECUTE ON sp2 TO testuser
-GRANT EXECUTE ON sp2procowner TO testuser
-GRANT EXECUTE ON sp3 TO testuser
-go
--- Run some commands as testuser, with its permissions etc.
-EXECUTE AS LOGIN = 'testuser'
-go
--- sp1 runs fine, as dbo owns both sp1 and tbl1.
-PRINT 'EXEC sp1, this runs fine'
-EXEC sp1
-go
--- Also sp2 runs fine. Note that testuser can run sp2inner, when
--- it's called from sp2. Ownership chaining applies here as well.
-PRINT 'EXEC sp2, this runs fine, despite no priv on sp2inner'
-EXEC sp2
-go
--- But sp2procowner fails twice. Because sp2procowner has a different
--- owner than tbl2 and sp2inner, testuser would need direct permission on
--- these objects, but he hasn't.
-PRINT 'EXEC sp2procowner, two permission errors'
-EXEC sp2procowner
-go
--- And this fails as well, because while sp3 is owned by dbo, tbl3 is
--- owned by another user, so ownership chaining is broken.
-PRINT 'EXEC sp3, permission error'
-EXEC sp3
-go
--- Stop being tester and clean up.
-REVERT
-go
-USE master
-go
-DROP LOGIN testuser
-DROP DATABASE ownershiptest
Since ownership chaining is so commonly used, and works so smoothly when all
- objects are owned by dbo, it often comes as a surprise when users get
- a permission error when they run a stored procedure.
-
The story is that ownership chaining does not apply to all statements. Essentially, ownership
- chaining applies to DML statements (SELECT, INSERT, DELETE, UPDATE and MERGE) and
- EXECUTE of stored procedures and functions. If you put a statement like
- CREATE TABLE into a stored procedure, the user must have permissions to
- create tables (which a plain user rarely has, save for temp tables). Same
- goes for many other administrative commands.
-
A statement that is worth special mention here is TRUNCATE TABLE, which
- logically is a DML statement; a quicker way to
- delete all rows in a table. But the permissions for this command are not
- transferable through ownership chaining, so if you want to write a stored
- procedure to permits users to empty a table, you may prefer to use DELETE
- although this is less efficient.
-
Another example of a command where ownership chaining does not work is BULK
- INSERT; this command requires a server-level permission.
-
These are situations that can be resolved by signing
- procedures with certificates or by using impersonation with EXECUTE AS, methods that we
- shall look
- into later in this article.
Another case where ownership chaining does not work is dynamic SQL. Consider:
-
CREATE PROCEDURE myproc AS
- EXEC('SELECT a, b FROM tbl')
-
(This is certainly not how you would use dynamic SQL in real life, but I
- wanted to keep the example short. Please see my article
- The Curse and Blessings of Dynamic SQL for
- a longer discussion on dynamic SQL, when to use it – and when to not.)
-
To run this procedure, a user needs SELECT permissions on tbl. The
- reason for this is that the batch of dynamic SQL is a scope of its own that
- is
- not part of the stored procedure. And this batch does not really have any
- owner at all, and thus the ownership chain is broken.
-
Since dynamic SQL is very powerful for some tasks – dynamic search conditions
- being the prime example – it was not uncommon in SQL 2000
-and earlier version to give users
- SELECT rights, as long as this was compliant with corporate
- security policy. But since SQL 2005 this is not necessary;
-you can use
- procedure signing and
- impersonation to give users permission to execute dynamic
- SQL.
In SQL Server you can write stored procedures,
- triggers and user-defined functions in a CLR language such as C# or Visual
- Basic. You can perform data access from a CLR module by running a batch of SQL
- statements, but ownership chaining does not apply in this case. The reason
- for this is the same as with dynamic SQL: the SQL batch is a scope of its own that does not have any owner.
-
So when you write CLR modules that accesses tables,
-you must either grant the users direct
- permissions to these tables or employ module signing or impersonation. I am
-not covering how to use these mechanisms with CLR modules in this article, but
-the topic Module Signing in Books Online includes an example.
If a stored procedure sp1 in database A accesses a table
- tbl2 in database B, ownership chaining can apply as
- well, if the procedure owner also owns tbl2. In
- the trivial case, the two databases have the same owners and all involved
- objects are owned by dbo. The user running sp1 must also be a
- user in database B. (Unless you have enabled access for the guest user
- in database B, something I don't recommend.)
-
However, starting with SQL 2000 SP3, ownership
- chaining across databases is turned off by default. You can enable it on
- server level, or per database. To enable it on server level, set the configuration option cross db
- ownership chaining to 1 (with sp_configure or through SQL Server
- Management Studio). Now all databases on the server will be open for cross-db
- chaining.
-
To open an individual database for cross-db chaining, use the command
- ALTER DATABASE db SET DB_CHAINING ON. In the example above, both A and B must
- be enabled for DB chaining for users being able to access B..tbl2
- through sp1 without any own permission on tbl2. To enable a database for
- chaining, you need sysadmin privileges.
-
As you might guess, there is a reason for database chaining being off by
- default. Assume that Jack and Jill
- own one database each. Jack is a user in Jill's database, but he only has
- permissions to run a few stored procedures there. If their databases are
- enabled for database chaining, Jack can get to Jill's inner secrets, by taking the following
- steps.
-
-
Add Jill as a user in his own database.
-
Create a schema in his database owned by Jill.
-
Create stored procedures in the Jill schema that accesses Jill's
- database. Since Jill owns the schema, she also owns the procedures, as
- noted above. (Jack could also create the
- procedures
- in the dbo schema, and then make Jill
- owner of those procedures.)
-
-
Jack can now access all tables in Jill's database as he likes.
-
Microsoft are very discouraging about turning on database chaining, but for a
- server that hosts a single application that uses several databases, turning
- on database chaining on server level appears uncontroversial. It's a
- different thing on a consolidated server that hosts databases for many
- unrelated applications. Here, you should most probably never turn on the
- configuration option to open DB chaining for all databases. What if a user who owns two databases asks you
- to turn on
- chaining on these databases? As long it's only those two, it's fine, but then
- the next guy comes with his two databases. There is no way to say that
- db1 may chain to db2 but not to db3 or db4.
-
According to Books Online, you cannot enable master, model and
- tempdb for database chaining with ALTER DATABASE. It does not really
- say whether chaining is enabled for these databases if you turn on cross db
- ownership chaining, but some quick tests that I did indicate that even
- if this option is on, it does not apply to master, model,
- msdb and tempdb.
-
Personally, I recommend that you try to keep cross-database access to stored
- procedure calls. That is, rather than directly access a table in the other
- database, call a procedure in that database. In this case, ownership chaining
- across database is not really needed – instead give the users EXECUTE
- permission to the procedures in the other database.
We will now turn to the first of the two methods added in SQL 2005 to grant
- permissions through stored procedures, signing a procedure with a
- certificate.
We will first look at using certificates for giving permissions on database level. As an example, I will use dynamic SQL, which probably is the most
- common situation where you will want to use certificates as a supplement to
- ownership chaining.
-
Our example setup is this one:
-
CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL)
-go
-CREATE PROCEDURE example_sp AS
- EXEC ('SELECT a, b FROM testtbl')
-go
-GRANT EXECUTE ON example_sp TO public
-go
-
As noted above, ownership chaining does not
- work in this case, because the batch of dynamic SQL does not have any real
- owner, and thus the chain is broken. To make it possible for a user to
- run this procedure without SELECT permission on testtbl, you need to
- take these four steps:
-
-
Create a certificate.
-
Create a user associated with that certificate.
-
Grant that user SELECT rights on
- testtbl.
-
Sign the procedure with the certificate, each time you have
- changed the procedure.
-
-
When the procedure is invoked, the rights of the certificate user
- are
- added to the rights of the actual user.
- Technically, we can describe this as the certificate user is added to the
- current user token. If the procedure invokes another SQL module –
- stored procedure, trigger, function etc – the certificate user is removed
- from the user token (unless that module is also signed by the
- certificate). There are two exceptions to this rule: system procedures and
-dynamic SQL invoked through
- EXEC() or sp_executesql.
-In this case the certificate user is still present in the
- user token, and its rights can apply.
-
This example shows the four steps in code.
-
CREATE CERTIFICATE examplecert
- ENCRYPTION BY PASSWORD = 'All you need is love'
- WITH SUBJECT = 'Certificate for example_sp',
- START_DATE = '20020101', EXPIRY_DATE = '21000101'
-go
-CREATE USER examplecertuser FROM CERTIFICATE examplecert
-go
-GRANT SELECT ON testtbl TO examplecertuser
-go
--- And each time you change the procedure:
-ADD SIGNATURE TO example_sp BY CERTIFICATE examplecert
- WITH PASSWORD = 'All you need is love'
-
In the following sections, we will look closer at each of these statements.
CREATE CERTIFICATE examplecert
- ENCRYPTION BY PASSWORD = 'All you need is love'
- WITH SUBJECT = 'Certificate for example_sp',
- START_DATE = '20020101', EXPIRY_DATE = '21000101'
-
The statement CREATE CERTIFICATE has several options, but for our purposes
- the form above suffices. Here we create a new self-signed
- certificate which is protected by a password. The password is not awfully strong; I will return to the topic of passwords in the section Managing Certificates and Passwords.
-
The WITH SUBJECT clause is part of the metadata for the certificate; in
- the catalog view sys.certificates the subject appears in the column
- issuer_name.
-
There is no requirement to enter a start date and an expiry date for the
- certificate, but for practical reasons you may want to enter both. If you enter neither, the certificate is valid one year
- from now. Since it is likely that your procedure will be in use for more than
- one year, it's recommendable to give an expiry date far into the future.
- If you leave out the start date, SQL 2005
- may produce this message:
-
Warning: The certificate you created is not yet valid; its start
-date is in the future.
-
The message is bogus since the default for the start date is the same second as you issue the command.
- The message is not an error, but informational only. If you don't want to see it, specify a
- start date. This issue has been fixed in SQL 2008.
CREATE USER examplecertuser FROM CERTIFICATE examplecert
-
We see here one more option for CREATE USER: we create a user from a certificate. Such a user exists in the database only and is not associated
-with any login. You can only create one user for each certificate.
Here's the beauty of it: we grant examplecertuser
- exactly
- the rights it
- needs for our stored procedure to work. Of course, if you use a lot of dynamic SQL, you may prefer to grant
- the certificate user SELECT on the dbo schema or add it to db_datareader. You might even consider to add it to db_owner to relieve you from any further hassle, as you add more dynamic
- SQL to other stored procedures.
-
But stop there! Recall that discussion on philosophy in the beginning
- of the article and
- that one line of defence is to not grant more rights than necessary. This very much applies when you work with
- dynamic SQL. You know about SQL injection, don't you?
- If not, a quick
- recap: if you build SQL strings from input data, a malicious user might be
- able to inject SQL commands you did not intend
- your code to execute by including a single quote (') in the input data. For a longer recap, see the section on
- SQL injection in my article on
- dynamic SQL.
-
You may already be aware of the risk of SQL injection, and you have taken
- the steps necessary to protect your procedure against this attack. But that is today. Code changes throughout the life-time of an
- application, and one day there is a need for an enhancement of the procedure,
- and the task is given to an inexperienced programmer who, unaware of the dangers of SQL injection, breaks that line of defence. By giving the certificate user exactly the rights
- needed for the stored procedure, you have set up a second line of defence
- that reduces the potential damage significantly.
ADD SIGNATURE TO example_sp BY CERTIFICATE examplecert
- WITH PASSWORD = 'All you need is love'
-
To use the certificate, you need to specify its password. You can sign a
-procedure with more than one certificate to add permissions from several
-certificate users.
-
If you change the procedure, the signature is lost, and you need to resign
-the procedure. Given for what we want to use certificates for, this may seem impractical. When we grant someone execution rights on a stored procedure, these permissions are retained when we alter the procedure. So why do we need to resign a procedure when we change it? Isn't that a shortcoming? It may seem so, but it is worth to understand the general purpose of signing things with certificates, which extends far beyond stored procedures in SQL Server. Say that you have a important message you want to pass to someone else, for instance over e-mail. You want to make it possible for the receiver to verify that he got exactly the message you sent him. Therefore you sign your message, which requires both a public and a private key. You make your public key available, and the receiver can then apply that key to message and the signature to verify that they agree. If someone has altered the text or the signature, the validation will fail.
-
That is, every time you change the stored procedure, the signature will change, and this is why you must resign the procedure. It could seem that for the particular purpose that we are using certificates for here, that this is just hassle. But as I discuss in the section Managing Certificates and Passwords, the fact that the procedure must be resigned can in fact be a considerable security advantage.
Here is a full-fledged example that you can play with. To show the
- difference, there are two procedures, of which only one is signed. (Please
- refer to the introductory note on the examples
- in this article.)
-
USE master
-go
--- Create a test login and test database
-CREATE LOGIN testuser WITH PASSWORD = 'CeRT=0=TeST'
-CREATE DATABASE certtest
-go
--- Move to the test database.
-USE certtest
-go
--- Create the test user.
-CREATE USER testuser
-go
--- Create the test table and add some data.
-CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL)
-INSERT testtbl (a, b) VALUES (47, 11)
-go
--- Create two test stored procedures, and grant permission.
-CREATE PROCEDURE unsigned_sp AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- EXEC ('SELECT a, b FROM testtbl')
-go
-CREATE PROCEDURE example_sp AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- EXEC ('SELECT a, b FROM testtbl')
- -- EXEC unsigned_sp
-go
-GRANT EXECUTE ON example_sp TO public
-GRANT EXECUTE ON unsigned_sp TO public
-go
--- Create the certificate.
-CREATE CERTIFICATE examplecert
- ENCRYPTION BY PASSWORD = 'All you need is love'
- WITH SUBJECT = 'Certificate for example_sp',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
--- Create the certificate user and give it rights to access the test table.
-CREATE USER examplecertuser FROM CERTIFICATE examplecert
-GRANT SELECT ON testtbl TO examplecertuser
-go
--- Sign the procedure.
-ADD SIGNATURE TO example_sp BY CERTIFICATE examplecert
- WITH PASSWORD = 'All you need is love'
-go
--- Run as the test user, to actually see that this works.
-EXECUTE AS USER = 'testuser'
-go
--- First run the unsigned procedure. This gives a permission error.
-EXEC unsigned_sp
-go
--- Then run the signed procedure. Now we get the data back.
-EXEC example_sp
-go
--- Become ourselves again.
-REVERT
-go
--- Clean up
-USE master
-DROP DATABASE certtest
-DROP LOGIN testuser
As you can see, I added this statement to the two test procedures in the
- example:
-
SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
-
When we run unsigned_sp, this returns
-
SYSTEM_USER USER name type usage
------------- ---------- --------- --------- --------------
-testuser testuser testuser SQL USER GRANT OR DENY
-testuser testuser public ROLE GRANT OR DENY
-
What this tells us is that we are logged in as testuser, and this is also the
- name of the user in the database. There are two rows in sys.user_token, one
- for the user, and one for the single role that testuser is a member of.
-
But when we run example_sp, which is signed, there is an extra line:
-
SYSTEM_USER USER name type usage
----------- -------- ----------- --------------------------- ---------------
-testuser testuser testuser SQL USER GRANT OR DENY
-testuser testuser public ROLE GRANT OR DENY
-testuser testuser examplecertuser USER MAPPED TO CERTIFICATE GRANT OR DENY
-
We see here that the user for the certificate has been added
- to the user token, so its permissions can apply as well. We can also see that we still
- are testuser, and no one else. This may seem like a pointless thing to
- mention, but as we shall see later, this is not the case when you use
- EXECUTE AS.
-
As you see, example_sp includes a call to unsigned_sp that has been
- commented out. If you remove that comment, and run the script again, when you call unsigned_sp from example_sp, you get a permission error just like when unsigned_sp is called directly.
- You will also see in the output from sys.user_token, that
- examplecertuser is not there.
-
There is one situation where certificate signing does not work. If the user has explicitly been denied access to one or more of the tables in the query with the DENY command, this takes precedence over the permissions granted to the certificate user. This is different from ownership chaining, where DENY never interferes with the permissions given through the stored procedure. (This is because ownership chaining suppresses the permission check altogether.) As will see later, this obstacle does not exist when you use impersonation with EXECUTE AS.
Another common situation where ownership chaining does not suffice is when
- you need to give users permissions to empty a table and reload it with BULK INSERT
- from a file. Here is a very simple procedure for this task:
-
CREATE PROCEDURE reload_sp AS
- TRUNCATE TABLE reloadable
- BULK INSERT reloadable FROM 'E:\temp\reloadable.csv'
- WITH (FIELDTERMINATOR=',', ROWTERMINATOR='\n')
-
Ownership chaining fails here for two reasons: 1) it does not apply to
- TRUNCATE TABLE. 2) to perform bulk operations, you need the
- server-level permission ADMINISTER BULK OPERATIONS or membership in the fixed server role bulkadmin.
-
You can address this by signing reload_sp, but this is more
- complicated than in the previous example, because you can only add server permissions when you are in the master database.
- Therefore, to set up reload_sp so it can be executed by an
- unprivileged user, there are no less than ten steps to go through:
-
-
Create a certificate in the master database.
-
Create a login for that certificate.
-
Grant that login rights to perform bulk operations.
-
Export the certificate to file.
-
Switch to the application database.
-
Import the certificate from the file.
-
Delete the file from disk.
-
Create a user for the certificate.
-
Grant the certificate user rights to truncate the target table and insert into it.
-
Sign the stored procedure with the certificate, each time you have
- changed the procedure.
-
-
In SQL Server 2012 the steps 4, 6 and 7 can be carried out in a different way. Since SQL 2012 at this writing still is in beta, I put the focus on the steps that works in all versions from SQL 2005 and on, and cover the new features in SQL 2012 later.
-
First some example code for the bit in master.
-
USE master
-go
-CREATE CERTIFICATE reloadcert
- ENCRYPTION BY PASSWORD = 'All you need is love'
- WITH SUBJECT = 'For bulk-load privileges',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
-CREATE LOGIN reloadcert_login FROM CERTIFICATE reloadcert
-go
-GRANT ADMINISTER BULK OPERATIONS TO reloadcert_login
-go
-BACKUP CERTIFICATE reloadcert TO FILE = 'C:\temp\reloadcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\reloadcert.pvk' ,
- ENCRYPTION BY PASSWORD = 'Tomorrow never knows',
- DECRYPTION BY PASSWORD = 'All you need is love')
-go
-
The creation of the certificate is the same as in the example with dynamic
- SQL. Since we need to grant a server
- permission, a mere certificate user won't do, but we must associate the
- certificate with a login. (Or more in line with the lingo introduced in SQL 2005, a
- server principal. "Login" is a misnomer here, as the login created for a
- certificate cannot actually log in.) Next we grant the certificate login
- the rights to run bulk load.
-
Finally we export the certificate to disk with the command BACKUP CERTIFICATE. The certificate consists of two parts: a public key which goes into
- the first file, and a private key. The private key requires a password on its
- own, Tomorrow never knows, in this example. The path where to write the files is a small complication that I will come back to. In this example I use C:\temp to keep the script simple. However, you may find that C:\temp does not work for you, because it does not exist at all, or the service account for SQL Server does not have permission to this directory.
-
Here are the parts you would run in the application database:
-
CREATE CERTIFICATE reloadcert FROM FILE = 'C:\temp\reloadcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\reloadcert.pvk',
- DECRYPTION BY PASSWORD = 'Tomorrow never knows',
- ENCRYPTION BY PASSWORD = 'A day in life')
-go
-EXEC xp_cmdshell 'DEL C:\temp\reloadcert.*'
-go
-CREATE USER reloadcert_user FOR CERTIFICATE reloadcert
-go
-GRANT ALTER, INSERT ON reloadable TO reloadcert_user
-go
--- Sign the test procedure each time you have changed it.
-ADD SIGNATURE TO reload_sp BY CERTIFICATE reloadcert
- WITH PASSWORD = 'A day in life'
-go
-
Here we use CREATE CERTIFICATE in a different way
- than before. Instead of creating
- a new certificate, we import the certificate
- that we exported from master. We need to specify the password for the
- private key to be able to access the file. We must also define a password for the certificate in this
- database. In this example, I'm using different passwords for the certificate
- in master and in the application database just to show you that this is
- possible. It's
- probably more practical to use the same password in both databases, though.
-
We delete the files with the certificate from disk. This is a security precaution, since any database
-owner on the machine could load the certificate into his database. But it is also a matter of convenience; if you re-run the script and the certificate files are already on disk, BACKUP CERTIFICATE will fail.
-
Note: xp_cmdshell
- is disabled by default. An alternative is to delete the file directly from Windows manually.
-
Next, we create the certificate user. This user is not related to the
- login for the certificate, and I've stressed this by giving them different names.
- Again, in practice, you may prefer to use the same name for both. We grant the
- certificate user the database permissions that are needed:
- ALTER permission for TRUNCATE TABLE, and INSERT permission for BULK INSERT.
- Finally, we sign the procedure, using the password for the certificate in this
- database.
-
We are almost done, but if you do all this and try to run the procedure reload_sp
- as a non-privileged user, you will nevertheless get an error message that you don't have
- permissions to do bulk load. Because of a
- bug in SQL
- Server, we need to modify the procedure:
-
CREATE PROCEDURE reload_sp AS
- TRUNCATE TABLE reloadable
- EXEC('BULK INSERT reloadable FROM ''C:\temp\reloadtest.csv''
- WITH (FIELDTERMINATOR='','', ROWTERMINATOR=''\n'')')
-
This bug is specific to bulk-load permissions, and I have not found any other
- server-level permission that has the same issue. (The specifics of the bug
- are
- that SQL Server checks the permissions for BULK INSERT
- before the certificate has been added to the user token. By putting BULK INSERT in an inner scope with dynamic SQL, we can work around the bug.)
As in the previous example there are two procedures, one signed and one
- unsigned, and I've
- added SELECT from sys.login_token and sys.user_token, so
- that you
- can see how the certificate login and the certificate user are added and deleted. (Again, please refer to
- the introductory note for general notes on the
- examples.) If you get errors when you run the script that C:\temp does not exist, or you get permissions errors with C:\temp, see below.
-
USE master
-go
--- Create a test file for bulk load.
-EXEC xp_cmdshell 'ECHO 978,123,234 > C:\temp\reloadtest.csv', no_output
-EXEC xp_cmdshell 'ECHO -98,13,85 >> C:\temp\reloadtest.csv', no_output
-go
--- Create a test login.
-CREATE LOGIN testuser WITH PASSWORD = 'CeRT=0=TeST'
-go
--- Create test database.
-CREATE DATABASE bulkcerttest
-go
--- Create certificate in master.
-CREATE CERTIFICATE reloadcert
- ENCRYPTION BY PASSWORD = 'All you need is love'
- WITH SUBJECT = 'For bulk-load privileges',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
--- Create a login for the certificate.
-CREATE LOGIN reloadcert_login FROM CERTIFICATE reloadcert
-go
--- Grant rights for the certificate login.
-GRANT ADMINISTER BULK OPERATIONS TO reloadcert_login
-go
--- Save the certificate to disk.
-BACKUP CERTIFICATE reloadcert TO FILE = 'C:\temp\reloadcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\reloadcert.pvk' ,
- ENCRYPTION BY PASSWORD = 'Tomorrow never knows',
- DECRYPTION BY PASSWORD = 'All you need is love')
-go
--- Move to test database.
-USE bulkcerttest
-go
--- Create the non-priv user.
-CREATE USER testuser
-go
--- A test table.
-CREATE TABLE reloadable (a int NOT NULL,
- b int NOT NULL,
- c int NOT NULL)
-go
--- Insert some test data. If test succeeds, this data should disappear.
-INSERT reloadable (a, b, c) VALUES (12, 23, 34)
-go
--- Test procedure with BULK INSERT. BULK INSERT needs to be in
--- EXEC() because of a bug in SQL Server.
-CREATE PROCEDURE reload_sp AS
- SELECT name, type, usage FROM sys.login_token
- SELECT name, type, usage FROM sys.user_token
- TRUNCATE TABLE reloadable
- EXEC('BULK INSERT reloadable FROM ''C:\temp\reloadtest.csv''
- WITH (FIELDTERMINATOR='','', ROWTERMINATOR=''\n'')')
-go
--- The same code, but this procedure we will not sign.
-CREATE PROCEDURE unsigned_sp AS
- SELECT name, type, usage FROM sys.login_token
- SELECT name, type, usage FROM sys.user_token
- --TRUNCATE TABLE reloadable
- EXEC('BULK INSERT reloadable FROM ''C:\temp\reloadtest.csv''
- WITH (FIELDTERMINATOR='','', ROWTERMINATOR=''\n'')')
-go
--- Give test user right to execute the procedures.
-GRANT EXECUTE ON reload_sp TO testuser
-GRANT EXECUTE ON unsigned_sp TO testuser
-go
--- Import the certificate we created in master into the test database.
-CREATE CERTIFICATE reloadcert FROM FILE = 'C:\temp\reloadcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\reloadcert.pvk',
- DECRYPTION BY PASSWORD = 'Tomorrow never knows',
- ENCRYPTION BY PASSWORD = 'A day in life')
-go
--- Delete the files.
-EXEC master..xp_cmdshell 'DEL C:\temp\reloadcert.*', 'no_output'
-go
--- And create a user for the certificate.
-CREATE USER reloadcert_user FOR CERTIFICATE reloadcert
-go
--- Grant this user rights to truncate and insert to the test table.
-GRANT ALTER, INSERT ON reloadable TO reloadcert_user
-go
--- Sign the test procedures.
-ADD SIGNATURE TO reload_sp BY CERTIFICATE reloadcert
- WITH PASSWORD = 'A day in life'
-go
--- Switch to the test user.
-EXECUTE AS LOGIN = 'testuser'
-go
--- Run the unsigned procedure. You will get a permission error.
-EXEC unsigned_sp
-go
--- Run the real reload procedure.
-EXEC reload_sp
-go
--- Back to ourselves.
-REVERT
-go
--- The data in the table has been replaced.
-SELECT a, b, c FROM reloadable
-go
--- Clean up.
-USE master
-go
-DROP DATABASE bulkcerttest
-DROP LOGIN reloadcert_login
-DROP CERTIFICATE reloadcert
-DROP LOGIN testuser
-EXEC xp_cmdshell 'DEL C:\temp\reloadtest.csv', 'no_output'
-
In unsigned_sp I have commented TRUNCATE TABLE, in order to
- demonstrate the error you get because lack of bulk permissions. If you
- uncomment TRUNCATE TABLE, you will get a different permission error from
- unsigned_sp.
-
One problem here is that we need to bounce the certificate over disk. To do this, you need to determine a directory where you can write the certificate. This can be particularly difficult if you need to do this in a deployment script to be run on servers you never have seen. In this example, I used C:\temp for the sake of simplicity, but C:\temp does not exist on all servers. Even if it does, the service account for SQL Server may not have write access to that folder. If you leave out the path entirely, BACKUP CERTIFICATE will write the files to the default directory for new databases and likewise CREATE CERTIFICATE will read from this directory. It's reasonable to expect that SQL Server has write access to this folder, so far so good. Unfortunately, this path is not easily determined from within SQL Server, so there is a challenge if you want to delete the files programmatically from your deployment script. One way to get a path that is known to be writeable is this SELECT:
-
SELECT substring(physical_name, 1, len(physical_name) - charindex('\', reverse(physical_name)) + 1) FROM sys.database_files WHERE file_id = 1
-
This retrieves the path to the directory where the first file for the current database resides. You would use this path throughout the script, which means that BACKUP/CREATE CERTIFICATE has to be embedded in dynamic SQL, as they don't accept variables for the file name.
-
CREATE CERTIFICATE FROM BINARY in SQL 2012
-
It would certainly be convenient, if you could copy a certificate directly from one database to another without bouncing it over disk, and there is a new feature in SQL Server 2012 that permits you to do this. There is a new clause to CREATE CERTIFICATE: FROM BINARY which permits you to specify the certificate as a binary constant. SQL 2012 also offers two new functions certencoded and certprivatekey which permits you to retrieve the public and the private keys of the certificate. Thus, you can say:
Almost. The functions do not accept the name for the certificate, but they want the the certificate id in sys.certificates. You can retrieve it with the cert_id function, see example below for how to use it. Furthermore, CREATE CERTIFICATE does not accept variables for the binary value, but you must provide a constant, which means that you are in for some dynamic SQL.
-
To use this new functionality to copy a certificate between databases, we replace the steps 4-7 above to read:
-
-
Save the keys of the certificae to a temp table.
-
Switch to the application database.
-
Create the certificate from the data in the temp table.
-
Drop the temp table.
-
-
The reason we like to use a temp table is that our example script is split into a number of batches. We cannot use variables, as they exist only for the duration of a batch. Whence the temp table. This is how step 4 looks like:
-
CREATE TABLE #keys (pubkey varbinary (MAX) NOT NULL,
- privkey varbinary(MAX) NOT NULL)
-INSERT #keys (pubkey, privkey)
-SELECT certencoded(cert_id('reloadcert')),
- certprivatekey(cert_id('reloadcert'), 'Tomorrow never knows',
- 'All you need is love')
-
The passwords you pass to certprivatekey correspond to the passwords we used with BACKUP CERTIFICATE above. That is, the first password is the password for the private key, which you have to make up at this point. The second password is the password for the public key that you used when you created the certificate in master.
-
Since we need to use dynamic SQL to create the certificate from the data in the temp table, this part gets a little more complicated than it would have to be. Here is how it looks with our bulk-copy example:
-
DECLARE @sql nvarchar(MAX)
-SELECT @sql =
- 'CREATE CERTIFICATE reloadcert
- FROM BINARY = ' + convert(nvarchar(MAX), pubkey, 1) + '
- WITH PRIVATE KEY (BINARY = ' + convert(nvarchar(MAX), privkey, 1) + ',
- DECRYPTION BY PASSWORD = ''Tomorrow never knows'',
- ENCRYPTION BY PASSWORD = ''A day in life'')'
-FROM #keys
-
PRINT @sql
-EXEC (@sql)
-DROP TABLE #keys
-
A key here is the third argument to the convert function; this converts the binary value to a hex-string with a leading 0x. This style to convert was added in SQL 2008, in case you are not familiar with it. If you compare with the CREATE CERTIFICATE command when we imported the certificate from a file, this is very similar; all that has changed is that FILE is now BINARY and the extra syntactical fireworks imposed to us because we have to use dynamic SQL.
-
Before we execute the command, we print it, so we can understand what is going on if there is a syntax error in our dynamic SQL. Finally, we drop the temp table as a safety precaution. If we would leave it around, we could run into problems later if we would re-run the script or run a similar script from the same query window.
-
The script bulkcopy-2012.sql has the full example for bulk-load for SQL 2012, using CREATE CERTIFICATE FROM BINARY.
-
All and all, this is a welcome addition to SQL 2012, since it makes it easier to copy certificates between databases. Not so much for the different syntax, but you don't have to worry about disk paths in your scripts.
When you need to write a stored procedure that accesses data in another
- database, you can arrange permissions by signing your procedure with a
- certificate that exists in both databases. The steps are similar to the
- bulk-copy case, so I will go directly to an example
- script.
-
There are two things to note with this script: 1) testuser is never
- granted access to db1. That is, by signing your procedures with a
- certificate, you can give users access to data in a database they do not have
- access to themselves. This is different from ownership chaining, where the user must
- have been granted access to the target database. 2) I don't create
- any user for the certificate in db2, simply because in this example no permissions are
- needed to be granted through the certificate in db2.
-
Here is the script (please see the introductory
- note for general notes on the example scripts):
-
USE master
-go
--- Create a test login.
-CREATE LOGIN testuser WITH PASSWORD = 'CeRT=0=TeST'
-go
--- Create test two databases
-CREATE DATABASE db1
-CREATE DATABASE db2
-go
--- Move to first test database.
-USE db1
-go
--- Create certificate in db1
-CREATE CERTIFICATE crossdbcert
- ENCRYPTION BY PASSWORD = 'Lucy in the Skies with Diamonds'
- WITH SUBJECT = 'Cross-db test',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
--- Save the certificate to disk.
-BACKUP CERTIFICATE crossdbcert TO FILE = 'C:\temp\crossdbcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\crossdbcert.pvk' ,
- ENCRYPTION BY PASSWORD = 'She said She said',
- DECRYPTION BY PASSWORD = 'Lucy in the Skies with Diamonds')
-go
--- Create the certificate user. Note that we do not grant access to
--- testuser.
-CREATE USER certuser FROM CERTIFICATE crossdbcert
-go
--- A test table.
-CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL,
- c int NOT NULL)
-go
--- Insert some test data.
-INSERT testtbl (a, b, c) VALUES (12, 23, 34)
-go
--- The certificate user needs to access this table.
-GRANT SELECT ON testtbl TO certuser
-go
--- Switch to the second database.
-USE db2
-go
--- Welcome the test user to this database.
-CREATE USER testuser
-go
--- Signed test procedure.
-CREATE PROCEDURE signed_sp AS
- SELECT a, b, c FROM db1..testtbl
-go
--- Same code, but we will leave this one unsigned.
-CREATE PROCEDURE unsigned_sp AS
- SELECT a, b, c FROM db1..testtbl
-go
--- Give test user right to execute the procedures.
-GRANT EXECUTE ON signed_sp TO testuser
-GRANT EXECUTE ON unsigned_sp TO testuser
-go
--- Import the certificate we created in the first test database into the second.
-CREATE CERTIFICATE crossdbcert FROM FILE = 'C:\temp\crossdbcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\crossdbcert.pvk',
- DECRYPTION BY PASSWORD = 'She said She said',
- ENCRYPTION BY PASSWORD = 'Helter Skelter')
-go
--- Delete the file with the certificate.
-EXEC master..xp_cmdshell 'DEL C:\temp\crossdbcert.*', 'no_output'
-go
--- Sign the test procedures.
-ADD SIGNATURE TO signed_sp BY CERTIFICATE crossdbcert
- WITH PASSWORD = 'Helter Skelter'
-go
--- Switch to the test login.
-EXECUTE AS LOGIN = 'testuser'
-go
--- Run the unsigned procedure. You will get a permission error.
-EXEC unsigned_sp
-go
--- Run the signed procedure. testuser can now access testdbl, even though
--- he is not a user of db1.
-EXEC signed_sp
-go
--- Back to ourselves.
-REVERT
-go
--- Clean up.
-USE master
-go
-DROP DATABASE db1
-DROP DATABASE db2
-DROP LOGIN testuser
-
See the file crossdb-2012.sql for a version that uses the new FROM BINARY clause on SQL Server 2012 to copy the certificate.
-
-
Counter Signatures
-
If you look up the command ADD SIGNATURE in Books Online, you will find that there is an optional keyword COUNTER which you can put before SIGNATURE, but in Books Online for SQL 2005 and SQL 2008 there is no information what this keyword means. It was added to Books Online first with SQL 2008 R2. Before that, the only place to learn about counter signatures was a a blog post from Laurenţiu Cristofor. He was one of the Program Managers for the security enhancements in SQL 2005.
-
When you counter-sign a procedure P1 with a certificate C, this has in itself no effect at all, even if permissions has been granted to a user for that certificate. But assume that there is also a procedure P2 that has been signed (and not counter-signed) with C, and that P2 calls P1. Normally, when you call an inner procedure from a signed procedure, the certificate user is removed from the user token. But when P1 is counter-signed with C, the certificate user remains in the user token. The net effect of this is that you can get the powers of P1 only if you call it through P2.
-
How could we use this? Here is one example. Assume that we have generic search procedure that in itself permits users to search all data. However, there are business rules that say that users may only see customers (or products or whatever) they have access to according to some scheme. These rules are enforced by an outer procedure that computes the values for some of the parameters to the inner procedure, thereby constraining the search. In the example below, this is extremely simple: the user may only see rows he owns. In a real-world scenario, both procedures would be far more elaborate. (Please see the introductory
-note for general notes on the example scripts).
-
USE master
-go
--- Create a test login and test database.
-CREATE LOGIN testuser WITH PASSWORD = 'CeRT=0=TeST'
-CREATE DATABASE certtest
-go
--- Move to the test database.
-USE certtest
-go
--- Create the test user, and grant him permission to execute any
--- stored procedure.
-CREATE USER testuser
-GRANT EXECUTE TO testuser
-go
--- Create a test table and add some data.
-CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL,
- owner sysname NOT NULL)
-INSERT testtbl (a, b, owner) VALUES (47, 11, 'testuser')
-INSERT testtbl (a, b, owner) VALUES (17, 89, 'someotheruser')
-go
--- This is the inner procedure that permits you to view all data,
--- but the selection could be constrained to a certain owner.
-CREATE PROCEDURE inner_sp @owner sysname = NULL AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- DECLARE @sql nvarchar(MAX)
- SELECT @sql = N'SELECT a, b FROM testtbl WHERE 1 = 1 '
- IF @owner IS NOT NULL
- SELECT @sql = @sql + ' AND owner = @owner'
- EXEC sp_executesql @sql, N'@owner sysname', @owner
-go
--- The outer procedure which forces the owner to be the current user.
-CREATE PROCEDURE outer_sp AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- DECLARE @owner sysname
- SELECT @owner = SYSTEM_USER
- EXEC inner_sp @owner
-go
--- Create the certificate.
-CREATE CERTIFICATE examplecert
- ENCRYPTION BY PASSWORD = 'Being for the benefit of Mr Kite'
- WITH SUBJECT = 'Certificate for counter-sign example',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
--- Create the certificate user and grant access the test table.
-CREATE USER examplecertuser FROM CERTIFICATE examplecert
-GRANT SELECT ON testtbl TO examplecertuser
-go
--- Sign the outer procedure.
-ADD SIGNATURE TO outer_sp BY CERTIFICATE examplecert
- WITH PASSWORD = 'Being for the benefit of Mr Kite'
-go
--- And counter-sign the inner procedure.
-ADD COUNTER SIGNATURE TO inner_sp BY CERTIFICATE examplecert
- WITH PASSWORD = 'Being for the benefit of Mr Kite'
-go
--- Run as the test user, to actually see that this works.
-EXECUTE AS USER = 'testuser'
-go
--- First run the inner procedure directly. This gives a permission
--- error.
-EXEC inner_sp
-go
--- Then run the outer procedure. Now we get the data back, but
--- only what we are permitted to see.
-EXEC outer_sp
-go
--- Become ourselves again.
-REVERT
-go
--- Clean up.
-USE master
-DROP DATABASE certtest
-DROP LOGIN testuser
-
True, this could also be implemented by signing inner_sp with the certificate directly, and then make sure that users does not have EXECUTE permission on this procedure, for instance with an explicit DENY. Thanks to ownership signing, users would still be able to call the inner procedure if they come from the outer procedure. But this would require you to manage two security mechanisms to achieve your goal, whereas with counter-signing you only need one.
-
Here is a second example, inspired by a newsgroup question. A poster wanted users of an application to be able to start a certain job with sp_start_job. To be able to start a job owned by someone else, you need to be member of the fixed role SQLAgentOperatorRole in msdb. A start is to write a stored procedure that calls sp_start_job for this specific job, sign that procedure with a certificate, and then create a user from the certificate and make that user a member of SQLAgentOperatorRole.
-
We have learnt previously that when you call a system procedure, the certificate user remains in the user token, and thus you can take benefit of the permissions granted to the certificate user. But it turns out that the procedures in msdb are not system procedures in that sense. So we need to sign sp_start_job as well, but a normal signature is not a very good idea since this would permit users to start any job. Instead we counter-sign sp_start_job with the same certificate that we sign the wrapper procedure with, and we are almost there. I found by testing that sp_start_job calls two other procedures, sp_sqlagent_notify and sp_verify_job_identifiers, and they must be counter-signed as well.
-
I should hasten to add, that this solution is not unquestionable. Does Microsoft support signing of msdb procedures? If you install a service pack or a hotfix, you will need to reapply the signatures if Microsoft replaces the procedures with updated versions. They may also restructure the code, requiring you to counter-sign a different set of procedures.
-
Nevertheless, here is a complete script that demonstrates this technique. Note that to run it successfully, you need to have SQL Server Agent running, and you need to create a job called Testjob (which can do PRINT 'Hello world!' or whatever.) As always, please see the introductory
-note for general notes on the example scripts. For the SQL 2012 version, please see the file jobstart-2012.sql.
-
USE master
-go
--- Create a test login.
-CREATE LOGIN testuser WITH PASSWORD = 'CeRT=0=TeST'
-go
--- Create test database.
-CREATE DATABASE jobstarttest
-go
-USE msdb
--- Create certificate in msdb.
-CREATE CERTIFICATE jobstartcert
- ENCRYPTION BY PASSWORD = 'Strawberry Fields Forever'
- WITH SUBJECT = 'To permit starting the Testjob',
- START_DATE = '20020101', EXPIRY_DATE = '20200101'
-go
--- Create a user for the certificate.
-CREATE USER jobstartcert_user FROM CERTIFICATE jobstartcert
-go
--- Grant rights for the certificate login to run jobs.
-EXEC sp_addrolemember SQLAgentOperatorRole, jobstartcert_user
-go
--- Counter-sign sp_start_job and its subprocedures.
-ADD COUNTER SIGNATURE TO sp_start_job BY CERTIFICATE jobstartcert
- WITH PASSWORD = 'Strawberry Fields Forever'
-ADD COUNTER SIGNATURE TO sp_verify_job_identifiers BY CERTIFICATE jobstartcert
- WITH PASSWORD = 'Strawberry Fields Forever'
-ADD COUNTER SIGNATURE TO sp_sqlagent_notify BY CERTIFICATE jobstartcert
- WITH PASSWORD = 'Strawberry Fields Forever'
-go
--- Save the certificate to disk.
-BACKUP CERTIFICATE jobstartcert TO FILE = 'C:\temp\jobstartcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\jobstartcert.pvk' ,
- ENCRYPTION BY PASSWORD = 'Looking through a Glass Onion',
- DECRYPTION BY PASSWORD = 'Strawberry Fields Forever')
-go
--- Move to test database.
-USE jobstarttest
-go
--- Create a database user for the test login.
-CREATE USER testuser
-go
--- Create a procedure that starts a certain job.
-CREATE PROCEDURE start_this_job AS
- EXEC msdb..sp_start_job 'Testjob'
-go
--- Give test user right to execute the procedure.
-GRANT EXECUTE ON start_this_job TO testuser
-go
--- Import the certificate we created in msdb into the test database.
-CREATE CERTIFICATE jobstartcert FROM FILE = 'C:\temp\jobstartcert.cer'
-WITH PRIVATE KEY (FILE = 'C:\temp\jobstartcert.pvk',
- DECRYPTION BY PASSWORD = 'Looking through a Glass Onion',
- ENCRYPTION BY PASSWORD = 'Fixing a Hole')
-go
--- Delete the files.
-EXEC master..xp_cmdshell 'DEL C:\temp\jobstartcert.*', 'no_output'
-go
--- Sign the test procedures.
-ADD SIGNATURE TO start_this_job BY CERTIFICATE jobstartcert
- WITH PASSWORD = 'Fixing a Hole'
-go
--- Switch to the test user.
-EXECUTE AS LOGIN = 'testuser'
-go
--- Start the job, this succeeds.
-EXEC start_this_job
-go
--- Back to ourselves.
-REVERT
-go
--- Clean up.
-USE msdb
-go
-DROP COUNTER SIGNATURE FROM sp_sqlagent_notify
- BY CERTIFICATE jobstartcert
-DROP COUNTER SIGNATURE FROM sp_verify_job_identifiers
- BY CERTIFICATE jobstartcert
-DROP COUNTER SIGNATURE from sp_start_job
- BY CERTIFICATE jobstartcert
-DROP USER jobstartcert_user
-DROP CERTIFICATE jobstartcert
-go
-USE master
-go
-DROP DATABASE jobstarttest
-DROP LOGIN testuser
Instead of signing your procedure with certificate, you can use asymmetric keys.
- You create an asymmetric key in SQL Server
- with the command CREATE ASYMMETRIC KEY. The
- syntax is similar, but not identical, to CREATE
- CERTIFICATE. Please see Books Online for details.
-
From a cryptographic point of view, a certificate is an asymmetric key that has
- an issuer and an expiration date. Since it has an issuer, a certificate can
- participate in a chain of trust, which is important in for instance Service
- Broker dialogues. When it comes to signing stored procedures, I have (with
- quite some help from Razvan Socol) identified the following practical
- differences:
-
-
An asymmetric key never expires, which for procedure-signing purposes is a
- slight advantage.
-
You don't have to specify a subject for an asymmetric key.
-
You cannot export an asymmetric key from a database. If you want to sign
- procedures in two databases with the same key, you could create an
- asymmetric key outside SQL Server and
- import it into the databases. (This is possible.) I will need to add the
- disclaimer that I have not tested whether this actually works.
-
The fact that an asymmetric key cannot be exported, can on the other hand
- be seen as a security advantage, as someone cannot take your key into another
- database without your knowing.
-
The key for a certificate in SQL Server is
- always 1024 bits, where as for an asymmetric key you can choose between
- 512, 1024 and 2048 bits. It's possible that there is a performance gain by
- using a shorter key for signing your procedures. However, I have not
- tested this, nor have I had it confirmed, so it's pure speculation on my
- part.
-
-
All and all, I can't find any of these points convincing enough to mandate
- any over the other. I have preferred to talk only about certificates in the
- main part of this text to simplify the presentation.
To see which procedures that have been signed in a database, you can run
- this query. crypt_type_desc will tell you whether the procedure is signed with a certificate or an asymmetric key, and whether it's regularly signed or counter-signed.
-
SELECT Module = object_name(cp.major_id),
- [Cert/Key] = coalesce(c.name, a.name),
- cp.crypt_type_desc
-FROM sys.crypt_properties cp
-LEFT JOIN sys.certificates c ON c.thumbprint = cp.thumbprint
-LEFT JOIN sys.asymmetric_keys a ON a.thumbprint = cp.thumbprint
-
To find the users mapped to certificates, you can use this query:
-
SELECT certname = c.name, "username" = dp.name
-FROM sys.certificates c
-JOIN sys.database_principals dp ON c.sid = dp.sid
-
In the same vein, to find logins mapped to certificates:
-
SELECT certname = c.name, loginname = sp.name
-FROM master.sys.certificates c
-JOIN sys.server_principals sp ON c.sid = sp.sid
-
(Queries for users/logins mapped to asymmetric keys are similar.)
-
If you want to find all databases where a certificate has
- been used, you will need to query them all, using the thumbprint and/or the
- subject as the key.
Normally passwords should be strong and kept secret, but I have already
- hinted that for procedure signing this may not always be necessary.
-
Let's first consider the case when you use a certificate to grant permissions on database level. What if an unauthorised user learns the password for a certificate that is used to sign one or more procedures? To be able to use the password for some evil, he would first need to have the rights to create procedures in some schema. Furthermore, to use ADD SIGNATURE he needs CONTROL permission on the certificate. In practice you would only have that permission if you are member of the db_owner role, in which case you can create your own certificates and sign procedures with them all day long. The potential threat I can see is that another database owner could borrow your keyboard while you are away, and export a certificate that gives access to some sensitive table. He could import the certificate into his database and sign a procedure that reads this data. Of course, he could just as well create a new certificate when he uses your keyboard, but if he uses an existing certificate the data theft is more likely to go unnoticed.
-
All and all, for certificates used for procedure signing on database level, the password is not your biggest secret. Nevertheless, below I present an approach that permits throw away the password altogether so that no one knows it, not even you.
-
Let's now look at using certificates to grant server-level permissions. (I am not discussing cross-database access specifically, but what I say here can be applied to cross-database access as well.) There is the plain and simple case where everyone who has db_owner rights in the user databases also are members of sysadmin or have CONTROL SERVER. This scenario is no different from database permissions: there isn't really anyone to hide the password for. All examples presented this far have been written under this assumption, since I wanted to focus on the mechanism as such. But if there are users who have db_owner rights in a database without being sysadmin, it's a different story. Here you need to apply care.
-
Say that you are the DBA on a consolidated server and you are approached by an application admin, let's call her Anna DeMin who has db_owner rights in the database for her application. Anna has written the procedure reload_sp and wants you to sign it. To this end, you first review her code to ensure that she reads from the directory allotted for her application. You can then follow the steps outlined in the example script we saw previously.
-
In this situation, you need to make sure that Anna's does not learn the password for the certificate that you create in her database, since else she could change the procedure to read from somewhere else. You also need to hide the password for the private key, or delete it from disk directly so she cannot import it. Here is much of the beauty with certificates: as a server DBA, you can have full control over what permissions you have granted to user databases and to what code. To do that, you need to be able to manage your passwords.
-
Now, if you are a server DBA, I can hear you say that you don't have the time for all this, and you trust your application admins, so you will give Anna the cert and the password, and that's that. Of course, if you trust your colleagues that's great, but no matter whether you do or not, I have a script for you that permits you to automate most of this process. The one step I cannot automate for you is the code review.
-
The key points of the script.
-
-
There is one certificate for each procedure you sign. Every time you need to re-sign a procedure after a change, the script throws the old certificate away and creates a new one. All certificates have names that start with SIGN followed by the fully qualified name of the signed procedure. The subject also includes the permissions granted. Thus, you can easily review which permissions you have granted by querying sys.certificates in master. Logins have the same names as the certificates.
-
The password are GUIDs (with some extra characters to make sure that they pass the complexity rules enforced by Windows), and they are used only for the duration of the script and not saved.
-
When the procedure has been signed, the private key is removed from the certificate with ALTER CERTIFICATE cert REMOVE PRIVATE KEY. Once the private key has been removed, the certificate is only good for validation, but cannot be used to sign any new procedures.
-
The script does not grant database-level permissions. In the bulk-load example, we granted INSERT and ALTER permissions on the target table. The application admin needs to create a separate certificate for this. Keep in mind that a procedure can be signed by more than one certificate.
-
-
The script does have any support for counter-signatures, but if you need this, you could extend the script for this purpose.
-
The script consists of two parts. The first part is the setup part, where you need define three things: 1) The target database. 2) The stored procedure (or function or trigger) to sign. 3) The server-level permission(s) to grant. Everything below the line with ====== is the fixed part that you normally don't have to change. (Why is this a script and not a stored procedure? I wrote it as a script, because I figure that if you administer many servers, it is better to have as script on disk than installing a stored procedure on every server. Particularly, if you change the script by time, it's good to have a single copy of it.)
-
Here are all the steps the script takes. Note that if there is an error, the script aborts on the spot.
-
-
Validate and normalise database and procedure names. This is to make sure that the script always generates the same name for the certificate, even if you use different case or is inconsistent with specifying the schema.
-
Generate the name, subject and password for the certificate.
-
If a login with the certificate name exists, drop it.
-
Drop any old certificate in master.
-
If the procedure is signed with the old certificate, remove the signature.
-
As a safety precaution, remove any user created from the certificate in the target database.
-
Drop the certificate in the target database, if it exists there.
-
Create the new certificate in master.
-
Create a login from the certificate.
-
Grant permissions to the login.
-
Export the certificate.
-
Import the certificate in the target database.
-
If xp_cmdshell is enabled, delete the certificate files. (Else you will need to delete them manually; they are located in the same directory as the master database.)
-
Sign the procedure.
-
Remove the private key from the certificate, both in the target database and in master.
-
-
If you want to test the script, you can use the bulk-load example above with some modifications: remove the certificate handling in master, and change CREATE CERTIFICATE in the user database to create a local certificate. Keep in mind that you still need to sign the procedure to grant ALTER and INSERT permissions on the table. Once you have run the script below, you can run the EXECUTE AS part in the bulk-load script to verify that the test user have all permissions. You find such a prepared version of the bulk-load example in the file grantrights-test.sql, instructions are included.
-
-- This script takes it base in the master database.
-USE master
-go
-DECLARE @procname nvarchar(260),
- @database sysname,
- @perms nvarchar(4000),
- @sp_executesql nvarchar(150),
- @certname sysname,
- @username sysname,
- @subject nvarchar(4000),
- @pwd char(39),
- @sql nvarchar(MAX),
- @filename nvarchar(1024),
- @cmd varchar(1024),
- @debug bit
-
--- Set up parameters: the procedure to sign and the database it belongs to.
-SELECT @procname = 'reload_sp',
- @database = 'bulkcerttest'
-
--- The permissions to grant through the certificate. Set NULL if you only
--- want to remove current signature.
-SELECT @perms = 'ADMINISTER BULK OPERATIONS'
-
--- Run with debug or not?
-SELECT @debug = 1
-
---============================ END OF SETUP ==========================
-
--- A big TRY-CATCH block around everything to abort on first error.
-BEGIN TRY
-
--- First verify that the database exists.
-IF db_id(@database) IS NULL
- RAISERROR('Database %s does not exist', 16, 1, @database)
-
--- Make sure that database name is quoted and appears exactly as in sys.databases.
-SELECT @database = quotename(name) FROM sys.databases WHERE name = @database
-
--- We will call sp_executesql a number of times in the target database.
-SELECT @sp_executesql = @database + '.sys.sp_executesql'
-
--- Next we verify that the procedure exists and make sure that
--- we have a normalised quoted name. We need to run a query in the
--- target database.
-SELECT @sql =
- 'SELECT @procname = MIN(quotename(s.name) + ''.'' + quotename(o.name))
- FROM sys.objects o
- JOIN sys.schemas s ON o.schema_id = s.schema_id
- WHERE o.object_id = object_id(@procname)'
-IF @debug = 1 PRINT @sql
-EXEC @sp_executesql @sql, N'@procname nvarchar(260) OUTPUT', @procname OUTPUT
-
-IF @procname IS NULL
- RAISERROR('No procedure with the given name in database %s', 16, 1, @database)
-
--- Construct name, subject and password for the certificate.
-SELECT @certname = 'SIGN ' + @database + '.' + @procname,
- @subject = 'Signing ' + @database + '.' + @procname + ' for ' + @perms,
- @pwd = convert(char(36), newid()) + 'Aa0'
-
--- If a login exists for the cerficiate, we drop it
-IF EXISTS (SELECT *
- FROM sys.server_principals
- WHERE name = @certname
- AND type = 'C')
-BEGIN
- SELECT @sql = 'DROP LOGIN ' + quotename(@certname)
- IF @debug = 1 PRINT @sql
- EXEC (@sql)
-END
-
--- And drop the certificate itself.
-IF EXISTS (SELECT * FROM sys.certificates WHERE name = @certname)
-BEGIN
- SELECT @sql = 'DROP CERTIFICATE ' + quotename(@certname)
- IF @debug = 1 PRINT @sql
- EXEC(@sql)
-END
-
--- In the target database, we must remove the signature from the procedure,
--- so that we can drop the certificate.
-SELECT @sql = '
- IF EXISTS (SELECT *
- FROM sys.crypt_properties cp
- JOIN sys.certificates c ON cp.thumbprint = c.thumbprint
- WHERE cp.major_id = object_id(@procname)
- AND c.name = @certname)
- DROP SIGNATURE FROM ' + @procname + ' BY CERTIFICATE ' + quotename(@certname)
-IF @debug = 1 PRINT @sql
-EXEC @sp_executesql @sql, N'@certname sysname, @procname nvarchar(260)',
- @certname, @procname
-
--- No user should have been created from the cert, but if so, we drop it.
--- Since this may been performed by some else, we cannot trust the username
--- to be the same as the certificate name.
-SELECT @sql = '
- SELECT @username = NULL
- SELECT @username = dp.name
- FROM sys.database_principals dp
- JOIN sys.certificates c ON dp.sid = c.sid
- WHERE c.name = @certname'
-IF @debug = 1 PRINT @sql
-EXEC @sp_executesql @sql, N'@certname sysname, @username sysname OUTPUT',
- @certname, @username OUTPUT
-
-IF @username IS NOT NULL
-BEGIN
- SELECT @sql = 'DROP USER ' + quotename(@username)
- IF @debug = 1 PRINT @sql
- EXEC @sp_executesql @sql
-END
-
--- And here goes the old cert.
-SELECT @sql = '
- IF EXISTS (SELECT * FROM sys.certificates WHERE name = @certname)
- DROP CERTIFICATE ' + quotename(@certname)
-IF @debug = 1 PRINT @sql
-EXEC @sp_executesql @sql, N'@certname sysname', @certname
-
-IF @perms IS NULL
- PRINT 'No new permissions set, cleanup completed.'
-ELSE
-BEGIN
- -- Now we start to (re)create things. First create the certificate in master.
- SELECT @sql = 'CREATE CERTIFICATE ' + quotename(@certname) + '
- ENCRYPTION BY PASSWORD = ''' + @pwd + '''
- WITH SUBJECT = ''' + @subject + ''',
- START_DATE = ''20020101'', EXPIRY_DATE = ''20200101'''
- IF @debug = 1 PRINT @sql
- EXEC(@sql)
-
- -- And the login for the certificate.
- SELECT @sql = 'CREATE LOGIN ' + quotename(@certname) +
- ' FROM CERTIFICATE ' + quotename(@certname)
- IF @debug = 1 PRINT @sql
- EXEC(@sql)
-
- -- Grant the permissions.
- SELECT @sql = 'GRANT ' + @perms + ' TO ' + quotename(@certname)
- IF @debug = 1 PRINT @sql
- EXEC(@sql)
-
- -- Determine a path to where we can write the files for the certs.
- SELECT @filename = substring(physical_name, 1, len(physical_name) -
- charindex('\', reverse(physical_name)) + 1) +
- convert(char(36), newid())
- FROM sys.database_files
- WHERE file_id = 1
-
- -- And backup up the certificate to disk.
- SELECT @sql = '
- BACKUP CERTIFICATE ' + quotename(@certname) + '
- TO FILE = ''' + @filename + '.cer' + '''
- WITH PRIVATE KEY (FILE = ''' + @filename + '.pvk' + ''',
- ENCRYPTION BY PASSWORD = ''' + @pwd + ''',
- DECRYPTION BY PASSWORD = ''' + @pwd + ''')'
- IF @debug = 1 PRINT @sql
- EXEC(@sql)
-
- -- And then restore in the target database.
- SELECT @sql = '
- CREATE CERTIFICATE ' + quotename(@certname) + '
- FROM FILE = ''' + @filename + '.cer' + '''
- WITH PRIVATE KEY (FILE = ''' + @filename + '.pvk' + ''',
- ENCRYPTION BY PASSWORD = ''' + @pwd + ''',
- DECRYPTION BY PASSWORD = ''' + @pwd + ''')'
- IF @debug = 1 PRINT @sql
- EXEC @sp_executesql @sql
-
- -- If possible, delete the certs from disk.
- SELECT @cmd = 'DEL "' + @filename + '.*"'
- IF (SELECT value_in_use
- FROM sys.configurations
- WHERE name = 'xp_cmdshell') = 1
- BEGIN
- IF @debug = 1 PRINT @cmd
- EXEC xp_cmdshell @cmd
- END
- ELSE
- BEGIN
- PRINT '******** xp_cmdshell disabled, you need run this command manually'
- PRINT @cmd
- END
-
- -- We can now sign the procedure.
- SELECT @sql = 'ADD SIGNATURE TO ' + @procname + ' BY CERTIFICATE ' +
- quotename(@certname) + ' WITH PASSWORD = ''' + @pwd + ''''
- IF @debug = 1 PRINT @sql
- EXEC @sp_executesql @sql
-
- -- Finally, drop the private key of the cert from the databases.
- SELECT @sql = 'ALTER CERTIFICATE ' + quotename(@certname) + ' REMOVE PRIVATE KEY'
- IF @debug = 1 PRINT @sql
- EXEC (@sql)
-
- SELECT @sql = 'ALTER CERTIFICATE ' + quotename(@certname) + ' REMOVE PRIVATE KEY'
- IF @debug = 1 PRINT @sql
- EXEC @sp_executesql @sql
-END
-END TRY
-BEGIN CATCH
- DECLARE @msg nvarchar(4000)
- SELECT @msg = error_message()
- RAISERROR(@msg, 16, 1)
-END CATCH
-
Before we move on, I like to point out a few virtues for dynamic SQL, even if they are not directly related to the topic of this article:
-
-
Before all execution of dynamic SQL, I have a debug PRINT, so I can inspect the statement in case of an error.
-
To run dynamic SQL in the target database, I make use of that you can run a system procedure in a different database by using three-part notation, and that EXEC accepts a variable for the procedure name.
-
I consistently use quotename() to avoid syntax errors if there is a special character in an object name. For the database and procedure I apply the brackets once for all, whereas for the certificate name I do it every time I need to. (Since I also use the cert name in queries.)
-
I fail on one point though: if the database or procedure name would include a a single quote, there would be a syntax error when creating the certificate because of the subject.
-
-
There is a version for SQL 2012 of this script in the file grantrights-2012.sql. It is worth dwelling on the piece where the certificate is copied for a second:
Since the script is a single batch, there is no need for temp tables. Instead, I copy the certificate in a single group of statements. The above three statements replaces no less than four groups of statements in the script above. Observe also that in the call to cert_id, I apply qoutename on @certname. This is required, since the name of the certificates includes brackets.
We will now turn to the third method in SQL Server to provide
- permission through stored procedures: the EXECUTE AS clause. On
- the surface, EXECUTE AS is much simpler to use than certificates, but as it
- works through impersonation, there are side effects which may be
- unacceptable. We will also see that for granting server-level permissions, EXECUTE AS is inappropriate in environments where there are users who have full permissions on database level, but not on server-level.
EXECUTE AS is two things. It is a clause that you can add to a stored
- procedure or any other SQL module, and that is
- what you can use to grant
- permissions to non-privileged users. There is also a statement
- EXECUTE AS, and we will look at the statement before we turn to the clause.
-
The statement EXECUTE AS permits you to switch your execution context to
- impersonate another login or user. Here are
- examples of the two possibilities:
-
EXECUTE AS LOGIN = 'somelogin'
-EXECUTE AS USER = 'someuser'
-
Once you want to become your original self,
- you use the REVERT statement. (If you have changed databases, you will first
- need to return to the database where you issued the EXECUTE AS statement.)
- If the EXECUTE AS statement is executed in a lower-level scope – that is, in a
- stored procedure or a batch of dynamic SQL – there is an implicit REVERT when
- the scope exits. Thus if you run:
-
EXEC('EXECUTE AS LOGIN = ''frits''; SELECT SYSTEM_USER')
-SELECT SYSTEM_USER
-
the second SELECT will not return frits, but your own login name.
-
To perform EXECUTE AS you need IMPERSONATE rights on the login/user
- in question. (This permission is implied on all logins if you have sysadmin
- rights
- and on all users in a database where you have db_owner rights.)
-
As an extra thrill, you can stack EXECUTE AS,
- so you could first become login1, then user2 etc. Each REVERT would take you
- back to the previous context. This would require each login/user to have
- impersonation rights on the next login/user in the chain.
-
There are two apparent uses for the EXECUTE AS statement:
-
-
A privileged user can use EXECUTE AS to
- test queries and procedures as another user, without having to open a new
- query window. This can be very handy, and all example scripts in this
- article use EXECUTE AS for this purpose.
-
To implement "application proxies". In this case, the application authenticates
- the users outside the server. The
- application connects to the server with a proxy login that has
- IMPERSONATE
- rights on the real users and then issues EXECUTE AS
- to run as them. When you create a user in SQL 2005, you can specify the
- clause WITHOUT LOGIN to create a user that exists in the database only. Thus, you can implement a
- solution where the real users do
- not need any sort of direct access to SQL server.
-
-
In the latter case, the application should add the clause WITH NO REVERT or
- WITH COOKIE to the EXECUTE AS statement. Else a
- malicious user could inject a REVERT
- statement and gain the rights of the proxy login. (As this goes a little beyond the
- scope for this article, I refer you to Books Online for further details.)
-
If you use EXECUTE AS LOGIN this is exactly the same as if you had logged into SQL Server as that user directly. You will have the permissions of that login, you can access the databases that login can access and so on. I have not been able to detect any difference at all, save for the function original_login() that I will return to.
-
If you use EXECUTE AS USER it is a little different. As long as you only run commands within the database, it is just as if you had logged in as that user. But if you try to access another user database you will get an error message, and if you try to perform some server-level action like sp_who you will only get back a minimum of data, even if this user maps to a login in the sysadmin role. When you impersonate a database user you are by default sandboxed into that database. We will look more into this later. For now, I say that if you use EXECUTE AS to test permissions, you should in most cases use EXECUTE AS LOGIN. The exception is when you are testing access rights for users that are purposely created WITHOUT LOGIN.
-
I should also mention that there is an impersonation shortcut for the
-EXECUTE() command, so that you can say:
-
EXECUTE(@somesql) AS LOGIN = 'somelogin'
-EXECUTE(@somesql) AS USER = 'someuser'
-
The purpose of this is the same as for the EXECUTE AS
- statement; for a high-privileged user to impersonate a low-privileged
- user.
-
Before I move on, I should mention that there is an older command SETUSER which also can be used for impersonation. The semantics for SETUSER are less clear than for EXECUTE AS, and SETUSER is deprecated. If you are still using SETUSER, there is all reason to change to EXECUTE AS.
-
Note: When impersonating a Windows user, it's a common mistake to put the name in brackets, but this does not work and results in somewhat cryptic error message. That is, it should be EXECUTE AS 'Domain\User', not EXECUTE AS '[Domain\User]'.
So far the statement EXECUTE AS. We will now look at the clause WITH EXECUTE AS you can add to your stored procedure. As for certificates, we will first look at using the EXECUTE AS clause to
- give users rights for actions within the database, and as with certificates
-we will use dynamic SQL as our example.
-
To repeat, these were the presumptions for the dynamic SQL example:
-
CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL)
-go
-CREATE PROCEDURE example_sp AS
- EXEC ('SELECT a, b FROM testtbl')
-go
-GRANT EXECUTE ON example_sp TO public
-go
-
As we saw earlier, ownership chaining does not
- work here. To use EXECUTE AS to make it possible for users to run
- example_sp
- without SELECT permission on testtbl, the steps to take are:
-
-
Create a proxy user.
-
Grant the proxy user the necessary permissions.
-
Add the EXECUTE AS clause to the stored procedure.
-
-
In code, it looks like this:
-
-- Create a proxy user.
-CREATE USER exampleproxy WITHOUT LOGIN
--- Give it permissions on the table.
-GRANT SELECT ON testtbl TO exampleproxy
-go
--- Add EXECUTE AS to the procedure.
-CREATE PROCEDURE example_sp WITH EXECUTE AS 'exampleproxy' AS
-EXEC ('SELECT a, b FROM testtbl')
-go
-
Since the sole purpose for this user is to carry permissions, we create the user
- WITHOUT LOGIN. As for what rights to grant to
- the proxy user, the discussion in the section Granting
- Rights to the Certificate User applies here as well: only grant the
- permissions needed.
-
The effect of the EXECUTE AS clause is the same as of the EXECUTE AS
- USER statement: that is, impersonation. As with certificates, the
- user gets the rights of exampleproxy, but there are two important
- differences: 1) It's not that the rights of the proxy user are added to your rights, but you are John
- Malkovich. 2) If there is a call to an inner stored procedure or
- a trigger fires, you are not reverted back to your original self;
- you continue to execute in the context of the proxy user. It is not until you exit the
- stored procedure with the EXECUTE AS clause that you return to your true self.
-
This can have drastic and far-reaching consequences, which we shall look into
- in a moment. First though, a complete script that shows the use EXECUTE AS
- to grant permissions for dynamic SQL.
- (Again, please refer to the introductory note
- about the example scripts in this article):
-
USE master
-go
--- Create a test login.
-CREATE LOGIN testuser WITH PASSWORD = 'ExECaS=0=TeST'
-go
--- Create the database to run the test in.
-CREATE DATABASE execastest
-go
-USE execastest
-go
--- Create the test user.
-CREATE USER testuser
-go
--- Create the test table.
-CREATE TABLE testtbl (a int NOT NULL,
- b int NOT NULL)
-INSERT testtbl (a, b) VALUES (47, 11)
-go
--- Create a proxy user and give it rights to access the test table.
-CREATE USER exampleproxy WITHOUT LOGIN
-GRANT SELECT ON testtbl TO exampleproxy
-go
--- Create two test stored procedures, one with EXECUTE AS and one
--- without, and grant permission.
-CREATE PROCEDURE noexecas_sp AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- EXEC ('SELECT a, b FROM testtbl')
-go
-CREATE PROCEDURE example_sp WITH EXECUTE AS 'exampleproxy' AS
- SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- EXEC ('SELECT a, b FROM testtbl')
- EXEC noexecas_sp
-go
-GRANT EXECUTE ON example_sp TO public
-GRANT EXECUTE ON noexecas_sp TO public
-go
--- Switch to the test user.
-EXECUTE AS LOGIN = 'testuser'
-go
--- First run the procedure without EXECUTE AS. This gives a permission
--- error.
-EXEC noexecas_sp
-go
--- Then the signed procedure with EXECUTE AS. Now get the data back.
-EXEC example_sp
-go
--- Become ourselves again.
-REVERT
-go
--- Clean up
-USE master
-DROP DATABASE execastest
-DROP LOGIN testuser
-
This is similar to the script for certificates, but you will notice that the
- outcome is different. When the test user runs noexecas_sp directly, he gets a
- permission error as expected. But when example_sp calls noexecas_sp,
- there is no permission error, as was the case when we used a certificate. And when we
- look at the output from sys.user_token we see why. When noexecas_sp
- is called directly, we get:
-
SYSTEM_USER USER name type usage
-------------- ------------ ---------- --------- --------------
-testuser testuser testuser SQL USER GRANT OR DENY
-testuser testuser public ROLE GRANT OR DENY
-
-
But when noexecas_sp is called from example_sp, we see this:
-
SYSTEM_USER USER name type usage
---------------- ----------- ----------- --------- --------------
-S-1-9-3-2024... exampleproxy exampleproxy SQL USER GRANT OR DENY
-S-1-9-3-2024... exampleproxy public ROLE GRANT OR DENY
-
-
As you see, there is no trace of testuser. (The data in the column
- for SYSTEM_USER is due to that
- exampleproxy
- was created WITHOUT LOGIN. In lieu of a login name, SYSTEM_USER returns the SID.)
-
With certificates, the permissions of the certificate user are added to the rights of the current user. This means that if there is some basic permission granted to everyone, say SELECT permission in a certain schema, you don't have to grant that permission to the certificate user. For a proxy user for EXECUTE AS you must grant all permissions needed. But this cuts both ways. Recall that certificates do not help when users have been explicitly denied permission, since DENY takes precedence over GRANT. This limitation does not exist with EXECUTE AS, since it's only the permissions of the proxy user that count.
SQL Server has a couple of functions that returns the
- current login or user: SYSTEM_USER, SESSION_USER, USER, user_name(),
- suser_sname() and a few more. All these are affected by the EXECUTE AS
- clause: instead of returning the current login/user, they return the login or user of the identity in the EXECUTE AS
- clause.
-
Now, where do you use these functions? I can think of two of very typical
- cases.
-
-
In the WHERE clause of a view or stored procedure for row-level security.
-
To fill in the values of auditing columns, through a DEFAULT constraint
- or a trigger or directly in a stored procedure.
-
-
When you use EXECUTE AS both these schemes break. Code that implements
- row-level security will return no data, or even worse, data that the
- real user does not have permission to see. Auditing will be useless, as
- all updates will appear to come from the same user.
-
Had the effect been
- constrained only to the very procedure with the EXECUTE AS clause, it could
- have been somewhat manageable. But since the impersonation lingers when
- other SQL modules are invoked, for instance triggers, this means that code
- that are not aware of the EXECUTE AS clause, will cease to work. Now, how is
- that for backwards compatibility?
-
Another side effect concerns existing code. Say that a procedure with
- EXECUTE AS calls an existing stored procedure old_sp, and this procedure
- makes some assumptions of what rights the current user (= the user behind the
- keyboard) has. For instance, it could use the built-in functions is_member() or
- permissions() to determine whether a user is entitled to see some
- data or whether some special action should be taken. When called from a procedure with EXECUTE AS,
-old_sp will draw the wrong conclusions.
-
There are also concerns for the DBA who likes to monitor his system with help of Profiler and various DMVs, that I will look into separately a little later.
-
What can you do to mitigate these consequences? We will look at four
- different possibilities: 1) EXECUTE AS CALLER, 2) original_login(), 3) SET
- CONTEXT_INFO and 4) DDL triggers. You
- will find none of these measures address the issues very satisfactorily. The first
- only solves a minor part of the problem and the next two require you to
- rewrite existing code. The last method performs
- a solid job – by outlawing the feature altogether.
-
Before looking into the methods above, we need to look at the EXECUTE AS clause in
- full, to see its full powers – or I am tempted to say its full horrors.
Rather than specifying an explicit user in the EXECUTE AS clause, you can specify any
- of the keywords CALLER, OWNER and SELF.
-
CALLER is innocent. This means that the procedure should execute in the
- context of the calling user. That is, how stored procedures how normally work, so EXECUTE AS CALLER is merely a way of explicitly expressing
- the default.
-
EXECUTE AS SELF is short for EXECUTE AS 'yourusername'. That is, if you
- create a procedure and add WITH EXECUTE AS SELF to it, anyone who runs the
- procedure will execute with your permissions. (And anything they update, you
- will be held accountable for.)
-
EXECUTE AS OWNER, finally, means that the procedure executes in the context
- of the procedure owner. As I discussed in the
- beginning of the article this is normally the schema owner. Thus, if the procedure is created in the dbo
- schema, or any other schema owned by the database owner, the procedure will
- execute with permissions to do anything in the database!
-
Here are some serious implications. If all you care about is
- simplicity, then you can ignore all about creating proxy users and granting them
- permissions. All you need to do is:
-
CREATE PROCEDURE example_sp WITH EXECUTE AS OWNER AS
- --SELECT SYSTEM_USER, USER, name, type, usage FROM sys.user_token
- EXEC ('SELECT a, b FROM testtbl')
-go
-
And no more permissions problems!
-
But remember that philosophy about multiple lines
- of defence in the beginning of
- this text. As we discussed for certificates, by using a dedicated proxy user you add one more line of defence,
- so if your procedure would be open for
- SQL injection, an exploiter can only do a limited amount of harm.
- On the other hand, if you use EXECUTE AS OWNER, the database will be wide open to an
- intruder. (Access outside the database is another matter, that we will come
- back to.) Again, keep in mind that even if your use of dynamic SQL is tight
- and free from injection vulnerabilities, someone who modifies the procedure
- tomorrow may make a blunder and change that.
-
Note here also a possible fatal consequence for a row-level security scheme.
- It is not unlikely that such scheme is set up so that dbo
- is permitted see all rows. This means that casual use of EXECUTE AS can result int users having access to data they don't have permission
- to see.
-
If you are the DBA (or at least the database owner) and are fortunate to have
- full control of all code that is added to the database (because you write all
- the code, or at least review all of it), it is only up to you. But if you are
- responsible for a larger application with many stored procedures, contributed
- by many developers, be afraid, be very afraid. One day you find that your auditing
- records say that a lot of data was changed by dbo, instead of the
- actual user. Some developer ran into an urgent problem with his dynamic SQL,
- posted a question on the forums and quickly learnt the four magic words WITH EXECUTE AS OWNER.
- His problems were solved, but yours had only just begun.
-
We will now look into what methods you can use to reduce the impact
- of the EXECUTE AS clause.
It's possible to do this in a procedure with an EXECUTE AS clause:
-
CREATE PROCEDURE some_sp WITH EXECUTE AS 'proxyuser' AS
- DECLARE @realuser sysname
- EXECUTE AS CALLER
- SELECT @realuser = SYSTEM_USER
- REVERT
- -- Do whatever requires extra privileges
-go
-
That is, with the EXECUTE AS CALLER statement, you revert
- to the context of the
- caller, and you can find out who actually
- called the procedure. Provided, that is, there were no impersonation on upper
- levels.
-
- If the procedure is a longer one, and there is only one action that needs
- special privileges, for instance dynamic SQL, you can even do:
-
CREATE PROCEDURE someother_sp WITH EXECUTE AS 'proxyuser' AS
- DECLARE ...
- EXECUTE AS CALLER
- ...
- -- Here we need the powers of the proxy user
- REVERT
- EXEC sp_executesql @sql, ... -- Or something else which needs privs.
- EXECUTE AS CALLER
- -- Rest of the procedure
-
While this certainly is recommendable from the philosophy of not using more
- permissions than necessary, it takes more effort than just adding the EXECUTE
- AS clause in the beginning and run with it. It would be more reasonable to
- write:
-
CREATE PROCEDURE someother_sp AS
- DECLARE ...
- ...
- -- Here we need the powers of the proxy user
- EXECUTE AS USER = 'proxyuser'
- EXEC sp_executesql @sql, ... -- Or something else which needs privs.
- REVERT
- -- Rest of the procedure
-
Alas, this does not work An unprivileged user will get a permission error,
- as the
- rights to impersonate someone can not be given to a user through the body of
- a stored procedure, only the header. (Of course, by signing the procedure with a certificate you can
- grant that permission, but if you use certificates, you don't really need
- EXECUTE AS at all.)
-
There are many situations where EXECUTE AS CALLER does not help. If that
- dynamic SQL accesses a view with row-level security, it does not help to save
- the real user's name into a variable, as the call to SYSTEM_USER (or
- similar) is in the text of the view itself. The same applies if the dynamic SQL
- performs an update, and the auditing is based on a trigger or a default
- constraint. Furthermore, if a procedure sp1 with
- an EXECUTE AS clause calls sp2, sp2 cannot use
- EXECUTE AS CALLER to set its context to the
- caller of sp1, as the caller to sp2 is the user in the
- EXECUTE AS clause in sp1.
-
On top of that, EXECUTE AS CALLER requires a conscious action
- from the
- programmer. Someone who just heard about EXECUTE AS OWNER on the forums
- is not going to get through that extra hoop.
While SYSTEM_USER, USER, user_name() etc
- all are affected by EXECUTE AS,
- there is one function that returns the login that originally
- connected to SQL Server: original_login().
-
Thus, anywhere you have schemes for row-level security or code for auditing it's better to use original_login() rather than
-SYSTEM_USER to be protected against the risk that EXECUTE AS leads to incorrect auditing or users getting access to data they are not entitled to see. At least as long as you
- are not using "application proxies",
- something I will return to in
-the next section.
-
If your row-level security and auditing schemes are based on the username in the database rather than the server-level login name, you are likely
- to ask for an original_user()
- only to find that there isn't such a function. In this case you will have to rework your
-scheme to use logins instead.
-
Why isn't there any original_user()? Actually, there is a good reason.
- Things get complicated with cross-database access. Say that a
- procedure sp1 in database A has an EXECUTE AS clause for
- user1, and sp1 invokes sp2 in database B to which
- user1 has access. sp1 is invoked by user2 that maps to
- login2, but login2 has no access to database B. Say now
- that sp2 calls this fictive original_user(), what should it return?
- user2 is flat wrong in the given context. NULL? Are your auditing columns
- nullable? Mine aren't.
-
If you are really paranoid and want to make sure that your procedure are not
- run with elevated privileges because the calling procedure has an EXECUTE AS
- clause, you could add this test to the beginning of your procedure:
-
IF SYSTEM_USER <> original_login()
-BEGIN
- RAISERROR('This procedure does not support impersonated users', 16, 1)
- RETURN 1
-END
original_login() works as long as the users themselves log into SQL Server
- with their personal login. But consider the case of an "application proxy". That is, the application authenticates users outside SQL Server, and the proxy login issues EXECUTE AS (or SETUSER for a legacy application) on the behalf of the
- actual user. Guess what original_login() will return in this case? That's
- right, the name for the application's proxy login. Not a very useful
- piece of information. While SQL 2005 was still in beta, I submitted a Connect item that asked for a way to retrieve the full impersonation stack to address this situation. It hasn't happened yet.
-
One possible way out here is the command SET CONTEXT_INFO and the
- context_info() function. SET CONTEXT_INFO was added already in SQL 2000, but
- it may not be widely known. It sets a binary value of 128 bytes that you can retrieve with the
- context_info() function.
-
Here is how you would use it. When connecting for a user, the application
- would do something like:
A table with an auditing column could look like this:
-
CREATE TABLE audited
- (somedata int NOT NULL,
- moduser sysname NOT NULL
- CONSTRAINT def_moduser DEFAULT
- coalesce(convert(nvarchar(64),
- substring(context_info(), 1, charindex(0x0000, context_info()) - 1)),
- original_login())
-)
-go
-
The expression to get data from context_info() is
-surprisingly complex; this is because context_info() returns
-binary(128), so we need to strip the trailing zeroes.
-Despite the name, charindex() works on binary data too. We
-must specify 0x0000 to find where the zeroes start, since with nvarchar,
-every second byte is often 0 for data using the Latin alphabet.
-
On top of that, we use coalesce() with original_login() as a second argument to have a
- fallback alternative, in case SET CONTEXT_INFO never was issued, for instance
- because the action was performed by an administrator who logged in directly to SQL
- Server from SQL Server Management Studio.
-
I feel obliged to point out that the solution with SET CONTEXT_INFO is not entirely
- secure.
- If there are SQL injection holes in
- the application, a malicious user could inject a SET CONTEXT_INFO command to
- hide his identity. This could permit him to do actions anonymously, and
- to access data from row-level security schemes that he should not see.
-
One more thing to add about SET CONTEXT_INFO: normally the effect of a SET
- statement issued in a stored procedure is reverted when the procedure exits.
-SET CONTEXT_INFO is an exception to this rule, and the effect of SET CONTEXT_INFO is always global to the connection.
If you are a DBA who is not in the position that you can review all code that
- is deployed into the database (or a lead programmer/database architect who
- cannot review all code that is checked into the version-control system) and
- you are scared of the damage that EXECUTE AS could cause to your application, you may ask: is there a
- way to stop all this? After all, there is no need to use EXECUTE AS
- to grant permissions, when you can use certificates without side
- effects.
-
Microsoft touts SQL Server as "secure by default", so you
- would expect a knob to control whether the EXECUTE AS clause is available, and you would
- expect that knob to be in the OFF position by default. Not so. There is no
- knob at all. But you can implement your own.
-
If you are the permissive sort of person, you may be content to every once in
- a while run:
-
SELECT module = object_name(object_id),
- execute_as = CASE m.execute_as_principal_id
- WHEN -2 THEN 'OWNER'
- ELSE d.name
- END
-FROM sys.sql_modules m
-LEFT JOIN sys.database_principals d
- ON m.execute_as_principal_id = d.principal_id
-WHERE m.execute_as_principal_id IS NOT NULL
-
This displays which modules have been decorated with the EXECUTE AS
- clause and with
- which user name.
-
If you are the more evil sort of person, then you can put this DDL
- trigger in place:
-- Get the schema and name for the object created/altered.
-SELECT @eventdata = eventdata()
-SELECT @schema = C.value(N'SchemaName[1]', 'nvarchar(128)'),
- @object_name = C.value(N'ObjectName[1]', 'nvarchar(128)')
-FROM @eventdata.nodes('/EVENT_INSTANCE') AS E(C)
-
-- Find its object id.
-SELECT @object_id = o.object_id
-FROM sys.objects o
-JOIN sys.schemas s ON o.schema_id = s.schema_id
-WHERE o.name = @object_name
- AND s.name = @schema
-
-- If we don't find it, it may be because the creator does not have
--- have permission on the object. (Yes, this can happen.)
-IF @object_id IS NULL
-BEGIN
- SELECT @msg = 'Could not retrieve object id for [%s].[%s], operation aborted'
- RAISERROR(@msg, 16, 1, @schema, @object_name)
- ROLLBACK TRANSACTION
- RETURN
-END
-
-- Finally check that the catalog views whether the module has any
--- EXECUTE AS clause.
-IF EXISTS (SELECT *
- FROM sys.sql_modules
- WHERE object_id = @object_id
- AND execute_as_principal_id IS NOT NULL)
-BEGIN
- ROLLBACK TRANSACTION
- SELECT @msg = 'Module [%s].[%s] has an EXECUTE AS clause. ' +
- 'This is not permitted in this database.'
- RAISERROR (@msg, 16, 1, @schema, @object_name)
- RETURN
-END
-go
-
The trigger first retrieves the schema and object names for the created
- object from the eventdata() function. This function returns an XML
- document, and we use XQuery to extract the data we need. Next we translate
- the object name to an id. We check that we are actually able to do this. (Since the owner of a procedure is the schema owner, it is possible to have a user that is permitted to create
- a procedure without being permitted to see the definition of it.) Finally there is the check that the
- module does not have any EXECUTE AS.
-
Variations of this theme include checking execute_as_principal_id for
- -2 (OWNER) and power users, or permit
- EXECUTE AS if the proxy user does not map to
- a login. (That is, a user created WITHOUT LOGIN.)
-
Would anyone be this evil? Well, if you have an auditing scheme that relies
- on SYSTEM_USER or similar function, and you don't want to rewrite your code
- right now, do you have any choice?
-
Note: If you are on SQL 2008, you may ask if this could be implemented with Policy-Based Management. It probably can, but I would not recommend that use you the On Prevent option in PBM, as PBM may silently decide to turn off checking if it deems your conditions to be too complex. (See this Connect bug for details.) Possibly you could use PBM to monitor the use of EXECUTE AS.
-
EXECUTE AS and Monitoring
-
As I mentioned, EXECUTE AS also has implications for the DBA who likes to monitor his system. Say that there is a procedure which has the heading:
-
CREATE PROCEDURE some_sp WITH EXECUTE AS 'proxyuser' AS
-
Say that the user Nisse runs this procedure, and there is a trace with captures the statements in this procedure. What will the column LoginName display? That depends. If proxyuser was created from a login with the same name, the value in LoginName will be proxyuser. If proxyuser was created WITHOUT LOGIN, the value will be a SID, that is, a value starts like S-1-9-3-913356... But in no case the name Nisse will be displayed.
-
This has some ugly ramifications. If you commonly apply filters on LoginName, EXECUTE AS can cause users to fall off the radar for the duration of the procedure with the clause. If you rely on tracing for auditing, EXECUTE AS can also result in the wrong person being credited/blamed for a certain action.
-
LoginName is not the only column that is affected, but also the column NTUserName, although this column does not always change. It changes if the impersonated user is a Windows user or a user created WITHOUT LOGIN, but not if the user is created from an SQL Server login. At least, that is what my quick testing indicates.
-
This also extends do DMVs like sys.dm_exec_sessions. The columns login_name and nt_user_name behaves like LoginName and NTUserName in Profiler and reflect the name of the impersonated user. The same is true for sysprocesses etc.
-
Thankfully, there are alternatives. In Profiler you can use the column SessionLoginName. The value in this column corresponds to the value returned by the function original_login() and thus it will never change during the lifetime of the connection. The column is not visible by default, but you have to check the box Show all columns to find it. (Why SessionLoginName is not visible by default, while LoginName is? As I recall, SessionLoginName was added in SP2 of SQL 2005, and I guess Microsoft did not want to meddle with the existing templates.) You could define your own template, so that you don't have to remember to add it every time.
-
Likewise, in sys.dm_exec_sessions there is the column original_login_name, which is one of the columns at end of the table; it was added in SP2 of SQL 2005. In sysprocesses, there is no value corresponding to original_login(), but sysprocesses is a compatibility view, which Microsoft prefers us not to use.
So far we have looked at using EXECUTE AS to give permissions within a single database. What happens if you try to access other databases or perform an action that requires a server-level permission?
-
Answer: you run into a roadblock. Consider this procedure created in some
-other database than AdventureWorks:
-
CREATE PROCEDURE crossdb WITH EXECUTE AS OWNER AS
- SELECT COUNT(*) FROM AdventureWorks.Person.Address
-go
-EXEC crossdb
-
If you run this logged in as sa you get:
-
Server: Msg 916, Level 14, State 1, Procedure crossdb, Line 2
-The server principal "sa" is not able to access the database "AdventureWorks"
-under the current security context.
-
Since sa usually can access everything, this comes as quite unexpected. But
- this is because there is a safeguard here. The EXECUTE AS clause always impersonates a database user, never a server login. And when you impersonate a user, you are sandboxed into the current database,
-and you are denied any access outside that database. This applies to the EXECUTE AS clause in a procedure as well as the statement EXECUTE AS USER. (But not to EXECUTE AS LOGIN.)
-
The same is true for server-level permissions. If you try:
-
CREATE PROCEDURE reload_sp WITH EXECUTE AS OWNER AS
- TRUNCATE TABLE reloadable
- EXEC('BULK INSERT reloadable FROM ''C:\temp\reloadtest.csv''
- WITH (FIELDTERMINATOR='','', ROWTERMINATOR=''\n'')')
-go
-EXEC reload_sp
-
Even if you are logged with sysadmin rights, you will get this error message:
-
Msg 4834, Level 16, State 4, Line 2
-You do not have permission to use the bulk load statement.
-
To open the sandbox, you must open two doors. If the database is owned by a user with sysadmin permission, one of the doors are already open. The other door is this statement:
-
ALTER DATABASE db SET TRUSTWORTHY ON
-
If the database is trustworthy, and you impersonate user1 with the statement EXECUTE AS USER = 'user1' or the clause EXECUTE AS 'user1' in a stored procedure, you will be able to exercise any rights that user1 may have in other databases or on server level.
-
To set a database as trustworthy you need sysadmin rights. And this is by no means a step you should take casually. There are some scenarios where this setting is safe play, but there are also many where it opens a glaring hole in your server security. I will discuss this in detail, but to keep the focus of the main topic – granting permissions to stored procedures – I will first show how to use EXECUTE AS to grant bulk-copy permissions.
As with certificates, using EXECUTE AS to give bulk-copy permissions takes
- a little more work. The steps are:
-
-
Create a proxy login, in the master database.
-
Grant the proxy login ADMINISTER BULK OPERATIONS. Again in master.
-
Mark the target database as trustworthy.
-
Switch to the application database.
-
Create a user for the proxy login.
-
Grant the proxy user ALTER and INSERT on the target table.
-
Add an EXECUTE AS clause to the procedure.
-
-
As there is not much new here, I will just make a few comments, before I give
- you a complete script with all steps and a test case.
-
Since ADMINISTER BULK OPERATIONS is a server-level permission, we need to create a
- full login in this case. It's a good idea to revoke the proxy login the
- right to connect to SQL, and I do this in the test script below.
-
As discussed in the previous section, we need to mark the database as trustworthy to break out from the sandbox.
-
Just like we did with certificates, we must put the BULK INSERT statement in dynamic SQL,
- because of a
- bug in SQL Server.
-
So here is the test script for using BULK INSERT with EXECUTE AS.
- (And as always, the introductory note on the
- examples applies):
-
USE master
-go
--- Create a test file for bulkload.
-EXEC xp_cmdshell 'ECHO 978,123,234 > C:\temp\reloadtest.csv', no_output
-EXEC xp_cmdshell 'ECHO -98,13,85 >> C:\temp\reloadtest.csv', no_output
-go
-CREATE LOGIN testuser WITH PASSWORD = 'ExECaS=0=TeST'
-go
--- Create the database to run the test in.
-CREATE DATABASE bulkcopytest
-go
--- Mark the database as trustworthy.
-ALTER DATABASE bulkcopytest SET TRUSTWORTHY ON
-go
--- Create a proxy login, which is to have the bulk-copy rights.
-CREATE LOGIN bulkproxy WITH PASSWORD = 'lkjSeF&hskldjh?löKDdf/jlk98sdfjälksdjg'
-go
--- Grant rights for the proxy login and make it unable to login.
-GRANT ADMINISTER BULK OPERATIONS TO bulkproxy
-REVOKE CONNECT SQL FROM bulkproxy
-go
--- Move to test database.
-USE bulkcopytest
-go
--- Create the non-priv user and the proxy user.
-CREATE USER testuser
-CREATE USER bulkproxy
-go
--- A test table.
-CREATE TABLE reloadable (a int NOT NULL,
- b int NOT NULL,
- c int NOT NULL)
-go
--- Test procedure with BULK INSERT.
-CREATE PROCEDURE reload_sp WITH EXECUTE AS 'bulkproxy' AS
- TRUNCATE TABLE reloadable
- EXEC('BULK INSERT reloadable FROM ''C:\temp\reloadtest.csv''
- WITH (FIELDTERMINATOR='','', ROWTERMINATOR=''\n'')')
-go
--- Give test user right to execute them.
-GRANT EXECUTE ON reload_sp TO public
-go
--- Grant the proxy user rights to truncate and insert to the test table.
-GRANT ALTER, INSERT ON reloadable TO bulkproxy
-go
--- Insert some test data. If test succeeds, this data should disappear.
-INSERT reloadable (a, b, c) VALUES (12, 23, 34)
-go
--- Switch to the test user.
-EXECUTE AS LOGIN = 'testuser'
-go
--- Run the bulk load.
-EXEC reload_sp
-go
--- Back to ourselves.
-REVERT
-go
--- Verify that bulk load succeeded.
-SELECT a, b, c FROM reloadable
-go
-REVERT
-go
--- Clean up.
-USE master
-DROP DATABASE bulkcopytest
-DROP LOGIN bulkproxy
-DROP LOGIN testuser
-EXEC xp_cmdshell 'DEL C:\temp\reloadtest.csv', no_output
-
-
Considerations on TRUSTWORTHY
-
Exactly how dangerous is TRUSTWORTHY? Permit me to approach this question in a somewhat roundabout way. For many years, this article just said that you should think twice before turning on TRUSTWORTHY, but did not go into details. Then one day, I got a mail from a reader who asked a question that got me thinking.
-
My correspondent had a problem. He wanted to grant access to BULK INSERT, and used my example for EXECUTE AS as a template, but he could not get it to work. There was a twist in his case, he wanted the database owner to be a plain server login, and not a member of sysadmin.
-
I sat down and played with my bulk-copy example and I was able to confirm his findings. I read through the topic
- Extending Database Impersonation by Using EXECUTE AS in Books Online and this was when I learnt that the sandbox has two doors that both must be open. Say there is a database A, and in this database we impersonate a user U – with the statement EXECUTE AS USER or the EXECUTE AS clause in a stored procedure. To be able to exercise the rights that the user U may have outside the database, the following conditions must be true.
-
-
1.
The database A must be TRUSTWORTHY.
-
2a.
-
- For access to another database B, the owner of A must have been granted the permission AUTHENTICATE in the database B.
-
2b.
-
For actions that require server-level permissions, the owner of A must have been granted the permission AUTHENTICATE SERVER.
-
-
So did I answer to my correspondent that he should grant his database owner AUTHENTICATE SERVER? No. I had a nagging feeling that there was something hiding here, and after some thinking, I came to the realisation that this was just a different way to give the DB owner the possibility to do everything on the server – that is, the rights of sysadmin. How can it be? Consider this scenario:
-
Say that you are DBA for a server that hosts many databases, owned by various people in your organisation. One database owner, let's call him David B Owner, comes to you with this stored procedure to perform BULK INSERT. He now needs your help to get the server-level permissions for the procedure to work. We have already looked at how do this with certificates, and you have learnt that this way you can have full control what permissions you have granted to what code. If David changes his code, he has to come to you again so you can sign it anew.
-
But assume that David B Owner persuades you to instead take the route with EXECUTE AS. David has already written a procedure and tested it out on his personal server, and you are swamped with other things. And maybe you don't want David come to you again and again, every time he changes the procedure. After all, what damage can you do with ADMINISTER BULK OPERATIONS alone? Following the example in the previous section, you create the proxy login which you grant ADMINISTER BULK OPERATIONS, you make David's database trustworthy, and you grant David AUTHENTICATE SERVER. David merrily leaves your office. But what exactly did you do now? Did you in any way ensure that all David's database can do on server level is BULK INSERT?
-
Back at his desk, David runs this in his database:
-
CREATE USER [Domain\ServerDBA] -- That's you!
-go
-EXECUTE AS USER = 'Domain\ServerDBA'
-
That is, David creates a user for you in his database, and then he impersonates that user. Since he owns the database, he has full permissions to do anything in the database, including these two actions. As long as at least one of the two doors in the sandbox are closed, David can only play that he is you inside in his own database. But you were kind to open both doors to him, and now he has all powers on the server that you have. On top of all, auditing will give you the blame for what he is doing, unless auditing is based on original_login() and the similar columns in Profiler and the DMVs. When David is done, he can drop you as a user from the database to cover his tracks.
-
This is a classical example of privilege elevation, and the sandbox exists precisely to prevent this from happening by default.
-
In this last example, a non-privileged user was the database owner, but in many shops is customary to have sa or some dedicated SQL login as the database owner for all databases. (The problem with having individuals as database owners is that when people leave the company the DBA is not always informed when the user is dropped from the Active Directory, leaving the DBA with a database owned by an orphaned user.) But there are still people like Anna DeMin and David B Owner who are application admins or whatever, and they are member of db_owner in that database. In this scenario, what does it mean to set the database as trustworthy?
-
If the database is owned by sa (or some other user with sysadmin rights) the situation is just like above. Since sa is the owner, one of the doors of the sandbox is open from the start. If you make the database trustworthy, any person with db_owner rights can impersonate a server login with sysadmin rights just and do whatever he likes. What if the databases are owned by a generic login which has no other server permissions than owning all the databases? In this case, the door to server-level permission is closed, but the doors to all user databases are open. A malicious user with db_owner rights can do
-
EXECUTE AS USER = 'dbo'
-
and if the database is trustworthy, he can access all databases on the server owned by that login with full permission, which means that the user can read and write data he is not authorised to access.
-
In these examples I have assumed that the evil user is in the db_owner role. But db_owner is not required. More precisely, it's sufficient to have permission create users in the database and and have permission to impersonate users. Being member of db_securityadmin and db_accessadmin is sufficient. You should also not overlook the possibility that two users with supplementing permissions can work together.
-
You have now seen that TRUSTWORTHY is a switch that applied casually that can be utilised by malicious persons. But is this switch ever secure?
-
Certainly. When it comes to give plain users server-level permission through stored procedures, EXECUTE AS + TRUSTWORTHY is safe if all persons who have elevated permissions in the database also are members of sysadmin or have CONTROL SERVER. In this trivial case, there is no person who can use impersonation to elevate his permissions. This scenario is not unlikely on a server that is dedicated to a single application. However, keep in mind that one day you may be oblivious and grant a person you don't trust sysadmin rights to have db_owner permissions in that database. Maybe a support person for a vendor application. Maybe a junior DBA (who may prove to be less than junior when it comes to exploit security holes!) So while EXECUTE AS may seem simpler, I would say that for server-level access, you should always use certificates. Keep in mind that with certificates you have full control over what permissions you grant. Even if you don't want to review Anna's and David's bulk-insert procedures over and over again but instead give them the password to the certificate, the only permission they can ever abuse is ADMINISTER BULK OPERATIONS. Whereas with EXECUTE AS and a trustworthy database, there are no restrictions at all.
-
Cross-Database Access
-
In the previous section I showed that it is dangerous to make a database trustworthy, if all databases are owned by the same generic user. But if all databases have individual owners, it's a different matter. Note here that individual owners do not have to be physical persons, but it could be a generic login for each database. If this is the situation, there are a few scenarios for cross-database access where EXECUTE AS + TRUSTWORTHY may be perfectly acceptable.
-
Consider an application that consists of several databases all with the same owner, and there is a need for stored procedures to access data in more than one database. In this article we have looked three alternatives to address this situation: 1) Database chaining and the database option DB_CHAINING. 2) Certificates. 3) EXCUTE AS + Trustworthy. If the requirement is that every application database should be able to access all the other databases, then database chaining may be the simplest solution.
-
But say that there is only one database where there are stored procedures with cross-database access, and you don't want to permit access from the other databases. Since DB_CHAINING must be enabled for all databases, this rules out this option. The advantage with EXECUTE AS + TRUSTWORTHY over database chaining is that you can select which databases you make trustworthy. Of course, if you decide to use EXECUTE AS for cross-database access, you need to make sure that you can handle the consequences of impersonation and make sure that you don't rely on SYSTEM_USER et al, but only use original_login() or context_info(). If not, certificates are, as always, an option.
-
Here is a second scenario: there are two databases, A and B, which are part of different, but related, applications, and the databases have different owners. There is a need to access data in database B from A. To do this with EXECUTE AS, database A must be TRUSTWORTHY, and furthermore the database owner of A must be granted the permission AUTHENTICATE in database B. For this to be permissible, all users with db_owner or similar rights in database A must be entitled to see all data in database B, since they now can do:
-
CREATE USER owner_of_database_B
-go
-EXECUTE AS USER = 'owner_of_database_B'
-
They can now do whatever they want in database B. To some extent this is a matter about trust. If the owner of database B trusts all users in database B not to mess up his database, he can grant AUTHENTICATE to the owner of database A. After all, having indirect permission through AUTHENTICATE is from a legal point of view not the same as being added to the db_owner role in the database. Still owner of B is taking a risk, and personally, I say if there is sensitive data in the database he should not accept to grant AUTHENTICATE to the owner of A, but insist on certificate signing, and review all code that accesses his database.
-
Obviously, the point about trust can be made about server permissions as well. If you trust Anna DeMin and David B Owner, you can grant them AUTHENTICATE SERVER. But in my opinion, there is too much at stake here to even consider this.
-
I like to stress again, that a presumption for it to be acceptable to make a database TRUSTWORTHY is that the database is owned by a user specific to that database, or group of databases. As soon there is a generic owner who owns unrelated databases, TRUSTWORTHY cannot be considered permissible. (Unless there never are any users who are only db_owner in a subset of the databases.)
-
Starting Jobs
-
We looked previously at how we could make it possible for users of an application to start a certain job with help of certificates. The solution is somewhat dubious, since it requires you to counter-sign three procedures in msdb. Could this be done better with EXECUTE AS without compromising security? I think so. Here are the steps for a possible solution.
-
-
The source database must have an individual owner.
-
The source database must be TRUSTWORTHY.
-
The database owner is added to msdb and granted AUTHENTICATE in that database.
-
Create a login-less user jobstartuser in msdb and add this user to SQLAgentOperatorRole.
-
You create a stored procedure in msdb to start the job in question. The procedure should have EXECUTE AS 'jobstartuser'.
-
The database owner is granted EXECUTE permission on this procedure.
-
The database owner creates a stored procedure in his database with EXECUTE AS 'dbo' that calls the procedure in msdb.
-
-
The reader may be shocked here, since we have learnt that if you own a trustworthy database and have AUTHENTICATE permission in another database, then you can get the power of the owner of that database by creating a user for him in your own database and then impersonate him. And yet I'm suggesting this? And with msdb, a system database?
-
Yes. You see, there is a special case. The owner of msdb is, by default, sa. And if you try any of:
-
CREATE USER sa
-CREATE USER Nisse FROM LOGIN sa
-
You will be told:
-
Msg 15405, Level 16, State 1, Line 1
-Cannot use the special principal 'sa'.
-
You may ask: what happens if I create a user for someone I know is member of sysadmin and impersonate that user? The answer is that in this case, you will access msdb as guest. As long as that person is not an explicit member of msdb, that is. And there is a weakness with this solution. There is maybe little reason to add members of sysadmin to msdb. But what if there are operators or junior DBAs who are not sysadmin, but who are entitled to administer jobs? They have to be users in msdb, so they can be added to the various SQL Server Agent roles. And with AUTHENTICATE permission in msdb, the owner of database A can impersonate these guys and do things he should not be permitted to.
-
There is potentially a second problem with this solution. Who says that it is supported to put user procedures in msdb? Maybe it is, but I have not been able to find an answer in either direction. When I asked in our internal MVP forum, the only reply I got was Why don't you create the procedure in master? At first I did not see the point, as it would only serve to make the solution to be more complicated. Sure, no risk that the database owner would be able to impersonate operators in msdb, but instead he would have to be granted AUTHENTICATE in master.
-
But after some more thinking I realised that using an intermediate database was the right thing, but it should not be master, but a dedicated database. So here is the modified list of steps:
-
-
The source database must have an individual owner.
-
The source database must be TRUSTWORTHY.
-
Create an intermediate database, call it jobstarter. This database
- MUST
-be owned by sa.
-
Make jobstarter TRUSTWORTHY.
-
Create a login jobstartuser who is to be the proxy user to start jobs. Deny this login the CONNECT SQL, that is, the right to log in to SQL Server.
-
Add jobstartuser to msdb and make it member of the SQLAgentOperatorRole.
-
Add jobstartuser to the jobstarter database.
-
Add the owner of the source database to jobstarter, and grant him AUTHENTICATE.
-
In jobstarter create a procedure that calls sp_start_job for the specific job. The procedure should have EXECUTE AS 'jobstartuser'.
-
Grant the database owner EXECUTE permission on the procedure.
-
The database owner adds a procedure to his database with EXECUTE AS 'dbo' that calls the procedure in jobstarter.
-
-
When I devised this solution, I debated with myself whether I should really have this jobstartuser. If you instead use EXECUTE AS OWNER in the procedure that calls sp_start_job, there is no need to create this extra login. Since I have advocated that you should never grant more permissions than needed, I chose to follow this line. But in this particular case, I cannot really blame you if you prefer EXECUTE AS OWNER. And you could argue that this is safer, since if jobstartuser is mistakenly granted permissions in jobstarter it should not have, this could lead to a security hole.
-
Before I show you an example script, I like to point out an important difference to the solution with certificates. In that solution, there is no code in msdb, nor is there any intermediate database. Instead the procedure that calls sp_start_job is in the source database. This is possible with certificates, since the DBA can have full control over what can be done with the ceritificate, for instance by dropping the private key. But when we use EXECUTE AS, the call to sp_start_job must be outside of reach for the database owner.
-
Here is a complete script that demonstrates the solution (the introductory remark on the example scripts applies as always). If you want to run this, you need to create a job called Testjob. It does not have to do anything particularly meaningful.
-
USE master
-go
--- Create a login for a database owner as well plain test user.
-CREATE LOGIN databaseowner WITH PASSWORD = 'JoBS=tA7RTte5t'
-CREATE LOGIN testuser WITH PASSWORD = 'eXEc=a$=TeST'
-CREATE LOGIN jobstartuser WITH PASSWORD = 'No login !!'
-DENY CONNECT SQL TO jobstartuser
-go
--- Create test database and set owner. We set the database trustworthy.
-CREATE DATABASE jobstarttest
-ALTER AUTHORIZATION ON DATABASE::jobstarttest TO databaseowner
-ALTER DATABASE jobstarttest SET TRUSTWORTHY ON
-go
--- Create an intermediate database. This database *must* be owned by sa.
--- This database should never have any non-sysadmin privileged users.
-CREATE DATABASE jobstarter
-ALTER AUTHORIZATION ON DATABASE::jobstarter TO sa
-ALTER DATABASE jobstarter SET TRUSTWORTHY ON
-go
--- Next stop is msdb.
-go
-USE msdb
-go
--- Create a user for jobstartuser and give permissions.
-CREATE USER jobstartuser
-EXEC sp_addrolemember SQLAgentOperatorRole, jobstartuser
-go
--- Set up things the intermediate database.
-USE jobstarter
-go
--- Create a user for the jobstartuser.
-CREATE USER jobstartuser
-go
--- We add the database owner as a user and grant him AUTHENTICATE.
-CREATE USER databaseowner
-GRANT AUTHENTICATE TO databaseowner
-go
--- Create a procedure to start a certain job.
-CREATE PROCEDURE start_this_job WITH EXECUTE AS 'jobstartuser' AS
- EXEC msdb..sp_start_job 'Testjob'
-go
--- Permit the databaseowner to run this procedure.
-GRANT EXECUTE ON start_this_job TO databaseowner
-go
--- Move to test database.
-USE jobstarttest
-go
--- Create a database user for the test login as well as the proxyuser.
-CREATE USER testuser
-go
--- Create a procedure that calls our start procedure in msdb.
-CREATE PROCEDURE start_our_job WITH EXECUTE AS 'dbo' AS
- EXEC jobstarter..start_this_job
-go
--- Give test user right to execute the procedure.
-GRANT EXECUTE ON start_our_job TO testuser
-go
--- Switch to the test user.
-EXECUTE AS LOGIN = 'testuser'
-go
--- Start the job, this succeeds.
-EXEC start_our_job
-go
--- Back to ourselves.
-REVERT
-go
--- Clean up.
-go
-USE msdb
-go
-DROP USER jobstartuser
-go
-USE master
-go
-DROP DATABASE jobstarttest
-DROP DATABASE jobstarter
-DROP LOGIN testuser
-DROP LOGIN databaseowner
-DROP LOGIN jobstartuser
-
You may find this solution a bit too elaborate, and I can certainly agree. A better solution may to be use a mix of impersonation and certificate signing. Put the procedure start_this_job in msdb and use EXECUTE AS to get access to sp_start_job. But instead of making the source database TRUSTWORTHY, you use certificate signing to give permission to run start_this_job. This also relieves you of the requirement that the database must not have an individual owner.
-
As a final note: if you want to see which user in the source database that actually started the job, counter-signing the system procedures is the only choice. The auditing in msdb is performed through SYSTEM_USER so any impersonation breaks that.
Before we leave EXECUTE AS, there is one more side effect I have yet to discuss. This is a little more on the advanced side, and something I learnt from SQL Server MVP Adam Machanic.
-
In a CLR module, you can access the WindowsIdentity object. The main
- purpose for this is in assemblies that have been marked as EXTERNAL_ACCESS or UNSAFE where you want to access resources outside SQL Server with the Windows
- permissions of the actual user. To do this, you need to impersonate that user,
- or else the access will be through the service account for SQL Server.
-
As long as there has not been any impersonation through EXECUTE AS, SqlContext.WindowsIdentity.Name will return the domain and the Windows user name,
- if the user logged in through Windows authentication. For an SQL login, WindowsIdentity is Null, so access to SqlContext.WindowsIdentity.Name yields a Null exception.
-
But if there is an EXECUTE AS clause somewhere on the call stack, you can no
- longer retrieve the user name for the Windows user. In most cases, WindowsIdentity is Null. But, if the database was set as trustworthy, and
- the EXECUTE AS is for a user with sysadmin privileges, then WindowsIdentity.Name will return the name of the service account for SQL Server.
-
Other Methods
-
In this section I will cover three other methods to secure SQL Server.
-Sometimes I see people ask on the newsgroups and forums How can I grant
-access to an application? That is, they don't want the users to be able to
-access the tables directly from SSMS or Excel, but only from the application. The regular approach to achieve this is
-to use stored procedures, and we have already looked what possibilities they offer. But not all applications use stored procedures. In this section, I will
- briefly look at three solutions you can employ regardless whether you use
-stored procedures or not.
Application roles were added in SQL 7. The idea is that you
- create a role to which you assign the necessary privileges to run the
- application. The users have no permissions at all beyond the database access. The application calls the system procedure
- sp_setapprole to activate the role. To do this, the application must pass a password
- that can be obfuscated when sent over the wire.
-
Application roles may seem what you are looking for, but the password is a
-weak point. If you have a two-tier application, you can never achieve
-a secure solution with application roles. The password has to be embedded in the
-application, or stored somewhere the user has read access. You can chop it into
-pieces and store the pieces in the four corners of the application, but at best
-that is security by obscurity. It's a different matter if you have a three-tier
-application. Then you can store the password on the middle tier somewhere the
-users do not have read access. You should still need to beware that anyone who can get
-access to the network wire to SQL Server may be able to eavesdrop and crack the
-password.
-
By default, when you activate an application role, you cannot back out of it.
-This has an effect on connection pooling; if you try to reuse a connection where
-an application role has been active, you will get an error. But you can get a
-cookie back from sp_setapprole, which you then can pass to
-sp_unsetapprole before you disconnect.(Please see
- sp_setapprole in Books Online for the exact syntax.)
-
This also makes it possible for having several application roles with
- custom permissions for various tasks, similar to what we have discussed for
- certificates and EXECUTE AS. That is, you would set the application role, perform the SQL that needs special permissions, and then unset the role.
- (Note that you cannot call sp_setapprole from within a stored procedure;
- it must be called from the top-level scope.) But due to the password issue, it
- is not a solution that I recommend.
-
Since application roles are database entities, you cannot use them for things
- that require server-level permissions, for instance bulk load.
-
When you use application roles, functions that return login names – SYSTEM_USER, suser_sname() etc – still return the login name of the
- actual user. However, functions that return the database-level user name –
- USER, user_name() – return the name of the application role.
I have already touched at application proxies in several places, mainly in
- the sections on the EXECUTE AS statement and
- SET CONTEXT_INFO. Here I like
- to give just a few more remarks.
-
For an "application proxy" to be meaningful, the application must have at
- least three tiers. The middle tier authenticates the user and then connects to
- SQL Server. The same arrangement can be achieved with application roles, but
- with one difference: the application proxy can be a Windows login, so there is
- no password crossing the wire.
-
An interesting observation on SET CONTEXT_INFO
- is that it
- could serve as a full alternative to EXECUTE AS to impersonate the real user. All checks and auditing in the application that require knowledge about the real user would use context_info() to get this information. But as I discussed earlier, if there are holes in the application that permits for SQL injection, a malicious user could inject a SET CONTEXT_INFO to change his identity. For this reason, the EXECUTE AS statement
- with its NO REVERT and WITH COOKIE
- clauses appears as safer.
It is possible to set up a Remote Desktop connection so that a specific application is started, when the user
-connects. Furthermore, on Windows 2008, it is
-possible to set this up so that the user arrives directly to the login screen of
-the application, and the application appears as if it executes from his
-computer. That is, there is no desktop from the computer running Terminal
-Server. Please don't ask me how you do to set this up; I'm an SQL Server MVP,
-not a Windows MVP. But I've seen a demo of it.
-
If you have a two-tier application, you can use this to ensure that users can
-connect only through the application, and not through Access, Excel, Management
-Studio or whatever. You need to configure the network so that the SQL Server
-machine is not directly accessible from the users' computers, only from the
-computer running Terminal Server. One way to do this is to configure the firewall
-on the SQL Server machine to only accept connections from certain IP addresses.
-
Since this solution builds on things outside my realm, I cannot fully asses
-how secure it is. For instance, I don't know if there is any possibility for
-users to intercept the login process in Terminal Server. Nevertheless, it is an interesting option. Not the least if you have a two-tier application, you don't want to re-architect.
-
Final Words
-
Security is always a challenge. One aspect is that security and convenience rarely goes hand in hand. Better security often means more hassle.
-
But security is also a challenge, because the holes in your security scheme may not always be apparent. To work with security means that you constantly have to think around corners. Can this permission be exploited by a malicious user? Could there be privilege elevation? You cannot only consider the current situation, but you must also try to see into the future. Maybe your current setup is secure because of some assumptions that are true now. But what if those assumptions are not true to tomorrow?
-
In this article I have presented a number of solutions and suggestions, which I believe to be secure. But I cannot rule out that I've made a shortcut too many somewhere. By all means, if you apply any of my solutions in an area where security is top priority, you should make your own evaluation of the solution to assess whether there is a hole somewhere.
-
In this article we have looked at three different solutions to grant permissions through stored procedures: ownership chaining, certificates and EXECUTE AS.
-
Of these, ownership signing only works in a limited scenario, but a very common one, and ownership signing is what you will use 99 % of the time or even more.
-
In the situations where ownership signing is not sufficient, you can always use certificate signing to grant other permissions. With certificates you can have very tight control over what permissions you grant. Not the least is this important if you are a server DBA who needs to grant server-level permission to users in application databases.
-
And then there is EXECUTE AS... As you have realised from this article, I am less than enthusiastic over EXECUTE AS. Everything you can do with EXECUTE AS you can do with certificates. (Save to cover up for an explicit DENY.) But it has to be admitted that EXECUTE AS is simpler. So I think that EXECUTE AS is OK to grant database permissions under these circumstances:
-
-
The application was designed with EXECUTE AS in mind. That is row-level security and auditing is based on original_login() or context_info().
-
You use proxy users with specific permissions and don't descend to EXECUTE AS OWNER as the miracle cure.
-
-
From this follows that if you are a plain developer and need a solution to grant permissions beyond what is possible with ownership chaining, you cannot start using EXECUTE AS on your own initiative. You first need to discuss with your DBA or the chief designer of the application, so that you don't wreak havoc of something.
-
There are also some situations where EXECUTE AS is meaningful for cross-database access, and we have looked at some examples. The presumption is that the database has an individual owner, so that the effect of making it trustworthy is limited.
-
But when it comes to server-level permissions, you should be extremely conservative with using EXECUTE AS, since this requires the database to be trustworthy and the database owner to be granted AUTHENTICATE SERVER. Any user in that database with sufficient permission will be able to elevate his permission to the sysadmin role. You should have very good reasons not to use certificates here.
-I like to thank SQL
-Server MVPs Dan Guzman, Martin Bell, Adam Machanic, Hugo Kornelis, Razvan Socol, Kent
-Tegels and Victor Isakov as well as Imran Mohamed and Jerry Horochowianka for submitting valuable
-suggestions for this article.
-
If you have suggestions for improvements, corrections on
- contents, language or
-formatting, please mail me at
-esquel@sommarskog.se. If you have technical questions that any knowledgeable
-person could answer, I encourage you to post a question to the SQL Server Security forum on MSDN/Technet.
2011-12-31 – Added text about a new feature in SQL Server 2012, that makes it easier to copy a certificate from one database to another, including the new section CREATE CERTIFICATE FROM BINARY in SQL 2012.
-
2011-07-13 – A major overhaul of the article to reflect that five years had passed since the original publication. I have also added some quite important new material. Changes in summary:
-
-
I wrote the original article when SQL 2005 was brand-new, it is no longer. I've revised the article to change that perspective a bit.
-
Added a section on counter-signing stored procedures and added an example how to use this for starting jobs.
-
Replaced the old section What About the Password? with a new section, Managing Certificates and Passwords for a better and deeper discussion on the security around certificates. There is also a script to show how you can use throw-away passwords when you deploy signed stored procedures for server-level permissions.
Added a section about the implications on Profiler and the DMVs when you use EXECUTE AS.
-
Added three new sections in the chapter on EXECUTE AS: One that discusses the risks with making a database trustworthy. There is a new section on cross-database access, and there is also an example how to use EXECUTE AS to start jobs.
-
Added a brief description of one more method – using Terminal Server.
2011-01-11 – Corrected the expression to decode
- context_info(). The old expression would
- result in a number trailing NUL characters in the character data. Thanks to
-Imran Mohamed for pointing out the error.
-
2006-03-28 – Rewrote the section on asymmetric keys on suggestions
- from Razvan Socol.
-
-
-
-
\ No newline at end of file
diff --git a/Articles/How to share data between stored procedures.htm b/Articles/How to share data between stored procedures.htm
deleted file mode 100644
index 02c92774..00000000
--- a/Articles/How to share data between stored procedures.htm
+++ /dev/null
@@ -1,1152 +0,0 @@
-
-
-
-
-How to share data between stored procedures
-
-
-
-
-
-
How can I
- use the result set from one stored procedure in another, also expressed
- as How can I
- use the result set from a stored procedure in a SELECT statement?
-
How can I pass a table data in a parameter from one stored procedure to
- another?
-
-
In this text I will discuss a number of possible solutions and point out their
- advantages and drawbacks. Some methods apply only when you want to
- access the output from a stored procedure, whereas other methods are good for the input scenario, or both input and output. In the case
- you want to access a result set, most methods require you to rewrite the
- stored procedure you are calling (the callee) in one way or another, but some solutions do
- not.
-
Here is a summary of the methods that I will cover. Required version refers to the minimum version of SQL Server where the solution is available. When the column is empty, this means all versions from SQL 2000 and up.
At the end of the article, I briefly discuss the particular situation when
-your stored procedures are on different servers, which is a quite challenging situation.
-
A related question is how to pass table data
- from a client, but this is a topic which is outside the scope for this text. Of the methods
- that I discuss in this article, only table-valued parameters and XML are useful for this case. For
- a more general discussion on passing structured data from a client to SQL
- Server, see my article Arrays and
- Lists in SQL Server.
-
Examples in the article featuring tables such as authors, titles, sales etc run in the old sample database pubs. You can download the script for pubs from Microsoft's web site. (Some examples use purely fictive tables, and do not run in pubs.)
This method can only be used when the result set is one single row.
- Nevertheless, this is a method that is sometimes overlooked. Say you have
- this simple stored procedure:
You can now easily call insert_customer from another stored procedure.
- Just recall that in T‑SQL you need to specify the OUTPUT keyword also in the
- call:
When all you want to do is to reuse the result set from a stored procedure, the first thing to investigate is whether it is possible to rewrite the stored procedure as a table-valued function. This is far from always possible, because SQL Server is very restrictive with what you can put into a function. But when it is possible, this is often the best choice.
-
There are two types of table functions in SQL Server: inline and multi-statement functions.
Here is a example of an inline function adapted from Books Online for SQL 2000:
-
CREATE FUNCTION SalesByStore (@storeid varchar(30))
-RETURNS TABLE AS
-RETURN (SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid)
-To use it, you simply say:
-
SELECT * FROM SalesByStore('6380')
-You can filter the data with WHERE or use it in a bigger query that includes other tables. That is, you use the function just like was a table or a view. You could say that an inline function is a parameterised view, because the query optimizer expands the function
- as if it was a macro, and generates the plan as if you had provided the expanded
- query. Thus, there is no performance cost for packaging a SELECT statement into
- an inline function. For this reason, when you want to reuse a stored
- procedure that consists of a single SELECT statement, rewriting it into an
- inline UDF is without doubt the best choice. (Or instead of rewriting it, move
- the SELECT into a UDF, and rewrite the existing procedure as a wrapper on the
- function, so that the client is unaffected.)
-
There are a couple of system functions you cannot use in a UDF, because SQL Server thinks it matters that they are side-effecting. The most commonly used ones are newid(),and rand(). On SQL 2000 this restriction goes further and disallows all system functions that are nondeterministic, that is, functions that do not return the same value for the same
-input parameters on each call. A typical example is getdate().
-A multi-statement function has a body that can have as many statements as you
-like. You need to declare a return table, and you insert
-the data to return into that table.
-Here is the function above as a multi-statement function:
-
CREATE FUNCTION SalesByStore (@storeid varchar(30))
- RETURNS @t TABLE (title varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL) AS
-BEGIN
- INSERT @t (title, qty)
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
- RETURN
-END
-
-You use multi-statement functions in the same way as you use inline functions, but in difference to
-inline functions, they are not expanded in place, but instead it's like you
-would call a stored procedure in the middle of the query and return the data in
-a table variable. This permits you to move the code of a more complex stored procedure into
-a function.
-
As you can see in the example, you can define a primary key for your return table. I like to point out that this definitely best practice for two reasons:
-
-
It states your assumptions of the data. If your assumptions are incorrect, you will be told up front. (Instead of spending time to understand why your application presents incorrect data.)
-
This is information that is valuable to the optimizer when you use the function in a larger query.
-
-
It goes without saying, that this is only meaningful if you define a primary key on the columns you produce in the body of the UDF. Adding an IDENTITY column to the return table only to get a primary key is pointless.
-
- Compared to inline functions, multi-statement functions
- incur some overhead due to the return table. More important, though, is that if you use the function in
- a query where you join with other tables, the optimizer will have no idea of what the function returns, and will
-make standard assumptions. This is far from always an issue, but the more rows the function returns, the higher the risk that the optimizer will make incorrect estimates and produce an inefficient query plan. One way to avoid this is to insert the results from the function into a temp table. Since a temp table has statistics this helps the optimizer to make a better plan.
-
It follows from this, that there is not much reason to consider which sort of
- function to use. If you can express your problem in a single query, use an
-inline function. Only use a multi-statement function when an inline function is not possible.
-
User-defined functions are quite restricted in what they can do, because a UDF is not permitted to change the database state. The most important restrictions are:
-
-
You can only perform INSERT, UPDATE or DELETE statements on table
- variables local to the function.
-
You cannot call stored procedures (with the exception of extended stored
- procedures).
-
You cannot invoke dynamic SQL.
-
You cannot create tables, neither permanent tables nor temp tables. You can use table variables.
-
You cannot use RAISERROR, TRY-CATCH or BEGIN/COMMIT/ROLLBACK TRANSACTION.
-
You cannot use "side-effecting" system functions, such as newid() and rand().
-
On SQL 2000, you cannot use non-deterministic system functions.
-
-
Please see the Remarks section in the topic for CREATE FUNCTION in Books Online
- for a complete list of restrictions.
What could be better for passing data in a database than a table? When using a table there are no restrictions, but you have a solution that works in all situations. We will look at two ways to do this, as well as a third way which is a variation of the second. It should be admitted, though, that this is a little more heavy-handed than some of the other solutions in this article. Using tables can also lead to performance issues due to recompilation.
In this example, caller creates the temp table, and called_procedure
- fills it in, that is, the table is output-only. A different scenario is that caller fills the table
- with input data whereupon called_procedure performs some general computation, and the caller uses the result from that computation for some purpose. That is, the table is used for both input and output. Yet a scenario is that the caller prepares the temp table with data, and the callee first performs checks to verify that a number of business rules are not violated, and then goes on to update one or more tables. This would be an input-only scenario.
-
Changing Existing Code
-
Say that you have this procedure:
-
CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
-
You want to reuse this result set in a second procedure that returns only titles that have sold above a certain quantity. How would you achieve this by sharing a temp table without affect existing clients? The solution is to move the meat of the procedure into a sub-procedure, and make the original procedure a wrapper on the original like this:
-
CREATE PROCEDURE SalesByStore_core @storeid varchar(30) AS
- INSERT #SalesByStore (title, qty)
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
-go
-CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- CREATE TABLE #SalesByStore(title varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL)
- EXEC SalesByStore_core @storeid
- SELECT * FROM #SalesByStore
-go
-CREATE PROCEDURE BigSalesByStore @storeid varchar(30),
- @qty smallint AS
- CREATE TABLE #SalesByStore(title varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL)
- EXEC SalesByStore_core @storeid
- SELECT * FROM #SalesByStore WHERE qty >= @qty
-go
-EXEC SalesByStore '7131'
-EXEC BigSalesByStore '7131', 25
-go
-DROP PROCEDURE SalesByStore, BigSalesByStore, SalesByStore_core
-
Note: This script is a complete repro script that creates some objects, tests them, and then drops them, to permit simple resting of variations. We will look at more versions of these procedures later in this text.
-
Just like in the example with the multi-statement function, I have defined a primary key for the temp table, and exactly for the same reasons. Speaking of best practices, some readers may wonder about the use of SELECT * here. I think using SELECT * from a temp table created in the same procedure is OK, particularly if the purpose is to return all columns in the temp table. (In difference to using SELECT * from a table created elsewhere, and which may be altered without your knowledge.)
-
While this solution is straightforward, you may feel uneasy by the fact that the CREATE TABLE statement for the temp table appears in two places, and there is a third procedure that depends on the definition. Here is a solution which is a little more convoluted that to some extent alleviates the situation:
-
CREATE PROCEDURE SalesByStore_core @storeid varchar(30),
- @wantresultset bit = 0 AS
- IF object_id('tempdb..#SalesByStore') IS NULL
- BEGIN
- CREATE TABLE #SalesByStore(title varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL)
- END
-
- INSERT #SalesByStore (title, qty)
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
-
- IF @wantresultset = 1
- SELECT * FROM #SalesByStore
-go
-CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- EXEC SalesByStore_core @storeid, 1
-go
-
I've moved the CREATE TABLE statement for the wrapper into the core procedure, which only creates the temp table only if it does not already exist. The wrapper now consists of a single EXEC statement and passes the parameter @wantresultset as 1 to instruct the core procedure to produce the result set. Since this parameter has a default of 0, BigSalesByStore can be left unaffected.
-
A Note on the Virtues of Code Reuse
-
Before we move on, I like to point out that the given example as such is not very good practice. Not because the concept of sharing temp tables as such is bad, but as with all solutions, you need to use them in the right place. As you realise, defining a temp table and creating one extra stored procedure is too heavy artillery for this simple problem. But an example where sharing temp tables would be a good solution would have to consist of many more lines of code, which would have obscured the forest with a number of trees. Thus, I've chosen a very simple example to highlight the technique as such.
-
Keep in mind that compared to languages such as C# and Java, Transact-SQL is poorly equipped for code reuse, why solutions in T‑SQL to reuse code are clumsier. For this reason, the bar for reuse is somewhat higher in T‑SQL. It's still a virtue, but not as big virtue as in modern object-oriented languages. In this simple problem, the best would of course be to add @qty as a parameter to SalesByStore. And if that would not be feasible for some reason, it would still be better to create BigSalesByStore by means of copy-paste than sharing a temp table.
-
Beside the poverty of T‑SQL as a language, there is a second reason why code reuse is something that you should be a little careful with. Say that there is a requirement to show the sales for all stores in a certain state. In a pure C# or Java environment, it would be normal to write a loop that calls SalesByStore for every store. But in a database with several hundred gigabytes of data, the performance penalty for such a solution can be severe.
-
A Maintenance Problem
-
If the callee is called from many places, and you want to change which
-columns it reads/writes, you need to revisit all calling stored procedures
- to edit the temp-table definition. For this reason, sharing temp tables
- is mainly useful when you have a single pair of caller and callee.
- Then again, if the temp is narrow, maybe only a single column of customer IDs
-to process, the table is likely to be very stable.
-
There are some alternatives to overcome the maintenance problem. One is to use a process-keyed table, which we will look into in the next section. I have also received some interesting ideas from readers of this article.
-
One solution comes from Richard St-Aubin. The callers create the temp table with a single dummy column, and then call a stored procedure that uses ALTER TABLE to add the real columns. It would look something like this:
-
CREATE PROCEDURE called_procedure @par1 int,
- @par2 bit,
- ... AS
- ...
- INSERT/UPDATE/DELETE #mytemp
-go
-CREATE PROCEDURE define_temp_table AS
- ALTER TABLE #mytemp ADD col1 int NOT NULL,
- col2 char(5) NULL,
- ...
-go
-CREATE PROCEDURE caller AS
- DECLARE ...
- CREATE TABLE #mytemp (dummycol bit)
- EXEC define_temp_table
- ...
- EXEC called_procedure @par1, @par2 ...
- SELECT * FROM #mytemp
-go
-
You must create the temp table in caller, since if you were to put the CREATE TABLE statement in define_temp_table, the table would be dropped when that procedure exits. This method can definitely be
- worth exploring, but I like to add a word of caution. Adding columns to a table at run-time can lead to unexpected errors if the procedure is recompiled. If you call the procedure that adds the columns directly after the CREATE TABLE statement, you should be
-fairly safe. But this depends on the fine print in SQL Server, so it could break with a new release. A second issue is that this method prevents SQL Server from caching the temp-table definition. This could have a significant impact if the procedures are called with a high frequency.
-
Another solution, which requires SQL 2008, comes from Wayne Bloss. He creates a table type that holds the definition of the temp table. You can only use table types for declaring table variable and table parameters. But Wayne has a cure for this:
-
DECLARE @dummy my_table_type
-SELECT * INTO #mytemp FROM @dummy
-
From this point you work with #mytemp; the sole purpose of @dummy is to be able to create #mytemp from a known and shared definition. (If you are unacquainted with table types, we will take a closer look on them in the section on table-valued parameters.) A limitation with this method is that you can only centralise column definitions this way, but not constraints as they are not copied with SELECT INTO. You may think that constraints are odd things you rarely put in a temp table, but I have found that it is often fruitful to add constraints to my temp tables as assertions for my assumptions about the data. This does not the least apply for temp tables that are shared between stored procedures. Also, defining primary keys for your temp tables can avoid performance issues when you start to join them.
-
Let me end this section by pointing out that sharing temp tables opens for an interesting possibility for flexibility. The callee
- only cares about the columns it reads or writes. This permits a caller
- to add extra columns for its own usage when it creates the temp table. Thus, two callers to the same callee could have different definitions of the
-temp table, as long as the columns accessed by the callee are defined consistently.
-
Note: A more advanced way to tackle the maintenance problem is to use a
- pre-processor and put the definition of the temp table in an include-file. If you have a C compiler around, you can use the C pre-processor. My AbaPerls includes a pre-processor, Preppis, which we use in the system I spend most of my time with.
-
The Impact of Recompilation
-
One distinct drawback with this method is that it causes a lot of recompilation in the callee. Each time the caller is invoked, a new instance
-of the temp table is created, and for this reason SQL Server must recompile all statements in the callee that refer to the temp table. (Recall what I said about flexibility in the previous paragraph. The definition could really be different.) If the execution time for the callee is expected to be subsecond and there are several complex statements in the procedure, the recompilation may add an overhead of more than 100 %. On the other hand, if the typical execution time of the callee is one minute, the cost of recompilation is likely to be negligible.
-
One way to reduce the amount of recompilation is to copy any input data in the shared table to a local table first thing, and then write back the result at the end. This restricts the recompilation to these two statements, but it goes without saying that this adds an overhead in itself, and it's mainly an option when you expect the table to hold a small amount of data.
-
I should hasten to add that recompilation can happen for several reasons. It is very common for temp tables to cause recompilation because of changed statistics, a topic I will return to when I discuss process-keyed tables.
-
Note: if you are still on SQL 2000, you should be aware of that in this version of SQL Server, recompilation is always on procedure level and therefore more expensive. Statement-level recompilation was introduced in SQL 2005.
-
A Note on SQL Server Data Tools
-
-
Simultaneously with SQL Server 2012, Microsoft released SQL Server Data Tools, SSDT. This is a very versatile environments that gives you many benefits. One benefit is that if you write a stored procedure like:
-
CREATE PROCEDURE example_sp AS
- CREATE TABLE #temp(a int NOT NULL)
- SELECT a FROM #temmp
-
SSDT will tell you up front of the misspelling about the temp table name, before you try to run the batch to create the procedure. This is certainly a very helpful feature, because a typo can be trapped early. However, SSDT has no notion about sharing temp tables, so SSDT will also give you a warning for a procedure like SalesByStore_core, or more precisely three: one per column. They are only warnings, so you can proceed, but it takes a handful of such procedures to clutter up the Error List window so there is a risk that you miss other and more important issues.
-
There is a way to suppress the warning: right-click the file in Solution Explorer and select Properties. There is a property Suppress T-Sql Warning and here you can enter the code for the error. But this means that you lose the checking of all table names in the procedure; there is no means to only suppress the warning only for the shared temp table.
-
All and all, if you are using SSDT, you will find an extra resistence barrier against sharing temp tables.
This method evades the
- maintenance problem by using a permanent table instead. There is still a recompilation problem, though, but of a different
- nature.
-
Outline
-
A process-keyed table is simply a permanent table that serves as a temp
- table. To permit processes to use the table simultaneously, the table
- has an extra column to identify the process. The simplest way to do this is the global
- variable @@spid (@@spid is the process id in SQL Server). In fact, this is so
- common, that these tables are often referred to as spid-keyed tables.
- Here is an outline; I will give you a more complete example later.
-
CREATE TABLE process_keyed (spid int NOT NULL,
- col1 int NOT NULL,
- col2 char(5) NULL,
- ...)
-go
-CREATE CLUSTERED INDEX processkey_ix ON process_keyed (spid)
--- Add other columns as needed.
-go
-...
-DELETE process_keyed WHERE spid = @@spid
-INSERT process_keyed (spi, col1, col2, ....)
- VALUES (@@spid, @val1, @val2, ...)
-...
-SELECT col1, col2, ...
-FROM process_keyed
-WHERE spid = @@spid
-...
-DELETE process_keyed WHERE spid = @@spid
-
A few things to note here:
-
-
The table should have a clustered index on the process key (spid
- in this example), as all queries against the table will include the
- condition WHERE spid = @@spid.
-
You should delete any existing data for @@spid before you insert any
- data into the table, as a safety precaution.
-
When you are finished using the data you should delete it, so that it
- does not occupy any extra space.
-
-
Choosing the Process-key
-
While it's common to use @@spid as the process key there are two problems with this:
-
-
If sloppy programmers neglect to clear the spid before and after use, old data may be passed to the callee, causing incorrect results that are difficult to understand how they arose.
-
If a client needs to pass a process-key around, there is no guarantee that it will have the same spid every time, since modern clients typically connect and disconnect for each call they make.
-
-
One alternative for the process-key is to use a GUID (data type
-uniqueidentifier). If you create the process key in SQL Server, you can use the function newid(). (You can rely on newid() to return a unique value, which is why it addresses the first point.) You may have heard that you should not have guids in your clustered index, but that applies when the guid is the primary key alone, since this can cause fragmentation and a lot of page splits. In a process-keyed table, you will typically have many rows for the same guid, so it is a different situation.
-
SQL 2012 offers a new alternative: get the process-key from a sequence, which is a new type of object in SQL 2012. A sequence is akin to an IDENTITY column, but it is an object of its own.
-
A Longer Example
-
Let's say that there are several places in the application where you need to compute the total number of sold books for one or more stores. You put this computation in a procedure ComputeTotalStoreQty, which operates on the table stores_aid. In this example, the procedure is nothing more than a simple UPDATE statement that computes the total number of books sold per store. A real-life problem could have a complex computation that runs over several hundred lines of code. There is also an example procedure TotalStoreQty which returns the returns the total sales for a certain state. It fills stores_aid with all stores in that state, calls ComputeTotalStoreQty and then returns the result to the client. Note that TotalStoreQty is still careful to clear its entry in stores_aid both before and after the call.
-
CREATE TABLE stores_aid
- (process_key uniqueidentifier NOT NULL,
- storeid char(4) NOT NULL,
- totalqty smallint NULL,
- CONSTRAINT pk_stores_aid PRIMARY KEY (process_key, storeid)
-)
-go
-CREATE PROCEDURE ComputeTotalStoreQty @process_key uniqueidentifier AS
- UPDATE stores_aid
- SET totalqty = s.totalqty
- FROM stores_aid sa
- JOIN (SELECT stor_id, SUM(qty) AS totalqty
- FROM sales
- GROUP BY stor_id) AS s ON s.stor_id = sa.storeid
- WHERE sa.process_key = @process_key
-go
-CREATE PROCEDURE TotalStoreQty @state char(2) AS
- DECLARE @process_key uniqueidentifier
- SELECT @process_key = newid()
-
- DELETE stores_aid WHERE process_key = @process_key
- INSERT stores_aid(process_key, storeid)
- SELECT @process_key, stor_id
- FROM stores
- WHERE state = @state
-
- EXEC ComputeTotalStoreQty @process_key
-
- SELECT storeid, totalqty
- FROM stores_aid
- WHERE process_key = @process_key
-
- DELETE stores_aid WHERE process_key = @process_key
-go
-EXEC TotalStoreQty 'CA'
-go
-DROP PROCEDURE TotalStoreQty, ComputeTotalStoreQty
-DROP TABLE stores_aid
-
Please note that I have defined a proper key for stores_aid adhering to best practices.
-
Name Convention and Clean-up
-
You may wonder what that _aid in the table name comes from. In the environment where I do my daily chores, we have quite a few process-keyed tables, and we have adapted the convention that all these tables end in -aid. This way, when you read some code, you know directly that this is not a "real" table with persistent data. (Nevertheless some of our aid tables are very important in our system as they are used by core functions.)
-
There is a second point with this name convention. It cannot be denied
- that a drawback with process-keyed tables is that sloppy programmers could forget to
-delete data when they are done. Not only this wastes space, it can also result in incorrect row-count estimates leading to poor query plans. For this reason it is a good idea to clean up these tables on a regular basis. For instance, in our night-job we have a procedure that runs the query below and then executes the generated statements:
-
SELECT 'TRUNCATE TABLE ' + quotename(name)
-FROM sysobjects
-WHERE type = 'U'
- AND name LIKE '%aid'
-
-
Issues with Recompilation
-
As we saw, when sharing temp tables, this causes recompilations in the callee, because the temp table is a new table every time. While this issue does not exist with process-keyed tables, you can still get a fair share of recompilation because of auto-statistics, a feature which is enabled in SQL Server by default. For a permanent table, auto-statistics kicks in when the first 500 rows have been added, and then every time
- 20 % of the rows have changed. (For full details on recompilation, see this
- white paper by Eric Hanson and Yavor Angelov.) Since a process-keyed table is typically
- empty when it is not in use, auto-statistics sets in often. Sometimes this
- can be a good thing, as the statistics may help the optimizer to find a
-better plan. But as I noted previously, recompilation may also cause an unacceptable performance overhead.
-
As when sharing temp tables, one way to circumvent the recompilation is to copy data to a local table on input and copy back on output. But for process-keyed tables there are two more options:
-
-
Disable auto-statistics for the table entirely with sp_autostats.
-
Use the query hint OPTION (KEEPFIXED PLAN) for queries which are costly to recompile, and where the changed statistics are unlikely to affect the outcome of the compilation.
-
-
The Cost of Logging
-
Compared to sharing temp tables, one disadvantage with process-keyed tables is that you tend to put them
- in the same database as your other tables. This has two ramifications:
-
-
The tables are subject to complete logging; temp tables are only logged for rollbacks, not for recovery on start-up, since tempdb is always recreated when SQL Server starts.
-
If the database has full recovery, the process-keyed table will consume extra space in your transaction-log backups.
-
-
The second point can be addressed by putting
-all your process-keyed tables in a separate database with simple recovery. Both points can be addressed by using a global temp table, which I will discuss in the next session.
-
Using Memory-optimised Tables in SQL 2014
-
If you are on SQL 2014 – which of this writing is only available as a CTP and not yet released – there is an excellent solution to this problem. Use a table created with these options:
-
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY)
-
This is part of an entirely new feature in SQL 2014, known under the code name Hekaton. Hekaton tables are entirely in memory, and for really blazing performance you access them from stored procedures that have been compiled to C code. You can also access them from traditional T-SQL and still see significant performance improvements compared to traditional tables. Hekaton tables can hold persistent data, just like regular tables, and in such case there is still an overhead of writing to the transaction log. However, when you create a Hekaton table, there is also the option to say you don't want data to be durable. Such tables need very little logging, and this is perfect for process-keyed tables, where you don't want any data to survive a server crash.
-
A couple of notes:
-
-
The database must be configured to permit Hekaton tables. Specifially, you need to add a filegroup for memory-optimized data. (This is a directory, akin to what you have for FILESTREAM data.)
-
The surface area for Hekaton is limited, and currently these data types are not supported: MAX data types, xml, text, ntext, image, sql_variant, datetimeoffset and CLR data types. Furthermore, the maximum data size for a row must not exceed 8060 bytes.
-
You must define a primary key for the table, which must be either nonclustered or a hash (a new index type, specific to Hekaton). This can be a bit of a bummer – some of my process-keyed tables are a bit denormalised as they contain different type of data.
-
While I mentioned natively compiled stored procedured, these have a very limited feature set, and it is not likely that you will have much use for them with your process-keyed tables. For one thing, natively compiled stored procedures cannot access disk-based tables, which you probably want to join your process-keyed table with.
-
At this writing, it is not clear whether Hekaton will be available in all editions of SQL Server.
-
-
Conclusion
-
While process-keyed tables are not without issues when it comes to performance, and they are certainly a bit heavy-handed for the simpler cases, I still see this is the best overall solution that I present in this article. It does not come with a ton of restrictions like table-valued functions and it is robust, meaning that code will not break because of simple changes in difference to some of the other methods we will look at later.
-
But that does not mean that using a process-keyed table is always the way to go. For instance, if you only need output-only, and your procedure can be written as a table-valued function, that should be your choice.
If you create a table with two leading hash marks (e.g. ##temp), this is a global temp
-table. In difference to a regular temp table, a global temp table is visible to
-all processes. However, when the process that created the table goes away, so
-does the table (with some delay if another process is running a query against
-the table in that precise moment). That makes global temp tables difficult to
-use on any real global basis, but only when you have control over all
-involved processes like when spawning a second process through xp_cmdshell.
-
Nevertheless, there is a special case that SQL Server MVP Itzik Ben-Gan made me aware of: if you create a global temp table in a start-up procedure, the global temp
- table will be around as long as the server is up, unless someone explicitly
- drops it. This makes it possible to use a global temp table as a process-keyed
-table. This way you can have a fixed and known schema for your process-keyed table but still get the reduced logging of tempdb.
-
Here is a quick sample of how you create a global temp table when SQL Server starts:
-
USE master
-go
-CREATE PROCEDURE create_global_temp AS
- CREATE TABLE ##global(process_key uniqueidentifier NOT NULL,
- -- other columns here
- )
-go
-EXEC sp_procoption create_global_temp, 'startup', 'true'
-
It cannot be denied that there are some problems with this solution. What
- if you need to change the definition of the global temp table in way that cannot
- be handled with ALTER TABLE? Having to restart the server to get the new definition
- in place may not be acceptable. One way to address is to refer to your
- process-keyed table through a synonym (a feature added in SQL 2005). In
- development, you let the synonym point to a local table, and only when you are
-ready for production you change the synonym to refer to the global temp table. If you need to change the table definition while system is live, you create the new version of the table in the local database and change the synonym and run it that way until the server is restarted.
Table-valued parameters (TVP) were introduced in SQL 2008. They permit you to pass a table variable as a parameter to a stored procedure. When you
- create your procedure, you don't put the table definition directly in the
- parameter list, instead you first have to create a table type
- and use that in the procedure definition. At first glance, it may seem like an extra step
- of work, but when you think of it, it makes very much sense: you will
-need to declare the table in at least two places, in the caller and in the callee. So why not have the definition in one place?
-
Here is a quick example of a table-valued parameter in play:
-
CREATE TYPE my_table_type AS TABLE(a int NOT NULL,
- b int NOT NULL)
-go
-CREATE PROCEDURE the_callee @indata my_table_type READONLY AS
- INSERT targettable (col1, col2)
- SELECT a, b FROM @indata
-go
-CREATE PROCEDURE the_caller AS
- DECLARE @data my_table_type
- INSERT @data (a, b)
- VALUES (5, 7)
- EXEC the_callee @data
-go
-
One thing to note is that a table-valued parameter always has an implicit default value of an empty table. So saying EXEC the_callee in this example would not be an error.
-
Table-valued parameters certainly seem like the definite solution, don't they? Unfortunately, TVPs have a very limited usage for the problems I'm discussing in this article. If you look closely at the procedure definition, you find the keyword READONLY. And that is not an optional keyword, but it is compulsory for TVPs. So if you want to use TVPs to pass data between stored procedures, they are usable solely for input-only scenarios. I don't know about you, but in almost all situations where I share a temp table or use
- a process-keyed table it's for input-output or
-output-only.
-
When I first heard that SQL 2008 was to have TVPs, I was really excited. And when I learnt that they were readonly, I was equally disappointed. During the beta of SQL 2008 I wrote an article, Why read-only table parameters is not enough, where I tried to whip up
- support for a Connect item in order to persuade the dev team to permit read-write TVPs when they are passed between stored procedures. The Connect item is still active, but with the release of SQL Server 2012 around the corner, the limitation is still there. Let's really hope that in the next version of SQL Server, we can use table parameters to pass data in all directions!
-
Note: While outside the scope for this article, table-valued parameters is still a welcome addition to SQL Server, since it makes it a lot easier to pass a set of data from client to server, and this context the READONLY restriction is not a big deal. I give an introduction how to use TVPs from ADO .Net in my article Arrays and Lists in SQL Server 2008.
-
INSERT-EXEC
-
Overview
-
INSERT-EXEC is a method that has been in the product for a long time. It's a method that is seemingly very appealing, because it's very simple to use and understand. Also, it permits you use the result of a stored procedure without any changes to it. Above we had the example with the procedure SalesByStore. Here is a how we can implement BigSalesByStore with INSERT-EXEC:
-
CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
-go
-CREATE PROCEDURE BigSalesByStore @storeid varchar(30),
- @qty smallint AS
-
- CREATE TABLE #SalesByStore(title varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL)
-
- INSERT #SalesByStore (title, qty)
- EXEC SalesByStore @storeid
-
- SELECT * FROM #SalesByStore WHERE qty >= @qty
-go
-EXEC SalesByStore '7131'
-EXEC BigSalesByStore '7131', 25
-go
-DROP PROCEDURE SalesByStore, BigSalesByStore
-
In this example, I receive the data in a temp table, but it could also be a permanent table or a table variable. (Except on SQL 2000, where you cannot use a table variable.)
-
It cannot be denied that this solution is simpler than the solution with sharing a temp table. So why then did I first present a more complex solution? Because when we peel off the surface, we find that this method has a couple of issues that are quite problematic.
Msg 8164, Level 16, State 1, Procedure BigSalesByStore, Line 8
-An INSERT EXEC statement cannot be nested.
-
This is a restriction in SQL Server and there is not much you can do about it. Except than to save the use of INSERT-EXEC until when you really need it. That is, when rewriting the callee is out of the question, for instance because it is a system stored procedure.
-
There is a Serious Maintenance Problem
-
Six months later there is a user requirement for the application function that uses the result set from SalesByStore that the column title_id should be displayed. A developer merrily adds the column to the result set. Unfortunately, any attempt to use the function calling BigSalesByStore now ends in tears:
-
Msg 213, Level 16, State 7, Procedure SalesByStore, Line 2
-Column name or number of supplied values does not match table definition.
-
What it says. The result set from the called procedure must match the column list in the INSERT statement exactly. The procedure may produce multiple result sets, and that's alright as long as all of them match the INSERT statement.
-
From my perspective, having spent a lot of my professional life with systems development, this is completely unacceptable. Yes, there are many ways to break code in SQL Server. For instance, a developer could add a new mandatory parameter to SalesByStore and that would also break BigSalesByStore. But most developers are aware the risks with such a change to an API and therefore adds a default value for the new parameter. Likewise, most developers understand that removing a column from a result set could break client code that expects that column and they would not do this without checking all code that uses the procedure. But adding a column to a result set seems so innocent. And what is really bad: there is no way to find out that there is a dependency – save searching through all the database code for calls.
-
Provided that you may alter the procedure you are calling, there are two ways to alleviate the problem. One is simply to add a comment in the code of the callee, so that the next developer that comes around is made aware of the dependency and hopefully changes your procedure as well.
-
Another way is to use table types (if you are on SQL 2008 or later).
- Here is an example:
-
CREATE TYPE SalesByStore_tbl AS TABLE
- (titleid varchar(80) NOT NULL PRIMARY KEY,
- qty smallint NOT NULL)
-go
-CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- DECLARE @ret SalesByStore_tbl
- INSERT @ret (titleid, qty)
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
- SELECT * FROM @ret
-go
-CREATE PROCEDURE BigSalesByStore @storeid varchar(30),
- @qty smallint AS
- DECLARE @data SalesByStore_tbl
- INSERT @data
- EXEC SalesByStore @storeid
- SELECT title, qty FROM @data WHERE qty >= @qty
-go
-EXEC SalesByStore '7131'
-EXEC BigSalesByStore '7131', 25
-go
-DROP PROCEDURE SalesByStore, BigSalesByStore
-DROP TYPE SalesByStore_tbl
-
It is interesting to note that this code makes virtue of two things that usually are bad practice, to wit SELECT * and INSERT with out an explicit column list. This is not a matter of sloppiness – it is essential here. If someone wants to extend the result set of SalesByStore, the developer has to change the table type, and BigSalesByStore will survive, even if the developer does not know about its existence.
-
You could argue that this almost like an output TVP, but don't forget the other problems with INSERT-EXEC – of which there are two more to cover.
-
The Procedure is Executed in the Context of a Transaction
-
Even if there is no explicit transaction started with BEGIN TRANSACTION, an INSERT statement constitutes a transaction of its own. (So that the statement can be rolled back in case of an error.) That includes any procedure called through INSERT-EXEC. Is this bad or not? In many cases, this is not much of an issue. But there are a couple of situations where this can cause problems:
-
-
The procedure performs an update intended to be quick. Locks are now held for a longer duration, which may cause contention problems.
-
The isolation level is REPEATABLE READ or SERIALIZABLE, as opposed to the default READ COMMITTED. This also causes locks to held longer than intended.
-
Some system procedures disagree to be called within a transaction.
-
If the procedure accesses a linked server, you now have a distributed transaction. Distributed transactions are sometimes difficult to get working. See more about this in the closing chapter on linked servers.
-
-
Rollback and Error Handling is Difficult
-
In my article on error handling, I suggest that you should always have an error handler like
-
BEGIN CATCH
- IF @@trancount > 0 ROLLBACK TRANSACTION
- EXEC error_handler_sp
- RETURN 55555
-END CATCH
-
The idea is that even if you do not start a transaction in the procedure, you should always include a ROLLBACK, because if you were not able to fulfil your contract, the transaction is not valid.
-
Unfortunately, this does not work well with INSERT-EXEC. If the called procedure executes a ROLLBACK statement, this happens:
-
Msg 3915, Level 16, State 0, Procedure SalesByStore, Line 9
-Cannot use the ROLLBACK statement within an INSERT-EXEC statement.
-
-
The execution of the stored procedure is aborted. If there is no CATCH handler anywhere, the entire batch is aborted, and the transaction is rolled back. If the INSERT-EXEC is inside TRY-CATCH, that CATCH handler will fire, but the transaction is doomed, that is, you must roll it back. The net effect is that the rollback is achieved as requested, but the original error message that triggered the rollback is lost. That may seem like a small thing, but it makes troubleshooting much more difficult, because when you see this error, all you know is that something went wrong, but you don't know what.
-
And, no, before you ask, there is no way to find out at run-time that you are called from INSERT-EXEC.
-Presumably, you have created the statement in @sql within your stored procedure, so it is unlikely that a change in the result set will go unnoticed. So from this perspective, INSERT-EXEC is fine. But the restriction that INSERT-EXEC can't nest remains, so if you use it, no one can call you with INSERT-EXEC. For this reason, in many cases it is better to put the INSERT statement inside
-the dynamic SQL.
-
There is also a performance aspect, that SQL
- Server MVP Adam Machanic has detailed in a
- blog post. The short
- summary is that with INSERT-EXEC, data does not go directly to the target table but bounces over a "parameter table",
- which incurs some overhead. Then again, if your target table is a temp table, and you put the INSERT inside the dynamic SQL, you
-may face a performance issue because of recompilation.
-
Occasionally, I see people who use INSERT-EXEC to get back scalar values from their dynamic SQL statement, which they typically invoke with EXEC(). In this case, you should not use INSERT-EXEC at all, but instead use sp_executesql
- which permits you to use OUTPUT parameters.Dynamic SQL is a complex topic, and if you are not acquainted
- with it, I recommend you to read my article The
- Curse and Blessings of Dynamic SQL.
-
Conclusion
-
INSERT-EXEC is simple to use, and if all you want to do is to grab a big result set from a stored procedure for further analysis ad hoc, it's alright.
-
But you should be very restrictive to use it in application code. Only use it when rewriting the procedure you are calling is completely out of the question. That is, the procedure is not part of your application: a system stored procedure or part of a third-party product. And in this case, you should make it a routine to always test your code before you take a new version of the other product in use.
If INSERT-EXEC shines in its simplicity, using the CLR is complex and bulky. It is not likely to be
-your first choice, and nor should it. However, if you are in the situation that you cannot change the callee, and nor it possible for you to use INSERT-EXEC because of any of its limitations, the CLR can be your last resort.
-
As a recap, here are the main situations where INSERT-EXEC fails you, and you would want to turn to the CLR:
-
-
The called procedure returns several result sets with different
- structures. This is true for many system procedures in SQL Server.
-
The called procedure cannot be called within an active transaction. See
- the final note in this section for an example.
The called procedure accesses a linked server, and you cannot get the distributed transaction to work.
-
-
The CLR has one more advantage over INSERT-EXEC: it is less sensitive to
- changes in the procedure you call. If a column is added to the
- result set of the procedure, your CLR procedure will not break.
-
The idea as such is simple: you write a stored procedure in a CLR language like C# or
- VB .NET that runs the callee and captures the result set(s) into a DataSet object.
- Then you write the data from the DataSet back to the table where you want the
-data. While simple, you need to write some code.
-
Let's have a look at an example. When you call the system procedure sp_helpdb
- for a specific database, it produces two result sets, of which the second result set
- lists the files for the database. Say that you want to gather this output for
- all databases on the server. You cannot use INSERT-EXEC
- due to the multiple result sets. To address this issue, I wrote a stored
- procedure in C# that you find in the file
- helpdb.cs.
- In the script
- helpdb.sql
- you can see how I employ it. The C# procedure first runs sp_helpdb with the
- DataAdapter.Fill method to get the data into a DataSet. It then iterates over
- the rows in the second DataTable in the DataSet and inserts these into the temp
-table created by the SQL script.
-
On SQL 2008 it is possible to simplify the solution somewhat with help of a table-valued parameter. I've written a
- second version of the helpdb procedure, available in the file
-
- helpdb-2008.cs, where I simply pass the DataTable to the INSERT statement with a TVP and insert all rows in
- one go. To achieve this, I need to create a table type.
-I like to highlight two more things in helpdb-2008:
-
-
Since I want the database name in the final output, I pass this as a
- separate parameter to the INSERT statement, as it is not included in the
- DataTable.
-
The first column from sp_helpdb is called name, and in the temp table
- I've changed that to logicalname to make the final output clearer. However, in the table
- type the column is called name, since it must match the names in the
- DataTable which gets its names from the output of sp_helpdb.
-
-
Undoubtedly, this solution requires more work. You need to write more code than with most other methods, and you get an assembly that you must somehow deploy. If you already are using the CLR in your database, you probably already have routines for dealing with assemblies. But if you are not, that first assembly you add to the database is quite of a step to take. A further complication is that the CLR in SQL Server is disabled by default. To enabled it, you (or the DBA) need to run:
-
EXEC sp_configure 'clr enabled', 1
-RECONFIGURE
-
Another issue is that this solution goes against best practices for using the CLR in SQL Server. First of all, data access from the CLR should be avoided, simply because T‑SQL is better equipped for this. But here we are talking about situations where we need to circumvent limitations in T‑SQL. Another violation of best practice is the use of the DataAdapter, DataTable and DataSet classes. This is something to be avoided, because it means that you have data in memory in SQL Server outside the buffer pool. Of course, a few megabytes is not an issue, but if you would read several gigabytes of data into a DataSet, this could have quite nasty effects for the stability of the entire SQL Server process.
-
The alternative is to use a plain ExecuteReader and insert the rows as they come, possibly buffering them in small sets of say 500 rows to improve performance. This is certainly a viable solution, but it makes deployment even more difficult. To wit, you cannot perform the INSERT statements on the context connection while the DataReader is running, so you would need to open a second connection and this requires that the assembly has the permission EXTERNAL_ACCESS. So for practical purposes, you would only go this road, if you are anxious that you will read too much data than what is defensible for a DataSet.
-
Note: Initially, I got this idea when SQL Server MVP Steve Jones tried to run
- DBCC SHRINKDATABASE from INSERT-EXEC to
- capture the result set that SHRINKDATABASE
- produces. However, this command cannot be run inside a transaction, so that did not
- work out. I suggested to him that the CLR could work, and when I tested it I
- found that it did ... on SQL 2008 only. On SQL 2005, my process was killed
- with an access violation (which means a bug in SQL Server), so in this particular case not
-even the last resort worked.
Just like INSERT-EXEC this is a method where you can use the called stored procedure as-is. The purpose of OPENQUERY and its cousin OPENROWSET is to
- permit you to run pass-through queries on linked servers. It can be very
-useful, not the least if you want to join multiple tables on the remote server and want to be sure that the join is evaluated remotely. Instead of accessing a remote server, you can make a loopback connection to your own server, so you can to say
-things like:
-
SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC sp_who') WHERE status = 'runnable'
-
If you want to create a table from the output of a stored procedure with SELECT INTO to save typing, this is the only method in the article that fits the bill.
-
-
So far, OPENQUERY looks very simple, but as this chapter moves on you will learn that OPENQUERY can be very difficult to use. Moreover, it is not aimed at improving performance. It may save you from rewriting your stored procedure, but most likely you will have to put in more work overall – and in the end you get a poorer solution. While I'm not enthusiastic over INSERT-EXEC, it is still a far better choice than OPENQUERY.
-
Setup
-
In the example, LOCALSERVER may look like a keyword, but it is only name. This is how you define it:
To create a linked server, you must have the permission ALTER ANY SERVER, or
- be a member of any of the fixed server roles sysadmin or setupadmin. Instead of SQLOLEDB, you can specify SQLNCLI, SQLNCLI10 or SQLNCLI11 depending on your version of SQL Server. SQL Server seems to use the most recent version of the provider anyway.
-
Implications of Using a Loopback Connection
-
It's important to understand that OPENQUERY opens a new connection to SQL Server. This has some implications:
-
-
The procedure that you call with OPENQUERY cannot refer temp tables
- created in the current connection.
-
The new connection has its own default database (defined with sp_addlinkedserver, default is master), so all object
- specifications must include a database name.
-
If you have an open transaction and you are holding locks when you call OPENQUERY, the called procedure can not access what you lock. That is, if
- you are not careful you will block yourself.
-
Connecting is not for free, so there is a performance penalty.
-
There is also a performance penalty for passing the data out from SQL Server and back. Even if there is no network involved, data is copied twice extra compared to a plain SELECT query. This can be costly if the result set is big.
-
-
ANSI Settings
-
The settings ANSI_NULLS and ANSI_WARNINGS must be ON for queries
- involving linked servers. Thankfully, these setting are also on by default in most contexts. There are mainly two exceptions: 1) very old client APIs like DB-Library. 2) If you are still on SQL 2000, beware that if you create stored procedures from Enterprise Manager, they will be created with ANSI_NULLS OFF, and this is a setting that is saved with the procedure and overrides the setting for the connection. (If you use Query Analyzer to create your procedures, the issue does not arise.) It's not very likely that you will run into this issue, but if you see the error message
-
Msg 7405, Level 16, State 1, Line 1
-Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options
-to be set for the connection. This ensures consistent query semantics.
-Enable these options and then reissue your query.
-
you will need to investigate where the bad setting is coming from.
-
The Query Parameter
-
The second parameter to OPENQUERY is the query to run on the remote server, and you may expect to be able to use a variable here, but you cannot. The query string must be a constant, since SQL Server needs to be able to determine the shape of the result set at compile time. This means that you as soon your query has a parameter value, you need to use dynamic SQL. Here is how to implement BigSalesByStore with OPENQUERY:
What initially seemed simple to use, is no longer so simple. What I did not say above is there are two reasons why we need dynamic SQL here. Beside the parameter @storeid, there is also the database name. Since OPENQUERY opens a loopback connection, the EXEC statement must include the database name. Yes, you could hardcode the name, but sooner or later that will bite you, if nothing else the day you want to restore a copy of your database on the same server for test purposes. From this follows that in practice, there are not many situations in application code where you can use OPENQUERY without having to use dynamic SQL.
-
The code certainly requires some explanation. The function quotestring is a helper, taken from my article on dynamic SQL. It encloses a string in single quotes, and doubles any quotes within it to conform to the T‑SQL syntax. The problem with writing dynamic SQL which involves OPENQUERY is that you get at least three levels of nested strings, and if you try to do all at once, you will find yourself writing code which has up to eight consecutive single quotes that you or no one else can read. Therefore it is essential to approach the problem in a structured way like I do above. I first form the query on the remote server, and I use quotestring to embed the store id. Then I form the SQL string to execute locally, and again I use quotestring to embed the remote query. I could also have embedded @qty in the string, but I prefer to adhere to best practices and pass it as a parameter to the dynamic SQL string, As always when I use dynamic SQL, I include a @debug parameter, so that I can inspect the statement I've generated.
-
Note: the example is written for SQL 2005 and later. If you are on SQL 2000, you need to replace all occurrences of MAX with 4000.
-
The Battle with FMTONLY ON
-
To be able to compile a query that includes
-OPENQUERY, SQL Server must retrieve metadata from the linked server to determine the shape of the result set for the pass-through query. SQL Server
- makes all connections to the linked server through OLE DB, and the way OLE DB
- determines metadata on SQL Server up to SQL 2008 is to run the command batch preceded by SET FMTONLY ON.
- When FMTONLY is ON, SQL
- Server does not execute any data-retrieving statements, but only sifts through the statements to return metadata about the
- result sets. FMTONLY can be a source for confusion in more than one way. One situation is a procedure that creates a temp table: you will get an error message,
-since the table never gets created in FMTONLY mode. Here is one example:
-
SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC msdb..sp_helpindex sysjobs')
-
On SQL 2008, this results in:
-
Msg 208, Level 16, State 1, Procedure sp_helpindex, Line 104
-Invalid object name '#spindtab'.
-
(The actual error message is different on about every version of SQL Server.)
-
This happens because the CREATE TABLE statement for the temp table is not executed. (Note that this is different for table variables. Since they are declared entities, they exist from the moment the procedure starts executing, FMTONLY or not.) Now when we know why this error occurs, we can spot a workaround:
-
SELECT * FROM OPENQUERY(LOCALSERVER,
- 'SET FMTONLY OFF EXEC msdb..sp_helpindex sysjobs')
-
That is, we override the FMTONLY ON setting. But beware! This means that the procedure is executed twice, so
- there certainly is a performance cost. Moreover, if the procedure performs updating
- actions, these are also performed twice which is likely to be the completely wrong thing
-to do. While I mention this trick here, I strongly recommend against using it, particularly in production code. This becomes even more emphasised with the release of SQL Server 2012: on SQL 2012, SET FMTONLY OFF has no effect at all! I will come back to why and what the alternatives are.
-
If you absolutely want to use a stored procedure that uses a temp table, here is a different trick. This definitely counts as one of the most obscure pieces of T‑SQL I've ever come up with:
-
CREATE PROCEDURE temp_temp_trick AS
- DECLARE @fmtonlyon int
- SELECT @fmtonlyon = 0
- IF 1 = 0 SELECT @fmtonlyon = 1
- SET FMTONLY OFF
- CREATE TABLE #temp(...)
- IF @fmtonlyon = 1 SET FMTONLY ON
- -- Rest of the code goes here.
-
The reason that this works is that when FMTONLY is in effect, IF conditions are not evaluated, but both branches of IF ELSE are "executed". And while queries and CREATE TABLE statements are not performed in FMTONLY mode, variable assignments are. This way we lure SQL Server to create the temp table at compile-time, but the full procedure is not executed. This trick is arguably better than putting SET FMTONLY OFF in the call to OPENQUERY. But it still does not work with SQL 2012, so it is nothing you should put in code that is supposed to live for a couple of years. And obviously, this is not an option, if you cannot change the procedure you are calling.
-
Another common reason you get problems with FMTONLY is that the result set is produced in dynamic SQL. Again, this prevents SQL Server from determining the metadata. The famous, but undocumented, system stored procedure sp_who2 uses dynamic SQL to size the columns of the result set. On SQL 2008 the query
-
SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC sp_who2')
-results in:
-
Msg 7357, Level 16, State 2, Line 1
-Cannot process the object "EXEC sp_who2". The OLE DB provider "SQLNCLI10"
-for linked server "LOCALSERVER" indicates that either the object has no columns
-or the current user does not have permissions on that object.
-
Again, the workaround with SET FMTONLY OFF can be applied if you are on SQL 2008 or earlier. (Except that in this particular example it still does not work on SQL 2005 and SQL 2008 because sp_who2 returns two columns called SPID.) The same caveats apply: the procedure is executed twice, and it does not work on SQL 2012. So don't go there.
-
Metadata Retrieval in SQL 2012
-
In SQL 2012, Microsoft have scrapped SET FMTONLY ON which never did a good job; there are several other issues with it, that I have not covered here. Instead they use the new stored procedure sp_describe_first_result_set which is a more robust way to determine metadata, why the trick with SET FMTONLY OFF is no longer applicable. (To clarify: SET FMTONLY ON still works in SQL 2012 to support calls from legacy clients, and SQL 2012 also uses SET FMTONLY ON for linked servers running earlier versions of SQL Server. But for a loopback connection, SQL 2012 only uses sp_describe_first_result_set.)
-
While this procedure avoids many of the problems with SET FMTONLY ON, you will still get an error if your procedure uses a temp table or dynamic SQL. The good news is that Microsoft now offers a method to describe the result set. You can say:
-
SELECT * FROM OPENQUERY(LOCALSERVER,
- 'EXEC msdb..sp_helpindex sysjobs
- WITH RESULT SETS ((index_name sysname,
- index_description nvarchar(500),
- index_keys nvarchar(500)))')
-
That is, the new WITH RESULT SETS clause permits you to declare how the result set from the stored procedure looks like. SQL Server validates the actual result set against the description, and if there is an inconsistency, you will get an error. Pay attention to the syntax: the column list is enclosed in two pair of parentheses.
-
Rather than specify a list of columns, you can also specify the name of a table, view, table-valued function or a table type. Please refer to the topic on EXECUTE in Books Online for full details on the WITH RESULT SETS clause.
-
If you want to know how the result set from the stored procedure you are calling looks like, you can say:
-
EXEC sp_describe_first_result_set N'your_sp'
-
It has to be admitted that it takes some work to translate the output to a column list for WITH RESULT SETS. And obviously, if you wanted to use SELECT INTO with OPENQUERY to save your from typing a CREATE TABLE statement, this was not what you wanted.
-
The Effect of DML Statements
-
Yet a problem with OPENQUERY is demonstrated by
-this script:
-
CREATE TABLE nisse (a int NOT NULL)
-go
-CREATE PROCEDURE silly_sp @x int AS
- --SET NOCOUNT ON
- INSERT nisse VALUES (@x)
- SELECT @x * @@trancount
- SELECT @x * 3
-go
-SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC tempdb.dbo.silly_sp 7')
-go
-SELECT * FROM nisse
-go
-
The script yields the same errors as for sp_who2, saying that there are no columns.
-The reason for this message is that the first "result set" is the
-rows affected
-message generated by the INSERT statement, and this message lures OPENQUERY to think that there were no columns in the result set. Adding SET NOCOUNT ON to the procedure resolves this
-issue. You could also add SET NOCOUNT ON the command string you pass to OPENQUERY. (And in difference to tricking with SET FMTONLY ON, this is a perfectly valid thing to do.)
-
Implicit Transactions
-
When SQL Server executes the query
-for real, the OLE DB provider first issues SET IMPLICIT_TRANSACTIONS ON. With this setting
- SQL Server starts a transaction when an INSERT, UPDATE or DELETE statement is
- executed. (This also applies to a few more statements, see Books Online for
- details.) This can give some surprises. For instance, take the script above.
-Once SET NOCOUNT ON is in force, this is the output:
We get back '7' from the call to silly_sp, which indicates
- that @@trancount is 1, and there is thus an open transaction, despite there
- is no BEGIN TRANSACTION in the procedure. (We don't get the '21' that we get
- when we execute silly_sp directly, because with OPENQUERY, we only get one
- result set.) You also see that when we SELECT directly from nisse after
- the call to OPENQUERY, that the table is empty. This is because the implicit
- transaction was rolled back.
-
Final Words
-
As you have seen, at first OPENQUERY seems very simple to use, but the stakes quickly gets higher. If you are still considering to use OPENQUERY after having read this section, I can only wish you good luck and I hope that you really understand what you are doing. OPENQUERY was not intended for
- accessing the local server, and you should think twice before you use
-it that way.
XML is a solution that aims at the same spot as sharing a temp table and process-keyed tables. That is, the realm of general solutions without restrictions, to the price of a little more work. While SQL 2000 has support for XML, if you want to use XML to pass data between stored procedures, you need to have at least SQL 2005.
-
Constructing the XML
-
We will look at a version of SalesByStore and BigSalesByStore which uses XML, but since this is a little too much to digest in one go, we first only look at SalesByStore_core to see how we construct the XML:
-
CREATE PROCEDURE SalesByStore_core @storeid varchar(30),
- @xmldata xml OUTPUT AS
- SET @xmldata = (
- SELECT t.title, s.qty
- FROM sales s
- JOIN titles t ON t.title_id = s.title_id
- WHERE s.stor_id = @storeid
- FOR XML RAW('SalesByStore'), TYPE)
-go
-
In the previous version of SalesByStore_core, we stored the data from the result in a temp table. Here we use FOR XML RAW to generate an XML document that we save to the output parameter @xmldata.
-
This is how the resulting XML document may look like:
-
<SalesByStore title="Is Anger the Enemy?" qty="20" />
-<SalesByStore title="The Gourmet Microwave" qty="25" />
-<SalesByStore title="Computer Phobic AND Non-Phobic Individuals: Behavior Variations" qty="20" />
-<SalesByStore title="Life Without Fear" qty="25" />
-<SalesByStore title="Prolonged Data Deprivation: Four Case Studies" qty="15" />
-<SalesByStore title="Emotional Security: A New Algorithm" qty="25" />
-
FOR XML has three more options beside RAW: AUTO, ELEMENTS and PATH, but for our purposes here, RAW is the simplest to use. You don't have to specify a name for the elements; the default in this case will be row, but I would suggest that using a name is good for clarity.
-
The keyword TYPE ensures that the return type of the SELECT query is the xml data type; without TYPE the type would be nvarchar(MAX). TYPE is not needed here, since there will be an implicit conversion to xml anyway, but it can be considered good practice to include it. Except... there is a bug in SQL 2008 which makes XML documents created with TYPE to be less efficient.
-
Converting the XML Data Back to Tabular Format
-
Since SalesByStore should work like it did originally, it has to convert the data back to tabular format, a process known as shredding. Here is how the XML version looks like:
-
CREATE PROCEDURE SalesByStore @storeid varchar(30) AS
- DECLARE @xmldata xml
- EXEC SalesByStore_core @storeid, @xmldata OUTPUT
-
- SELECT T.c.value('@title', 'varchar(80)') AS title,
- T.c.value('@qty', 'smallint') AS qty
- FROM @xmldata.nodes('SalesByStore') AS T(c)
-go
-
To shred the document, we use two of the xml type methods. The first is nodes which shreds the documents into fragments of a single element. That is, this part:
-
FROM @xmldata.nodes('SalesByStore') AS T(c)
-
The part T(c) defines as alias for the one-column table as well as an alias for the column. To get the values out of the fragments, we use another xml type
- method, value, to get the individual values out of the fragment. The value method
- takes two arguments whereof the first addresses the value we want to extract, and the
- second specifies the data type. The first parameter is a fairly complex story, but as
- long as you follow the example above, you don't really need to know any more. Just keep in mind that you must put an @ before the attribute names, else you would be addressing an element. In the XML section of my article Arrays
- and Lists in SQL Server 2005 and Beyond, I have some more information about nodes and value.
-
To make the example complete, here is the XML version of BigSalesByStore. To avoid having to repeat the call to value in the WHERE clause, I use a CTE (Common Table Expression).
-
CREATE PROCEDURE BigSalesByStore @storeid varchar(30),
- @qty smallint AS
- DECLARE @xmldata xml
- EXEC SalesByStore_core @storeid, @xmldata OUTPUT
-
- ; WITH SalesByStore AS (
- SELECT T.c.value('@title', 'varchar(80)') AS title,
- T.c.value('@qty', 'smallint') AS qty
- FROM @xmldata.nodes('SalesByStore') AS T(c)
- )
- SELECT title, qty
- FROM SalesByStore
- WHERE qty >= @qty
-go
-
Input and Output
-
In this is example the XML document is output-only, but it's easy to see that the same method can be used for input-only scenarios. The caller builds the XML document and the callee shreds it back to a table.
-
What about input-output scenarios like the procedure ComputeTotalStoreQty? One possibility is of course that the callee shreds the data into a temp table, performs its operation, and converts the data back to XML. A second alternative is that the callee modifies the XML directly using the xml type method modify. I will spare you from an example of this, however, as it unlikely that you would try it, unless you already are proficient in XQuery. A better alternative may be to mix methods: use a table-valued parameter for input and only use XML for output.
-
Parent-child Data
-
The result set in the example is from a single table, but what if we have some form of parent/child-relationship?
- Say that we want to return the name of all authors, as well as all the titles they have written. With temp tables or
- process-keyed tables, the natural solution would be to
- use two tables (or actually three, since in pubs there is a many-to-many
- relationship between titles and authors, but I overlook this here.) But since
- XML is hierarchical, it would be more natural to put everything in a single XML
- document, and here is a query to do this:
-
SELECT a.au_id ,
- a.au_lname,
- a.au_fname ,
- (SELECT t.title
- FROM pubs..titleauthor ta
- JOIN pubs..titles t ON t.title_id = ta.title_id
- WHERE a.au_id = ta.au_id
- FOR XML RAW('titles'), TYPE)
-FROM pubs..authors a
-FOR XML RAW('authors'), TYPE
-
-Rather than a regular join query, I use a subquery for the titles, because I
-only want one node per author with all titles. With a join, I get one author
-node for each title, so that authors with many books appear in multiple nodes.
-The subquery uses FOR XML to create a nested XML document, and
-this time the
-TYPE option is mandatory, since without it the nested XML data would be included as a plain string.
-
- To retrieve the
-titles from the XML document, you could use this query:
-
SELECT au_id = A.item.value('@au_id', 'varchar(11)'),
- title = T.item.value('@title', 'varchar(80)')
-FROM @x.nodes('/authors') AS A(item)
-CROSS APPLY A.item.nodes('titles') AS T(item)
-
The first call to nodes gives you a fragment per authors node, and then you use CROSS APPLY to dig down to the titles node. For a little longer discussion on this way of shredding a hierarchical XML document, see the XML section of my article Arrays
-and Lists in SQL Server 2005 and Beyond.
-
Assessing the Method
-
So far the technique to use this method. Let's now assess it. If you have never worked with XML in SQL Server, you are probably saying to yourself I will never use that!. And one can hardly blame you. This method is like pushing the table camel through the needles eye of the parameter list of a stored procedure. Personally, I think the method spells k-l-u-d-g-e. But it's certainly a matter of opinion. I got a mail from David Walker, and he
-went as far as saying this is the only method that really works.
-
And, that cannot be denied, there are certainly advantages with XML over about all the other methods I have presented here. It is less contrived than using the CLR, and it is definitely a better option than OPENQUERY. You are not caught up with
-the limitations of table-valued functions. Nor do you have any of the issues with INSERT-EXEC. Compared to
- temp tables and process-keyed tables, you don't have to be worried about recompilation or that programmers fail to clean up a process-keyed table after use.
-
- When it comes to performance, you get some cost for building the XML document
-and shredding it shortly thereafter. Then again, as long as the amount of data is small, say less than 200 KB, the data will stay in memory and there is no logging involved like when you use a table of any sort. Larger XML documents will spill to disk, though. A general caveat is that inappropriate addressing in a large XML
-document can be a real performance killer, so if you expect large amounts of data, you have to be careful. (And these issues can appear with sizes below 200 KB.)
-
Besides the daunting complexity, there are downsides with XML from a robustness perspective. XML is more sensitive to errors. If you make
- a spelling mistake in the first argument to value, you will silently get NULL
-back, and no error message. Likewise, if you get the argument to nodes
- wrong, you will simply get no rows back. The same problem arises if you change a
- column alias or a node name in the FOR XML query, and forget to update a caller. When you use a process-keyed table or a temp
-table you will get an error message at some point, either at compile-time or at run-time.
-
Another weak point is that you have to specify the data type for each column in the call to value, inviting you to make the mistake to use different data types for the same value in different procedures. This mistake is certainly possible when use temp tables as well, although copy-and-paste are easier to apply on the latter. With a process-keyed table it cannot happen at all.
-
One thing I like with tables is that they give you a description of the data you are passing around; this is not the least important when many procedures are using the same process-keyed table. This is more difficult to achieve with XML. You could use schema collections for the task, but you will not find very many SQL Server DBAs who speak XSD fluently. Also, schema-bound XML tends to incur a performance penalty in SQL Server.
-
For these reasons, I feel that using a temp table or a process-keyed table are better choices than XML. And while I find XML an overall better method than INSERT-EXEC or OPENQUERY, these methods have the advantage that you don't have to change the callee. So that kind of leaves XML in nowhere land. But as they say, your mileage may vary. If you feel that XML is your thing, go for it!
This method was suggested to me by Peter Radocchia. Cursor variables were
- introduced in SQL 7, but I suspect that many SQL developers are at most only
- dimly aware of their existence. I never use them myself. Here is an example
-of how you use them to bring the result set from one procedure to another:
-
CREATE PROCEDURE get_cursor @cursor CURSOR VARYING OUTPUT AS
- SET @cursor = CURSOR STATIC FOR
- SELECT au_id, au_lname, au_fname FROM pubs..authors
- OPEN @cursor
-go
-CREATE PROCEDURE caller AS
- DECLARE @cursor CURSOR
- DECLARE @au_id char(11),
- @au_fname varchar(40),
- @au_lname varchar(40)
- SET NOCOUNT ON
- EXEC get_cursor @cursor OUTPUT
- WHILE 1 = 1
- BEGIN
- FETCH NEXT FROM @cursor into @au_id, @au_lname, @au_fname
- IF @@fetch_status <> 0
- BREAK
- PRINT 'Au_id: ' + @au_id + ', name: ' + @au_fname + ' ' + @au_lname
- END
- DEALLOCATE @cursor
-go
-EXEC caller
-go
-DROP PROCEDURE caller, get_cursor
-
Note that the cursor is STATIC. Static cursors are much preferable over dynamic cursors, the default cursor type, since the latter essentially evaluates the query for every FETCH. When you use a static cursor, the result set of the SELECT statement is saved into a temp table, from where FETCH retrieves the data.
-
I will have to admit that I see little reason to use this method. Just like
- INSERT-EXEC, this method requires an exact match between the caller and the
- callee for the column list. And since data is processed row by row,
- performance is likely to take a serious toll if there are any volumes.
If your procedures are on different servers, the level of difficulty rises steeply. There are many restrictions with linked servers, and several of the methods I have presented cannot be used at all. Ironically, some of the methods that I have discouraged you from, suddenly step up as the better alternatives. One reason for this is that with linked servers, things are difficult anyway.
-
It is somewhat easier to retrieve data from a procedure on a linked server than passing data to it, so let's look at output first. If you have an input-output scenario, you should probably look into mixing methods.
-
Output
-
If all you want to do is to get data back, these methods works:
-
OUTPUT parameters – but only for data types that
-are 8000 bytes or less. That is, you cannot retrieve the value of output parameters that are
-varchar(MAX) etc.
-
INSERT-EXEC – INSERT-EXEC works fine with linked servers. Actually even better than with local procedures, since if the procedure you call uses INSERT-EXEC, this will not matter. The only restriction is that the result set must not include types that are not supported in distributed queries, for instance xml. ((n)varchar(MAX) is OK.) The fact that INSERT-EXEC starts a transaction can cause a real nightmare, since the transaction now will be a distributed transaction and this requires that you configure MSDTC (Microsoft Distributed Transaction Coordinator) correctly. If both servers are in the same domain, it often works out of the box. If they are not, for instance because you only have a workgroup, it may be impossible (at least I have not been able to). On SQL 2008 and later, you may be able to escape the problem by setting the option remote proc transaction promotion for the linked server to false. (Note that this affects all uses of the linked server, and there may be situations where a distributed transaction is desirable.)
-
OPENQUERY – since OPENQUERY is a feature for linked
-servers in the first place, there is no difference to what I discussed above. It is still difficult with lots of pitfalls, but the land of linked servers is overall difficult. Nevertheless, INSERT-EXEC will in many cases be simpler to use. But with OPENQUERY you don't have to bounce the remote data over a table, and if result set of the remote procedure is extended with more columns, your code will not break.
-
Using the CLR – Using the CLR for linked servers is interesting, because the normal step would be to connect to the remote server directly, and bypass the local definition of linked servers – and thereby bypass all restrictions with regards to data types. When you make a connection to a remote server through the CLR, the default is enlist into the current transaction, which means that you have to battle MSDTC. However, you can easily escape this battle by adding enlist=false in the connection string to the remote server. This works on all versions of SQL Server from SQL 2005 and on. When using the CLR to access a remote server, there are no obstacles with using ExecuteReader and store the data into a local table as they come, since you are using two different connections. For a CLR procedure to be able to access a remote server, the assembly must be installed with the permission EXTERNAL_ACCESS.
-
XML – You cannot use the xml data type in a call to a remote stored procedure. However, you can make the OUTPUT parameter to be varchar(8000) and return the XML document that way – if it fits.
-
The other methods do not work, and that includes user-defined functions.
-You cannot call a user-defined function on a linked server.
-
Input
-
If you want to pass a large amount of data for input over a linked server, there are
-three possibilities. Or three kludges if you like.
-
XML might be the easiest. The xml data type is not supported in calls to remote procedures, so you need to convert the XML document to
-nvarchar(MAX) or varbinary(MAX). The parameter on the other side
-can still be xml.
-
You cannot pass a table-valued parameter to a remote stored procedure. But you could have a CLR stored procedure that connects to the remote server and passes the TVP directly; as noted above, the assembly needs to have the permission EXTERNAL_ACCESS. You cannot pass a TVP to a CLR stored procedure from T‑SQL, so you would either have to pass the data as XML to the CLR procedure, or the CLR procedure would have read the data from a (temp) table.
-
The last alternative is really messy. The caller stores the data in a
- process-keyed table locally and then calls the remote
- procedure, passing the process-key. The remote procedure then calls back to the
- first server and either selects directly from the process-keyed table, or calls a
-procedure on the source server with INSERT-EXEC. For an input-output scenario, the callee could write data back directly to the process-keyed table.
The issue about using SET FMTONLY ON is something that I learnt from Umachandar Jayachandran
- at Microsoft. SQL Server MVP Tony Rogerson pointed out
-that a process-keyed table should have a clustered index on the process key. Simon Hayes suggested some clarifications.
- Peter Radocchia suggested the cursor method. Richard St-Aubin and Wayne Bloss both suggested interesting approaches when sharing temp tables.
-Thanks
-to SQL Server MVP Iztik Ben-Gan for making me aware of global temp tables and
-start-up procedures. Sankar Reddy pointed out to me that my original suggestion
-for XML as a solution for linked servers was flawed. Greg Borota pointed out that
-an old
-leftover from SQL 2000 still was in the text. SQL Server MVP Adam Machanic made some
-interesting revelations about INSERT-EXEC with dynamic SQL.
-David Walker encouraged me to write more in depth on XML,
-and SQL Server MVP
-Denis Gobo gave me a tip on that part. Jay Michael pointed out an error in the section on table parameters.
-
If you have suggestions for improvements, corrections on topic, language or
- formatting, please mail me at
- esquel@sommarskog.se. If you have technical questions that any knowledgeable
-person could answer, I encourage you to post to the Transact-SQL forum on MSDN/Technet or any other SQL forum you frequent.
2013-11-02 – Added a subsection about process-keyed tables how they could be implemented with non-durable Hekaton tables in SQL 2014.
-
2013-03-24 – Modified the subsection A Maintenance Problem to include a good suggestion from Wayne Bloss about using a table type as the base for a shared temp table.
-
2012-07-18 – There were a few errors and mumblings in the paragraph about using the CLR for linked servers that I have corrected. Particularly I incorrectly said that you would not be enlisted in any transaction unless you specify this. The reverse applies: by default you are enlisted, but you can include enlist=true to the connection string.
-
2012-05-11 – Added a note about SQL Server Data Tools (SSDT) and sharing temp tables.
-
2011-12-31 – I have performed a general overhaul of the article in hope to make things clearer. Particularly, there are now more complete examples for the various techniques. In terms of new technical content I have updated the article for SQL 2012, which mainly affects OPENQUERY, since the trick with SET FMTONLY OFF does not work on SQL 2012. I have also expanded the closing chapter on linked servers a bit.
-
2010-01-10 – Extended the XML section with more
- examples and a deeper discussions on pros and cons. Updated the section
- table parameters for the fact that SQL 2008 is no
- longer in beta, and fixed error in code sample. Modified the section on
- OPENQUERY to explain why FMTONLY ON exists more
- accurately.
-
2009-06-29 – Added a brief discussion on performance about INSERT-EXEC with dynamic SQL, and a reference
-to a blog post from SQL
-Server MVP Adam Machanic.
-
2009-05-18 – The section on INSERT-EXEC said that it does not work with table variables, which is right
-on SQL 2000 only.
-
2008-08-16 – Added a trick for sharing temp tables, suggested by Richard St-Aubin.
-
2008-06-06 – Added a section on linked
-servers, and removed the note on linked servers in the
-XML section, since it was not very accurate.
-
2008-03-03 – Added a section on how could use the CLR
-when INSERT-EXEC fails you.
-Reviewed the section on XML anew, pointing out that it's
-useful when working with linked servers.
2005-12-19 – Article revised to cover SQL 2005, and added
- section on cursor variables.
-
2005-03-27 – Various minor clarifications on suggestion from Simon
- Hayes. The bug about INSERT-EXEC and IMPLICIT_TRANSACTIONS is now fixed in
- SQL 2000 SP4 and SQL 2005.
\ No newline at end of file
diff --git a/Articles/README.md b/Articles/README.md
index cbc18ed8..b9f58c6e 100644
--- a/Articles/README.md
+++ b/Articles/README.md
@@ -1,37 +1,2910 @@
-# Must read Microsoft SQL Server articles
+# Microsoft SQL Server Articles
+Articles types:
+ - **[AZ]** Azure Articles
+ - **[AMZ]** Amazon AWS Articles
+ - **[B]** Backup Articles
+ - **[BENCH]** Benchmarking Articles
+ - **[IDX]** Index Articles
+ - **[CLR]** [SQL Server Common Language Runtime Integration](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/sql-server-common-language-runtime-integration) Articles
+ - **[CHP]** Checkpont Articles
+ - **[COR]** Corruption Articles
+ - **[DAX]** Data Analysis Expressions Articles
+ - **[DBA]** DBA Articles
+ - **[DEV]** Developers Articles
+ - **[DM]** Database Mail
+ - **[DBCC]** DBCC commands
+ - **[DS]** Dynamic SQL
+ - **[MG]** Migration Articles
+ - **[J]** Jobs Articles
+ - **[P]** Performance Articles
+ - **[PS]** Powershell Articles
+ - **[QS]** Query Store Articles
+ - **[R]** R Language
+ - **[SEC]** SQL Server Security Articles
+ - **[SSIS]** [SQL Server Integration Services](https://docs.microsoft.com/en-us/sql/integration-services/sql-server-integration-services)
+ - **[V]** Visualization Articles
+ - **[X]** XML, JSON, YAML, HTML Articles
+ - **[XE]** [Extended events](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events)
-## [Dynamic Search Conditions in T-SQL](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/Dynamic%20Search%20Conditions%20in%20T-SQL.htm)
+| Title | Author | Modified | Type |
+|-------------------------------------------------------------------------------------------------------------------------|------------------------------------------|------------|-------------|
+| [Understanding how SQL Server executes a query] | Remus Rusanu | 2016-04-15 | |
+| [SQL Server Index Design Guide] | Microsoft | 1753-01-01 | [IDX] |
+| [SQL Server 2012 Security Best Practices - Microsoft] | Bob Beauchemin | 2012-01-15 | [SEC] |
+| [Help, my database is corrupt. Now what?] | Gail Shaw | 2010-04-23 | [COR] |
+| [What to Do When DBCC CHECKDB Reports Corruption] | Brent Ozar | 2016-05-19 | [COR] |
+| [Troubleshooting SQL Server CPU Performance Issues] | Joe Sack | 2013-05-28 | [P] |
+| [Knee-Jerk Performance Tuning : Incorrect Use of Temporary Tables] | Paul Randal | 2016-04-06 | [P] |
+| [High Performance T-SQL using Code Patterns] | Dwain Camps | 2015-05-27 | |
+| [SQL Server Database Corruption Repair] | Steve Stedman | 2015-08-26 | [COR] |
+| [Basic SQL Server Performance Troubleshooting For Developers] | Tony Davis | 2015-08-14 | [P] |
+| [The Curse and Blessings of Dynamic SQL] | Erland Sommarskog | 2015-04-14 | [DS] |
+| [Dynamic Search Conditions in T-SQL] | Erland Sommarskog | 2016-10-29 | |
+| [Slow in the Application, Fast in SSMS] | Erland Sommarskog | 2013-12-18 | |
+| [How to share data between stored procedures] | Erland Sommarskog | 2013-11-02 | |
+| [Arrays and Lists in SQL Server 2008] | Erland Sommarskog | 2016-08-21 | |
+| [Packaging Permissions in Stored Procedures] | Erland Sommarskog | 2011-12-31 | |
+| [Error and Transaction Handling in SQL Server Part One – Jumpstart Error Handling] | Erland Sommarskog | 2015-05-03 | [DBA][DEV] |
+| [Error and Transaction Handling in SQL Server Part Two – Commands and Mechanisms] | Erland Sommarskog | 2019-09-03 | [DBA][DEV] |
+| [Error and Transaction Handling in SQL Server Part Three – Implementation] | Erland Sommarskog | 2017-05-03 | [DBA][DEV] |
+| [Using the Bulk-Load Tools in SQL Server] | Erland Sommarskog | 2016-12-08 | |
+| [Using Table-Valued Parameters in SQL Server and .NET] | Erland Sommarskog | 2016-12-08 | |
+| [SQL Server Columnstore Articles] | Niko Neugebauer | 2016-05-09 | |
+| [Documentation: It Does not Suck!] | Jes Schultz Borland | 2013-01-15 | |
+| [The Data Loading Performance Guide] | Thomas Kejser, Peter Carlin, Stuart Ozer | 2009-01-15 | |
+| [Stop Shrinking Your Database Files. Seriously. Now.] | Brent Ozar | 2009-08-19 | |
+| [How to shrink a database in 4 easy steps] | Andy Mallon | 2016-04-28 | |
+| [Introduction to the Index Operational Statistics Dynamic Management Function] | Tim Ford | 2016-04-26 | [IDX] |
+| [Updating Statistics in SQL Server: Maintenance Questions & Answers] | Kendra Little | 2016-04-18 | |
+| [Overcoming Variable Limitations in SQLCmd Mode] | Robert L Davis | 2015-11-23 | |
+| [Contents of a Run Book] | Microsoft | 2002-11-12 | |
+| [Compressed and Encrypted Backups on the Cheap] | Randolph West | 2015-04-19 | [B] |
+| [Curing Data-Obesity in OLTP Databases] | Feodor Georgiev | 2015-02-06 | |
+| [Understanding GRANT, DENY, and REVOKE in SQL Server] | K. Brian Kelley | 2013-02-27 | |
+| [Monitor SQL Server Transaction Log File Free Space] | Mike Eastland | 2015-05-12 | |
+| [Dynamically Query a 100 Million Row Table-Efficiently] | Gary Strange | 2016-05-27 | |
+| [Parallel Execution Plans – Branches and Threads] | Paul White | 2013-10-07 | [DBA][DEV] |
+| [Nasty Fast PERCENT_RANK] | Alan Burstein | 2016-06-07 | |
+| [Looking at VIEWs, Close Up] | Joe Celko | 2016-05-10 | |
+| [SQL Server 2016: It Just Runs Faster] | Thomas LaRock | 2016-06-01 | |
+| [TSQL JOIN Types Poster] | Steve Stedman | 2015-05-28 | |
+| [It is Hard To Destroy Data] | Michael J Swart | 2015-05-20 | |
+| [How to transfer logins and passwords between instances of SQL Server] | Microsoft | 2013-12-07 | |
+| [Finding File Growths with Extended Events] | Andy Galbraith | 2016-06-13 | [XE] |
+| [Questions You Should Ask About the Databases You Manage] | Brent Ozar | 2016-06-16 | |
+| [Clustered Indexes in SQL Server] | Derik Hammer | 2016-06-22 | [IDX] |
+| [Triage Quiz: Is Your SQL Server Safe?] | Angie Rudduck | 2016-06-15 | |
+| [Why Not Just Create Statistics?] | Erik Darling | 2016-07-14 | |
+| [Understanding the SQL Server NOLOCK hint] | Greg Robidoux | 2011-08-16 | |
+| [Recover access to a SQL Server instance] | Aaron Bertrand | 2012-08-30 | [SEC] |
+| [SQL Server 2016 Upgrade Planning] | Jen Underwood | 2016-06-28 | |
+| [Graphs and Graph Algorithms in T-SQL] | Hans Olav Norheim | 2010-05-22 | |
+| [Episode 4: SQL Server R Services makes you a smarter T-SQL Developer] | Sanjay Mishra | 2016-07-12 | [DEV][R] |
+| [How to Set Max Degree of Parallelism in SQL Server] | Kendra Little | 2016-07-14 | |
+| [Undocumented Query Plans: Equality Comparisons] | Paul White | 2016-06-22 | |
+| [Simplified Order Of Operations] | Michael J Swart | 2016-07-20 | |
+| [SQL Server Statistics Basics] | Robert Sheldon | 2016-07-22 | |
+| [Learn to Use sp_Blitz, sp_BlitzCache, sp_BlitzFirst, and sp_BlitzIndex with These Tutorial Videos] | Brent Ozar | 2016-09-12 | |
+| [Where is a record really located?] | Tim Chapman | 2016-09-15 | |
+| [Instant File Initialization (IFI)] | Steve Stedman | 2016-09-19 | |
+| [How to Query the StackExchange Databases] | Brent Ozar | 2014-01-17 | |
+| [How to Troubleshoot Performance in SQL Server (Dear SQL DBA)] | Kendra Little | 2016-06-02 | |
+| [How to Log Activity Using sp_whoisactive in a Loop] | Brent Ozar | 2016-07-01 | |
+| [Logging Activity Using sp_WhoIsActive – Take 2] | Tara Kizer | 2016-07-26 | |
+| [How To Fix Forwarded Records] | Tara Kizer | 2016-07-29 | |
+| [Should I Automate my Windows Updates for SQL Server?] | Kendra Little | 2016-07-28 | |
+| [Finding the Right Path] | Jason Brimhall | 2016-08-24 | |
+| [#BackToBasics : An Updated "Kitchen Sink" Example] | Aaron Bertrand | 2016-06-01 | |
+| [Locking and Blocking in SQL Server] | Brent OZar | 2016-01-01 | |
+| [Nested Loops Prefetching] | Paul White | 2013-08-31 | |
+| [Performance tuning backup and restore operations] | Derik Hammer | 2015-12-21 | [B][P] |
+| [Execution Plan Analysis: The Mystery Work Table] | Paul White | 2013-03-08 | |
+| [How to move data between File Groups in SQL Server] | Klaus Aschenbrenner | 2016-09-26 | |
+| [Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator] | Joseph Sack | 2014-06-24 | |
+| [Parallelism in SQL Server Query Tuning] | Itzik Ben-Gan | 2011-03-14 | |
+| [What You Need to Know about the Batch Mode Window Aggregate Operator in SQL Server 2016: Part 1] | Itzik Ben-Gan | 2016-05-31 | |
+| [What To Do If sp_BlitzFirst Warns About High Compilations] | Erik Darling | 2016-09-27 | |
+| [Questions You Should Be Asking About Your Backups] | Erik Darling | 2016-10-13 | [B] |
+| [Evolutionary Database Design] | Martin Fowler | 2016-05-01 | |
+| [Implementing a custom sort] | Rob Farley | 2016-10-17 | |
+| [Deletes that Split Pages and Forwarded Ghosts] | Paul White | 2012-08-31 | |
+| [Query Optimizer Deep Dive - Part 1] | Paul White | 2012-04-28 | |
+| [Query Optimizer Deep Dive - Part 2] | Paul White | 2012-04-28 | |
+| [Query Optimizer Deep Dive - Part 3] | Paul White | 2012-04-29 | |
+| [Query Optimizer Deep Dive - Part 4] | Paul White | 2012-05-01 | |
+| [Should You Rebuild or Reorganize Indexes on Large Tables?] | Kendra Little | 2016-10-13 | [IDX] |
+| [Retrieving SQL Server Query Execution Plans] | Robert Sheldon | 2016-10-18 | |
+| [Introduction to Latches in SQL Server] | Klaus Aschenbrenner | 2014-06-23 | |
+| [Latch Coupling in SQL Server] | Klaus Aschenbrenner | 2016-10-24 | |
+| [Partitioned Views? A How-To Guide] | Erik Darling | 2016-09-22 | |
+| [TroubleShooting SQL Server Memory Consumption] | Satnam Singh | 2012-09-28 | |
+| [Time Series Algorithms in SQL Server] | Dinesh Asanka | 2015-06-01 | |
+| [Internals of the Seven SQL Server Sorts – Part 1] | Paul White | 2015-04-29 | |
+| [Internals of the Seven SQL Server Sorts – Part 2] | Paul White | 2015-05-07 | |
+| [The 9 Letters That Get DBAs Fired] | Brent Ozar | 2011-12-22 | |
+| [Restarting SQL Server – always a good idea?] | Klaus Aschenbrenner | 2016-08-08 | |
+| [Don’t believe everything you read: Reconfigure flushes the plan cache] | Matt Bowler | 2012-06-25 | |
+| [How-to load data fast into SQL Server 2016] | Henk | 2016-10-24 | |
+| [Database Design Matters, RTO and Filegroups] | Raul Gonzalez | 2016-10-28 | |
+| [Automate Alerting for SQL Server Suspect Database Pages] | Ben Snaidero | 2016-01-25 | |
+| [Successful Anti-Patterns, Storage Requirements] | Raul Gonzalez | 2016-10-19 | |
+| [SQL Server table columns under the hood] | Remus Rusanu | 2011-10-20 | |
+| [How to analyse SQL Server performance] | Remus Rusanu | 2014-02-24 | |
+| [Asynchronous procedure execution] | Remus Rusanu | 2009-08-05 | |
+| [What is the CXPACKET Wait Type, and How Do You Reduce It?] | Brent Ozar | 2013-08-27 | |
+| [New indexes, hypothetically] | Kenneth Fisher | 2016-11-02 | [IDX] |
+| [Indexing Wide Keys in SQL Server] | Brent Ozar | 2013-05-08 | [IDX] |
+| [The Anatomy and (In)Security of Microsoft SQL Server Transparent Data Encryption (TDE), or How to Break TDE] | Simon McAuliffe | 2016-03-31 | [SEC] |
+| [Correctly adding data files to tempdb] | Paul Randal | 2014-10-14 | |
+| [Why You Should Test Your Queries Against Bigger Data] | Erik Darling | 2016-11-01 | |
+| [Tally OH! An Improved SQL 8K “CSV Splitter” Function] | Jeff Moden | 2012-12-28 | |
+| [Set Statistics… Profile?] | Erik Darling | 2016-10-11 | |
+| [Hierarchies on Steroids #1: Convert an Adjacency List to Nested Sets] | Jeff Moden | 2014-09-19 | |
+| [Optimizing T-SQL queries that change data] | Paul White | 2013-01-26 | |
+| [Measuring Query Duration: SSMS vs SQL Sentry Plan Explorer] | Kendra Little | 2016-09-27 | |
+| [Inside the Statistics Histogram & Density Vector] | Klaus Aschenbrenner | 2014-01-28 | |
+| [Misconceptions on parameter sniffing] | Hugo Kornelis | 2016-11-03 | |
+| [What Every Accidental DBA Needs to Know Now: Basics of SQL Security] | Tim Ford | 2016-10-03 | [SEC] |
+| [SQL Server Perfmon (Performance Monitor) Best Practices] | Brent Ozar | 2006-12-30 | |
+| [Top 5 Overlooked Index Features] | Erik Darling | 2016-11-10 | [IDX] |
+| [A Sysadmin’s Guide to Microsoft SQL Server Memory] | Brent Ozar | 2016-09-15 | |
+| [Searching Strings in SQL Server is Expensive] | Brent Ozar | 2016-10-18 | |
+| [Altering an INT Column to a BIGINT] | Kendra Little | 2016-08-04 | |
+| [Query tuning 101: Problems with IN ()] | Daniel Janik | 2016-11-10 | |
+| [Admin: Bulkadmin vs ADMINISTER BULK OPERATIONS] | Richard A Brown | 2012-01-31 | |
+| [Can Indexes My Query Doesn’t Use Help My Query?] | Erik Darling | 2016-11-09 | [IDX] |
+| [SQL Server Audit Walkthrough] | Sadequl Hussain | 2016-01-01 | |
+| [The SQL Server 2016 Query Store: Overview and Architecture] | Enrico van de Laar | 2015-11-16 | [QS] |
+| [Reading, Writing, and Creating SQL Server Extended Properties] | Phil Factor | 2015-10-21 | [XE] |
+| [Questions About SQL Server Security and Access Control You Were Too Shy to Ask] | William Brewer | 2016-11-04 | [SEC] |
+| [The Ten Commandments of SQL Server Monitoring] | Adam Machanic | 2013-04-09 | |
+| [Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?] | Adam Machanic | 2012-12-27 | |
+| [Parameter Sniffing, Embedding, and the RECOMPILE Options] | Paul White | 2013-08-28 | |
+| [Can comments hamper stored procedure performance?] | Aaron Bertrand | 2016-11-09 | |
+| [SQL Server Temporary Table Caching] | Simon Liew | 2016-08-12 | |
+| [Techniques to Monitor SQL Server memory usage] | Basit Farooq | 2016-08-01 | |
+| [Troubleshooting Query Regressions Caused By The New Cardinality Estimator] | SQL Scotsman | 2016-11-28 | |
+| [Migrating Databases to Azure SQL Database] | Tim Radney | 2016-10-25 | [AZ][MG] |
+| [Solve Common SQL Server Restore Issues] | Sergey Gigoyan | 2015-04-12 | |
+| [Spills SQL Server Doesn’t Warn You About] | Erik Darling | 2016-11-30 | |
+| [How often should I run DBCC CHECKDB?] | Erik Darling | 2016-02-25 | |
+| [Why is My Query Faster the Second Time it Runs?] | Kendra Little | 2016-11-25 | |
+| [Downgrading the SQL Server Edition of a Dev Environment] | Kendra Little | 2016-11-15 | |
+| [Date Math In The WHERE Clause] | Erik Darling | 2016-12-01 | |
+| [Why is This Partitioned Query Slower?] | Kendra Little | 2015-09-01 | |
+| [A Beginner’s Guide to the True Order of SQL Operations] | Lukas Eder | 2016-12-09 | |
+| [Logical Query Processing: What It Is And What It Means to You] | Itzik Ben-Gan | 2016-01-15 | |
+| [Forcing a Parallel Query Execution Plan] | Paul White | 2011-12-23 | |
+| [Join Containment Assumption and CE Model Variation] | Dmitri Pilugin | 2014-05-04 | |
+| [Table Variable Tip] | Itzik Ben-Gan | 2015-02-08 | |
+| [Heap tables in SQL Server] | Derik Hammer | 2016-04-13 | |
+| [The ‘B’ in B-Tree – Indexing in SQL Server] | Derik Hammer | 2016-04-04 | [IDX] |
+| [How to read the SQL Server Database Transaction Log] | Manvendra Singh | 2013-10-31 | |
+| [Filtered Statistics Follow-up] | Erik Darling | 2016-12-22 | |
+| [SQL Server Query Optimization: No Unknown Unknowns] | Itzik Ben-Gan | 2015-10-13 | |
+| [Sync Vs Async Statistics: The Old Debate] | SQL Scotsman | 2016-12-10 | |
+| [Recommended updates and configuration options for SQL Server 2012 and SQL Server 2014 with high-performance workloads] | Microsoft | 2016-03-08 | |
+| [Troubleshooting SQL Server backup and restore operations] | Microsoft | 2016-07-23 | [B] |
+| [SQL Server 2016: Getting tempdb a little more right] | Aaron Bertrand | 2015-09-30 | |
+| [Practical uses of binary types] | Daniel Hutmacher | 2017-01-09 | |
+| [Backing Up SQL Server Databases is Easier in PowerShell than T-SQL] | Aaron Nelson | 2017-01-12 | [PS] |
+| [Creating, detaching, re-attaching, and fixing a SUSPECT database] | Paul Randal | 2008-08-29 | |
+| [Modifying Tables Online – Part 1: Migration Strategy] | Michael J Swart | 2012-04-16 | [MG] |
+| [Modifying Tables Online – Part 2: Implementation Example] | Michael J Swart | 2012-04-17 | [MG] |
+| [Modifying Tables Online – Part 3: Example With Error Handling] | Michael J Swart | 2012-04-20 | [MG] |
+| [Modifying Tables Online – Part 4: Testing] | Michael J Swart | 2012-04-26 | [MG] |
+| [Modifying Tables Online – Part 5: Just One More Thing] | Michael J Swart | 2012-04-27 | |
+| [DATEDIFF vs. DATEADD] | Guy Glanster | 2017-01-25 | |
+| [Disaster recovery 101: hack-attach a damaged database] | Paul Randal | 2010-06-18 | |
+| [Bones of SQL - The Calendar Table] | Bob Hovious | 2016-09-08 | |
+| [SQL Server 2016, Double or Nothing, Always Encrypted with temporal tables] | Raul Gonzalez | 2016-07-27 | |
+| [Reclaiming Space After Column Data Type Change] | David Fundakowski | 2016-08-09 | |
+| [Packing Intervals with Priorities] | Itzik Ben-Gan | 2015-11-10 | |
+| [Avoid Unnecessary Lookups when Using ROW_NUMBER for Paging] | Itzik Ben-Gan | 2014-12-11 | |
+| [Migrating a Disk-Based Table to a Memory-Optimized Table in SQL Server] | Alex Grinberg | 2017-02-26 | [MG] |
+| [SQL Server Hardware Optimization] | Basit Farooq | 2016-06-01 | |
+| [Index Types Heaps, Primary Keys, Clustered and Nonclustered Indexes] | Kendra Little | 2017-02-02 | [IDX] |
+| [Identifying Existence of Intersections in Intervals] | Itzik Ben-Gan | 2017-02-08 | |
+| [Cheat Sheet How to Configure TempDB for Microsoft SQL Server] | Brent Ozar | 2016-01-14 | |
+| [A Tourist’s Guide to the sp_Blitz Source Code, Part 1: The Big Picture] | Brent Ozar | 2017-02-09 | |
+| [SQL Server Default Configurations That You Should Change] | Pio Balistoy | 2017-02-06 | |
+| [Decoding Key and Page WaitResource for Deadlocks and Blocking] | Kendra Little | 2016-10-17 | |
+| [Security in the CLR World Inside SQL Server] | Kiely Don | 1990-01-01 | [CLR][SEC] |
+| [On the Advantages of DateTime2(n) over DateTime] | William Assaf | 2012-12-04 | |
+| [Build Your Own Tools] | Michael J Swart | 2016-09-23 | |
+| [Enhanced T-SQL Error Handling With Extended Events] | Dave Mason | 2016-09-14 | [XE] |
+| [Compression and its Effects on Performance] | Erin Stellato | 2017-01-20 | |
+| [Does Truncate Table Reset Statistics] | Kendra Little | 2016-12-08 | |
+| [SQL Server Database Decommissioning Check List] | Svetlana Golovko | 2016-06-23 | |
+| [New SQL Server Database Request Questionnaire and Checklist] | Svetlana Golovko | 2015-02-24 | |
+| [Adding Partitions to the Lower End of a Left Based Partition Function] | Kendra Little | 2017-02-21 | |
+| [Don't Panic Busting a File Space Myth] | Tim Ford | 2016-11-14 | |
+| [#BackToBasics : Dating Responsibly] | Aaron Bertrand | 2016-04-06 | |
+| [How to Establish Dedicated Admin Connection (DAC) to SQL Server] | Mika Wendelius | 2016-10-05 | |
+| [SQL and SQL only Best Practice] | Nagaraj Venkatesan | 2013-05-27 | |
+| [There Is No Difference Between Table Variables, Temporary Tables, and Common Table Expressions] | Grant Fritchey | 2016-08-04 | |
+| [Availability Group on SQL Server 2016] | Guy Glantser | 2017-02-01 | |
+| [Using SQL Server and R Services for analyzing DBA Tasks] | Tomaž Kaštrun | 2017-02-17 | |
+| [SQLskills SQL101: Dealing with SQL Server corruption] | Paul Randal | 2017-02-28 | [COR] |
+| [Advanced Analytics with R & SQL: Part I - R Distributions] | Frank A. Banin | 2016-10-31 | [R] |
+| [T-SQL Tuesday #85 STOP! Restore Time!] | Derik Hammer | 2016-12-13 | |
+| [Filtered Indexes: Rowstore vs Nonclustered Columnstore] | Kendra Little | 2016-11-10 | [IDX] |
+| [ALTER SCHEMA TRANSFER for Zero Downtime Database Upgrades] | Dave Wentzel | 2013-05-21 | |
+| [Delayed Durability in SQL Server 2014] | Aaron Bertrand | 2014-04-28 | |
+| [Daylight Savings end affects not only you, but your SQL Server too] | Aaron Bertrand | 2014-04-28 | |
+| [Let’s Corrupt a SQL Server Database Together, Part 1: Clustered Indexes] | Brent Ozar | 2017-02-22 | [COR][IDX] |
+| [Let’s Corrupt a Database Together, Part 2: Nonclustered Indexes] | Brent Ozar | 2017-02-28 | [COR][IDX] |
+| [The Guide SQL Server Installation Checklist (settings that increase SQL Server Performance)] | Mark Varnas | 2017-03-03 | |
+| [SQL Browser, what is it good for? Absolutely something!] | Chris Sommer | 2017-03-01 | |
+| [PowerShell Getting More From Generic Error Messages] | Shane O'Neill | 2017-03-02 | [PS] |
+| [#BackToBasics : Common Table Expressions (CTEs)] | Aaron Bertrand | 2016-01-06 | |
+| [SQL VNext sp_configure on Windows and Linux with dbatools] | Rob Sewell | 2017-03-02 | [PS] |
+| [Adding a T-SQL Job Step to a SQL Agent Job with PowerShell] | Rob Sewell | 2017-02-20 | [PS][J] |
+| [Setting up Database Mail to use my Gmail account] | Mat Hayward | 2017-03-01 | [DM] |
+| [Using DBCC CLONEDATABASE and Query Store for Testing] | Erin Stellato | 2017-02-22 | [DBCC][QS] |
+| [Getting Started with Natural Earth — A SQL Server Shapefile Alternative (Geospatial Resource)] | Jeff Pries | 2017-02-17 | [V] |
+| [SQL Server Temporal Tables: How-To Recipes] | Alex Grinberg | 2017-02-10 | [DEV] |
+| [The Migration Checklist] | Steve Jones | 2017-03-08 | [MG] |
+| [Upgrading to SQL Server 2014: A Dozen Things to Check] | Steve Jones | 2014-06-03 | [MG] |
+| [Introducing the Set-based Loop] | Luis Cazares | 2015-07-27 | [DEV] |
+| [Representing Hierarchical Data for Mere Mortals] | Phil Factor | 2016-10-06 | [DEV] |
+| [KPIs For DBAs to Show Their CIOs] | Thomas Larock | 2017-03-08 | [DBA] |
+| [How To Forecast Database Disk Capacity If You Don’t Have A Monitoring Tool] | Edwin M Sarmiento | 2015-07-31 | [DBA] |
+| [Statistical Sampling for Verifying Database Backups] | Thomas Larock | 2010-05-13 | [B][DBA] |
+| [Using dbatools for automated restore and CHECKDB] | Anthony Nocentino | 2017-03-04 | [DBA][PS] |
+| [Bad Habits Revival] | Aaron Bertrand | 2017-01-26 | [DBA] |
+| [Deploying Multiple SSIS Projects via PowerShell] | Nat Sundar | 2017-02-27 | [SSIS,][PS] |
+| [Determining the Cost Threshold for Parallelism] | Grant Fritchey | 2017-02-28 | [DBA] |
+| [Identifying a row’s physical location] | Wayne Sheffield | 2017-03-08 | [DBA] |
+| [Split a file group into multiple data files] | Trayce Jordan | 2017-03-03 | [DBA] |
+| [Why PFS pages cannot be repaired] | Paul Randal | 2017-03-05 | [DBA] |
+| [ERRORLOG records max out at 2049 characters] | Cody Konior | 2017-03-02 | [DEV] |
+| [How to Build a SQL Server Disaster Recovery Plan with Google Compute Engine] | Tara Kizer | 2017-03-10 | [DBA] |
+| [SQL Server Performance Tuning in Google Compute Engine] | Erik Darling | 2017-03-09 | [DBA][P] |
+| [Configuring R on SQL Server 2016] | Ginger Grant | 2016-12-06 | [DBA][R] |
+| [Knee-Jerk PerfMon Counters: Page Life Expectancy] | Paul Randal | 2014-10-20 | [DBA][P] |
+| [Change Management Template for SQL Server DBAs and Developers] | Kendra Little | 2016-04-12 | [DBA] |
+| [Performance Myths: Clustered vs. Non-Clustered Indexes] | Aaron Bertrand | 2017-03-17 | [IDX] |
+| [Bad habits: Counting rows the hard way] | Aaron Bertrand | 2014-10-30 | [DEV] |
+| [Why Cost Threshold For Parallelism Shouldn’t Be Set To 5] | Erik Darling | 2017-03-14 | [DBA] |
+| [Join Performance, Implicit Conversions, and Residuals] | Paul White | 2011-07-18 | [DEV] |
+| [Implicit Conversions that cause Index Scans] | Jonathan Kehayias | 2011-04-11 | [DEV] |
+| [When Is It Appropriate To Store JSON in SQL Server?] | Bert Wagner | 2017-03-14 | [DEV] |
+| [The Performance Penalty of Bookmark Lookups in SQL Server] | Klaus Aschenbrenner | 2017-03-17 | [IDX] |
+| [Why You Should Change the Cost Threshold for Parallelism] | Grant Fritchey | 2017-03-13 | [DBA] |
+| [Why Update Statistics can cause an IO storm] | Kendra Little | 2014-01-29 | [DBA] |
+| [SQLskills SQL101 Temporary table misuse] | Paul White | 2017-03-13 | [DEV] |
+| [SQL Server sp_execute_external_script Stored Procedure Examples] | Vitor Montalvao | 2017-03-10 | [R] |
+| [Transparent Data Encryption and Replication] | Drew Furgiuele | 2017-03-15 | [DBA] |
+| [SQL Server Installation Checklist] | Jonathan Kehayias | 2010-03-22 | [DBA] |
+| [Indexed Views And Data Modifications] | Erik Darling | 2017-03-16 | [DEV] |
+| [Deployment Automation for SQL Server Integration Services (SSIS)] | Nat Sundar | 2017-01-12 | [DEV] |
+| [Why Developers Should Consider Microsoft SQL Server] | Brent Ozar | 2017-03-22 | [DEV] |
+| [SQLskills SQL101: Indexes on Foreign Keys] | Kimberly Tripp | 2017-03-21 | [DEV] |
+| [SQLskills SQL101: Updating SQL Server Statistics Part I – Automatic Updates] | Erin Stellato | 2017-03-23 | [DBA] |
+| [Processing Loops in SQL Server] | CHill60 | 2017-03-23 | [DEV] |
+| [The Mysterious Case of the Missing Default Value] | Raul Gonzalez | 2017-03-24 | [DEV] |
+| [Plan Caching] | Klaus Aschenbrenner | 2017-03-20 | [DEV] |
+| [sp_executesql Is Not Faster Than an Ad Hoc Query] | Grant Fritchey | 2016-11-07 | [DEV] |
+| [Backing up SQL Server on Linux using Ola Hallengrens Maintenance Solution] | Rob Sewell | 2017-03-22 | [B] |
+| [Delayed Durability in SQL Server 2014 Paul Randal] | Paul Randal | 2014-11-20 | [DBA] |
+| [Why Is This Query Sometimes Fast and Sometimes Slow] | Brent Ozar | 2016-11-16 | [DEV] |
+| [Using Plan Guides to Remove OPTIMIZE FOR UNKNOWN Hints] | Brent Ozar | 2016-11-17 | [DEV] |
+| [ETL Best Practices] | Tim Mitchel | 2017-01-01 | [DEV] |
+| [Resolving Key Lookup Deadlocks with Plan Explorer] | Greg Gonzalez | 2017-03-21 | [DEV] |
+| [Why ROWLOCK Hints Can Make Queries Slower and Blocking Worse in SQL Server] | Kendra Little | 2016-02-04 | [DEV] |
+| [Does a Clustered Index really physically store the rows in key order] | Wayne Sheffield | 2012-10-21 | [DEV] |
+| [Ugly Pragmatism For The Win] | Michael J Swart | 2016-02-11 | [DEV] |
+| [Architecting Microsoft SQL Server on VMware vSphere] | Niran Even-Chen | 2017-03-15 | [DBA] |
+| [Hiding tables in SSMS Object Explorer] | Kenneth Fisher | 2017-04-03 | [DEV] |
+| [Clustered columnstore: on-disk vs. in-mem] | Ned Otter | 2017-03-21 | [DBA] |
+| [Generating Plots Automatically From PowerShell and SQL Server Using Gnuplot] | Phil Factor | 2017-03-27 | [DEV] |
+| [How to Benchmark Alternative SQL Queries to Find the Fastest Query] | Luka Seder | 2017-03-29 | [BENCH] |
+| [Checking for Strange Client Settings with sys.dm_exec_sessions] | Brent Ozar | 2017-03-31 | [DEV] |
+| [Decrypting Insert Query Plans] | Eric Darling | 2017-03-30 | [DEV] |
+| [SQLskills SQL101: Partitioning] | Kimberly Tripp | 2017-03-27 | [DBA] |
+| [SQLskills SQL101: Switching recovery models] | Paul Randal | 2017-03-29 | [DBA] |
+| [Using AT TIME ZONE to fix an old report] | Rob Farley | 2017-02-14 | [DEV] |
+| [What the heck is a DTU] | Andy Mallon | 2017-03-30 | [AZ] |
+| [Hack-Attaching a SQL Server database with NORECOVERY] | Argenis Fernandez | 2016-01-24 | [DBA] |
+| [Switch in Staging Tables Instead of sp_rename] | Kendra Little | 2017-01-19 | [DBA] |
+| [Performance Myths: Table variables are always in-memory] | Derik Hammer | 2017-04-04 | [DEV] |
+| [Questions About SQL Server Collations You Were Too Shy to Ask] | Robert Sheldon | 2017-04-06 | [DBA][DEV] |
+| [NULL - The database's black hole] | Hugo Kornelis | 2007-07-06 | [DEV] |
+| [For The Better Developer: SQL Server Indexes] | Davide Mauri | 2017-04-02 | [DEV] |
+| [#EntryLevel: Compression & Data Types] | Melissa Connors | 2016-04-17 | [DEV] |
+| [Cardinality Estimation for a Predicate on a COUNT Expression] | Paul White | 2017-04-12 | [DEV] |
+| [Changing SQL Server Collation After Installation] | Douglas P. Castilho | 2015-02-19 | [DBA] |
+| [Does a TempDB spill mean statistics are out of date?] | Brent Ozar | 2017-04-12 | [DEV] |
+| [Transaction log growth during BACKUP] | Andy Mallon | 2017-04-10 | [B][DBA] |
+| [When is a SQL function not a function?] | Rob Farley | 2011-11-08 | [DEV] |
+| [Introducing Batch Mode Adaptive Joins] | Joseph Sack | 2017-04-19 | [DEV] |
+| [Investigating the proportional fill algorithm] | Paul Randal | 2016-10-04 | [DBA] |
+| [Understanding Logging and Recovery in SQL Server] | Paul Randal | 2009-02-01 | [DBA] |
+| [Bad Habits to Kick: Using shorthand with date/time operations] | Aaron Bertrand | 2011-09-20 | [DEV] |
+| [Generating Charts and Drawings in SQL Server Management Studio] | Zanevsky | 2012-03-26 | [DEV] |
+| [How expensive are column-side Implicit Conversions?] | Jonathan Kehayias | 2013-04-15 | [DEV] |
+| [Execution Plan Basics] | Grant Fritchey | 2008-05-11 | [DEV] |
+| [Disabling ROW and PAGE Level Locks in SQL Server] | Klaus Aschenbrenner | 2016-10-31 | [DEV] |
+| [Fixing Cardinality Estimation Errors with Filtered Statistics] | Klaus Aschenbrenner | 2013-10-29 | [DEV] |
+| [Cardinality Estimation for Multiple Predicates] | Paul Randal | 2014-01-15 | [DEV] |
+| [Weaning yourself off of SQL Profiler (Part 1)] | Wayne Sheffield | 2017-04-19 | [DBA][DEV] |
+| [Properly Persisted Computed Columns] | Paul White | 2017-05-25 | [DEV] |
+| [A SQL Server DBA myth a day: (17/30) page checksums] | Paul Randal | 2010-04-17 | [DBA] |
+| [What are different ways to replace ISNULL() in a WHERE clause that uses only literal values?] | Eric Darling | 2017-05-27 | [DEV] |
+| [SQL Server 2016 enhancements – Truncate Table and Table Partitioning] | Prashanth Jayaram | 2017-04-18 | [DBA][DEV] |
+| [SQL Server Mysteries: The Case of the Not 100% RESTORE…] | Bob Ward | 2017-04-21 | [DBA] |
+| [Transactional Replication and Stored Procedure Execution: Silver Bullet or Poison Pill?] | Drew Furgiuele | 2017-04-11 | [DBA] |
+| [STOPAT And Date Formats] | Dave Mason | 2017-07-12 | [DBA][XE] |
+| [Row-count Estimates when there are no Statistics] | Matthew McGiffen | 2017-06-28 | [DEV] |
+| [SQL Server DBA On-Boarding Checklist] | Svetlana Golovko | 2017-06-20 | [DBA] |
+| [Be Wary of Date Formatting in T-SQL] | Randolph West | 2017-07-12 | [DEV] |
+| [Statistics and Cardinality Estimation] | Matthew McGiffen | 2017-06-20 | [DEV] |
+| [Message queues for the DBA: sending data out into the world] | Drew Furgiuele | 2017-07-21 | [DBA] |
+| [Schema-Based Access Control for SQL Server Databases] | Phil Factor | 2017-04-09 | [DBA] |
+| [SQL Server: large RAM and DB Checkpointing] | Guillaume Fourrat | 2017-06-29 | [DBA] |
+| [Handling SQL Server Deadlocks With Event Notifications] | Dave Mason | 2017-07-17 | [R][XE] |
+| [SQL Server R Services: Digging into the R Language] | Robert Sheldon | 2017-06-29 | [DBA][DEV] |
+| [Investigating the Cause of SQL Server High CPU Load Conditions When They Happen] | Laerte Junior | 2017-07-17 | [DBA] |
+| [In-Memory Engine DURABILITY = SCHEMA_ONLY And Transaction Rollback] | Chris Adkin | 2017-07-17 | [DEV] |
+| [Builder Day: Doing a Point-in-Time Restore in Azure SQL DB] | Brent Ozar | 2017-06-20 | [DBA][AZ] |
+| [Creating Continuous Integration Build Pipelines With Jenkins, Docker and SQL Server] | Chris Adkin | 2017-07-18 | [DBA] |
+| [Scale-able Windows Aggregate Functions With Row Store Object] | Chris Adkin | 2017-07-24 | [DEV] |
+| [Azure DWH part 11: Data Warehouse Migration Utility] | Daniel Calbimonte | 2017-07-17 | [AZ][MG] |
+| [Representing a simple hierarchical list in SQL Server with JSON, YAML, XML and HTML] | William Brewer | 2017-07-18 | [DEV], [X] |
+| [Advanced Analytics with R and SQL Part II - Data Science Scenarios] | Frank A. Banin | 2017-07-27 | [DEV], [R] |
+| [Think twice before using table variables] | Matthew McGiffen | 2017-07-11 | [DEV] |
+| [ColumnStore Indexes And Recursive CTEs] | Erik Darling | 2017-07-27 | [DEV] |
+| [CCIs and String Aggregation] | Joe Obbish | 2017-07-03 | [DEV] |
+| [Brad’s Sure DBA Checklist] | Brad McGehee | 2010-01-20 | [DBA] |
+| [Query Store and Parameterization Problems] | Dennes Torres | 2017-07-06 | [QS] |
+| [SQL Server Event Handling: Event Notifications] | Dave Mason | 2016-11-30 | [DBA][XE] |
+| [Identifying Deprecated Feature Usage (Part 1)] | Dave Mason | 2017-07-20 | [DBA][XE] |
+| [Let’s Corrupt a Database Together, Part 3: Detecting Corruption] | Brent Ozar | 2017-07-25 | [DBA][COR] |
+| [XML vs JSON Shootout: Which is Superior in SQL Server 2016?] | Bert Wagner | 2017-05-16 | [DEV][X] |
+| [One SQL Cheat Code For Amazingly Fast JSON Queries] | Bert Wagner | 2017-05-09 | [DEV][X] |
+| [The Ultimate SQL Server JSON Cheat Sheet] | Bert Wagner | 2017-03-07 | [DEV][X] |
+| [Are your indexes being thwarted by mismatched datatypes?] | Bert Wagner | 2017-08-01 | [DEV] |
+| [Why Missing Index Recommendations Aren’t Perfect] | Brent Ozar | 2017-08-02 | [DBA][DEV] |
+| [The Case of the Space at the End] | Adam St. Pierre | 2017-07-24 | [DEV] |
+| [SELECT…INTO in SQL Server 2017] | Andrew Pruski | 2017-08-02 | [DEV] |
+| [Your Service Level Agreement is a Disaster] | Jennifer McCown | 2017-07-24 | [DBA] |
+| [SQLskills SQL101: REBUILD vs. REORGANIZE] | Paul Randal | 2017-08-03 | [DBA] |
+| [Where do the Books Online index fragmentation thresholds come from?] | Paul Randal | 2009-12-08 | [DBA] |
+| [The SQL Hall of Shame] | Adam Machanic | 2017-06-14 | [DBA][DEV] |
+| [A Better Way To Select Star] | Erik Darling | 2017-07-05 | [DEV] |
+| [UDP vs TCP] | Kenneth Fisher | 2017-06-07 | [DBA] |
+| [Lipoaspiration in your SQL Server Database] | Fabiano Amorim | 2011-03-03 | [DEV] |
+| [13 Things You Should Know About Statistics and the Query Optimizer] | Fabiano Amorim | 2010-01-07 | [DBA][DEV] |
+| [Creating R Stored Procedures in SQL Server 2016 Using sqlrutils] | Niels Berglund | 2017-06-25 | [DEV][R] |
+| [A Quick start Guide to Managing SQL Server 2017 on CentOS/RHEL Using the SSH Protocol] | Prashanth Jayaram | 2017-08-08 | [DEV] |
+| [SQL Server v.Next : STRING_AGG Performance, Part 2] | Aaron Bertrand | 2017-01-06 | [DEV] |
+| [Why Parameter Sniffing Isn’t Always A Bad Thing (But Usually Is)] | Bert Wagner | 2017-08-08 | [DEV] |
+| [Persisting statistics sampling rate] | Pedro Lopes | 2017-08-11 | [DBA] |
+| [All about locking in SQL Server] | Nikola Dimitrijevic | 2017-06-16 | [DBA][DEV] |
+| [All about Latches in SQL Server] | Nikola Dimitrijevic | 2017-08-10 | [DBA][DEV] |
+| [All about SQL Server spinlocks] | Nikola Dimitrijevic | 2017-08-23 | [DBA][DEV] |
+| [How to monitor object space growth in SQL Server] | Jefferson Elias | 2017-08-16 | [DBA][DEV] |
+| [How to Read a Transaction Log Backup] | Greg Larsen | 2017-07-03 | [B][DBA] |
+| [How to Find Out Which Database Object Got Deleted] | Greg Larsen | 2017-07-03 | [DBA] |
+| [In-Memory OLTP Enhancements in SQL Server 2016] | Ahmad Yaseen | 2017-08-22 | [DBA][DEV] |
+| [Sync SQL Logins and Jobs] | Ryan J. Adams | 2017-08-21 | [DBA][J] |
+| [The Trillion Row Table] | Joe Obbish | 2017-08-16 | [BENCH] |
+| [Dynamic Data Unmasking] | Joe Obbish | 2017-08-25 | [DEV] |
+| [Why is My Database Application so Slow?] | Dan Turner | 2017-08-24 | [DEV] |
+| [Generating Concurrent Activity] | Michael J Swart | 2017-01-23 | [DBA][DEV] |
+| [Required Testing for Installing SQL Server Cumulative Updates and Service Packs] | Kendra Little | 2017-04-28 | [DBA] |
+| [Microsoft SQL Server R Services - Internals X] | Niels Berglund | 2017-08-29 | [DEV][R] |
+| [Clustered columnstore: on-disk vs. in-mem] | Ned Otter | 2017-08-29 | [DBA][DEV] |
+| [Hands on Full-Text Search in SQL Server] | Jefferson Elias | 2017-08-25 | [DBA][DEV] |
+| [SQL Code Smells] | Phil Factor | 2017-08-31 | [DBA][DEV] |
+| [Corruption demo databases and scripts] | Paul Randal | 2013-01-08 | [DBA][COR] |
+| [Understanding Cross-Database Transactions in SQL Server] | Grahaeme Ross | 2015-04-11 | [DBA][DEV] |
+| [Optional Parameters and Missing Index Requests] | Brent OZar | 2017-09-14 | [DBA][DEV] |
+| [Uniquifier is a rather unique word isn’t it?] | Kenneth Fisher | 2017-09-18 | [DBA][DEV] |
+| [Importance of proper transaction log size management] | Paul Randal | 2009-04-10 | [DEV] |
+| [#TSQL2sDay – Starting Out with PowerShell] | Rob Sewell | 2017-09-12 | [DBA][PS] |
+| [Using native compilation to insert parent/child tables] | Ned Otter | 2017-09-11 | [DEV] |
+| [Questions About RDS SQL Server You Were Too Shy to Ask] | Laerte Junior | 2017-09-13 | [DEV] |
+| [Active Directory Authentication with SQL Server on Ubuntu] | Drew Furgiuele | 2017-09-19 | [DBA] |
+| [Temporary Tables in Stored Procedures] | Paul Randal | 2012-08-15 | [DEV] |
+| [SQLCLR in Practice: Creating a Better Way of Sending Email from SQL Server] | Darko Martinović | 2017-07-17 | [CLR] |
+| [T-SQL commands performance comparison – NOT IN vs NOT EXISTS vs LEFT JOIN vs EXCEPT] | Ahmad Yaseen | 2017-09-22 | [DBA][DEV] |
+| [Clustered vs Nonclustered: Index Fundamentals You Need To Know] | Bert Wagner | 2017-09-26 | [DBA][DEV] |
+| [How to Write Efficient TOP N Queries in SQL] | Lukas Eder | 2017-09-22 | [DEV] |
+| [Checklist: DR Plan Sanity Check] | Robert Davis | 2017-09-04 | [DBA] |
+| [Table level recovery for selected SQL Server tables] | Tibor Nagy | 2012-11-30 | [DEV] |
+| [SQL Mirroring, Preserving the Log Chain During Database Migrations] | SQL Undercover | 2017-01-21 | [DBA][MG] |
+| [How NOLOCK Will Block Your Queries] | Bert Wagner | 2017-10-10 | [DEV] |
+| [8 Ways to Export SQL Results To a Text File] | Daniel Calbimonte | 2017-10-06 | [DBA][DEV] |
+| [SQL Server Installation Failed Due to Pending Restart of Server?] | thelonedba | 2017-09-18 | [DBA][DEV] |
+| [Six Scary SQL Surprises] | Brent Ozar | 2017-09-06 | [DEV] |
+| [How the rowversion datatype works when adding and deleting columns] | Louis Davidson | 2017-09-26 | [DEV] |
+| [Quick! What's the difference between RANK, DENSE_RANK, and ROW_NUMBER?] | Douglas Kline | 2017-10-01 | [DEV] |
+| [A Serial Parallel Query] | Joe Obbish | 2017-10-20 | [DEV] |
+| [Add or Remove IDENTITY Property From an Existing Column Efficiently] | Dan Guzman | 2017-04-16 | [DBA][DEV] |
+| [How Do I Analyze a SQL Server Execution Plan?] | Kendra Little | 2017-09-22 | [DEV] |
+| [A Subtle Difference Between COALESCE and ISNULL] | Shaneis | 2017-10-09 | [DEV] |
+| [Puzzle Challenge: Graph Matching with T-SQL Part 1-Concepts] | Itzik Ben-Gan | 2017-08-08 | [DEV] |
+| [Graph Matching with T-SQL Part 3: Maximum Matching] | Itzik Ben-Gan | 2017-10-12 | [DEV] |
+| [Running PowerShell in a SQL Agent Job] | Derik Hammer | 2017-03-04 | [PS] |
+| [Line-Continuation in T-SQL] | Solomon Rutzky | 2017-10-27 | [DEV] |
+| [SQL Server 2017: Making Backups Great Again!] | John Sterrett | 2017-10-31 | [B][DBA] |
+| [Say NO to Venn Diagrams When Explaining JOINs] | Lukas Eder | 2016-07-05 | [DBA][DEV] |
+| [Surprise Delta Stores] | Joe Obbish | 2017-11-07 | [DEV] |
+| [SQL 2014 Clustered Columnstore index rebuild and maintenance considerations] | Denzil Ribeiro | 2015-07-08 | [DBA][DEV] |
+| [Multiple Output Datasets With R and SQL Server] | Kendra Little | 2017-11-06 | [DEV][R] |
+| [How to Avoid Excessive Sorts in Window Functions] | Lukas Eder | 2017-11-06 | [DEV] |
+| [Extracting a DAX Query Plan With Analysis Services 2016 Extended Events] | Koen Verbeeck | 2017-10-03 | [DAX], [XE] |
+| [What impact can different cursor options have?] | Aaron Bertrand | 2012-09-10 | [DBA][DEV] |
+| [SQL Smackdown!!! Cursors VS Loops] | SQL Undercover | 2017-11-16 | [DBA][DEV] |
+| [Using the OPTION (RECOMPILE) option for a statement] | Kimberly Tripp | 2010-04-15 | [DBA][DEV] |
+| [Execution Plan Caching and Reuse] | Microsoft | 2015-02-12 | [DBA][DEV] |
+| [Buffer Management] | Microsoft | 1753-01-01 | [DBA][DEV] |
+| [RECOMPILE Hints and Execution Plan Caching] | Kendra Little | 2017-12-17 | [DBA][DEV] |
+| [Improving query performance with OPTION (RECOMPILE), Constant Folding and avoiding Parameter Sniffing issues] | Robin Lester | 2016-08-10 | [DBA][DEV] |
+| [Eight Different Ways to Clear the SQL Server Plan Cache] | Glenn Berry | 2016-03-26 | [DBA][DEV] |
+| [Introduction and FAQs about Microsoft Azure technologies] | Daniel Calbimonte | 2017-10-13 | [AZ][DEV] |
+| [Inside the XEvent Profiler] | Derik Hammer | 2017-10-11 | [DBA][DEV] |
+| [Does The Join Order of My Tables Matter?] | Bert Wagner | 2017-11-21 | [DBA][DEV] |
+| [Encrypting SQL Server connections with Let’s Encrypt certificates] | Derik Hammer | 2017-11-12 | [DBA] |
+| [Start SQL Server without tempdb] | Kenneth Fisher | 2016-01-20 | [DBA] |
+| [How to configure database mail in SQL Server] | Bojan Petrovic | 2017-11-22 | [DBA] |
+| [Understanding SQL server memory grant] | Jay Choe | 2010-02-16 | [DBA][DEV] |
+| [Cleanly Uninstalling Stubborn SQL Server Components] | Aaron Bertrand | 2015-10-06 | [DBA] |
+| [Hey! What's the deal with SQL Server NOCOUNT and T-SQL WHILE loops?] | @sqL_handLe | 2017-17-30 | [DEV] |
+| [Query Store Settings] | Erin Stellato | 2010-11-28 | [QS] |
+| [Using Plan Explorer with Entity Framework] | Jason Hall | 2010-11-28 | [DEV] |
+| [Overview of Encryption Tools in SQL Server] | Matthew McGiffen | 2017-12-05 | [DBA][DEV] |
+| [Clustered Index Uniquifier Existence and Size] | Solomon Rutzky | 2017-09-18 | [DBA][DEV] |
+| [Understanding Logging and Recovery in SQL Server] | Paul Randal | 2009-02-01 | [DBA][B] |
+| [Understanding SQL Server Backups] | Paul Randal | 2009-07-01 | [B][DBA] |
+| [Recovering from Disasters Using Backups] | Paul Randal | 2009-11-01 | [B][DBA] |
+| [Simple SQL: Handling Location Datatypes] | Joe Celko | 2017-10-19 | [DEV] |
+| [Improve SQL Server Performance by Looking at Plan Cache (Part 1)] | Thomas LaRock | 2014-10-30 | [DBA][DEV] |
+| [Improve SQL Server Performance by Looking at Plan Cache (Part 2)] | Thomas LaRock | 2014-10-30 | [DBA][DEV] |
+| [Improve SQL Server Performance by Looking at Plan Cache (Part 3)] | Thomas LaRock | 2014-10-30 | [DBA][DEV] |
+| [Take Care When Scripting Batches] | Michael J Swart | 2014-09-09 | [DBA][DEV] |
+| [When Measuring Timespans, try DATEADD instead of DATEDIFF] | Michael J Swart | 2017-12-20 | [DBA][DEV] |
+| [Which user function do I use?] | Kenneth Fisher | 2015-06-24 | [DBA][DEV] |
+| [What’s So Bad About Shrinking Databases with DBCC SHRINKDATABASE?] | Brent Ozar | 2017-12-29 | [DBA][DEV] |
+| [Which Collation is Used to Convert NVARCHAR to VARCHAR in a WHERE Condition? (Part A of 2: “Duck”)] | Solomon Rutzky | 2017-12-08 | [DBA][DEV] |
+| [Which Collation is Used to Convert NVARCHAR to VARCHAR in a WHERE Condition? (Part B of 2: “Rabbit”)] | Solomon Rutzky | 2017-12-11 | [DBA][DEV] |
+| [Current State of the NewSQL/NoSQL Cloud Arena] | Warner Chaves | 2017-11-27 | [DBA][DEV] |
+| [SQL Server 2017: JSON] | Sergey Syrovatchenko | 2017-11-17 | [X] |
+| [Simulating Bad Networks to Test SQL Server Replication] | John Paul Cook | 2018-01-02 | [DBA] |
+| [How to Turn on Instant File Initialization] | Greg Larsen | 2017-12-04 | [DBA] |
+| [Bad Idea Jeans: Finding Undocumented Trace Flags] | Brent Ozar | 2017-10-04 | [DEV] |
+| [A Method to Find Trace Flags] | Joe Obbish | 2018-01-16 | [DEV] |
+| [Using Windows stored credentials to connect to SQL in containers] | Andrew Pruski | 2018-01-17 | [DEV] |
+| [Step by Step Guide to Migrate SQL Server Data to SQL Server 2017] | Anoop Kumar | 2017-12-21 | [DBA][MG] |
+| [Nasty Fast PERCENT_RANK] | Alan Burstein | 2018-01-05 | [DEV] |
+| [Administrative Logins and Users] | Kenneth Fisher | 2015-11-02 | [DEV] |
+| [Parallelism in Hekaton (In-Memory OLTP)] | Niko Neugebauer | 2018-01-20 | [DEV] |
+| [Troubleshooting THREADPOOL Waits] | Klaus Aschenbrenner · | 2015-10-20 | [DEV] |
+| [Andy’s Excellent SSIS-in-the-Cloud Adventure, Part 1 – Build an ADFv2 IR Instance] | Andy Leonard · | 2018-01-28 | [AZ][SSIS] |
+| [PRINT vs. RAISERROR] | sqlity.net · | 2012-05-27 | [DEV] |
+| [Without ORDER BY, You Can’t Depend On the Order of Results] | Michael J Swart · | 2013-09-13 | [DEV] |
+| [Query Store and “in memory”] | Erin Stellato · | 2018-01-31 | [QS] |
+| [Setting and Identifying Row Goals in Execution Plans] | Paul White · | 2018-02-12 | [DEV] |
+| [Azure and Windows PowerShell: The Basics] | Nicolas Prigent · | 2017-12-29 | [AZ] |
+| [Auditing Linked Servers] | Thomas LaRock | 2018-02-08 | [DEV] |
+| [An alternative to data masking] | Daniel Hutmacher | 2018-02-05 | [DEV] |
+| [Safely and Easily Use High-Level Permissions Without Granting Them to Anyone: Server-level] | Solomon Rutzky | 2018-02-15 | [DBA] |
+| [PLEASE, Please, please Stop Using Impersonation, TRUSTWORTHY, and Cross-DB Ownership Chaining] | Solomon Rutzky | 2018-12-30 | [DBA] |
+| [Indexing and Partitioning] | DBA From The Cold | 2018-02-21 | [DEV] |
+| [Schema Compare for SQL Server] | Thomas Larock | 2018-02-14 | [DEV] |
+| [How to change SQL Server ERRORLOG location] | Mark Varnas | 2018-03-04 | [DBA] |
+| [The Uni-Code: The Search for the True List of Valid Characters for T-SQL Regular Identifiers, Part 1] | Solomon Rutzky | 2018-04-02 | [DBA][DEV] |
+| [The Uni-Code: The Search for the True List of Valid Characters for T-SQL Regular Identifiers, Part 2] | Solomon Rutzky | 2018-04-04 | [DBA][DEV] |
+| [What’s in a Name?: Inside the Wacky World of T-SQL Identifiers] | Solomon Rutzky | 2018-04-09 | [DBA][DEV] |
+| [Programming SQL Server with SQL Server Management Objects Framework] | Darko Martinović | 2018-04-09 | [DEV] |
+| [Interval Queries in SQL Server] | Itzik Ben-Gan | 2013-06-12 | [DEV] |
+| [Dealing with date and time instead of datetime] | Rob Farley | 2018-03-29 | [DEV] |
+| [Insight into the SQL Server buffer cache] | Ed Pollack | 2018-02-18 | [DBA][DEV] |
+| [A concrete example of migration between an Oracle Database and SQL Server using Microsoft Data Migration Assistant] | Jefferson Elias | 2018-04-12 | [DBA][DEV] |
+| [Audit SQL Server stop, start, restart] | Steve Keeler | 2018-03-12 | [DBA] |
+| [Query tuning: Apply yourself] | Daniel Janik | 2018-04-06 | [DEV] |
+| [How to identify and monitor unused indexes in SQL Server] | Nikola Dimitrijevic | 2018-04-17 | [IDX] |
+| [Benchmarking: 1-TB table population (part 1: the baseline)] | Paul Randal | 2010-01-21 | [BENCH] |
+| [Benchmarking: 1-TB table population (part 2: optimizing log block IO size and how log IO works)] | Paul Randal | 2010-01-27 | [BENCH] |
+| [An overview of SQL Server database migration tools provided by Microsoft] | Jefferson Elias | 2018-03-16 | [DBA][MG] |
+| [Calling Http endpoints in T-SQL using CURL extension] | Jovan Popovic | 2018-04-17 | [CLR] |
+| [Why Table Join Orders In Relational Databases] | Bert Wagner | 2018-04-16 | [DEV] |
+| [Finding overlapping ranges of data] | Louis Davidson | 2018-04-18 | [DEV] |
+| [Avoid use of the MONEY and SMALLMONEY datatypes] | Phil Factor | 2018-04-18 | [DEV] |
+| [Provisioning SQL Server Instances with Docker] | Laerte Junior | 2018-04-18 | [DBA] |
+| [Understanding the graphical representation of the SQL Server Deadlock Graph] | Minette Steynberg | 2016-08-16 | [DBA][DEV] |
+| [Digitally Signing a Stored Procedure To Allow It To Run With Elevated Permissions] | SQL Undercover | 2018-05-02 | [DBA][DEV] |
+| [NOLOCK and Top Optimization] | Dmitry Piliugin | 2018-04-12 | [DEV] |
+| [Operator Precedence versus the Confusing Constraint Translation] | Louis Davidson | 2018-04-30 | [DEV] |
+| [Interval Queries in SQL Server] | Itzik Ben-Gan | 2013-06-13 | [DEV] |
+| [Query Trace Column Values] | Dmitry Piliugin | 2018-04-23 | [XE] |
+| [Concurrency Week: How to Delete Just Some Rows from a Really Big Table] | Brent Ozar | 2018-04-27 | [DEV] |
+| [Break large delete operations into chunks] | Aaron Bertrand | 2013-03-13 | [DBA][DEV] |
+| [How to perform a page level restore in SQL Server - Jayaram] | Prashanth Jayaram | 2018-08-18 | [DBA][DEV] |
+| [Grouping dates without blocking operators] | Daniel Hutmacher | 2018-05-14 | [DEV] |
+| [What’s CHECKDB doing in my database restore?] | Mike Fal | 2018-04-10 | [DBA] |
+| [How To Hide An Instance Of SQL Server] | Thomas Larock | 2018-04-10 | [DBA] |
+| [Troubleshooting Parameter Sniffing Issues the Right Way: Part 1] | Tara Kizer | 2018-03-06 | [DEV] |
+| [Troubleshooting Parameter Sniffing Issues the Right Way: Part 2] | Tara Kizer | 2018-03-07 | [DEV] |
+| [Troubleshooting Parameter Sniffing Issues the Right Way: Part 3] | Tara Kizer | 2018-03-06 | [DEV] |
+| [When to use the SELECT…INTO statement] | Phil Factor | 2018-03-19 | [DEV] |
+| [Temp Tables In SSIS] | Tim Mitchel | 2018-05-29 | [SSIS] |
+| [Changing the Collation of the Instance, the Databases, and All Columns in All User Databases] | Solomon Rutzky | 2018-06-11 | [DBA] |
+| [10 Cool SQL Optimisations That do not Depend on the Cost Model] | Lukas Eder | 2017-09-28 | [DBA][DEV] |
+| [Scheduling powershell tasks with sql agent] | Chrissy Lemaire | 2017-09-26 | [J][PS] |
+| [Three ways to track logins using dbatools] | Chrissy Lemaire | 2018-04-10 | [PS] |
+| [Impact of Fragmentation on Execution Plans] | Jonathan Kehayias | 2017-12-18 | [DEV] |
+| [How to “debug” a Linked Server from SQL Server to an Oracle Database instance] | Jefferson Elias | 2018-06-11 | [DEV] |
+| [How to implement error handling in SQL Server] | Bojan Petrovic | 2018-06-15 | [DEV] |
+| [SQL Server Closure Tables] | Phil Factor | 2018-04-10 | [DEV] |
+| [Deadlock victim choice in SQL Server - an exception?] | Josh Darnell | 2018-05-10 | [DBA][DEV] |
+| [Azure and Windows PowerShell: The Basics] | Nicolas Prigent | 2017-12-29 | [AZ][PS] |
+| [Azure and Windows PowerShell: Getting Information] | Nicolas Prigent | 2018-06-26 | [AZ][PS] |
+| [Be our guest, be our guest, put our database to the test] | Kenneth Fisher | 2018-06-25 | [DBA] |
+| [Finding code smells using SQL Prompt: the SET NOCOUNT problem (PE008 and PE009)] | Phil Factor | 2018-01-04 | [DEV] |
+| [DATABASES 101 guide for the non-technical professional] | Thomas LaRock | 2018-07-05 | [DBA][DEV] |
+| [Understanding your Azure EA Billing Data and Building a Centralized Data Storage Solution] | Feodor Georgiev | 2018-07-17 | [AZ] |
+| [READ COMMITTED SNAPSHOT ISOLATION and High version_ghost_record_count] | Uwe Ricken | 2018-03-06 | [DBA][DEV] |
+| [In-Memory OLTP Indexes – Part 1: Recommendations.] | Kunal Karoth | 2017-11-02 | [IDX] |
+| [In-Memory OLTP Indexes – Part 2: Performance Troubleshooting Guide.] | Kunal Karoth | 2017-11-14 | [IDX] |
+| [Optimization Thresholds – Grouping and Aggregating Data, Part 1] | Itzik Ben-Gan | 2018-04-10 | [DEV] |
+| [Optimization Thresholds – Grouping and Aggregating Data, Part 2] | Itzik Ben-Gan | 2018-05-09 | [DEV] |
+| [Optimization Thresholds – Grouping and Aggregating Data, Part 3] | Itzik Ben-Gan | 2018-06-13 | [DEV] |
+| [Optimization Thresholds – Grouping and Aggregating Data, Part 4] | Itzik Ben-Gan | 2018-07-11 | [DEV] |
+| [Optimization Thresholds – Grouping and Aggregating Data, Part 5] | Itzik Ben-Gan | 2018-08-08 | [DEV] |
+| [When DBCC OpenTran doesn’t list all open transactions] | Mohamed | 2013-02-17 | [DBA] |
+| [How I spot not-yet-documented features in SQL Server CTPs] | Aaron Bertrand | 2015-12-02 | [DBA] |
+| [More ways to discover changes in new versions of SQL Server] | Aaron Bertrand | 2016-03-30 | [DBA] |
+| [Tail-Log Backup and Restore in SQL Server] | Prashanth Jayaram | 2018-05-31 | [B][DBA] |
+| [Database Filegroup(s) and Piecemeal restores in SQL Server] | Prashanth Jayaram | 2018-06-22 | [DBA] |
+| [Updating Statistics with Ola Hallengren’s Script] | Erin Stellato | 2018-06-22 | [DBA] |
+| [Interview questions on SQL Server database backups, restores and recovery – Part I] | Prashanth Jayaram | 2018-07-25 | [B][DBA] |
+| [Interview questions on SQL Server database backups, restores and recovery – Part II] | Prashanth Jayaram | 2018-07-25 | [B][DBA] |
+| [Interview questions on SQL Server database backups, restores and recovery – Part III] | Prashanth Jayaram | 2018-07-25 | [B][DBA] |
+| [Can Rowstore Compression Beat Columnstore Compression?] | Joe Obbish | 2018-06-28 | [DBA][DEV] |
+| [Inside the Storage Engine: Anatomy of a record] | Paul Randal | 2007-09-30 | [DBA][DEV] |
+| [Inside the Storage Engine: Using DBCC PAGE and DBCC IND to find out if page splits ever roll back] | Paul Randal | 2007-10-01 | [DBA][DEV] |
+| [Inside the Storage Engine: Anatomy of a page] | Paul Randal | 2007-10-03 | [DBA][DEV] |
+| [Inside the Storage Engine: Anatomy of an extent] | Paul Randal | 2007-10-03 | [DBA][DEV] |
+| [Inside the Storage Engine: IAM pages, IAM chains, and allocation units] | Paul Randal | 2007-10-04 | [DBA][DEV] |
+| [Inside The Storage Engine: GAM, SGAM, PFS and other allocation maps] | Paul Randal | 2008-03-14 | [DBA][DEV] |
+| [Disaster recovery 101: fixing a broken boot page] | Paul Randal | 2015-06-23 | [DBA][DEV] |
+| [How to download a sqlservr.pdb symbol file] | Paul Randal | 2011-04-13 | [DBA][DEV] |
+| [A cause of high-duration ASYNC_IO_COMPLETION waits] | Paul Randal | 2014-03-19 | [DBA][DEV] |
+| [How to solve the Identity Crisis in SQL Server] | Ed Pollack | 2017-11-14 | [DBA][DEV] |
+| [Azure SQL Database Performance and Service Tiers Explained] | Glenn Berry | 2018-08-01 | [AZ] |
+| [What To Do When Wait Stats Don’t Help] | Joe Obbish | 2018-07-20 | [DEV] |
+| [SQL Server Brute Force Attack Detection: Part 1] | Ryan G Conrad | 2018-03-26 | [DBA] |
+| [SQL Server Brute Force Attack Detection: Part 2] | Ryan G Conrad | 2018-03-26 | [DBA] |
+| [SQL Server Brute Force Attack Detection: Part 3] | Ryan G Conrad | 2018-03-26 | [DBA] |
+| [SQLCLR vs SQL Server 2017, Part 8: Is SQLCLR Deprecated in Favor of Python or R (sp_execute_external_script)?] | Solomon Rutzky | 2018-08-09 | [DBA][DEV] |
+| [Sql Server Agent For Azure Sql Database, Azure Elastic Database Pools & Azure Managed Instance] | ? | 2018-07-20 | [AZ] |
+| [Storage performance best practices and considerations for Azure SQL DB Managed Instance (General Purpose)] | Dimitri Furman | 2018-07-20 | [AZ] |
+| [T-SQL Tuesday #017: APPLY: It Slices! It Dices! It Does It All!] | Brad Schulz | 2011-04-12 | [DEV] |
+| [SQL Server Encryption, What’s The Key Hierarchy All About?] | David Fowler | 2018-08-12 | [DBA][DEV] |
+| [Overview of the SQLCMD utility in SQL Server] | Prashanth Jayaram | 2018-08-13 | [DBA][DEV] |
+| [The BCP (Bulk Copy Program) command in action] | Prashanth Jayaram | 2018-08-13 | [DBA][DEV] |
+| [Measuring Query Execution Time] | Grant Fritchey | 2018-08-13 | [DBA][DEV] |
+| [How to Check Performance on a New SQL Server] | Brent Ozar | 2018-08-03 | [DBA][DEV] |
+| [Questions About Kerberos and SQL Server That You Were Too Shy to Ask] | Kathi Kellenberger | 2018-08-21 | [DBA] |
+| [SQL Server Execution Plans overview] | Ahmad Yaseen | 2018-07-04 | [DBA][DEV] |
+| [SQL Server Execution Plans types] | Ahmad Yaseen | 2018-07-23 | [DBA][DEV] |
+| [How to Analyze SQL Execution Plan Graphical Components] | Ahmad Yaseen | 2018-09-07 | [DBA][DEV] |
+| [Query optimization techniques in SQL Server: the basics] | Ed Pollack | 2018-05-30 | [DBA][DEV] |
+| [Query optimization techniques in SQL Server: tips and tricks] | Ed Pollack | 2018-06-19 | [DBA][DEV] |
+| [Query optimization techniques in SQL Server: Database Design and Architecture] | Ed Pollack | 2018-07-13 | [DBA][DEV] |
+| [SQL Query Optimization Techniques in SQL Server: Parameter Sniffing] | Ed Pollack | 2018-09-04 | [DBA][DEV] |
+| [Similarities and Differences among RANK, DENSE_RANK and ROW_NUMBER Functions] | Ben Richardson | 2018-08-20 | [DBA][DEV] |
+| [Temporal Tables Under The Covers] | Randolph West | 2015-11-17 | [DBA][DEV] |
+| [Faking Temporal Tables with Triggers] | Bert Wagner | 2018-09-11 | [DBA][DEV] |
+| [SQL queries to manage hierarchical or parent-child relational rows in SQL Server] | Dipon Roy | 2014-09-16 | [DBA][DEV] |
+| [Choosing Between Table Variables and Temporary Tables] | Phil Factor | 2018-05-11 | [DBA][DEV] |
+| [What's New in the First Public CTP of SQL Server 2019] | Aaron Bertrand | 2018-09-24 | [DBA][DEV] |
+| [SQL Server support for TLS 1.2 – Read This First!] | Aaron Bertrand | 2016-03-03 | [DBA][DEV] |
+| [Misconceptions in SQL Server: A Trio of table variables] | Gail Shaw | 2010-10-12 | [DBA][DEV] |
+| [Using the Same Column Twice in a SQL UPDATE Statement] | SQL Theater | 2018-09-13 | [DBA][DEV] |
+| [How to perform a performance test against a SQL Server instance] | Jefferson Elias | 2018-09-14 | [DBA][DEV] |
+| [The Black Art Of Spatial Index Tuning In SQL Server] | Todd Jackson | 2011-04-26 | [DEV] |
+| [Patching SQL Server on Windows notes from the field] | Kevin Chant | 2019-01-10 | [DBA] |
+| [Availability Group Readable Secondaries – Just Say No] | Jonathan Kehayias | 2019-01-10 | [DBA] |
+| [Finding the Slowest Query in a Stored Procedure] | Erin Stellato | 2018-12-13 | [DBA][DEV] |
+| [A Monumental Migration to SQL Server 2016 – Part 1] | Andy Levy | 2019-01-07 | [DBA][MG] |
+| [A Monumental Migration to SQL Server 2016 – Part 2] | Andy Levy | 2019-01-09 | [DBA][MG] |
+| [A unique review of SQL Server index types] | Kevin Chant | 2019-10-18 | [DBA][DEV] |
+| [Don’t Just Rely on Query Execution Stats for T-SQL Execution] | Kevin Chant | 2018-09-18 | [DBA][DEV] |
+| [Posting SQL Server notifications to Slack] | Alessandro Alpi | 2018-09-19 | [DBA][DEV] |
+| [How to create DACPAC file?] | Kamil Nowinski | 2018-10-31 | [DBA][DEV] |
+| [Find the Next Non-NULL Row in a Series With SQL] | Lukas Eder | 2018-09-03 | [DEV] |
+| [Calculate Percentiles to Learn About Data Set Skew in SQL] | Lukas Eder | 2019-01-22 | [DEV] |
+| [Comparing multiple rows insert vs single row insert with three data load methods] | Phil Factor | 2013-02-21 | [DBA][DEV] |
+| [The Cause of Every Deadlock in SQL Server] | Thomas Larock | 2018-09-19 | [DBA][DEV] |
+| [Deadlock Troubleshooting, Part 1] | Bart Dunkan | 2006-09-08 | [DBA][DEV] |
+| [Deadlock Troubleshooting, Part 2] | Bart Dunkan | 2006-09-12 | [DBA][DEV] |
+| [Deadlock Troubleshooting, Part 3] | Bart Dunkan | 2006-09-08 | [DBA][DEV] |
+| [The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 1] | Milosra Divojevic | 2018-10-04 | [DBA][DEV] |
+| [The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 2] | Milosra Divojevic | 2018-10-05 | [DBA][DEV] |
+| [The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 3] | Milosra Divojevic | 2018-10-08 | [DBA][DEV] |
+| [Creating a SQL Server 2019 Demo Environment in a Docker Container] | Cathrine Wilhelmsen | 2018-12-02 | [DBA][DEV] |
+| [Overview of Data Compression in SQL Server] | Prashanth Jayaram | 2018-12-06 | [DBA][DEV] |
+| [SQL Server Hash Match Operator] | Hugo Kornelis | 2018-06-01 | [DBA][DEV] |
+| [How to use Microsoft Assessment and Planning (MAP) Toolkit for SQL Server] | Musab Umair | 2017-03-31 | [DBA] |
+| [Improve the Performance of Your Azure SQL Database (and Save Money!) with Automatic Tuning] | Monica Rathbun | 2019-01-30 | [AZ][DBA] |
+| [The Importance of Database Compatibility Level in SQL Server] | Glenn Berry | 2019-01-14 | [DBA] |
+| [Azure Managed vs Unmanaged disks : The choice] | Samir Farhat | 2017-05-31 | [AZ] |
+| [Storage options for SQL Server database files in Azure] | James Serra | 2019-01-29 | [AZ] |
+| [The Performance of Window Aggregates Revisited with SQL Server 2019] | Kathi Kellenberger | 2019-02-11 | [DEV] |
+| [Super Scaling Singleton Inserts] | Chris Adkin | 2015-02-19 | [DEV] |
+| [Preparation for SQL Server Installation] | Michal Sadowski | 2018-12-12 | [DBA] |
+| [Executing xp_cmdshell with Non SysAdmin Account] | Lucas Kartawidjaja | 2019-01-04 | [DBA] |
+| [Generating SQL using Biml (T-SQL Tuesday #110)] | Cathrine Wilhelmsen | 2019-01-08 | [DEV] |
+| [Using Temporary Procedures] | Phil Factor | 2019-02-08 | [DBA][DEV] |
+| [Introduction to SQL Server Security — Part 1] | Robert Sheldon | 2018-12-31 | [SEC] |
+| [Introduction to SQL Server Security — Part 2] | Robert Sheldon | 2019-01-28 | [SEC] |
+| [Introduction to SQL Server Security — Part 3] | Robert Sheldon | 2019-02-25 | [SEC] |
+| [Introduction to SQL Server Security — Part 4] | Robert Sheldon | 2019-03-26 | [SEC] |
+| [Introduction to T-SQL Window Functions] | Kathi Kellenberger | 2018-07-13 | [DBA][DEV] |
+| [Intro to Debugging a Memory Dump] | Adam W. Saxton | 2012-03-15 | [DBA][DEV] |
+| [Considering Security with SQL Bulk Insert] | Timothy Smith | 2019-01-17 | [SEC] |
+| [SQL Server 2012 AlwaysOn – Part 11 – Performance Aspects and Performance Monitoring I] | Juergen Thomas | 2013-04-21 | [DBA] |
+| [SQL Server 2012 AlwaysOn – Part 11 – Performance Aspects and Performance Monitoring II] | Juergen Thomas | 2013-04-24 | [DBA] |
+| [Data Compression Internals] | Jess Pomfret | 2019-02-19 | [DBA][DEV] |
+| [SQL Server Data Compression – Crunch Time!] | Jeff Mlakar | 2019-02-22 | [DBA][DEV] |
+| [Create a slipstream installer for SQL Server on Windows] | Randolph West | 2018-10-24 | [DBA] |
+| [Temporary Tables in SQL Server] | Phil Factor | 2011-09-01 | [DBA][DEV] |
+| [SQL unit testing with the tSQLt framework for beginners] | Esat Erkec | 2019-03-19 | [DEV] |
+| [Oracle vs. SQL Server Architecture] | Kellyn Pot'vin-Gorman | 2019-03-20 | [DBA][DEV] |
+| [Oracle RAC vs. SQL Server AG] | Kellyn Pot'vin-Gorman | 2019-03-28 | [DBA][DEV] |
+| [SSIS vs. Oracle GG] | Kellyn Pot'vin-Gorman | 2019-04-10 | [DBA][DEV] |
+| [Analysis Services Telemetry: What information does SSAS submit? and how has it changed in SSAS 2019?] | Shabnam Watson | 2019-04-13 | [DBA] |
+| [The Curious Case of… how to find FILESTREAM info from an MDF] | Paul Randal | 2019-04-18 | [DBA] |
+| [Does index fragmentation matter?] | Tibor Karaszi | 2019-04-05 | [DBA][DEV] |
+| [How to perform a Page Level Restore in SQL Server] | Klaus Aschenbrenner | 2015-10-13 | [DBA] |
+| [How Much Memory Does SSIS Need?] | Tim Mitchell | 2019-05-02 | [SSIS] |
+| [The Curious Case of… trying to find an MDF file in a RAW disk] | Paul Randal | 2019-04-30 | [DBA] |
+| [Understanding the SQL Server NOLOCK hint] | Greg Robidoux | 2019-04-29 | [DBA][DEV] |
+| [Methods to Insert Data into SQL Server] | Ed Pollack | 2019-04-10 | [DBA][DEV] |
+| [Batching data manipulation is great as long as you do it correctly] | Jeff Iannucci | 2018-09-15 | [DBA][DEV] |
+| [Azure and Windows PowerShell: Using VM Extensions] | Nicolas Prigent | 2018-10-09 | [PS] |
+| [Reloading fact tables with zero downtime] | Daniel Hutmacher | 2014-08-24 | [DBA][DEV] |
+| [Transferring Data Efficiently by Using Partition Switching] | Microsoft Docs | 2012-04-10 | [DBA][DEV] |
+| [Another Difference between N'' and '' in SQL Server] | Shane O'Neill | 2018-10-24 | [DBA][DEV] |
+| [Ignoring NULLs with FIRST_VALUE] | Bert Wagner | 2018-08-28 | [DEV] |
+| [Shortchanged with International Money in SQL Server] | Bert Wagner | 2018-09-25 | [DEV] |
+| [Understanding database recovery with SQL Server 2016 Extended Events] | Rajendra Gupta | 2016-07-05 | [DBA] |
+| [SQL Server 2019: Batch Mode on Rowstore] | Dmitri Pilugin | 2018-10-04 | [DBA][DEV] |
+| [Using Indexing To Solve Blocking and Deadlocking Issues] | David Fowler | 2019-03-15 | [DBA][DEV] |
+| [Change collation of existing Azure SQL database] | Fonseca Sergio | 2018-11-09 | [AZ] |
+| [Creating Database Maintenance Plans] | Nisarg Upadhyay | 2018-11-09 | [DBA] |
+| [SQL Server Upgrade Checklist] | Mike Walsh | 2019-03-07 | [DBA] |
+| [Failing a PowerShell Sql Agent step] | Stuart Moore | 2019-03-04 | [PS] |
+| [The Curse of Cursor Options] | Brent Ozar | 2018-11-02 | [DBA][DEV] |
+| [Accelerated Database Recovery; Instant Rollback and Database Recovery] | Rajendra Gupta | 2019-03-12 | [DBA] |
+| [Accelerated Database Recovery and Long Running Transactions with Transaction Log Growth] | Rajendra Gupta | 2019-03-21 | [DBA] |
+| [Using docker named volumes to persist databases in SQL Server] | Andrew Pruski | 2019-03-21 | [DBA][DEV] |
+| [T-SQL bugs, pitfalls, and best practices – determinism] | Itzik Ben-Gan | 2019-03-13 | [DBA][DEV] |
+| [Grouped Concatenation in SQL Server] | Aaron Bertrand | 2014-08-06 | [DBA][DEV] |
+| [Working with tempdb in SQL Server 2005] | Microsoft Docs | 2010-01-28 | [DBA][DEV] |
+| [SQLskills SQL101: Temporary table misuse] | Paul Randal | 2017-03-13 | [DBA][DEV] |
+| [Running SQL Server on Linux on your own laptop] | Kevin Chant | 2019-03-26 | [DBA][DEV] |
+| [SSIS and Pentaho – A Quick Comparison] | Koen Verbeeck | 2018-10-17 | [SSIS] |
+| [WinDbg and SQL Server Fun] | Shane O'Neill | 2017-06-14 | [DBA][DEV] |
+| [Certificates, Proxies and Jobs! Oh My!] | Kenneth Fisher | 2016-04-27 | [DBA][J] |
+| [SQL Server: Diagnosing Intermittent Connectivity Issues] | Mitch Wheat | 2019-04-12 | [DBA][DEV] |
+| [Difference between Identity & Sequence in SQL Server] | Ben Richardson | 2018-08-15 | [DBA][DEV] |
+| [Does the Rowmodctr Update for Non-Updating Updates?] | Brent Ozar | 2019-05-20 | [DBA][DEV] |
+| [An Intro To Data Modeling] | JBOSEMS | 2019-04-12 | [DBA][DEV] |
+| [On telemetry and other data collected by SQL Server] | Aaron Bertrand | 2016-04-04 | [DBA][DEV] |
+| [Purging data with batched deletes] | Andy Mallon | 2019-04-03 | [DBA][DEV] |
+| [Don’t Forget RoboCopy] | John Morehouse | 2019-03-03 | [DBA] |
+| [Understanding the XML description of the Deadlock Graph in SQL Server] | Minette Steynberg | 2016-04-26 | [DBA][DEV] |
+| [What Is The Difference Between Checkpoint And Lazy Writer] | Saurabh Sinha | 2012-10-01 | [DBA] |
+| [Efficiently Indexing Long Character Strings] | Jon Seigel | 2013-07-13 | [DBA][DEV] |
+| [SQL Server Read-only tables] | Kenneth Fisher | 2019-01-21 | [DBA] |
+| [Slow inserts across a linked server?] | Max Vernon | 2019-04-25 | [DBA][DEV] |
+| [Using IGNORE NULLS With SQL Window Functions to Fill Gaps] | Lukas Eder | 2019-04-24 | [DBA][DEV] |
+| [SQL Server Logical Reads] | Ami Levin | 2008-01-01 | [DBA][DEV] |
+| [Two Words For Faster Scalar Functions] | Bert Wagner | 2018-12-04 | [DBA][DEV] |
+| [How to Get SQL Server Dates and Times Horribly Wrong] | Robert Sheldon | 2015-05-28 | [DBA][DEV] |
+| [Diagnosing and Resolving Spinlock Contention on SQL Server] | Ewan Fairweather, Mike Ruthruff | 2011-06-01 | [DBA][DEV] |
+| [Diagnosing and Resolving Latch Contention on SQL Server] | Ewan Fairweather, Mike Ruthruff | 2011-06-01 | [DBA][DEV] |
+| [Advanced Nutanix: SQL Server on Nutanix Best Practices Released!] | Steven Poitras | 2013-11-09 | [DBA] |
+| [Gaps and Islands Across Date Ranges] | Bert Wagner | 2019-03-12 | [DBA] |
+| [NOT NULL Persisted Computed Columns (And What They Allow)] | Louis Davidson | 2019-06-01 | [DBA][DEV] |
+| [How many ways are there to sort GUIDs? How much time do you have?] | Raymond Chen | 2019-04-26 | [DBA][DEV] |
+| [How do I force a SQL Login to change it’s password on next login] | Kenneth Fisher | 2019-06-05 | [DBA] |
+| [SQL Server Performance Benchmarking with Patterns] | Paul Brewer | 2017-10-19 | [BENCH] |
+| [SQL Server function to convert integer date to datetime format] | Tim Ford | 2019-05-24 | [DBA][DEV] |
+| [Storing Utc Is Not A Silver Bullet] | Jon Skeet | 2019-03-27 | [DBA][DEV] |
+| [Logical Query Processing Part 8 : SELECT and ORDER BY] | Itzik Ben-Gan | 2016-11-15 | [DBA][DEV] |
+| [SQL Server Common Table Expression vs Temp Table] | Rick Dobson | 2019-05-22 | [DBA][DEV] |
+| [Which Query Used The Most Cpu? Implementing Extended Events] | Grant Fritchey | 2019-06-03 | [XE] |
+| [SQL Server Plan Cache Limits] | Erin Stellato | 2019-05-28 | [DBA] |
+| [SQL Server and ReFS: Part 1 – DBCC and In Memory OLTP] | swasheck | 2014-11-11 | [DBA] |
+| [SQL Server and ReFS: Part 2 – FIO Benchmarking NTFS vs. ReFS] | swasheck | 2014-12-18 | [DBA] |
+| [Why Rolling back inserts with Identity columns is a bad idea] | Adrian Buckman | 2019-04-11 | [DBA][DEV] |
+| [What’s Better, CTEs or Temp Tables?] | Brent Ozar | 2019-06-06 | [DBA][DEV] |
+| [The Difference Between SQL’s JOIN .. ON Clause and the Where Clause] | Lukas Eder | 2019-04-09 | [DBA][DEV] |
+| [My IT department installed an antivirus with SQL Server] | Randolph West | 2019-06-05 | [DBA] |
+| [An Experiment with Deadlocks - ROWLOCK hint myth] | Jason Brimhall | 2019-03-25 | [DBA][DEV] |
+| [Adding a New Transaction Log File when the Existing Log is Full] | Max Vernon | 2019-03-19 | [DBA] |
+| [Transactions Don't Start At BEGIN TRAN] | Josh Darnell | 2019-06-05 | [DBA][DEV] |
+| [CAST/CONVERT makes expressions nullable] | Daniel Hutmacher | 2019-06-05 | [DBA][DEV] |
+| [Deciding between COALESCE and ISNULL in SQL Server] | Aaron Bertrand | 2012-04-30 | [DBA][DEV] |
+| [How do you choose which columns to include in your SQL Server clustered index?] | agilesql | 2019-06-01 | [DBA][DEV] |
+| [A ever-increasing Clustered Key value doesn’t scale] | Klaus Aschenbrenner | 2014-04-15 | [DBA][DEV] |
+| [SQL Server Bit reversion] | Rick | 2011-10-03 | [DBA][DEV] |
+| [Troubleshooting a renamed SQL Server] | Jamie Wick | 2019-06-05 | [DBA] |
+| [Are Differential Backups Necessary?] | Jamie Wick | 2019-04-02 | [B][DBA] |
+| [Updating Statistics on Secondary Replicas of the Availability Groups] | Niko Neugebauer | 2019-06-20 | [DBA] |
+| [It’s interesting how an OR short circuits] | Kenneth Fisher | 2019-06-17 | [DBA][DEV] |
+| [SQL Server NOLOCK Anomalies, Issues and Inconsistencies] | Aaron Bertrand | 2019-06-18 | [DBA][DEV] |
+| [Choosing a Database for Serverless Applications] | Alex DeBrie | 2019-06-22 | [DEV] |
+| [SQL Server On Linux: Forced Unit Access (Fua) Internals] | Robert Dorr | 2018-12-18 | [DBA] |
+| [Socrates: The New SQL Server in the Cloud] | Microsoft | 2019-05-01 | [DBA][DEV] |
+| [What permissions do temp stored procedures use?] | Kenneth Fisher | 2019-06-19 | [DBA][DEV] |
+| [Common SQL Server Mishaps] | Tim Radney | 2019-06-21 | [DBA] |
+| [SQL Server Agent for SQL Express on Linux] | Thom Andrews | 2019-06-18 | [DBA] |
+| [Trailing Spaces in SQL Server] | Bert Wagner | 2019-06-18 | [DEV] |
+| [Troubleshooting a Change in Query Performance] | Erin Stellato | 2019-06-20 | [P] |
+| [The Silent Bug I Find in Most Triggers] | Brent Ozar | 2019-05-06 | [DBA][DEV] |
+| [How to Copy a Table in SQL Server to Another Database] | Pablo Echeverria | 2019-05-14 | [DBA][DEV] |
+| [Configuration of SQL Server instance] | Michal Sadowski | 2019-06-18 | [DBA] |
+| [What is the SQL Server Virtual Log file and how to monitor it] | Musab Umair | 2017-04-26 | [DBA] |
+| [Important change to VLF creation algorithm in SQL Server 2014] | Paul Randal | 2015-01-06 | [DBA] |
+| [SQL Server Transaction Log Fragmentation: a Primer] | Greg Larsen | 2012-04-26 | [DBA] |
+| [8 Steps to better Transaction Log throughput] | Kimberly Tripp | 2019-01-01 | [DBA] |
+| [Joins With OR Clauses = 💔] | Erik Darling | 2019-06-04 | [DBA][DEV] |
+| [Thoughts on MAXDOP] | Erik Darling | 2019-06-18 | [DBA][DEV] |
+| [What the Arrow Sizes in Query Plans Really Mean] | Brent Ozar | 2019-06-21 | [DBA][DEV] |
+| [Query Store Best Practices] | Erin Stellato | 2019-06-25 | [DBA][DEV] |
+| [Introduction to Data Normalization: A Database "Best" Practice] | Scott Wambler | 2019-01-01 | [DBA][DEV] |
+| [Dr. OUTPUT or: How I Learned to Stop Worrying and Love the MERGE] | Adam Machanic | 2009-08-24 | [DBA][DEV] |
+| [SQL Server Tipping Games – Why Non-Clustered Indexes are just ignored!] | Klaus Aschenbrenner | 2013-06-12 | [DBA][DEV] |
+| [SQL Server Guide To NULL Handling] | Gavin Draper | 2018-11-29 | [DBA][DEV] |
+| [Living with SQL’s 900 Byte Index Key Length Limit] | Bart Duncan | 2011-01-06 | [DBA][DEV] |
+| [Memory-Optimized TempDB Metadata in SQL Server 2019 - SQLHack] | Ed Pollack | 2019-07-10 | [DBA][DEV] |
+| [Forcing A Plan That Has A Plan Guide] | Grant Fritchey | 2018-11-26 | [DBA][DEV] |
+| [Remember the Default Window] | Steve Jones | 2018-08-23 | [DBA][DEV] |
+| [The Impact of Non-Updating Updates] | Paul Randal | 2010-08-11 | [DBA][DEV] |
+| [What are Columnstore Indexes?] | Monica Rathbun | 2019-07-22 | [DBA][DEV] |
+| [PolyBase in SQL Server 2019 – The End of ETL?] | Benjamin Weissman | 2019-07-23 | [DBA][DEV] |
+| [Overview of Service Principal Name and Kerberos authentication in SQL Server] | Rajendra Gupta | 2019-07-18 | [DBA] |
+| [Data Transfer Strategies between MongoDB and SQL Server] | Phil Factor | 2019-07-22 | [DBA][DEV] |
+| [SQL Server and Excel Hierarchyid Example for Organization Charts] | Rick Dobson | 2019-07-04 | [DEV] |
+| [Difference between sp_execute and sp_executesql and exec] | Prasad Sahoo | 2015-02-09 | [DBA][DEV] |
+| [EXEC and sp_executesql – how are they different?] | Kimberly Tripp | 2010-04-05 | [DBA][DEV] |
+| [Little Bobby Tables, SQL Injection and EXECUTE AS] | Kimberly Tripp | 2010-04-04 | [DBA][DEV] |
+| [Examining the Performance Impact of an Adhoc Workload] | Erin Stellato | 2019-05-22 | [BENCH] |
+| [Backup to URL] | Jon Gurgul | 2019-01-01 | [B][DBA] |
+| [Spotting Unauthorized Configuration Settings in SQL Server] | Phil Factor | 2018-09-30 | [DBA][DEV] |
+| [Window Functions in SQL Server] | Fabiano Amorim | 2011-10-27 | [DBA][DEV] |
+| [Window Functions in SQL Server: Part 2-The Frame] | Fabiano Amorim | 2011-11-24 | [DBA][DEV] |
+| [An Intro to SQL Window Functions] | Neal Barnett | 2019-07-07 | [DBA][DEV] |
+| [SQL Database Performance Tuning for Developers] | Rodrigo Koch | 1753-01-01 | [P] |
+| [“But NOLOCK Is Okay When The Data Isn’t Changing, Right?”] | Brent Ozar | 2019-08-05 | [DBA][DEV] |
+| [tempdb Enhancements in SQL Server 2019] | Erin Stellato | 2019-08-02 | [BENCH] |
+| [Feature Restrictions in SQL Server 2019 are Worse Than Useless: a False Sense of Security And Wasted Opportunity] | Solomon Rutzky | 2019-08-05 | [SEC] |
+| [How to get SQL Server Sysadmin Privileges as a Local Admin with PowerUpSQL] | Scott Sutherland | 2017-05-23 | [PS][SEC] |
+| [Views of the Same Problem: Network Admin, DBA, and Developer] | Kyle Brandt | 2011-03-16 | [DBA][DEV] |
+| [Finding Max Concurrent Operations With T-SQL (Part 1)] | Kevin Feasel | 2019-01-02 | [DEV] |
+| [Finding Max Concurrent Operations With T-SQL (Part 2)] | Kevin Feasel | 2019-01-03 | [DEV] |
+| [Stack Overflow: The Architecture - 2016 Edition] | Nick Craver | 2019-02-17 | [DBA][DEV] |
+| [Stack Overflow: The Hardware - 2016 Edition] | Nick Craver | 2016-03-29 | [DBA] |
+| [Stack Overflow: How We Do Deployment - 2016 Edition] | Nick Craver | 2016-05-03 | [DBA][DEV] |
+| [Stack Overflow: How We Do Monitoring - 2018 Edition] | Nick Craver | 2018-11-29 | [DBA][DEV] |
+| [Stack Overflow: How We Do App Caching - 2019 Edition] | Nick Craver | 2019-08-06 | [DBA][DEV] |
+| [Adding a Missing Index Killed Performance] | Jeffry Schwartz | 2019-08-15 | [DBA][DEV] |
+| [Corruption in TempDB] | Steve Stedman | 2019-08-12 | [COR][DBA] |
+| [Corruption recovery using DBCC WRITEPAGE] | Paul Randal | 2014-02-13 | [COR][DBA] |
+| [Why DBCC CHECKDB can miss memory corruption] | Paul Randal | 2017-07-19 | [COR][DBA] |
+| [Fixing Cardinality Estimation Errors with Filtered Statistics] | Klaus Aschenbrenner | 2013-10-29 | [DBA][DEV] |
+| [Plan Stitch: Harnessing the Best of Many Plans] | Bailu Ding, Sudipto Das Wentao … | 2018-07-01 | [DBA][DEV] |
+| [Query and Resource Optimization: Bridging the Gap] | Lalitha Viswanathan, Alekh Jindal … | 2018-02-01 | [DBA][DEV] |
+| [Cuttlefish: A Lightweight Primitive for Adaptive Query Processing] | Tomer Kaftan, Magdalena Balazinska … | 2018-02-01 | [DBA][DEV] |
+| [Leveraging Re-costing for Online Optimization of Parameterized Queries with Guarantees] | Anshuman Dutt, Vivek Narasayya … | 2017-05-01 | [DBA][DEV] |
+| [How to choose antivirus software to run on computers that are running SQL Server] | Microsoft | 2018-10-31 | [DBA][SEC] |
+| [Why is SYSDATETIME() slower than SYSUTCDATETIME()?] | Erik Darling | 2019-05-28 | [DBA][DEV] |
+| [Constant Time Recovery in Azure SQL Database] | Panagiotis Antonopoulos, Peter Byrne … | 2019-06-01 | [AZ] |
+| [Improving Optimistic Concurrency Control Through Transaction Batching and Operation Reordering] | Bailu Ding, Lucja Kot, Johannes Gehrke | 2019-01-01 | [DBA][DEV] |
+| [An Empirical Evaluation of In-Memory Multi-Version Concurrency Control] | Yingjun Wu, Joy Arulraj, Jiexi Lin … | 2019-01-01 | [DBA][DEV] |
+| [Automatically Indexing Millions of Databases in Microsoft Azure SQL Database] | Sudipto Das, Miroslav Grbic, Igor Ilic … | 2019-01-01 | [AZ][IDX] |
+| [Adding a Column with a Default Constraint] | Matthew Mcgiffen | 2019-07-16 | [DBA][DEV] |
+| [A Hidden Value Of Apply] | Erik Darling | 2019-06-24 | [DEV] |
+| [Improve Performance of UDFs with NULL ON NULL INPUT] | Jonathan Kehayias | 2018-12-27 | [DEV] |
+| [The ‘= NULL’ Mistake and other SQL NULL Heresies] | Phill Factor | 2019-06-17 | [DBA][DEV] |
+| [How to Corrupt a Database] | Max Vernon | 2019-07-29 | [DBA][COR] |
+| [SQL Server Page Types] | John Huang | 2011-10-31 | [DBA][DEV] |
+| [SQL Server Index Maintenance – You’re Doing It Wrong] | Sean Gallardy | 2019-09-01 | [DBA][DEV] |
+| [Stop Worrying About SQL Server Fragmentation] | Brent Ozar | 2012-08-14 | [DBA] |
+| [How much will it cost or save to rebuild that index?] | Jeff Moden | 2019-09-03 | [DBA][DEV] |
+| [To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?] | Russell Sears2, Catharine van Ingen … | 2019-04-01 | [DBA][DEV] |
+| [SQL Server UPSERT Patterns and Antipatterns] | Michael J Swart | 2017-07-20 | [DBA][DEV] |
+| [Use Caution with SQL Server's MERGE Statement] | Aaron Bertrand | 2018-07-24 | [DBA][DEV] |
+| [“UPSERT” Race Condition With MERGE] | Dan Guzman | 2009-01-31 | [DBA][DEV] |
+| [Checking for potential constraint violations before entering SQL Server TRY and CATCH logic] | Aaron Bertrand | 2012-02-18 | [DBA][DEV] |
+| [Performance impact of different error handling techniques] | Aaron Bertrand | 2012-08-12 | [DBA][DEV] |
+| [Backup and Restore Databases with CHECKSUM and VERIFYONLY] | Lori Brown | 2019-08-29 | [B][DBA] |
+| [dm_db_database_page_allocations] | Max Vernon | 2019-08-01 | [DBA][DEV] |
+| [Compress Big Tables] | Max Vernon | 2019-08-22 | [DBA][DEV] |
+| [Hardening SQL Server Security] | Mitch Wheat | 2019-08-21 | [DBA][SEC] |
+| [Splitting Strings With OPENJSON] | Dave Mason | 2019-05-06 | [DEV][X] |
+| [How to migrate to Amazon RDS for SQL Server using transactional replication] | Richard Waymire | 2018-05-17 | [AMZ][MG] |
+| [The Hardest Part Of Query Tuning: Logical Equivalence] | Erik Darling | 2019-08-13 | [DBA][DEV] |
+| [SQL Injection: What is it? Causes and exploits] | Ed Pollack | 2019-08-30 | [SEC] |
+| [SQL Injection: Detection and prevention] | Ed Pollack | 2019-08-30 | [SEC] |
+| [Some T-SQL INSERTs DO Follow the Fill Factor!] | Jeff Moden | 2019-08-08 | [DBA][DEV] |
+| [Install SQL Server 2019 Big Data Cluster using Azure Data Studio] | Niels Berglund | 2019-09-11 | [DBA][DEV] |
+| [Indirect Checkpoint and tempdb – the good, the bad and the non-yielding scheduler] | Parikshit Savjani | 2018-09-14 | [DBA] |
+| [Ghost Records in SQL Server… Now whats that ????] | Sachin Nandanwar | 2011-04-10 | [DBA] |
+| [Transaction Isolation Levels and sp_executesql] | Max Vernon | 2019-08-19 | [DBA][DEV] |
+| [Batch Mode Bitmaps in SQL Server] | Paul White | 2019-08-23 | [DBA][DEV] |
+| [Transparent Data Encryption (TDE) on Azure SQL database] | Ranga Babu | 2019-09-13 | [DBA][AZ] |
+| [Analyzing Estimates from the CSelCalcAscendingKeyFilter Calculator] | Josh Darnell | 2019-08-21 | [DEV] |
+| [Building Storage for SQL Server (and other database) Virtual Machines in the Cloud] | Joey Dantoni | 2019-09-18 | [AZ] |
+| [SQL Server Simple and Forced Parameterization] | Brady Upton | 2013-04-23 | [DBA][DEV] |
+| [How to use a SQL Server Plan Guide to Tune Queries] | Armando Prato | 2018-06-02 | [DBA][DEV] |
+| [Neglecting to Use, or Misusing, the RETURN Keyword (BP016)] | Phil Factor | 2019-08-14 | [DBA][DEV] |
+| [Defensive Error Handling] | Alex Kuznetsov | 2010-10-08 | [DBA][DEV] |
+| [A Self-Tuning Fill Factor Technique for SQL Server – Part 1] | Mike Byrd | 2019-08-20 | [DBA][DEV] |
+| [A Self-Tuning Fill Factor Technique for SQL Server – Part 2] | Mike Byrd | 2019-08-27 | [DBA][DEV] |
+| [SQL: Been told you can't access master database system views in Azure SQL Database? Not true!] | Greg Low | 2019-09-17 | [AZ] |
+| [How to increase SQL Database Full Backup speed using compression and Solid State Disks] | Henk | 2010-01-15 | [DBA] |
+| [Troubleshooting NUMA Node Imbalance Problems (HammerDB Benchmark)] | Klaus Aschenbrenner | 2019-09-23 | [BENCH] |
+| [SQL Server Unequal NUMA CPU engagement] | @sqL_handLe | 2019-09-19 | [DBA] |
+| [SSIS Connection Managers: OLE DB vs ODBC vs ADO.NET] | Hadi Fadlallah | 2019-10-04 | [SSIS] |
+| [SSIS Data Flows – ADO.NET vs. OLE DB vs. ODBC] | Ross at Datatell | 2015-01-13 | [SSIS] |
+| [SSIS – Fastest data flow task item for transferring data over the network] | Gilbert Quevauvilliers | 2013-01-19 | [SSIS] |
+| [The Case of the Vanishing Index Compression] | Louis Davidson | 2019-09-30 | [DBA][IDX] |
+| [Migrating from MSSQL to PostgreSQL - What You Should Know] | Severalnines | 2018-11-05 | [DEV] |
+| [Difference between Identity and Sequence in SQL Server 2012] | Muhammad Imran | 2012-05-01 | [DEV] |
+| [Sequence vs Identity – Performance Comparison] | Bill Anton | 2012-09-02 | [DEV] |
+| [Read Excel File in SQL Server with OPENROWSET or OPENDATASOURCE] | Diana Moldovan | 2019-10-10 | [DBA][DEV] |
+| [Upgrading SQL Server using Availability Groups – Checklist] | Thomas Rushton | 2019-10-17 | [DBA] |
+| [Using indexed views? WITH (NOEXPAND) for Standard Edition] | Randolph West | 2019-10-09 | [DEV][IDX] |
+| [Using indexed views? What is an imprecise or non-deterministic convert?] | Randolph West | 2019-10-16 | [DEV][IDX] |
+| [JSON in your Azure SQL Database? Let’s benchmark some options!] | Silvano Coriani | 2019-10-15 | [X] |
+| [Looking for strange - addition to system_health XE] | Tibor Karaszi's | 1753-01-01 | [DBA][XE] |
+| [What's new in SQL Server version x] | Tibor Karaszi's | 1753-01-01 | [DBA][DEV] |
+| [The ultimate guide to the datetime datatypes] | Tibor Karaszi's | 2010-01-01 | [DBA][DEV] |
+| [Some numbers that you will know by heart if you have been working with SQL Server for a while] | Unknown | 2019-03-20 | [DBA][DEV] |
+| [#TSQL2sday: How Much Plan Cache History Do You Have?] | Brent Ozar | 2018-07-10 | [DBA][DEV] |
+| [Fixing SQL Server Management Studio’s Tab Text] | Brent Ozar | 2011-06-07 | [DBA][DEV] |
+| [An overview of the SQL table variable] | Rajendra Gupta | 2019-10-16 | [DBA][DEV] |
+| [Performance Impact of Small Queries] | Forrest McDaniel | 2019-06-15 | [DBA][DEV] |
+| [How we use SQL Server as a Document Store] | Paul Stovell | 2019-03-24 | [DBA][DEV] |
+| [Overlooked T-SQL Gems] | Itzik Ben-Gan | 2019-10-09 | [DBA][DEV] |
+| [Are SQL Server database triggers evil?] | Daniel Calbimonte | 2017-01-25 | [DBA][DEV] |
+| [Configuration Best Practices for SQL Server Tempdb–Initial Sizing] | Christian Bolton, Justin Langford … | 2013-02-12 | [DBA] |
+| [Sql Server Extended Events Trace Overhead] | Nenad Noveljic | 2018-09-04 | [DBA] |
+| [Measuring "Observer Overhead" of SQL Trace vs. Extended Events] | Jonathan Kehayias | 2012-10-23 | [DBA][XE] |
+| [Performance overhead of tracing with Extended Event targets vs SQL Trace under CPU Load] | Andreas Wolter | 2013-07-01 | [DBA][XE] |
+| [Fragmentation, the final installment] | Tibor Karaszi's | 2019-10-18 | [DBA][IX] |
+| [Atomic Durability - How do databases recover from a crash ?] | Pedro Ramalhete | 2019-10-01 | [DBA][DEV] |
+| [Truth First, or Why You Should Mostly Implement Database First Designs] | Lukas Eder | 2018-06-06 | [DEV] |
+| [SQL Server CHECKPOINT, Lazy Writer, Eager Writer and Dirty Pages in SQL Server] | Rajendra Gupta | 2019-08-22 | [DBA] |
+| [T-SQL bugs, pitfalls, and best practices – window functions] | Itzik Ben-Gan | 2019-08-14 | [DBA][DEV] |
+| [#BackToBasics: Why I use lower case for data type names (now)] | Aaron Bertrand | 2016-10-04 | [DBA][DEV] |
+| [New high availability and disaster recovery benefits for SQL Server] | Amit Banerjee | 2019-10-30 | [DBA] |
+| [Because Your Index Maintenance Script Is Measuring The Wrong Thing] | Eric Darling | 2019-10-28 | [DBA][IDX] |
+| [Memory-Optimized TempDB Metadata] | Niko Neugebauer | 2019-10-30 | [DBA][BENCH]|
+| [Build a SQL Cluster Lab Part 1] | Ryan Adams | 2019-10-28 | [DBA] |
+| [There is no Such Thing as Object-Relational Impedance Mismatch] | Lukas Eder | 2015-08-26 | [DEV] |
+| [ORMs Under the Hood] | Patrycja Dybka | 2015-08-18 | [DEV] |
+| [EMERGENCY-mode repair: the very, very last resort] | Paul Randal | 2007-10-02 | [DBA] |
+| [Scalar functions and improvements in SQL Server 2019] | Tibor Karaszi's | 2019-11-07 | [DEV] |
+| [Scalar functions in SQL server 2019, part 2] | Tibor Karaszi's | 2019-11-07 | [DEV] |
+| [Dos and Don'ts of Dynamic SQL] | Thom Andrews | 2019-04-29 | [DEV][DBA] |
+| [Differences Between Sql Server TEXT and VARCHAR(MAX) Data Type] | Basavaraj Biradar | 2016-05-11 | [DEV][DBA] |
+| [VARBINARY(MAX) Tames the BLOB] | Michael Otey | 2006-08-22 | [DEV][DBA] |
+| [Query Store Options in SSMS 18.4] | Erin Stellato | 2019-11-12 | [DBA][QS] |
+| [Query Store Performance Overhead: What you need to know] | Erin Stellato | 2018-11-06 | [DBA][QS] |
+| [How to fork a GitHub repository and contribute to an open source project] | Rob Sewell | 2019-11-29 | [DBA][DEV] |
+| [But I Need To Compare Two Date Columns In My Where Clause] | Eric Darling | 2019-11-27 | [DBA][IDX] |
+| [The Difference Between Fault Tolerance, High Availability, & Disaster Recovery] | Patrick Benson | 2014-02-25 | [DBA][DEV] |
+| [Why LOB data makes shrink run slooooowly] | Paul Randal | 2010-05-11 | [DBA] |
+| [SQL Server 2019 Scalar UDF inlining - out of memory in some cases] | @sqL_handLe | 2019-11-19 | [DBA][DEV] |
+| [Is it true that editing a single row in Management Studio empties and reloads the entire table?] | Randolph West | 2019-11-27 | [DBA][DEV] |
+| [A Guide to SQL Naming Conventions] | Lukas Eder | 2019-10-29 | [DBA][DEV] |
+| [Stop Mapping Stuff in Your Middleware. Use SQL’s XML or JSON Operators Instead] | Lukas Eder | 2019-11-13 | [DBA][DEV] |
+| [How Does Accelerated Database Recovery Work] | Forrest McDaniel | 2019-11-26 | [DBA] |
+| [Recover SQL Server Resource Database] | Daniel Farina | 2019-10-25 | [DBA] |
+| [What’s in that database? Getting information about routines] | Phil Factor | 2019-11-04 | [DBA][DEV] |
+| [The Gloop: An Easier way of Managing SQL Server Documentation] | Phil Factor | 2019-12-03 | [DBA][DEV] |
+| [The SQL of Gaps and Islands in Sequences] | Dwain Camps | 2013-07-25 | [DEV] |
+| [Drop Database Objects Practically Risk-Free!] | Pamela Mooney | 2019-04-17 | [DBA] |
+| [Predicate Pushdown and why should I care?] | Pedro Lopes | 2018-07-06 | [DBA][DEV] |
+| [Stack Overflow Demo Database Column Store Edition: Downloads And Links] | Eric Darling | 2019-11-11 | [DBA][DEV] |
+| [Stack Overflow Demo Database Column Store Edition: Exploring Relationships] | Eric Darling | 2019-11-14 | [DBA][DEV] |
+| [Stack Overflow Demo Database Column Store Edition: Helpful Links] | Eric Darling | 2019-11-15 | [DBA][DEV] |
+| [Online, Resumable, and WAIT_AT_LOW_PRIORITY operations in SQL Server] | Kendra Little | 2019-12-09 | [DBA][DEV] |
+| [How filtered indexes could be a more powerful feature] | Aaron Bertrand | 2013-04-24 | [IDX] |
+| [How Forced Parameterization in SQL Server Affects Filtered Indexes] | Aaron Bertrand | 2019-09-19 | [IDX] |
+| [Filtered Indexes and Forced Parameterization (redux)] | Aaron Bertrand | 2019-12-03 | [IDX] |
+| [Interpreting SQL Server 2019 DBCC MEMORYSTATUS output -- Part 1] | @sqL_handLe | 2019-12-15 | [DBA] |
+| [Invisible tempdb Killer] | Josh Darnell | 2019-12-18 | [DBA][DEV] |
+| [Batch Mode On Row Store Is Fickle] | Eric Darling | 2019-12-19 | [DBA][DEV] |
+| [Use Azure To Store Sql Server Backups Offsite] | Sander Stad | 2019-12-18 | [AZ][B] |
+| [Handling Data Returned from a SQL Stored Procedure] | Drew | 2019-12-20 | [DBA][DEV] |
+| [When QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_140 does not follow CL 140 rules] | Milos Radivojevic | 2019-12-20 | [DBA][DEV] |
+| [SQL Server–HOW-TO: quickly retrieve accurate row count for table] | martijnh1 | 2010-07-15 | [DBA][DEV] |
+| [Do You Have REFERENCES?] | Joe Celko | 2019-12-03 | [DBA][DEV] |
+| [Fun with (columnstore) compression on a very large table – part 1] | Aaron Bertrand | 2019-12-27 | [DBA] |
+| [How to Make SELECT COUNT(*) Queries Crazy Fast] | Brent Ozar | 2019-12-26 | [DBA][DEV] |
+| [SSISDB Catalog Defaults Best Practices] | Steve Rezhener | 2019-12-26 | [DBA][DEV] |
+| [Temporal Tables, and how to deal with computed columns] | Randolph West | 2019-12-25 | [DBA][DEV] |
+| [Cardinality Estimation for Disjunctive Predicates in SQL Server 2014] | Paul White | 2014-04-15 | [DBA][DEV] |
+| [Create Distributed Availability Group in Sql Server Linux(Redhat) --- step by step] | Liwei | 2019-11-14 | [DBA] |
+| [Connection options in SSMS] | Kenneth Fisher | 2013-11-18 | [DBA][DEV] |
+| [A Script To Automatically Align Columnstore Indexes To Enhance Segment Elimination (and Hence Performances)] | Emanuele Meazzo | 2018-06-04 | [DBA][IDX] |
+| [Issues with SQLCMD when using special characters] | Daniel Farina | 2018-01-11 | [DBA][DEV] |
+| [Encrypting passwords with Python Scripts in SQL Notebooks of Azure Data Studio] | Rajendra Gupta | 2020-01-06 | [DBA][DEV] |
+| [Fun with (columnstore) compression on a very large table – part 2] | Aaron Bertrand | 2020-01-07 | [DBA][IDX] |
+| [The curious case of the sqlcmd password] | Randolph West | 2020-01-08 | [DBA][DEV] |
+| [Setting up Management Studio for remote SQL Server] | aveek22 | 2020-01-06 | [DBA][DEV] |
+| [SQL Server Security Best Practices for an Application Installed on SQL Server] | Svetlana Golovko | 2019-12-08 | [DBA][SEC] |
+| [PCI Best Practices Guide for SQL Server DBAs] | Tibor Nagy | 2015-05-08 | [DBA][SEC] |
+| [SQL Server Security Checklist] | Tibor Nagy | 2014-02-06 | [DBA][SEC] |
+| [Replace Model SQL Server Database with a User Database] | Daniel Farina | 2019-12-13 | [DBA] |
+| [SQL Server Linux installation for Amazon EC2 instance with Red Hat OS] | Rajendra Gupta | 2020-01-09 | [AMZ |
+| [Departure of a SQL Server Administrator – What to Check?] | Thomas Rushton | 2020-01-03 | [DBA] |
+| [The Curious Case of… transactions rolling back during DBCC CHECKDB] | Paul Randal | 2020-01-15 | [DBA] |
+| [Don’t install SQL Server from a mounted ISO] | Randolph West | 2020-01-15 | [DBA] |
+| [NULL complexities – Part 1] | Itzik Ben-Gan | 2019-12-11 | [DBA][DEV] |
+| [NULL complexities – Part 2] | Itzik Ben-Gan | 2020-01-08 | [DBA][DEV] |
+| [NULL complexities – Part 3] | Itzik Ben-Gan | 2020-02-12 | [DBA][DEV] |
+| [How to fix the “Agent XPs disabled” error] | Nisarg Upadhyay | 2019-12-27 | [DBA][DEV] |
+| [Number of Rows Read / Actual Rows Read warnings in Plan Explorer] | Rob Farley | 2016-06-02 | [DBA][DEV] |
+| [Data Compression + Backup Compression = Double Compression?] | Jess Pomfret | 2019-08-12 | [B][DBA] |
+| [How Many Bytes Per Character in SQL Server: a Completely Complete Guide] | Solomon Rutzky | 2019-11-12 | [DBA][DEV] |
+| [Storage 101: Welcome to the Wonderful World of Storage] | Robert Sheldon | 2019-12-03 | [DBA][DEV] |
+| [How to detect and prevent unexpected growth of the TempDB database] | Ahmad Yaseen | 2020-01-13 | [DBA] |
+| [Understanding the SQL Server Proportional fill algorithm] | Ahmad Yaseen | 2016-11-22 | [DBA] |
+| [VALUES() and Long Parameter Lists] | Joe Celko | 2010-07-22 | [DBA][DEV] |
+| [Going Serverless with Azure SQL Database] | John Miner | 2019-12-20 | [DBA][DEV] |
+| [SQLskills SQL101: Why are Statistics so Important?] | Kimberly Tripp | 2020-01-20 | [DBA][DEV] |
+| [Configuring SQL Server Express edition as SQL witness server in Database Mirroring] | Nisarg Upadhyay | 2020-01-20 | [DBA] |
+| [The Half Apply Query] | Forrest McDaniel | 2020-01-20 | [DBA][DEV] |
+| [Import JSON data into SQL Server] | Rajendra Gupta | 2020-01-17 | [X] |
+| [Auditing in AWS RDS SQL Server] | Rajendra Gupta | 2020-01-20 | [DBA] |
+| [Types of SQL Server Indexes] | Ben Snaidero | 2019-12-24 | [IDX] |
+| [Use SQL Server's UNPIVOT operator to help normalize output] | Aaron Bertrand | 2013-07-12 | [DBA][DEV] |
+| [Prevent SSMS from seeing the server's file system] | Randi Vertongen | 2019-09-02 | [DBA] |
+| [Add the ability to disable or enable a few new DMVs and DMFs introduced in SQL Server 2017] | Microsoft | 2017-11-08 | [DBA] |
+| [Actual Difference Between EXISTS(SELECT 1 …), EXISTS(SELECT * …), and EXISTS(SELECT column …)] | Solomon Rutzky | 2020-01-24 | [DBA][DEV] |
+| [Why Wait Stats Alone Are Not Enough] | Greg Gonzalez | 2020-01-24 | [DBA][DEV] |
+| [Estimating AWS RDS SQL Server costs] | Rajendra Gupta | 2020-01-23 | [DEV] |
+| [SQL Server Performance Tuning Using Wait Statistics: A Beginner’s Guide] | Jonathan Kehayias, Erin Stellato | 2014-04-01 | [DBA][DEV] |
+| [sys.xp_delete_files and ‘allow filesystem enumeration’: two new undocumented items in SQL Server 2019] | Solomon Rutzky | 2020-01-26 | [DBA][DEV] |
+| [Why Database Monitoring Tools Are So Hard to Interpret] | Brent Ozar | 2020-01-27 | [DBA] |
+| [Extended Events Misperceptions: Profiler Is Easier] | Grant Fritchey | 2020-01-20 | [DBA][DEV] |
+| [Extended Events Misperceptions: Profiler Is Easier, Part 2] | Grant Fritchey | 2020-01-27 | [DBA][DEV] |
+| [Automate SFTP File Transfer with SQL Server Agent and WinSCP] | Joe Gavin | 2020-01-16 | [DBA][DEV] |
+| [Running Database Console Commands (DBCCs) on Azure SQL Database] | Marcin Policht | 2020-01-20 | [AZ] |
+| [How to Remove Times from Dates in SQL Server] | Brent Ozar | 2020-01-29 | [DBA][DEV] |
+| [Export/Import Data using BCP - SQL Server on Linux] | Carlos Robles | 2020-01-30 | [DBA][DEV] |
+| [Prevent SQL Server Blocking using Lock_Timeout] | Bhavesh Patel | 2020-01-07 | [DBA][DEV] |
+| [Bin Packing Problems: The SQL] | Joe Celko | 2012-03-22 | [DBA][DEV] |
+| [Causation, Correlation and Crackpots] | Joe Celko | 2009-09-15 | [DBA][DEV] |
+| [What Events are in a Trace?] | Erin Stellato | 2020-01-23 | [DBA] |
+| [What Are Soft Deletes, and How Are They Implemented?] | Brent Ozar | 2020-02-04 | [DBA][DEV] |
+| [Why You Should Switch in Staging Tables Instead of Renaming Them (Dear SQL DBA Episode 26)] | Kendra Little | 2017-01-19 | [DBA][DEV] |
+| [Changing a column from int to bigint, without downtime] | Andy Mallon | 2019-12-11 | [DBA][DEV] |
+| [I hate sp_estimate_data_compression_savings] | Andy Mallon | 2019-12-17 | [DBA][DEV] |
+| [Testing as another user…without their password - impersonate the other user] | Andy Mallon | 2019-12-18 | [DBA][DEV] |
+| [How does a database RESTORE affect plan cache?] | Andy Mallon | 2019-10-24 | [DBA] |
+| [Recovery of database is 0% complete (approximately 1000000 seconds remain)] | Andy Mallon | 2019-10-12 | [DBA] |
+| [Code to purge data based on creation date] | Andy Mallon | 2019-04-04 | [DBA] |
+| [Blocking with OBJECT_NAME()] | Andy Mallon | 2019-12-24 | [DBA] |
+| [Performance Myths: The query result cache] | Andy Mallon | 2018-07-23 | [DBA][DEV] |
+| [Fun with (columnstore) compression on a very large table – part 3] | Aaron Bertrand | 2020-02-03 | [DBA][DEV] |
+| [Indexing basics] | Daniel Hutmacher | 2013-02-19 | [IDX] |
+| [Working with covering indexes] | Daniel Hutmacher | 2013-02-19 | [IDX] |
+| [Using Erik Darling’s sp_pressure_detector to resolve CPU issues] | Jeff Iannucci | 2020-01-28 | [DBA][DEV] |
+| [The Accidental DBA (Day 16 of 30): General Security] | Jonathan Kehayias | 2013-01-16 | [DBA][SEC] |
+| [Securing Data in SQL Server] | Jonathan Kehayias | 2020-01-27 | [DBA][SEC] |
+| [Performance Testing SQL 2008's Transparent Data Encryption] | Rob Garrison | 2009-04-20 | [DBA] |
+| [Common SQL Server Security Issues and Solutions] | Paul Randal | 2016-10-04 | [DBA][SEC] |
+| [Chaos Engineering and SQL Server] | Andrew Pruski | 2020-01-29 | [DBA] |
+| [Different methods to attach SQL Server MDF files] | Nisarg Upadhyay | 2020-02-07 | [DBA] |
+| [Learn SQL: How to Write a Complex SELECT Query] | Emil Drkusic | 2020-02-04 | [DBA][DEV] |
+| [Filling In Missing Values Using the T-SQL Window Frame] | Dwain Camps | 2014-09-18 | [DBA][DEV] |
+| [Select * in a view] | Reitse Eskens | 2020-02-20 | [DBA][DEV] |
+| [T-SQL TUESDAY #123: Aggregates of Aggregates using Windowing Functions] | James Mcgillivray | 2020-02-20 | [DBA][DEV] |
+| [SQL Server Statistics: Explained] | Krishna Golla | 2012-09-04 | [DBA][DEV] |
+| [How to Pass a List of Values Into a Stored Procedure] | Brent Ozar | 2020-02-13 | [DBA][DEV] |
+| [What's the difference between a temp table and table variable in SQL Server?] | Paul White | 2019-05-04 | [DBA][DEV] |
+| [Be Mindful of SQL Server Tempdb Use (aka Tempdb Parasites!)] | Jason Hall | 2020-01-28 | [DBA][DEV] |
+| [Robyn Page’s SQL Server Cursor Workbench (Quirky Update)] | Robyn Page | 2007-01-24 | [DBA][DEV] |
+| [Solving the Running Total and Ordinal Rank Problems (Rewritten) (Quirky Update)] | Jeff Moden | 2012-01-27 | [DBA][DEV] |
+| [Running totals in “Denali” CTP3 (Quirky Update)] | Wayne Sheffield | 2011-08-23 | [DBA][DEV] |
+| [WHERE GETDATE() BETWEEN StartDate AND EndDate Is Hard to Tune.] | Brent Ozar | 2020-02-18 | [DBA][DEV] |
+| [WHERE GETDATE() BETWEEN StartDate AND COALESCE(CancelDate, EndDate) Is Even Harder to Tune.] | Brent Ozar | 2020-02-19 | [DBA][DEV] |
+| [How to solve the SQL Identity Crisis in SQL Server] | Ed Pollack | 2017-11-14 | [DBA][DEV] |
+| [Significant SQL Server 2019 licensing changes] | Kevin Chant | 2020-02-17 | [DBA] |
+| [Indexed View Maintenance Is Only As Bad As Your Indexes] | Erik Darling | 2020-02-19 | [DBA][DEV] |
+| [Why Design Impacts Performance on Microsoft SQL Server] | Kevin Kline | 2020-01-29 | [DBA][DEV] |
+| [Apply versus Nested Loops Join] | Paul White | 2019-06-09 | [DBA][DEV] |
+| [Inside the Optimizer: Constructing a Plan - Part 1] | Paul White | 2010-07-29 | [DBA][DEV] |
+| [Inside the Optimizer: Constructing a Plan - Part 2] | Paul White | 2010-07-29 | [DBA][DEV] |
+| [Inside the Optimizer: Constructing a Plan - Part 3] | Paul White | 2010-07-31 | [DBA][DEV] |
+| [Inside the Optimizer: Constructing a Plan - Part 4] | Paul White | 2010-07-31 | [DBA][DEV] |
+| [Tips for dealing with large SQL Server scripts] | Kevin Chant | 2020-02-24 | [DBA][DEV] |
+| [Database Normalization in SQL with Examples] | Gouri Shankar | 2020-02-18 | [DBA][DEV] |
+| [Why SQL Server May Not Parallelize a Query] | SolarWinds | 2015-10-30 | [DBA][DEV] |
+| [Parallelism in SQL Server Execution Plan] | Ahmad Yaseen | 2018-03-30 | [DBA][DEV] |
+| [An XEvent a Day (26 of 31) – Configuring Session Options] | Jonathan Kehayias | 2010-12-26 | [XE] |
+| [Azure SQL Managed Instance Performance Considerations] | Tim Radney | 2020-02-26 | [AZ] |
+| [The Curious Case of… whether corruption can propagate to secondary databases] | Paul Randal | 2020-02-26 | [COR][DBA] |
+| [Stop and Think Before You Shrink – Shrinking a SQL Server Database] | Jeff Mlakar | 2018-09-25 | [DBA] |
+| [How to Analyze the SQL Server Error Log] | Jeff Mlakar | 2018-11-02 | [DBA] |
+| [Converting SQL Trace to Extended Events in SQL Server 2012] | Jonathan Kehayias | 2012-04-04 | [DBA] |
+| [What event information can I get by default from SQL Server?] | Aaron Bertrand | 2019-03-28 | [DBA] |
+| [Removing the default trace – Part 1] | Aaron Bertrand | 2020-03-02 | [DBA] |
+| [Removing the default trace – Part 2] | Aaron Bertrand | 2020-03-02 | [DBA] |
+| [Removing the default trace – Part 3] | Aaron Bertrand | 2020-03-02 | [DBA] |
+| [Keeping DRY in SQL Server with Scalar User Defined Functions – Part 1] | Adrian Hills | 2020-02-20 | [DBA][DEV] |
+| [Different Ways to Monitor SQL Server AlwaysOn Availability Groups] | Nisarg Upadhyay | 2020-02-21 | [DBA] |
+| [SQL Server internals: Is Order of Column in the table important?] | Ronen Ariely | 2018-08-11 | [DBA][DEV] |
+| [Code: Order of columns in table might impact the size of the table/database and even related to errors] | Ronen Ariely | 2019-10-13 | [DBA][DEV] |
+| [SQL Server Internals: Getting the data of deleted column] | Ronen Ariely | 2018-11-28 | [DBA][DEV] |
+| [Queue table issues with Availability Groups in SQL Server] | Aaron Bertrand | 2020-01-29 | [DBA] |
+| [Transact-SQL: openjson hierarchy solution] | Ronen Ariely | 2019-09-29 | [DBA][DEV] |
+| [CREATE DLL TRIGGER ON CREATE_LOGIN to configure default parameters for any new LOGIN] | Ronen Ariely | 2019-10-12 | [DBA][DEV] |
+| [SQL Server Internals: Getting the data of deleted column] | Ronen Ariely | 2018-08-11 | [DBA][DEV] |
+| [SQL varchar data type deep dive] | Gauri Mahajan | 2019-05-29 | [DBA][DEV] |
+| [What is the datatype SQL_VARIANT] | Kenneth Fisher | 2020-04-16 | [DBA][DEV] |
+| [An Introduction to Asynchronous Processing with Service Broker] | Jonathan Kehayias | 2014-03-18 | [DBA][DEV] |
+| [Detecting and Alerting on SQL Server Agent Missed Jobs] | Ed Pollack | 2019-02-21 | [DBA][J] |
+| [Execute multiple jobs Synchronously from in a main job] | Ronen Ariely | 2020-04-11 | [J] |
+| [Why Ordering Isn’t Guaranteed Without an ORDER BY] | Brent Ozar | 2020-04-22 | [DBA][DEV] |
+| [How to Attach a SQL Server Database without a Transaction Log and with Open Transactions] | Daniel Farina | 2020-04-29 | [COR] |
+| [SQL 2016 - It Just Runs Faster: Indirect Checkpoint Default] | Ryan Stonecipher, Peter Byrne, Bob Dorr | 2016-04-12 | [DBA][CHP] |
+| [How do checkpoints work and what gets logged] | Paul Randal | 2009-09-27 | [DBA][CHP] |
+| [Inside the Storage Engine: What’s in the buffer pool?] | Paul Randal | 2008-08-26 | [DBA] |
+| [What does checkpoint do for tempdb?] | Paul Randal | 2009-10-07 | [DBA][CHP] |
+| [Performance issues from wasted buffer pool memory] | Paul Randal | 2011-06-01 | [DBA] |
+| [How It Works: When is the FlushCache message added to SQL Server Error Log?] | Bob Dorr | 2012-01-06 | [DBA] |
+| [Negative identity values don’t suck] | Randolph West | 2020-05-06 | [DBA][DEV] |
+| [How SQL Server stores data types: integers and decimals] | Randolph West | 2020-05-13 | [DBA][DEV] |
+| [How SQL Server stores data types: DATETIME, DATE, TIME, and DATETIME2] | Randolph West | 2020-04-22 | [DBA][DEV] |
+| [Cross Database Transactions on One Server] | Michael J Swart | 2020-05-15 | [DBA][DEV] |
+| [Your Views Aren’t The Problem. Your Code Is.] | Brent Ozar | 2020-05-06 | [DBA][DEV] |
+| [Can I Offload DBCC CHECKDB To Another Server?] | Brent Ozar | 2020-05-19 | [DBA] |
+| [Negative (-) is an operator and will affect the order of operations.] | Kenneth Fisher | 2020-05-18 | [DBA][DEV] |
+| ["0 to 60" : Switching to indirect checkpoints] | Aaron Bertrand | 2020-05-01 | [DBA][CHP] |
+| [Parallelism Can Make Queries Perform Worse.] | Brent Ozar | 2020-05-20 | [DBA][DEV] |
+| [A SQL Server DBA myth a day: (15/30) checkpoint only writes pages from committed transactions] | Paul Randal | 2010-04-15 | [DBA][CHP] |
+| [Can You Use NVARCHAR As a Universal Parameter? Almost.] | Brent Ozar | 2020-04-30 | [DBA][DEV] |
+| [The Learner’s Guide to SQL Server Performance Triage] | Kendra Little | 2020-03-19 | [DBA] |
+| [Learner’s Guide to SQL Server Query Tuning] | Kendra Little | 2020-05-01 | [DBA][DEV] |
+| [How to Get Better Estimates for Modification Queries] | Brent Ozar | 2020-04-27 | [DBA][DEV] |
+| [SSMS: Prevent Copy and Paste of Text in “Messages” tab (Cruel Joke #2)] | Solomon Rutzky | 2020-05-22 | [DBA][DEV] |
+| [Compare the Best SQL Server Performance Monitoring Tools] | SentryOne | 2020-01-01 | [DBA][DEV] |
+| [Minimal Logging with INSERT…SELECT into Heap Tables] | Paul White | 2020-05-01 | [DBA][DEV] |
+| [Minimal Logging with INSERT…SELECT into Empty Clustered Tables] | Paul White | 2020-05-16 | [DBA][DEV] |
+| [Minimal Logging with INSERT…SELECT and Fast Load Context] | Paul White | 2020-05-19 | [DBA][DEV] |
+| [Avoiding SQL Server Upgrade Performance Issues] | Glenn Berry | 2020-02-05 | [DBA][DEV] |
+| [Compatibility Levels and Cardinality Estimation Primer] | Glenn Berry | 2020-01-29 | [DBA][DEV] |
+| [An approach to index tuning – Part 1] | Erin Stellato | 2020-03-26 | [DBA][DEV] |
+| [An approach to index tuning – Part 2] | Erin Stellato | 2020-04-13 | [DBA][DEV] |
+| [Moving A Database to New Storage With No Downtime] | Bob Pusateri | 2013-03-12 | [DBA] |
+| [RESOURCE_GOVERNOR_IDLE in Azure] | Josh Darnell | 2020-06-15 | [AZ] |
+| [Automated Backup Tuning] | Nicholas Cain | 2012-12-13 | [B] |
+| [Optimizing Database Restores] | Nicholas Cain | 2011-09-26 | [DBA] |
+| [AVAILABILITY_REPLICA - The Deception of the Log Reuse Wait Type] | Nicholas Cain | 2020-05-19 | [DBA] |
+| [Changing an INT to a BIGINT with no downtime] | Michael J Swart | 2020-06-19 | [DBA] |
+| [New Metadata-Only Column Changes in SQL Server 2016] | Paul White | 2020-04-17 | [DBA][DEV] |
+| [Bandwidth-friendly Query Profiling for Azure SQL Database] | Greg Gonzalez | 2020-04-15 | [AZ][XE] |
+| [Column scope and binding order in subqueries] | Gail Shaw | 2019-04-23 | [DBA][DEV] |
+| [Improve SQL Server Extended Events system_health Session] | Aaron Bertrand | 2020-06-17 | [DBA][DEV] |
+| [Page Life Expectancy Doesn’t Mean Jack, and You Should Stop Looking At It.] | Brent Ozar | 2020-06-17 | [DBA][DEV] |
+| [Unsupported but working versions of SQL Server on Windows Server 2019] | Randolph West | 2020-06-24 | [DBA][DEV] |
+| [Bad Idea Jeans: Building Big Query Plans] | Brent Ozar | 2020-06-23 | [DBA][DEV] |
+| [SQL Server performance tuning – RESOURCE_SEMAPHORE waits] | Timothy Smith | 2020-06-16 | [DBA][DEV] |
+| [Use session_context to create a “variable” that lasts between batches.] | Kenneth Fisher | 2020-05-26 | [DBA][DEV] |
+| [Phase out CONTEXT_INFO() in SQL Server 2016 with SESSION_CONTEXT()] | Aaron Bertrand | 2015-11-19 | [DBA][DEV] |
+| [How to Balance SQL Server Core Licenses Across NUMA Nodes] | Glenn Berry | 2020-06-25 | [DBA] |
+| [What is the Difference Between Physical Sockets, Physical Cores, and Logical Cores?] | Glenn Berry | 2019-12-18 | [DBA] |
+| [What is the Difference Between Physical Sockets, Physical Cores, and Logical Cores?] | Kevin Kline | 2020-06-01 | [DBA][DEV] |
+| [The 201 Buckets Problem, Part 1: Why You Still Don’t Get Accurate Estimates] | Brent Ozar | 2020-07-07 | [DBA][DEV] |
+| [The 201 Buckets Problem, Part 2: How Bad Estimates Backfire As Your Data Grows] | Brent Ozar | 2020-07-08 | [DBA][DEV] |
+| [Sql Server — Widely Random Query Exec Times (cxconsumer Wait/cxpacket) & Possible Remediation] | VIKTOR | 2020-06-26 | [DBA][DEV] |
+| [How MAXDOP Really Works] | Paul White | 2020-06-07 | [DBA][DEV] |
+| [What is MaxDOP controlling?] | Pedro Lopes | 2020-07-07 | [DBA][DEV] |
+| [What If You Really DO Need to Shrink a Database?] | Brent Ozar | 2020-07-14 | [DBA] |
+| [Everything I Never Wanted to Know About Collation] | Kendra Little | 2020-07-16 | [DBA][DEV] |
+| [Comparing SSIS And Azure Data Factory] | Tim Mitchell | 2020-07-16 | [AZ][SSIS] |
+| [sp_Blitz for All Servers] | Garry Bargsley | 2020-07-14 | [DBA] |
+| [Where is the SQL Server Community Networking Online?] | Brent Ozar | 2020-07-13 | [DBA][DEV] |
+| [Make the most out of your Azure Disks using Storage Pools] | Roberto Marras | 2020-07-01 | [AZ][DBA] |
+| [SQL Server High Availability Solutions on Azure VMs] | Marco Obinu | 2020-07-12 | [AZ][DBA] |
+| [How to Get Started with SQL Server Management Studio] | Brent Ozar | 2020-07-21 | [DBA][DEV] |
+| [How should I store currency values in SQL Server?] | Randolph West | 2020-06-03 | [DBA][DEV] |
+| [Read committed isolation level doesn’t guarantee much…] | Paul Randal | 2010-04-17 | [DBA][DEV] |
+| [Prevent Unexpected Failovers When Patching AGs] | Josh Darnell | 2010-05-21 | [DBA] |
+| [Updating Statistics Causes Parameter Sniffing] | Brent Ozar | 2010-06-02 | [DBA][DEV] |
+| [The Ascending Key Problem in Fact Tables– Part one: Pain!] | Thomas Kejser | 2011-01-01 | [DBA][DEV] |
+| [The Ascending Key Problem In Fact Tables –Part Two: Stat Job!] | Thomas Kejser | 2011-07-07 | [DBA][DEV] |
+| [Are Statistics Being Used for inserted and deleted tables and table variables?] | Deborah Melkin | 2020-05-05 | [DBA][DEV] |
+| [Tackling Imperial and US Customary Measurements in Databases] | Phil Factor | 2020-05-06 | [DBA][DEV] |
+| [In-Memory OLTP Best Practices – Part 1] | Jon Guerin, Daniel Taylor | 2020-03-11 | [DBA][DEV] |
+| [In-Memory OLTP Best Practices – Part 2] | Jon Guerin, Daniel Taylor | 2020-05-06 | [DBA][DEV] |
+| [Things I Wished More Developers Knew About Databases] | Jaana Dogan | 2020-04-21 | [DBA][DEV] |
+| [Online migrations at scale] | Jacqueline Xu | 2017-02-02 | [DBA] |
+| [The Dirty (Baker’s) Dozen of SQL Server Technical Debt] | Andy Jones | 2020-06-01 | [DBA][DEV] |
+| [15 SQL Server Performance Counters to Monitor In 2020] | Allen White | 2020-05-05 | [DBA][DEV] |
+| [Pulling Group By Above a Join] | Paul White | 2020-05-31 | [DBA][DEV] |
+| [SQLskills SQL101: Running out of ints and bigints] | Paul Randal | 2017-10-03 | [DBA][DEV] |
+| [Understanding and Using Parallelism in SQL Server] | Paul White | 2011-03-03 | [DBA][DEV] |
+| [Top Asked Availability Group Questions… and Maybe Some Helpful Tidbits as Answers] | Sean Gallardy | 2020-06-16 | [DBA] |
+| [Encrypting SQL Server Database Backups] | David Fowler | 2018-04-04 | [DBA] |
+| [Using Track Causality to Understand Query Execution] | Erin Stellato | 2019-01-04 | [DBA][DEV] |
+| [Understanding SQL Server Backup Types] | Prashanth Jayaram | 2018-04-19 | [B][DBA] |
+| [Scripting the Description of Database Tables Using Extended Properties] | Phil Factor | 2020-03-03 | [DBA][DEV] |
+| [The Table Variable in SQL Server] | Esat Erkec | 2019-12-03 | [DBA][DEV] |
+| [Multiple Plans for an "Identical" Query] | Aaron Bertrand | 2014-11-20 | [DBA][DEV] |
+| [Another argument for stored procedures versus ORM versus Add Hoc Queries] | Aaron Bertrand | 2013-05-17 | [DBA][DEV] |
+| [Bad habits to kick : avoiding the schema prefix] | Aaron Bertrand | 2019-09-12 | [DBA][DEV] |
+| [How not to call Hekaton natively-compiled stored procedures] | Aaron Bertrand | 2015-06-05 | [DBA][DEV] |
+| [A One-Slide Summary of the Differences Between TDE and Always Encrypted] | Brent Ozar | 2020-07-31 | [SEC] |
+| [Remember “Nothing Stops a Hekaton Transaction?” Yeah, About That.] | Brent Ozar | 2020-07-29 | [DBA][DEV] |
+| [Finding & Downloading Required SQL Server Updates] | Andy Levy | 2020-07-21 | [DBA] |
+| [SQLskills SQL101: Why do some wait types need to be ignored?] | Paul Randal | 2018-05-23 | [DBA][DEV] |
+| [What is the SOS_WORK_DISPATCHER Wait Type? (Or how to work with Call Stacks in SQL Server)] | Joe Obbish | 2018-09-27 | [DBA][DEV] |
+| [SQL Server 2019 Aggregate Splitting] | Paul White | 2020-08-04 | [DBA][DEV] |
+| [Security Best Practice: dny and revoke permissions granted to All Users by default - HIGHLY IMPORTANT!] | Ronen Ariely | 2019-10-13 | [DBA][SEC] |
+| [The Trillion Row Table] | Joe Obbish | 2020-08-12 | [BENCH] |
+| [Temporal Tables and Table Partitioning: Not If You Like Switching Partitions] | Erik Darlling | 2020-03-03 | [DBA][DEV] |
+| [Long Running Query on Read-Only Replica that takes moments on the Primary] | Sean Gallardy,Joe Obbish | 2019-09-05 | [DBA][DEV] |
+| [Date Tables are Great for Users, but Not So Great for Performance] | Brent Ozar | 2020-08-05 | [DBA][DEV] |
+| [Should I install SSMS on a server running SQL Server?] | Andy Mallon | 2020-04-14 | [DBA][DEV] |
+| [Finding a table name from a page ID] | Paul Randal | 2014-09-25 | [DBA][DEV] |
+| [Finding Distinct Values Quickly] | Paul White | 2020-04-17 | [DBA][DEV] |
+| [Can You Fail To Spill To tempdb?] | Josh Darnell | 2019-07-17 | [DBA][DEV] |
+| [Migrating SQL workloads to Microsoft Azure: Databases Trip to Azure SQL Database] | Ahmad Yaseen | 2020-08-03 | [AZ][DBA] |
+| [How It Works: Bob Dorr's SQL Server I/O Presentation] | Bob Dorr | 2010-03-24 | [DBA][DEV] |
+| [Who does SQL Server run xp_cmdshell command as?] | Steve Stedman | 2020-04-14 | [DBA][DEV] |
+| [Transaction Modes in SQL Server] | Kevin Feasel | 2020-08-10 | [DBA][DEV] |
+| [Working Effectively with Legacy SQL] | Kevin Feasel | 2015-03-15 | [DBA][DEV] |
+| [A SQL Server DBA myth a day: (26/30) nested transactions are real] | Paul Randal | 2010-04-26 | [DBA][DEV] |
+| [dbatools multithreading commands with PoshRSJob module] | Kin | 2019-01-04 | [DBA][PS] |
+| [SQL Server Debugging with WinDbg – an Introduction] | Klaus Aschenbrenner | 2014-05-05 | [DBA][DEV] |
+| [Looking deeper into SQL Server using Minidumps] | Thomas Kejser | 2009-09-11 | [DBA][DEV] |
+| [Anatomy of a spool operators in SQL Server execution plans] | Hugo Kornelis | 2020-01-01 | [DBA][DEV] |
+| [CAST v/s CONVERT – Is there a difference as far as SQL Server is concerned? Which is better?] | Nakul Vachhrajani | 2011-07-18 | [DBA][DEV] |
+| [#BackToBasics: CAST vs. CONVERT] | Aaron Bertrand | 2016-11-02 | [DBA][DEV] |
+| [Productivity Hacks: Migrate in Minutes to the Most Current Version of SQL Server] | Chris Lumnah | 2020-07-29 | [DBA] |
+| [Database alias in Microsoft SQL Server] | Bohumír Kubík | 2011-01-11 | [DBA][DEV] |
+| [The Curious Case of… the 8060-byte row size limit] | Paul Randal | 2020-03-11 | [DBA][DEV] |
+| [.NET TransactionScope Considered Annoying - Default Isolation Level is Serializable] | Josh Darnell | 2020-07-27 | [DBA][DEV] |
+| [Parameter Sniffing, Embedding, and the RECOMPILE Options] | Paul White | 2013-08-28 | [DBA][DEV] |
+| [Why You’re Tuning Stored Procedures Wrong (the Problem with Local Variables)] | Kendra Little | 2020-05-06 | [DBA][DEV] |
+| [Yet Another Post About Local Variables] | Erik Darlling | 2020-03-31 | [DBA][DEV] |
+| [Cleaning up Backups from Azure Blob Storage] | Niko Neugebauer | 2020-03-30 | [AZ][B] |
+| [Temporary Table Caching Explained] | Paul White | 2012-08-17 | [DBA][DEV] |
+| [SQL Server Temporary Object Caching] | Paul White | 2017-05-02 | [DBA][DEV] |
+| [3 Ways to Run DBCC CHECKDB Faster] | Brent Ozar | 2020-08-27 | [DBA][DEV] |
+| [Back Up SQL Server 43%-67% Faster by Writing to Multiple Files] | Brent Ozar | 2020-08-23 | [DBA][DEV] |
+| [Bad Habits to Kick : Using SELECT * / omitting the column list] | Aaron Bertrand | 2009-10-10 | [DBA][DEV] |
+| [All The Problems With Select *] | Erik Darlling | 2019-12-10 | [DBA][DEV] |
+| [When Select * Doesn’t Matter] | Erik Darlling | 2019-11-18 | [DBA][DEV] |
+| [HT Waits – Explained and Animated] | Forrest McDaniel | 2020-08-12 | [DBA][DEV] |
+| [SQL Server 100% Online Deployments] | Michael J Swart | 2018-01-05 | [DBA] |
+| [The Curious Case of… setting up a server for DBCC CHECKDB] | Paul Randal | 2020-08-24 | [DBA] |
+| [When should a primary key be declared non-clustered?] | Paul White | 2012-12-01 | [IDX] |
+| [Guid vs INT - Which is better as a primary key?] | Sandeep Kumar M | 2011-01-05 | [DBA][DEV] |
+| [Control SQL Jobs based on HADR Role – Taking it to the Next Level] | Eitan Blumin | 2020-05-26 | [DBA][J] |
+| [SQL Friday #16: Eitan Blumin on “How to HADR Your SQL Jobs”] | Eitan Blumin | 2020-07-31 | [DBA][J] |
+| [Choosing the Correct Azure VM Size for Your Workload] | Eric Smith | 2020-09-09 | [AZ][DBA] |
+| [Table Partitioning in SQL Server – The Basics] | Cathrine Wilhelmsen | 2015-04-12 | [AZ][DBA] |
+| [Table Partitioning in SQL Server – Partition Switching] | Cathrine Wilhelmsen | 2015-04-19 | [AZ][DBA] |
+| [TempDB in SQL Server] | SentryOne | 2020-09-15 | [DBA] |
+| [SQL Server’s Cost Threshold for Parallelism] | Kendra Little | 2014-11-20 | [DBA][DEV] |
+| [How many CPUs is my parallel query using in SQL Server?] | Kendra Little | 2014-05-04 | [DBA][DEV] |
+| [Protecting your data against unauthorised reads on SQL Server] | Monin | 2020-06-24 | [SEC] |
+| [SET IMPLICIT_TRANSACTIONS ON Is One Hell of a Bad Idea] | Brent Ozar | 2019-05-06 | [DBA][DEV] |
+| [Tempdb: The Ghost Of Version Store] | Stijn Wynants | 2015-11-09 | [DBA][DEV] |
+| [When Tempdb Becomes Permanentdb (In-memory tempdb metadata and Resource governor problems)] | Glenn Boonen | 2020-05-07 | [DBA][DEV] |
+| [The Best Medium-Hard Data Analyst SQL Interview Questions] | Zachary Thomas | 2020-01-01 | [DBA][DEV] |
+| [Starting SQL: Why Not Make Everything Dynamic?] | Eric Darling | 2020-09-28 | [DBA][DEV] |
+| [dbatools multithreading commands] | Kin | 2019-01-04 | [PS] |
+| [Preventing Brute Force Attacks in SQL Server] | Raul Gonzalez | 2020-01-01 | [SEC] |
+| [Asynchronous T-SQL Execution Without Service Broker] | Oleg Vorkunov | 2008-09-15 | [CLR] |
+| [Using hash values in SSIS to determine when to insert or update rows] | Koen Verbeeck | 2019-10-15 | [SSIS] |
+| [Capturing Queries Can Be A Pain] | Grant Fritchey | 2020-08-03 | [XE] |
+| [Building full-text indexes using the Sphinx search engine] | Hadi Fadlallah | 2020-08-04 | [DBA][DEV] |
+| [Starting SQL: Measuring A Query] | Eric Darling | 2020-09-28 | [DBA][DEV] |
+| [When to use SET vs SELECT when assigning values to variables in SQL Server] | Atif Shehzad | 2009-11-25 | [DBA][DEV] |
+| [What is the difference between SET and SELECT when assigning values to variables, in T-SQL?] | Narayana Vyas Kondreddi | 2005-10-29 | [DBA][DEV] |
+| [CHECKDB From Every Angle: How long will CHECKDB take to run?] | Paul Randal | 2007-11-15 | [DBA] |
+| [CHECKDB From Every Angle: Consistency Checking Options for a VLDB] | Paul Randal | 2007-11-19 | [DBA] |
+| [Minimizing the impact of DBCC CHECKDB : DOs and DON'Ts] | Aaron Bertrand | 2012-11-29 | [DBA] |
+| [A faster CHECKDB – Part II] | Bob Ward | 2012-02-23 | [DBA] |
+| [A faster CHECKDB – Part III] | Bob Dorr | 2014-11-10 | [DBA] |
+| [A faster CHECKDB – Part III] | Bob Dorr | 2015-01-26 | [DBA] |
+| [A faster CHECKDB – Part IV (SQL CLR UDTs)] | Bob Dorr | 2015-01-26 | [DBA] |
+| [Minimize performance impact of SQL Server DBCC CHECKDB] | Robert Pearl | 2011-06-02 | [DBA] |
+| [Starting SQL: A Little More Fun With Logging Dynamic SQL] | Eric Darling | 2020-10-01 | [DBA][DEV] |
+| [Allocation Order Scans] | Paul White | 2015-01-23 | [DBA][DEV] |
+| [Parameter Sniffing in SQL Server 2019: Air_Quote_Actual Plans] | Brent Ozar | 2020-05-26 | [DBA][DEV] |
+| [Guide For Set Up Of Telegraf For Monitoring Sql Server Xplat] | Tracy Boggiano | 2018-02-24 | [DBA] |
+| [Azure Table Storage Tips for the RDBMS Developer] | Adrian Hills | 2020-10-21 | [AZ] |
+| [sql_handle and the SQL Server batch text hash] | Paul White | 2020-10-11 | [DBA][DEV] |
+| [Navigating DBCC CHECKDB for VLDB] | Aaron Bertrand | 2020-11-05 | [DBA] |
+| [Hidden Formatting Troubles with STR() (SQL Spackle)] | Jeff Moden | 2019-04-26 | [DBA][DEV] |
+| [The What, Why, When, and How of Incremental Loads] | Tim Mitchell | 2020-07-23 | [DBA][DEV] |
+| [How Do I Know If My Query Is Good Enough for Production?] | Brent Ozar | 2020-08-12 | [DBA][DEV] |
+| [How to Find Out Whose Queries are Using The Most CPU] | Brent Ozar | 2020-08-10 | [DBA][DEV] |
+| [Limitations of SQL Server Native Backup and Restore in Amazon RDS] | Sadequl Hussain | 2017-08-23 | [AMZ][B] |
+| [SQL Server Native Backup and Restore in Amazon RDS] | Sadequl Hussain | 2017-08-18 | [AMZ][B] |
+| [What Is the SQL Server CEIP Service (telemetry)?] | Brent Ozar | 2020-10-07 | [DBA] |
+| [Maximum Simultaneous User Connections] | Michael J Swart | 2020-10-16 | [DBA] |
+| [Find Database Connection Leaks in Your Application] | Michael J Swart | 2017-07-07 | [DBA][DEV] |
+| [How to Troubleshoot THREADPOOL Waits and Deadlocked Schedulers] | Eitan Blumin | 2020-10-05 | [DBA][DEV] |
+| [Prevent Lock Escalation On Indexed Views] | Thomas Costers | 2019-10-30 | [DBA][DEV] |
+| [Concatenating Strings in SQL Server] | Guy Glantser | 2020-11-30 | [DBA][DEV] |
+| [Why Full Text’s CONTAINS Queries Are So Slow] | Brent Ozar | 2020-11-07 | [DBA][DEV] |
+| [Migrating SSIS to Azure – an Overview] | Koen Verbeeck | 2020-11-03 | [AZ][MG] |
+| [A Parameterization Puzzle With TOP: Part 1] | Eric Darling | 2020-10-21 | [DBA][DEV] |
+| [A Parameterization Puzzle With TOP: Part 2] | Eric Darling | 2020-10-22 | [DBA][DEV] |
+| [T-SQL: Get The Text Between Two Delimiters] | Eric Darling | 2020-10-22 | [DBA][DEV] |
+| [Explore dynamic management views for monitoring SQL Server Always On Availability Groups] | Rajendra Gupta | 2020-11-16 | [DBA] |
+| [Deploy SQLWATCH to SQL Server using GitHub Actions] | Kevin Chant | 2020-11-17 | [DBA] |
+| [SQL Server table hints – WITH (NOLOCK) best practices] | Ahmad Yaseen | 2018-02-24 | [DBA][DEV] |
+| [Memory-Optimized TempDB Metadata in SQL Server 2019] | Aaron Bertrand | 2020-02-14 | [DBA] |
+| [SQLskills SQL101: Should you kill that long-running transaction?] | Paul Randal | 2020-10-10 | [DBA][DEV] |
+| [A quick and dirty scan of a list of instances using a dynamic linked server] | Kenneth Fisher | 2020-11-12 | [DBA] |
+| [sp_whoisactive: Analyzing Tempdb Contention] | Adam Machanic | 2017-01-01 | [DBA][DEV] |
+| [How to Choose Between RCSI and Snapshot Isolation Levels] | Little Kendra | 2018-02-18 | [DBA][DEV] |
+| [Explore the SQL query table hint READPAST] | Rajendra Gupta | 2020-11-14 | [DBA][DEV] |
+| [How Bad Statistics Cause Bad SQL Server Query Performance] | Brent Ozar | 2020-11-14 | [DBA][DEV] |
+| [How Scalar User-Defined Functions Slow Down Queries] | Brent Ozar | 2020-11-14 | [DBA][DEV] |
+| [Could verifying your backups be costing you money?] | Matt Robertshaw | 2020-01-01 | [AZ][B] |
+| [Extended Events: System_health And A Long Running Query] | Grant Fritchey | 2020-05-09 | [XE] |
+| [Altering an indexed view in SQL Server drops all indexes] | Little Kendra | 2020-03-02 | [DBA][DEV] |
+| [Deprecated and discontinued features in SQL Server] | Randolph West | 2020-03-04 | [DBA][DEV] |
+| [Query Store, Plan Forcing, And Drop/create] | Grant Fritchey | 2020-03-02 | [QS] |
+| [Uncommon SQL in SQL Server] | Shane O'Neill | 2020-11-20 | [DBA][DEV] |
+| [Configure SQL Server Replication between AWS RDS SQL Server and On-premises SQL Server] | Rajendra Gupta | 2020-11-12 | [AMZ] |
+| [Import data into Azure SQL database from AWS Redshift] | Rahul Mehta | 2020-11-10 | [AMZ][AZ] |
+| [When You’re Troubleshooting Blocking, Look at Query #2, Too.] | Brent Ozar | 2020-11-19 | [DBA][DEV] |
+| [Finding the One Query to Tune in a Multi-Query Batch] | Brent Ozar | 2020-11-23 | [DBA][DEV] |
+| [Recursion in SQL Explained Visually] | Denis Lukichev | 2020-11-22 | [DBA][DEV] |
+| [Viva la Famiglia! Stored procedure for created recursive family tree] | Brad Schulz | 2020-10-01 | [DEV] |
+| [How to Set & Get the Next ID Without Serializable Isolation] | Brent Ozar | 2020-11-25 | [DBA][DEV] |
+| [Discovering Three or Four Part Names in SQL Server Database Code] | Louis Davidson | 2019-03-08 | [DBA][DEV] |
+| [Troubleshooting RESOURCE_SEMAPHORE_QUERY_COMPILE Helper Queries] | Eric Darling | 2020-11-24 | [DBA][DEV] |
+| [When Do I Need to Use DESC in Indexes?] | Brent Ozar | 2020-11-30 | [DBA][DEV] |
+| [Export Power BI Desktop data to SQL Server] | Rui Romano | 2016-04-21 | [DBA][DEV] |
+| [Exploring errors to reveal unauthorized information] | Fabiano Amorim | 2020-10-19 | [SEC] |
+| [How to run your CTE just once, and re-use the output] | Daniel Hutmacher | 2020-12-01 | [DBA][DEV] |
+| [Documenting SSIS Packages using Sequence Diagrams] | Aveek Das | 2020-11-25 | [SSIS] |
+| [Performance testing with DBCC DROPCLEANBUFFERS] | Dan Guzman | 2018-07-29 | [P] |
+| [Optimizing memory settings in Analysis Services] | Marco Russo | 2020-12-07 | [DBA] |
+| [VMware and SQL Server Best Practices] | Mike Walsh | 2020-12-02 | [DBA] |
+| [Autoparameterized Trivial Queries May Not Get Partition Elimination] | Brent Ozar | 2020-11-26 | [DBA][DEV] |
+| [Trigram Wildcard String Search in SQL Server] | Paul White | 2017-09-08 | [DBA][DEV] |
+| [Which Locks Count Toward Lock Escalation?] | Kendra Little | 2017-04-03 | [DBA][DEV] |
+| [The challenge is on! Community call for creating the fastest number series generator] | Itzik Ben-Gan | 2020-12-09 | [DBA][DEV] |
+| [SQL Injection Prevention Cheat Sheet] | OWASP | 2020-07-14 | [SEC] |
+| [A cheat sheet for isolation levels in SQL Server] | Dan Jackson | 2020-01-01 | [DBA][DEV] |
+| [Don't Fear the Trace] | Greg Gonzalez | 2011-04-26 | [DBA][DEV] |
+| [Which sp_configure Options Clear the Plan Cache?] | Brent Ozar | 2017-05-26 | [DBA][DEV] |
+| [The danger of HADR_SYNC_COMMIT wait and synchronous replication in AlwaysOn Availability Groups] | Dmitri Korotkevitch | 2016-06-26 | [DBA][DEV] |
+| [Faster SQL Pagination with Keysets, Continued] | Lukas Eder | 2013-11-18 | [DBA][DEV] |
+| [We need tool support for keyset pagination] | Markus Winand | 2014-08-16 | [DBA][DEV] |
+| [Insight into the SQL Server buffer cache] | Ed Pollack | 2016-02-18 | [DBA][DEV] |
+| [Index-Only Scan: Avoiding Table Access] | Markus Winand | 2014-01-01 | [DBA][DEV] |
+| [The two top performance problems caused by ORM tool] | Markus Winand | 2013-04-23 | [DBA][DEV] |
+| [Nested loops join and n1 problem in ORM] | Markus Winand | 2013-01-01 | [DBA][DEV] |
+| [Hash join partial objects] | Markus Winand | 2013-01-01 | [DBA][DEV] |
+| [Myth: Select * (asterisk) is bad] | Markus Winand | 2013-11-03 | [DBA][DEV] |
+| [Indexing LIKE Filters] | Markus Winand | 2013-01-01 | [DBA][DEV] |
+| [Date and time conditions causing SQL performance problems] | Markus Winand | 2013-01-01 | [DBA][DEV] |
+| [Dates and Times in SQL Server: more functions you should never use] | Randolph West | 2018-05-16 | [DBA][DEV] |
+| [Dates and Times in SQL Server: T-SQL functions to get the current date and time] | Randolph West | 2018-04-25 | [DBA][DEV] |
+| [Super Scaling Queues Using the LMax Disruptor Pattern And The In-Memory OLTP Engine] | Chris Adkin | 2016-01-18 | [DBA][DEV] |
+| [Early History of SQL] | Donald D. Chamberlin | 2012-01-01 | [DBA][DEV] |
+| [Is it a bad practice to always create a transaction?] | Kin Shah | 2013-09-06 | [DBA][DEV] |
+| [Incomplete checkpoints and recovery] | Paul Randal | 2015-03-18 | [DBA] |
+| [4 SQL Injection Techniques For Stealing Data] | Bert Wagner | 2018-11-20 | [DBA][DEV] |
+| [Towards Safer Dynamic SQL] | Eric Darling | 2020-10-11 | [DBA][DEV] |
+| [Setting the timezone to anything other than UTC] | Yeller | 2015-01-12 | [DBA][DEV] |
+| [Advanced Service Broker Sample: Multi-Threading] | Eitan Blumin | 2018-10-31 | [DBA][DEV] |
+| [Copy a SQL Server database with just the objects and no data] | Jeffrey Yao | 2017-02-01 | [DBA][DEV] |
+| [QOMPLX Knowledge: Kerberoasting Attacks Explained] | QOMPLX | 2020-01-01 | [SEC] |
+| [How to create a SQL dependency diagram in SQL Server] | Marko Zivkovic | 2018-09-24 | [DBA][DEV] |
+| [Query Memory Grants and Resource Semaphores in SQL Server] | Klaus Aschenbrenner | 2018-10-16 | [DBA][DEV] |
+| [Using a Table of Numbers (or a Table of Dates, Months etc)] | Erland Sommarskog | 2020-09-16 | [DBA][DEV] |
+| [SQL Server MDF and NDF files] | SQL Recovery | 2020-01-01 | [DBA][DEV] |
+| [The SQL Standard ANSI ISO is Public!] | Markus Winand | 2020-01-01 | [DBA][DEV] |
+| [SQL Server Full Backup] | Alexandr Omelchenko | 2015-10-28 | [DBA][DEV] |
+| [Import data from PDF files using R Scripts SQL Server] | Rajendra Gupta | 2020-12-08 | [R] |
+| [Adding Additional Data Files To The TempDB Database In SQL Server] | Jack Worthen | 2017-08-24 | [DBA] |
+| [SQL Server Isolation Levels: A Series] | Paul White | 2014-07-01 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The ACID Properties of Statements & Transactions] | Paul White | 2014-02-27 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The Serializable Isolation Level] | Paul White | 2014-04-10 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The Repeatable Read Isolation Level] | Paul White | 2014-04-15 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The Read Committed Isolation Level] | Paul White | 2014-04-22 | [DBA][DEV] |
+| [SQL Server Isolation Levels: Read Committed Snapshot Isolation] | Paul White | 2014-05-07 | [DBA][DEV] |
+| [SQL Server Isolation Levels: Data Modifications under Read Committed Snapshot Isolation] | Paul White | 2014-05-14 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The SNAPSHOT Isolation Level] | Paul White | 2014-06-30 | [DBA][DEV] |
+| [SQL Server Isolation Levels: The Read Uncommitted Isolation Level] | Paul White | 2015-04-23 | [DBA][DEV] |
+| [The OUTPUT Clause for the MERGE Statements] | Amarendra Reddy Thummeti | 2019-03-08 | [DBA][DEV] |
+| [SQLskills SQL101: Query plans based on what’s in memory] | Paul Randal | 2017-03-03 | [DBA][DEV] |
+| [Performance: String Concatenation in SQL Server] | Steve Stedman | 2021-01-25 | [DBA][DEV] |
+| [Performance: Faster way to concatenate longer string] | Steve Stedman | 2021-01-26 | [DBA][DEV] |
+| [Identifying Cost-Saving Opportunities in Azure DevOps] | Eric Smith | 2020-04-28 | [Az] |
+| [One wide index or multiple narrow indexes?] | Gail Shaw | 2010-09-14 | [DBA][DEV] |
+| [The Hidden Danger of Readable Secondaries in SQL Server AlwaysOn Availability Groups] | Dmitri Korotkevitch | 2018-09-04 | [DBA] |
+| [When a Columnstore Index Makes Your Query Fail - 1/0 error] | Brent Ozar | 2020-06-08 | [DBA] |
+| [Poor Man’s Resource Governor: Database-Scoped Configurations] | Brent Ozar | 2020-09-26 | [DBA] |
+| [SQL Server Suddenly Frozen? You Might Be Snapshotting Too Many Databases.] | Brent Ozar | 2020-11-27 | [DBA] |
+| [How to Batch Updates A Few Thousand Rows at a Time] | Brent Ozar | 2020-12-17 | [DBA][DEV] |
+| [Using Amazon Fsx For Sql Server Failover Cluster Instances – What You Need To Know!] | Dave Berm | 2020-01-24 | [AMZ] |
+| [Sometimes you CAN upsize a column in-place] | Aaron Bertrand | 2020-08-19 | [DBA] |
+| [Which Microsoft Certification Should You Get?] | Brent Ozar | 2021-01-04 | [DBA][DEV] |
+| [SQL Server RAISERROR Cheatsheet] | Chad Baldwin | 2021-01-15 | [DBA][DEV] |
+| [Want to Avoid Deployment Downtime? Replication Probably Isn’t the Answer.] | Brent Ozar | 2021-01-06 | [DBA][DEV] |
+| [“But Surely NOLOCK Is Okay If No One’s Changing Data, Right?”] | Brent Ozar | 2021-01-25 | [DBA][DEV] |
+| [Why Multiple Plans for One Query Are Bad] | Brent Ozar | 2018-01-17 | [DBA][DEV] |
+| [Partitioned Tables Cause Longer Plan Compilation Times.] | Brent Ozar | 2021-02-26 | [DBA][DEV] |
+| [Query Hints You Can Use to Avoid Blocking] | Brent Ozar | 2021-01-21 | [DBA][DEV] |
+| [Changing Statistics Cause Longer Compilation Times] | Brent Ozar | 2021-02-13 | [DBA][DEV] |
+| [Understanding Execution Plan Operator Timings] | Paul White | 2021-03-08 | [DBA][DEV] |
+| [What Does a Database Administrator Actually Do?] | Brent Ozar | 2021-03-20 | [DBA] |
+| [How Useful Is Column Store In Standard Edition?] | Erik Darling | 2021-03-17 | [DBA] |
+| [Task Manager’s CPU numbers are all but meaningless] | Aaron Margosis | 2021-03-25 | [DBA] |
+| [Global temporary tables are almost never the answer in SQL Server] | Greg Low | 2021-02-04 | [DBA][DEV] |
+| [Never, Ever, Ever Start T-SQL Comments with Two Dashes] | Brent Ozar | 2021-04-05 | [DBA][DEV] |
+| [Why All My Servers Have an 8GB Empty File] | Brian Schrader | 2021-03-25 | [DBA] |
+| [Incorrect Results with Parallel Eager Spools and Batch Mode] | Paul White | 2021-03-24 | [DBA][DEV] |
+| [Deprecated features to take out of your toolbox – Part 1] | Aaron Bertrand | 2021-02-22 | [DBA][DEV] |
+| [Deprecated features to take out of your toolbox – Part 2] | Aaron Bertrand | 2021-03-15 | [DBA][DEV] |
+| [Deprecated features to take out of your toolbox – Part 3] | Aaron Bertrand | 2021-07-01 | [DBA][DEV] |
+| [Troubleshooting Security Cache Issues: USERSTORE_TOKENPERM And TokenAndPermUserStore] | Erik Darling | 2021-04-19 | [DBA] |
+| [Execution Plans Don’t Have the Yellow Bang They Really Need.] | Brent Ozar | 2021-04-29 | [DBA][DEV] |
+| [The Curious Case of… the un-killable thread] | Paul Randal | 2021-04-20 | [DBA] |
+| [olved steries #1 – SQL FCI Failovers] | Sean Gallardy | 2021-04-29 | [DBA] |
+| [Possible configuration error: 1000000 IO requests allocated] | Sean Gallardy | 2021-05-23 | [DBA] |
+| [Availability Group Long Failover Times] | Sean Gallardy | 2021-04-18 | [DBA] |
+| [Testing Backups and Offloading CheckDB] | Taryn Pratt | 2021-04-19 | [DBA] |
+| [Fighting with Deadlocks] | Taryn Pratt | 2021-04-09 | [DBA][DEV] |
+| [Syncing Logins Between Availability Group Replicas] | Taryn Pratt | 2020-12-18 | [DBA] |
+| [SQL JOINs and UNIONs] | Austin Smith | 2020-03-13 | [DBA][DEV] |
+| [Some opinionated thoughts on SQL databases] | Nelson Elhage | 2020-03-30 | [DBA][DEV] |
+| [How MERGE on two different rows can still deadlock you] | Daniel Hutmacher | 2021-05-04 | [DBA][DEV] |
+| [Auto-failover Groups for Azure – Grace Period With Data Loss Hours] | Taiob Ali | 2021-03-31 | [AZ][DBA] |
+| [How Parallel Plans Start Up – Part 1] | Paul White | 2021-03-30 | [DBA][DEV] |
+| [How Parallel Plans Start Up – Part 2] | Paul White | 2021-04-08 | [DBA][DEV] |
+| [How Parallel Plans Start Up – Part 3] | Paul White | 2021-04-20 | [DBA][DEV] |
+| [How Parallel Plans Start Up – Part 4] | Paul White | 2021-05-06 | [DBA][DEV] |
+| [How Parallel Plans Start Up – Part 5] | Paul White | 2021-05-17 | [DBA][DEV] |
+| [Iterators, Query Plans, and Why They Run Backwards] | Paul White | 2010-08-05 | [DBA][DEV] |
+| [What account is xp_cmdshell using?] | Kenneth Fisher | 2021-05-25 | [DBA] |
+| [Hammer Part 1 -What is HammerDB and why would I use it?] | Tom Wilson | 2021-04-17 | [BENCH][P] |
+| [Hammer Part 2 -Let the Nail see the Hammer!] | Tom Wilson | 2021-05-26 | [BENCH][P] |
+| [Fun with DATETIME Arithmetics] | Eitan Blumin | 2021-04-27 | [DBA][DEV] |
+| [Even more fun with DATETIME arithmetics!] | Eitan Blumin | 2021-06-17 | [DBA][DEV] |
+| [I learned to love WHILE (true) and you should too] | Eitan Blumin | 2021-02-16 | [DBA][DEV] |
+| [Troubleshooting Long-Running SHRINK Operations] | Eitan Blumin | 2020-04-07 | [DBA] |
+| [The Ultimate Compression Savings Estimation Script for an Entire Database] | Eitan Blumin | 2020-02-18 | [DBA] |
+| [The Complete Guide to Temporary Tables and Table Variables - Part 1] | Guy Glanster | 2021-04-08 | [DBA][DEV] |
+| [Store Files in a File System, Not a Relational Database.] | Brent Ozar | 2021-07-01 | [DBA][DEV] |
+| [Most (XML) and Least (SQL_VARIANT) Favorite Data Type] | Eitan Blumin | 2021-03-09 | [DBA][DEV] |
+| [What should the CPU usage be of a fully-loaded CPU that has been throttled?] | Raymond | 2021-06-29 | [DBA][DEV] |
+| [Fixing Queues with Watermarks] | Forrest Daniel | 2021-06-30 | [DBA][DEV] |
+| [How to Patch SQL Server] | Brent Ozar | 2021-06-04 | [DBA] |
+| [“I’m getting index seeks. Why are my row estimates still wrong?”] | Brent Ozar | 2021-06-06 | [DBA][DEV] |
+| [OLAP != OLAP Cube] | Cedric Chin | 2020-02-06 | [DBA][DEV] |
+| [Connecting a SQL Server client on Linux using Active Directory authentication] | Daniel Hutmacher | 2021-04-15 | [DBA][DEV] |
+| [Is a sort faster when the data is already sorted?] | Daniel Hutmacher | 2021-02-15 | [DBA][DEV] |
+| [Connect using Windows authentication across domains] | Daniel Hutmacher | 2021-02-05 | [DBA][DEV] |
+| [The uncorrelated correlated subquery] | Daniel Hutmacher | 2020-12-21 | [DBA][DEV] |
+| [How to fix rounding errors] | Daniel Hutmacher | 2020-12-15 | [DBA][DEV] |
+| [The curious case of the Top N Sort] | Daniel Hutmacher | 2020-12-08 | [DBA][DEV] |
+| [Consolidating grouped transactions into evenly sized batches] | Daniel Hutmacher | 2020-07-13 | [DBA][DEV] |
+| [A “shock absorber” pattern for high-performance data ingestion] | Daniel Hutmacher | 2021-07-15 | [P] |
+| [Why Are Linked Server Queries So Bad?] | Brent Ozar | 2021-07-15 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 1] | Itzik Ben-Gan | 2020-04-08 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 2 – Derived tables, logical considerations] | Itzik Ben-Gan | 2020-05-13 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 3 – Derived tables, optimization considerations] | Itzik Ben-Gan | 2020-06-10 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 4 – Derived tables, optimization considerations, continued] | Itzik Ben-Gan | 2020-07-08 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 5 – CTEs, logical considerations] | Itzik Ben-Gan | 2020-08-12 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 6 – Recursive CTEs] | Itzik Ben-Gan | 2020-09-09 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 7 – CTEs, optimization considerations] | Itzik Ben-Gan | 2020-10-14 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 8 – CTEs, optimization considerations continued] | Itzik Ben-Gan | 2020-11-11 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 9 – Views, compared with derived tables and CTEs] | Itzik Ben-Gan | 2021-06-09 | [DBA][DEV] |
+| [Fundamentals of table expressions, Part 10 – Views, SELECT *, and DDL changes] | Itzik Ben-Gan | 2021-07-14 | [DBA][DEV] |
+| [Understanding xp_fileexist and its usage] | Nisarg Upadhyay | 2021-07-09 | [DBA][DEV] |
+| [SQL Server Restore Database Options and Examples] | Joe Gavin | 2021-06-21 | [DBA] |
+| [SQL Server Database RESTORE WITH MOVE or not WITH MOVE] | Mike Eastland | 2013-11-22 | [DBA] |
+| [Getting exclusive access to restore SQL Server database] | Greg Robidoux | 2021-02-21 | [DBA] |
+| [How to migrate a SQL Server database to a lower version] | Basit Farooq | 2019-08-05 | [DBA] |
+| [Make Network Path Visible For SQL Server Backup and Restore in SSMS] | Ahmad Yaseen | 2015-03-03 | [DBA] |
+| [T-SQL bugs, pitfalls, and best practices – pivoting and unpivoting] | Itzik Ben-Gan | 2019-09-12 | [DBA][DEV] |
+| [How to Prep a SQL Server Availability Group for VM-Level DR Replication] | David Klee | 2021-02-08 | [DBA] |
+| [Special Agent Jenkins] | Kirill Kravtsov | 2018-03-03 | [J] |
+| [What To Avoid If You Want To Use MERGE] | Michael J Swart | 2021-08-04 | [DBA][DEV] |
+| [Solving Gaps and Islands with Enhanced Window] | Itzik Ben-Gan | 2012-09-20 | [DBA][DEV] |
+| [How to choose between SQL and NoSQL databases] | Robert Sheldon | 2021-04-13 | [DBA][DEV] |
+| [SQL Server plan cache mining – Plan attributes] | Edward Pollack | 2021-04-26 | [DBA][DEV] |
+| [How to Prep a SQL Server Availability Group for VM-Level DR Replication] | David Klee | 2021-02-08 | [DBA] |
+| [How to create an autonomous transaction in SQL Server 2008] | SQL-Server-Team | 2021-02-08 | [DBA][DEV] |
+| [Cloud Comparison: AWS vs. Azure vs. GCP] | Troy Blake | 2021-03-24 | [DBA][DEV] |
+| [New VLF status value] | Troy Blake | 2021-03-24 | [DBA][DEV] |
+| [The Simplest Alternative to sp_MSforeachdb] | Eitan Blumin | 2021-08-05 | [DBA][DEV] |
+| [Your database connection deserves a name] | Andy Grunwald | 2021-07-25 | [DBA][DEV] |
+| [Renaming a Database Table In-Flight] | Arvind Paul | 2021-01-01 | [DBA][DEV] |
+| [Upgrading/Migrating Large Replicated Databases Without Reinitializing] | Jonathan Kehayias | 2021-08-12 | [DBA][DEV] |
+| [TempDB configuration for people in a hurry] | Jeff Iannucci | 2021-07-03 | [DBA][DEV] |
+| [Help! My tempdb database won’t shrink!] | Jeff Iannucci | 2018-06-22 | [DBA][DEV] |
+| [SQL Server Checkpoint Monitoring with Extended Events] | Aaron Bertrand | 2020-02-17 | [DBA][DEV] |
+| ["0 to 60" : Switching to indirect checkpoints] | Aaron Bertrand | 2020-05-01 | [DBA][DEV] |
+| [A case against using Basic and Standard (S0 & S1) tiers in Azure SQL Databases] | Niko Neugebauer | 2021-02-09 | [AZ] |
+| [Experiment: Does sp_recompile on a table update associated views.] | Kenneth Fisher | 2021-08-17 | [DBA][DEV] |
+| [On index key size, index depth, and performance] | Paul Radal | 2015-10-23 | [DBA][DEV] |
+| [SQL Server Hierarchyid Data Type Overview and Examples] | Rick Dobson | 2019-06-21 | [DBA][DEV] |
+| [Make It Easier for the DBA: Give SQL Connections the Application’s Name!] | Ben Gribaudo | 2017-06-23 | [DBA][DEV] |
+| [You Probably Shouldn’t Index Your Temp Tables.] | Brent Ozar | 2021-08-17 | [DBA][DEV] |
+| [SQL Server Error Handling Gotchas] | Niels Berglund | 2016-12-31 | [DBA][DEV] |
+| [B-Trees: More Than I Thought I'd Want to Know] | Ben Congdon | 2021-08-17 | [DBA][DEV] |
+| [Wait Stats During Hash Spills] | Eric Darling | 2021-09-21 | [DBA][DEV] |
+| [Shrinking The tempdb System Database Without Restarting SQL Server] | Jack Worthen | 2016-06-02 | [DBA][DEV] |
+| [Graphing SQL Server wait stats on Prometheus and Grafana] | David Barbarin | 2021-09-09 | [M] |
+| [Transition from SSMS to DataGrip: 10 tips] | Maksim Sobolevskiy | 2021-08-19 | [DBA][DEV] |
+| [Query Store Hints] | Erin Stellato | 2021-06-09 | [DBA][DEV] |
+| [Announcing SSIS Framework Manager, v1] | Andy Leonard | 2021-06-09 | [SSIS] |
+| [Improving The Performance of RBAR Modifications] | Erik Darling | 2021-02-15 | [DBA][DEV] |
+| [Minimal Logging with INSERT…SELECT into Empty Clustered Tables] | Paul White | 2019-05-16 | [DBA][DEV] |
+| [What Is a Cost-Based Optimizer?] | Brent Ozar | 2021-09-17 | [DBA][DEV] |
+| [Unusual Parameter Sniffing: Big Problems with Small Data] | Brent Ozar | 2021-02-03 | [DBA][DEV] |
+| [Rowcount estimates when there are no Statistics] | Matthew Mcgiffen | 2021-01-26 | [DBA][DEV] |
+| [Processing Data Queues in SQL Server with READPAST and UPDLOCK] | Armando Prato | 2007-06-04 | [DBA][DEV] |
+| [Can You Get Parameter Sniffing on Updates and Deletes?] | Brent Ozar | 2021-01-27 | [DBA][DEV] |
+| [An Empirical Look at Key Lookups] | Forrest mc Daniel | 2020-12-30 | [DBA][DEV] |
+| [Please stop using this UPSERT anti-pattern] | Aaron Bertrand | 2020-09-02 | [DBA][DEV] |
+| [The Curious Case of… the failing differential restore] | Paul Randal | 2021-01-18 | [DBA] |
+| [Starting SQL: Compensating For Lock Waits] | Erik Darling | 2020-01-31 | [DBA][DEV] |
+| [Finding & Downloading Required SQL Server Updates] | Andy Levy | 2020-07-21 | [DBA] |
+| [Quick SQL Server CPU Comparison Tests] | Joe Obbish | 2021-09-22 | [DBA][DEV] |
+| [Using fn_dblog, fn_dump_dblog, and restoring with STOPBEFOREMARK to an LSN] | Paul Randal | 2012-05-17 | [DBA][DEV] |
-Author: Erland Sommarskog
-Source link: http://sommarskog.se/dyn-search.html
-
-
-## [Slow in the Application, Fast in SSMS](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/Slow%20in%20the%20Application%2C%20Fast%20in%20SSMS.htm)
-
-Author: Erland Sommarskog
-Source link: http://www.sommarskog.se/query-plan-mysteries.html
-
-
-## [How to share data between stored procedures](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/How%20to%20share%20data%20between%20stored%20procedures.htm)
-
-Author: Erland Sommarskog
-Source link: http://www.sommarskog.se/share_data.html
-
-
-## [Arrays and Lists in SQL Server 2008](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/Arrays%20and%20Lists%20in%20SQL%20Server%202008.htm)
-
-Author: Erland Sommarskog
-Source link: http://www.sommarskog.se/arrays-in-sql-2008.html
-
-
-## [Giving Permissions through Stored Procedures](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/Giving%20Permissions%20through%20Stored%20Procedures.htm)
-
-Author: Erland Sommarskog
-Source link: http://www.sommarskog.se/grantperm.html
-
-
-## [Error and Transaction Handling in SQL Server](http://htmlpreview.github.io/?https://github.com/ktaranov/sqlserver-kit/blob/master/Articles/Error%20and%20Transaction%20Handling%20in%20SQL%20Server.htm)
-
-Author: Erland Sommarskog
-Source link: http://www.sommarskog.se/error_handling/Part1.html
+[Understanding how SQL Server executes a query]:http://rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/
+[SQL Server Index Design Guide]:https://technet.microsoft.com/en-us/library/jj835095.aspx
+[SQL Server 2012 Security Best Practices - Microsoft]:http://download.microsoft.com/download/8/f/a/8fabacd7-803e-40fc-adf8-355e7d218f4c/sql_server_2012_security_best_practice_whitepaper_apr2012.docx
+[Help, my database is corrupt. Now what?]:http://www.sqlservercentral.com/articles/Corruption/65804/
+[What to Do When DBCC CHECKDB Reports Corruption]:https://www.brentozar.com/archive/2016/05/dbcc-checkdb-reports-corruption/
+[Troubleshooting SQL Server CPU Performance Issues]:http://sqlperformance.com/2013/05/io-subsystem/cpu-troubleshooting
+[Knee-Jerk Performance Tuning : Incorrect Use of Temporary Tables]:http://sqlperformance.com/2016/04/t-sql-queries/knee-jerk-temporary-tables
+[High Performance T-SQL using Code Patterns]:https://dwaincsql.com/2015/05/27/high-performance-t-sql-using-code-patterns/
+[SQL Server Database Corruption Repair]:http://stevestedman.com/2015/08/sql-server-database-corruption-repair/
+[Basic SQL Server Performance Troubleshooting For Developers]:https://www.simple-talk.com/sql/performance/basic-sql-server-performance-troubleshooting-for-developers/
+[The Curse and Blessings of Dynamic SQL]:http://sommarskog.se/dynamic_sql.html
+[Dynamic Search Conditions in T-SQL]:http://www.sommarskog.se/dyn-search.html
+[Slow in the Application, Fast in SSMS]:http://www.sommarskog.se/query-plan-mysteries.html
+[How to share data between stored procedures]:http://www.sommarskog.se/share_data.html
+[Arrays and Lists in SQL Server 2008]:http://www.sommarskog.se/arrays-in-sql-2008.html
+[Packaging Permissions in Stored Procedures]:http://www.sommarskog.se/grantperm.html
+[Error and Transaction Handling in SQL Server Part One – Jumpstart Error Handling]:http://www.sommarskog.se/error_handling/Part1.html
+[Error and Transaction Handling in SQL Server Part Two – Commands and Mechanisms]:http://www.sommarskog.se/error_handling/Part2.html
+[Error and Transaction Handling in SQL Server Part Three – Implementation]:http://www.sommarskog.se/error_handling/Part3.html
+[Using the Bulk-Load Tools in SQL Server]:http://www.sommarskog.se/bulkload.html
+[Using Table-Valued Parameters in SQL Server and .NET]:http://www.sommarskog.se/arrays-in-sql-2008.html
+[SQL Server Columnstore Articles]:http://www.nikoport.com/columnstore/
+[Documentation: It Does not Suck!]:https://www.brentozar.com/archive/2013/01/documentation-it-doesnt-suck/
+[The Data Loading Performance Guide]:https://msdn.microsoft.com/en-us/library/dd425070%28v=sql.100%29.aspx
+[Required Testing for Installing SQL Server Cumulative Updates and Service Packs]:http://www.littlekendra.com/2016/04/28/required-testing-for-installing-sql-server-cumulative-updates-and-service-packs/
+[Stop Shrinking Your Database Files. Seriously. Now.]:https://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/
+[How to shrink a database in 4 easy steps]:http://am2.co/2016/04/shrink-database-4-easy-steps/
+[Introduction to the Index Operational Statistics Dynamic Management Function]:http://sqlmag.com/database-performance-tuning/introduction-index-operational-statistics-dynamic-management-function
+[Updating Statistics in SQL Server: Maintenance Questions & Answers]:http://www.littlekendra.com/2016/04/18/updating-statistics-in-sql-server-maintenance-answers/
+[Overcoming Variable Limitations in SQLCmd Mode]:http://www.sqlsoldier.com/wp/sqlserver/tsqltuesday65overcomingvariablelimitationsinsqlcmdmode
+[Contents of a Run Book]:https://technet.microsoft.com/en-us/library/cc917702.aspx
+[Compressed and Encrypted Backups on the Cheap]:https://bornsql.ca/2016/04/compressed-encrypted-backups-cheap/
+[Curing Data-Obesity in OLTP Databases]:https://www.simple-talk.com/sql/database-administration/curing-data-obesity-in-oltp-databases/
+[Understanding GRANT, DENY, and REVOKE in SQL Server]:https://www.mssqltips.com/sqlservertip/2894/understanding-grant-deny-and-revoke-in-sql-server/
+[Monitor SQL Server Transaction Log File Free Space]:https://www.mssqltips.com/sqlservertip/3617/monitor-sql-server-transaction-log-file-free-space/
+[Dynamically Query a 100 Million Row Table-Efficiently]:http://www.sqlservercentral.com/articles/T-SQL/121906/
+[Understanding and Using Parallelism in SQL Server]:https://www.simple-talk.com/sql/learn-sql-server/understanding-and-using-parallelism-in-sql-server/
+[Parallel Execution Plans – Branches and Threads]:http://sqlperformance.com/2013/10/sql-plan/parallel-plans-branches-threads
+[Nasty Fast PERCENT_RANK]:http://www.sqlservercentral.com/articles/PERCENT_RANK/141532/
+[Looking at VIEWs, Close Up]:https://www.simple-talk.com/sql/t-sql-programming/looking-at-views,-close-up/
+[SQL Server 2016: It Just Runs Faster]:http://thomaslarock.com/2016/06/sql-server-2016-just-runs-faster/
+[TSQL JOIN Types Poster]:http://stevestedman.com/2015/05/tsql-join-types-poster-version-4-1/
+[It is Hard To Destroy Data]:http://michaeljswart.com/2015/05/its-hard-to-destroy-data/
+[How to transfer logins and passwords between instances of SQL Server]:https://support.microsoft.com/en-us/kb/918992
+[Finding File Growths with Extended Events]:http://nebraskasql.blogspot.ru/2016/06/finding-file-growths-with-extended.html
+[Questions You Should Ask About the Databases You Manage]:https://www.brentozar.com/archive/2016/06/questions-ask-databases-manage/
+[Clustered Indexes in SQL Server]:http://www.sqlhammer.com/clustered-indexes-sql-server/
+[Triage Quiz: Is Your SQL Server Safe?]:https://www.brentozar.com/archive/2016/06/triage-quiz-sql-server-safe/
+[Why Not Just Create Statistics?]:https://www.brentozar.com/archive/2016/07/not-just-create-statistics/
+[Understanding the SQL Server NOLOCK hint]:https://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/
+[Recover access to a SQL Server instance]:https://www.mssqltips.com/sqlservertip/2682/recover-access-to-a-sql-server-instance/
+[SQL Server 2016 Upgrade Planning]:http://sqlmag.com/sql-server/sql-server-2016-upgrade-planning-0
+[Graphs and Graph Algorithms in T-SQL]:http://www.hansolav.net/sql/graphs.html
+[Episode 4: SQL Server R Services makes you a smarter T-SQL Developer]:https://blogs.msdn.microsoft.com/sqlcat/2016/07/12/sqlsweet16-episode-4-sql-server-r-services-makes-you-a-smarter-t-sql-developer/
+[How to Set Max Degree of Parallelism in SQL Server]:http://www.littlekendra.com/2016/07/14/max-degree-of-parallelism-cost-threshold-for-parallelism/
+[Undocumented Query Plans: Equality Comparisons]:https://www.sql.kiwi/2011/06/undocumented-query-plans-equality-comparisons.html
+[Simplified Order Of Operations]:http://michaeljswart.com/2016/07/simplified-order-of-operations/
+[SQL Server Statistics Basics]:https://www.simple-talk.com/sql/performance/sql-server-statistics-basics/
+[Learn to Use sp_Blitz, sp_BlitzCache, sp_BlitzFirst, and sp_BlitzIndex with These Tutorial Videos]:https://www.brentozar.com/archive/2016/09/learn-use-sp_blitz-sp_blitzcache-sp_blitzfirst-sp_blitzindex-tutorial-videos/
+[Where is a record really located?]:https://blogs.msdn.microsoft.com/sql_pfe_blog/2016/09/15/where-is-a-record-really-located/
+[Instant File Initialization (IFI)]:http://stevestedman.com/2016/09/instant-file-initialization-ifi/
+[How to Query the StackExchange Databases]:https://www.brentozar.com/archive/2014/01/how-to-query-the-stackexchange-databases/
+[How to Troubleshoot Performance in SQL Server (Dear SQL DBA)]:http://www.littlekendra.com/2016/06/02/dear-sql-dba-lost-in-performance-troubleshooting/
+[How to Log Activity Using sp_whoisactive in a Loop]:https://www.brentozar.com/responder/log-sp_whoisactive-to-a-table/
+[Logging Activity Using sp_WhoIsActive – Take 2]:https://www.brentozar.com/archive/2016/07/logging-activity-using-sp_whoisactive-take-2/
+[How To Fix Forwarded Records]:https://www.brentozar.com/archive/2016/07/fix-forwarded-records/
+[Should I Automate my Windows Updates for SQL Server?]:http://www.littlekendra.com/2016/07/28/should-i-automate-my-windows-updates-for-sql-server-dear-sql-dba-episode-10/
+[Finding the Right Path]:http://jasonbrimhall.info/2016/08/24/finding-the-right-path/
+[#BackToBasics : An Updated "Kitchen Sink" Example]:https://www.sentryone.com/blog/aaronbertrand/backtobasics-updated-kitchen-sink-example
+[Locking and Blocking in SQL Server]:https://www.brentozar.com/sql/locking-and-blocking-in-sql-server/
+[Nested Loops Prefetching]:https://www.sql.kiwi/2013/08/sql-server-internals-nested-loops-prefetching.html
+[Performance tuning backup and restore operations]:http://www.sqlhammer.com/performance-tuning-backup-restore-operations/
+[Execution Plan Analysis: The Mystery Work Table]:https://www.sql.kiwi/2013/03/execution-plan-analysis-the-mystery-work-table.html
+[How to move data between File Groups in SQL Server]:http://www.sqlpassion.at/archive/2016/09/26/how-to-move-data-between-file-groups-in-sql-server/
+[Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator]:https://docs.microsoft.com/en-us/previous-versions/dn673537(v=msdn.10)?redirectedfrom=MSDN
+[Parallelism in SQL Server Query Tuning]:http://sqlmag.com/sql-server/parallelism-sql-server-query-tuning
+[What You Need to Know about the Batch Mode Window Aggregate Operator in SQL Server 2016: Part 1]:http://sqlmag.com/sql-server/what-you-need-know-about-batch-mode-window-aggregate-operator-sql-server-2016-part-1
+[What To Do If sp_BlitzFirst Warns About High Compilations]:https://www.brentozar.com/archive/2016/09/what-to-do-if-sp_blitzfirst-warns-about-high-compilations/
+[Questions You Should Be Asking About Your Backups]:https://www.brentozar.com/archive/2016/10/questions-asking-backups/
+[Evolutionary Database Design]:http://martinfowler.com/articles/evodb.html
+[Implementing a custom sort]:https://sqlperformance.com/2016/10/sql-plan/implementing-custom-sort
+[Deletes that Split Pages and Forwarded Ghosts]:https://www.sql.kiwi/2012/08/deletes-that-split-pages-and-forwarded-ghosts.html
+[Query Optimizer Deep Dive - Part 1]:https://www.sql.kiwi/2012/04/query-optimizer-deep-dive-part-1.html
+[Query Optimizer Deep Dive - Part 2]:https://www.sql.kiwi/2012/04/query-optimizer-deep-dive-part-2.html
+[Query Optimizer Deep Dive - Part 3]:https://www.sql.kiwi/2012/04/query-optimizer-deep-dive-part-3.html
+[Query Optimizer Deep Dive - Part 4]:https://www.sql.kiwi/2012/05/query-optimizer-deep-dive-part-4.html
+[Should You Rebuild or Reorganize Indexes on Large Tables?]:https://www.littlekendra.com/2016/10/13/should-you-rebuild-or-reorganize-indexes-on-large-tables-dear-sql-dba-episode-19/
+[Retrieving SQL Server Query Execution Plans]:https://www.simple-talk.com/sql/database-administration/retrieving-sql-server-query-execution-plans/
+[Introduction to Latches in SQL Server]:http://www.sqlpassion.at/archive/2014/06/23/introduction-to-latches-in-sql-server/
+[Latch Coupling in SQL Server]:https://www.sqlpassion.at/archive/2016/10/24/latch-coupling-in-sql-server/
+[Partitioned Views? A How-To Guide]:https://www.brentozar.com/archive/2016/09/partitioned-views-guide/
+[TroubleShooting SQL Server Memory Consumption]:http://www.sql-server-performance.com/2016/trouble-shooting-sql-server-ra-memory-consumption/
+[Time Series Algorithms in SQL Server]:http://www.sql-server-performance.com/2015/time-series-algorithms-sql-server/
+[Internals of the Seven SQL Server Sorts – Part 1]:https://sqlperformance.com/2015/04/sql-plan/internals-of-the-seven-sql-server-sorts-part-1
+[Internals of the Seven SQL Server Sorts – Part 2]:https://sqlperformance.com/2015/05/sql-plan/internals-of-the-seven-sql-server-sorts-part-2
+[The 9 Letters That Get DBAs Fired]:https://www.brentozar.com/archive/2011/12/letters-that-get-dbas-fired/
+[Restarting SQL Server – always a good idea?]:https://www.sqlpassion.at/archive/2016/08/08/restarting-sql-server-always-a-good-idea/
+[Don’t believe everything you read: Reconfigure flushes the plan cache]:https://mattsql.wordpress.com/2012/06/25/dont-believe-everything-you-read-reconfigure-flushes-the-plan-cache/
+[How-to load data fast into SQL Server 2016]:http://henkvandervalk.com/how-to-load-data-fast-into-sql-server-2016
+[Database Design Matters, RTO and Filegroups]:http://www.sqldoubleg.com/2016/10/28/database-design-matters-rto-and-filegroups/
+[Automate Alerting for SQL Server Suspect Database Pages]:https://www.mssqltips.com/sqlservertip/4166/automate-alerting-for-sql-server-suspect-database-pages/
+[Successful Anti-Patterns, Storage Requirements]:http://www.sqldoubleg.com/2016/10/19/successful-anti-patterns-storage-requirements/
+[SQL Server table columns under the hood]:http://rusanu.com/2011/10/20/sql-server-table-columns-under-the-hood/
+[How to analyse SQL Server performance]:http://rusanu.com/2014/02/24/how-to-analyse-sql-server-performance/
+[Asynchronous procedure execution]:http://rusanu.com/2009/08/05/asynchronous-procedure-execution/
+[What is the CXPACKET Wait Type, and How Do You Reduce It?]:https://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/
+[New indexes, hypothetically]:https://sqlstudies.com/2016/11/02/new-indexes-hypothetically/
+[Indexing Wide Keys in SQL Server]:https://www.brentozar.com/archive/2013/05/indexing-wide-keys-in-sql-server/
+[The Anatomy and (In)Security of Microsoft SQL Server Transparent Data Encryption (TDE), or How to Break TDE]:http://simonmcauliffe.com/technology/tde/
+[Correctly adding data files to tempdb]:http://www.sqlskills.com/blogs/paul/correctly-adding-data-files-tempdb/
+[Why You Should Test Your Queries Against Bigger Data]:https://www.brentozar.com/archive/2016/11/why-you-should-test-your-queries-against-bigger-data/
+[Tally OH! An Improved SQL 8K “CSV Splitter” Function]:http://www.sqlservercentral.com/articles/Tally+Table/72993/
+[Set Statistics… Profile?]:https://www.brentozar.com/archive/2016/10/set-statistics-profile/
+[Hierarchies on Steroids #1: Convert an Adjacency List to Nested Sets]:http://www.sqlservercentral.com/articles/Hierarchy/94040/
+[Optimizing T-SQL queries that change data]:https://www.sql.kiwi/2013/01/optimizing-t-sql-queries-that-change-data.html
+[Measuring Query Duration: SSMS vs SQL Sentry Plan Explorer]:https://www.littlekendra.com/2016/09/27/measuring-query-duration-ssms-vs-sql-sentry-plan-explorer/
+[Inside the Statistics Histogram & Density Vector]:http://www.sqlpassion.at/archive/2014/01/28/inside-the-statistics-histogram-density-vector/
+[Misconceptions on parameter sniffing]:https://sqlserverfast.com/blog/hugo/2016/11/misconceptions-on-parameter-sniffing/
+[What Every Accidental DBA Needs to Know Now: Basics of SQL Security]:http://sqlmag.com/database-security/what-every-accidental-dba-needs-know-now-basics-sql-security
+[SQL Server Perfmon (Performance Monitor) Best Practices]:https://www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/
+[Top 5 Overlooked Index Features]:https://www.brentozar.com/archive/2016/11/top-5-overlooked-index-features/
+[A Sysadmin’s Guide to Microsoft SQL Server Memory]:https://www.brentozar.com/archive/2011/09/sysadmins-guide-microsoft-sql-server-memory/
+[Searching Strings in SQL Server is Expensive]:https://www.brentozar.com/archive/2016/10/searching-strings-sql-server-expensive/
+[Altering an INT Column to a BIGINT]:https://www.littlekendra.com/2016/08/04/altering-an-int-column-to-a-bigint-dear-sql-dba-episode-11/
+[Query tuning 101: Problems with IN ()]:http://www.sqlservercentral.com/blogs/confessions-of-a-microsoft-addict/2016/11/10/query-tuning-101-problems-with-in-/
+[Admin: Bulkadmin vs ADMINISTER BULK OPERATIONS]:http://richbrownesq-sqlserver.blogspot.ru/2012/01/admin-bulkadmin-vs-administer-bulk.html
+[Can Indexes My Query Doesn’t Use Help My Query?]:https://www.brentozar.com/archive/2016/11/can-indexes-query-doesnt-use-help-query/
+[SQL Server Audit Walkthrough]:http://www.sql-server-performance.com/2016/walkthrough-sql-server-audit/
+[The SQL Server 2016 Query Store: Overview and Architecture]:https://www.simple-talk.com/sql/database-administration/the-sql-server-2016-query-store-overview-and-architecture/
+[Reading, Writing, and Creating SQL Server Extended Properties]:https://www.simple-talk.com/sql/database-delivery/reading-writing-creating-sql-server-extended-properties/
+[Questions About SQL Server Security and Access Control You Were Too Shy to Ask]:https://www.simple-talk.com/sql/database-delivery/questions-sql-server-security-access-control-shy-ask/
+[The Ten Commandments of SQL Server Monitoring]:https://www.simple-talk.com/sql/database-administration/the-ten-commandments-of-sql-server-monitoring/
+[Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?]:https://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join
+[Parameter Sniffing, Embedding, and the RECOMPILE Options]:https://sqlperformance.com/2013/08/t-sql-queries/parameter-sniffing-embedding-and-the-recompile-options
+[Can comments hamper stored procedure performance?]:https://sqlperformance.com/2016/11/sql-performance/comments-hamper-performance
+[SQL Server Temporary Table Caching]:https://www.mssqltips.com/sqlservertip/4406/sql-server-temporary-table-caching/
+[Techniques to Monitor SQL Server memory usage]:http://www.sql-server-performance.com/2016/monitor-sql-server-memory-usage/
+[Troubleshooting Query Regressions Caused By The New Cardinality Estimator]:https://sqlserverscotsman.wordpress.com/2016/11/24/troubleshooting-query-regressions-caused-by-the-new-cardinality-estimator/
+[Migrating Databases to Azure SQL Database]:https://sqlperformance.com/2016/10/sql-performance/migrating-to-azure-sql-database
+[Solve Common SQL Server Restore Issues]:https://www.mssqltips.com/sqlservertip/4110/solve-common-sql-server-restore-issues/
+[Spills SQL Server Doesn’t Warn You About]:https://www.brentozar.com/archive/2016/11/spills-sql-server-doesnt-warn/
+[How often should I run DBCC CHECKDB?]:https://www.brentozar.com/archive/2016/02/how-often-should-i-run-dbcc-checkdb/
+[Why is My Query Faster the Second Time it Runs?]:https://www.littlekendra.com/2016/11/25/why-is-my-query-faster-the-second-time-it-runs-dear-sql-dba-episode-23/
+[Downgrading the SQL Server Edition of a Dev Environment]:https://www.littlekendra.com/2016/11/15/downgrading-the-sql-server-edition-of-a-dev-environment/
+[Date Math In The WHERE Clause]:https://www.brentozar.com/archive/2016/12/date-math-clause/
+[Why is This Partitioned Query Slower?]:https://www.brentozar.com/archive/2015/09/why-is-this-partitioned-query-slower/
+[A Beginner’s Guide to the True Order of SQL Operations]:https://blog.jooq.org/2016/12/09/a-beginners-guide-to-the-true-order-of-sql-operations/
+[Logical Query Processing: What It Is And What It Means to You]:http://sqlmag.com/sql-server/logical-query-processing-what-it-and-what-it-means-you
+[Forcing a Parallel Query Execution Plan]:https://www.sql.kiwi/2011/12/forcing-a-parallel-query-execution-plan.html
+[Join Containment Assumption and CE Model Variation]:http://www.queryprocessor.com/ce_join_base_containment_assumption/
+[Table Variable Tip]:http://sqlmag.com/t-sql/table-variable-tip
+[Heap tables in SQL Server]:http://www.sqlhammer.com/heaps-in-microsoft-sql-server/
+[The ‘B’ in B-Tree – Indexing in SQL Server]:http://www.sqlhammer.com/the-b-in-b-tree-indexing-sql-server/
+[How to read the SQL Server Database Transaction Log]:https://www.mssqltips.com/sqlservertip/3076/how-to-read-the-sql-server-database-transaction-log/
+[Filtered Statistics Follow-up]:https://www.brentozar.com/archive/2016/12/filtered-statistics-follow/
+[SQL Server Query Optimization: No Unknown Unknowns]:http://sqlmag.com/sql-server/sql-server-query-optimization-no-unknown-unknowns
+[Sync Vs Async Statistics: The Old Debate]:https://sqlserverscotsman.wordpress.com/2016/12/10/sync-vs-async-statistics-the-old-debate/
+[Recommended updates and configuration options for SQL Server 2012 and SQL Server 2014 with high-performance workloads]:https://support.microsoft.com/en-gb/kb/2964518
+[Troubleshooting SQL Server backup and restore operations]:https://support.microsoft.com/en-us/kb/224071
+[SQL Server 2016: Getting tempdb a little more right]:https://www.sentryone.com/blog/aaronbertrand/sql-server-2016-tempdb-fixes
+[Practical uses of binary types]:https://sqlsunday.com/2017/01/09/binary-types/
+[Backing Up SQL Server Databases is Easier in PowerShell than T-SQL]:http://www.sqlservercentral.com/articles/PowerShell/151510/
+[Creating, detaching, re-attaching, and fixing a SUSPECT database]:http://www.sqlskills.com/blogs/paul/creating-detaching-re-attaching-and-fixing-a-suspect-database/
+[Modifying Tables Online – Part 1: Migration Strategy]:http://michaeljswart.com/2012/04/modifying-tables-online-part-1-migration-strategy/
+[Modifying Tables Online – Part 2: Implementation Example]:http://michaeljswart.com/2012/04/modifying-tables-online-part-2-implementation-example/
+[Modifying Tables Online – Part 3: Example With Error Handling]:http://michaeljswart.com/2012/04/modifying-tables-online-part-3-example-with-error-handling/
+[Modifying Tables Online – Part 4: Testing]:http://michaeljswart.com/2012/04/modifying-tables-online-part-4-testing/
+[Modifying Tables Online – Part 5: Just One More Thing]:http://michaeljswart.com/2012/04/modifying-tables-online-part-5-just-one-more-thing/
+[DATEDIFF vs. DATEADD]:http://www.madeiradata.com/datediff-vs-dateadd/
+[Disaster recovery 101: hack-attach a damaged database]:http://www.sqlskills.com/blogs/paul/disaster-recovery-101-hack-attach-a-damaged-database/
+[Bones of SQL - The Calendar Table]:http://www.sqlservercentral.com/articles/calendar/145206/
+[SQL Server 2016, Double or Nothing, Always Encrypted with temporal tables]:http://www.sqldoubleg.com/2016/07/27/sql-server-2016-double-or-nothing-always-encrypted-with-temporal-tables/
+[Reclaiming Space After Column Data Type Change]:http://www.sqlservercentral.com/articles/data+type/144308/
+[Packing Intervals with Priorities]:http://sqlmag.com/sql-server/packing-intervals-priorities
+[Avoid Unnecessary Lookups when Using ROW_NUMBER for Paging]:http://sqlmag.com/t-sql/avoid-unnecessary-lookups-when-using-rownumber-paging
+[Migrating a Disk-Based Table to a Memory-Optimized Table in SQL Server]:https://www.simple-talk.com/sql/database-administration/migrating-disk-based-table-memory-optimized-table-sql-server/
+[SQL Server Hardware Optimization]:http://www.sql-server-performance.com/2016/sql-server-hardware-optimization/
+[Index Types Heaps, Primary Keys, Clustered and Nonclustered Indexes]:https://www.littlekendra.com/2017/02/02/index-types-heaps-primary-keys-clustered-and-nonclustered-indexes-dear-sql-dba-episode-28/
+[Identifying Existence of Intersections in Intervals]:http://sqlmag.com/sql-server/identifying-existence-intersections-intervals
+[Cheat Sheet How to Configure TempDB for Microsoft SQL Server]:https://www.brentozar.com/archive/2016/01/cheat-sheet-how-to-configure-tempdb-for-microsoft-sql-server/
+[A Tourist’s Guide to the sp_Blitz Source Code, Part 1: The Big Picture]:https://www.brentozar.com/archive/2017/02/tourists-guide-sp_blitz-source-code-part-1-big-picture/
+[SQL Server Default Configurations That You Should Change]:https://www.pythian.com/blog/sql-server-default-configurations-change/
+[Decoding Key and Page WaitResource for Deadlocks and Blocking]:https://www.littlekendra.com/2016/10/17/decoding-key-and-page-waitresource-for-deadlocks-and-blocking/
+[Security in the CLR World Inside SQL Server]:http://www.codemag.com/article/0603031
+[On the Advantages of DateTime2(n) over DateTime]:http://www.sqltact.com/2012/12/on-advantages-of-datetime2n-over.html
+[Build Your Own Tools]:http://michaeljswart.com/2016/09/build-your-own-tools/
+[Enhanced T-SQL Error Handling With Extended Events]:http://itsalljustelectrons.blogspot.ru/2016/09/Enhanced-TSQL-Error-Handling-With-Extended-Events.html
+[Compression and its Effects on Performance]:https://sqlperformance.com/2017/01/sql-performance/compression-effect-on-performance
+[Does Truncate Table Reset Statistics]:https://www.littlekendra.com/2016/12/08/does-truncate-table-reset-statistics/
+[SQL Server Database Decommissioning Check List]:https://www.mssqltips.com/sqlservertip/4333/sql-server-database-decommissioning-check-list/
+[New SQL Server Database Request Questionnaire and Checklist]:https://www.mssqltips.com/sqlservertip/3523/new-sql-server-database-request-questionnaire-and-checklist/
+[Adding Partitions to the Lower End of a Left Based Partition Function]:https://www.littlekendra.com/2017/02/21/adding-partitions-to-the-lower-end-of-a-left-based-partition-function/
+[Don't Panic Busting a File Space Myth]:http://sqlmag.com/database-administration/dont-panic-busting-file-space-myth
+[#BackToBasics : Dating Responsibly]:https://www.sentryone.com/blog/aaronbertrand/backtobasics-dating-responsibly/
+[#BackToBasics : Common Table Expressions (CTEs)]:https://www.sentryone.com/blog/aaronbertrand//backtobasics-ctes/
+[How to Establish Dedicated Admin Connection (DAC) to SQL Server]:https://www.codeproject.com/tips/1136361/how-to-establish-dedicated-admin-connection-dac-to
+[SQL and SQL only Best Practice]:http://strictlysql.blogspot.ru/search/label/Best%20Practices
+[There Is No Difference Between Table Variables, Temporary Tables, and Common Table Expressions]:https://dzone.com/articles/there-is-no-difference-between-table-variables-tem
+[Availability Group on SQL Server 2016]:http://www.madeiradata.com/availability-group-sql-server-2016/
+[Using SQL Server and R Services for analyzing DBA Tasks]:http://www.sqlservercentral.com/articles/R+Language/151405/
+[SQLskills SQL101: Dealing with SQL Server corruption]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-dealing-with-sql-server-corruption/
+[Advanced Analytics with R & SQL: Part I - R Distributions]:http://www.sqlservercentral.com/articles/Data+Science/146555/
+[T-SQL Tuesday #85 STOP! Restore Time!]:http://www.sqlhammer.com/t-sql-tuesday-85-stop-restore-time
+[Filtered Indexes: Rowstore vs Nonclustered Columnstore]:https://www.littlekendra.com/2016/11/10/filtered-indexes-rowstore-vs-nonclustered-columnstore/
+[ALTER SCHEMA TRANSFER for Zero Downtime Database Upgrades]:http://www.davewentzel.com/content/alter-schema-transfer-zero-downtime-database-upgrades
+[Delayed Durability in SQL Server 2014]:https://sqlperformance.com/2014/04/io-subsystem/delayed-durability-in-sql-server-2014
+[Daylight Savings end affects not only you, but your SQL Server too]:http://www.sqldoubleg.com/2015/10/28/daylight-savings-end-affects-not-only-you-but-your-sql-server-too/
+[Let’s Corrupt a SQL Server Database Together, Part 1: Clustered Indexes]:https://www.brentozar.com/archive/2017/02/lets-corrupt-sql-server-database-together/
+[Let’s Corrupt a Database Together, Part 2: Nonclustered Indexes]:https://www.brentozar.com/archive/2017/02/lets-corrupt-database-together-part-2-nonclustered-indexes/
+[The Guide SQL Server Installation Checklist (settings that increase SQL Server Performance)]:https://red9.com/blog/sql-server-installation-checklist/
+[SQL Browser, what is it good for? Absolutely something!]:http://www.cjsommer.com/2017-03-01-sql-browser-what-is-it-good-for-absolutely-something/
+[PowerShell Getting More From Generic Error Messages]:https://nocolumnname.wordpress.com/2017/03/02/powershell-getting-more-from-generic-error-messages/
+[SQL VNext sp_configure on Windows and Linux with dbatools]:https://sqldbawithabeard.com/2017/02/27/sql-vnext-sp_configure-on-windows-and-linux-with-dbatools/
+[Adding a T-SQL Job Step to a SQL Agent Job with PowerShell]:https://sqldbawithabeard.com/2017/02/20/adding-a-t-sql-job-step-to-a-sql-agent-job-with-powershell/
+[Setting up Database Mail to use my Gmail account]:https://mathaywardhill.com/2017/03/01/setting-up-database-mail-to-use-my-gmail-account/
+[Using DBCC CLONEDATABASE and Query Store for Testing]:https://sqlperformance.com/2017/02/sql-performance/clonedatabase-query-store-testing
+[Getting Started with Natural Earth — A SQL Server Shapefile Alternative (Geospatial Resource)]:http://blog.jpries.com/2017/02/17/getting-started-with-natural-earth-sql-server/
+[SQL Server Temporal Tables: How-To Recipes]:https://www.simple-talk.com/sql/sql-training/sql-server-temporal-tables-recipes/
+[The Migration Checklist]:http://www.sqlservercentral.com/articles/Editorial/154033/
+[Upgrading to SQL Server 2014: A Dozen Things to Check]:https://thomaslarock.com/2014/06/upgrading-to-sql-server-2014-a-dozen-things-to-check/
+[Introducing the Set-based Loop]:http://www.sqlservercentral.com/articles/set-based+loop/127670/
+[Representing Hierarchical Data for Mere Mortals]:https://www.simple-talk.com/sql/database-administration/representing-hierarchical-data-for-mere-mortals/
+[KPIs For DBAs to Show Their CIOs]:https://thomaslarock.com/2017/03/kpis-dbas-show-cios/
+[How To Forecast Database Disk Capacity If You Don’t Have A Monitoring Tool]:http://www.edwinmsarmiento.com/how-to-forecast-database-disk-capacity-if-you-dont-have-a-monitoring-tool/
+[Statistical Sampling for Verifying Database Backups]:https://www.simple-talk.com/sql/database-administration/statistical-sampling-for-verifying-database-backups/
+[Using dbatools for automated restore and CHECKDB]:http://www.centinosystems.com/blog/sql/using-dbatools-for-automated-restore-and-checkdb/
+[Bad Habits Revival]:https://www.sentryone.com/blog/aaronbertrand/bad-habits-revival/
+[Deploying Multiple SSIS Projects via PowerShell]:https://www.simple-talk.com/sql/ssis/deploying-multiple-ssis-projects-via-powershell/
+[Determining the Cost Threshold for Parallelism]:http://www.scarydba.com/2017/02/28/determining-the-cost-threshold-for-parallelism/
+[Identifying a row’s physical location]:http://blog.waynesheffield.com/wayne/archive/2017/03/identifying-rows-physical-location/
+[Split a file group into multiple data files]:https://blogs.msdn.microsoft.com/sql_pfe_blog/2017/03/03/split-a-file-group-into-multiple-data-files/
+[Why PFS pages cannot be repaired]:https://www.sqlskills.com/blogs/paul/why-pfs-pages-cannot-be-repaired/
+[ERRORLOG records max out at 2049 characters]:https://www.codykonior.com/2017/03/02/errorlog-records-max-out-at-2047-characters/
+[How to Build a SQL Server Disaster Recovery Plan with Google Compute Engine]:https://www.brentozar.com/archive/2017/03/new-white-paper-build-sql-server-disaster-recovery-plan-google-compute-engine/
+[SQL Server Performance Tuning in Google Compute Engine]:https://www.brentozar.com/archive/2017/03/new-white-paper-sql-server-performance-tuning-google-compute-engine/
+[Configuring R on SQL Server 2016]:http://sqlmag.com/sql-server/configuring-r-sql-server-2016
+[Knee-Jerk PerfMon Counters: Page Life Expectancy]:https://sqlperformance.com/2014/10/sql-performance/knee-jerk-page-life-expectancy
+[Change Management Template for SQL Server DBAs and Developers]:https://www.littlekendra.com/2016/04/12/change-management-template-for-sql-server-dbas-and-deveopers/
+[Performance Myths: Clustered vs. Non-Clustered Indexes]:https://sqlperformance.com/2017/03/sql-indexes/performance-myths-clustered-vs-non-clustered
+[Bad habits: Counting rows the hard way]:https://sqlperformance.com/2014/10/t-sql-queries/bad-habits-count-the-hard-way
+[Why Cost Threshold For Parallelism Shouldn’t Be Set To 5]:https://www.brentozar.com/archive/2017/03/why-cost-threshold-for-parallelism-shouldnt-be-set-to-5/
+[Join Performance, Implicit Conversions, and Residuals]:https://www.sql.kiwi/2011/07/join-performance-implicit-conversions-and-residuals.html
+[Implicit Conversions that cause Index Scans]:https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-cause-index-scans/
+[When Is It Appropriate To Store JSON in SQL Server?]:https://bertwagner.com/2017/03/14/when-is-it-appropriate-to-store-json-in-sql-server/
+[The Performance Penalty of Bookmark Lookups in SQL Server]:http://www.sqlpassion.at/archive/2017/03/13/the-performance-penalty-of-bookmark-lookups-in-sql-server/
+[Why You Should Change the Cost Threshold for Parallelism]:http://www.scarydba.com/2017/03/13/change-the-cost-threshold-for-parallelism/
+[Why Update Statistics can cause an IO storm]:https://www.brentozar.com/archive/2014/01/update-statistics-the-secret-io-explosion/
+[SQLskills SQL101 Temporary table misuse]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-temporary-table-misuse/
+[SQL Server sp_execute_external_script Stored Procedure Examples]:https://www.mssqltips.com/sqlservertip/4747/sql-server-spexecuteexternalscript-stored-procedure-examples/
+[Transparent Data Encryption and Replication]:http://port1433.com/2017/03/15/transparent-data-encryption-and-replication-sql-servers-rear-window/
+[SQL Server Installation Checklist]:https://www.sqlskills.com/blogs/jonathan/sql-server-installation-checklist/
+[Indexed Views And Data Modifications]:https://www.brentozar.com/archive/2017/03/indexed-views-data-modifications/
+[Deployment Automation for SQL Server Integration Services (SSIS)]:https://www.simple-talk.com/sql/ssis/deployment-automation-for-sql-server-integration-services-ssis/
+[Why Developers Should Consider Microsoft SQL Server]:https://www.brentozar.com/archive/2017/03/developers-consider-microsoft-sql-server/
+[SQLskills SQL101: Indexes on Foreign Keys]:https://www.sqlskills.com/blogs/kimberly/sqlskills-sql101-indexes-foreign-keys/
+[SQLskills SQL101: Updating SQL Server Statistics Part I – Automatic Updates]:https://www.sqlskills.com/blogs/erin/sqlskills-sql101-updating-sql-server-statistics-part-i-automatic-updates/
+[Processing Loops in SQL Server]:https://www.codeproject.com/Articles/1177788/Processing-Loops-in-SQL-Server
+[The Mysterious Case of the Missing Default Value]:http://www.sqlservercentral.com/articles/SQL+Server+internal+storage/132990/
+[Plan Caching]:https://www.sqlpassion.at/archive/2017/03/20/plan-caching/
+[sp_executesql Is Not Faster Than an Ad Hoc Query]:http://www.sqlservercentral.com/blogs/scarydba/2016/11/07/sp_executesql-is-not-faster-than-an-ad-hoc-query/
+[Backing up SQL Server on Linux using Ola Hallengrens Maintenance Solution]:https://sqldbawithabeard.com/2017/03/22/backing-up-sql-server-on-linux-using-ola-hallengrens-maintenance-solution/
+[Delayed Durability in SQL Server 2014 Paul Randal]:http://www.sqlskills.com/blogs/paul/delayed-durability-sql-server-2014/
+[Why Is This Query Sometimes Fast and Sometimes Slow]:https://www.brentozar.com/archive/2016/11/query-sometimes-fast-sometimes-slow/
+[Using Plan Guides to Remove OPTIMIZE FOR UNKNOWN Hints]:https://www.brentozar.com/archive/2016/11/using-plan-guides-remove-optimize-unknown-hints/
+[ETL Best Practices]:https://www.timmitchell.net/etl-best-practices/
+[Resolving Key Lookup Deadlocks with Plan Explorer]:https://www.sentryone.com/blog/greggonzalez/key-lookup-deadlocks-plan-explorer/
+[Why ROWLOCK Hints Can Make Queries Slower and Blocking Worse in SQL Server]:https://www.littlekendra.com/2016/02/04/why-rowlock-hints-can-make-queries-slower-and-blocking-worse-in-sql-server/
+[Does a Clustered Index really physically store the rows in key order]:http://www.sqlservercentral.com/blogs/discussionofsqlserver/2012/10/21/does-a-clustered-index-really-physically-store-the-rows-in-key-order/
+[Ugly Pragmatism For The Win]:http://michaeljswart.com/2016/02/ugly-pragmatism-for-the-win/
+[Architecting Microsoft SQL Server on VMware vSphere]:http://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/solutions/sql-server-on-vmware-best-practices-guide.pdf
+[Hiding tables in SSMS Object Explorer]:https://sqlstudies.com/2017/04/03/hiding-tables-in-ssms-object-explorer-using-extended-properties/
+[Clustered columnstore: on-disk vs. in-mem]:http://nedotter.com/archive/2017/03/clustered-columnstore-on-disk-vs-in-mem/
+[Generating Plots Automatically From PowerShell and SQL Server Using Gnuplot]:https://www.simple-talk.com/sql/database-delivery/generating-plots-automatically-powershell-sql-server-using-gnuplot/
+[How to Benchmark Alternative SQL Queries to Find the Fastest Query]:https://blog.jooq.org/2017/03/29/how-to-benchmark-alternative-sql-queries-to-find-the-fastest-query/
+[Checking for Strange Client Settings with sys.dm_exec_sessions]:https://www.brentozar.com/archive/2017/03/checking-strange-client-settings-sys-dm_exec_sessions/
+[Decrypting Insert Query Plans]:https://www.brentozar.com/archive/2017/03/decrypting-insert-query-plans/
+[SQLskills SQL101: Partitioning]:https://www.sqlskills.com/blogs/kimberly/sqlskills-sql101-partitioning/
+[SQLskills SQL101: Switching recovery models]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-switching-recovery-models/
+[Using AT TIME ZONE to fix an old report]:https://sqlperformance.com/2017/02/t-sql-queries/using-at-time-zone-to-fix-an-old-report
+[What the heck is a DTU]:https://sqlperformance.com/2017/03/azure/what-the-heck-is-a-dtu
+[Hack-Attaching a SQL Server database with NORECOVERY]:http://sqlblog.com/blogs/argenis_fernandez/archive/2017/01/24/hack-attaching-a-sql-server-database-with-norecovery.aspx
+[Switch in Staging Tables Instead of sp_rename]:https://www.littlekendra.com/2017/01/19/why-you-should-switch-in-staging-tables-instead-of-renaming/
+[Performance Myths: Table variables are always in-memory]:https://sqlperformance.com/2017/04/performance-myths/table-variables-in-memory
+[Questions About SQL Server Collations You Were Too Shy to Ask]:https://www.simple-talk.com/sql/sql-development/questions-sql-server-collations-shy-ask/
+[NULL - The database's black hole]:https://sqlserverfast.com/blog/hugo/2007/07/null-the-databases-black-hole/
+[Inside the Storage Engine: Using DBCC PAGE and DBCC IND to find out if page splits ever roll back]:http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-using-dbcc-page-and-dbcc-ind-to-find-out-if-page-splits-ever-roll-back/
+[Inside the Storage Engine: Anatomy of a page]:http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-page/
+[For The Better Developer: SQL Server Indexes]:https://medium.com/sql-server-for-the-better-developer/know-your-data-base-affd6241bcac
+[#EntryLevel: Compression & Data Types]:https://www.sentryone.com/blog/melissaconnors/entry-level-compression/
+[Cardinality Estimation for a Predicate on a COUNT Expression]:https://sqlperformance.com/2017/04/sql-optimizer/cardinality-count
+[Changing SQL Server Collation After Installation]:https://www.mssqltips.com/sqlservertip/3519/changing-sql-server-collation-after-installation/
+[Does a TempDB spill mean statistics are out of date?]:https://www.brentozar.com/archive/2017/04/tempdb-spill-mean-statistics-date/
+[Transaction log growth during BACKUP]:https://www.am2.co/2017/04/transaction-log-growth-backup/
+[When is a SQL function not a function?]:http://blogs.lobsterpot.com.au/2011/11/08/when-is-a-sql-function-not-a-function/
+[Introducing Batch Mode Adaptive Joins]:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2017/04/19/introducing-batch-mode-adaptive-joins/
+[Investigating the proportional fill algorithm]:https://www.sqlskills.com/blogs/paul/investigating-the-proportional-fill-algorithm/
+[Understanding Logging and Recovery in SQL Server]:https://technet.microsoft.com/en-us/library/2009.02.logging.aspx
+[Bad Habits to Kick: Using shorthand with date/time operations]:https://sqlblog.org/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations
+[Generating Charts and Drawings in SQL Server Management Studio]:http://sqlmag.com/t-sql/generating-charts-and-drawings-sql-server-management-studio
+[How expensive are column-side Implicit Conversions?]:https://sqlperformance.com/2013/04/t-sql-queries/implicit-conversion-costs
+[Execution Plan Basics]:https://www.simple-talk.com/sql/performance/execution-plan-basics/
+[Disabling ROW and PAGE Level Locks in SQL Server]:http://www.sqlpassion.at/archive/2016/10/31/disabling-row-and-page-level-locks-in-sql-server/
+[Fixing Cardinality Estimation Errors with Filtered Statistics]:https://www.sqlpassion.at/archive/2013/10/29/fixing-cardinality-estimation-errors-with-filtered-statistics/
+[Cardinality Estimation for Multiple Predicates]:https://sqlperformance.com/2014/01/sql-plan/cardinality-estimation-for-multiple-predicates
+[Weaning yourself off of SQL Profiler (Part 1)]:http://blog.waynesheffield.com/wayne/archive/2017/04/weaning-yourself-off-sql-profiler/
+[Properly Persisted Computed Columns]:https://sqlperformance.com/2017/05/sql-plan/properly-persisted-computed-columns
+[A SQL Server DBA myth a day: (17/30) page checksums]:https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-1730-page-checksums/
+[What are different ways to replace ISNULL() in a WHERE clause that uses only literal values?]:https://dba.stackexchange.com/questions/168276/what-are-different-ways-to-replace-isnull-in-a-where-clause-that-uses-only-lit
+[SQL Server 2016 enhancements – Truncate Table and Table Partitioning]:https://www.sqlshack.com/sql-server-2016-enhancements-truncate-table-table-partitioning
+[SQL Server Mysteries: The Case of the Not 100% RESTORE…]:https://blogs.msdn.microsoft.com/sql_server_team/sql-server-mysteries-the-case-of-the-not-100-restore/
+[Transactional Replication and Stored Procedure Execution: Silver Bullet or Poison Pill?]:http://port1433.com/2017/04/11/transactional-replication-and-stored-procedure-execution-silver-bullet-or-poison-pill/
+[STOPAT And Date Formats]:https://itsalljustelectrons.blogspot.ru/2017/07/STOPAT-And-Date-Formats.html
+[Row-count Estimates when there are no Statistics]:http://www.sqlservercentral.com/blogs/matthew-mcgiffen-dba/2017/06/28/row-count-estimates-when-there-are-no-statistics/
+[SQL Server DBA On-Boarding Checklist]:https://www.mssqltips.com/sqlservertip/4871/sql-server-dba-onboarding-checklist/
+[Be Wary of Date Formatting in T-SQL]:https://bornsql.ca/2017/07/wary-date-formatting-t-sql/
+[Statistics and Cardinality Estimation]:http://www.sqlservercentral.com/blogs/matthew-mcgiffen-dba/2017/06/20/statistics-and-cardinality-estimation/
+[Message queues for the DBA: sending data out into the world]:http://port1433.com/2017/07/21/messaging-queuing-for-the-dba-sending-data-out-into-the-world/
+[Schema-Based Access Control for SQL Server Databases]:https://www.red-gate.com/simple-talk/sql/sql-training/schema-based-access-control-for-sql-server-databases/
+[SQL Server: large RAM and DB Checkpointing]:https://blogs.msdn.microsoft.com/psssql/2017/06/29/sql-server-large-ram-and-db-checkpointing/
+[Handling SQL Server Deadlocks With Event Notifications]:https://itsalljustelectrons.blogspot.ru/2017/06/Handling-SQL-Server-Deadlocks-With-Event-Notifications.html
+[SQL Server R Services: Digging into the R Language]:https://www.red-gate.com/simple-talk/sql/bi/sql-server-r-services-digging-r-language/
+[Investigating the Cause of SQL Server High CPU Load Conditions When They Happen]:https://www.red-gate.com/simple-talk/sql/database-administration/investigating-cause-sql-server-high-cpu-load-conditions-happen/
+[In-Memory Engine DURABILITY = SCHEMA_ONLY And Transaction Rollback]:https://chrisadkin.io/2017/07/17/in-memory-engine-durability-schema_only-and-transaction-rollback/
+[Builder Day: Doing a Point-in-Time Restore in Azure SQL DB]:https://www.brentozar.com/archive/2017/06/builder-day-point-time-restore-azure-sql-db/
+[Creating Continuous Integration Build Pipelines With Jenkins, Docker and SQL Server]:https://chrisadkin.io/2017/07/18/creating-continuous-integration-build-pipelines-with-jenkins-docker-and-sql-server/
+[Scale-able Windows Aggregate Functions With Row Store Object]:https://chrisadkin.io/2017/07/24/scale-able-windows-aggregate-functions-with-row-store-objects/
+[Azure DWH part 11: Data Warehouse Migration Utility]:http://www.sqlservercentral.com/articles/Azure+SQL+Data+Warehouse+(ASDW)/158311/
+[Representing a simple hierarchical list in SQL Server with JSON, YAML, XML and HTML]:https://www.red-gate.com/simple-talk/blogs/71858/
+[Advanced Analytics with R and SQL Part II - Data Science Scenarios]:http://www.sqlservercentral.com/articles/Data+Science/158498/
+[Think twice before using table variables]:http://www.sqlservercentral.com/blogs/matthew-mcgiffen-dba/2017/07/11/think-twice-before-using-table-variables/
+[ColumnStore Indexes And Recursive CTEs]:https://www.brentozar.com/archive/2017/07/columnstore-indexes-recursive-ctes/
+[CCIs and String Aggregation]:https://orderbyselectnull.com/2017/07/03/ccis-and-string-aggregation/
+[Brad’s Sure DBA Checklist]:https://www.red-gate.com/simple-talk/sql/database-administration/brads-sure-dba-checklist/
+[Query Store and Parameterization Problems]:https://www.red-gate.com/simple-talk/sql/database-administration/query-store-parameterization-problems/
+[SQL Server Event Handling: Event Notifications]:https://itsalljustelectrons.blogspot.ru/2016/11/SQL-Server-Event-Handling-Event-Notifications.html
+[Identifying Deprecated Feature Usage (Part 1)]:https://itsalljustelectrons.blogspot.ru/2017/07/Identifying-Deprecated-Feature-Usage-pt1.html
+[Let’s Corrupt a Database Together, Part 3: Detecting Corruption]:https://www.brentozar.com/archive/2017/07/lets-corrupt-database-together-part-3-detecting-corruption/
+[XML vs JSON Shootout: Which is Superior in SQL Server 2016?]:https://bertwagner.com/2017/05/16/xml-vs-json-shootout-which-is-superior-in-sql-server-2016/
+[One SQL Cheat Code For Amazingly Fast JSON Queries]:https://bertwagner.com/2017/05/09/one-sql-cheat-code-for-amazingly-fast-json-queries/
+[The Ultimate SQL Server JSON Cheat Sheet]:https://bertwagner.com/2017/03/07/the-ultimate-sql-server-json-cheat-sheet/
+[Are your indexes being thwarted by mismatched datatypes?]:https://bertwagner.com/2017/08/01/are-your-indexes-being-thwarted-by-mismatched-datatypes/
+[Why Missing Index Recommendations Aren’t Perfect]:https://www.brentozar.com/archive/2017/08/missing-index-recommendations-arent-perfect/
+[The Case of the Space at the End]:http://www.sqlservercentral.com/articles/ANSI_PADDING/157467/
+[SELECT…INTO in SQL Server 2017]:https://dbafromthecold.com/2017/08/02/select-into-in-sql-server-2017/
+[Your Service Level Agreement is a Disaster]:http://minionware.net/service-level-agreement-disaster/
+[SQLskills SQL101: REBUILD vs. REORGANIZE]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-rebuild-vs-reorganize/
+[Where do the Books Online index fragmentation thresholds come from?]:https://www.sqlskills.com/blogs/paul/where-do-the-books-online-index-fragmentation-thresholds-come-from/
+[The SQL Hall of Shame]:http://dataeducation.com/the-sql-hall-of-shame/
+[A Better Way To Select Star]:https://www.brentozar.com/archive/2017/07/better-way-select-star/
+[UDP vs TCP]:https://sqlstudies.com/2017/06/07/udp-vs-tcp/
+[Lipoaspiration in your SQL Server Database]:https://www.red-gate.com/simple-talk/sql/performance/lipoaspiration-in-your-sql-server-database/
+[13 Things You Should Know About Statistics and the Query Optimizer]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/13-things-you-should-know-about-statistics-and-the-query-optimizer/
+[Creating R Stored Procedures in SQL Server 2016 Using sqlrutils]:http://www.nielsberglund.com/2017/06/25/creating-r-stored-procedures-in-sql-server-2016-using-sqlrutils/
+[A Quick start Guide to Managing SQL Server 2017 on CentOS/RHEL Using the SSH Protocol]:https://www.sqlshack.com/quick-start-guide-managing-sql-server-2017-centosrhel-using-ssh-protocol/
+[SQL Server v.Next : STRING_AGG Performance, Part 2]:https://sqlperformance.com/2017/01/sql-performance/sql-server-v-next-string_agg-performance-part-2
+[Why Parameter Sniffing Isn’t Always A Bad Thing (But Usually Is)]:https://bertwagner.com/2017/08/08/why-parameter-sniffing-isnt-always-a-bad-thing-but-usually-is/
+[Persisting statistics sampling rate]:https://blogs.msdn.microsoft.com/sql_server_team/persisting-statistics-sampling-rate/
+[All about locking in SQL Server]:https://www.sqlshack.com/locking-sql-server/
+[All about Latches in SQL Server]:https://www.sqlshack.com/all-about-latches-in-sql-server/
+[All about SQL Server spinlocks]:https://www.sqlshack.com/sql-server-spinlocks/
+[How to monitor object space growth in SQL Server]:https://www.sqlshack.com/monitor-object-space-growth-sql-server/
+[How to Read a Transaction Log Backup]:http://www.databasejournal.com/features/mssql/how-to-read-a-transaction-log-backup.html
+[How to Find Out Which Database Object Got Deleted]:http://www.databasejournal.com/tips/how-to-find-out-which-database-object-got-deleted.html
+[In-Memory OLTP Enhancements in SQL Server 2016]:https://www.sqlshack.com/memory-oltp-enhancements-sql-server-2016/
+[Sync SQL Logins and Jobs]:https://blogs.msdn.microsoft.com/sql_pfe_blog/2017/08/21/sync-sql-logins-and-jobs/
+[The Trillion Row Table]:https://orderbyselectnull.com/2017/08/16/the-trillion-row-table/
+[Dynamic Data Unmasking]:https://orderbyselectnull.com/2017/08/25/dynamic-data-unmasking/
+[Why is My Database Application so Slow?]:https://www.red-gate.com/simple-talk/dotnet/net-performance/database-application-slow/
+[Generating Concurrent Activity]:http://michaeljswart.com/2014/01/generating-concurrent-activity/
+[Microsoft SQL Server R Services - Internals X]:http://www.nielsberglund.com/2017/08/29/microsoft-sql-server-r-services-internals-x/
+[Hands on Full-Text Search in SQL Server]:https://www.sqlshack.com/hands-full-text-search-sql-server/
+[SQL Code Smells]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/sql-code-smells/
+[Corruption demo databases and scripts]:https://www.sqlskills.com/blogs/paul/corruption-demo-databases-and-scripts/
+[Understanding Cross-Database Transactions in SQL Server]:https://www.red-gate.com/simple-talk/sql/database-administration/understanding-cross-database-transactions-in-sql-server/
+[Optional Parameters and Missing Index Requests]:https://www.brentozar.com/archive/2017/09/optional-parameters-missing-index-requests/
+[Uniquifier is a rather unique word isn’t it?]:https://sqlstudies.com/2017/09/18/uniquifier-is-a-rather-unique-word-isnt-it/
+[Importance of proper transaction log size management]:https://www.sqlskills.com/blogs/paul/importance-of-proper-transaction-log-size-management/
+[#TSQL2sDay – Starting Out with PowerShell]:https://sqldbawithabeard.com/2017/09/12/tsql2sday-starting-out-with-powershell/
+[Using native compilation to insert parent/child tables]:http://nedotter.com/archive/2017/09/using-native-compilation-to-insert-parentchild-tables/
+[Questions About RDS SQL Server You Were Too Shy to Ask]:https://www.red-gate.com/simple-talk/cloud/cloud-data/questions-rds-sql-server-shy-ask/
+[Active Directory Authentication with SQL Server on Ubuntu]:http://port1433.com/2017/09/19/active-directory-authentication-with-sql-server-on-ubuntu/
+[Temporary Tables in Stored Procedures]:https://www.sql.kiwi/2012/08/temporary-tables-in-stored-procedures.html
+[SQLCLR in Practice: Creating a Better Way of Sending Email from SQL Server]:https://www.red-gate.com/simple-talk/sql/sql-development/sqlclr-practice-creating-better-way-sending-email-sql-server/
+[T-SQL commands performance comparison – NOT IN vs NOT EXISTS vs LEFT JOIN vs EXCEPT]:https://www.sqlshack.com/t-sql-commands-performance-comparison-not-vs-not-exists-vs-left-join-vs-except/
+[Clustered vs Nonclustered: Index Fundamentals You Need To Know]:https://bertwagner.com/2017/09/26/clustered-vs-nonclustered-index-fundamentals-you-need-to-know/
+[How to Write Efficient TOP N Queries in SQL]:https://blog.jooq.org/2017/09/22/how-to-write-efficient-top-n-queries-in-sql/
+[Checklist: DR Plan Sanity Check]:http://sqlsoldier.net/wp/sqlserver/checklistdrplansanitycheck
+[Table level recovery for selected SQL Server tables]:https://www.mssqltips.com/sqlservertip/2814/table-level-recovery-for-selected-sql-server-tables/
+[SQL Mirroring, Preserving the Log Chain During Database Migrations]:https://sqlundercover.com/2017/01/21/sql-mirroring-preserving-the-log-chain-during-database-migrations/
+[How NOLOCK Will Block Your Queries]:https://bertwagner.com/2017/10/10/how-nolock-will-block-your-queries/
+[8 Ways to Export SQL Results To a Text File]:http://www.sqlservercentral.com/articles/Export/147145/
+[SQL Server Installation Failed Due to Pending Restart of Server?]:https://thelonedba.wordpress.com/2017/09/18/sql-server-installation-failed-due-to-pending-restart-of-server/
+[Six Scary SQL Surprises]:https://www.red-gate.com/simple-talk/sql/database-administration/six-scary-sql-surprises/
+[How the rowversion datatype works when adding and deleting columns]:http://sqlblog.com/blogs/louis_davidson/archive/2017/09/26/how-the-rowversion-datatype-works-when-adding-and-deleting-columns.aspx
+[Quick! What's the difference between RANK, DENSE_RANK, and ROW_NUMBER?]:http://douglaskline.blogspot.ru/2017/10/quick-whats-difference-between-rank.html
+[A Serial Parallel Query]:https://orderbyselectnull.com/2017/09/26/a-serial-parallel-query/
+[Add or Remove IDENTITY Property From an Existing Column Efficiently]:http://www.dbdelta.com/add-or-remove-identity-property-from-an-existing-column-efficiently/
+[How Do I Analyze a SQL Server Execution Plan?]:https://littlekendra.com/2017/09/22/how-do-i-analyze-a-sql-server-execution-plan/
+[A Subtle Difference Between COALESCE and ISNULL]:https://nocolumnname.wordpress.com/2017/10/09/a-subtle-difference-between-coalesce-and-isnull/
+[Puzzle Challenge: Graph Matching with T-SQL Part 1-Concepts]:http://sqlmag.com/software-development/puzzle-challenge-graph-matching-t-sql-part-1-concepts
+[Graph Matching with T-SQL Part 3: Maximum Matching]:http://www.itprotoday.com/microsoft-sql-server/graph-matching-t-sql-part-3-maximum-matching
+[Running PowerShell in a SQL Agent Job]:https://www.sqlhammer.com/running-powershell-in-a-sql-agent-job/
+[Line-Continuation in T-SQL]:https://sqlquantumleap.com/2017/10/27/line-continuation-in-t-sql/
+[SQL Server 2017: Making Backups Great Again!]:https://johnsterrett.com/2017/10/31/sql-server-2017-backups/
+[Say NO to Venn Diagrams When Explaining JOINs]:https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
+[Surprise Delta Stores]:https://orderbyselectnull.com/2017/11/07/delta-stores/
+[SQL 2014 Clustered Columnstore index rebuild and maintenance considerations]:https://blogs.msdn.microsoft.com/sqlcat/2015/07/08/sql-2014-clustered-columnstore-index-rebuild-and-maintenance-considerations/
+[Multiple Output Datasets With R and SQL Server]:https://itsalljustelectrons.blogspot.ru/2017/11/Multiple-Output-Datasets-with-R-and-SQL-Server.html
+[How to Avoid Excessive Sorts in Window Functions]:https://blog.jooq.org/2017/11/06/how-to-avoid-excessive-sorts-in-window-functions/
+[Extracting a DAX Query Plan With Analysis Services 2016 Extended Events]:https://www.mssqltips.com/sqlservertip/5106/extracting-a-dax-query-plan-with-analysis-services-2016-extended-events/
+[What impact can different cursor options have?]:https://sqlperformance.com/2012/09/t-sql-queries/cursor-options
+[SQL Smackdown!!! Cursors VS Loops]:https://sqlundercover.com/2017/11/16/sql-smackdown-cursors-vs-loops/
+[Using the OPTION (RECOMPILE) option for a statement]:https://www.sqlskills.com/blogs/kimberly/using-the-option-recompile-option-for-a-statement/
+[Execution Plan Caching and Reuse]:https://msdn.microsoft.com/en-us/library/ms181055.aspx
+[Buffer Management]:https://msdn.microsoft.com/en-us/library/aa337525.aspx
+[RECOMPILE Hints and Execution Plan Caching]:https://www.brentozar.com/archive/2013/12/recompile-hints-and-execution-plan-caching/
+[Improving query performance with OPTION (RECOMPILE), Constant Folding and avoiding Parameter Sniffing issues]:https://blogs.msdn.microsoft.com/robinlester/2016/08/10/improving-query-performance-with-option-recompile-constant-folding-and-avoiding-parameter-sniffing-issues/
+[Eight Different Ways to Clear the SQL Server Plan Cache]:https://www.sqlskills.com/blogs/glenn/eight-different-ways-to-clear-the-sql-server-plan-cache/
+[Introduction and FAQs about Microsoft Azure technologies]:https://www.sqlshack.com/introduction-faqs-microsoft-azure-technologies/
+[Inside the XEvent Profiler]:https://www.sqlhammer.com/inside-xevent-profiler/
+[Does The Join Order of My Tables Matter?]:https://bertwagner.com/2017/11/21/does-the-join-order-of-my-tables-matter/
+[Encrypting SQL Server connections with Let’s Encrypt certificates]:https://sqlsunday.com/2017/11/22/encrypting-tds-with-letsencrypt/
+[Start SQL Server without tempdb]:https://sqlstudies.com/2016/01/20/start-sql-server-without-tempdb/
+[How to configure database mail in SQL Server]:https://www.sqlshack.com/configure-database-mail-sql-server/
+[Understanding SQL server memory grant]:https://blogs.msdn.microsoft.com/sqlqueryprocessing/2010/02/16/understanding-sql-server-memory-grant/
+[Cleanly Uninstalling Stubborn SQL Server Components]:https://www.mssqltips.com/sqlservertip/4050/cleanly-uninstalling-stubborn-sql-server-components/
+[Hey! What's the deal with SQL Server NOCOUNT and T-SQL WHILE loops?]:http://sql-sasquatch.blogspot.ru/2017/11/hey-whats-deal-with-nocount-and-t-sql.html
+[Query Store Settings]:https://www.sqlskills.com/blogs/erin/query-store-settings/
+[Using Plan Explorer with Entity Framework]:https://www.sentryone.com/blog/jasonhall/using-plan-explorer-entity-framework/
+[Overview of Encryption Tools in SQL Server]:https://matthewmcgiffen.com/2017/12/05/overview-of-encryption-tools-in-sql-server/
+[Clustered Index Uniquifier Existence and Size]:https://sqlquantumleap.com/2017/09/18/clustered-index-uniquifier-existence-and-size/
+[Understanding SQL Server Backups]:https://docs.microsoft.com/en-us/previous-versions/technet-magazine/dd822915(v=msdn.10)
+[Recovering from Disasters Using Backups]:https://technet.microsoft.com/en-us/library/ee677581.aspx
+[Simple SQL: Handling Location Datatypes]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/simple-sql-handling-location-datatypes/
+[Improve SQL Server Performance by Looking at Plan Cache (Part 1)]:https://logicalread.com/sql-server-minimize-single-use-plans-tl01/
+[Improve SQL Server Performance by Looking at Plan Cache (Part 2)]:https://logicalread.com/sql-server-identifying-plans-that-need-tuning-tl01/
+[Improve SQL Server Performance by Looking at Plan Cache (Part 3)]:https://logicalread.com/sql-server-identify-similar-plans-tl01/
+[Take Care When Scripting Batches]:http://michaeljswart.com/2014/09/take-care-when-scripting-batches/
+[When Measuring Timespans, try DATEADD instead of DATEDIFF]:http://michaeljswart.com/2017/12/when-measuring-timespans-try-dateadd-instead-of-datediff/
+[Which user function do I use?]:https://sqlstudies.com/2015/06/24/which-user-function-do-i-use/
+[What’s So Bad About Shrinking Databases with DBCC SHRINKDATABASE?]:https://www.brentozar.com/archive/2017/12/whats-bad-shrinking-databases-dbcc-shrinkdatabase/
+[Which Collation is Used to Convert NVARCHAR to VARCHAR in a WHERE Condition? (Part A of 2: “Duck”)]:https://sqlquantumleap.com/2017/12/08/which-collation-is-used-to-convert-nvarchar-to-varchar-in-a-where-condition-part-a-of-2-duck/
+[Which Collation is Used to Convert NVARCHAR to VARCHAR in a WHERE Condition? (Part B of 2: “Rabbit”)]:https://sqlquantumleap.com/2017/12/11/which-collation-is-used-to-convert-nvarchar-to-varchar-in-a-where-condition-part-b-of-2-rabbit/#comments
+[Current State of the NewSQL/NoSQL Cloud Arena]:https://www.red-gate.com/simple-talk/cloud/cloud-data/current-state-newsqlnosql-cloud-arena/
+[SQL Server 2017: JSON]:http://db-devs.com/blog/archive/sql-server-2017-json/
+[Simulating Bad Networks to Test SQL Server Replication]:https://www.red-gate.com/simple-talk/blogs/simulating-bad-networks-test-sql-server-replication/
+[How to Turn on Instant File Initialization]:https://www.databasejournal.com/tips/how-to-turn-on-instant-file-initialization.html
+[Bad Idea Jeans: Finding Undocumented Trace Flags]:https://rebrand.ly/brent-finding-undocumented-trace-flags
+[A Method to Find Trace Flags]:https://rebrand.ly/joe-finding-undocumented-trace-flags
+[Using Windows stored credentials to connect to SQL in containers]:https://dbafromthecold.com/2018/01/17/using-windows-stored-credentials-to-connect-to-sql-in-containers/
+[Step by Step Guide to Migrate SQL Server Data to SQL Server 2017]:https://www.databasejournal.com/features/mssql/step-by-step-guide-to-migrate-sql-server-data-to-sql-server-2017.html
+[Administrative Logins and Users]:https://sqlstudies.com/2015/11/02/administrative-logins-and-users/
+[Parallelism in Hekaton (In-Memory OLTP)]:http://www.nikoport.com/2018/01/20/parallelism-in-hekaton-in-memory-oltp/
+[Troubleshooting THREADPOOL Waits]:https://www.sqlpassion.at/archive/2011/10/25/troubleshooting-threadpool-waits/
+[Andy’s Excellent SSIS-in-the-Cloud Adventure, Part 1 – Build an ADFv2 IR Instance]:https://andyleonard.blog/2018/01/andys-excellent-ssis-in-the-cloud-adventure-part-1/
+[PRINT vs. RAISERROR]:http://sqlity.net/en/984/print-vs-raiserror/
+[Without ORDER BY, You Can’t Depend On the Order of Results]:http://michaeljswart.com/2013/09/without-order-by-you-cant-depend-on-the-order-of-results/
+[Query Store and “in memory”]:https://www.sqlskills.com/blogs/erin/query-store-and-in-memory/
+[Setting and Identifying Row Goals in Execution Plans]:https://sqlperformance.com/2018/02/sql-plan/setting-and-identifying-row-goals
+[Azure and Windows PowerShell: The Basics]:https://www.red-gate.com/simple-talk/sysadmin/powershell/azure-windows-powershell-basics/
+[Auditing Linked Servers]:https://thomaslarock.com/2018/02/auditing-linked-servers/
+[An alternative to data masking]:https://sqlsunday.com/2018/02/05/an-alternative-to-data-masking/
+[Safely and Easily Use High-Level Permissions Without Granting Them to Anyone: Server-level]:https://sqlquantumleap.com/2018/02/15/safely-and-easily-use-high-level-permissions-without-granting-them-to-anyone-server-level/
+[PLEASE, Please, please Stop Using Impersonation, TRUSTWORTHY, and Cross-DB Ownership Chaining]:https://sqlquantumleap.com/2017/12/30/please-please-please-stop-using-impersonation-execute-as/
+[Indexing and Partitioning]:https://dbafromthecold.com/2018/02/21/indexing-and-partitioning/
+[Schema Compare for SQL Server]:https://thomaslarock.com/2018/02/schema-compare-for-sql-server/
+[How to change SQL Server ERRORLOG location]:https://red9.com/sql-server-error-log-location/
+[What’s in a Name?: Inside the Wacky World of T-SQL Identifiers]:https://sqlquantumleap.com/2018/04/09/whats-in-a-name-inside-the-wacky-world-of-t-sql-identifiers/
+[The Uni-Code: The Search for the True List of Valid Characters for T-SQL Regular Identifiers, Part 1]:https://sqlquantumleap.com/2018/04/02/the-uni-code-the-search-for-the-true-list-of-valid-characters-for-t-sql-regular-identifiers-part-1/
+[The Uni-Code: The Search for the True List of Valid Characters for T-SQL Regular Identifiers, Part 2]:https://sqlquantumleap.com/2018/04/04/the-uni-code-the-search-for-the-true-list-of-valid-characters-for-t-sql-regular-identifiers-part-2/
+[Programming SQL Server with SQL Server Management Objects Framework]:https://www.red-gate.com/simple-talk/dotnet/c-programming/programming-sql-server-sql-server-management-objects-framework/
+[Interval Queries in SQL Server]:http://www.itprotoday.com/software-development/interval-queries-sql-server
+[Dealing with date and time instead of datetime]:https://sqlperformance.com/2018/03/sql-optimizer/dealing-with-date-and-time
+[Insight into the SQL Server buffer cache]:https://www.sqlshack.com/insight-into-the-sql-server-buffer-cache/
+[A concrete example of migration between an Oracle Database and SQL Server using Microsoft Data Migration Assistant]:https://www.sqlshack.com/a-concrete-example-of-migration-between-an-oracle-database-and-sql-server-using-microsoft-data-migration-assistant/
+[Audit SQL Server stop, start, restart]:https://blogs.msdn.microsoft.com/skeeler/2018/03/audit-sql-server-stop-start-restart/
+[Query tuning: Apply yourself]:https://sqltechblog.com/2018/04/06/query-tuning-apply-yourself/
+[How to identify and monitor unused indexes in SQL Server]:https://www.sqlshack.com/how-to-identify-and-monitor-unused-indexes-in-sql-server/
+[Benchmarking: 1-TB table population (part 1: the baseline)]:https://www.sqlskills.com/blogs/paul/benchmarking-1-tb-table-population-part-1-the-baseline/
+[Benchmarking: 1-TB table population (part 2: optimizing log block IO size and how log IO works)]:https://www.sqlskills.com/blogs/paul/benchmarking-1-tb-table-population-part-2-optimizing-log-block-io-size-and-how-log-io-works/
+[An overview of SQL Server database migration tools provided by Microsoft]:https://www.sqlshack.com/an-overview-of-sql-server-database-migration-tools-provided-by-microsoft/
+[Calling Http endpoints in T-SQL using CURL extension]:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/04/17/calling-http-endpoints-in-t-sql-using-curl-extension/
+[Why Table Join Orders In Relational Databases]:https://hackernoon.com/why-table-join-orders-in-relational-databases-dont-matter-6de3a35f2959
+[Finding overlapping ranges of data]:https://www.red-gate.com/simple-talk/blogs/finding-overlapping-ranges-data/
+[Avoid use of the MONEY and SMALLMONEY datatypes]:https://www.red-gate.com/hub/product-learning/sql-prompt/avoid-use-money-smallmoney-datatypes
+[Provisioning SQL Server Instances with Docker]:https://www.red-gate.com/simple-talk/sysadmin/containerization/provisioning-sql-server-instances-docker/
+[Understanding the graphical representation of the SQL Server Deadlock Graph]:https://www.sqlshack.com/understanding-graphical-representation-sql-server-deadlock-graph/
+[Digitally Signing a Stored Procedure To Allow It To Run With Elevated Permissions]:https://sqlundercover.com/2018/05/02/digitally-signing-a-stored-procedure-to-allow-it-to-run-with-elevated-permissions/
+[NOLOCK and Top Optimization]:https://www.sqlshack.com/nolock-and-top-optimization/
+[Operator Precedence versus the Confusing Constraint Translation]:https://www.red-gate.com/simple-talk/blogs/operator-precedence-versus-confusing-constraint-translation/
+[Query Trace Column Values]:https://www.sqlshack.com/query-trace-column-values/
+[Concurrency Week: How to Delete Just Some Rows from a Really Big Table]:https://www.brentozar.com/archive/2018/04/how-to-delete-just-some-rows-from-a-really-big-table/
+[Break large delete operations into chunks]:https://sqlperformance.com/2013/03/io-subsystem/chunk-deletes
+[How to perform a page level restore in SQL Server - Jayaram]:https://www.sqlshack.com/how-to-perform-a-page-level-restore-in-sql-server/
+[Grouping dates without blocking operators]:https://sqlsunday.com/2018/05/14/grouping-dates-without-blocking-operators/
+[What’s CHECKDB doing in my database restore?]:http://www.mikefal.net/2018/04/10/whats-checkdb-doing-in-my-database-restore/
+[How To Hide An Instance Of SQL Server]:https://thomaslarock.com/2018/04/how-to-hide-an-instance-of-sql-server/
+[Troubleshooting Parameter Sniffing Issues the Right Way: Part 1]:https://www.brentozar.com/archive/2018/03/troubleshooting-parameter-sniffing-issues-the-right-way-part-1/
+[Troubleshooting Parameter Sniffing Issues the Right Way: Part 2]:https://www.brentozar.com/archive/2018/03/troubleshooting-parameter-sniffing-issues-right-way-part-2/
+[Troubleshooting Parameter Sniffing Issues the Right Way: Part 3]:https://www.brentozar.com/archive/2018/03/troubleshooting-parameter-sniffing-issues-the-right-way-part-3/
+[When to use the SELECT…INTO statement]:https://www.red-gate.com/hub/product-learning/sql-prompt/use-selectinto-statement
+[Temp Tables In SSIS]:https://www.timmitchell.net/post/2018/05/29/temp-tables-in-ssis/
+[Changing the Collation of the Instance, the Databases, and All Columns in All User Databases]:https://sqlquantumleap.com/2018/06/11/changing-the-collation-of-the-instance-and-all-columns-across-all-user-databases-what-could-possibly-go-wrong/
+[10 Cool SQL Optimisations That do not Depend on the Cost Model]:https://blog.jooq.org/2017/09/28/10-cool-sql-optimisations-that-do-not-depend-on-the-cost-model/
+[Scheduling powershell tasks with sql agent]:https://dbatools.io/agent/
+[Three ways to track logins using dbatools]:https://dbatools.io/track-logins/
+[Impact of Fragmentation on Execution Plans]:https://sqlperformance.com/2017/12/sql-indexes/impact-fragmentation-plans
+[How to “debug” a Linked Server from SQL Server to an Oracle Database instance]:https://www.sqlshack.com/how-to-debug-a-linked-server-from-sql-server-to-an-oracle-database-instance/
+[How to implement error handling in SQL Server]:https://www.sqlshack.com/how-to-implement-error-handling-in-sql-server/
+[SQL Server Closure Tables]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/sql-server-closure-tables/
+[Deadlock victim choice in SQL Server - an exception?]:http://joshthecoder.com/2018/05/10/deadlock-victim-choice-an-exception.html
+[Azure and Windows PowerShell: Getting Information]:https://www.red-gate.com/simple-talk/sysadmin/powershell/azure-and-windows-powershell-getting-information/
+[Be our guest, be our guest, put our database to the test]:https://sqlstudies.com/2018/06/25/be-our-guest-be-our-guest-put-our-database-to-the-test/
+[Finding code smells using SQL Prompt: the SET NOCOUNT problem (PE008 and PE009)]:https://www.red-gate.com/hub/product-learning/sql-prompt/finding-code-smells-using-sql-prompt-set-nocount-problem-pe008-pe009
+[DATABASES 101 guide for the non-technical professional]:https://thomaslarock.com/2018/07/databases-101/
+[Understanding your Azure EA Billing Data and Building a Centralized Data Storage Solution]:https://www.red-gate.com/simple-talk/cloud/cloud-data/understanding-your-azure-ea-billing-data-and-building-a-centralized-data-storage-solution/
+[READ COMMITTED SNAPSHOT ISOLATION and High version_ghost_record_count]:https://www.red-gate.com/simple-talk/sql/performance/read-committed-snapshot-isolation-high-version_ghost_record_count/
+[In-Memory OLTP Indexes – Part 1: Recommendations.]:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2017/11/02/in-memory-oltp-indexes-part-1-recommendations/
+[In-Memory OLTP Indexes – Part 2: Performance Troubleshooting Guide.]:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2017/11/14/in-memory-oltp-indexes-part-2-performance-troubleshooting-guide/
+[Optimization Thresholds – Grouping and Aggregating Data, Part 1]:https://sqlperformance.com/2018/04/sql-plan/grouping-and-aggregating-part-1
+[Optimization Thresholds – Grouping and Aggregating Data, Part 2]:https://sqlperformance.com/2018/05/sql-plan/grouping-and-aggregating-part-2
+[Optimization Thresholds – Grouping and Aggregating Data, Part 3]:https://sqlperformance.com/2018/06/sql-plan/grouping-and-aggregating-part-3
+[Optimization Thresholds – Grouping and Aggregating Data, Part 4]:https://sqlperformance.com/2018/07/sql-performance/grouping-and-aggregating-part-4
+[Optimization Thresholds – Grouping and Aggregating Data, Part 5]:https://sqlperformance.com/2018/08/sql-performance/grouping-and-aggregating-part-5
+[When DBCC OpenTran doesn’t list all open transactions]:https://blogs.msdn.microsoft.com/mosharaf/2013/02/17/when-dbcc-opentran-doesnt-list-all-open-transactions/
+[How I spot not-yet-documented features in SQL Server CTPs]:https://www.sentryone.com/blog/aaronbertrand/fishing-for-features-in-ctps/
+[More ways to discover changes in new versions of SQL Server]:https://www.sentryone.com/blog/aaronbertrand/more-changes-sql-server/
+[Tail-Log Backup and Restore in SQL Server]:https://www.sqlshack.com/tail-log-backup-and-restore-in-sql-server/
+[Database Filegroup(s) and Piecemeal restores in SQL Server]:https://www.sqlshack.com/database-filegroups-and-piecemeal-restores-in-sql-server/
+[Updating Statistics with Ola Hallengren’s Script]:https://www.sqlskills.com/blogs/erin/updating-statistics-with-ola-hallengrens-script/
+[Interview questions on SQL Server database backups, restores and recovery – Part I]:https://www.sqlshack.com/interview-questions-on-sql-server-database-backups-restores-and-recovery-part-i/
+[Interview questions on SQL Server database backups, restores and recovery – Part II]:https://www.sqlshack.com/interview-questions-on-sql-server-database-backups-restores-and-recovery-part-ii/
+[Interview questions on SQL Server database backups, restores and recovery – Part III]:https://www.sqlshack.com/interview-questions-on-sql-server-database-backups-restores-and-recovery-part-iii/
+[Can Rowstore Compression Beat Columnstore Compression?]:https://orderbyselectnull.com/2018/06/28/can-rowstore-compression-beat-columnstore-compression/
+[Inside the Storage Engine: Anatomy of a record]:https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-record/
+[Inside the Storage Engine: Anatomy of an extent]:https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-an-extent/
+[Inside the Storage Engine: IAM pages, IAM chains, and allocation units]:https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-iam-pages-iam-chains-and-allocation-units/
+[Inside The Storage Engine: GAM, SGAM, PFS and other allocation maps]:https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-gam-sgam-pfs-and-other-allocation-maps/
+[Disaster recovery 101: fixing a broken boot page]:https://www.sqlskills.com/blogs/paul/disaster-recovery-101-fixing-a-broken-boot-page/
+[How to download a sqlservr.pdb symbol file]:https://www.sqlskills.com/blogs/paul/how-to-download-a-sqlservr-pdb-symbol-file/
+[A cause of high-duration ASYNC_IO_COMPLETION waits]:https://www.sqlskills.com/blogs/paul/cause-high-duration-async_io_completion-waits/
+[How to solve the Identity Crisis in SQL Server]:https://www.sqlshack.com/solve-identity-crisis-sql-server/
+[Azure SQL Database Performance and Service Tiers Explained]:https://sqlperformance.com/2018/08/sql-performance/azure-sql-database-tiers
+[What To Do When Wait Stats Don’t Help]:https://orderbyselectnull.com/2018/07/20/what-to-do-when-wait-stats-dont-help/
+[SQL Server Brute Force Attack Detection: Part 1]:https://www.codeproject.com/Articles/1231882/SQL-Server-Brute-Force-Attack-Detection
+[SQL Server Brute Force Attack Detection: Part 2]:https://www.codeproject.com/Articles/1236461/SQL-Server-Brute-Force-Attack-Detection-Part-2
+[SQL Server Brute Force Attack Detection: Part 3]:https://www.codeproject.com/Articles/1232491/SQL-Server-Brute-Force-Attack-Detection-Part-2
+[SQLCLR vs SQL Server 2017, Part 8: Is SQLCLR Deprecated in Favor of Python or R (sp_execute_external_script)?]:https://sqlquantumleap.com/2018/08/09/sqlclr-vs-sql-server-2017-part-8-is-sqlclr-deprecated-in-favor-of-python-or-r-sp_execute_external_script/
+[Sql Server Agent For Azure Sql Database, Azure Elastic Database Pools & Azure Managed Instance]:https://swyssql.wordpress.com/2018/07/20/sql-server-agent-for-azure-sql-database-azure-elastic-database-pools-azure-managed-instance/
+[Storage performance best practices and considerations for Azure SQL DB Managed Instance (General Purpose)]:https://blogs.msdn.microsoft.com/sqlcat/2018/07/20/storage-performance-best-practices-and-considerations-for-azure-sql-db-managed-instance-general-purpose/
+[T-SQL Tuesday #017: APPLY: It Slices! It Dices! It Does It All!]:http://bradsruminations.blogspot.com/2011/04/t-sql-tuesday-017-it-slices-it-dices-it.html
+[SQL Server Encryption, What’s The Key Hierarchy All About?]:https://sqlundercover.com/2018/08/09/sql-server-encryption-whats-the-key-hierarchy-all-about/
+[Overview of the SQLCMD utility in SQL Server]:https://www.sqlshack.com/overview-of-the-sqlcmd-utility-in-sql-server/
+[The BCP (Bulk Copy Program) command in action]:https://www.sqlshack.com/bcp-bulk-copy-program-command-in-action/
+[Measuring Query Execution Time]:https://www.scarydba.com/2018/08/13/measuring-query-execution-time/
+[How to Check Performance on a New SQL Server]:https://www.brentozar.com/archive/2018/08/how-to-check-performance-on-a-new-sql-server/
+[Questions About Kerberos and SQL Server That You Were Too Shy to Ask]:https://www.red-gate.com/simple-talk/sql/database-administration/questions-about-kerberos-and-sql-server-that-you-were-too-shy-to-ask/
+[SQL Server Execution Plans overview]:https://www.sqlshack.com/sql-server-execution-plans-overview/
+[SQL Server Execution Plans types]:https://www.sqlshack.com/sql-server-execution-plans-types/
+[How to Analyze SQL Execution Plan Graphical Components]:https://www.sqlshack.com/how-to-analyze-sql-execution-plan-graphical-components/
+[Query optimization techniques in SQL Server: the basics]:https://www.sqlshack.com/query-optimization-techniques-in-sql-server-the-basics/
+[Query optimization techniques in SQL Server: tips and tricks]:https://www.sqlshack.com/query-optimization-techniques-in-sql-server-tips-and-tricks/
+[Query optimization techniques in SQL Server: Database Design and Architecture]:https://www.sqlshack.com/query-optimization-techniques-in-sql-server-database-design-and-architecture/
+[SQL Query Optimization Techniques in SQL Server: Parameter Sniffing]:https://www.sqlshack.com/query-optimization-techniques-in-sql-server-parameter-sniffing/
+[Similarities and Differences among RANK, DENSE_RANK and ROW_NUMBER Functions]:https://codingsight.com/similarities-and-differences-among-rank-dense_rank-and-row_number-functions/
+[Temporal Tables Under The Covers]:https://bornsql.ca/blog/temporal-tables-under-the-covers/
+[Faking Temporal Tables with Triggers]:https://bertwagner.com/2018/09/11/faking-temporal-tables-with-triggers/
+[SQL queries to manage hierarchical or parent-child relational rows in SQL Server]:https://www.codeproject.com/Articles/818694/SQL-queries-to-manage-hierarchical-or-parent-child
+[Choosing Between Table Variables and Temporary Tables]:https://www.red-gate.com/hub/product-learning/sql-prompt/choosing-table-variables-temporary-tables
+[What's New in the First Public CTP of SQL Server 2019]:https://www.mssqltips.com/sqlservertip/5710/whats-new-in-the-first-public-ctp-of-sql-server-2019/
+[SQL Server support for TLS 1.2 – Read This First!]:https://www.sentryone.com/blog/aaronbertrand/tls-1-2-support-read-first/
+[Misconceptions in SQL Server: A Trio of table variables]:https://sqlinthewild.co.za/index.php/2010/10/12/a-trio-of-table-variables/
+[Using the Same Column Twice in a SQL UPDATE Statement]:https://www.sqltheater.com/blog/using-the-same-column-twice-in-an-update-statement/
+[How to perform a performance test against a SQL Server instance]:https://www.sqlshack.com/how-to-perform-a-performance-test-against-a-sql-server-instance/
+[The Black Art Of Spatial Index Tuning In SQL Server]:http://boomphisto.blogspot.com/2011/04/black-art-of-spatial-index-tuning-in.html
+[Patching SQL Server on Windows notes from the field]:https://www.kevinrchant.com/2019/01/10/patching-sql-server-on-windows-notes-from-the-field/
+[Availability Group Readable Secondaries – Just Say No]:https://www.sqlskills.com/blogs/jonathan/availability-group-readable-secondaries-just-say-no/
+[Finding the Slowest Query in a Stored Procedure]:https://www.sqlskills.com/blogs/erin/slowest-query-in-a-stored-procedure/
+[A Monumental Migration to SQL Server 2016 – Part 1]:https://flxsql.com/monumental-migration-sql-server-2016-part-1/
+[A Monumental Migration to SQL Server 2016 – Part 2]:https://flxsql.com/monumental-migration-sql-server-2016-part-2/
+[A unique review of SQL Server index types]:https://www.kevinrchant.com/2018/10/18/a-unique-review-of-sql-server-index-types/
+[Don’t Just Rely on Query Execution Stats for T-SQL Execution]:https://matthewmcgiffen.com/2018/09/18/dont-just-rely-on-query-execution-stats-for-t-sql-execution/
+[Posting SQL Server notifications to Slack]:https://alessandroalpi.blog/2018/09/19/posting-sql-server-notifications-to-slack/
+[How to create DACPAC file?]:https://sqlplayer.net/2018/10/how-to-create-dacpac-file/
+[Find the Next Non-NULL Row in a Series With SQL]:https://blog.jooq.org/2018/09/03/find-the-next-non-null-row-in-a-series-with-sql/
+[Calculate Percentiles to Learn About Data Set Skew in SQL]:https://blog.jooq.org/2019/01/22/calculate-percentiles-to-learn-about-data-set-skew-in-sql/
+[Comparing multiple rows insert vs single row insert with three data load methods]:https://www.red-gate.com/simple-talk/sql/performance/comparing-multiple-rows-insert-vs-single-row-insert-with-three-data-load-methods/
+[The Cause of Every Deadlock in SQL Server]:https://thomaslarock.com/2018/09/the-cause-of-every-deadlock-in-sql-server/
+[Deadlock Troubleshooting, Part 1]:https://blogs.msdn.microsoft.com/bartd/2006/09/08/deadlock-troubleshooting-part-1/
+[Deadlock Troubleshooting, Part 2]:https://blogs.msdn.microsoft.com/bartd/2006/09/12/deadlock-troubleshooting-part-2/
+[Deadlock Troubleshooting, Part 3]:https://blogs.msdn.microsoft.com/bartd/2006/09/25/deadlock-troubleshooting-part-3/
+[The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 1]:https://milossql.wordpress.com/2018/10/04/the-good-the-bad-and-the-ugly-of-table-variable-deferred-compilation-part-1/
+[The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 2]:https://milossql.wordpress.com/2018/10/05/the-good-the-bad-and-the-ugly-of-table-variable-deferred-compilation-part-2/
+[The Good, the Bad and the Ugly of Table Variable Deferred Compilation – Part 3]:https://milossql.wordpress.com/2018/10/08/the-good-the-bad-and-the-ugly-of-table-variable-deferred-compilation-part-3/
+[Creating a SQL Server 2019 Demo Environment in a Docker Container]:https://www.cathrinewilhelmsen.net/2018/12/02/sql-server-2019-docker-container/
+[Overview of Data Compression in SQL Server]:https://codingsight.com/overview-of-data-compression-in-sql-server/
+[SQL Server Hash Match Operator]:https://sqlserverfast.com/epr/hash-match/
+[How to use Microsoft Assessment and Planning (MAP) Toolkit for SQL Server]:https://www.sqlshack.com/how-to-use-microsoft-assessment-and-planning-map-toolkit-for-sql-server/
+[Improve the Performance of Your Azure SQL Database (and Save Money!) with Automatic Tuning]:https://www.red-gate.com/simple-talk/sql/azure-sql-database/improve-the-performance-of-your-azure-sql-database-and-save-money-with-automatic-tuning/
+[The Importance of Database Compatibility Level in SQL Server]:https://www.sqlskills.com/blogs/glenn/the-importance-of-database-compatibility-level-in-sql-server/
+[Azure Managed vs Unmanaged disks : The choice]:https://buildwindows.wordpress.com/2017/05/31/azure-managed-vs-unmanaged-disks-the-choice/
+[Storage options for SQL Server database files in Azure]:https://www.jamesserra.com/archive/2019/01/storage-options-for-sql-server-database-files-in-azure/
+[The Performance of Window Aggregates Revisited with SQL Server 2019]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/the-performance-of-window-aggregates-revisited-with-sql-server-2019/
+[Super Scaling Singleton Inserts]:https://chrisadkin.io/2015/02/19/super-scaling-singleton-inserts/
+[Preparation for SQL Server Installation]:https://sqlplayer.net/2018/12/preparation-for-sql-server-installation/
+[Executing xp_cmdshell with Non SysAdmin Account]:http://www.lucasnotes.com/2019/01/executing-xpcmdshell-with-non-sysadmin.html
+[Generating SQL using Biml (T-SQL Tuesday #110)]:https://www.cathrinewilhelmsen.net/2019/01/08/generating-sql-using-biml/
+[Using Temporary Procedures]:https://www.red-gate.com/simple-talk/blogs/using-temporary-procedures/
+[Introduction to SQL Server Security — Part 1]:https://www.red-gate.com/simple-talk/sysadmin/data-protection-and-privacy/introduction-to-sql-server-security-part-1/
+[Introduction to SQL Server Security — Part 2]:https://www.red-gate.com/simple-talk/sysadmin/data-protection-and-privacy/introduction-to-sql-server-security-part-2/
+[Introduction to SQL Server Security — Part 3]:https://www.red-gate.com/simple-talk/sysadmin/data-protection-and-privacy/introduction-to-sql-server-security-part-3/
+[Introduction to SQL Server Security — Part 4]:https://www.red-gate.com/simple-talk/sysadmin/data-protection-and-privacy/introduction-to-sql-server-security-part-4/
+[Introduction to T-SQL Window Functions]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/introduction-to-t-sql-window-functions/
+[Intro to Debugging a Memory Dump]:https://blogs.msdn.microsoft.com/psssql/2012/03/15/intro-to-debugging-a-memory-dump/
+[Considering Security with SQL Bulk Insert]:https://www.sqlshack.com/considering-security-with-sql-bulk-insert/
+[SQL Server 2012 AlwaysOn – Part 11 – Performance Aspects and Performance Monitoring I]:https://blogs.msdn.microsoft.com/saponsqlserver/2013/04/21/sql-server-2012-alwayson-part-11-performance-aspects-and-performance-monitoring-i/
+[SQL Server 2012 AlwaysOn – Part 11 – Performance Aspects and Performance Monitoring II]:https://blogs.msdn.microsoft.com/saponsqlserver/2013/04/24/sql-server-2012-alwayson-part-12-performance-aspects-and-performance-monitoring-ii/
+[Data Compression Internals]:https://jesspomfret.com/data-compression-internals/
+[SQL Server Data Compression – Crunch Time!]:https://www.mlakartechtalk.com/sql-server-data-compression-crunch-time/
+[Create a slipstream installer for SQL Server on Windows]:https://bornsql.ca/blog/create-a-slipstream-installer-for-sql-server-on-windows/
+[Temporary Tables in SQL Server]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/temporary-tables-in-sql-server/
+[SQL unit testing with the tSQLt framework for beginners]:https://www.sqlshack.com/sql-unit-testing-with-the-tsqlt-framework-for-beginners/
+[Oracle vs. SQL Server Architecture]:https://dbakevlar.com/2019/03/oracle-vs-sql-server-architecture/
+[Oracle RAC vs. SQL Server AG]:https://dbakevlar.com/2019/03/oracle-rac-vs-sql-server-ag/
+[SSIS vs. Oracle GG]:https://dbakevlar.com/2019/04/ssis-vs-oracle-gg/
+[Analysis Services Telemetry: What information does SSAS submit? and how has it changed in SSAS 2019?]:https://shabnamwatson.wordpress.com/2019/04/13/analysis-services-telemetry-what-information-does-ssas-submit-and-how-has-it-changed-in-ssas-2019/
+[The Curious Case of… how to find FILESTREAM info from an MDF]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-how-to-find-filestream-info-from-an-md
+[Does index fragmentation matter?]:http://sqlblog.karaszi.com/does-index-fragmentation-matter/
+[How to perform a Page Level Restore in SQL Server]:https://sqlperfmon.blogspot.com/2016/07/how-to-perform-page-level-restore-in.html
+[How Much Memory Does SSIS Need?]:https://www.timmitchell.net/post/2019/05/02/how-much-memory-does-ssis-need/
+[The Curious Case of… trying to find an MDF file in a RAW disk]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-trying-to-find-an-mdf-file-in-a-raw-disk/
+[Methods to Insert Data into SQL Server]:https://www.sqlshack.com/methods-to-insert-data-into-sql-server/
+[Batching data manipulation is great as long as you do it correctly]:http://desertdba.com/batching-data-manipulation-is-great/
+[Azure and Windows PowerShell: Using VM Extensions]:https://www.red-gate.com/simple-talk/sysadmin/powershell/azure-and-windows-powershell-using-vm-extensions/
+[Reloading fact tables with zero downtime]:https://sqlsunday.com/2014/08/24/reloading-fact-tables-with-zero-downtime/
+[Transferring Data Efficiently by Using Partition Switching]:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms191160(v=sql.105)
+[Another Difference between N'' and '' in SQL Server]:https://nocolumnname.blog/2018/10/24/another-difference-between-n-and-in-sql-server/
+[Ignoring NULLs with FIRST_VALUE]:https://bertwagner.com/2018/08/28/ignoring-nulls-with-first-value/
+[Shortchanged with International Money in SQL Server]:https://bertwagner.com/2018/09/25/try-parse-convert-strings-to-numbers/
+[Understanding database recovery with SQL Server 2016 Extended Events]:https://www.mssqltips.com/sqlservertip/4339/understanding-database-recovery-with-sql-server-2016-extended-events/
+[SQL Server 2019: Batch Mode on Rowstore]:http://www.queryprocessor.com/batch-mode-on-row-store/
+[Using Indexing To Solve Blocking and Deadlocking Issues]:https://sqlundercover.com/2019/03/05/using-indexing-to-solve-blocking-and-deadlocking-issues/
+[Change collation of existing Azure SQL database]:https://blogs.msdn.microsoft.com/azuresqldbsupport/2018/11/09/change-collation-of-existing-azure-sql-database/
+[Creating Database Maintenance Plans]:https://codingsight.com/creating-database-maintenance-plans/
+[SQL Server Upgrade Checklist]:https://straightpathsql.com/archives/2019/03/sql-server-upgrade-checklist/
+[Failing a PowerShell Sql Agent step]:https://stuart-moore.com/failing-a-powershell-sql-agent-step/
+[The Curse of Cursor Options]:https://www.brentozar.com/archive/2018/11/the-curse-of-cursor-options/
+[Accelerated Database Recovery; Instant Rollback and Database Recovery]:https://www.sqlshack.com/accelerated-database-recovery-instant-rollback-and-database-recovery/
+[Accelerated Database Recovery and Long Running Transactions with Transaction Log Growth]:https://www.sqlshack.com/accelerated-database-recovery-and-long-running-transactions-with-transaction-log-growth/
+[Using docker named volumes to persist databases in SQL Server]:https://dbafromthecold.com/2019/03/21/using-docker-named-volumes-to-persist-databases-in-sql-server/
+[T-SQL bugs, pitfalls, and best practices – determinism]:https://sqlperformance.com/2019/03/t-sql-queries/bugs-pitfalls-best-practices-determinism
+[Grouped Concatenation in SQL Server]:https://sqlperformance.com/2014/08/t-sql-queries/sql-server-grouped-concatenation
+[Working with tempdb in SQL Server 2005]:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2005/administrator/cc966545(v%3dtechnet.10)
+[SQLskills SQL101: Temporary table misuse]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-temporary-table-misuse/
+[Running SQL Server on Linux on your own laptop]:https://www.kevinrchant.com/2019/03/26/running-sql-server-on-linux-on-your-own-laptop/
+[SSIS and Pentaho – A Quick Comparison]:https://sqlkover.com/ssis-and-pentaho-a-quick-comparison/
+[WinDbg and SQL Server Fun]:https://blobeater.blog/2017/06/14/windbg-and-sql-server-fun/
+[Certificates, Proxies and Jobs! Oh My!]:https://sqlstudies.com/2016/04/27/certificates-proxies-and-jobs-oh-my/
+[SQL Server: Diagnosing Intermittent Connectivity Issues]:https://mitchwheat.com/2019/04/12/sql-server-diagnosing-intermittent-connectivity-issues/
+[Difference between Identity & Sequence in SQL Server]:https://www.sqlshack.com/difference-between-identity-sequence-in-sql-server/
+[Does the Rowmodctr Update for Non-Updating Updates?]:https://www.brentozar.com/archive/2019/05/does-the-rowmodctr-update-for-non-updating-updates/
+[An Intro To Data Modeling]:https://donedifferent.data.blog/2019/04/12/an-intro-to-data-modeling/
+[On telemetry and other data collected by SQL Server]:https://www.sentryone.com/blog/aaronbertrand/sql-server-telemetry/
+[Purging data with batched deletes]:https://am2.co/2019/04/purging-data-with-batched-deletes/
+[Don’t Forget RoboCopy]:https://sqlrus.com/2019/05/dont-forget-robocopy/
+[Understanding the XML description of the Deadlock Graph in SQL Server]:https://www.sqlshack.com/understanding-the-xml-description-of-the-deadlock-graph-in-sql-server/
+[What Is The Difference Between Checkpoint And Lazy Writer]:https://saurabhsinhainblogs.blogspot.com/2012/10/interview-question-checkpoint-and-lazy.html?m=1
+[Efficiently Indexing Long Character Strings]:https://voluntarydba.com/2013/07/30/efficiently-indexing-long-character-strings/
+[SQL Server Read-only tables]:https://sqlstudies.com/2019/01/21/read-only-tables/
+[Slow inserts across a linked server?]:https://www.sqlserverscience.com/performance/slow-inserts-across-linked-server/
+[Using IGNORE NULLS With SQL Window Functions to Fill Gaps]:https://blog.jooq.org/2019/04/24/using-ignore-nulls-with-sql-window-functions-to-fill-gaps/
+[SQL Server Logical Reads]:http://www.sql-server-performance.com/logical-reads/
+[Two Words For Faster Scalar Functions]:https://bertwagner.com/2018/12/04/two-words-for-faster-scalar-functions/
+[How to Get SQL Server Dates and Times Horribly Wrong]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/how-to-get-sql-server-dates-and-times-horribly-wrong/
+[Diagnosing and Resolving Spinlock Contention on SQL Server]:http://download.microsoft.com/download/D/A/A/DAAD63AF-B06F-4F29-AF1D-68A78102ABF4/SQLServerSpinlockContention.pdf
+[Diagnosing and Resolving Latch Contention on SQL Server]:http://download.microsoft.com/download/B/9/E/B9EDF2CD-1DBF-4954-B81E-82522880A2DC/SQLServerLatchContention.pdf
+[Advanced Nutanix: SQL Server on Nutanix Best Practices Released!]:http://stevenpoitras.com/2013/11/advanced-nutanix-sql-server-nutanix-best-practices-released/
+[Gaps and Islands Across Date Ranges]:https://bertwagner.com/2019/03/12/gaps-and-islands/
+[NOT NULL Persisted Computed Columns (And What They Allow)]:https://www.red-gate.com/simple-talk/blogs/not-null-persisted-computed-columns-and-what-they-allow/
+[How many ways are there to sort GUIDs? How much time do you have?]:https://devblogs.microsoft.com/oldnewthing/20190426-00/?p=102450
+[How do I force a SQL Login to change it’s password on next login]:https://sqlstudies.com/2019/06/05/how-do-i-force-a-sql-login-to-change-its-password-on-next-login/
+[SQL Server Performance Benchmarking with Patterns]:https://www.sqlservercentral.com/articles/sql-server-performance-benchmarking-with-patterns
+[SQL Server function to convert integer date to datetime format]:https://www.mssqltips.com/sqlservertip/1712/sql-server-function-to-convert-integer-date-to-datetime-format/
+[Storing Utc Is Not A Silver Bullet]:https://codeblog.jonskeet.uk/2019/03/27/storing-utc-is-not-a-silver-bullet/
+[Logical Query Processing Part 8 : SELECT and ORDER BY]:https://www.itprotoday.com/sql-server/logical-query-processing-part-8-select-and-order
+[SQL Server Common Table Expression vs Temp Table]:https://www.mssqltips.com/sqlservertip/6040/sql-server-common-table-expression-vs-temp-table/
+[Which Query Used The Most Cpu? Implementing Extended Events]:https://www.scarydba.com/2019/06/03/which-query-used-the-most-cpu-implementing-extended-events/
+[SQL Server Plan Cache Limits]:https://www.sqlskills.com/blogs/erin/sql-server-plan-cache-limits/
+[SQL Server and ReFS: Part 1 – DBCC and In Memory OLTP]:https://swasheck.wordpress.com/2014/11/11/sql-server-and-refs-part-1-dbcc-and-in-memory-oltp/
+[SQL Server and ReFS: Part 2 – FIO Benchmarking NTFS vs. ReFS]:https://swasheck.wordpress.com/2014/12/18/sql-server-and-refs-part-2-fio-benchmarking-ntfs-vs-refs/
+[Why Rolling back inserts with Identity columns is a bad idea]:https://sqlundercover.com/2019/04/11/rolling-back-inserts-with-identity-columns/
+[What’s Better, CTEs or Temp Tables?]:https://www.brentozar.com/archive/2019/06/whats-better-ctes-or-temp-tables/
+[The Difference Between SQL’s JOIN .. ON Clause and the Where Clause]:https://blog.jooq.org/2019/04/09/the-difference-between-sqls-join-on-clause-and-the-where-clause/
+[My IT department installed an antivirus with SQL Server]:https://bornsql.ca/blog/my-it-department-installed-an-antivirus-with-sql-server/
+[An Experiment with Deadlocks - ROWLOCK hint myth]:http://jasonbrimhall.info/2019/03/25/an-experiment-with-deadlocks/
+[Adding a New Transaction Log File when the Existing Log is Full]:https://www.sqlserverscience.com/internals/adding-new-transaction-log-file-when-existing-log-full/
+[Transactions Don't Start At BEGIN TRAN]:https://www.joshthecoder.com/2019/06/05/transactions-dont-start-at-begin-tran.html
+[CAST/CONVERT makes expressions nullable]:https://sqlsunday.com/2019/06/05/cast-convert-makes-expressions-nullable/
+[Deciding between COALESCE and ISNULL in SQL Server]:https://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/]
+[How do you choose which columns to include in your SQL Server clustered index?]:https://the.agilesql.club/2019/06/how-do-you-choose-which-columns-to-include-in-your-sql-server-clustered-index/
+[A ever-increasing Clustered Key value doesn’t scale]:https://www.sqlpassion.at/archive/2014/04/15/an-ever-increasing-clustered-key-value-doesnt-scale/
+[SQL Server Bit reversion]:https://dangerousdba.blogspot.com/2011/10/bit-reversion.html
+[Troubleshooting a renamed SQL Server]:https://blog.wicktech.net/troubleshooting-a-renamed-sql-server/
+[Are Differential Backups Necessary?]:https://blog.wicktech.net/differential-backups/
+[Updating Statistics on Secondary Replicas of the Availability Groups]:http://www.nikoport.com/2019/06/20/updating-statistics-on-secondary-replicas-of-the-availability-groups/
+[It’s interesting how an OR short circuits]:https://sqlstudies.com/2019/06/17/its-interesting-how-an-or-short-circuits/
+[SQL Server NOLOCK Anomalies, Issues and Inconsistencies]:https://www.mssqltips.com/sqlservertip/6072/sql-server-nolock-anomalies-issues-and-inconsistencies/
+[Choosing a Database for Serverless Applications]:https://serverless.com/blog/choosing-a-database-with-serverless/
+[SQL Server On Linux: Forced Unit Access (Fua) Internals]:http://bobsql.com/sql-server-on-linux-forced-unit-access-fua-internals/
+[Socrates: The New SQL Server in the Cloud]:https://www.microsoft.com/en-us/research/uploads/prod/2019/05/socrates.pdf
+[What permissions do temp stored procedures use?]:https://sqlstudies.com/2019/06/19/what-permissions-do-temp-stored-procedures-use/
+[Common SQL Server Mishaps]:https://sqlperformance.com/2019/06/sql-performance/common-sql-server-mishaps
+[SQL Server Agent for SQL Express on Linux]:https://www.sqlservercentral.com/articles/sql-server-agent-for-sql-express-on-linux
+[Trailing Spaces in SQL Server]:https://bertwagner.com/2019/06/18/trailing-spaces-in-sql-server/
+[Troubleshooting a Change in Query Performance]:https://www.sqlskills.com/blogs/erin/troubleshooting-a-change-in-query-performance/
+[The Silent Bug I Find in Most Triggers]:https://www.brentozar.com/archive/2019/05/the-silent-bug-i-find-in-most-triggers/
+[How to Copy a Table in SQL Server to Another Database]:https://www.mssqltips.com/sqlservertip/6009/how-to-copy-a-table-in-sql-server-to-another-database/
+[Configuration of SQL Server instance]:https://sqlplayer.net/2019/06/configuration-of-sql-server-instance/
+[What is the SQL Server Virtual Log file and how to monitor it]:https://www.sqlshack.com/what-is-sql-server-virtual-log-file-and-how-to-monitor-it/
+[Important change to VLF creation algorithm in SQL Server 2014]:https://www.sqlskills.com/blogs/paul/important-change-vlf-creation-algorithm-sql-server-2014/
+[SQL Server Transaction Log Fragmentation: a Primer]:https://www.red-gate.com/simple-talk/sql/database-administration/sql-server-transaction-log-fragmentation-a-primer/
+[8 Steps to better Transaction Log throughput]:https://www.sqlskills.com/blogs/kimberly/8-steps-to-better-transaction-log-throughput/
+[Joins With OR Clauses = 💔]:https://erikdarlingdata.com/2019/06/joins-with-or-clauses-%F0%9F%92%94/
+[Thoughts on MAXDOP]:https://erikdarlingdata.com/2019/06/thoughts-on-maxdop/
+[What the Arrow Sizes in Query Plans Really Mean]:https://www.brentozar.com/archive/2019/06/what-the-arrow-sizes-in-query-plans-really-mean/
+[Query Store Best Practices]:https://www.sqlskills.com/blogs/erin/query-store-best-practices/
+[Introduction to Data Normalization: A Database "Best" Practice]:http://agiledata.org/essays/dataNormalization.html
+[Dr. OUTPUT or: How I Learned to Stop Worrying and Love the MERGE]:http://dataeducation.com/dr-output-or-how-i-learned-to-stop-worrying-and-love-the-merge/
+[SQL Server Tipping Games – Why Non-Clustered Indexes are just ignored!]:https://www.sqlpassion.at/archive/2013/06/12/sql-server-tipping-games-why-non-clustered-indexes-are-just-ignored/
+[SQL Server Guide To NULL Handling]:https://gavindraper.com//2018/11/29/SQL-Server-Guide-To-NULL-Handling/
+[Living with SQL’s 900 Byte Index Key Length Limit]:https://blogs.msdn.microsoft.com/bartd/2011/01/06/living-with-sqls-900-byte-index-key-length-limit/
+[Memory-Optimized TempDB Metadata in SQL Server 2019 - SQLHack]:https://www.sqlshack.com/memory-optimized-tempdb-metadata-in-sql-server-2019/
+[Forcing A Plan That Has A Plan Guide]:https://www.scarydba.com/2018/11/26/forcing-a-plan-that-has-a-plan-guide/
+[Remember the Default Window]:https://voiceofthedba.com/2018/08/23/remember-the-default-window/
+[The Impact of Non-Updating Updates]:https://www.sql.kiwi/2010/08/the-impact-of-non-updating-updates.html
+[What are Columnstore Indexes?]:https://www.red-gate.com/simple-talk/sql/sql-development/what-are-columnstore-indexes/
+[PolyBase in SQL Server 2019 – The End of ETL?]:https://www.red-gate.com/simple-talk/sql/data-platform/polybase-in-sql-server-2019-the-end-of-etl/
+[Overview of Service Principal Name and Kerberos authentication in SQL Server]:https://www.sqlshack.com/overview-of-service-principal-name-and-kerberos-authentication-sql-server/
+[Data Transfer Strategies between MongoDB and SQL Server]:https://www.sqlservercentral.com/articles/data-transfer-strategies-between-mongodb-and-sql-server
+[SQL Server and Excel Hierarchyid Example for Organization Charts]:https://www.mssqltips.com/sqlservertip/6054/sql-server-and-excel-hierarchyid-example-for-organization-charts/
+[Difference between sp_execute and sp_executesql and exec]:https://www.sqlindia.com/difference-between-sp_execute-sp_executesql-exec/
+[EXEC and sp_executesql – how are they different?]:https://www.sqlskills.com/blogs/kimberly/exec-and-sp_executesql-how-are-they-different/
+[Little Bobby Tables, SQL Injection and EXECUTE AS]:https://www.sqlskills.com/blogs/kimberly/little-bobby-tables-sql-injection-and-execute-as/
+[Examining the Performance Impact of an Adhoc Workload]:https://sqlperformance.com/2019/05/sql-plan/perf-impact-adhoc-workload
+[Backup to URL]:https://blog.coeo.com/backup-to-url
+[Spotting Unauthorized Configuration Settings in SQL Server]:https://www.red-gate.com/hub/product-learning/sql-monitor/spotting-unauthorized-configuration-settings-sql-server
+[Window Functions in SQL Server]:https://www.red-gate.com/simple-talk/sql/learn-sql-server/window-functions-in-sql-server/
+[Window Functions in SQL Server: Part 2-The Frame]:https://www.red-gate.com/simple-talk/sql/learn-sql-server/window-functions-in-sql-server-part-2-the-frame/
+[An Intro to SQL Window Functions]:https://www.toptal.com/sql/intro-to-sql-windows-functions
+[SQL Database Performance Tuning for Developers]:https://www.toptal.com/sql-server/sql-database-tuning-for-developers
+[“But NOLOCK Is Okay When The Data Isn’t Changing, Right?”]:https://www.brentozar.com/archive/2019/08/but-nolock-is-okay-when-the-data-isnt-changing-right/
+[tempdb Enhancements in SQL Server 2019]:https://sqlperformance.com/2019/08/tempdb/tempdb-enhancements-in-sql-server-2019
+[Feature Restrictions in SQL Server 2019 are Worse Than Useless: a False Sense of Security And Wasted Opportunity]:https://sqlquantumleap.com/2019/08/05/feature-restrictions-in-sql-server-2019-are-worse-than-useless-a-false-sense-of-security-and-wasted-opportunity/
+[How to get SQL Server Sysadmin Privileges as a Local Admin with PowerUpSQL]:https://blog.netspi.com/get-sql-server-sysadmin-privileges-local-admin-powerupsql/
+[Views of the Same Problem: Network Admin, DBA, and Developer]:https://blog.serverfault.com/2011/03/16/views-of-the-same-problem-network-admin-dba-and-developer/
+[Finding Max Concurrent Operations With T-SQL (Part 1)]:https://36chambers.wordpress.com/2019/01/02/finding-max-concurrent-operations-with-t-sql-part-1/
+[Finding Max Concurrent Operations With T-SQL (Part 2)]:https://36chambers.wordpress.com/2019/01/03/finding-max-concurrent-operations-with-t-sql-part-2/
+[Stack Overflow: The Architecture - 2016 Edition]:https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/
+[Stack Overflow: The Hardware - 2016 Edition]:https://nickcraver.com/blog/2016/03/29/stack-overflow-the-hardware-2016-edition/
+[Stack Overflow: How We Do Deployment - 2016 Edition]:https://nickcraver.com/blog/2016/05/03/stack-overflow-how-we-do-deployment-2016-edition/
+[Stack Overflow: How We Do Monitoring - 2018 Edition]:https://nickcraver.com/blog/2018/11/29/stack-overflow-how-we-do-monitoring/
+[Stack Overflow: How We Do App Caching - 2019 Edition]:https://nickcraver.com/blog/2019/08/06/stack-overflow-how-we-do-app-caching/
+[Adding a Missing Index Killed Performance]:https://www.sqlrx.com/missing-index-killed-performance/
+[Corruption in TempDB]:https://stevestedman.com/2019/08/corruption-in-tempdb/
+[Corruption recovery using DBCC WRITEPAGE]:https://www.sqlskills.com/blogs/paul/corruption-recovery-using-dbcc-writepage/
+[Why DBCC CHECKDB can miss memory corruption]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-why-dbcc-checkdb-can-miss-memory-corruption/
+[Plan Stitch: Harnessing the Best of Many Plans]:https://www.microsoft.com/en-us/research/publication/plan-stitch-harnessing-the-best-of-many-plans-2/
+[Query and Resource Optimization: Bridging the Gap]:https://www.microsoft.com/en-us/research/publication/query-resource-optimization-bridging-gap/
+[Cuttlefish: A Lightweight Primitive for Adaptive Query Processing]:https://www.microsoft.com/en-us/research/publication/cuttlefish-a-lightweight-primitive-for-adaptive-query-processing/
+[Leveraging Re-costing for Online Optimization of Parameterized Queries with Guarantees]:https://www.microsoft.com/en-us/research/publication/leveraging-re-costing-online-optimization-parameterized-queries-guarantees/
+[How to choose antivirus software to run on computers that are running SQL Server]:https://support.microsoft.com/help/309422
+[Why is SYSDATETIME() slower than SYSUTCDATETIME()?]:https://erikdarlingdata.com/2019/05/why-is-sysdatetime-slower-than-sysutcdatetime/
+[Constant Time Recovery in Azure SQL Database]:https://www.microsoft.com/en-us/research/publication/constant-time-recovery-in-azure-sql-database/
+[Improving Optimistic Concurrency Control Through Transaction Batching and Operation Reordering]:https://www.microsoft.com/en-us/research/publication/improving-optimistic-concurrency-control-through-transaction-batching-and-operation-reordering/
+[An Empirical Evaluation of In-Memory Multi-Version Concurrency Control]:https://www.cs.cmu.edu/~pavlo/papers/p781-wu.pdf
+[Automatically Indexing Millions of Databases in Microsoft Azure SQL Database]:https://www.microsoft.com/en-us/research/publication/automatically-indexing-millions-of-databases-in-microsoft-azure-sql-database/
+[Adding a Column with a Default Constraint]:https://matthewmcgiffen.com/2019/07/16/adding-a-column-with-a-default-constraint/
+[A Hidden Value Of Apply]:https://erikdarlingdata.com/2019/06/a-hidden-value-of-apply/
+[Improve Performance of UDFs with NULL ON NULL INPUT]:https://sqlperformance.com/2018/12/sql-performance/improve-udfs-null-on-null-input
+[The ‘= NULL’ Mistake and other SQL NULL Heresies]:https://www.red-gate.com/hub/product-learning/sql-prompt/the-null-mistake-and-other-sql-null-heresies
+[How to Corrupt a Database]:https://www.sqlserverscience.com/tools/how-to-corrupt-a-database/
+[SQL Server Page Types]:http://www.sqlnotes.info/2011/10/31/page-type/
+[SQL Server Index Maintenance – You’re Doing It Wrong]:http://www.seangallardy.com/sql-server-index-maintenance-youre-doing-it-wrong/
+[Stop Worrying About SQL Server Fragmentation]:https://www.brentozar.com/archive/2012/08/sql-server-index-fragmentation/
+[How much will it cost or save to rebuild that index?]:https://www.sqlservercentral.com/articles/rebuild-index
+[To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?]:https://www.microsoft.com/en-us/research/wp-content/uploads/2006/04/tr-2006-45.pdf
+[SQL Server UPSERT Patterns and Antipatterns]:https://michaeljswart.com/2017/07/sql-server-upsert-patterns-and-antipatterns/
+[“UPSERT” Race Condition With MERGE]:https://weblogs.sqlteam.com/dang/2009/01/31/upsert-race-condition-with-merge/
+[Use Caution with SQL Server's MERGE Statement]:https://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/
+[Checking for potential constraint violations before entering SQL Server TRY and CATCH logic]:https://www.mssqltips.com/sqlservertip/2632/checking-for-potential-constraint-violations-before-entering-sql-server-try-and-catch-logic/
+[Performance impact of different error handling techniques]:https://sqlperformance.com/2012/08/t-sql-queries/error-handling
+[Backup and Restore Databases with CHECKSUM and VERIFYONLY]:https://www.sqlrx.com/backup-and-restore-databases-with-checksum-and-verifyonly/
+[dm_db_database_page_allocations]:https://www.sqlserverscience.com/sys/dm_db_database_page_allocations/
+[Compress Big Tables]:https://www.sqlserverscience.com/performance/compress-big-tables/
+[Hardening SQL Server Security]:https://mitchwheat.com/2019/08/21/hardening-sql-server-security/
+[Splitting Strings With OPENJSON]:https://itsalljustelectrons.blogspot.com/2019/05/Splitting-Strings-With-OPENJSON.html
+[How to migrate to Amazon RDS for SQL Server using transactional replication]:https://aws.amazon.com/ru/blogs/database/how-to-migrate-to-amazon-rds-for-sql-server-using-transactional-replication/
+[The Hardest Part Of Query Tuning: Logical Equivalence]:https://erikdarlingdata.com/2019/08/the-hardest-part-of-query-tuning-logical-equivalence/
+[SQL Injection: What is it? Causes and exploits]:https://www.sqlshack.com/sql-injection-what-is-it-causes-and-exploits/
+[SQL Injection: Detection and prevention]:https://www.sqlshack.com/sql-injection-detection-and-prevention/
+[Some T-SQL INSERTs DO Follow the Fill Factor!]:https://www.sqlservercentral.com/articles/some-t-sql-inserts-do-follow-the-fill-factor-sql-oolie
+[Install SQL Server 2019 Big Data Cluster using Azure Data Studio]:https://nielsberglund.com/2019/09/11/install-sql-server-2019-big-data-cluster-using-azure-data-studio/
+[Ghost Records in SQL Server… Now whats that ????]:https://www.sqlservergeeks.com/sql-server-ghost-records-in-sql-server-now-whats-that/
+[Transaction Isolation Levels and sp_executesql]:https://www.sqlserverscience.com/basics/stored-procedure-dynamic-sql-execute-as/
+[Batch Mode Bitmaps in SQL Server]:https://sqlperformance.com/2019/08/sql-performance/batch-mode-bitmaps-in-sql-server
+[Transparent Data Encryption (TDE) on Azure SQL database]:https://www.sqlshack.com/transparent-data-encryption-tde-on-the-azure-sql-database/
+[Analyzing Estimates from the CSelCalcAscendingKeyFilter Calculator]:https://www.joshthecoder.com/2019/08/21/analyzing-estimates-cselcalcascendingkeyfilter-calculator.html
+[Building Storage for SQL Server (and other database) Virtual Machines in the Cloud]:https://joeydantoni.com/2019/09/18/building-storage-for-sql-server-and-other-database-virtual-machines-in-the-cloud/
+[SQL Server Simple and Forced Parameterization]:https://www.mssqltips.com/sqlservertip/2935/sql-server-simple-and-forced-parameterization/
+[How to use a SQL Server Plan Guide to Tune Queries]:https://www.mssqltips.com/sqlservertip/1630/how-to-use-a-sql-server-plan-guide-to-tune-queries/
+[Neglecting to Use, or Misusing, the RETURN Keyword (BP016)]:https://www.red-gate.com/hub/product-learning/sql-prompt/neglecting-to-use-or-misusing-the-return-keyword-bp016
+[Defensive Error Handling]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/defensive-error-handling/
+[A Self-Tuning Fill Factor Technique for SQL Server – Part 1]:https://www.sqlservercentral.com/articles/a-self-tuning-fill-factor-technique-for-sql-server-part-1
+[A Self-Tuning Fill Factor Technique for SQL Server – Part 2]:https://www.sqlservercentral.com/articles/a-self-tuning-fill-factor-technique-for-sql-server-part-2
+[SQL: Been told you can't access master database system views in Azure SQL Database? Not true!]:https://blog.greglow.com/2019/09/17/sql-told-cannot-access-master-database-system-views-azure-sql-database-not-true/
+[How to increase SQL Database Full Backup speed using compression and Solid State Disks]:http://henkvandervalk.com/how-to-increase-sql-database-full-backup-speed-using-compression-and-solid-state-disks
+[Troubleshooting NUMA Node Imbalance Problems (HammerDB Benchmark)]:https://www.sqlpassion.at/archive/2019/09/23/troubleshooting-numa-node-inbalance-problems/
+[SQL Server Unequal NUMA CPU engagement]:https://sql-sasquatch.blogspot.com/2019/09/sql-server-numa-cpu-engagement.html
+[SSIS Connection Managers: OLE DB vs ODBC vs ADO.NET]:https://www.sqlshack.com/ssis-connection-managers-ole-db-vs-odbc-vs-ado-net/
+[SSIS Data Flows – ADO.NET vs. OLE DB vs. ODBC]:https://datatellblog.wordpress.com/2015/01/13/ssis-data-flows-ado-net-vs-ole-db-vs-odbc/
+[SSIS – Fastest data flow task item for transferring data over the network]:https://gqbi.wordpress.com/2013/06/19/ssis-fastest-data-flow-task-item-for-transferring-data-over-the-network/
+[The Case of the Vanishing Index Compression]:red-gate.com/simple-talk/blogs/the-case-of-the-vanishing-index-compression/
+[Migrating from MSSQL to PostgreSQL - What You Should Know]:https://severalnines.com/database-blog/migrating-mssql-postgresql-what-you-should-know
+[Difference between Identity and Sequence in SQL Server 2012]:https://raresql.com/2012/05/01/difference-between-identity-and-sequence/
+[Sequence vs Identity – Performance Comparison]:http://byobi.com/2012/09/sequence-vs-identity-performance-comparison/
+[Read Excel File in SQL Server with OPENROWSET or OPENDATASOURCE]:https://www.mssqltips.com/sqlservertip/6178/read-excel-file-in-sql-server-with-openrowset-or-opendatasource/
+[Upgrading SQL Server using Availability Groups – Checklist]:https://thelonedba.wordpress.com/2019/10/17/upgrading-sql-server-using-availability-groups-checklist/
+[Using indexed views? WITH (NOEXPAND) for Standard Edition]:https://bornsql.ca/blog/using-indexed-views-dont-forget-this-important-tip/
+[Using indexed views? What is an imprecise or non-deterministic convert?]:https://bornsql.ca/blog/using-indexed-views-what-is-an-imprecise-or-non-deterministic-convert/
+[JSON in your Azure SQL Database? Let’s benchmark some options!]:https://techcommunity.microsoft.com/t5/SQL-Customer-Success-Engineering/JSON-in-your-Azure-SQL-Database-Let-s-benchmark-some-options/ba-p/909131
+[Looking for strange - addition to system_health XE]:https://karaszi.com/looking-for-strange
+[What's new in SQL Server version x]:https://karaszi.com/new-in-version-x
+[The ultimate guide to the datetime datatypes]:https://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
+[Some numbers that you will know by heart if you have been working with SQL Server for a while]:https://sqlservercode.blogspot.com/2019/03/some-numbers-that-you-will-know-by.html
+[#TSQL2sday: How Much Plan Cache History Do You Have?]:https://www.brentozar.com/archive/2018/07/tsql2sday-how-much-plan-cache-history-do-you-have/
+[Fixing SQL Server Management Studio’s Tab Text]:https://www.brentozar.com/archive/2011/06/fixing-sql-server-management-studios-tab-text/
+[An overview of the SQL table variable]:https://www.sqlshack.com/an-overview-of-the-sql-table-variable/
+[Performance Impact of Small Queries]:https://forrestmcdaniel.com/2019/06/25/performance-impact-of-small-queries/
+[How we use SQL Server as a Document Store]:https://octopus.com/blog/sql-as-document-store
+[Overlooked T-SQL Gems]:https://sqlperformance.com/2019/10/t-sql-queries/overlooked-t-sql-gems
+[Are SQL Server database triggers evil?]:https://www.sqlshack.com/are-sql-server-database-triggers-evil/
+[Configuration Best Practices for SQL Server Tempdb–Initial Sizing]:https://logicalread.com/2013/02/12/sql-server-tempdb-best-practices-initial-sizing-w01/
+[Sql Server Extended Events Trace Overhead]:https://nenadnoveljic.com/blog/sql-server-extended-events-trace-overhead/
+[Measuring "Observer Overhead" of SQL Trace vs. Extended Events]:https://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events
+[Performance overhead of tracing with Extended Event targets vs SQL Trace under CPU Load]:http://andreas-wolter.com/en/performance-overhead-of-tracing-with-extended-event-targets-vs-sql-trace-under-cpu-load/
+[Fragmentation, the final installment]:http://sqlblog.karaszi.com/fragmentation-the-final-installment/
+[Atomic Durability - How do databases recover from a crash ?]:https://concurrencyfreaks.blogspot.com/2019/10/atomic-durability-how-do-databases.html
+[Truth First, or Why You Should Mostly Implement Database First Designs]:https://blog.jooq.org/2018/06/06/truth-first-or-why-you-should-mostly-implement-database-first-designs/
+[SQL Server CHECKPOINT, Lazy Writer, Eager Writer and Dirty Pages in SQL Server]:https://www.sqlshack.com/sql-server-checkpoint-lazy-writer-eager-writer-and-dirty-pages-in-sql-server/
+[T-SQL bugs, pitfalls, and best practices – window functions]:https://sqlperformance.com/2019/08/sql-performance/t-sql-bugs-pitfalls-and-best-practices-window-functions
+[#BackToBasics: Why I use lower case for data type names (now)]:https://www.sentryone.com/blog/aaronbertrand/backtobasics-lower-case-data-types
+[New high availability and disaster recovery benefits for SQL Server]:https://cloudblogs.microsoft.com/sqlserver/2019/10/30/new-high-availability-and-disaster-recovery-benefits-for-sql-server/
+[Because Your Index Maintenance Script Is Measuring The Wrong Thing]:https://www.erikdarlingdata.com/2019/10/because-your-index-maintenance-script-is-measuring-the-wrong-thing/
+[Memory-Optimized TempDB Metadata]:http://www.nikoport.com/2019/10/30/memory-optimized-tempdb-metadata/
+[Build a SQL Cluster Lab Part 1]:https://www.ryanjadams.com/2019/10/build-a-sql-cluster-lab-part-1/
+[There is no Such Thing as Object-Relational Impedance Mismatch]:https://blog.jooq.org/2015/08/26/there-is-no-such-thing-as-object-relational-impedance-mismatch/
+[ORMs Under the Hood]:https://www.vertabelo.com/blog/orms-under-the-hood/
+[EMERGENCY-mode repair: the very, very last resort]:https://www.sqlskills.com/blogs/paul/checkdb-from-every-angle-emergency-mode-repair-the-very-very-last-resort/
+[Scalar functions and improvements in SQL Server 2019]:http://sqlblog.karaszi.com/scalar-functions-and-improvements-in-sql-server-2019/
+[Scalar functions in SQL server 2019, part 2]:http://sqlblog.karaszi.com/scalar-functions-in-sql-server-2019-part-2/
+[Dos and Don'ts of Dynamic SQL]:https://www.sqlservercentral.com/articles/dos-and-donts-of-dynamic-sql
+[Differences Between Sql Server TEXT and VARCHAR(MAX) Data Type]:https://sqlhints.com/2016/05/11/differences-between-sql-server-text-and-varcharmax-data-type/
+[VARBINARY(MAX) Tames the BLOB]:https://www.itprotoday.com/microsoft-visual-studio/varbinarymax-tames-blob
+[Query Store Options in SSMS 18.4]:https://www.sqlskills.com/blogs/erin/query-store-options-in-ssms-18-4/
+[Query Store Performance Overhead: What you need to know]:https://www.sqlskills.com/blogs/erin/query-store-performance-overhead/
+[How to fork a GitHub repository and contribute to an open source project]:https://sqldbawithabeard.com/2019/11/29/how-to-fork-a-github-repository-and-contribute-to-an-open-source-project/
+[But I Need To Compare Two Date Columns In My Where Clause]:https://www.erikdarlingdata.com/2019/11/but-i-need-to-compare-two-date-columns-in-my-where-clause/
+[The Difference Between Fault Tolerance, High Availability, & Disaster Recovery]:http://www.pbenson.net/2014/02/the-difference-between-fault-tolerance-high-availability-disaster-recovery/
+[Why LOB data makes shrink run slooooowly]:https://www.sqlskills.com/blogs/paul/why-lob-data-makes-shrink-run-slooooowly-t-sql-tuesday-006/
+[SQL Server 2019 Scalar UDF inlining - out of memory in some cases]:https://sql-sasquatch.blogspot.com/2019/11/sql-server-2019-udf-inlining-oom-in.html
+[Is it true that editing a single row in Management Studio empties and reloads the entire table?]:https://bornsql.ca/blog/is-it-true-that-editing-a-single-row-in-management-studio-empties-and-reloads-the-entire-table/
+[A Guide to SQL Naming Conventions]:https://blog.jooq.org/2019/10/29/a-guide-to-sql-naming-conventions/
+[Stop Mapping Stuff in Your Middleware. Use SQL’s XML or JSON Operators Instead]:https://blog.jooq.org/2019/11/13/stop-mapping-stuff-in-your-middleware-use-sqls-xml-or-json-operators-instead/
+[How Does Accelerated Database Recovery Work]:https://www.red-gate.com/simple-talk/sql/database-administration/how-does-accelerated-database-recovery-work/
+[Recover SQL Server Resource Database]:https://www.mssqltips.com/sqlservertip/6194/recover-sql-server-resource-database/
+[What’s in that database? Getting information about routines]:https://www.red-gate.com/simple-talk/blogs/whats-in-that-database-getting-information-about-routines/
+[The Gloop: An Easier way of Managing SQL Server Documentation]:https://www.red-gate.com/simple-talk/blogs/the-gloop-an-easier-way-of-managing-sql-server-documentation/
+[The SQL of Gaps and Islands in Sequences]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/the-sql-of-gaps-and-islands-in-sequences/
+[Drop Database Objects Practically Risk-Free!]:https://thenonclutteredindex.com/2019/04/17/drop-database-objects-practically-risk-free/
+[Predicate Pushdown and why should I care?]:https://techcommunity.microsoft.com/t5/SQL-Server/Predicate-Pushdown-and-why-should-I-care/bc-p/1045243#M1406
+[Stack Overflow Demo Database Column Store Edition: Downloads And Links]:https://www.erikdarlingdata.com/2019/11/stack-overflow-demo-database-column-store-edition-downloads-and-links/
+[Stack Overflow Demo Database Column Store Edition: Exploring Relationships]:https://www.erikdarlingdata.com/2019/11/stack-overflow-demo-database-column-store-edition-exploring-relationships/
+[Stack Overflow Demo Database Column Store Edition: Helpful Links]:https://www.erikdarlingdata.com/2019/11/stack-overflow-demo-database-column-store-edition-helpful-links/
+[Online, Resumable, and WAIT_AT_LOW_PRIORITY operations in SQL Server]:https://littlekendra.com/2019/12/09/online-resumable-and-wait_at_low_priority-operations-in-sql-server/
+[How filtered indexes could be a more powerful feature]:https://sqlperformance.com/2013/04/t-sql-queries/filtered-indexes
+[How Forced Parameterization in SQL Server Affects Filtered Indexes]:https://www.mssqltips.com/sqlservertip/6139/how-forced-parameterization-in-sql-server-affects-filtered-indexes/
+[Filtered Indexes and Forced Parameterization (redux)]:https://sqlperformance.com/2019/12/t-sql-queries/filtered-indexes-forced-parameterization
+[Interpreting SQL Server 2019 DBCC MEMORYSTATUS output -- Part 1]:https://sql-sasquatch.blogspot.com/2019/12/interpreting-sql-server-2019-dbcc.html
+[Invisible tempdb Killer]:https://www.joshthecoder.com/2019/12/18/invisible-tempdb-killer.html
+[Batch Mode On Row Store Is Fickle]:https://www.erikdarlingdata.com/2019/12/batch-mode-on-row-store-is-fickle/
+[Use Azure To Store Sql Server Backups Offsite]:https://www.sqlstad.nl/sql-server/use-azure-to-store-sql-server-backups-offsite/
+[Handling Data Returned from a SQL Stored Procedure]:https://www.drewsk.tech/2019/12/20/handling-data-returned-from-a-sql-stored-procedure/
+[When QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_140 does not follow CL 140 rules]:https://milossql.wordpress.com/2019/12/20/query_optimizer_compatibility_level_140/
+[SQL Server–HOW-TO: quickly retrieve accurate row count for table]:https://blogs.msdn.microsoft.com/martijnh/2010/07/15/sql-serverhow-to-quickly-retrieve-accurate-row-count-for-table/
+[Do You Have REFERENCES?]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/do-you-have-references/
+[Fun with (columnstore) compression on a very large table – part 1]:https://sqlperformance.com/2019/12/columnstore/fun-with-compression-very-large-table-1
+[How to Make SELECT COUNT(*) Queries Crazy Fast]:https://www.brentozar.com/archive/2019/12/how-to-make-select-count-queries-crazy-fast/
+[SSISDB Catalog Defaults Best Practices]:https://datasteve.com/2019/12/06/ssisdb-catalog-defaults-best-practices/
+[Temporal Tables, and how to deal with computed columns]:https://bornsql.ca/blog/temporal-tables-and-how-to-deal-with-computed-columns/
+[Cardinality Estimation for Disjunctive Predicates in SQL Server 2014]:https://www.sql.kiwi/2014/04/cardinality-estimation-for-disjunctive-predicates-in-2014.html
+[Create Distributed Availability Group in Sql Server Linux(Redhat) --- step by step]:https://techcommunity.microsoft.com/t5/sql-server-support/create-distributed-availability-group-in-sql-server-linux-redhat/ba-p/1003471
+[Connection options in SSMS]:https://sqlstudies.com/2013/11/18/connection-options-in-ssms/
+[A Script To Automatically Align Columnstore Indexes To Enhance Segment Elimination (and Hence Performances)]:https://tsql.tech/a-script-to-automatically-align-columnstore-indexes-to-enhance-segment-elimination-and-hence-performances/
+[Issues with SQLCMD when using special characters]:https://www.mssqltips.com/sqlservertip/5132/issues-with-sqlcmd-when-using-special-characters/
+[Encrypting passwords with Python Scripts in SQL Notebooks of Azure Data Studio]:https://www.sqlshack.com/encrypting-passwords-with-python-scripts-in-sql-notebooks-of-azure-data-studio/
+[Fun with (columnstore) compression on a very large table – part 2]:https://sqlperformance.com/2020/01/columnstore/fun-with-compression-very-large-table-2
+[The curious case of the sqlcmd password]:https://bornsql.ca/blog/the-curious-case-of-the-sqlcmd-password/
+[Setting up Management Studio for remote SQL Server]:https://www.sqlservercentral.com/articles/setting-up-management-studio-for-remote-sql-server
+[SQL Server Security Best Practices for an Application Installed on SQL Server]:https://www.mssqltips.com/sqlservertip/6266/sql-server-security-best-practices-for-an-application-installed-on-sql-server/
+[PCI Best Practices Guide for SQL Server DBAs]:https://www.mssqltips.com/sqlservertip/3609/pci-best-practices-guide-for-sql-server-dbas/
+[SQL Server Security Checklist]:https://www.mssqltips.com/sqlservertip/3159/sql-server-security-checklist/
+[Replace Model SQL Server Database with a User Database]:https://www.mssqltips.com/sqlservertip/6154/replace-model-sql-server-database-with-a-user-database/
+[SQL Server Linux installation for Amazon EC2 instance with Red Hat OS]:https://www.sqlshack.com/sql-server-linux-installation-for-amazon-ec2-instance-with-red-hat-os/
+[Departure of a SQL Server Administrator – What to Check?]:https://thelonedba.wordpress.com/2020/01/03/departure-of-a-sql-server-administrator-what-to-check/
+[The Curious Case of… transactions rolling back during DBCC CHECKDB]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-transactions-rolling-back-during-dbcc-checkdb/
+[Don’t install SQL Server from a mounted ISO]:https://bornsql.ca/blog/dont-install-sql-server-from-a-mounted-iso/
+[NULL complexities – Part 1]:https://sqlperformance.com/2019/12/t-sql-queries/null-complexities-part-1
+[NULL complexities – Part 2]:https://sqlperformance.com/2020/01/t-sql-queries/null-complexities-part-2
+[NULL complexities – Part 3]:https://sqlperformance.com/2020/02/t-sql-queries/null-complexities-part-3-missing-standard-features-and-t-sql-alternatives
+[How to fix the “Agent XPs disabled” error]:https://www.sqlshack.com/how-to-fix-the-agent-xps-disabled-error/
+[Number of Rows Read / Actual Rows Read warnings in Plan Explorer]:https://sqlperformance.com/2016/06/sql-indexes/actual-rows-read-warnings-plan-explorer
+[Data Compression + Backup Compression = Double Compression?]:https://jesspomfret.com/double-compression/
+[How Many Bytes Per Character in SQL Server: a Completely Complete Guide]:https://sqlquantumleap.com/2019/11/22/how-many-bytes-per-character-in-sql-server-a-completely-complete-guide/
+[Storage 101: Welcome to the Wonderful World of Storage]:https://www.red-gate.com/simple-talk/sql/database-administration/storage-101-welcome-to-the-wonderful-world-of-storage/
+[How to detect and prevent unexpected growth of the TempDB database]:https://www.sqlshack.com/how-to-detect-and-prevent-unexpected-growth-of-the-tempdb-database/
+[Understanding the SQL Server Proportional fill algorithm]:https://www.sqlshack.com/understanding-sql-server-proportional-fill-algorithm/
+[VALUES() and Long Parameter Lists]:https://www.red-gate.com/simple-talk/sql/learn-sql-server/values-and-long-parameter-lists/
+[Going Serverless with Azure SQL Database]:https://www.mssqltips.com/sqlservertip/6273/going-serverless-with-azure-sql-database/
+[SQLskills SQL101: Why are Statistics so Important?]:https://www.sqlskills.com/blogs/kimberly/sql101_whystatisticsareimportant/
+[Configuring SQL Server Express edition as SQL witness server in Database Mirroring]:https://www.sqlshack.com/configuring-sql-server-express-edition-as-sql-witness-server-in-database-mirroring/
+[The Half Apply Query]:https://forrestmcdaniel.com/2020/01/20/the-half-apply-query/
+[Import JSON data into SQL Server]:https://www.sqlshack.com/import-json-data-into-sql-server/
+[Auditing in AWS RDS SQL Server]:https://www.sqlshack.com/auditing-in-aws-rds-sql-server/
+[Types of SQL Server Indexes]:https://www.mssqltips.com/sqlservertip/6274/types-of-sql-server-indexes/
+[Use SQL Server's UNPIVOT operator to help normalize output]:https://www.mssqltips.com/sqlservertip/3000/use-sql-servers-unpivot-operator-to-help-normalize-output/
+[Prevent SSMS from seeing the server's file system]:https://dba.stackexchange.com/a/246783/107045
+[Add the ability to disable or enable a few new DMVs and DMFs introduced in SQL Server 2017]:https://support.microsoft.com/help/4046638/
+[Actual Difference Between EXISTS(SELECT 1 …), EXISTS(SELECT * …), and EXISTS(SELECT column …)]:https://sqlquantumleap.com/2020/01/24/actual-difference-between-existsselect-1-existsselect-and-existsselect-column/
+[Why Wait Stats Alone Are Not Enough]:https://sqlperformance.com/2020/01/sql-performance/why-waits-alone-are-not-enough
+[Estimating AWS RDS SQL Server costs]:https://www.sqlshack.com/estimating-aws-rds-sql-server-costs/
+[SQL Server Performance Tuning Using Wait Statistics: A Beginner’s Guide]:https://www.sqlskills.com/wp-content/uploads/2014/04/sql-server-performance-tuning-using-wait-statistics-whitepaper.pdf
+[sys.xp_delete_files and ‘allow filesystem enumeration’: two new undocumented items in SQL Server 2019]:https://sqlquantumleap.com/2020/01/26/sys-xp_delete_files-and-allow-filesystem-enumeration-two-new-undocumented-items-in-sql-server-2019/
+[Why Database Monitoring Tools Are So Hard to Interpret]:https://www.brentozar.com/archive/2020/01/why-database-monitoring-tools-are-so-hard-to-interpret/
+[Extended Events Misperceptions: Profiler Is Easier]:https://www.scarydba.com/2020/01/20/extended-events-misperceptions-profiler-is-easier/
+[Extended Events Misperceptions: Profiler Is Easier, Part 2]:https://www.scarydba.com/2020/01/27/extended-events-misperceptions-profiler-is-easier-part-2/
+[Automate SFTP File Transfer with SQL Server Agent and WinSCP]:https://www.mssqltips.com/sqlservertip/6285/automate-sftp-file-transfer-with-sql-server-agent-and-winscp/
+[Running Database Console Commands (DBCCs) on Azure SQL Database]:https://www.databasejournal.com/features/mssql/running-database-console-commands-dbccs-on-azure-sql-database.html
+[How to Remove Times from Dates in SQL Server]:https://www.brentozar.com/archive/2020/01/how-to-remove-times-from-dates-in-sql-server/
+[Export/Import Data using BCP - SQL Server on Linux]:https://www.sqlservercentral.com/articles/export-import-data-using-bcp-sql-server-on-linux
+[Prevent SQL Server Blocking using Lock_Timeout]:https://www.mssqltips.com/sqlservertip/6279/prevent-sql-server-blocking-using-locktimeout/
+[Bin Packing Problems: The SQL]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/bin-packing-problems-the-sql/
+[Causation, Correlation and Crackpots]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/causation-correlation-and-crackpots/
+[What Events are in a Trace?]:https://www.sqlskills.com/blogs/erin/what-events-are-in-a-trace/
+[What Are Soft Deletes, and How Are They Implemented?]:https://www.brentozar.com/archive/2020/02/what-are-soft-deletes-and-how-are-they-implemented/
+[Why You Should Switch in Staging Tables Instead of Renaming Them (Dear SQL DBA Episode 26)]:https://littlekendra.com/2017/01/19/why-you-should-switch-in-staging-tables-instead-of-renaming/
+[Changing a column from int to bigint, without downtime]:https://am2.co/2019/12/changing-a-column-from-int-to-bigint-without-downtime/
+[I hate sp_estimate_data_compression_savings]:https://am2.co/2019/12/i-hate-sp_estimate_data_compression_savings/
+[Testing as another user…without their password - impersonate the other user]:https://am2.co/2019/12/testing-as-another-user-without-their-password/
+[How does a database RESTORE affect plan cache?]:https://am2.co/2019/10/how-does-a-database-restore-affect-plan-cache/
+[Recovery of database is 0% complete (approximately 1000000 seconds remain)]:https://am2.co/2019/10/recovery-of-database-is-0-complete-approximately-1000000-seconds-remain/
+[Code to purge data based on creation date]:https://am2.co/2019/04/code-to-purge-data-on-creation-date/
+[Blocking with OBJECT_NAME()]:https://am2.co/2019/12/blocking-with-object_name/
+[Performance Myths: The query result cache]:https://sqlperformance.com/2018/07/performance-myths/query-result-cache
+[Fun with (columnstore) compression on a very large table – part 3]:https://sqlperformance.com/2020/02/columnstore/fun-with-columnstore-compression-on-a-very-large-table-part-3
+[Indexing basics]:https://sqlsunday.com/2013/02/19/indexing-basics/
+[Working with covering indexes]:https://sqlsunday.com/2013/02/24/covering-indexes/
+[Using Erik Darling’s sp_pressure_detector to resolve CPU issues]:https://desertdba.com/using-erik-darlings-sp_pressure_detector-to-resolve-cpu-issues/
+[The Accidental DBA (Day 16 of 30): General Security]:https://www.sqlskills.com/blogs/jonathan/the-accidental-dba-day-16-of-30-general-security/
+[Securing Data in SQL Server]:https://www.sqlskills.com/blogs/jonathan/securing-data-in-sql-server/
+[Performance Testing SQL 2008's Transparent Data Encryption]:https://www.databasejournal.com/features/mssql/article.php/3815501/Performance-Testing-SQL-2008146s-Transparent-Data-Encryption.htm
+[Common SQL Server Security Issues and Solutions]:https://docs.microsoft.com/en-us/previous-versions/technet-magazine/dd637114(v=msdn.10)
+[Chaos Engineering and SQL Server]:https://dbafromthecold.com/2020/01/29/chaos-engineering-and-sql-server/
+[Different methods to attach SQL Server MDF files]:https://www.sqlshack.com/different-methods-to-attach-sql-server-mdf-files/
+[Learn SQL: How to Write a Complex SELECT Query]:https://www.sqlshack.com/learn-sql-how-to-write-a-complex-select-query/
+[Filling In Missing Values Using the T-SQL Window Frame]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/filling-in-missing-values-using-the-t-sql-window-frame/
+[Select * in a view]:https://sqlreitse.home.blog/2020/02/12/select-in-a-view/
+[T-SQL TUESDAY #123: Aggregates of Aggregates using Windowing Functions]:https://jimbabwe.co.za/2020/02/12/t-sql-tuesday-123-life-hacking-by-opening-windows/
+[SQL Server Statistics: Explained]:https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
+[How to Pass a List of Values Into a Stored Procedure]:https://www.brentozar.com/archive/2020/02/how-to-pass-a-list-of-values-into-a-stored-procedure/
+[What's the difference between a temp table and table variable in SQL Server?]:https://dba.stackexchange.com/a/16386/107045
+[Be Mindful of SQL Server Tempdb Use (aka Tempdb Parasites!)]:https://www.sentryone.com/blog/be-mindful-of-sql-server-tempdb-use-aka-tempdb-parasites
+[Robyn Page’s SQL Server Cursor Workbench (Quirky Update)]:https://www.red-gate.com/simple-talk/sql/learn-sql-server/robyn-pages-sql-server-cursor-workbench/
+[Solving the Running Total and Ordinal Rank Problems (Rewritten) (Quirky Update)]:https://www.sqlservercentral.com/articles/solving-the-running-total-and-ordinal-rank-problems-rewritten
+[Running totals in “Denali” CTP3 (Quirky Update)]:https://blog.waynesheffield.com/wayne/archive/2011/08/running-totals-in-denali-ctp3/
+[WHERE GETDATE() BETWEEN StartDate AND EndDate Is Hard to Tune.]:https://www.brentozar.com/archive/2020/02/where-getdate-between-startdate-and-enddate-is-hard-to-tune/
+[WHERE GETDATE() BETWEEN StartDate AND COALESCE(CancelDate, EndDate) Is Even Harder to Tune.]:https://www.brentozar.com/archive/2020/02/where-getdate-between-startdate-and-coalescecanceldate-enddate-is-even-harder-to-tune/
+[How to solve the SQL Identity Crisis in SQL Server]:https://www.sqlshack.com/solve-identity-crisis-sql-server/
+[Significant SQL Server 2019 licensing changes]:https://www.kevinrchant.com/2020/02/17/significant-sql-server-2019-licensing-changes/
+[Indexed View Maintenance Is Only As Bad As Your Indexes]:https://www.erikdarlingdata.com/2020/02/indexed-view-maintenance-is-only-as-bad-as-your-indexes/
+[Why Design Impacts Performance on Microsoft SQL Server]:https://www.sentryone.com/blog/why-design-impacts-performance-microsoft-sql-server
+[Apply versus Nested Loops Join]:https://www.sql.kiwi/2019/06/apply-versus-nested-loops-join.html
+[Inside the Optimizer: Constructing a Plan - Part 1]:https://www.sql.kiwi/2010/07/inside-the-optimiser-constructing-a-plan.html
+[Inside the Optimizer: Constructing a Plan - Part 2]:https://www.sql.kiwi/2010/07/inside-the-optimiser-constructing-a-plan-ii.html
+[Inside the Optimizer: Constructing a Plan - Part 3]:https://www.sql.kiwi/2010/07/inside-the-optimiser-constructing-a-plan-part-3.html
+[Inside the Optimizer: Constructing a Plan - Part 4]:https://www.sql.kiwi/2010/07/inside-the-optimiser-constructing-a-plan-part-4.html
+[Tips for dealing with large SQL Server scripts]:https://www.kevinrchant.com/2020/02/24/tips-for-dealing-with-large-sql-server-scripts/
+[Database Normalization in SQL with Examples]:https://www.sqlservercentral.com/articles/database-normalization-in-sql-with-examples
+[Why SQL Server May Not Parallelize a Query]:https://logicalread.com/2015/10/30/sql-server-query-parallelizing-mc11/
+[Parallelism in SQL Server Execution Plan]:https://www.mssqltips.com/sqlservertip/5404/parallelism-in-sql-server-execution-plan/
+[An XEvent a Day (26 of 31) – Configuring Session Options]:https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-26-of-31-configuring-session-options/
+[Azure SQL Managed Instance Performance Considerations]:https://sqlperformance.com/2020/02/azure/sql-managed-instance-performance-considerations
+[The Curious Case of… whether corruption can propagate to secondary databases]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-whether-corruption-can-propagate-to-secondary-databases/
+[Stop and Think Before You Shrink – Shrinking a SQL Server Database]:https://www.mlakartechtalk.com/stop-and-think-before-you-shrink-shrinking-a-sql-server-database/
+[How to Analyze the SQL Server Error Log]:https://www.mlakartechtalk.com/how-to-analyze-the-sql-server-error-log/
+[Converting SQL Trace to Extended Events in SQL Server 2012]:https://www.sqlskills.com/blogs/jonathan/converting-sql-trace-to-extended-events-in-sql-server-2012/
+[What event information can I get by default from SQL Server?]:https://dba.stackexchange.com/a/48053/107045
+[Removing the default trace – Part 1]:https://sqlperformance.com/2020/03/extended-events/removing-default-trace-1
+[Removing the default trace – Part 2]:https://sqlperformance.com/2020/04/extended-events/removing-default-trace-2
+[Removing the default trace – Part 3]:https://sqlperformance.com/2020/04/extended-events/removing-default-trace-3
+[Keeping DRY in SQL Server with Scalar User Defined Functions – Part 1]:https://www.sentryone.com/blog/keeping-dry-in-sql-server-with-scalar-user-defined-functions-part-1
+[Different Ways to Monitor SQL Server AlwaysOn Availability Groups]:https://codingsight.com/different-ways-to-monitor-sql-server-alwayson-availability-groups/
+[SQL Server internals: Is Order of Column in the table important?]:http://ariely.info/Blog/tabid/83/EntryId/219/SQL-Server-internals-Is-Order-of-Column-in-the-table-important.aspx
+[Code: Order of columns in table might impact the size of the table/database and even related to errors]:http://ariely.info/Blog/tabid/83/EntryId/243/Code-Order-of-columns-in-table-might-impact-the-size-of-the-table-database-and-even-related-to-errors.aspx
+[SQL Server Internals: Getting the data of deleted column]:http://ariely.info/Blog/tabid/83/EntryId/213/SQL-Server-Internals-Getting-the-data-of-deleted-column.aspx
+[Queue table issues with Availability Groups in SQL Server]:mssqltips.com/sqlservertip/6284/queue-table-issues-with-availability-groups-in-sql-server/
+[Transact-SQL: openjson hierarchy solution]:http://ariely.info/Blog/tabid/83/EntryId/239/Transact-SQL-openjson-hierarchy-solution.aspx
+[CREATE DLL TRIGGER ON CREATE_LOGIN to configure default parameters for any new LOGIN]:http://ariely.info/Blog/tabid/83/EntryId/240/CREATE-DLL-TRIGGER-ON-CREATE_LOGIN-to-configure-default-parameters-for-any-new-LOGIN.aspx
+[SQL varchar data type deep dive]:https://www.sqlshack.com/sql-varchar-data-type-deep-dive/
+[What is the datatype SQL_VARIANT]:https://sqlstudies.com/2020/04/16/what-is-the-datatype-sql_varient/
+[An Introduction to Asynchronous Processing with Service Broker]:https://sqlperformance.com/2014/03/sql-performance/intro-to-service-broker
+[Detecting and Alerting on SQL Server Agent Missed Jobs]:https://www.sqlshack.com/detecting-and-alerting-on-sql-server-agent-missed-jobs-2/
+[Execute multiple jobs Synchronously from in a main job]:http://ariely.info/Blog/tabid/83/EntryId/250/Execute-multiple-jobs-Synchronously-from-in-a-main-job.aspx
+[Why Ordering Isn’t Guaranteed Without an ORDER BY]:https://www.brentozar.com/archive/2020/04/why-ordering-isnt-guaranteed-without-an-order-by/
+[How to Attach a SQL Server Database without a Transaction Log and with Open Transactions]:https://www.mssqltips.com/sqlservertip/3579/how-to-attach-a-sql-server-database-without-a-transaction-log-and-with-open-transactions/
+[SQL 2016 - It Just Runs Faster: Indirect Checkpoint Default]:https://docs.microsoft.com/en-gb/archive/blogs/psssql/sql-2016-it-just-runs-faster-indirect-checkpoint-default
+[SQL Server : large RAM and DB Checkpointing]:https://docs.microsoft.com/en-us/archive/blogs/psssql/sql-server-large-ram-and-db-checkpointing
+[Indirect Checkpoint and tempdb – the good, the bad and the non-yielding scheduler]:https://docs.microsoft.com/en-gb/archive/blogs/sql_server_team/indirect-checkpoint-and-tempdb-the-good-the-bad-and-the-non-yielding-scheduler
+[How do checkpoints work and what gets logged]:https://www.sqlskills.com/blogs/paul/how-do-checkpoints-work-and-what-gets-logged/
+[Inside the Storage Engine: What’s in the buffer pool?]:https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-whats-in-the-buffer-pool/
+[What does checkpoint do for tempdb?]:https://www.sqlskills.com/blogs/paul/what-does-checkpoint-do-for-tempdb/
+[Performance issues from wasted buffer pool memory]:https://www.sqlskills.com/blogs/paul/performance-issues-from-wasted-buffer-pool-memory/
+[How It Works: When is the FlushCache message added to SQL Server Error Log?]:https://docs.microsoft.com/en-us/archive/blogs/psssql/how-it-works-when-is-the-flushcache-message-added-to-sql-server-error-log
+[Cross Database Transactions on One Server]:https://michaeljswart.com/2020/05/cross_database_transactions/
+[Your Views Aren’t The Problem. Your Code Is.]:https://www.brentozar.com/archive/2020/05/your-views-arent-the-problem-your-code-is/
+[Negative identity values don’t suck]:https://bornsql.ca/blog/negative-identity-values-dont-suck/
+[How SQL Server stores data types: integers and decimals]:https://bornsql.ca/blog/how-sql-server-stores-data-types-integers-and-decimals/
+[How SQL Server stores data types: DATETIME, DATE, TIME, and DATETIME2]:https://bornsql.ca/blog/how-sql-server-stores-data-types-datetime-date-time-and-datetime2/
+[Can I Offload DBCC CHECKDB To Another Server?]:https://www.brentozar.com/archive/2020/05/can-i-offload-dbcc-checkdb-to-another-server/
+[Negative (-) is an operator and will affect the order of operations.]:https://sqlstudies.com/2020/05/18/negative-is-an-operator-and-will-effect-the-order-of-operations/
+["0 to 60" : Switching to indirect checkpoints]:https://sqlperformance.com/2020/05/system-configuration/0-to-60-switching-to-indirect-checkpoints
+[Parallelism Can Make Queries Perform Worse.]:https://www.brentozar.com/archive/2020/05/parallelism-can-make-queries-perform-worse/
+[A SQL Server DBA myth a day: (15/30) checkpoint only writes pages from committed transactions]:https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-1530-checkpoint-only-writes-pages-from-committed-transactions/
+[Can You Use NVARCHAR As a Universal Parameter? Almost.]:https://www.brentozar.com/archive/2020/04/can-you-use-nvarchar-as-a-universal-parameter-almost/
+[The Learner’s Guide to SQL Server Performance Triage]:https://littlekendra.com/2020/03/19/the-learners-guide-to-sql-server-performance-triage/
+[Learner’s Guide to SQL Server Query Tuning]:https://littlekendra.com/2020/05/01/learners-guide-to-sql-server-query-tuning/
+[How to Get Better Estimates for Modification Queries]:https://www.brentozar.com/archive/2020/04/how-to-get-better-estimates-for-modification-queries/
+[SSMS: Prevent Copy and Paste of Text in “Messages” tab (Cruel Joke #2)]:https://sqlquantumleap.com/2020/05/22/ssms-prevent-copy-and-paste-of-text-in-messages-tab-cruel-joke-2/s
+[Compare the Best SQL Server Performance Monitoring Tools]:https://www.sentryone.com/compare-best-sql-server-monitoring-tools
+[Minimal Logging with INSERT…SELECT into Heap Tables]:https://sqlperformance.com/2019/05/sql-performance/minimal-logging-insert-select-heap
+[Minimal Logging with INSERT…SELECT into Empty Clustered Tables]:https://sqlperformance.com/2019/05/sql-performance/minimal-logging-empty-clustered
+[Minimal Logging with INSERT…SELECT and Fast Load Context]:https://sqlperformance.com/2019/05/sql-performance/minimal-logging-fast-load-context
+[Avoiding SQL Server Upgrade Performance Issues]:https://www.sqlskills.com/blogs/glenn/avoid-sql-server-upgrade-performance-issues/
+[Compatibility Levels and Cardinality Estimation Primer]:https://sqlperformance.com/2019/01/sql-performance/compatibility-levels-and-cardinality-estimation-primer
+[An approach to index tuning – Part 1]:https://sqlperformance.com/2020/03/sql-indexes/an-approach-to-index-tuning-part-1
+[An approach to index tuning – Part 2]:https://sqlperformance.com/2020/04/sql-indexes/an-approach-to-index-tuning-part-2
+[Moving A Database to New Storage With No Downtime]:https://www.bobpusateri.com/archive/2013/03/moving-a-database-to-new-storage-with-no-downtime/
+[RESOURCE_GOVERNOR_IDLE in Azure]:https://joshthecoder.com/2020/06/15/resource-governor-idle-in-azure.html
+[Automated Backup Tuning]:https://sirsql.net/2012/12/13/20121212automated-backup-tuning/
+[Optimizing Database Restores]:https://sirsql.net/2011/09/26/2011926optimizing-database-restores-html/
+[AVAILABILITY_REPLICA - The Deception of the Log Reuse Wait Type]:https://sirsql.net/2020/05/19/the-deception-of-the-log-reuse-wait-type/
+[Changing an INT to a BIGINT with no downtime]:https://michaeljswart.com/2020/06/problem-solving-by-cheating/
+[New Metadata-Only Column Changes in SQL Server 2016]:https://sqlperformance.com/2020/04/database-design/new-metadata-column-changes-sql-server-2016
+[Bandwidth-friendly Query Profiling for Azure SQL Database]:https://sqlperformance.com/2020/04/sql-performance/bandwidth-friendly-query-profiling-azure-sql-database
+[When a Columnstore Index Makes Your Query Fail - 1/0 error]:https://www.brentozar.com/archive/2020/06/when-a-columnstore-index-makes-your-query-fail/
+[Column scope and binding order in subqueries]:https://sqlinthewild.co.za/index.php/2019/04/23/no-this-is-not-a-bug-in-t-sql/
+[Improve SQL Server Extended Events system_health Session]:https://www.mssqltips.com/sqlservertip/6456/improve-sql-server-extended-events-systemhealth-session/
+[Page Life Expectancy Doesn’t Mean Jack, and You Should Stop Looking At It.]:https://www.brentozar.com/archive/2020/06/page-life-expectancy-doesnt-mean-jack-and-you-should-stop-looking-at-it/
+[Unsupported but working versions of SQL Server on Windows Server 2019]:https://bornsql.ca/blog/unsupported-but-working-versions-of-sql-server-on-windows-server-2019/
+[Bad Idea Jeans: Building Big Query Plans]:https://www.brentozar.com/archive/2020/06/bad-idea-jeans-building-big-query-plans/
+[SQL Server performance tuning – RESOURCE_SEMAPHORE waits]:https://www.sqlshack.com/sql-server-performance-tuning-resource_semaphore-waits/
+[Use session_context to create a “variable” that lasts between batches.]:https://sqlstudies.com/2020/05/26/use-session_context-to-create-a-variable-that-lasts-between-batches/
+[Phase out CONTEXT_INFO() in SQL Server 2016 with SESSION_CONTEXT()]:https://www.mssqltips.com/sqlservertip/4094/phase-out-contextinfo-in-sql-server-2016-with-sessioncontext/
+[How to Balance SQL Server Core Licenses Across NUMA Nodes]:https://glennsqlperformance.com/2020/06/25/how-to-balance-sql-server-core-licenses-across-numa-nodes/
+[What is the Difference Between Physical Sockets, Physical Cores, and Logical Cores?]:https://glennsqlperformance.com/2019/12/18/what-is-the-difference-between-physical-sockets-physical-cores-and-logical-cores/
+[Troubleshooting SQL Server Wait Stats]:https://www.sentryone.com/white-papers/troubleshooting-sql-server-wait-stats
+[The 201 Buckets Problem, Part 1: Why You Still Don’t Get Accurate Estimates]:https://www.brentozar.com/archive/2020/07/the-201-buckets-problem-part-1-why-you-still-dont-get-accurate-estimates/
+[The 201 Buckets Problem, Part 2: How Bad Estimates Backfire As Your Data Grows]:https://www.brentozar.com/archive/2020/07/the-201-buckets-problem-part-2-how-bad-estimates-backfire-as-your-data-grows/
+[Sql Server — Widely Random Query Exec Times (cxconsumer Wait/cxpacket) & Possible Remediation]:https://viktorsrandomposts.wordpress.com/2020/06/26/sql-server-widely-random-query-exec-times-cxconsumer-wait-possible-remediation/
+[How MAXDOP Really Works]:https://www.sql.kiwi/2020/07/how-maxdop-really-works.html
+[What is MaxDOP controlling?]:https://techcommunity.microsoft.com/t5/sql-server/what-is-maxdop-controlling/ba-p/1505968
+[What If You Really DO Need to Shrink a Database?]:https://www.brentozar.com/archive/2020/07/what-if-you-really-do-need-to-shrink-a-database/
+[Everything I Never Wanted to Know About Collation]:https://littlekendra.com/2020/07/16/everything-i-never-wanted-to-know-about-collation-14-minute-video-podcast-episode/
+[Comparing SSIS And Azure Data Factory]:https://www.timmitchell.net/post/2020/07/16/comparing-ssis-and-azure-data-factory/
+[sp_Blitz for All Servers]:https://garrybargsley.com/2020/07/14/sp_blitz-for-all-servers/
+[Where is the SQL Server Community Networking Online?]:https://www.brentozar.com/archive/2020/07/where-is-the-sql-server-community-networking-online/
+[Make the most out of your Azure Disks using Storage Pools]:https://blog.coeo.com/make-the-most-out-of-your-azure-disks-using-storage-pools
+[SQL Server High Availability Solutions on Azure VMs]:https://www.brentozar.com/archive/2020/07/where-is-the-sql-server-community-networking-online/
+[How to Get Started with SQL Server Management Studio]:https://www.brentozar.com/archive/2020/07/how-to-get-started-with-sql-server-management-studio/
+[How should I store currency values in SQL Server?]:https://bornsql.ca/blog/how-should-i-store-currency-values-in-sql-server/
+[Read committed isolation level doesn’t guarantee much…]:https://www.sqlskills.com/blogs/paul/read-committed-doesnt-guarantee-much/
+[Prevent Unexpected Failovers When Patching AGs]:https://joshthecoder.com/2020/05/21/prevent-unexpected-failovers-when-patching-ags.html
+[Updating Statistics Causes Parameter Sniffing]:https://www.brentozar.com/archive/2020/06/updating-statistics-causes-parameter-sniffing/
+[The Ascending Key Problem in Fact Tables– Part one: Pain!]:https://kejserbi.wordpress.com/2011/07/01/the-ascending-key-problem-in-fact-tables-part-one-pain/
+[The Ascending Key Problem In Fact Tables –Part Two: Stat Job!]:http://blog.kejser.org/the-ascending-column-problem-in-fact-tables-part-two-stat-job/
+[Are Statistics Being Used for inserted and deleted tables and table variables?]:https://community.idera.com/database-tools/blog/b/community_blog/posts/are-statistics-being-used
+[Tackling Imperial and US Customary Measurements in Databases]:https://www.red-gate.com/simple-talk/blogs/tackling-imperial-and-us-customary-measurements-in-databases/
+[In-Memory OLTP Best Practices – Part 1]:https://devblogs.microsoft.com/premier-developer/in-memory-oltp-best-practices-part-1/
+[In-Memory OLTP Best Practices – Part 2]:https://devblogs.microsoft.com/premier-developer/in-memory-oltp-best-practices-part-2/
+[Things I Wished More Developers Knew About Databases]:https://medium.com/@rakyll/things-i-wished-more-developers-knew-about-databases-2d0178464f78
+[Online migrations at scale]:https://stripe.com/blog/online-migrations
+[The Dirty (Baker’s) Dozen of SQL Server Technical Debt]:https://blog.coeo.com/the-dirty-bakers-dozen-of-sql-server-technical-debt
+[15 SQL Server Performance Counters to Monitor In 2020]:https://www.sentryone.com/blog/allenwhite/sql-server-performance-counters-to-monitor
+[Pulling Group By Above a Join]:https://www.sql.kiwi/2020/05/pulling-group-by-above-join.html
+[SQLskills SQL101: Running out of ints and bigints]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-running-out-of-ints-and-bigints/
+[Top Asked Availability Group Questions… and Maybe Some Helpful Tidbits as Answers]:https://www.seangallardy.com/top-asked-availability-group-questions-and-maybe-some-helpful-tidbits-as-answers/
+[Encrypting SQL Server Database Backups]:https://sqlundercover.com/2018/04/04/encrypting-sql-server-database-backups/
+[Using Track Causality to Understand Query Execution]:https://sqlperformance.com/2019/01/extended-events/using-track-causality-to-understand-query-execution
+[Understanding SQL Server Backup Types]:https://www.sqlshack.com/understanding-sql-server-backup-types/
+[Scripting the Description of Database Tables Using Extended Properties]:https://www.red-gate.com/simple-talk/sql/database-delivery/scripting-description-database-tables-using-extended-properties/
+[The Table Variable in SQL Server]:https://www.sqlshack.com/the-table-variable-in-sql-server/
+[Multiple Plans for an "Identical" Query]:https://sqlperformance.com/2014/11/t-sql-queries/multiple-plans-identical-query
+[Another argument for stored procedures versus ORM versus Add Hoc Queries]:https://sqlperformance.com/2013/05/t-sql-queries/another-argument-for-stored-procedures
+[Bad habits to kick : avoiding the schema prefix]:https://sqlblog.org/2019/09/12/bad-habits-to-kick-avoiding-the-schema-prefix
+[How not to call Hekaton natively-compiled stored procedures]:https://sqlperformance.com/2015/06/t-sql-queries/how-not-to-call-hekaton-procedures
+[A One-Slide Summary of the Differences Between TDE and Always Encrypted]:https://www.brentozar.com/archive/2020/07/a-one-slide-summary-of-the-differences-between-tde-and-always-encrypted/
+[Remember “Nothing Stops a Hekaton Transaction?” Yeah, About That.]:https://www.brentozar.com/archive/2020/07/remember-nothing-stops-a-hekaton-transaction-yeah-about-that/
+[Finding & Downloading Required SQL Server Updates]:https://flxsql.com/downloading-latest-sql-server-updates/
+[SQLskills SQL101: Why do some wait types need to be ignored?]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-why-do-some-wait-types-need-to-be-ignored/
+[What is the SOS_WORK_DISPATCHER Wait Type? (Or how to work with Call Stacks in SQL Server)]:https://orderbyselectnull.com/2018/09/27/what-is-the-sos_work_dispatcher-wait-type/
+[SQL Server 2019 Aggregate Splitting]:https://www.sql.kiwi/2020/08/sql-server-2019-aggregate-splitting.html
+[Security Best Practice: dny and revoke permissions granted to All Users by default - HIGHLY IMPORTANT!]:https://ariely.info/Blog/tabid/83/EntryId/241/Security-Best-Practice-dny-and-revoke-permissions-granted-to-All-Users-by-default-HIGHLY-IMPORTANT.aspx
+[The Trillion Row Operator]:https://www.erikdarlingdata.com/2020/08/the-trillion-row-operator/
+[Temporal Tables and Table Partitioning: Not If You Like Switching Partitions]:https://www.erikdarlingdata.com/sql-server/temporal-tables-and-table-partitioning-not-if-you-like-switching-partitions/
+[Long Running Query on Read-Only Replica that takes moments on the Primary]:https://dba.stackexchange.com/questions/237671/long-running-query-on-read-only-replica-that-takes-moments-on-the-primary/
+[Date Tables are Great for Users, but Not So Great for Performance]:https://www.brentozar.com/archive/2020/08/date-tables-are-great-for-users-but-not-so-great-for-performance/
+[Should I install SSMS on a server running SQL Server?]:https://am2.co/2020/04/should-i-install-ssms-on-a-server-running-sql-server/
+[Finding a table name from a page ID]:https://www.sqlskills.com/blogs/paul/finding-table-name-page-id/
+[Finding Distinct Values Quickly]:https://sqlperformance.com/2020/03/sql-performance/finding-distinct-values-quickly
+[Can You Fail To Spill To tempdb?]:https://www.joshthecoder.com/2019/07/17/can-you-fail-to-spill-to-tempdb.html
+[Migrating SQL workloads to Microsoft Azure: Databases Trip to Azure SQL Database]:https://www.sqlshack.com/migrate-sql-workloads-to-microsoft-azure-databases-trip-to-azure-sql-database/
+[How It Works: Bob Dorr's SQL Server I/O Presentation]:https://techcommunity.microsoft.com/t5/sql-server-support/how-it-works-bob-dorr-s-sql-server-i-o-presentation/ba-p/316031
+[Who does SQL Server run xp_cmdshell command as?]:https://stevestedman.com/2020/04/who-does-sql-server-run-xp_cmdshell-command-as/
+[Transaction Modes in SQL Server]:https://36chambers.wordpress.com/2020/08/10/transaction-modes-in-sql-server/
+[Working Effectively with Legacy SQL]:https://www.catallaxyservices.com/presentations/legacy-sql/
+[A SQL Server DBA myth a day: (26/30) nested transactions are real]:https://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2630-nested-transactions-are-real/
+[dbatools multithreading commands with PoshRSJob module]:https://dbatools.io/multithread/
+[SQL Server Debugging with WinDbg – an Introduction]:https://www.sqlpassion.at/archive/2014/05/05/sql-server-debugging-with-windbg-an-introduction/
+[Looking deeper into SQL Server using Minidumps]:https://docs.microsoft.com/en-gb/archive/blogs/sqlcat/looking-deeper-into-sql-server-using-minidumps
+[Anatomy of a spool operators in SQL Server execution plans]:https://sqlserverfast.com/articles/anatomy-of-a-spool/
+[CAST v/s CONVERT – Is there a difference as far as SQL Server is concerned? Which is better?]:https://nakulvachhrajani.com/2011/07/18/cast-vs-convert-is-there-a-difference-as-far-as-sql-server-is-concerned-which-is-better/
+[#BackToBasics: CAST vs. CONVERT]:https://www.sentryone.com/blog/aaronbertrand/backtobasics-cast-vs-convert
+[Productivity Hacks: Migrate in Minutes to the Most Current Version of SQL Server]:https://www.rubrik.com/blog/migrate-quickly-current-version-sql-server/
+[Database alias in Microsoft SQL Server]:http://www.baud.cz/blog/database-alias-in-microsoft-sql-server
+[The Curious Case of… the 8060-byte row size limit]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-the-8060-byte-row-size-limit/
+[.NET TransactionScope Considered Annoying - Default Isolation Level is Serializable]:https://joshthecoder.com/2020/07/27/transactionscope-considered-annoying.html
+[Why You’re Tuning Stored Procedures Wrong (the Problem with Local Variables)]:https://www.brentozar.com/archive/2014/06/tuning-stored-procedures-local-variables-problems/
+[Yet Another Post About Local Variables]:https://www.erikdarlingdata.com/sql-server/yet-another-post-about-local-variables/
+[Cleaning up Backups from Azure Blob Storage]:http://www.nikoport.com/2020/03/30/cleaning-up-backups-from-azure-blob-storage/
+[Temporary Table Caching Explained]:https://www.sql.kiwi/2012/08/temporary-object-caching-explained.html
+[SQL Server Temporary Object Caching]:https://sqlperformance.com/2017/05/sql-performance/sql-server-temporary-object-caching
+[3 Ways to Run DBCC CHECKDB Faster]:https://www.brentozar.com/archive/2020/08/3-ways-to-run-dbcc-checkdb-faster/
+[Back Up SQL Server 43%-67% Faster by Writing to Multiple Files]:https://www.brentozar.com/archive/2020/08/back-up-sql-server-43-67-faster-by-writing-to-multiple-files/
+[Bad Habits to Kick : Using SELECT * / omitting the column list]:https://sqlblog.org/2009/10/10/bad-habits-to-kick-using-select-omitting-the-column-list
+[All The Problems With Select *]:https://www.erikdarlingdata.com/sql-server/all-the-problems-with-select/
+[When Select * Doesn’t Matter]:https://www.erikdarlingdata.com/sql-server/when-select-doesnt-matter/
+[HT Waits – Explained and Animated]:https://forrestmcdaniel.com/2020/08/12/ht-waits-explained-and-animated/
+[SQL Server 100% Online Deployments]:https://michaeljswart.com/2018/01/100-online-deployments/
+[The Curious Case of… setting up a server for DBCC CHECKDB]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-setting-up-a-server-for-dbcc-checkdb/
+[When should a primary key be declared non-clustered?]:https://dba.stackexchange.com/q/7741/107045
+[Guid vs INT - Which is better as a primary key?]:https://dba.stackexchange.com/q/264/107045
+[Control SQL Jobs based on HADR Role – Taking it to the Next Level]:https://eitanblumin.com/2020/05/26/sql-jobs-based-on-hadr-role-next-level/
+[SQL Friday #16: Eitan Blumin on “How to HADR Your SQL Jobs”]:https://sqlfriday.net/past-sql-friday-sessions/sql-friday-16-eitan-blumin-on-how-to-hadr-your-sql-jobs/
+[Choosing the Correct Azure VM Size for Your Workload]:https://www.sentryone.com/blog/choosing-the-correct-azure-vm-size-for-your-workload
+[Table Partitioning in SQL Server – The Basics]:https://www.cathrinewilhelmsen.net/2015/04/12/table-partitioning-in-sql-server/
+[Table Partitioning in SQL Server – Partition Switching]:https://www.cathrinewilhelmsen.net/2015/04/19/table-partitioning-in-sql-server-partition-switching/
+[TempDB in SQL Server]:https://www.sentryone.com/tempdb-in-sql-server
+[SQL Server’s Cost Threshold for Parallelism]:https://www.brentozar.com/archive/2014/11/sql-server-cost-threshold-for-parallelism/
+[How many CPUs is my parallel query using in SQL Server?]:https://www.brentozar.com/archive/2014/11/many-cpus-parallel-query-using-sql-server/
+[Protecting your data against unauthorised reads on SQL Server]:https://monin-it.be/2020/06/23/protectingyourdata/
+[SET IMPLICIT_TRANSACTIONS ON Is One Hell of a Bad Idea]:https://www.brentozar.com/archive/2018/02/set-implicit_transactions-one-hell-bad-idea/
+[Tempdb: The Ghost Of Version Store]:https://kohera.be/blog/sql-server/tempdb-the-ghost-of-version-store/
+[Row Versioning Concurrency in SQL Server]:https://www.red-gate.com/simple-talk/sql/t-sql-programming/row-versioning-concurrency-in-sql-server/
+[When Tempdb Becomes Permanentdb (In-memory tempdb metadata and Resource governor problems)]:https://kohera.be/blog/sql-server/when-tempdb-becomes-permanentdb/
+[The Best Medium-Hard Data Analyst SQL Interview Questions]:https://quip.com/2gwZArKuWk7W
+[Starting SQL: Why Not Make Everything Dynamic?]:https://www.erikdarlingdata.com/starting-sql/starting-sql-why-not-make-everything-dynamic/
+[dbatools multithreading commands]:https://dbatools.io/multithread/
+[Preventing Brute Force Attacks in SQL Server]:https://blog.coeo.com/preventing-brute-force-attacks-in-sql-server
+[Asynchronous T-SQL Execution Without Service Broker]:https://www.codeproject.com/Articles/29356/Asynchronous-T-SQL-Execution-Without-Service-Broke
+[Using hash values in SSIS to determine when to insert or update rows]:https://www.mssqltips.com/sqlservertip/3170/using-hash-values-in-ssis-to-determine-when-to-insert-or-update-rows/
+[Capturing Queries Can Be A Pain]:https://www.scarydba.com/2020/08/03/capturing-queries-can-be-a-pain/
+[Building full-text indexes using the Sphinx search engine]:https://www.sqlshack.com/building-full-text-indexes-using-the-sphinx-search-engine/
+[Starting SQL: Measuring A Query]:https://www.erikdarlingdata.com/starting-sql/starting-sql-measuring-a-query/
+[When to use SET vs SELECT when assigning values to variables in SQL Server]:https://www.mssqltips.com/sqlservertip/1888/when-to-use-set-vs-select-when-assigning-values-to-variables-in-sql-server/
+[What is the difference between SET and SELECT when assigning values to variables, in T-SQL?]:http://vyaskn.tripod.com/differences_between_set_and_select.htm
+[CHECKDB From Every Angle: How long will CHECKDB take to run?]:https://www.sqlskills.com/blogs/paul/checkdb-from-every-angle-how-long-will-checkdb-take-to-run/
+[CHECKDB From Every Angle: Consistency Checking Options for a VLDB]:https://www.sqlskills.com/blogs/paul/checkdb-from-every-angle-consistency-checking-options-for-a-vldb/
+[Minimizing the impact of DBCC CHECKDB : DOs and DON'Ts]:https://sqlperformance.com/2012/11/io-subsystem/minimize-impact-of-checkdb
+[A faster CHECKDB – Part II]:https://web.archive.org/web/20150315173540/http://blogs.msdn.com/b/psssql/archive/2012/02/23/a-faster-checkdb-part-ii.aspx
+[A faster CHECKDB – Part III]:https://web.archive.org/web/20150206201933/http://blogs.msdn.com/b/psssql/archive/2014/11/10/a-faster-checkdb-part-iii.aspx
+[A faster CHECKDB – Part IV (SQL CLR UDTs)]:https://web.archive.org/web/20150205043737/http://blogs.msdn.com/b/psssql/archive/2015/01/26/a-faster-checkdb-part-iv-sql-clr-udts.aspx
+[Minimize performance impact of SQL Server DBCC CHECKDB]:https://www.mssqltips.com/sqlservertip/2399/minimize-performance-impact-of-sql-server-dbcc-checkdb/
+[Starting SQL: A Little More Fun With Logging Dynamic SQL]:https://www.erikdarlingdata.com/starting-sql/starting-sql-a-little-more-fun-with-logging-dynamic-sql/
+[Allocation Order Scans]:https://sqlperformance.com/2015/01/t-sql-queries/allocation-order-scans
+[Parameter Sniffing in SQL Server 2019: Air_Quote_Actual Plans]:https://www.brentozar.com/archive/2019/04/parameter-sniffing-in-sql-server-2019-air_quote_actual-plans/
+[Guide For Set Up Of Telegraf For Monitoring Sql Server Xplat]:https://tracyboggiano.com/archive/2018/02/setup-of-telegraf/
+[Azure Table Storage Tips for the RDBMS Developer]:https://www.sentryone.com/blog/azure-table-storage-tips-for-the-rdbms-developer
+[sql_handle and the SQL Server batch text hash]:https://www.sql.kiwi/2020/10/sqlhandle-and-sql-server-batch-text-hash.html
+[Navigating DBCC CHECKDB for VLDB]:https://sqlblog.org/2020/11/05/navigating-dbcc-checkdb-for-vldb
+[Hidden Formatting Troubles with STR() (SQL Spackle)]:https://www.sqlservercentral.com/articles/hidden-formatting-troubles-with-str-sql-spackle
+[The What, Why, When, and How of Incremental Loads]:https://www.timmitchell.net/post/2020/07/23/incremental-loads/
+[How Do I Know If My Query Is Good Enough for Production?]:https://www.brentozar.com/archive/2020/08/how-do-i-know-if-my-query-is-good-enough-for-production/
+[How to Find Out Whose Queries are Using The Most CPU]:https://www.brentozar.com/archive/2020/08/how-to-find-out-whose-queries-are-using-the-most-cpu/
+[Limitations of SQL Server Native Backup and Restore in Amazon RDS]:https://www.mssqltips.com/sqlservertip/5042/limitations-of-sql-server-native-backup-and-restore-in-amazon-rds/
+[SQL Server Native Backup and Restore in Amazon RDS]:https://www.mssqltips.com/sqlservertip/5041/sql-server-native-backup-and-restore-in-amazon-rds/
+[What Is the SQL Server CEIP Service (telemetry)?]:https://www.brentozar.com/archive/2020/10/what-is-the-sql-server-ceip-service/
+[Maximum Simultaneous User Connections]:http://www.sqlnuggets.com/blog/disable-telemetry-on-multiple-sql-servers-with-powershell/
+[Find Database Connection Leaks in Your Application]:https://sqlperformance.com/2017/07/sql-performance/find-database-connection-leaks
+[How to Troubleshoot THREADPOOL Waits and Deadlocked Schedulers]:https://eitanblumin.com/2020/10/05/how-to-troubleshoot-threadpool-waits-and-deadlocked-schedulers/
+[Prevent Lock Escalation On Indexed Views]:https://kohera.be/blog/sql-server/prevent-lock-escalation-on-indexed-views/
+[Concatenating Strings in SQL Server]:https://www.madeiradata.com/post/concatenating-strings
+[Why Full Text’s CONTAINS Queries Are So Slow]:https://www.brentozar.com/archive/2020/11/why-full-texts-contains-queries-are-so-slow/
+[Migrating SSIS to Azure – an Overview]:https://sqlkover.com/migrating-ssis-to-azure-an-overview/
+[(Video) How to Troubleshoot Someone Else’s Temp Table Contents]:https://www.brentozar.com/archive/2020/11/video-how-to-troubleshoot-someone-elses-temp-table-contents/
+[A Parameterization Puzzle With TOP: Part 1]:https://www.erikdarlingdata.com/execution-plans/a-parameterization-puzzle-with-top-part-1/
+[A Parameterization Puzzle With TOP: Part 2]:https://www.erikdarlingdata.com/execution-plans/a-parameterization-puzzle-with-top-part-2/
+[T-SQL: Get The Text Between Two Delimiters]:https://www.erikdarlingdata.com/sql-server/t-sql-get-the-text-between-two-delimiters/
+[Explore dynamic management views for monitoring SQL Server Always On Availability Groups]:https://www.sqlshack.com/explore-dynamic-management-views-for-monitoring-sql-server-always-on-availability-groups/
+[Deploy SQLWATCH to SQL Server using GitHub Actions]:https://www.kevinrchant.com/2020/11/17/deploy-sqlwatch-to-sql-server-using-github-actions/
+[SQL Server table hints – WITH (NOLOCK) best practices]:https://www.sqlshack.com/understanding-impact-clr-strict-security-configuration-setting-sql-server-2017/
+[Memory-Optimized TempDB Metadata in SQL Server 2019]:https://www.mssqltips.com/sqlservertip/6230/memoryoptimized-tempdb-metadata-in-sql-server-2019/
+[SQLskills SQL101: Should you kill that long-running transaction?]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-should-you-kill-that-long-running-transaction/
+[A quick and dirty scan of a list of instances using a dynamic linked server]:https://sqlstudies.com/2020/11/12/a-quick-and-dirty-scan-of-a-list-of-instances-using-a-dynamic-linked-server/
+[sp_whoisactive: Analyzing Tempdb Contention]:http://whoisactive.com/docs/21_tempdb/
+[How to Choose Between RCSI and Snapshot Isolation Levels]:https://littlekendra.com/2016/02/18/how-to-choose-rcsi-snapshot-isolation-levels/
+[Explore the SQL query table hint READPAST]:https://www.sqlshack.com/explore-the-sql-query-table-hint-readpast/
+[How Bad Statistics Cause Bad SQL Server Query Performance]:https://www.brentozar.com/archive/2020/11/how-bad-statistics-cause-bad-sql-server-query-performance/
+[How Scalar User-Defined Functions Slow Down Queries]:https://www.brentozar.com/archive/2020/11/how-scalar-user-defined-functions-slow-down-queries/
+[Could verifying your backups be costing you money?]:https://blog.coeo.com/verifying-backups-cost
+[Extended Events: System_health And A Long Running Query]:https://www.scarydba.com/2020/03/09/extended-events-system_health-and-a-long-running-query/
+[Altering an indexed view in SQL Server drops all indexes]:https://littlekendra.com/2020/03/02/altering-an-indexed-view-in-sql-server-drops-all-indexes/
+[Deprecated and discontinued features in SQL Server]:https://bornsql.ca/blog/deprecated-and-discontinued-features-in-sql-server/
+[Query Store, Plan Forcing, And Drop/create]:https://www.scarydba.com/2020/03/02/query-store-plan-forcing-and-drop-create/
+[Uncommon SQL in SQL Server]:https://nocolumnname.blog/2020/11/20/uncommon-sql/
+[Configure SQL Server Replication between AWS RDS SQL Server and On-premises SQL Server]:https://www.sqlshack.com/configure-sql-server-replication-between-aws-rds-sql-server-and-on-premises-sql-server/
+[Import data into Azure SQL database from AWS Redshift]:https://www.sqlshack.com/import-data-into-azure-sql-database-from-aws-redshift/
+[When You’re Troubleshooting Blocking, Look at Query #2, Too.]:https://www.brentozar.com/archive/2020/11/when-youre-troubleshooting-blocking-look-at-query-2-too/
+[Finding the One Query to Tune in a Multi-Query Batch]:https://www.brentozar.com/archive/2020/11/finding-the-one-query-to-tune-in-a-multi-query-batch/
+[Recursion in SQL Explained Visually]:https://medium.com/swlh/recursion-in-sql-explained-graphically-679f6a0f143b
+[Viva la Famiglia! Stored procedure for created recursive family tree]:https://bradsruminations.blogspot.com/2009/10/viva-la-famiglia.html
+[How to Set & Get the Next ID Without Serializable Isolation]:https://www.brentozar.com/archive/2020/11/how-to-set-get-the-next-id-without-serializable-isolation/
+[Discovering Three or Four Part Names in SQL Server Database Code]:https://www.red-gate.com/simple-talk/blogs/discovering-three-or-four-part-names-in-sql-server-database-code/
+[Troubleshooting RESOURCE_SEMAPHORE_QUERY_COMPILE Helper Queries]:https://www.erikdarlingdata.com/sql-server/troubleshooting-resource_semaphore_query_compile-helper-queries/
+[When Do I Need to Use DESC in Indexes?]:https://www.brentozar.com/archive/2020/11/when-do-i-need-to-use-desc-in-indexes/
+[Export Power BI Desktop data to SQL Server]:https://ruiromanoblog.wordpress.com/2016/04/21/use-power-bi-desktop-as-an-etl-tool/
+[Exploring errors to reveal unauthorized information]:https://www.red-gate.com/simple-talk/sql/database-administration/exploring-errors-to-reveal-unauthorized-information/
+[How to run your CTE just once, and re-use the output]:https://sqlsunday.com/2020/12/01/run-your-cte-just-once-and-reuse-output/
+[Documenting SSIS Packages using Sequence Diagrams]:https://www.sqlshack.com/documenting-ssis-packages-using-sequence-diagrams-2/
+[Performance testing with DBCC DROPCLEANBUFFERS]:https://www.dbdelta.com/performance-testing-with-dbcc-dropcleanbuffers/
+[Optimizing memory settings in Analysis Services]:https://www.sqlbi.com/articles/optimizing-memory-settings-in-analysis-services/
+[VMware and SQL Server Best Practices]:https://straightpathsql.com/archives/2020/12/vmware-and-sql-server-best-practices/
+[Autoparameterized Trivial Queries May Not Get Partition Elimination]:https://www.brentozar.com/archive/2020/12/autoparameterized-trivial-queries-may-not-get-partition-elimination/
+[Trigram Wildcard String Search in SQL Server]:https://sqlperformance.com/2017/09/sql-performance/sql-server-trigram-wildcard-search
+[Which Locks Count Toward Lock Escalation?]:https://littlekendra.com/2017/04/03/which-locks-count-toward-lock-escalation/
+[The challenge is on! Community call for creating the fastest number series generator]:https://sqlperformance.com/2020/12/t-sql-queries/number-series-challenge
+[SQL Injection Prevention Cheat Sheet]:https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
+[A cheat sheet for isolation levels in SQL Server]:https://blog.coeo.com/a-cheat-sheet-for-isolation-levels-in-sql-server
+[Don't Fear the Trace]:https://www.sentryone.com/blog/dont-fear-the-trace
+[Which sp_configure Options Clear the Plan Cache?]:https://www.brentozar.com/archive/2017/09/sp_configure-options-clear-plan-cache/
+[The danger of HADR_SYNC_COMMIT wait and synchronous replication in AlwaysOn Availability Groups]:https://aboutsqlserver.com/2019/06/09/hadr-sync-commit/
+[Faster SQL Pagination with Keysets, Continued]:https://blog.jooq.org/2013/11/18/faster-sql-pagination-with-keysets-continued/
+[We need tool support for keyset pagination]:https://use-the-index-luke.com/no-offset
+[Index-Only Scan: Avoiding Table Access]:https://use-the-index-luke.com/sql/clustering/index-only-scan-covering-index
+[The two top performance problems caused by ORM tool]:https://use-the-index-luke.com/blog/2013-04/the-two-top-performance-problems-caused-by-ORM-tools
+[Nested loops join and n1 problem in ORM]:https://use-the-index-luke.com/sql/join/nested-loops-join-n1-problem
+[Hash join partial objects]:https://use-the-index-luke.com/sql/join/hash-join-partial-objects
+[Myth: Select * (asterisk) is bad]:https://use-the-index-luke.com/blog/2013-08/its-not-about-the-star-stupid
+[Indexing LIKE Filters]:https://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning
+[Date and time conditions causing SQL performance problems]:https://use-the-index-luke.com/sql/where-clause/obfuscation/dates
+[Dates and Times in SQL Server: more functions you should never use]:https://bornsql.ca/blog/dates-and-times-in-sql-server-more-functions-you-should-never-use/
+[Dates and Times in SQL Server: T-SQL functions to get the current date and time]:https://bornsql.ca/blog/dates-times-sql-server-t-sql-functions-get-current-date-time/
+[Super Scaling Queues Using the LMax Disruptor Pattern And The In-Memory OLTP Engine]:https://chrisadkin.io/2016/01/18/super-scaling-queues-using-the-lmax-disruptor-pattern-and-the-in-memory-oltp-engine/
+[Early History of SQL]:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6359709
+[Is it a bad practice to always create a transaction?]:https://dba.stackexchange.com/a/43256
+[Incomplete checkpoints and recovery]:https://www.sqlskills.com/blogs/paul/incomplete-checkpoints-and-recovery/
+[4 SQL Injection Techniques For Stealing Data]:https://bertwagner.com/posts/4-sql-injection-techniques-for-stealing-data/
+[Towards Safer Dynamic SQL]:https://www.erikdarlingdata.com/sql-server/towards-safer-dynamic-sql/
+[Setting the timezone to anything other than UTC]:http://yellerapp.com/posts/2015-01-12-the-worst-server-setup-you-can-make.html
+[Advanced Service Broker Sample: Multi-Threading]:https://eitanblumin.com/2018/10/31/advanced-service-broker-sample-multi-threading/
+[Copy a SQL Server database with just the objects and no data]:https://www.mssqltips.com/sqlservertip/4664/copy-a-sql-server-database-with-just-the-objects-and-no-data/
+[QOMPLX Knowledge: Kerberoasting Attacks Explained]:https://www.qomplx.com/qomplx-knowledge-kerberoasting-attacks-explained/
+[How to create a SQL dependency diagram in SQL Server]:https://www.sqlshack.com/how-to-create-a-sql-dependency-diagram-in-sql-server/
+[Query Memory Grants and Resource Semaphores in SQL Server]:https://www.sqlpassion.at/archive/2018/10/16/query-memory-grants-and-resource-semaphores-in-sql-server/
+[Using a Table of Numbers (or a Table of Dates, Months etc)]:https://www.sommarskog.se/Short%20Stories/table-of-numbers.html
+[SQL Server MDF and NDF files]:https://www.sqlrecoverysoftware.net/sql-server-mdf-file/recover-mdf-ndf.html
+[The SQL Standard ANSI ISO is Public!]:https://modern-sql.com/standard
+[SQL Server Full Backup]:https://sqlbak.com/academy/full-backup
+[Import data from PDF files using R Scripts SQL Server]:https://www.sqlshack.com/import-data-from-pdf-files-using-r-scripts-sql-server/
+[Adding Additional Data Files To The TempDB Database In SQL Server]:https://jackworthen.com/2017/08/24/adding-additional-data-files-to-the-tempdb-database-in-sql-server/
+[SQL Server Isolation Levels: A Series]:https://sqlperformance.com/2014/07/t-sql-queries/isolation-levels
+[SQL Server Isolation Levels: The ACID Properties of Statements & Transactions]:https://sqlperformance.com/2014/02/t-sql-queries/confusion-caused-by-trusting-acid
+[SQL Server Isolation Levels: The Serializable Isolation Level]:https://sqlperformance.com/2014/04/t-sql-queries/the-serializable-isolation-level
+[SQL Server Isolation Levels: The Repeatable Read Isolation Level]:https://sqlperformance.com/2014/04/t-sql-queries/the-repeatable-read-isolation-level
+[SQL Server Isolation Levels: The Read Committed Isolation Level]:https://sqlperformance.com/2014/04/t-sql-queries/the-read-committed-isolation-level
+[SQL Server Isolation Levels: Read Committed Snapshot Isolation]:https://sqlperformance.com/2014/05/t-sql-queries/read-committed-snapshot-isolation
+[SQL Server Isolation Levels: Data Modifications under Read Committed Snapshot Isolation]:https://sqlperformance.com/2014/05/t-sql-queries/data-modifications-under-rcsi
+[SQL Server Isolation Levels: The SNAPSHOT Isolation Level]:https://sqlperformance.com/2014/06/sql-performance/the-snapshot-isolation-level
+[SQL Server Isolation Levels: The Read Uncommitted Isolation Level]:https://sqlperformance.com/2015/04/t-sql-queries/the-read-uncommitted-isolation-level
+[The OUTPUT Clause for the MERGE Statements]:https://www.sqlservercentral.com/articles/the-output-clause-for-the-merge-statements
+[SQLskills SQL101: Query plans based on what’s in memory]:https://www.sqlskills.com/blogs/paul/sqlskills-sql101-query-plans-based-on-whats-in-memory/
+[Performance: String Concatenation in SQL Server]:https://stevestedman.com/2021/01/performance-string-concatenation-in-sql-server/
+[Performance: Faster way to concatenate longer string]:https://stevestedman.com/2021/01/performance-faster-way-to-concatenate-longer-string/
+[Identifying Cost-Saving Opportunities in Azure DevOps]:https://www.sentryone.com/blog/cost-savings-in-azuredevops
+[One wide index or multiple narrow indexes?]:https://sqlinthewild.co.za/index.php/2010/09/14/one-wide-index-or-multiple-narrow-indexes/
+[The Hidden Danger of Readable Secondaries in SQL Server AlwaysOn Availability Groups]:https://www.apress.com/de/blog/all-blog-posts/readable-secondaries-in-sql-server/16064064
+[Poor Man’s Resource Governor: Database-Scoped Configurations]:https://www.brentozar.com/archive/2020/10/poor-mans-resource-governor-database-scoped-configurations/
+[SQL Server Suddenly Frozen? You Might Be Snapshotting Too Many Databases.]:https://www.brentozar.com/archive/2020/09/sql-server-suddenly-frozen-you-might-be-snapshotting-too-many-databases/
+[How to Batch Updates A Few Thousand Rows at a Time]:https://www.brentozar.com/archive/2020/12/how-to-batch-updates-a-few-thousand-rows-at-a-time/
+[USING AMAZON FSX FOR SQL SERVER FAILOVER CLUSTER INSTANCES – WHAT YOU NEED TO KNOW!]:https://clusteringformeremortals.com/2021/01/08/using-amazon-fsx-for-sql-server-failover-cluster-instances-what-you-need-to-know/
+[Sometimes you CAN upsize a column in-place]:https://sqlperformance.com/2020/08/sql-indexes/upsize-column-in-place
+[Which Microsoft Certification Should You Get?]:https://www.brentozar.com/archive/2021/01/which-microsoft-certification-should-you-get/
+[SQL Server RAISERROR Cheatsheet]:https://chadbaldwin.net/2021/01/15/raiserror-cheatsheet.html
+[Want to Avoid Deployment Downtime? Replication Probably Isn’t the Answer.]:https://www.brentozar.com/archive/2021/01/want-to-avoid-deployment-downtime-replication-probably-isnt-the-answer/
+[“But Surely NOLOCK Is Okay If No One’s Changing Data, Right?”]:https://www.brentozar.com/archive/2021/01/but-surely-nolock-is-okay-if-no-ones-changing-data-right/
+[Why Multiple Plans for One Query Are Bad]:https://www.brentozar.com/archive/2018/03/why-multiple-plans-for-one-query-are-bad/
+[Partitioned Tables Cause Longer Plan Compilation Times.]:https://www.brentozar.com/archive/2021/02/partitioned-tables-cause-longer-plan-compilation-times/
+[Query Hints You Can Use to Avoid Blocking]:https://www.brentozar.com/archive/2021/01/query-hints-you-can-use-to-avoid-blocking/
+[Changing Statistics Cause Longer Compilation Times]:https://www.brentozar.com/archive/2021/02/changing-statistics-cause-longer-compilation-times/
+[Understanding Execution Plan Operator Timings]:https://sqlperformance.com/2021/03/sql-performance/execution-plan-timings
+[What Does a Database Administrator Actually Do?]:https://www.brentozar.com/archive/2021/03/what-does-a-database-administrator-actually-do/
+[How Useful Is Column Store In Standard Edition?]:https://www.erikdarlingdata.com/sql-server/how-useful-is-column-store-in-standard-edition/
+[Task Manager’s CPU numbers are all but meaningless]:https://aaron-margosis.medium.com/task-managers-cpu-numbers-are-all-but-meaningless-2d165b421e43
+[Global temporary tables are almost never the answer in SQL Server]:https://blog.greglow.com/2021/02/04/sql-global-temporary-tables-are-almost-never-the-answer-in-sql-server/
+[Never, Ever, Ever Start T-SQL Comments with Two Dashes]:https://www.brentozar.com/archive/2021/04/never-ever-ever-start-t-sql-comments-with-two-dashes/
+[Why All My Servers Have an 8GB Empty File]:https://brianschrader.com/archive/why-all-my-servers-have-an-8gb-empty-file/
+[Incorrect Results with Parallel Eager Spools and Batch Mode]:https://www.sql.kiwi/2021/03/spools-batch-mode-hp.html
+[Deprecated features to take out of your toolbox – Part 1]:https://sqlperformance.com/2021/02/sql-performance/deprecated-features-1
+[Deprecated features to take out of your toolbox – Part 2]:https://sqlperformance.com/2021/03/sql-performance/deprecated-features-2
+[Deprecated features to take out of your toolbox – Part 3]:https://sqlperformance.com/2021/07/sql-performance/deprecated-features-3
+[Troubleshooting Security Cache Issues: USERSTORE_TOKENPERM And TokenAndPermUserStore]:https://www.erikdarlingdata.com/sql-server/troubleshooting-security-cache-issues-userstore_tokenperm-and-tokenandpermuserstore/
+[Execution Plans Don’t Have the Yellow Bang They Really Need.]:https://www.brentozar.com/archive/2021/04/execution-plans-dont-have-the-yellow-bang-they-really-need/
+[The Curious Case of… the un-killable thread]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-the-un-killable-thread/
+[olved steries #1 – SQL FCI Failovers]:https://www.seangallardy.com/olved-steries-1-sql-fci-failovers/
+[Possible configuration error: 1000000 IO requests allocated]:https://www.seangallardy.com/possible-configuration-error-1000000-io-requests-allocated/
+[Availability Group Long Failover Times]:https://www.seangallardy.com/availability-group-long-failover-times/
+[Testing Backups and Offloading CheckDB]:https://www.tarynpivots.com/post/2021/testing-backups-offload-dbcc-checkdb/
+[Fighting with Deadlocks]:https://www.tarynpivots.com/post/2021/fighting-with-deadlocks/
+[Syncing Logins Between Availability Group Replicas]:https://www.tarynpivots.com/post/2020/syncing-logins-between-availablity-group-replicas/
+[SQL JOINs and UNIONs]:https://levelup.gitconnected.com/sql-joins-2cc89babb6f9
+[Some opinionated thoughts on SQL databases]:https://blog.nelhage.com/post/some-opinionated-sql-takes/
+[How MERGE on two different rows can still deadlock you]:https://sqlsunday.com/2021/05/04/how-merge-can-deadlock-you/
+[Auto-failover Groups for Azure – Grace Period With Data Loss Hours]:https://sqlworldwide.com/auto-failover-groups-graceperiodwithdatalosshours/
+[How Parallel Plans Start Up – Part 1]:https://sqlperformance.com/2021/03/sql-performance/parallel-plans-start-1
+[How Parallel Plans Start Up – Part 2]:https://sqlperformance.com/2021/04/sql-performance/parallel-plans-start-2
+[How Parallel Plans Start Up – Part 3]:https://sqlperformance.com/2021/04/sql-performance/parallel-plans-start-3
+[How Parallel Plans Start Up – Part 4]:https://sqlperformance.com/2021/05/sql-performance/parallel-plans-start-4
+[How Parallel Plans Start Up – Part 5]:https://sqlperformance.com/2021/05/sql-performance/parallel-plans-start-5
+[Iterators, Query Plans, and Why They Run Backwards]:https://www.sql.kiwi/2010/08/iterators-query-plans-and-why-they-run-backwards.html
+[What account is xp_cmdshell using?]:https://sqlstudies.com/2021/05/25/what-account-is-xp_cmdshell-using/
+[Hammer Part 1 -What is HammerDB and why would I use it?]:https://t101wilson.wordpress.com/2021/04/17/hammer-part-1-what-is-hammerdb-and-why-would-i-use-it/
+[Hammer Part 2 -Let the Nail see the Hammer!]:https://t101wilson.wordpress.com/2021/05/26/hammer-part-2-let-the-nail-see-the-hammer/
+[Fun with DATETIME Arithmetics]:https://eitanblumin.com/2021/04/27/fun-with-datetime-arithmetics/
+[Even more fun with DATETIME arithmetics!]:https://eitanblumin.com/2021/06/17/even-more-fun-with-datetime-arithmetics/
+[I learned to love WHILE (true) and you should too]:https://eitanblumin.com/2021/02/16/i-learned-to-love-while-true-and-you-should-too/
+[Troubleshooting Long-Running SHRINK Operations]:https://eitanblumin.com/2020/04/07/troubleshooting-long-running-shrink-operations/
+[The Ultimate Compression Savings Estimation Script for an Entire Database]:https://eitanblumin.com/2020/02/18/ultimate-compression-savings-estimation-script-entire-database/
+[The Complete Guide to Temporary Tables and Table Variables - Part 1]:https://www.madeiradata.com/post/the-complete-guide-to-temporary-tables-and-table-variables-part-1
+[Store Files in a File System, Not a Relational Database.]:https://www.brentozar.com/archive/2021/07/store-files-in-a-file-system-not-a-relational-database/
+[Most (XML) and Least (SQL_VARIANT) Favorite Data Type]:https://eitanblumin.com/2021/03/09/t-sql-tuesday-136-most-and-least-favorite-data-type/
+[What should the CPU usage be of a fully-loaded CPU that has been throttled?]:https://devblogs.microsoft.com/oldnewthing/20210629-00/?p=105378
+[Fixing Queues with Watermarks]:https://forrestmcdaniel.com/2021/06/30/fixing-queues-with-watermarks/
+[How to Patch SQL Server]:https://www.brentozar.com/archive/2021/06/how-to-patch-sql-server/
+[“I’m getting index seeks. Why are my row estimates still wrong?”]:https://www.brentozar.com/archive/2021/06/how-can-index-seeks-get-inaccurate-row-estimates/
+[OLAP != OLAP Cube]:https://www.holistics.io/blog/olap-is-not-olap-cube/
+[Connecting a SQL Server client on Linux using Active Directory authentication]:https://sqlsunday.com/2021/04/15/connecting-linux-using-ad-authentication/
+[Is a sort faster when the data is already sorted?]:https://sqlsunday.com/2021/02/15/is-a-sort-faster-when-data-already-sorted/
+[Connect using Windows authentication across domains]:https://sqlsunday.com/2021/02/05/connect-using-windows-authentication-across-domains/
+[The uncorrelated correlated subquery]:https://sqlsunday.com/2020/12/21/the-uncorrelated-correlated-subquery/
+[How to fix rounding errors]:https://sqlsunday.com/2020/12/15/how-to-fix-rounding-errors/
+[The curious case of the Top N Sort]:https://sqlsunday.com/2020/12/08/the-curious-case-of-the-top-n-sort/
+[Consolidating grouped transactions into evenly sized batches]:https://sqlsunday.com/2020/07/13/grouping-into-evenly-sized-batches/
+[A “shock absorber” pattern for high-performance data ingestion]:https://sqlsunday.com/2021/07/15/a-shock-absorber-pattern-for-high-performance-data-ingest/
+[Why Are Linked Server Queries So Bad?]:https://www.brentozar.com/archive/2021/07/why-are-linked-server-queries-so-bad/
+[Fundamentals of table expressions, Part 1]:https://sqlperformance.com/2020/04/t-sql-queries/table-expressions-part-1
+[Fundamentals of table expressions, Part 2 – Derived tables, logical considerations]:https://sqlperformance.com/2020/04/t-sql-queries/table-expressions-part-2
+[Fundamentals of table expressions, Part 3 – Derived tables, optimization considerations]:https://sqlperformance.com/2020/06/t-sql-queries/table-expressions-part-3
+[Fundamentals of table expressions, Part 4 – Derived tables, optimization considerations, continued]:https://sqlperformance.com/2020/07/t-sql-queries/table-expressions-part-4
+[Fundamentals of table expressions, Part 5 – CTEs, logical considerations]:https://sqlperformance.com/2020/08/t-sql-queries/table-expressions-part-5
+[Fundamentals of table expressions, Part 6 – Recursive CTEs]:https://sqlperformance.com/2020/09/t-sql-queries/fundamentals-of-table-expressions-part-6-recursive-ctes
+[Fundamentals of table expressions, Part 7 – CTEs, optimization considerations]:https://sqlperformance.com/2020/10/t-sql-queries/table-expressions-part-7
+[Fundamentals of table expressions, Part 8 – CTEs, optimization considerations continued]:https://sqlperformance.com/2020/11/t-sql-queries/table-expressions-part-8
+[Fundamentals of table expressions, Part 9 – Views, compared with derived tables and CTEs]:https://sqlperformance.com/2021/06/t-sql-queries/table-expressions-part-9
+[Fundamentals of table expressions, Part 10 – Views, SELECT *, and DDL changes]:https://sqlperformance.com/2021/07/t-sql-queries/table-expressions-part-10
+[Understanding xp_fileexist and its usage]:https://www.sqlshack.com/understanding-xp_fileexist-and-its-usage/
+[SQL Server Restore Database Options and Examples]:https://www.mssqltips.com/sqlservertip/6893/restore-database-sql-server-options-examples/
+[SQL Server Database RESTORE WITH MOVE or not WITH MOVE]:https://www.mssqltips.com/sqlservertip/3113/sql-server-database-restore-with-move-or-not-with-move/
+[Getting exclusive access to restore SQL Server database]:https://www.mssqltips.com/sqlservertip/1407/getting-exclusive-access-to-restore-sql-server-database/
+[How to migrate a SQL Server database to a lower version]:https://www.mssqltips.com/sqlservertip/2810/how-to-migrate-a-sql-server-database-to-a-lower-version/
+[Make Network Path Visible For SQL Server Backup and Restore in SSMS]:https://www.mssqltips.com/sqlservertip/3499/make-network-path-visible-for-sql-server-backup-and-restore-in-ssms/
+[T-SQL bugs, pitfalls, and best practices – pivoting and unpivoting]:https://sqlperformance.com/2019/09/t-sql-queries/t-sql-pitfalls-pivoting-unpivoting
+[How to Prep a SQL Server Availability Group for VM-Level DR Replication]:https://www.davidklee.net/2021/02/08/how-to-prep-a-sql-server-availability-group-for-vm-level-dr-replication/
+[Special Agent Jenkins]:https://nvarscar.wordpress.com/2018/05/03/special-agent-jenkins/
+[What To Avoid If You Want To Use MERGE]:https://michaeljswart.com/2021/08/what-to-avoid-if-you-want-to-use-merge/
+[Solving Gaps and Islands with Enhanced Window]:https://www.itprotoday.com/sql-server/solving-gaps-and-islands-enhanced-window-functions
+[How to choose between SQL and NoSQL databases]:https://www.red-gate.com/simple-talk/databases/nosql/how-to-choose-between-sql-and-nosql-databases/
+[SQL Server plan cache mining – Plan attributes]:https://www.red-gate.com/simple-talk/homepage/sql-server-plan-cache-mining-plan-attributes/
+[How to Prep a SQL Server Availability Group for VM-Level DR Replication]:https://www.davidklee.net/2021/02/08/how-to-prep-a-sql-server-availability-group-for-vm-level-dr-replication/
+[How to create an autonomous transaction in SQL Server 2008]:https://techcommunity.microsoft.com/t5/sql-server/how-to-create-an-autonomous-transaction-in-sql-server-2008/ba-p/383471
+[Cloud Comparison: AWS vs. Azure vs. GCP]:https://seniordba.wordpress.com/2021/05/24/cloud-comparison-aws-vs-azure-vs-gcp/
+[New VLF status value]:https://www.sqlskills.com/blogs/paul/new-vlf-status-value/
+[The Simplest Alternative to sp_MSforeachdb]:https://eitanblumin.com/2021/08/05/simplest-alternative-to-sp_msforeachdb/
+[Your database connection deserves a name]:https://andygrunwald.com/blog/your-database-connection-deserves-a-name/
+[Renaming a Database Table In-Flight]:https://engineering.outschool.com/posts/renaming-database-table/
+[Upgrading/Migrating Large Replicated Databases Without Reinitializing]:https://www.sqlskills.com/blogs/jonathan/upgrading-migrating-large-replicated-databases-without-reinitializing/
+[TempDB configuration for people in a hurry]:https://desertdba.com/tempdb-configuration-for-people-in-a-hurry/
+[Help! My tempdb database won’t shrink!]:https://desertdba.com/help-my-tempdb-database-wont-shrink/
+[SQL Server Checkpoint Monitoring with Extended Events]:https://www.mssqltips.com/sqlservertip/6319/sql-server-checkpoint-monitoring-with-extended-events/
+["0 to 60" : Switching to indirect checkpoints]:https://sqlperformance.com/2020/05/system-configuration/0-to-60-switching-to-indirect-checkpoints
+[A case against using Basic and Standard (S0 & S1) tiers in Azure SQL Databases]:https://www.nikoport.com/2021/02/09/a-case-against-using-basic-and-standard-s0-s1-tiers-in-azure-sql-databases/
+[Experiment: Does sp_recompile on a table update associated views.]:https://sqlstudies.com/2021/08/17/experiment-does-sp_recompile-on-a-table-update-associated-views/
+[On index key size, index depth, and performance]:https://www.sqlskills.com/blogs/paul/on-index-key-size-index-depth-and-performance/
+[SQL Server Hierarchyid Data Type Overview and Examples]:https://www.mssqltips.com/sqlservertip/6048/sql-server-hierarchyid-data-type-overview-and-examples/
+[Make It Easier for the DBA: Give SQL Connections the Application’s Name!]:https://bengribaudo.com/blog/2017/06/23/3657/give-sql-connections-the-applications-name
+[You Probably Shouldn’t Index Your Temp Tables.]:https://www.brentozar.com/archive/2021/08/you-probably-shouldnt-index-your-temp-tables/
+[SQL Server Error Handling Gotchas]:https://nielsberglund.com/2016/12/31/sql-server-error-handling-gotchas/
+[B-Trees: More Than I Thought I'd Want to Know]:https://benjamincongdon.me/blog/2021/08/17/B-Trees-More-Than-I-Thought-Id-Want-to-Know/
+[Wait Stats During Hash Spills]:https://www.erikdarlingdata.com/sql-server/wait-stats-during-hash-spills/
+[Shrinking The tempdb System Database Without Restarting SQL Server]:https://jackworthen.com/2016/06/02/shrinking-the-tempdb-system-database-without-restarting-sql-server/
+[Graphing SQL Server wait stats on Prometheus and Grafana]:https://blog.developpez.com/mikedavem/p13209/devops/graphing-sql-server-wait-stats-on-prometheus-and-grafana
+[Transition from SSMS to DataGrip: 10 tips]:https://blog.jetbrains.com/datagrip/2021/08/19/transition-from-ssms-to-datagrip-10-tips/
+[Query Store Hints]:https://www.sqlskills.com/blogs/erin/query-store-hints/
+[Announcing SSIS Framework Manager, v1]:https://andyleonard.blog/2021/06/announcing-ssis-framework-manager-v1/
+[Improving The Performance of RBAR Modifications]:https://www.erikdarlingdata.com/sql-server/improving-the-performance-of-rbar-modifications/
+[Minimal Logging with INSERT…SELECT into Empty Clustered Tables]:https://sqlperformance.com/2019/05/sql-performance/minimal-logging-empty-clustered
+[What Is a Cost-Based Optimizer?]:https://www.brentozar.com/archive/2021/09/what-is-a-cost-based-optimizer/
+[Unusual Parameter Sniffing: Big Problems with Small Data]:https://www.brentozar.com/archive/2021/02/unusual-parameter-sniffing-big-problems-with-small-data/
+[Rowcount estimates when there are no Statistics]:https://matthewmcgiffen.com/2021/01/26/rowcount-estimates-when-there-are-no-statistics/
+[Processing Data Queues in SQL Server with READPAST and UPDLOCK]:https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
+[Can You Get Parameter Sniffing on Updates and Deletes?]:https://www.brentozar.com/archive/2021/01/can-you-get-parameter-sniffing-on-updates-and-deletes/
+[An Empirical Look at Key Lookups]:https://forrestmcdaniel.com/2020/12/30/an-empirical-look-at-key-lookups/
+[Please stop using this UPSERT anti-pattern]:https://sqlperformance.com/2020/09/locking/upsert-anti-pattern
+[The Curious Case of… the failing differential restore]:https://www.sqlskills.com/blogs/paul/the-curious-case-of-the-failing-differential-restore/
+[Starting SQL: Compensating For Lock Waits]:https://www.erikdarlingdata.com/starting-sql/starting-sql-compensating-for-lock-waits/
+[Finding & Downloading Required SQL Server Updates]:https://www.flxsql.com/downloading-latest-sql-server-updates/
+[Quick SQL Server CPU Comparison Tests]:https://www.erikdarlingdata.com/sql-server/quick-sql-server-cpu-comparison-tests/
+[Using fn_dblog, fn_dump_dblog, and restoring with STOPBEFOREMARK to an LSN]:https://www.sqlskills.com/blogs/paul/using-fn_dblog-fn_dump_dblog-and-restoring-with-stopbeforemark-to-an-lsn/
diff --git a/Articles/Slow in the Application, Fast in SSMS.htm b/Articles/Slow in the Application, Fast in SSMS.htm
deleted file mode 100644
index cff3c823..00000000
--- a/Articles/Slow in the Application, Fast in SSMS.htm
+++ /dev/null
@@ -1,2428 +0,0 @@
-
-
-
-
-
-Slow in the Application, Fast in SSMS?
-
-
-
Slow in the Application, Fast in SSMS? Understanding Performance Mysteries
-
An SQL text by Erland Sommarskog, SQL Server MVP. Last revision: 2013-08-30.
-This article is also available in Russian, translated by Dima Piliugin.
When I read various forums about SQL Server, I frequently see questions from
-deeply mystified
-posters. They have identified a slow query or stored procedure
-in their application. They cull the SQL batch from the application and run it in SQL Server
-Management Studio (SSMS) to analyse it, only to find that the
-response is instantaneous. At this point
-they are inclined to think that SQL Server is all about
-magic. A similar mystery is when a developer has extracted a query in his stored
-procedure to run it stand-alone only to find that it runs much faster – or much
-slower – than inside the procedure.
-
No, SQL Server is not about magic. But if you don't have a good understanding
-of how SQL Server compiles queries and maintains its plan cache, it may seem so.
-Furthermore there are some unfortunate combinations of different defaults in
-different environments. In this article, I will try to straighten out why you get this seemingly inconsistent behaviour.
-I explain how SQL Server compiles a stored procedure, what parameter sniffing
-is and why it is part of the equation in the vast majority of these confusing
-situations. I explain how SQL Server uses the cache, and why there may be
-multiple entries for a procedure in the cache. Once you have come this far, you
-will understand how come the query runs so much faster in SSMS.
-
To understand how to address that performance problem in your application, you
-need to read on. I first make a short break from the theme of parameter sniffing
-to discuss a few situations where there are other reasons for the difference in
-performance. This is followed by two chapters how to deal with
-performance problems where parameter sniffing is involved. The first is about
-gathering information. In the second chapter I discuss some scenarios
-– both real-world situations and more generic ones – and possible solutions. In the last chapter I discuss how dynamic SQL
-is compiled and interacts with the plan cache and why there are more reasons you
-may experience differences in performance between SSMS and the application with
-dynamic SQL. At the end there is a
-section with links to Microsoft white papers and similar documents in this area.
The essence of this article applies to all versions of SQL Server, but the focus is on SQL 2005 and later versions.
-The article includes several queries to inspect the plan cache; these queries run only on SQL 2005 and later. SQL 2000 and earlier versions had far less instrumentation in this regard.
-Beware that to run these queries you need to have the server-level permission
-VIEW SERVER STATE.
-
For the examples in this article I use the Northwind sample database. This
-database shipped with SQL 2000. For later versions of SQL Server you can
-download it from
-
- Microsoft's web site.
-
This is not a beginner-level article, but I assume that the reader has a
-working experience of SQL programming. You don't need to have any prior experience of
-performance tuning, but it certainly helps if you helps if you have looked a
-little at query plans and if you have some basic knowledge of indexes. I will
-not explain the basics in depth, as my focus a little beyond that point. This article will not
-teach you everything about performance
-tuning, but at least it will be a start.
-
Caveat: In some places I give links to the online version of Books Online. Beware that the URL may lead to Books Online for a
-different version of SQL
-Server than you are using. On the topic pages, there is a link Other versions, so that you easily can go to
-the page that matches the version of SQL Server
-you are using. (Or at least that was how Books Online on MSDN was organised when I wrote this article.)
In this chapter we will look at how SQL Server compiles a stored procedure
-and uses the plan cache. If your application does not use stored procedures, but
-submits SQL statements directly, most of what I say this chapter is still applicable. But there are further
-complications with dynamic SQL, and since the facts about stored procedures are confusing enough I have deferred the discussion on dynamic
-SQL to the last chapter.
That may seem like a silly question, but the question I am getting at is What objects
-have query plans on their own? SQL
-Server builds query plans for these types of objects:
-
-
Stored procedures.
-
Scalar user-defined functions.
-
Multi-step table-valued functions.
-
Triggers.
-
-
With a more general and stringent terminology I should talk about modules,
-but since stored procedures is by far the most widely used type of module, I prefer to
-talk about stored procedures to keep it simple.
-
For other types of objects than the four listed above, SQL Server does not build query plans.
-Specifically, SQL Server does not create query plans for views and inline-table
-functions. Queries like:
-
SELECT abc, def FROM myview
-SELECT a, b, c FROM mytablefunc(9)
-
are no different from ad-hoc queries that access the tables directly. When
-compiling the query, SQL Server expands the view/function into the query, and
-the optimizer works with the expanded query text.
-
There is one more thing we need to understand about what constitutes a stored
-procedure. Say that you have two procedures, where the
-outer calls the inner one:
-
CREATE PROCECURE Outer_sp AS
-...
-EXEC Inner_sp
-...
-
I would guess most people think of Inner_sp as being independent from Outer_sp,
-and indeed it is. The execution plan for Outer_sp does not include the
-query plan for Inner_sp, only the invocation of it. However, there is a very similar situation where
-I've noticed that posters on SQL forums often have a
-different mental image, to wit dynamic SQL:
It is important to understand that this is no different from nested stored procedures. The generated
-SQL string is not
-part of Some_sp, nor does it appear anywhere in the query plan for Some_sp, but it has a
-query plan and a cache entry of its own. This applies, no matter if the dynamic
-SQL is executed through EXEC() or sp_executesql.
When you enter a stored procedure with CREATE PROCEDURE (or CREATE FUNCTION
-for a function or CREATE TRIGGER for a trigger), SQL Server verifies that the
-code is syntactically correct, and also checks that you do not refer to
-non-existing columns. (But if you refer to non-existing tables, it lets get you
-away with it, due to a misfeature known as deferred named resolution.) However,
-at this point SQL Server does not build any query plan, but merely stores
-the query text in the database.
-
It is not until a user executes the procedure, that SQL Server creates the
-plan. For each query, SQL Server looks at the distribution statistics it
-has collected about the data in the tables in the query. From
-this, it makes an estimate what is best way to execute the query. This
-phase is known as optimisation. While the procedure is compiled in one go,
-each query is optimised on its own, and there is no attempt to analyse the flow
-of execution. This has a very important ramification: the optimizer has no idea
-about the run-time values of variables. However, it does know what values
-the user specified for the parameters to the procedure.
-
Parameters and Variables
-
Consider the Orders
-table in the Northwind database, and these three procedures:
-
CREATE PROCEDURE List_orders_1 AS
- SELECT * FROM Orders WHERE OrderDate > '20000101'
-go
-CREATE PROCEDURE List_orders_2 @fromdate datetime AS
- SELECT * FROM Orders WHERE OrderDate > @fromdate
-go
-CREATE PROCEDURE List_orders_3 @fromdate datetime AS
- DECLARE @fromdate_copy datetime
- SELECT @fromdate_copy = @fromdate
- SELECT * FROM Orders WHERE OrderDate > @fromdate_copy
-go
-
Note: Using SELECT * in production code is bad practice.
-I use it in this article to keep the examples concise.
-Before you run the procedures, enable Include Actual Execution Plan under
-the Query menu. (There is also a toolbar button for it, as well as a
-keyboard shortcut: Ctrl-M for the "Standard" keyboard, or Ctrl-K if you
-are like me and use
-the SQL 2000 keyboard.)
-If you look at the query plans for the procedures, you will see the
-first two procedures have identical plans:
-
-
-
-That is, SQL Server seeks the index on OrderDate, and uses a key lookup to
-get the other data. The plan for the third execution is different:
-
-
-In this case, SQL Server scans the table. (Keep in mind that in a
-clustered index the leaf pages contains the data, so a clustered index scan and
-a table scan is the same the thing.) Why this difference? To understand why the optimizer makes certain decisions, it is always a good idea to look at what
-estimates it is working with. If you hover with the mouse over of the two Seek operators and the Scan operator, you will see the pop-ups below.
-
-
-
-
-
-
-
-
-
-
-
-
List_orders_1
-
-
List_orders_2
-
-
-
-
-
-
-
List_orders_3
-
-
-
The interesting element is Estimated Number of Rows. For the first two procedures, SQL Server estimates that one row will be returned, but for
-List_orders_3, the estimate is 249 rows. This difference in estimates explains the different choice of plans. Index Seek + Key Lookup is a good strategy to return a
-smaller amount of rows from a table. But as more rows that match the seek
-criteria, the cost increases, and there is a increased likelihood that SQL
-Server will need to access the same data page more than once. In the extreme case where all rows
-are returned, a table scan is much more efficient than seek and lookup. With a
-scan,
-SQL Server has to read every data page exactly once, whereas with
-seek + key lookup, every page will be visited once for each row on the page. The Orders table in Northwind has 830 rows, and when SQL Server estimates that as many
-as 249 rows will be returned, it (rightly) concludes that the scan is the best choice.
-
Where Do These Estimates Come From?
-
Now we know why the optimizer arrives at different execution plans: because the estimates are different. But that only leads to the next question: why
-are the estimates different? That is the key topic of this article.
-
In the first procedure, the date is a constant, which means that the SQL Server only needs to consider exactly this case. It interrogates the statistics for the
-Orders table, which indicates that there are no rows with an OrderDate in the
-third millennium. (All orders in the Northwind database are from 1996 to 1998.)
-Since statistics are statistics, SQL Server cannot be sure that
-the query will return no rows at all, why it makes an estimate of one single row.
-
In case of List_orders_2, the query is against a variable, or more precisely a parameter. When performing the optimisation, SQL Server knows that the
-procedure was invoked with the value 2000-01-01. Since it does not any perform flow analysis, it can't say
-for sure whether the parameter will have this value when the query is executed.
-Nevertheless, it uses the input value to come up
-with an estimate, which is the same as for List_orders_1: one single row. This strategy of looking at the values of the input
-parameters when optimising a stored procedure is known as parameter sniffing.
-
-In the last procedure, it's all different. The input value is copied to a
-local variable, but when SQL Server builds the plan, it has no understanding of
-this and says to itself I don't know what the value this variable will
-be.
-Because of this, it applies a standard assumption, which for an inequality
-operation such as > is a 30 % hit-rate. 30 % of 830 is indeed 249.
-
Here is a variation of the theme:
-
CREATE PROCEDURE List_orders_4 @fromdate datetime = NULL AS
- IF @fromdate IS NULL
- SELECT @fromdate = '19900101'
- SELECT * FROM Orders WHERE OrderDate > @fromdate
-
In this procedure, the parameter is optional, and if the user does not fill
-in the parameter, all orders are listed. Say that the user invokes the procedure
-as:
-
EXEC List_orders_4
-
The execution plan is identical to the plan for List_orders_1 and List_orders_2. That is, Index Seek + Key Lookup, despite
-that all orders are returned. If you
-look at the pop-up for the Index Seek operator, you will see that it is identical to the pop-up for List_orders_2 but in one regard, the actual number of rows.
-When compiling the procedure, SQL Server
-does not know that the value of @fromdate changes, but compiles the procedure
-under the assumption that @fromdate has the value NULL. Since all comparisons with NULL yield
-UNKNOWN, the query cannot return any rows at all, if @fromdate still
-has this value at run-time. If SQL Server would take the input value as the final
-truth, it could construct a plan with only a Constant Scan that does not access the table at all (run the query SELECT * FROM Orders WHERE OrderDate >
-NULL to see an example of this). But SQL Server must generate a plan which
-returns the correct result no matter what value @fromdate has at run-time. On
-the other hand, there is no obligation to build a plan which is the best for all
-values. Thus, since the assumption is that
-no rows will be returned, SQL Server settles for the Index Seek. (The estimate is still that one row will be returned. This is
-because SQL Server never uses an estimate of 0 rows.)
-
This is an example of when parameter sniffing backfires, and in this
-particular case it may be better to write the procedure in this way:
-
CREATE PROCEDURE List_orders_5 @fromdate datetime = NULL AS
- DECLARE @fromdate_copy datetime
- SELECT @fromdate_copy = coalesce(@fromdate, '19900101')
- SELECT * FROM Orders WHERE OrderDate > @fromdate_copy
-
With List_orders_5 you always get a Clustered Index
-Scan.
-
Key Points
-
In this section, we have learned three very important things:
-
-
A constant is a constant, and when a query includes a constant, SQL
- Server can use the value of the constant with full trust, and even take such
- shortcuts to not access a table at all, if it can infer from constraints that
- no rows will be returned.
-
For a parameter, SQL Server does not know the run-time value, but it "sniffs" the input value when compiling the query.
-
For a local variable, SQL Server has no idea at all of the run-time value, and applies standard assumptions. (Which the assumptions are depends on the
- operator and what can be deduced from the presence of unique indexes.)
-
-
And there is a corollary of this: if you take out a query from a stored
-procedure and replace variables and parameters with constants,
-you now have quite a different query. More about this later.
If SQL Server would compile a stored procedure – that is optimise and build a query plan – every time the procedure is executed, there is a big risk that SQL Server would
-crumble from all the CPU resources it would take. I immediately need to qualify
-this, because it is not true for all systems. In a big data warehouse where a
-handful of business analysts runs complicated queries that take a minute on
-average to
-execute, there would be no damage if there was compilation every time – rather it
-could be beneficial. But in an OLTP database where plenty of users run stored
-procedures with short and simple queries, this concern is very much for real.
-
For this reason, SQL Server caches the query plan for a stored procedure, so
-when the next user runs the procedure, the compilation phase can be skipped, and
-execution can commence directly. The plan will stay in the cache, until some
-event forces the plan out of the cache. Examples of such events are:
-
-
SQL Server's buffer cache is fully utilised, and SQL Server needs to age
- out buffers that have not been used for some time from the cache. The buffer
- cache includes table data as well as query plans.
-
Someone runs ALTER PROCEDURE on the procedure.
-
Someone runs sp_recompile on the procedure.
-
Someone runs the command DBCC FREEPROCCACHE which clears the entire plan cache.
-
SQL Server is restarted. Since the cache is memory-only,
- the cache is not preserved over restarts.
-
Changing of certain configuration parameters (with sp_configure or
- through the Server Properties pages in SSMS) evict
- the entire plan cache.
-
-
If such an event occurs, a new query plan will be created the next time the
-procedure is executed. SQL Server will anew "sniff" the input parameters, and
-if the parameter values are different this time, the query plan may be
-different from the previous plan.
-
There are other events that do not cause the entire procedure plan to be
-evicted from the cache, but which trigger recompilation of one or more individual
-statements in the procedure. The recompilation occurs the next time the
-statement is executed. This applies even if the event occurred after the procedure started executing.
-Here are examples of such events:
-
-
Changing the definition of a table that appears in the statement.
-
Dropping or adding an index for a table appearing in the statement. This includes rebuilding an index with ALTER INDEX or DBCC DBREINDEX.
-
New or updated statistics for a table in the statement.
- Statistics can be created and updated by SQL Server automatically. The DBA
- can also create and update statistics with the commands CREATE STATISTICS and
- UPDATE STATISTICS.
-
Someone runs sp_recompile on a table referred to in the statement.
-
-
Note: In SQL Server 2000, there is no statement recompilation, but the
-entire procedure is always recompiled.
-
These lists are by no means exhaustive, but you should observe one thing which is
-not there: executing the procedure with different values for the input
-parameters from the original execution. That is, if the second invocation of
-List_orders_2 is:
-
EXEC List_orders_2 '19900101'
-
The execution will still use the index on OrderDate, despite the query now
-retrieves all orders. This leads to a very important observation: the parameter
-values of the first execution of the procedure have a huge impact for
-subsequent executions. If this first set of values for some reason is atypical,
-the cached plan may not be optimal for future executions. This is why parameter sniffing is such a big deal.
-
Note: for a complete list of what can cause plans to be
-flushed or statements to be recompiled, see the white paper on Plan Caching listed in
-the Further Reading section.
There is a plan for the procedure in the cache. That means that everyone can use it, or? No, in this section we will learn that there can be multiple
-plans for the same procedure in the cache. To understand this, let's consider this contrived example:
-
CREATE PROCEDURE List_orders_6 AS
- SELECT *
- FROM Orders
- WHERE OrderDate > '12/01/1998'
-go
-SET DATEFORMAT dmy
-go
-EXEC List_orders_6
-go
-SET DATEFORMAT mdy
-go
-EXEC List_orders_6
-go
-
If you run this, you will notice that the first execution returns many
-orders, whereas the second execution returns no orders. And if you look at the execution
-plans, you will see that they are different as well. For the first execution, the plan is a
-Clustered Index Scan (which is the best choice with so many rows returned), whereas the second execution plan uses Index Seek with Key Lookup (which is the
-best when no rows are returned).
-
How could this happen? Did SET
-DATEFORMAT cause recompilation? No, that would not be smart. In this example, the executions come one after each other, but they could just as well be submitted
-in parallel by different users with different settings for the date format. Keep in mind that the entry
-for a stored procedure in the plan cache is not tied to a certain session or
-user, but it is global to all connected users.
-
Instead the answer is that SQL Server creates a second cache entry for the second
-execution of the procedure.
-We can see this if we peek into the plan cache with this query:
-
SELECT qs.plan_handle, a.attrlist
-FROM sys.dm_exec_query_stats qs
-CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
-CROSS APPLY (SELECT epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' '
- FROM sys.dm_exec_plan_attributes(qs.plan_handle) epa
- WHERE epa.is_cache_key = 1
- ORDER BY epa.attribute
- FOR XML PATH('')) AS a(attrlist)
-WHERE est.objectid = object_id ('dbo.List_orders_6')
- AND est.dbid = db_id('Northwind')
-
Note: You need the
-server-level permission VIEW SERVER STATE to run queries
-against the plan cache.
-
Note: The queries against the plan cache
-in this article do not run on SQL 2000.
-
The DMV (Dynamic Management View)
-sys.dm_exec_query_stats has one entry for each query currently in the plan
-cache. If a procedure has multiple statements, there is one row per statement.
-Of interest here is sql_handle and plan_handle. I use
-sql_handle to determine which procedure the cache entry relates to (later we
-will see examples where we also retrieve the query text) so that we can filter
-out
-all other entries in the cache. Most often you use plan_handle to
-retrieve the query plan itself, and we will see an example of this later, but in this query I access a DMV that returns
-the attributes of the query plan. More specifically, I return the attributes that
-are cache keys. When there is more than entry in the cache for the same procedure, the entries have at least one difference in the cache keys. A cache key is a run-time setting, which for one reason
-or another calls for a different query plan. Most of these settings are controlled
-with a SET command, but not all.
-
The query above returns two rows, indicating that there are two entries for the
-procedure in the cache. The output may look like this:
To save space, I have deleted many of the values in the attrlist column
-and I have also folded the column into two lines. If you run the query yourself, you can see the complete list
-of cache keys, and they are quite a few. If you look up the topic for
-
-sys.dm_exec_plan_attributes in Books Online, you will see description
-for many of the plan attributes, but you will also note that far from all cache
-keys are documented. In this article I will not dive into all cache keys, not
-even the documented ones, but focus on the most important ones.
-
As I said, the example is contrived, but it gives a good illustration to
-why the query plans must be different: different date formats may yield
-different results. A somewhat more normal example is this:
(The initial sp_recompile is to make sure that the plan from the
-previous example is flushed.) This example yields the same results and the same
-plans as with List_orders_6 above. That is, the two query plans uses the actual parameter value
-when the respective plan is built. The first query uses 12 Jan 1998, and the
-second 1 Dec 1998.
-
A very important cache key is set_options. This is a bit mask that gives the setting of a number of SET options that can be ON or OFF. If
-you look further in the topic of sys.dm_exec_plan_attributes, you find a
-listing that details which SET option each bit describes. (You
-will also see that there are a few more items that are not controlled by the SET
-command.) Thus, if two
-connections have any of these options set differently, the connections will
-use different cache entries for the same procedure – and therefore they could be using different query plans, with possibly big difference in performance.
-
One way to translate the set_options attribute is to run this query:
-
SELECT convert(binary(4), 4347)
-
This tells us that the hex value for 4347 is 0x10FB. Then we can look in Books
-Online and follow the table to find out that the following SET options are in
-force: ANSI_PADDING, Parallel Plan, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_NULLS,
-QUOTED_IDENTIFIER, ANSI_NULL_DFLT_ON and ARITHABORT.
SELECT Set_option FROM setoptions (4347) ORDER BY Set_option
-
Note: You may be wondering what Parallel Plan is doing here, not the least since the plan in the example is not parallel. When SQL
-Server builds a parallel plan for a query, it may later also build a non-parallel plan if the CPU load in the server is such that it is not defensible to run a
-parallel plan. It seems that for a plan that is always serial that the bit for parallel plan is nevertheless
-set in set_options.
-
To simplify the discussion, we can say that each of these SET options – ANSI_PADDING, ANSI_NULLS etc –
-is a cache key on its own. The fact that they are
-added together in a singular numeric value is just a matter of packaging.
About all of the SET ON/OFF options that are cache keys exist because of legacy reasons. Originally, in the
-dim and distant past, SQL Server included a number of behaviours that violated
-the ANSI standard for SQL. With SQL Server 6.5, Microsoft introduced all these SET options
-(save for ARITHABORT, which was in the product already in 4.x), to permit users to use
-SQL Server in an ANSI-compliant way. In SQL 6.5, you had to use the
-SET options explicitly to get ANSI-compliant behaviour, but with SQL 7, Microsoft changed
-the defaults for clients that used the new versions of the ODBC and OLE DB APIs.
-The SET options still remained to provide backwards compatibility for older
-clients.
-
Note: In case what you are curious what is the impact of these SET options, I refer
-you to Books Online. Some of them are fairly straight-forward to explain,
-whereas others are just too confusing. To understand this article, you only
-need to understand that they exist, and what impact they have on the plan cache.
-
Alas, Microsoft did not change the defaults with full consistency, and
-even today the defaults depend on how you connect, as detailed in the table
-below.
-
-
-
Applications using ADO .Net, ODBC or OLE DB
SSMS,
- Query Analyzer
SQLCMD,
- OSQL, BCP, SQL Server Agent
-
ISQL, DB-Library
-
ANSI_NULL_DFLT_ON
ON
ON
-
ON
OFF
-
ANSI_NULLS
ON
ON
-
ON
OFF
-
ANSI_PADDING
ON
ON
-
ON
OFF
-
ANSI_WARNINGS
ON
ON
-
ON
OFF
-
CONACT_NULLS_YIELD_NULL
ON
ON
-
ON
OFF
-
QUOTED_IDENTIFIER
ON
ON
- OFF
OFF
-
ARITHABORT
OFF
ON
-
OFF
OFF
-
-
You might see where this is getting at. Your application connects with
-ARITHABORT OFF, but when you run the query in SSMS, ARITHABORT is ON and thus
-you will not reuse the cache entry that the application uses, but SQL Server
-will compile the procedure anew, sniffing your current parameter values, and you may get a different plan than from the application.
-So there you have a likely answer to the initial question of this article. There
-are a few more possibilities that we will look into in the next chapter, but the
-by far most common reason for slow in the application, fast in SSMS in
-SQL 2005 and later is parameter sniffing and the different defaults for
-ARITHABORT. (If that was all you wanted to know, you can stop reading. If you
-want to fix your performance problem – hang on!)
-
Beside the SET command and the defaults above, ALTER DATABASE permits you to
- say that a certain SET option always should be ON in a database and thus
- override the default set by the API. However, while the syntax may indicate so,
- you cannot specify than an option should be OFF this way. Also, beware that if
- you test these options from Management Studio, they may not seem to work, since
- SSMS submits explicit SET commands. There is also a
- server-level setting for the same purpose, the configuration option user
- options which is a bit mask. You can set the individual bits in the
- mask from the Connection pages of the Server
- Properties in Management Studio. Overall, I recommend against controlling
- the defaults this way, as in my opinion they mainly serve to increase the
-confusion.
-
It is not always the run-time setting of an option that applies. When you create a procedure, view, table etc, the settings
-for ANSI_NULLS
-and QUOTED_IDENTIFIER, are saved with the object. That is, if you run this:
-
SET ANSI_NULLS, QUOTED_IDENTIFIER OFF
-go
-CREATE PROCEDURE stupid @x int AS
-IF @x = NULL PRINT "@x is NULL"
-go
-SET ANSI_NULLS, QUOTED_IDENTIFIER ON
-go
-EXEC stupid NULL
-
It will print
-
@x is NULL
-
(When QUOTED_IDENTIFIER is OFF, double quote(") is a string delimiter on equal basis with single quote('). When the
-setting is ON, double quotes delimit identifiers in the same way that square
-brackets ([]) do and the PRINT statement would yield a compilation
-error.)
-
In addition, the setting for ANSI_PADDING is saved per table column
-where it is applicable (The data types varchar, nvarchar and varbinary).
-
All these options and different defaults are certainly confusing, but here
-are some pieces of advice. First, remember that the first six of these seven
-options exist only to
-supply backwards compatibility, so there is little reason why you should ever
-have any of them OFF. Yes, there are situations when some of them may seem to buy a little more
-convenience if they are OFF, but don't fall for that temptation. One complication here, though,
-is that the SQL Server tools spew out SET commands for some of these options
-when you script objects. Thankfully, they mainly produce SET ON commands that
-are harmless. (But I think that when you script a table, scripts may still in
-some situations have a SET ANSI_PADDING OFF at the end.)
-
Next, when it comes to ARITHABORT, you should know that in SQL 2005 and later
-versions, this setting has zero impact as long as ANSI_WARNINGS is ON.
-Thus, there is no reason to turn it on for the sake of the matter. And when it comes to SQL Server
-Management Studio, you might want do yourself a favour, and open this dialog and
-uncheck SET ARITHABORT as highlighted:
-
-
-
This will change your default setting for ARITHABORT when you connect with
-SSMS. It will not help you to make your application to run faster, but you will not
-at least have to be perplexed by getting different performance in SQL Server
-Management Studio.
-
For reference, below is how the ANSI page should look
-like. A very strong recommendation: never change anything on this page!
-
-
-
When it comes to SQLCMD and OSQL, make the habit to always use the
--I option, which causes these tools to run with QUOTED_IDENTIFIER
-ON. The corresponding option for BCP is -q. It's a little more difficult in Agent, since there is no way to change the default for Agent – at least I have not found any. Then again, if you only run stored procedures from your job steps, this is not an issue, since the saved setting for stored procedures takes precedence. But if you would run loose batchs of SQL from Agent jobs, you could face the problem with different query plans in the job and SSMS because of the different defaults for QUOTED_IDENTIFER. For such jobs, you should always include the the command SET QUOTED_IDENTIFIER ON as the first command in the job step.
-
We have already looked at SET DATEFORMAT, and there are two more options in
- that group: LANGUAGE and DATEFIRST. The default language is configured per user, and there is a
- server-wide configuration option which controls what is the default language for
- new users. The default language controls the default for the other two. Since
- they are cache keys, this means that two users with different default languages
-will have different cache entries, and may thus have different query plans.
-
My
-recommendation is that you should try avoid to be dependent on language and date settings in SQL Server
-altogether. For instance, in as far as you use date literals at all, use a format that
-is always interpreted the same, such as YYYYMMDD. (For more details about
-date formats, see the article
-The ultimate guide
-to the datetime datatypes by SQL Server MVP Tibor Karaszi.) If you want
-to produce localised output from a stored procedure depending on the user's
-preferred language, it may be better to roll your own than rely on the language
-setting in SQL Server.
To get a complete picture how SQL Server builds the query plan, we need to
-study what happens when
-
-individual statements are recompiled. Above, I mentioned
-a few situations where it can happen, but at that point I did not go into
-details.
-
The procedure below is certainly contrived, but it serves well to demonstrate
-what happens.
-
CREATE PROCEDURE List_orders_7 @fromdate datetime,
- @ix bit AS
- SELECT @fromdate = dateadd(YEAR, 2, @fromdate)
- SELECT * FROM Orders WHERE OrderDate > @fromdate
- IF @ix = 1 CREATE INDEX test ON Orders(ShipVia)
- SELECT * FROM Orders WHERE OrderDate > @fromdate
-go
-EXEC List_orders_7 '19980101', 1
-
When you run this and look at the actual execution plan, you will see that
-the plan for the first SELECT is a Clustered Index Scan, which agrees with what we have learnt this far. SQL Server sniffs the value 1998-01-01 and estimates
-that the query will return 267 rows which is too many to read with seek + key lookup. What SQL Server does not know is
-that the value of @fromdate changes before the
-queries are executed. Nevertheless, the plan for the second, identical, query is precisely seek + key lookup and the estimate is that one row is returned. This is because the CREATE INDEX
-statement sets a mark that the schema of the Orders table has changed, which
-triggers a recompile of the second SELECT statement. When the recompiling the
-statement, SQL Server sniffs the value of the parameter which is current at this
-point, and thus finds the better plan.
-
Run the procedure again, but with different parameters (note that the date is two years earlier in time):
-
EXEC List_orders_7 '19960101', 0
-
The plans are the same as in the first execution, which is a little more exciting than it may seem at first glance. On this second execution, the first query is
-recompiled because of the added index, but this time
-the scan is the "correct" plan, since we retrieve about on third of
-the orders. However, since the second query is not recompiled now, the second query runs
-with the Index Seek from the previous execution, although it is not an efficient
-plan this time.
-
Before you continue, clean up:
-
DROP INDEX test ON Orders
-DROP PROCEDURE List_orders_7
-
As I said, this example is contrived. I made it that way, because I wanted a
-compact example that is simple to run. In a real-life situation, you may have a procedure
-that uses the same parameter in two queries against different tables. The DBA
-creates a new index on one of the tables, which causes the query against that
-table to be recompiled, whereas the other query is not. The key takeaway here is
-that the plans for two statements in a
-procedure may have been compiled for different "sniffed" parameter values.
-
When we have seen this, it seems logical that this could be extended to local
-variables as well. But this is not the case:
-
CREATE PROCEDURE List_orders_8 AS
- DECLARE @fromdate datetime
- SELECT @fromdate = '20000101'
- SELECT * FROM Orders WHERE OrderDate > @fromdate
- CREATE INDEX test ON Orders(ShipVia)
- SELECT * FROM Orders WHERE OrderDate > @fromdate
- DROP INDEX test ON Orders
-go
-EXEC List_orders_8
-go
-DROP PROCEDURE List_orders_8
-
In this example, we get a Clustered Index Scan for both SELECT statements,
-despite that the second SELECT is recompiled during execution and the value of
-@fromdate is known at this point.
-
However, there is one exception, and that is table variables. Normally SQL
-Server estimates that a table variable has a single row, but when there are
-recompiles in sway, the estimate may be different:
-
CREATE PROCEDURE List_orders_9 AS
- DECLARE @ids TABLE (a int NOT NULL PRIMARY KEY)
- INSERT @ids (a)
- SELECT OrderID FROM Orders
- SELECT COUNT(*)
- FROM Orders O
- WHERE EXISTS (SELECT *
- FROM @ids i
- WHERE O.OrderID = i.a)
- CREATE INDEX test ON Orders(ShipVia)
- SELECT COUNT(*)
- FROM Orders O
- WHERE EXISTS (SELECT *
- FROM @ids i
- WHERE O.OrderID = i.a)
-DROP INDEX test ON Orders
-go
-EXEC List_orders_9
-go
-DROP PROCEDURE List_orders_9
-
When you run this you will get in total four execution plans. The two of
-interest are the second and fourth plans that come from the two identical SELECT COUNT(*) queries. I have
-included the interesting parts of the plans here, together with the pop-up for the Clustered Index Scan operator over the table variable.
-
-
-
In the first plan there is a Nested Loops Join operator together with an
-Clustered Index Seek on the Orders table, which is congruent with the estimate
-of the number of rows in the table variable: one single row, the standard assumption. In the second query, the
-join is carried out with a Merge Join together with a table scan of Orders. As you can see, the estimate for the table variable is now 830 rows, because when recompiling a query, SQL Server
-"sniffs" the cardinality of the table variable, even if it is not a parameter.
-
And with some amount of bad luck this can cause issues similar to those with
-parameter sniffing. I once ran into a situation where a key procedure in our
-system suddenly was slow, and I tracked it down to a statement with a
-table variable where the estimated number of rows was 41. Unfortunately, when this
-procedure runs in the daily processing it's normally called on one-by-one basis,
-so one row was a much better estimate in that case.
-
Speaking of table variables, you may be curious about table-valued
-parameters, introduced in SQL 2008. They are handled very similar to table
-variables, but since the parameter is populated before the procedure is invoked,
-it is now a common situation that SQL Server will use an estimate of more than one row. Here is an example:
-
CREATE TYPE temptype AS TABLE (a int NOT NULL PRIMARY KEY)
-go
-CREATE PROCEDURE List_orders_10 @ids temptype READONLY AS
- SELECT COUNT(*)
- FROM Orders O
- WHERE EXISTS (SELECT *
- FROM @ids i
- WHERE O.OrderID = i.a)
-go
-DECLARE @ids temptype
-INSERT @ids (a)
- SELECT OrderID FROM Orders
-EXEC List_orders_10 @ids
-go
-DROP PROCEDURE List_orders_10
-DROP TYPE temptype
-
The query plan for this procedure is the same as for the second SELECT query in List_orders_9, that is Merge Join + Clustered Index
-Scan of Orders, since SQL Server sees the 830 rows in @ids when the query is
-compiled.
In this chapter we have looked at how SQL Server compiles a stored procedure and what significance the actual parameter values have
-for compilation. We have
-seen that SQL Server puts the plan for the procedure into cache, so that the plan can be reused later. We have also seen that there can be more than one entry
-for the same stored procedure in the cache. We have seen that there is a large number of different cache keys, so potentially there can be very many plans for a single
-stored procedure. But we have also learnt that many of the SET options that are cache keys are legacy options
-that you should never change.
-
In practice, the most important SET option is ARITHABORT, because the default for this option is different in an application and in SQL Server Management
-Studio. This explains why you can spot a slow query in your application, and then run it at good speed in SSMS. The application uses a plan which was compiled
-for
-a different set of sniffed parameter values than the actual values, whereas when you run the query in SSMS, it is likely that there is no plan for ARITHABORT
-ON
-in the cache, so SQL Server will build a plan that fits with your current parameter values.
-
You have also understood that you can verify that this is the case by running
-this command in your query window:
-
SET ARITHABORT OFF
-
and with great likelihood, you will now get the slow behaviour of the application
-also in SSMS. If this happens, you know that you have a performance problem related to
-parameter sniffing. What you may not know yet is how to address this performance problem, and
-in the following chapters I will discussion possible solutions,
-before I return to the theme of compilation, this time for ad-hoc queries, a.k.a. dynamic SQL.
-
Note: There are always these funny variations. The application I mainly work with actually issues SET ARITHABORT ON when it connects, so we should never see this confusing behaviour in SSMS. Except that we do. Some parts of the application also issues the command SET NO_BROWSETABLE ON on connection. I have never been able to understand the impact of this undocumented SET command, but I seem to recall that it is related to early versions of "classic" ADO. And, yes, this setting is a cache key.
Before we delve into how address performance problems related to parameter
-sniffing, which is quite a broad topic, I first like to give some coverage to a
-couple of cases where parameter sniffing is not involved, but where you
-nevertheless may experience different performance in the application and SSMS.
I have already touched at this, but it is worth expanding on a bit.
-
Occasionally, I see people in the forums or the newsgroups that tell me that
-their stored procedure is slow, but when they run the same query outside the
-procedure it's fast. After a few posts in the thread, the truth is revealed: the
-query they are struggling with refer to variables, be that local variables or
-parameters. To troubleshoot the query on its own, they have replaced the
-variables with constants. But as we have seen, the
-resulting stand-alone query is quite different,
-and SQL Server can make more accurate estimates with constants instead of
-variables, and therefore arrive at a better plan. Furthermore, SQL Server does not have to consider that the constant may
-have a different value next time the query is run.
-
A similar mistake is to make the parameters into variables. Say that you have:
-
CREATE PROCEDURE some_sp @par1 int AS
- ...
- -- Some query that refers to @par1
-
You want to troubleshoot this query on its own, so you do:
-
DECLARE @par1 int
-SELECT @par1 = 4711
--- query goes here
-
From what you have learnt here, you know that this is very different from when @par1 really is a parameter. SQL Server has no idea about the value for
-@par1 when you declare it as a local variable and will make standard assumptions.
-
But if you have a 1000-line stored procedure, and one query is slow, how do
-you run it stand-alone with great fidelity, so
-that you have the same presumptions as in the stored procedure?
-
One very simple option, but which also is limited, is to add OPTION (RECOMPILE) at the end of the query. This only works on SQL 2005, where this hint causes
-the query to be recompiled with the values of all variables – parameters or locally declared
-– sniffed and the plan will be compiled under the assumption
-that the values could be different next time. That is, the method is only good if the query refers
-solely to parameters, and
-not to local variables in the procedure. (Because the values of local variables are normally not
-sniffed.) Furthermore, the method does not work on SQL 2008 and later,
-where the implementation of OPTION (RECOMPILE) is more resaonble: SQL Server compiles the query as if
-all variable
-values are constants. (Confusingly, this does not apply to all builds
-of SQL 2008; for a while Microsoft had to revert back to the old
-behaviour because of a critical bug.)
-
What always works is to embed the query in sp_executesql:
-
EXEC sp_executesql N'-- Some query that refers to @par1', N'@par1 int', 4711
-
You will need to double any single quotes in the query to be able to put it in a character literal. If the query refers to local variables, you should assign
-them in the block of dynamic SQL.
-
Yet an option is of course to create dummy procedure with the problematic
-statement; this saves from doubling any quotes. To avoid litter in the database, you could create a temporary stored
-procedure:
-
CREATE PROCEDURE #test @par1 int AS
- -- query goes here.
-
As with
-dynamic SQL, make sure that local variables are locally declared also in your
-dummy. I will need to add the caveat I have not investigated whether SQL Server have special tweaks
-or limitations when optimising temporary stored procedures. Not that I see why there should be any, but I have been burnt before...
You should not forget that one possible reason that the procedure ran slow in the application was simply a matter of blocking. When you tested the query three hours
-later in SSMS, the blocker had completed its work. If you find that no matter how you run the procedure in SSMS, with or without ARITHABORT, the procedure is
-always fast, blocking is starting to seem a likely explanation. Next time you are alarmed that the procedure is slow, you should start your investigation with some
-blocking analysis. That is a topic which is completely outside the scope for this article, but for a good tool to investigate locking, see my
-beta_lockinfo.
This is a problem which is far more common on SQL 2000 than on later versions.
-
For SQL Server 2005 or later to consider indexed views and indexes on computed columns (as well as filtered
-indexes added in SQL 2008) when compiling a query, these settings must be ON: QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_WARNINGS, ANSI_PADDING, CONCAT_NULL_YIELDS_NULL. Furthermore,
-NUMERIC_ROUNDABORT must be OFF. But on SQL 2000, there is one more option that must be ON, and, yes, you guessed it: ARITHABORT. To be precise, this also
-applies on SQL 2005 and SQL 2008 if the database compatibility level is 80. (The reason for this is that on SQL 2000 there is one type of error
-– domain errors, e.g.
-sqrt(-1) – that is covered by ARITHABORT, but not by ANSI_WARNINGS.)
-
Thus, on SQL 2000, an application using the default SET options will not be
-able to take benefit of an index on a computed column or an indexed view, even
-if that would be the optimal query plan. But when you run the query in SSMS or Query
-Analyzer, performance will be a lot better, even if no parameter sniffing is
-involved, because they have ARITHABORT ON by default.
-
If you are stuck on SQL 2000, you could change the client to always submit
-SET ARITHABORT ON (this is not possible through the connection string; it has to
-be submitted separately). You can also use ALTER DATABASE to turn on ARITHABORT
-on database level. (But as I noted above, I find this setting more confusing
-than helpful.)
-
There is a second phenomenon you can run into with indexed computed columns and indexed views. It's not unique to SQL 2000, but it happens a lot more there.
-You have a stored procedure that is slow. You take out the statement and run it on its own, and now it's lightning fast, even if you package it nice and cleanly
-in a temporary stored procedure as above. Why? Run this statement:
Most likely it will return 0 it at least one of the two columns. As I noted
-previously, these two settings, QUOTED_IDENTIFIER and ANSI_NULLS are saved with the procedure, and thus
-the saved settings apply when the procedure runs, not the settings of the connection.
-
But why would these options be OFF? In SQL 2000, you can create stored procedures from Enterprise Manager, and Enterprise Manager always submits SET
-QUOTED_IDENTIFIER OFF and SET ANSI_NULLS OFF prior to creating the object. It does not tell you, and there is no option to turn this madness off.
-A much better deal is to use Query Analyzer: not only does it have the appropriate
-defaults for the SET options, it also offers a far better editing experience. Yet, during the hey days of SQL 2000, it was apparent on the newsgroups that many developers were unaware of Query Analyzer, and used Enterprise Manager
-exclusively.
-
For the most of us SQL 2000 is behind us, but you can still run into this issue for two reasons:
-
-
The database was upgraded from SQL 2000.
-
The procedure was created in a script that was executed with SQLCMD and OSQL, both which run with QUOTED_IDENTIFIER OFF by default. (Always run these
- tools with the -I option to override.)
-
-
To find all bad modules in a database on SQL 2005 or later, you can use this SELECT:
-
SELECT o.name
-FROM sys.sql_modules m
-JOIN sys.objects o ON m.object_id = o.object_id
-WHERE (m.uses_quoted_identifier = 0 or
- m.uses_ansi_nulls = 0)
- AND o.type NOT IN ('R', 'D')
-
An Issue With Linked Servers
-
This section concerns an issue with linked servers when the remote server is earlier than SQL 2012 SP1. Consider this query:
-
SELECT C.*
-FROM SOME_SERVER.Northwind.dbo.Orders O
-JOIN Customers C ON O.CustomerID = C.CustomerID
-WHERE O.OrderID > 20000
-
I ran this query twice, logged in as two different users. The first user is sysadmin on both servers, whereas the second user is a plain user with only SELECT permissions. To ensure that I would get different cache entries, I used different settings for ARITHABORT.
-
When I ran the query as sysadmin I got this plan:
-
-
When I ran the query as the plain user, the plan was different:
-
-
How come the plans are different? It's certainly not parameter sniffing because there are no parameters. As always when a query plan has an unexpected shape or operator, it is a good idea to look at the estimates. Here are the pop-ups for the Remote Query operators in the two plans, with the pop-up for the first plan to the left:
-
-
-
-
-
-
-
-
You can see that the estimates are different. When I ran as sysadmin, the estimate was 1 row, which is a correct number, since there are no Orders in Northwind where the order ID exceeds 20000. But when I ran as a plain user, the estimate was 249 rows. We recognize this particular number as 30 % of 830 orders, or the estimate for an inequality operation when the optimizer has no information. Previously, this was due to an unknown variable value, but in this case there is no variable that can be unknown. No, it is the statistics themselves that are missing.
-
As long as a query accesses only tables in the local server, the optimizer can always access the statistics for all tables in the query; there are no extra permission checks. But this is different with tables on a linked server. When SQL Server accesses a linked server, there is no secret protocol that is only used for inter-server communication. No, instead SQL Server uses the standard OLE DB interface for linked servers, be that other SQL Server instances, Oracle, text files or your home-brewed data source, and connects just like any other user. Exactly how statistics is retrieved depends on the data source and the OLE DB provider in question. In this case, the provider is SQL Server Native Client which retrieves the statistics in two steps. (You can see this by running Profiler against the remote server). First the provider runs the procedure sp_table_statistics2_rowset which returns information about which column statistics there are, as well as their cardinality and their density information. In the second step, the provider runs DBCC SHOW_STATISTICS, a command that returns the full distribution statistics. (We will look closer at this command later in this article.) Here is the catch: up to the RTM version of SQL Server 2012, to have permission to run DBCC SHOW_STATISTICS, you had to be a member of the server role sysadmin or any of the database roles db_owner or db_ddladmin.
-
And this is why I got different results. When running as sysadmin I got the full distribution statistics which indicated that there are no rows with order ID > 20000, and the estimate was one row. (Recall that the optimizer never assumes zero rows from statistics.) But when running as the plain user, DBCC SHOW_STATISTICS failed with a permission error. This error was not propagated, but instead the optimizer accepted that there were no statistics and used default assumptions. Since it did get cardinality information, it learnt that the remote table has 830 rows, whence the estimate of 249 rows.
-
Whenever you encounter a performance problem where a query that includes access to a linked server is slow in the application, but it runs fast when you test it from SSMS, you should always investigate if insufficient permissions on the remote database could be the cause. (Keep in mind that the access to the linked server may not be overt in the query, but could be hidden in a view.) If you determine that permissions on the remote database is the problem, what actions could you take?
-
-
You can add the users to the role db_ddladmin on the remote database, but since this gives them right to add and drop tables, this is not recommendable.
-
By default, when a users connect to a remote server they connect as themselves, but you can set up a login mapping with sp_addlinkedsrvlogin, so that users map to a proxy account that has membership in db_ddladmin. Note that this proxy account must be an SQL login, so this is not an option if the remote server does not have SQL authentication enabled. This solution too is somewhat dubious from a security perspective, although it's better the previous suggestion.
-
In some cases you can rewrite the query with OPENQUERY to force evaluation on the remote server. This can be particularly useful, if the query includes several remote tables. (But it can also backfire, because the optimizer now gets even less statistics information from the remote server.)
-
You could of course use the full battery of hints and plan guides to get the plan you want.
-
Finally, you should ask yourself whether that linked-server access is needed. Maybe the databases could be on the same server? Could data be replicated? Some other solution?
-
-
To repeat: what matters is the permissions on the remote server, not the local server where the query runs. Furthermore, the issue exists only when the SQL Server version of the remote server is the RTM version of SQL Server 2012 or any earlier versions of SQL Server. Starting with service pack 1 of SQL 2012, the permission requirement for DBCC SHOW_STATISTICS has been relaxed, so that it is sufficient to have SELECT permission on the table, making this gotcha null and void. (To be precise, the change came with one of the cumulative updates to the RTM version of SQL 2012, exactly which I don't recall.)
-
Note also that this section has no relevance to what may happen with other remote data sources such as Oracle, MySQL or Access as they have a different permission system. However, if you would run a query from, say, an Oracle server against a remote SQL Server 2008 instance, it is likely that this issue could affect your performance.
We have learnt how it may come that you have a stored
-procedure that runs slow in the application, and the very same call runs fast
-when you try it in SQL Server Management Studio: Because of different settings of
-ARITHABORT you get different cache entries, and since SQL Server employs
-parameter sniffing, you may get different execution plans.
-
While the secret behind the mystery now has been unveiled, the main problem
-still remains: how do you address the performance problem? From what you read
-this far, you already know of a quick
-fix. If you have never seen the problem before and/or the situation is urgent, you
-can always do:
-
EXEC sp_recompile problem_sp
-
As we have seen, this will flush the procedure from the plan cache, and next
-time it is invoked, there will be a new query plan. And if the problems never
-comes back, consider case closed.
-
But if the problem keeps reoccurring – and unfortunately, this is the more
-likely outcome – you need to perform a deeper analysis,
-and in this situation you should not use sp_recompile, or in some
-other way
-alter the procedure. You should keep that slow plan around, so that you can
-examine it, and not the least find what parameter values the bad
-plan was built for. This is the topic for this
-chapter.
-
Before I go on, a small note: above I recommended that you should change
-your preferences in SSMS, so that you by default connect with ARITHABORT
-OFF to
-avoid this kind of confusion. But there is actually a small disadvantage with
-having the same settings as the application: you may not observe that the
-performance problem is related to parameter sniffing. But if you make it a habit
-when investigating performance issue to run your problem procedure with ARITHABORT both ON and
-OFF, you can easily conclude whether parameter sniffing is involved.
All performance troubleshooting requires facts. If you don't have facts you will be in
-the situation that Bryan Ferry describes so well in the song Sea Breezes
-from the first Roxy Music album:
-
- We've been running round in our present state Hoping help will come from
- above But even angels there make the same mistakes
-
-
If you don't have facts, not even the angels will be able to help you. The
-base facts you need to troubleshoot performance issues related to parameter
-sniffing are:
-
-
Which is the slow statement?
-
What are the different query plans?
-
What parameter values did SQL Server sniff?
-
What are the table and index definitions?
-
How does the distribution statistics look like? Is it up to date?
-
-
Almost all of these points apply to about any query-tuning effort. Only
-the third point is unique to parameter-sniffing issues. That, and the plural in
-the second point: you want to look at two plans, the good plan and the bad plan.
-In the following sections, we will look at these points one by one.
First on the list is to find the slow statement – in most cases, the problem
-lies with a single statement. If the procedure has only one statement, this is
-trivial. Else, you can use Profiler to find out; the Duration column will tell
-you. Either just trace the procedure
-from the application, or run the procedure from Management Studio (with
-ARITHABORT OFF!) and filter for your own spid.
-
Yet an option is to use the stored procedure
-sqltrace, written by Lee Tudor and which I am glad to host on my web site.
-sqltrace takes an SQL batch as parameter, starts a server-side trace,
-runs the batch, stops the trace and then summarises the result. There are a
-number of input parameters to control the procedure, for instance how to sort
-the output.
In many cases you can easily find the query plans by running the procedure in
-Management Studio, after first enabling Include Actual Execution Plan (you find
-it under the Query menu). This works well, as long as the procedure does not
-include a multitude of queries, in which case the Execution Plan tab gets too
-littered to work with. We will look at alternative strategies in the next
-section.
-
Typically you would run the procedure like this:
-
SET ARITHABORT ON
-go
-EXEC that_very_sp 4711, 123, 1
-go
-SET ARITHABORT OFF
-go
-EXEC that_very_sp 4711, 123, 1
-
The assumption here is that the application runs with the default options, in
-which case the first call will give the good plan – because the plan is sniffed
-for the parameters you provide – and the second call will run with the bad plan
-which already is in the plan cache.
-To determine the cache keys in sway, you can use the query in the section
-Different Plans for Different Settingsto see the cache-key values for the plan(s) in the cache. (If you already have tried the
-procedure in Management Studio, you may have two entries. The column
-execution_count in sys.dm_exec_query_stats can help you to discern the entries
-from each other; the one with the low count is probably your attempt from SSMS.)
-
Once you have the plans, you can easily find the sniffed parameter values.
-Right-click the left-most operator in the plan – the one that reads SELECT,
-INSERT, etc – select Properties, which will open a pane to the right. (That is
-the default position; the pane is detachable.) Here is an example how it can
-look like:
-
-
The first Parameter Compiled Value is the sniffed value which is
-causing you trouble one way or another. If you know your application and the
-pattern how it is used, you may get an immediate revelation when you see the
-value. Maybe you do not, but at least you know now that there is a situation where the application calls the procedure with this possibly odd
-value.
-
Note also that you can see the
-settings of some of the SET options that are cache keys. However, beware that
-there is a
-
-bug in SQL 2005, so that that the SET options will be always be reported as
-False. This is an engine bug, and thus your version of SSMS does not matter.
-
While Management Studio provides a very good interface to examine query
-plans, I still want to put in a plug for a more versatile alternative, to wit
-SQL
-Sentry Plan Explorer, a free tool from SQL Sentry, a tool vendor in the SQL
-Server space. Their Plan Explorer permits you view the plan in different ways, and it is
-also easier to navigate among the queries if your batch has a lot of them.
-
When you look at a query plan, it is far from always apparent what part of the plan that is really costly. But the
-thickness of the arrows is a good lead. The thicker the arrow, the more rows are passed to the next operator. And if you are looking at an actual execution
-plan, the thickness is based on the actual number of rows. On the other hand, I usually don't give any attention to the percentages at all. They are always
-estimates, and they can be way off, particular it there is a gross misestimate somewhere in the plan.
It is not always feasible to use SSMS to get the query plans and the sniffed parameter values. The bad query maybe runs for more minutes than your patience
-can accept, or the procedure includes too many statements that you only get a mess in SSMS. Not the least this can be an issue if the procedure includes a loop
-that is executed many times, in which case not even SQL Sentry Plan Explorer may be workable.
-
One option to get hold of the query plan and the sniffed parameters is to retrieve it directly from the plan cache. This is quite convenient
-with help of the query below, but there is an obvious limitation with this method: you only get the estimates.
-The actual number of rows and actual number of executions, two values that are
-very important to understand why a plan is bad, are missing.
-
The Query
-
This query will return the statements, the sniffed parameter values and the
-query plans for a stored procedure:
-
DECLARE @dbname nvarchar(256),
- @procname nvarchar(256)
-SELECT @dbname = 'Northwind',
- @procname = 'dbo.List_orders_11'
-
-; WITH basedata AS (
- SELECT qs.statement_start_offset/2 AS stmt_start,
- qs.statement_end_offset/2 AS stmt_end,
- est.encrypted AS isencrypted, est.text AS sqltext,
- epa.value AS set_options, qp.query_plan,
- charindex('<ParameterList>', qp.query_plan) + len('<ParameterList>')
- AS paramstart,
- charindex('</ParameterList>', qp.query_plan) AS paramend
- FROM sys.dm_exec_query_stats qs
- CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
- CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle,
- qs.statement_start_offset,
- qs.statement_end_offset) qp
- CROSS APPLY sys.dm_exec_plan_attributes(qs.plan_handle) epa
- WHERE est.objectid = object_id (@procname)
- AND est.dbid = db_id(@dbname)
- AND epa.attribute = 'set_options'
-), next_level AS (
- SELECT stmt_start, set_options, query_plan,
- CASE WHEN isencrypted = 1 THEN '-- ENCRYPTED'
- WHEN stmt_start >= 0
- THEN substring(sqltext, stmt_start + 1,
- CASE stmt_end
- WHEN 0 THEN datalength(sqltext)
- ELSE stmt_end - stmt_start + 1
- END)
- END AS Statement,
- CASE WHEN paramend > paramstart
- THEN CAST (substring(query_plan, paramstart,
- paramend - paramstart) AS xml)
- END AS params
- FROM basedata
-)
-SELECT set_options AS [SET], n.stmt_start AS Pos, n.Statement,
- CR.c.value('@Column', 'nvarchar(128)') AS Parameter,
- CR.c.value('@ParameterCompiledValue', 'nvarchar(128)') AS [Sniffed Value],
- CAST (query_plan AS xml) AS [Query plan]
-FROM next_level n
-CROSS APPLY n.params.nodes('ColumnReference') AS CR(c)
-ORDER BY n.set_options, n.stmt_start, Parameter
-
If you have never worked with these DMVs before, I appreciate if this is
-mainly mumbo-jumbo to you. To
-keep the focus on the main subject of this article, I will
-defer to a later section to explain this query. The only thing I like to give
-attention to here and now is that you specify the database and the procedure
-you want to work with in the beginning. You may think this would better be a
-stored procedure, but it is quite likely that you want to add or remove columns, depending on
-what you are looking for.
-
The Output
-
To see the query in this action, you can use this test batch (and, yes, the
-examples get more and more contrived as we move on):
-
CREATE PROCEDURE List_orders_11 @fromdate datetime,
- @custid nchar(5) AS
-SELECT @fromdate = dateadd(YEAR, 2, @fromdate)
-SELECT *
-FROM Orders
-WHERE OrderDate > @fromdate
- AND CustomerID = @custid
-IF @custid = 'ALFKI' CREATE INDEX test ON Orders(ShipVia)
-SELECT *
-FROM Orders
-WHERE CustomerID = @custid
- AND OrderDate > @fromdate
-IF @custid = 'ALFKI' DROP INDEX test ON Orders
-go
-SET ARITHABORT ON
-EXEC List_orders_11 '19980101', 'ALFKI'
-go
-SET ARITHABORT OFF
-EXEC List_orders_11 '19970101', 'BERGS'
-
When you have executed this batch, you can run the query above. When I do
-this I see this result in SSMS:
-
-
-
These are the columns:
-
-SET – The set_options attribute for the plan. As I discussed earlier, this is a bit mask.
-In this picture, you see the two most likely values. 251 is
-the default settings and 4347 is the default settings + ARITHABORT ON. If you see other values, you can use the function
-setoptions to translate the bit mask.
-
-Pos – This is the position for the query in the procedure, counted in
-characters from the start of the batch that created the procedure,
-including any comments preceding CREATE PROCEDURE. Not terribly useful in
-itself, but serves to sort the statements in the order they appear in the
-procedure.
-
-Statement – The SQL statement. Note that the statements are repeated once for
-each parameter in the query.
-
-Parameter – The name of the parameter. Only parameters that
-appear in this statement are listed. As a consequence of this, statements that do not refer to any parameters are not included in the output
-at all.
-
-Sniffed Value – The compile-time value for the parameter, that is, the value
-that the optimizer sniffed when it built the plan. In difference to the Properties pane for the
-plan, you don't see any actual parameter value here. As I discussed previously, the sniffed value for a parameter can be different for different
-statements in the procedure, and you see an example of this in the picture above.
-
-Query Plan – The query plan. If you have SQL Server Management
-Studio 2008 or later, you can click on the XML document, and you will see the graphical
-plan directly. If you have SSMS 2005, you will only see the XML document. You
-can save it with the extension .sqlplan, and then re-open it to see the graphics. As I noted
-above, this is only the estimated plan. You cannot get any actual values from the cache.
-
The Query Explained
-
This query refers to some DMVs which not all readers may be acquainted with. It also uses some query techniques that you
-may not be very familiar with, for instance
-XQuery. It would take up too much space and distract you from the main topic to
-dive into the query in full, so I will explain it only briefly. If the query and the explanation goes over
-your head, don't feel too bad about it. As long you understand the output, you
-can still have use for the query.
-
The query uses two CTEs (Common Table Expression). The first CTE,
-basedata, includes all access to DMVs.
-We have already seen of all of
-them but sys.dm_exec_text_query_plan. There are two more columns we
-retrieve from sys.dm_exec_query_stats, to wit statement_start_offset
-and statement_end_offset. They delimit the statement for this row, and we
-pass them to sys.dm_exec_text_query_plan to get the plan for this
-statement only. (Recall that the procedure is a single cache entry with a
-single plan_handle.) sys.dm_exec_text_query_plan returns the column query_plan
-which contrary to what you may expect is nvarchar(MAX).
-The reason for this is that the XML for a query plan may be so deeply
-nested, that it cannot be represented with SQL Server's built-in xml
-data type. The CTE returns the query plan as such, but it also extracts the
-positions for the part in the document where the parameter values appear.
-
In the next CTE, next_level, I go on and use the values
-obtained in basedata. The CASE
-expression extracts the statement from the text returned by sys.dm_exec_sql_text.
-The way to do this is fairly clunky, not the least with those long column names.
-Since there is little reason to modify that part of the query, I say no more but
-refer you to Books Online. Or just believe me when I say it works. :-) The next
-column in the CTE, params, performs the actual extraction of the parameter
-values from the query-plan document and converts that element to the xml
-data type.
-
In the final SELECT, I shred the params document, so that we get one row
-per parameter. It can certainly be argued that it is better to have all
-parameters on a single row, since in this case each statement will only appear
-once, and you could easily modify the final SELECT to achieve that. In the final
-SELECT, I also convert the query-plan column to XML, but as noted above, this
-could fail because of limitations with the xml data type. If you get such
-an error, just comment out that column.
-
Beside the alterations I have already mentioned, there are several ways you
-could modify the query to get information you find interesting. For instance,
-you could add more columns
-from sys.dm_exec_query_stats or more plan
-attributes. I opted to include the set_options attribute only, since this
-is the cache key which is most likely to vary. If you would like to include all statements in the procedure, including those that do not refer to any of the
-input parameters, just change CROSS APPLY on the next-to-last line to OUTER APPLY.
Yet an alternative to get hold of the query plans is to run a trace against the application or against your connection in SSMS. There are several Showplan
-events you can include in a trace. The most versatile is Showplan XML Statistics Profile which gives you the same information as you see in SSMS when you enable
-Include Actual Execution Plan.
-
However, for several reasons a trace is rarely a very good alternative. To start with, enabling query-plan information in a trace induces quite some load on the
-server. And observe that this applies even if you narrow your filter to a single spid. The way the trace engine works, all processes still have to
-generate the event. I know. By mistake I once left a trace with Showplan XML Statistics Profile, filtered for my own spid,
-running on a production
-server. It wasn't fun.
-
Next, if you run the trace in Profiler, you are likely to find it very difficult to set up a good filter that captures what you want to see but hides all
-the noise. One possibility, once the trace has completed, is to save the trace
-to a table in the database, which permits you to find the interesting
-information through queries. (But don't ask Profiler to save to a table
-while the trace is running. The overhead for that is awful.) The plan is in the
-TextData column. Cast it to xml and then you can view it as I described
-in the previous section.
-
In SQL 2008 you can also use Extended Events to get hold of the query plan, but this does not appear to be any simple work. I have not worked with
-Extended Events myself, so I cannot give any examples.
I assume that you are already acquainted with ways to find out how a table is
-defined, either with sp_help or through scripting, so I jump directly to the topic of indexes. They too can be scripted or you can use sp_helpindex.
-But scripting is bulky in my opinion, and sp_helpindex does not support features
-added in SQL 2005 or later. This query can be helpful:
-
DECLARE @tbl nvarchar(265)
-SELECT @tbl = 'Orders'
-
-SELECT o.name, i.index_id, i.name, i.type_desc,
- substring(ikey.cols, 3, len(ikey.cols)) AS key_cols,
- substring(inc.cols, 3, len(inc.cols)) AS included_cols,
- stats_date(o.object_id, i.index_id) AS stats_date,
- i.filter_definition
-FROM sys.objects o
-JOIN sys.indexes i ON i.object_id = o.object_id
-CROSS APPLY (SELECT ', ' + c.name +
- CASE ic.is_descending_key
- WHEN 1 THEN ' DESC'
- ELSE ''
- END
- FROM sys.index_columns ic
- JOIN sys.columns c ON ic.object_id = c.object_id
- AND ic.column_id = c.column_id
- WHERE ic.object_id = i.object_id
- AND ic.index_id = i.index_id
- AND ic.is_included_column = 0
- ORDER BY ic.key_ordinal
- FOR XML PATH('')) AS ikey(cols)
-OUTER APPLY (SELECT ', ' + c.name
- FROM sys.index_columns ic
- JOIN sys.columns c ON ic.object_id = c.object_id
- AND ic.column_id = c.column_id
- WHERE ic.object_id = i.object_id
- AND ic.index_id = i.index_id
- AND ic.is_included_column = 1
- ORDER BY ic.index_column_id
- FOR XML PATH('')) AS inc(cols)
-WHERE o.name = @tbl
- AND i.type IN (1, 2)
-ORDER BY o.name, i.index_id
-
As listed, the query will not run on SQL 2005, but just remove the final
-column, filter_definition, from the result set. This column applies to
-filtered indexes, a feature added in SQL 2008. As for the column stats_date,
-see the next section.
-
The query only lists regular relational indexes, not XML indexes or spatial indexes. Problems related to searches in XML documents or spatial columns are
-beyond the scope for this article anyway.
To view all statistics for a table, you can use this query:
-
DECLARE @tbl nvarchar(265)
-SELECT @tbl = 'Orders'
-
-SELECT o.name, s.stats_id, s.name, s.auto_created, s.user_created,
- substring(scols.cols, 3, len(scols.cols)) AS stat_cols,
- stats_date(o.object_id, s.stats_id) AS stats_date,
- s.filter_definition
-FROM sys.objects o
-JOIN sys.stats s ON s.object_id = o.object_id
-CROSS APPLY (SELECT ', ' + c.name
- FROM sys.stats_columns sc
- JOIN sys.columns c ON sc.object_id = c.object_id
- AND sc.column_id = c.column_id
- WHERE sc.object_id = s.object_id
- AND sc.stats_id = s.stats_id
- ORDER BY sc.stats_column_id
- FOR XML PATH('')) AS scols(cols)
-WHERE o.name = @tbl
-ORDER BY o.name, s.stats_id
-
As with the query for indexes, the query does not run for SQL 2005 as listed, but just remove filter_definition from the result set. auto_created
-refers to statistics that SQL Server creates automatically when it gets the occasion, while user_created refers to indexes created explicitly with CREATE
-STATISTICS. If both are 0, the statistics exists because of an index.
-
The column stats_date returns when the statistics most recently was
-updated. If the date is way back in the past, the statistics may be out of date.
-The root cause to parameter-sniffing-related problems is usually something else
-than outdated statistics, but it is always a good idea to look out for this. One
-thing to keep in mind is that statistics for columns with monotonically
-increasing data – e.g. id and date columns – quickly go out of date, because
-queries are often for the most recently inserted data, which is always beyond
-the last slot in the histogram (more about histograms later).
-
If you believe statistics are out of date, you can use this command:
-
UPDATE STATISTICS tbl WITH FULLSCAN, INDEX
-
This updates all statistics related to indexes on the table by scanning them
-in full. FULLSCAN is not necessary, but I have been burned too often by
-inaccurate statistics to be really comfortable with sampled statistics (which is
-the default). Restricting the statistics update to indexes only reduces execution
-time considerably, because SQL Server scans the table once for each non-index
-statistics.
-
You can also update statistics for a single index. The syntax for this is not
-what you may expect:
-
UPDATE STATISTICS tbl indexname WITH FULLSCAN
-
Note: there is no period between the table name and the index name, just space.
-
Note that after updating statistics, you may see an immediate performance
-improvement in the application. This does necessarily prove that outdated
-statistics was the problem. Since updated statistics causes recompilation, the
-parameters may be re-sniffed and you get a better plan.
-
To see the distribution statistics for an index use DBCC SHOW_STATISTICS.
-This command takes two parameters. The first is the table name, whereas the
-second can be the name of an index or statistics, but you can also specify a
-column name. For instance:
-
DBCC SHOW_STATISTICS (Orders, OrderDate)
-
This displays three result sets. I will not cover all of them here, but only say that the
-last result set is the actual histogram for the statistics. The histogram
-reflects the distribution that SQL Server has recorded about the data in the
-table. Here is how the first few lines look in the example:
-
-
-
This tells us that according to the statistics there is exactly one row with
-OrderDate = 1996-07-04. Then there is one row in the range from
-1996-07-05 to 1996-07-07 and two rows with OrderDate = 1996-07-08. (Because
-RANGE_ROWS is 1 and EQ_ROWS is 2.) The histogram then continues, and there is in
-total 188 steps for this particular statistics. There are never more than 200
-steps in a histogram. For full details on the output, please see the topic for DBCC
-SHOW_STATISTICS in Books
-Online. One of the white papers listed in the section
-Further Reading has more valuable information
-about statistics and the histogram.
-
Note: In SQL 2005 there is a bug, so if there is a step for
-NULL values, DBCC SHOW_STATISTICS fails to show
-this row. This is a display error, and the value is still there in the
-histogram.
-
You do typically not run DBCC SHOW_STATISTICS for all statistics to have the information
-just in case, but only when you think that the information may be useful to you.
-We will look such an example in the next chapter.
It is important to understand that parameter sniffing in itself is not a problem; au contraire, it is a feature, since without it SQL Server would have to
-rely on blind assumptions, which in most cases would lead to less optimal query plans. But sometimes parameter sniffing works against you.
-We can identify three typical situations:
-
-
The query usage is such that parameter sniffing is entirely inappropriate.
- That is, a plan which is good for a certain execution may be
- inappropriate for the next.
-
There is a specific pattern in the application where one group of calls is
- very different from the main bulk. Often this is a call the
- application performs on start-up or at the beginning of a new day.
-
The index structure for one or more tables is such that there is no perfect
- index for the query, but there are several half-good indexes, and it is
- haphazard which index the optimizer chooses.
-
-
It can be difficult to say beforehand which applies to your situation, and
-that is why you need to make a careful analysis. In the previous section I
-discussed what information you need, although I did not always make it clear
-what for. In addition, there is one more thing I did not list but which be
-immensely helpful: intimate knowledge about how the application works and its
-usage pattern.
-
Since there are several possible reasons why parameter sniffing gives you a
-headache, this means that there is no single solution that you can apply. Rather
-there is a host of them, depending on where the root cause lies. In the following I will give some examples of parameter-sniffing related
-issues and how to address them. Some are real-life examples, others are more
-generic in nature. Some of the examples focus more on the analysis, others take
-a straight look at the solution.
Before I go into the real solutions, let me first point out that adding SET
-ARITHABORT ON to your procedure is not a solution. It will seem to work
-when you try it. But that is
-only because you recreated the procedure which forced a new compilation and then the next invocation sniffed the current set of parameters. SET ARITHABORT ON is
-only a placebo, and not even a good one. The problem will most likely come back. It will not even help you avoid the confusion with
-different performance in the application and SSMS, because the overall cache
-entry will still have ARITHABORT OFF as its plan attribute.
-
So, don't put SET ARITHABORT ON in your stored procedures. Overall, I
-strongly discourage from you using any of the SET commands that are cache keys in
-your code.
CREATE PROCEDURE List_orders_12 @custid nchar(5),
- @fromdate datetime,
- @todate datetime AS
- SELECT *
- FROM Orders
- WHERE CustomerID = @custid
- AND OrderDate BETWEEN @fromdate AND @todate
-
There is a non-clustered index on CustomerID and another one on OrderDate.
-Assume that the order activity among customers varies vividly. Many
-customers make just a handful a orders per year. But some customers are more
-active, and some real big guys may place several orders per day.
-
In the Northwind database, the most active customer is SAVEA with 31 orders,
-whereas CENTC has only one order. Run the below:
That is, for SAVEA we only look at the orders for a single day, but for CENTC
-we look at the orders for an entire year. As you may sense, these two
-invocations are best served by different indexes. Here is the plan for the first invocation:
-
-
SQL Server here uses the index for OrderDate which is the most selective. The plan for the second invocation is different:
-
-
Here CustomerID is the most selective column, and SQL Server uses the index on CustomerID.
-
One solution to address this is to force recompilation every time with the
-RECOMPILE query hint:
-
CREATE PROCEDURE List_orders_12 @custid nchar(5),
- @fromdate datetime,
- @todate datetime AS
-SELECT *
-FROM Orders
-WHERE CustomerID = @custid
- AND OrderDate BETWEEN @fromdate AND @todate
-OPTION (RECOMPILE)
-
With this hint, SQL Server will compile the query every time. Rather than
-using the query hint, you can tell SQL Server to recompile the entire procedure
-on each invocation:
-
CREATE PROCEDURE List_orders_12 @custid nchar(5),
- @fromdate datetime,
- @todate datetime WITH RECOMPILE AS
-
For the example at hand, it has no importance which you use, since the
-procedure consists of a single statement. But for a long procedure with many statements
-of which only one is problematic, WITH RECOMPILE
-is clearly an inferior choice, due to the increase in compilation overhead. An
-interesting effect of WITH RECOMPILE, though, is that the plan is never put into
-the cache at all, whereas this happens when you use OPTION (RECOMPILE).
-
In many cases, forcing recompilation every time is quite alright, but there are a few situations where it
-is not:
-
-
The procedure is called with a very high frequency, and the compilation overhead
- hurts the system.
-
The query is very complex and the compilation time has a noticeable
- negative impact on the response time.
-
-
More to the point, while forcing recompilation is a solution that is
-almost always feasible, it is not always the best solution. As a matter of fact,
-the example we have looked at in this section is probably not very typical for
-the situation "fast in SSMS, slow in the application". Because, if you have
-varying usage pattern, you will be alerted of varying performance within the
-application itself. So there is all reason to read on, and see if the situation
-you are facing fits with the other examples I present.
It is very common to have forms where users can select from a number of
-search conditions. For instance they can select to see orders on a certain date,
-by a certain customer, for a certain product etc, including combinations of the
-parameters. Such procedures are sometimes implemented with a WHERE clauses that
-goes:
-
WHERE (CustomerID = @custid OR @custid IS NULL)
- AND (OrderDate = @orderdate OR @orderdate IS NULL)
- ...
-
As you may imagine, parameter sniffing is not beneficial for such procedures.
-I am not going to take up much space on this problem here, for two
-reasons: 1) As I've already said, problem with such procedures usually manifests
-itself with varying performance within the application. 2) I have a
-separate article devoted to this topic, entitled Dynamic
-Search Conditions in T‑SQL.
Some time ago, one of my clients contacted me because one of their customers
-experienced a severe performance problem with a function in their system. My
-client said that the same code ran well at other sites, and there had been no
-change recently to the application. (But you know, clients always say that, it seems.) They had been able to isolate the
-problematic procedure, which included a query which looked something like this:
-
SELECT DISTINCT c.*
-FROM Table_C c
-JOIN Table_B b ON c.Col1 = b.Col2
-JOIN Table_A a ON a.Col4 = b.Col1
-WHERE a.Col1 = @p1
- AND a.Col2 = @p2
- AND a.Col3 = @p3
-
When executed from the application, the query took 10-15 minutes. When they
-ran the procedure from SSMS, they found that response time was instant. That was then they called me.
-
An account was set up for me to make it possible to log in to the site in question. I found
-that all three tables were of some size, at least a million rows in each. I looked
-at the indexes for Table_A, and I found that it had some 7-8 indexes. Of interest
-for this query was:
-
-
One non-clustered, non-unique index Combo_ix on (Col1, Col2, Col5, Col4) and
- maybe some more columns.
-
One non-clustered, non-unique index Col2_ix on (Col2).
-
One non-clustered, non-unique index Col3_ix on (Col3).
-
-
Thus, where was no index that covered all conditions in the WHERE clause.
-
When I ran the procedure in SSMS with default settings, the optimizer choose
-the first index to get data from Table_A. When I changed the setting of ARITHABORT
-to OFF to match the application, I saw a plan that used the index on Col3.
-
At this point I ran
-
DBCC SHOW_STATISTICS (Table_A, Col3_ix)
-
The output looked like something like this:
-
-
-
-
-
-
-
RANGE_HI_KEY
-
RANGE_ROWS
-
EQ_ROWS
-
DISTINCT_RANGE_ROWS
-
AVG_RANGE_ROWS
-
-
-
APRICOT
-
0
-
17
-
0
-
1
-
-
-
BANANA
-
0
-
123462
-
0
-
1
-
-
-
BLUEBERRY
-
0
-
46
-
0
-
1
-
-
-
CHERRY
-
0
-
92541
-
0
-
1
-
-
-
FIG
-
0
-
1351
-
0
-
1
-
-
-
KIWI
-
0
-
421121
-
0
-
1
-
-
-
LEMON
-
0
-
6543
-
0
-
1
-
-
-
LIME
-
0
-
122131
-
0
-
1
-
-
-
MANGO
-
0
-
95824
-
0
-
1
-
-
-
ORANGE
-
0
-
10410
-
0
-
1
-
-
-
PEAR
-
0
-
46512
-
0
-
1
-
-
-
PINEAPPLE
-
0
-
21102
-
0
-
1
-
-
-
PLUM
-
0
-
13
-
0
-
1
-
-
-
RASPBERRY
-
0
-
95
-
0
-
1
-
-
-
RHUBARB
-
0
-
7416
-
0
-
1
-
-
-
STRAWBERRY
-
0
-
24611
-
0
-
1
-
-
-
-
That is, there were only 17 distinct values for this column and with a very
-uneven distribution among these values. I also confirmed this fact by
-running the query:
-
SELECT Col3, COUNT(*) FROM Table_A GROUP BY Col3 ORDER BY Col3
-
I proceeded to look at the bad query plan to see what value that the optimizer
-had sniffed
-for @p3. I found that it was – APPLE, a value not present
-in the table at all! That is, the first time the procedure was executed, SQL
-Server had estimated that the query would return a single row (recall that it
-never estimates zero rows), and that the index on Col3 would be the most
-efficient index to find that single row.
-
Now, you may ask how it could be that unfortunate that the procedure was
-first executed for APPLE? Was that just bad luck? Since I don't know this
-system, I can't tell for sure, but apparently this had happened more than
-once. I got the impression that this procedure was
-executed many times as part of some bigger operation. Say that the operation would always start with APPLE. Remember that reindexing a table triggers recompilation, and it is
-very common to run maintenance jobs at night to keep fragmentation in check.
-That is, the first call in the morning can be very decisive for your
-performance. (Why would the operation start with a value that is not in the
-database? Who knows, but maybe APPLE is an unusual condition that needs to be
-handled first if it exists. Or maybe it is just the alphabet.)
-
For this particular query, there is a whole slew of possible measures to
-address the performance issue.
-
-
OPTION (RECOMPILE) / WITH RECOMPILE
-
Add the "optimal" index on (Col1, Col2, Col3) INCLUDE (Col4).
-
Make the index on Col3 filtered or drop it entirely.
-
Use an index hint to force use of any of the other indexes.
-
The query hint OPTIMIZE FOR.
-
Copy @p3 to a local variable.
-
Change the application behaviour.
-
-
We have already looked at forcing recompilation, and while it most probably would have solved the problem, it is not likely that it would have been
-the best solution. Below, I will look into the other options in more detail.
-
Add a New Index
-
My primary recommendation to the customer was the second on the list: add an index that
-matches the query perfectly. That is, an index where all columns in the WHERE
-clauses are index keys, with the least selective column Col3 last among the
-keys. On top of that, add Col4 as an included column, so that the query can be
-resolved from the new index alone, without any need to access the data pages.
-
However, adding a new index is not always a good solution. If you have a table
-which is accessed in a multitude of ways, it may not be feasible to add indexes
-that matches all WHERE and JOIN conditions, even less to add covering indexes
-for each and every query. Particularly, this applies to tables with a heavy
-update rate, like an Orders table. The more indexes you add to a table, the
-higher the cost to insert, update and delete rows in the table.
-
Change / Drop the Index on Col3
-
How useful is the index on Col3 really? Since I don't know this system
-it is difficult to tell. But generally, indexes on columns with only a small
-set of values are not very selective and thus not that useful. So an option could be to drop
-the
-index on Col3 altogether and thereby save the optimiser from this trap. Maybe
-the index was added at some point in time
-by mistake, or it was added without understanding of how the database would look like after a
-couple of years. (Having worked a little more with this client, it
-seems that they add indexes on all FK columns a matter of routine. Which may or
-may not be a good idea.)
-
It cannot be denied, that you have to be a very brave person to drop
-an index entirely. You can consult sys.dm_dbindex_usage_stats
-to see how much the index is used. Just keep in mind that this DMV is cleared
-when SQL Server is restarted or the database is taken offline.
-
Since the distribution in Col3 is so uneven, it is not unlikely that there are queries that look for these rare values specifically. Maybe FIG is "New
-unprocessed rows". Maybe RASPBERRY means "errors". In this case, it could be
-beneficial to make Col3_ix a filtered index, a new feature added in SQL 2008. For instance, the index definition could read:
-
CREATE INDEX col3_ix ON Table_A(col3) WHERE col3 IN ('FIG', 'RASPBERRY', 'APPLE', 'APRICOT')
-
This has two benefits:
-
-
The size of the index is reduced with more than 99%.
-
The index is no longer eligible for the problem query. Recall that SQL
- Server must select a plan which is correct for all input values, so even if
- the sniffed parameter value is APPLE, SQL Server cannot use the index, because
- the plan would yield incorrect result for KIWI.
-
-
Force a Different Index
-
If you know that the index on Col1, Col2 will always be the best index, but
-you don't want to add or drop any index, you can force the index with:
-
SELECT c.*
-FROM Table_C c
-JOIN Table_B b ON c.Col1 = b.Ccol2
-JOIN Table_A a WITH (INDEX = Combo_ix) ON a.Col4 = b.Col1
-WHERE a.Col1 = @p1
- AND a.Col2 = @p2
- AND a.Col3 = @p3
-
You can even say:
-
WITH (INDEX (combo_ix, col2_ix))
-
to give the optimizer the choice between the two "good" indexes.
-
Index hints are very popular, too popular one might say. You should think
-twice before you add an index hint, because tomorrow your data distribution may
-be different, and another index would serve the query better. A second problem
-is that if you later decide to rearrange the indexes, the query will fail with
-an error because of the missing index.
-
OPTIMIZE FOR
-
OPTIMIZE FOR is a query hint that permits you to control parameter sniffing.
-For the example query, it could look like this:
-
SELECT c.*
-FROM Table_C c
-JOIN Table_B b ON c.col1 = b.col2
-JOIN Table_A a ON a.col4 = b.col1
-WHERE a.col1 = @p1
- AND a.col2 = @p2
- AND a.col3 = @p3
-OPTION (OPTIMIZE FOR (@p3 = 'KIWI'))
-
The hint tells SQL Server to ignore the input value, but instead compile the
-query as if the input value of @p3 is KIWI, the most common value in
-Col3. This will surely dissuade SQL Server from using the index.
-
A second option, available only in SQL 2008 and later, is:
-
OPTION (OPTIMIZE FOR (@p3 UNKNOWN))
-
Rather than hard-coding any particular value, we can tell SQL Server to make
-a blind assumption to completely kill parameter sniffing for @p3.
-
It is worth adding that you can use OPTIMIZE FOR also with locally declared
-variables, and not only with parameters.
-
Copy @p3 to a Local Variable
-
Rather than using @p3 directly in the query, you can copy it to a local
-variable, and then use the variable in the query. This has the same effect as
-OPTIMIZE FOR UNKNOWN. And it works on any version of SQL Server.
-
Change the Application
-
Yet an option is to change the processing in the application so that it starts
-with the one of the more common values. It's not really a solution I recommend,
-because it creates an extra dependency between the application and the database.
-There is risk that the application two years later is rewritten to
-accommodate new requirements that PEACH rows must be handled, and this handling
-is added first...
-
Then again, there may be a general flaw in the process. Is the application
-asking for values for one fruit at a time, when it should be getting values for
-all fruits at once? I helped this client with another query. We had a
-query-tuning session in a conference room, and I was never able to get really
-good performance from the query we were working with. But towards the end of the day, the responsible
-developer said that he knew how to continue, and his solution was to rearchitect
-the entire process the problematic query was part of.
-
Summing it Up
-
As you have seen in this example, there are a lot of options to choose from – too
-many, you may think. But performance tuning often requires you to have a
-well-stuffed bag of tricks, because different problems call for different
-solutions.
In
-the system I work with most of my time, there is a kind of application cache that keeps data in a main-memory database, let's call it MemDb. It is used for
-several purposes, but the main purpose is to serve as a cache from which the
-customer's web server can retrieve data rather than querying the database.
-Typically, in the morning there is a total refresh of the data. When data in a
-database table is updated, there is a signalling mechanism which triggers MemDb to run a
-stored procedure to get the delta. In order to
-find what has changed, MemDb relies on timestamp columns. (A timestamp column
-holds an 8-byte value that is unique to the database and which grows
-monotonically. It is
-automatically updated when the row is inserted or updated.) A typical stored procedure
-to retrieve changes looks like this:
-
CREATE PROCEDURE memdb_get_updated_customers @tstamp timestamp AS
- SELECT CustomerID, CustomerName, Address, ..., tstamp
- FROM Customers
- WHERE tstamp > @tstamp
-
When MemDb calls these procedures, it passes the highest value in the tstamp
-column for the table in question from the previous call. When the procedure is invoked for a refresh, the main-memory database passes 0x as the parameter to get
-all rows.
-
Side note: The actual scheme is more complicated than the
-above; I have simplified it to focus on what is important for this article. If you are
-considering something similar,
-be warned that as shown, this example has lots of issues with concurrent updates,
-not the least if you use any form of snapshot isolation. SQL 2008 introduced Change Tracking which is a more solid
-solution, particularly designed for this purpose. I also like to add that MemDb was not my idea, nor was I involved in the design of it.
-
At one occasion when I monitored the performance for a customer that just
-had went live with our system, I noticed that the MemDb procedures had quite
-long execution times. Since they run very often to read deltas, they have to
-be very quick. After all, one idea with MemDb is to take load off from the
-database – not add to it.
-
For a query like the above to be fast there has to be an index on tstamp,
-but will this index be used? From what I said above, the first thing in the
-morning, MemDb would run:
It is not uncommon that during the night that query plans fall out of
-the cache because of nightly batches that consume a lot of memory. Or there is a
-maintenance job to rebuild indexes which triggers recompiles. So typically,
-when the morning refresh runs, there is not any plan in the cache, and the
-value sniffed is 0x. Given this value, will the optimizer use the index on
-tstamp? Yes, if it is the clustered index. But since a timestamp column is
-updated every time a row is updated, it is not a very good choice for the
-clustered index, and all our indexes on timestamp columns are non-clustered. (And
-for tables with a high update frequency, also a non-clustered index on a
-timestamp column may be questionable.) Thus, since the optimizer sees that the
-parameter indicates that all rows in the table will be retrieved, it settles for
-a table scan. This plan is put into cache, and subsequent calls also scan the table,
-even if they are only looking for the most recent rows. And it was this poor
-performance that I saw.
-
When you have a situation like this, there are, just like in the previous
-example, several ways to skin the cat. But before we look at the possibilities,
-we need to make one important observation: there is no query plan that is good
-for both cases. We want to use the index to read the deltas, but when making the
-refresh we want the scan. Thus, only solutions that can yield different plans
-for the two cases need to apply.
-
OPTION (RECOMPILE)
-
While this solution meets the requirement, it is not a good solution. This
-means that every time we retrieve a delta, there is compilation. And while the
-above procedure is simple, some of the MemDb procedures are decently complex with
-a non-trivial cost for compilation.
-
EXECUTE WITH RECOMPILE
-
Rather than requesting recompilation inside the procedure, it is better to do
-it in the special case: the refresh. The refresh only happens once a day normally. And furthermore, the refresh is fairly costly in itself, so the cost of
-recompilation is marginal in this case. That is, when MemDb wants to make a refresh, it should call the procedure in this way:
-
EXECUTE memdb_get_updated_customers WITH RECOMPILE
-
As I noted previously, it is likely that there is no plan in the cache early
-in the morning, so you may ask what's the point? The point is that when you use WITH
-RECOMPILE with EXECUTE, the plan is not put into cache. Thus, the refresh can
-run with the scan, but the plan in the cache will be built from the first delta
-retrieval. (And if the plan for reading the delta still is in the cache, that plan will remain in the cache.)
-
For the particular problem in our system, this was the solution I mandated. An extra advantage for us was that there was a single code path in MemDb that
-had to be changed.
-
There is however a slight problem with this solution. Normally, when you call
-a stored procedure from a client, you use a special command type where you
-specify only the name of the procedure. (For instance,
-CommandType.StoredProcedure in ADO .NET.) The client API then makes an RPC
-(remote procedure call) to SQL Server, and there is never an EXECUTE statement as such.
-Very few client APIs seem to expose any method to specify
-WITH RECOMPILE when you call a procedure through RPC. The workaround is to send
-the full EXECUTE command, using CommandType.Text or similar, for
-instance:
-
cmd.CommandType = CommandType.Text;
-cmd.Text = "EXECUTE memdb_get_updated_customers @tstamp WITH RECOMPILE";
-
Note: You should pass the parameters through the Parameters collection or
-corresponding mechanism in your API; don't inline the values in the string with
-the EXEC command, as this could open for
-SQL injection.
-
Using a Wrapper Procedure
-
If you have a situation where you realise that EXECUTE WITH RECOMPILE is the
-best solution, but it is not feasible to change the client, you can introduce a
-wrapper procedure. In our example the original procedure would be renamed to
-memdb_get_updated_customers_inner, and then you would write a wrapper that
-goes:
-
CREATE PROCEDURE memdb_get_updated_customers @tstamp timestamp AS
- IF @tstamp = 0x
- EXECUTE memdb_get_updated_customers_inner @tstamp WITH RECOMPILE
- ELSE
- EXECUTE memdb_get_updated_customers_inner @tstamp
-
In many cases this can be a plain and simple solution, particularly if you have a small number of such procedures. (We have many.)
-
Different Code Paths
-
Another approach would be to have different code paths for the two cases:
-
CREATE PROCEDURE memdb_get_updated_customers @tstamp timestamp AS
- IF @tstamp = 0x
- BEGIN
- SELECT CustomerID, CustomerName, Address, ..., tstamp
- FROM Customers
- END
- ELSE
- BEGIN
- SELECT CustomerID, CustomerName, Address, ..., tstamp
- FROM Customers WITH (INDEX = timestamp_ix)
- WHERE tstamp > @tstamp
- END
-
Note that it is important to force the index in the ELSE branch, or else this branch will scan the table if the first call to the procedure is for @tstamp =
-0x because of parameter sniffing. If your procedure is more complex and includes joins to other tables, it is
-not likely that this strategy will work out, even if you force the index on
-tstamp. The estimates for the joins would be grossly incorrect and the query plans would still be optimized to get all data, and not the delta.
-
Different Procedures
-
In the situation we had, there was one procedure that was particularly
-difficult. It retrieved account transactions (this is a system for stock
-trading). The refresh would not retrieve all transactions in the database, but
-only from the N most recent days, where N was a system parameter read from the
-database. In this database N was 20. The procedure did not read from a single
-table, but there was umpteen other tables in the query. Rather than having a
-timestamp parameter, the parameter was an id. This works since transactions are never
-updated, so MemDb only needs to look for new transactions.
-
I found that in this case EXECUTE WITH RECOMPILE alone would not save the
-show, because there were several other problems in the procedure. I found no
-choice but to have two procedures, one for the refresh and one for the delta. I replaced the
-original procedure with a wrapper:
-
CREATE PROCEDURE memdb_get_transactions @transid int AS
- IF coalesce(@transid, 0) = 0
- EXECUTE memdb_get_transactions_refresh
- ELSE
- BEGIN
- DECLARE @maxtransid int
- SELECT @maxtransid = MAX(transid) FROM transactions
- EXECUTE memdb_get_transactions_delta @transid, @maxtransid
- END
-
I had to add @maxtransid as a parameter to the delta procedure, because with an open condition like WHERE
-transid > @transid, SQL Server would tend to
-miss-estimate the number of rows it had to read. Making the interval
-closed addressed that issue, and by passing @maxtransid as a parameter, SQL
-Server could sniff the value.
-
From a maintainability perspective, this is by means not a pleasant step to
-take, not the least when the logic is as complicated as in this case. If you have
-to do this, it is
-important that you litter the code with comments to tell people that if they
-change one procedure, they need to change the other one as well.
-
Note: a few years later, a colleague rewrote
-memdb_get_transactions_refresh to become a second wrapper. As I mentioned, it
-reads some system parameters to determine which transactions to read. To get
-the refresh to perform decently, he found that he had to pass the values of these system
-parameters, as well as the interval of transactions ids to read as parameters to
-an inner procedure to get full benefit of parameter sniffing. (We were still on SQL 2000 at the time. In SQL 2005 or later OPTION (RECOMPILE) would have
-achieved the same thing.)
There may also be situations where the root cause to the problem is simply
-poorly written SQL. As just one example, consider this query:
-
SELECT ...
-FROM Orders
-WHERE (CustomerID = @custid OR @custid IS NULL)
- AND (EmployeeID = @empid OR @empid IS NULL)
- AND convert(varchar, OrderDate, 101) = convert(varchar, @orderdate, 101)
-
The idea is that users here are able to search orders for a given date, and
-optionally they can also specify other search parameters. The programmer here
-consdiders
-that OrderDate may include a time portion, and factors it out by using a format
-code to convert() that produces a string without time, and to be really sure he
-performs the same operation on the input parameter. (In Northwind, OrderDate is
-always without a time portion, but for the sake of the example, I'm assuming
-that this is not the case.)
-
For this query, the index on OrderDate would be the obvious choice, but the
-way the query is written, SQL Server cannot seek that index, because OrderDate is
-entangled in an expression. This is sometimes referred to that the expression is
-not sargable, where sarg is short for search argument, that is,
-something that can be used as a seek predicate in a query. (Personally, I don't think
-the term "sargable" is a very useful one, but since you see people drop it from
-time to time, I figured that I should mention this piece of jargon.)
-
Since the index on OrderDate has been disqualified, the optimizer may settle
-for any of the other indexes, depending on the input for the first parameter,
-causing poor performance for other types of searches. The remedy is to rewrite
-the query, for instance like:
-
SELECT ...
-FROM Orders
-WHERE (CustomerID = @custid OR @custid IS NULL)
- AND (EmployeeID = @empid OR @empid IS NULL)
- AND OrderDate >= @orderdate
- AND OrderDate < dateadd(DAY, 1, @orderdate)
-
(It seems reasonable to assume that an input parameter which is supposed to be a date
-does not have any time portion, so there is little reason to litter the code
-with any extra conversion.)
-
Poorly written SQL, often manifests itself in general performance problems –
-that is, the query always runs slow – and maybe not so often in situations where
-parameter sniffing matters. Nevertheless, when you battle your parameter-sniffing problem, there is all reason to investigate whether the query could be
-written in a way that avoids the dependency of the input parameter for a good
-plan. There are many ways to write bad SQL, and this is not the place the list
-them all. Hiding columns in an expression is just one example, albeit a common one. Sometimes the expression is hidden because it is due to implicit
-conversion. Examine the plan, and when an index is not used as you would expect, go back and look at the query again.
We leave the topic of parameter sniffing and to go back to the base topic for
-this article: why a query may run slow in the application, yet fast in SQL
-Server Management Studio. Hitherto we have only looked at stored procedures, and
-with stored procedures the reason is most often due to different settings for
-SET ARITHABORT. If you have an application that does not use stored procedures,
-but generates the queries in the client or the middle layer, there are a few more
-reasons why you may get a new cache entry when you run the query in SSMS and
-maybe also a different plan than in the application.
Dynamic SQL is any SQL which not part of a stored procedure (or any other
-type of module). This includes:
-
-
SQL statements executed with EXEC() and sp_executesql.
-
SQL statements sent directly from the client.
-
SQL statements submitted from modules written in the SQLCLR.
-
-
Dynamic SQL comes in two flavours, unparameterised and parameterised. In
-unparameterised SQL, the programmer composes the SQL string by concatenating the
-language elements with the parameter values. For instance, in T‑SQL:
-
SELECT @sql = 'SELECT mycol FROM tbl WHERE keycol = ' + convert(varchar, @value)
-EXEC(@sql)
-
Or in C#:
-
cmd.CommandText = "SELECT mycol FROM tbl WHERE keycol = " + value.ToString();
SQL Server compiles dynamic SQL very much in the same way as stored
-procedures. That is, if the batch consists of more than one query, the entire batch
-is nevertheless compiled as a whole, and SQL Server has no knowledge of the values
-of local variables in the batch. As with stored procedures, SQL
-Server sniffs the values of parameters, and uses these values when
-building the query plan.
-
There is however one initial step in compilation which is unique dynamic SQL,
-to wit parameterisation. That is, SQL Server may replace a constant in the query
-with a parameter. For example, if you have:
-
SELECT * FROM Orders WHERE OrderID = 11000
-
SQL Server will compile this as you had submitted
-
EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderID = @p1', N'@p1 int', @p1 = 11000
-
There are two modes of parameterisation, simple and forced. With simple
-parameterisation, SQL Server only parameterises a fairly narrow class of simple
-queries. With forced parameterisation, SQL Server replaces about all constants
-with parameters, with some exceptions, as detailed in
-this topic
-in Books Online. The default mode is simple parameterisation, and you set the
-mode per database with ALTER DATABASE.
-
Forced parameterisation can be a big performance saver for an application
-that does not used parameterised statements, but there is little reason to use
-it with well-written applications.
Query plans for dynamic SQL are put into the plan cache, just like plans for
-stored procedures. (If you hear someone telling you something else, that person
-is either just confused or relying on very old information. Up to SQL Server 6.5, SQL Server did
-not cache plans for dynamic SQL.) As with stored procedures, plans
-for dynamic SQL may be flushed from the
-cache for a number of reasons, and individual statements may be recompiled.
-Furthermore, there may be more than one plan for the same query text
-because of difference in SET options.
-
However, there are two complications with dynamic SQL which do not apply to
-stored procedures.
-
The Query Text as Hash Key
-
When SQL Server looks up a stored procedure in the cache, it uses the name of
-the procedure. But that is not possible with dynamic SQL, as there is no
-name. Instead, SQL Server computes a hash from the query text – including any
-parameter list – and uses this hash as a key in the plan cache. And here is
-something very important: this hash value is computed without any normalisation
-whatsoever of the batch text. Comments are not stripped. White space is not
-trimmed or collapsed. Case is not forced to upper or lowercase, even if
-the database has a case-insensitive collation. The hash is computed from the
-text exactly as submitted, and any small difference will yield a different hash
-and a different cache entry.
-
Run this with Include Actual Execution Plan enabled:
-
EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '20000101'
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '19980101'
-EXEC sp_executesql N'select * from Orders where OrderDate > @orderdate',
- N'@orderdate datetime', '19980101'
-
You will find that the first two calls use the same plan, Index Seek + Key
-Lookup, whereas the third query uses a Clustered Index Scan. That is, the second
-call reuses the plan created for the first call. But in the third call, the SQL
-keywords are in lowercase, why there is no cache hit, and a new plan is created. Just to
-enforce this fact, here is a second example with the same result.
-
DBCC FREEPROCCACHE
-go
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '20000101'
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '19980101'
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate ',
- N'@orderdate datetime', '19980101'
-
The difference is that there is a single trailing space in the third statement.
-
The Significance of the Default Schema
-
The other difference to stored procedures is less obvious, and is best shown
-with an example. Run this and look at the execution plans:
-
DBCC FREEPROCCACHE
-go
-CREATE SCHEMA Schema2
-go
-CREATE USER User1 WITHOUT LOGIN WITH DEFAULT_SCHEMA = dbo
-CREATE USER User2 WITHOUT LOGIN WITH DEFAULT_SCHEMA = Schema2
-GRANT SELECT ON Orders TO User1, User2
-GRANT SHOWPLAN TO User1, User2
-go
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '20000101'
-go
-EXECUTE AS USER = 'User1'
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '19980101'
-REVERT
-go
-EXECUTE AS USER = 'User2'
-EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '19980101'
-REVERT
-go
-DROP USER User1
-DROP USER User2
-DROP SCHEMA Schema2
-go
-
The first two executions use Index Seek + Key Lookup, whereas the third uses
-Clustered Index Scan, despite the query and the parameter being identical to the
-second query. What is going on?
-
First something about the setup. The script creates two database users and
-grants them the permissions to run the queries. We run the query three times.
-First as ourselves (presumably we are dbo), and then we impersonate the two
-newly created users. (If you are not acquainted with impersonation, look up the topic for
-EXECUTE AS
-in Books Online; I also cover it in my article
-Granting Permissions through Stored Procedures.) The users are
-login-less, but that is only because we don't need any logins for this
-example. What is important is
-that they have different default schemas. User1 has dbo as its default schema,
-but not User2. Why does this matter?
-
Keep in mind that when SQL Server looks up an object, it first looks in the
-default schema of the user, and if the object is not found, it looks in
-the dbo schema. For dbo and User1, the query is unambiguous, since dbo
-is their default schema and this is the schema for the Orders table. But
-for User2 this is different. Currently there is only dbo.Orders, but what if Schema2.Orders is added later?
-Per the rules, User2 should now get data from that table and not from dbo.Orders. But
-if User2 would use the same cache entry as dbo
-and User1, that would not happen. Therefore, User2
-needs a cache entry of its own. If Schema2.Orders is added, that cache entry can
-be invalidated without affecting other users.
-
We can see this is the plan attributes. Here is a variation of the query we
-ran for stored procedures:
-
SELECT qs.plan_handle, a.attrlist
-FROM sys.dm_exec_query_stats qs
-CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
-CROSS APPLY (SELECT epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' '
- FROM sys.dm_exec_plan_attributes(qs.plan_handle) epa
- WHERE epa.is_cache_key = 1
- ORDER BY epa.attribute
- FOR XML PATH('')) AS a(attrlist)
-WHERE est.text LIKE '%WHERE OrderDate > @orderdate%'
- AND est.text NOT LIKE '%sys.dm_exec_plan_attributes%'
-
There are three differences to the query for stored procedures:
-
-
There is no condition on db_id(), since this column is only populated for
- sql_handles from stored procedures.
-
As there is no procedure name to match on, we have to use part of the
- query text.
-
We need an extra condition to filter out the query against
- sys.dm_exec_plan_attributes itself.
-
-
When I ran this query, I saw this (partial) list of attributes:
First look at objectid. As you see, this value is identical for the
-two entries. This object id is the hash value that I described above. Next, look at the attribute which is
-distinctive: user_id. The name as such is a misnomer; the value is the
-default schema for the users using this plan. The dbo schema always has schema_id = 1. In my
-Northwind database, Schema2 got schema_id = 5 when I ran the query, but you may
-see a different value.
-
Now run this query:
-
EXEC sp_executesql N'SELECT * FROM dbo.Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '20000101'
-
And then run the query against sys.dm_exec_plan_attributes again.
-A third row in the output appears:
objectid is different from above, since the query text is different.
-user_id is now
--2. What does this mean? If you look closer at the query, you see now that we
-now specify the schema explicitly when we access the Orders table. That is, the query is
-now unambiguous, and all users can use this cache entry. And that is
-exactly what user_id = -2 means: there are no ambiguous object references in the
-query. The corollary of this is that it is very much best practice to always use
-two-part notation in dynamic SQL, no matter whether you create the dynamic SQL
-in a client program or in a stored procedure.
-
You may think that "we don't use schemas in our app, so this is not an issue
-for us", but not so fast! When you use CREATE USER, the default schema for the
-new user is indeed dbo, unless you specify something else. However, if the DBA
-is of the old school, he may create users with any of the legacy procedures
-sp_adduser and sp_grantdbaccess, and they work differently. They not
-only create a user, but they also create a schema with the same name as the
-user and set this schema as the default schema for the newly created user and
-make this use the owner of the schema. Does it sound corny? Yes, but up to SQL 2000, schema and users
-were unified in SQL Server. Since you may not have control over how users are
-created, you should not rely on that users have dbo as their default schema.
-
Finally, you may wonder why this issue does not apply to the caching of plans for
-stored procedures. The answer is that in a stored procedure, the name resolution
-is always performed from the procedure owner, not the current user. That is, in
-a procedure owned by dbo, Orders can only refer to dbo.Orders never to
-any Orders table in some other schema. (But keep in mind that this applies only
-to the direct query text of the stored procedure. It does not apply to dynamic
-SQL invoked with EXEC() or sp_executesql inside the procedure.)
As you understand from the previous section, there are a few more pitfalls
-when you want to troubleshoot an application query from SSMS which may cause you
-to get a different cache entry, and potentially a different query plan.
-
As with stored procedures, you need to keep ARITHABORT and other SET options
-in mind. But you also need to make sure that you have exactly the same query
-text, and that your default schema agrees with the user running the application.
-
The latter is the easiest to deal with. In most cases this will do:
-
EXECUTE AS USER = 'appuser'
-go
--- Run SQL here
-go
-REVERT
-
appuser is here the database user that the application uses – either a private user for the application, or the user name for the actual person using
-the database. However, this fails if the query access resources outside the current database. In this case you can use EXECUTE AS LOGIN instead.
-Note that this requires a server-level permission.
-
Retrieving the exact SQL text can be more difficult. The best is use a trace to capture the SQL; you can run the trace either in Profiler or
-as a
-server-side trace. If the SQL statement is unparameterised, you need to be careful that you copy the full text, and then select exactly that text in SSMS. That
-is, do not drop or add any leading or trailing blanks. Don't add line breaks to
-make the query more readable, and don't delete any comments. Keep it exactly as
-the application runs it. You can use the query against sys.dm_exec_plan_attributes in this article to verify that you did
-not add a second entry to the cache.
-
Another alternative is to get the text from sys.dm_exec_query_stats
-and sys.dm_exec_sql_text. Here is a query you can use:
-
SELECT '<' + est.text + '>'
-FROM sys.dm_exec_query_stats qs
-CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
-WHERE est.text LIKE '%some significant SQL text here%'
-
It is important that you run the query in text mode. In grid mode, SSMS
-will replace line breaks with space. The angle brackets in the output is there
-as delimiters, so that you can select the exact query text including any leading
-or trailing blanks.
-
Parameterised SQL is easier to deal with, since the SQL statement is packaged in a character literal. That is, if you see
-this in Profiler
-
EXEC sp_executesql N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', '20000101'
-
It's no issue if you happen to change it to, say:
-
EXEC sp_executesql
-N'SELECT * FROM Orders WHERE OrderDate > @orderdate',
-N'@orderdate datetime', '20000101'
-
What is important is that you must not change anything of what is between the quotes of the two first parameters to sp_executesql, since this is what
-the hash is computed from.
-
If you don't have any server-level permission – ALTER TRACE to run a trace, or VIEW SERVER STATE to query sys.dm_exec_query_stats and
-sys.dm_exec_sql_text – it's starting to get difficult. If the dynamic SQL is produced in a stored procedure which you can edit, you can add a PRINT statement to get the text. (Actually, stored procedures
-that produce dynamic SQL should
-always have a @debug parameter and include the line: IF @debug = 1 PRINT @sql.)
-You still have to be careful to get the exact text, and not add or drop any spaces. If there is a parameter list, you need to make sure
-that you
-copy the parameter
-list exactly as well. If the SQL is produced by the application or by a .Net stored procedure, getting the SQL statement may be possible if you can run the application in a
-debugger, but the exact text of the parameter list may be difficult to get at. The best bet may be try application against a database on a SQL
-Server instance where you have all the required permissions, for instance on
-your local workstation and get the query text this way.
[@1] reveals that the query has been auto-parameterised.
-
Occasionally, the fact that SQL Server auto-parameterises a query, works against you.
-Say that you have a query that goes:
-
SELECT ... FROM dbo.Orders WHERE Status = 'Delayed'
-
There is a filtered index on Status, which includes the value Delayed,
-because Orders are generally not delayed. (There is no Status column in
-Northwind; I had to make one up for the example.) But if SQL Server decides to
-parameterise the query, the index cannot be used, because the plan must
-accommodate for all possible values of the parameter.
-
There is not really any foolproof way to turn off any of the modes of
-parameterisation, but there are some hacks. If the database is in simple
-parameterisation, parameterisation only happens with very simple queries, for
-instance only for one-table queries. The full list of conditions is not included
-in Books Online, but one of the white papers listed in the section
-Further Reading
-includes a list. According to that list, it seems to sufficient to add a
-condition like:
-
AND 1 = 1
-
to stop simple parameterisation from happening. But the anxious person asks
-how we can trust that this does not change in a future release.
-
If the database is in forced parameterisation, there are two alternatives.
-There is a list in Books Online in the
-topic for forced
-parameterisation which specifies when forced parameterisation is not
-employed. One solution according to the list is to use OPTION (RECOMPILE), which
-is OK as long as you can take the cost of compilation every time. Another
-solution is to add a variable to the query:
-
DECLARE @x int
-SELECT ... FROM dbo.Orders WHERE Status = 'Delayed' AND @x IS NULL
-
Again, you may ask what could happen in a future version of SQL Server. It's
-certainly an ugly hack.
-
Note: If you read the Query Hints topic in Books
-Online, you will find that there is a hint to control parameterisation, but this
-hint is only permitted in plan guides, which is the topic for the next section.
Sometimes you may find that you want to modify a query to resolve a
-performance issue by adding a hint of some sort. For a stored procedure, it is
-not unlikely that you can edit the procedure and deploy the change fairly
-immediately. But if the query is generated inside an application, it may be more
-difficult. The entire executable has to be built and maybe be deployed to
-all user machines. It is also likely that there is a mandatory QA step involved.
-And if the application is a third-party application, changing it is out of the
-question.
-
However, SQL Server provides a solution for these situations, to wit plan guides. There are two ways to set up plan guides, a general way, and a shortcut which is also known as plan freezing. General plan guides were introduced in SQL 2005, whereas plan freezing was added in SQL 2008.
-
Note: this feature is not available on the low-end editions of SQL Server –
- Express, Web and Workgroup Edition.
-
Here is an example of a setting up plan guide. This particular example runs on SQL 2008 only:
In this example, I create a plan to ensure that a query against OrderDate always uses an Index Seek (maybe because I expect all queries to be for the last
-few days or so). I specify a name for the guide. Next, I specify the exact statement for which the guide applies. As when you run a query in SSMS to investigate
-it, you need to make sure that you do not add or lose any leading or trailing space,
-nor must you make any other alteration. The parameter @type specifies that the guide is for
-dynamic SQL and not for a stored procedure. Had the SELECT statement been part of a larger batch, I would have to specify the text of that batch
-in the parameter @module_or_batch, again exactly as submitted from the
-application. When I specify NULL for @module_or_batch, @stmt is assumed to be
-the entire batch text. @params is the parameter list for the batch, and again
-there must be an exact match character-by-character with what the application
-submits.
-
Finally, @hints is where the fun is. In this example I specify that the query should always use the index on OrderDate, no matter the sniffed value for
-@orderdate. This particular query hint, OPTION (TABLE HINT) is not available in
-SQL 2005, and that is why the example does not run on that version.
-
In the script, the initial DBCC FREEPROCCACHE is only there to give us a clean slate. Also, for the purpose of the demo, I run the query with a parameter value that gives the "bad" plan, the Clustered Index Scan. Once the plan has been entered, it takes effect directly. That is, any current entry for the query is evicted from the cache.
-
On SQL 2008, you can specify the parameters to sp_create_plan_guide in any order as long as you name them, and you can leave out the N before the string literals. However, SQL 2005
-is far less forgiving. The parameters must be entered in the given order, even
-if you name them, and you must specify the N before all the string literals.
-
In this example I used a plan guide to force an index, but you can use other hints as well, including the USE PLAN hint that permits you to specify the
-complete query plan to use. Certainly not for the faint of heart!
-
...although that is exactly the idea with plan freezing. Say that you have a query that sways between two plans, one good and one bad, due to parameter sniffing, and there is not really any civilised way to get the bad plan out of the equation. Rather than battling with the complex parameters of sp_create_plan_guide, you can extract plan handle from the cache and feed it to the stored procedure sp_create_plan_guide_from_handle to force the plan you know is good. Here is a demo and example.
-
DBCC FREEPROCCACHE
-SET ARITHABORT ON
-go
-EXEC sp_executesql N'SELECT * FROM dbo.Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', @orderdate = '19990101'
-go
-DECLARE @plan_handle varbinary(64),
- @rowc int
-
-SELECT @plan_handle = plan_handle
-FROM sys.dm_exec_query_stats qs
-CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) est
-WHERE est.text LIKE '%Orders WHERE OrderDate%'
- AND est.text NOT LIKE '%dm_exec_query_stats%'
-SELECT @rowc = @@rowcount
-
-IF @rowc = 1
- EXEC sp_create_plan_guide_from_handle 'MyFrozenPlan', @plan_handle
-ELSE
- RAISERROR('%d plans found in plan cache. Canno create plan guide', 16, 1, @rowc)
-go
--- Test it out!
-SET ARITHABORT OFF
-go
-EXEC sp_executesql N'SELECT * FROM dbo.Orders WHERE OrderDate > @orderdate',
- N'@orderdate datetime', @orderdate = '19960101'
-go
-SET ARITHABORT ON
-EXEC sp_control_plan_guide 'DROP', 'MyFrozenPlan'
-
-
For the purpose of the demo, I first clear the plan cache and set ARITHABORT to a known state. Then I run my query with a parameter that I know will give me the good plan. The next batch demonstrates how to use sp_create_plan_guide_from_handle. I first run a query against sys.dm_exec_query_stats and sys.dm_exec_sql_text to find the entry for my batch. Next I capture @@rowcount into a local variable (since @@rowcount is set after each statement, I prefer to copy it to a local variable in a SELECT that is directly attached to the query to avoid accidents). This is a safety precaution in case I get multiple matches or no matches in the cache. If I get exactly one match, I call sp_create_plan_guide_from_handle which takes two parameters: the name of the plan guide and the plan handle. And that's it!
-
The next part tests the guide. To make sure that I don't use the same cache entry, I use a different setting of ARITHABORT. If you run the demo with display of execution plan enabled, you will see that the second execution of the query uses the same plan with Index Seek + Key Lookup as the first, alhough the normal plan for the given parameter would be a Clustered Index Scan. That is, the plan guide is not dependent on certain SET options.
-
When you use this for real, you would run the query you want the plan guide for, only if the desired plan is not in the cache already. The query against the cache will require some craftmanship so that you get exactly one hit and the correct hit. An alternative may be to look at the matches in the query output in SSMS and copy and paste the plan handle.
-
A cool thing is that you don't have to set this up on the production server, but you can experiement on a lab server. The guide is stored in sys.plan_guides, so once you have the guide right, you can use the content there to craft a call to sp_create_plan_guide that you run the production server. You can also script the plan guide through Object Explorer in SSMS.
-
If you have a multi-statement batch or a stored procedure, you may not want to set up a guide for the entire batch, but only for a statement. For this reason sp_create_plan_guide_from_handle accepts a third parameter @statement_start_offset, a value you also can get from sys.dm_exec_query_stats.
-
This was just an introduction to plan guides and plan freezing. Plan guides is certainly an advanced feature,
-and rather than making this article even longer I refer you to the
- sections on plan guides in Books Online, or
-to the white paper
-listed in the section Further Reading below.
-
Overall, I see plan guides as a last resort. As I have said, they are fairly complex and there is a bit of a learning curve. Furthermore, a hint within a
- query is easy to see and will stand out like a sore thumb the day it has become obsolete. But a plan guide may lie around, and one day
- when reality has changed, the guide induces a bad query plan. But since you have
-forgotten about the guide, you cannot understand why you get this bad plan. Plan freezing is easier to use, but keep in mind that with the smallest change in the query, the plan guide will no longer be matched by SQL Server.
You have now learnt why a query may perform differently in the application
-and in SSMS. You have also seen several ways to address issues with parameter
-sniffing.
-
Did I include all reasons why there could be a performance difference between
-the application and SSMS? Not all, there are certainly a few more reasons. For
-instance, if the application runs on a remote machine, and you run SSMS directly
-on the server, a slow network can make quite a difference. But I believe I have
-captured the most likely reasons that are due to circumstances within SQL
-Server.
-
Did I include all possible reasons why parameter sniffing may give you a bad
-plan, and how you should address it? Probably not. There is room for more
-variation there, and particularly I can't know what your applicaton is doing.
-But hopefully some of the methods I have presented you can help you to find a
-solution.
-
If you think that you have stumbled on something which is not
-covered in the article, but you think I should have included, please drop me a
-line at esquel@sommarskog.se. And the
-same applies if you see any errors, not the least spelling or grammar errors. On the other
-hand, if you have a question how to solve a particular problem, I recommend you
-to post a question to an SQL Server forum, because a lot more people will see
-your question. If you absolutely want me to see the question, post to Microsoft's
-Transact-SQL
-forum, and mail me the link (because there is too much traffic for me to read it
-all).
Plan Caching in SQL Server 2008 – A white paper written by SQL
-Server MVP Greg Low. Appendix A in this paper details the rules for simple
-parameterisation. There is an older
-
-version for SQL 2005, written by Arum Marathe.
2013-08-30 – Corrected an error in the function setoptions that Alex Valen was kind to point out.
-
2013-04-14 – Updated the section An Issue with Linked Servers to reflect that this gotcha has been removed with SQL 2012 SP1. Also added a note on SET NO_BROWSETABLE ON to the section The Story so Far.
-
2011-12-31 – Added some text about SQL Server Agent which runs with QUOTED_IDENTIFER OFF by default. Extended the section on Plan Guides to also gover plan freezing.
-
2011-11-27 – Several of the links in the section Further Reading were broken. This has been fixed.
-
2011-07-02 – There is now a Russian translation available. Kudos to Dima Piliugin for this work!
-
2011-06-25 – Added a section An Issue with Linked Servers to discuss a special problem that may cause the situation Slow in the application, fast in SSMS.
-
2011-02-20 – First version.
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/SSMS.jpg b/Articles/Slow in the Application, Fast in SSMS_files/SSMS.jpg
deleted file mode 100644
index a2d56421..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/SSMS.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/SSMS2.jpg b/Articles/Slow in the Application, Fast in SSMS_files/SSMS2.jpg
deleted file mode 100644
index 4e6c686f..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/SSMS2.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/linked-popup1.jpg b/Articles/Slow in the Application, Fast in SSMS_files/linked-popup1.jpg
deleted file mode 100644
index eb60b443..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/linked-popup1.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/linked-popup2.jpg b/Articles/Slow in the Application, Fast in SSMS_files/linked-popup2.jpg
deleted file mode 100644
index bbcbb91d..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/linked-popup2.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/linked-query1.jpg b/Articles/Slow in the Application, Fast in SSMS_files/linked-query1.jpg
deleted file mode 100644
index ac7e3559..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/linked-query1.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/linked-query2.jpg b/Articles/Slow in the Application, Fast in SSMS_files/linked-query2.jpg
deleted file mode 100644
index 9f67f022..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/linked-query2.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/list_orders2.jpg b/Articles/Slow in the Application, Fast in SSMS_files/list_orders2.jpg
deleted file mode 100644
index 645efb91..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/list_orders2.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/list_orders3.jpg b/Articles/Slow in the Application, Fast in SSMS_files/list_orders3.jpg
deleted file mode 100644
index cc32a3c2..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/list_orders3.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11a.jpg b/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11a.jpg
deleted file mode 100644
index 4ee621b9..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11a.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11b.jpg b/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11b.jpg
deleted file mode 100644
index 39bf758c..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/list_orders_11b.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/mergejoin.jpg b/Articles/Slow in the Application, Fast in SSMS_files/mergejoin.jpg
deleted file mode 100644
index c3a78a13..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/mergejoin.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/nestedloops.jpg b/Articles/Slow in the Application, Fast in SSMS_files/nestedloops.jpg
deleted file mode 100644
index b6000f12..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/nestedloops.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/paramvalues.jpg b/Articles/Slow in the Application, Fast in SSMS_files/paramvalues.jpg
deleted file mode 100644
index 1e5be82f..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/paramvalues.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/planinfo.jpg b/Articles/Slow in the Application, Fast in SSMS_files/planinfo.jpg
deleted file mode 100644
index 43b63715..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/planinfo.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/popup1.jpg b/Articles/Slow in the Application, Fast in SSMS_files/popup1.jpg
deleted file mode 100644
index 91107666..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/popup1.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/popup2.jpg b/Articles/Slow in the Application, Fast in SSMS_files/popup2.jpg
deleted file mode 100644
index 9036d459..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/popup2.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/popup3.jpg b/Articles/Slow in the Application, Fast in SSMS_files/popup3.jpg
deleted file mode 100644
index 19dc808f..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/popup3.jpg and /dev/null differ
diff --git a/Articles/Slow in the Application, Fast in SSMS_files/showstats.jpg b/Articles/Slow in the Application, Fast in SSMS_files/showstats.jpg
deleted file mode 100644
index d54f1cd5..00000000
Binary files a/Articles/Slow in the Application, Fast in SSMS_files/showstats.jpg and /dev/null differ
diff --git a/BaselineCollector/BaselineCollectorSolution.sql b/BaselineCollector/BaselineCollectorSolution.sql
deleted file mode 100644
index 4ff4f4ba..00000000
--- a/BaselineCollector/BaselineCollectorSolution.sql
+++ /dev/null
@@ -1,5267 +0,0 @@
-/*********************************************************************************************
-Written by Robert Virag
-
-Comprehensive Baseline Collecting Solution V1.1
-
-Change History
-
-Changes in V1.1 - 2015.04
-
- <>Collectors
- () New collector: sp_CollectInstanceInfo
- <>New Schedules added
- () marked with '*' below
- <>BugFix
- () sp_CollectDatabaseInfo - SQL2014
- () @Retention = NULL
- () CollectingInterval/SampleInterval/MeasuringInterval type, possible value range
- () AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP
- () Job output file name (@OutputFile0X)
- () sp_CollectWaitStats - @ResetWaitStats = 0 If @MeasuringInterval is specified
-
-V1 Original Release - 2014.09
-
----//---
-
-Collectors:
- sp_CollectConfigData
- sp_CollectDatabaseInfo
- sp_CollectFileInfo
- sp_CollectIOVFStats
- sp_CollectPerfmonData
- sp_CollectTempDBUsage
- sp_CollectWaitStats
- *sp_CollectInstanceInfo
-
-Schedules:
- baseline - daily - at 2359PM
- baseline - daily - at 2357PM
- baseline - daily - at 2355PM
- *baseline - daily - at 2353PM
- *baseline - daily - at 2351PM
-
- *baseline - daily - every 5 mins
- *baseline - daily - every 5 mins - BT/6AM-7PM/
- baseline - daily - every 10 mins
- baseline - daily - every 10 mins - BT/6AM-7PM/
- baseline - daily - every 15 mins
- baseline - daily - every 15 mins - BT/6AM-7PM/
- *baseline - daily - every 30 mins
- *baseline - daily - every 30 mins - BT/6AM-7PM/
- baseline - daily - every 1 hour
- baseline - daily - every 1 hour - BT/6AM-7PM/
- *baseline - daily - every 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/
- baseline - daily - every 6 hours /6AM/12PM/6PM/12AM/
- baseline - daily - every 8 hours /6AM/2PM/10PM/
- baseline - daily - evey 12 hours /6AM/6PM/
-
- *baseline - weekday - every 5 mins
- *baseline - weekday - every 5 mins - BT/6AM-7PM/
- baseline - weekday - every 10 mins
- baseline - weekday - every 10 mins - BT/6AM-7PM/
- baseline - weekday - every 15 mins
- baseline - weekday - every 15 mins - BT/6AM-7PM/
- *baseline - weekday - every 30 mins
- *baseline - weekday - every 30 mins - BT/6AM-7PM/
- baseline - weekday - every 1 hour
- baseline - weekday - every 1 hour - BT/6AM-7PM/
- *baseline - weekday - every 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/
- baseline - weekday - every 6 hours /6AM/12PM/6PM/12AM/
- baseline - weekday - every 8 hours /6AM/2PM/10PM/
- baseline - weekday - evey 12 hours /6AM/6PM/
-
- *baseline - weekend - every 5 mins
- baseline - weekend - every 10 mins
- baseline - weekend - every 15 mins
- baseline - weekend - every 30 mins
- baseline - weekend - every 1 hour
- baseline - weekend - every 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/
- baseline - weekend - every 6 hours /6AM/12PM/6PM/12AM/
- baseline - weekend - every 8 hours /6AM/2PM/10PM/
- baseline - weekend - evey 12 hours /6AM/6PM/
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collect SQL Server Baseline (Raw) Data
-
-----
-
-For scheduling the collectors with agent jobs, Ola Hallengren's code is used
-with his permission.
-
-http://ola.hallengren.com/license.html
-
-License:
-
-Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the Software), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*********************************************************************************************/
-
-IF(NOT EXISTS (SELECT [name] FROM [sys].[databases] WHERE [name] = 'BaselineDB'))
-BEGIN
- CREATE DATABASE [BaselineDB]
-END
-GO
-
-IF OBJECT_ID (N'tempdb..#TempConfiguration' ) IS NOT NULL
-BEGIN
- DROP TABLE #TempConfiguration
-END
-
-CREATE TABLE #TempConfiguration
- (
- [variable] NVARCHAR(128),
- [value] NVARCHAR(max)
- )
-
-USE [BaselineDB] ---------------------------------------------------- modify
-GO
-
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-SET NOCOUNT ON
-GO
-
-/*--------------------------------------------
--- Settings variables
---------------------------------------------*/
-DECLARE @CreateJobs TINYINT
-DECLARE @CreateSchedules TINYINT
-DECLARE @OutputFileDirectory nvarchar(max)
-
-DECLARE @SQLCommand NVARCHAR(max)
-DECLARE @TableName NVARCHAR(255)
-DECLARE @DataCompression BIT
-DECLARE @DropTableIfExist BIT
-DECLARE @DropJobsIfExist TINYINT
-DECLARE @DropScheduleIfExist TINYINT
-
-SET @CreateJobs = 1 ---------------------------------------------------- modify
-/* Schedules will be DISABLED and will not be mapped to jobs!!! */
-SET @CreateSchedules = 1 ----------------------------------------------- modify
-/* One log file per day per job will be created */
-SET @OutputFileDirectory = N'E:\BaselineLogs' ------------------------ modify
-
-SET @DropJobsIfExist = 1 ----------------------------------------------- modify
-SET @DropScheduleIfExist = 1 ------------------------------------------- modify
-SET @DropTableIfExist = 1 -------------------------------------------- modify
-SET @DataCompression = 1 -------------------------------------------- modify
-
-INSERT INTO #TempConfiguration ([variable], [value]) VALUES
-(N'@CreateJobs', CAST(@CreateJobs AS nvarchar))
-INSERT INTO #TempConfiguration ([variable], [value]) VALUES
-(N'@DropJobsIfExist', CAST(@DropJobsIfExist AS nvarchar))
-
-INSERT INTO #TempConfiguration ([variable], [value]) VALUES
-(N'@OutputFileDirectory', @OutputFileDirectory)
-
-INSERT INTO #TempConfiguration ([variable], [value]) VALUES
-(N'@CreateSchedules', CAST(@CreateSchedules AS nvarchar))
-INSERT INTO #TempConfiguration ([variable], [value]) VALUES
-(N'@DropScheduleIfExist', CAST(@DropScheduleIfExist AS nvarchar))
-
-/************************************START*************************************
-******************************** CREATE SCHEMA ********************************
-******************************************************************************/
-
-/*--------------------------------------------
--- Create Table for Instance Info
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[instance_info]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[instance_info]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[instance_info]
- (
- [capture_date] DATETIME NOT NULL,
- [name] NVARCHAR(50) NOT NULL,
- [value] SQL_VARIANT NULL,
- [is_initial] BIT NOT NULL,
- [is_pre] BIT NOT NULL
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_instance_info] ON [dbo].[instance_info] ([capture_date],[name])
-
-
-/*--------------------------------------------
--- Create Table for Server Configuration
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[configuration_data]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[configuration_data]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[configuration_data]
- (
- [capture_date] DATETIME NOT NULL,
- [configuration_id] INT NOT NULL,
- [value] SQL_VARIANT NULL,
- [value_in_use] SQL_VARIANT NULL,
- [is_initial] BIT,
- [is_pre] BIT
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_configuration_data] ON [dbo].[configuration_data] ([capture_date],[configuration_id])
-
-/*--------------------------------------------
--- Create Table for Database Info
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[database_info]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[database_info]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[database_info]
- (
- [capture_date] DATETIME,
- [database_name] SYSNAME,
- [database_id] INT,
- [source_database_id] INT,
- [owner_sid] VARBINARY(85),
- [create_date] DATETIME,
- [compatibility_level] TINYINT,
- [collation_name] SYSNAME,
- [user_access] TINYINT,
- [is_read_only] BIT,
- [is_auto_close_on] BIT,
- [is_auto_shrink_on] BIT,
- [state] TINYINT,
- [is_in_standby] BIT,
- [is_supplemental_logging_enabled] BIT,
- [snapshot_isolation_state] TINYINT,
- [is_read_committed_snapshot_on] BIT,
- [recovery_model] TINYINT,
- [page_verify_option] TINYINT,
- [is_auto_create_stats_on] BIT,
- [is_auto_update_stats_on] BIT,
- [is_auto_update_stats_async_on] BIT,
- [is_ansi_null_default_on] BIT,
- [is_ansi_nulls_on] BIT,
- [is_ansi_padding_on] BIT,
- [is_ansi_warnings_on] BIT,
- [is_arithabort_on] BIT,
- [is_concat_null_yields_null_on] BIT,
- [is_numeric_roundabort_on] BIT,
- [is_quoted_identifier_on] BIT,
- [is_recursive_triggers_on] BIT,
- [is_cursor_close_on_commit_on] BIT,
- [is_local_cursor_default] BIT,
- [is_fulltext_enabled] BIT,
- [is_trustworthy_on] BIT,
- [is_db_chaining_on] BIT,
- [is_parameterization_forced] BIT,
- [is_master_key_encrypted_by_server] BIT,
- [is_published] BIT,
- [is_merge_published] BIT,
- [is_distributor] BIT,
- [is_sync_with_backup] BIT,
- [service_broker_guid] UNIQUEIDENTIFIER,
- [is_broker_enabled] BIT,
- [is_date_correlation_on] BIT '
-
-IF(@@VERSION LIKE N'%Microsoft SQL Server 2005%')
-BEGIN
- SET @SQLCommand = @SQLCommand + N',
- [is_initial] BIT,
- [is_pre] BIT
- ) '
-END
-
-IF(@@VERSION LIKE N'%Microsoft SQL Server 2008%')
-BEGIN
- SET @SQLCommand = @SQLCommand + N',
- /*2008*/
- [is_cdc_enabled] BIT,
- [is_encrypted] BIT,
- [is_honor_broker_priority_on] BIT,
- [is_initial] BIT,
- [is_pre] BIT
- ) '
-END
-
-IF(@@VERSION LIKE N'%Microsoft SQL Server 2012%')
-BEGIN
- SET @SQLCommand = @SQLCommand + N',
- /*2008*/
- [is_cdc_enabled] BIT,
- [is_encrypted] BIT,
- [is_honor_broker_priority_on] BIT,
- /*2012*/
- [replica_id] UNIQUEIDENTIFIER,
- [group_database_id] UNIQUEIDENTIFIER,
- [default_language_lcid] SMALLINT,
- [default_fulltext_language_lcid] INT,
- [is_nested_triggers_on] BIT,
- [is_transform_noise_words_on] BIT,
- [two_digit_year_cutoff] SMALLINT,
- [containment] TINYINT,
- [target_recovery_time_in_seconds] INT,
- [is_initial] BIT,
- [is_pre] BIT
- ) '
-END
-
-IF(@@VERSION LIKE N'%Microsoft SQL Server 2014%')
-BEGIN
- SET @SQLCommand = @SQLCommand + N',
- /*2008*/
- [is_cdc_enabled] BIT,
- [is_encrypted] BIT,
- [is_honor_broker_priority_on] BIT,
- /*2012*/
- [replica_id] UNIQUEIDENTIFIER,
- [group_database_id] UNIQUEIDENTIFIER,
- [default_language_lcid] SMALLINT,
- [default_fulltext_language_lcid] INT,
- [is_nested_triggers_on] BIT,
- [is_transform_noise_words_on] BIT,
- [two_digit_year_cutoff] SMALLINT,
- [containment] TINYINT,
- [target_recovery_time_in_seconds] INT,
- /*2014*/
- [is_auto_create_stats_incremental_on] BIT,
- [is_query_store_on] BIT,
- [resource_pool_id] INT,
- [delayed_durability] INT,
- [is_memory_optimized_elevate_to_snapshot_on] BIT,
- [is_initial] BIT,
- [is_pre] BIT
- ) '
-END
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_database_info] ON [dbo].[database_info] ([capture_date], [database_name])
-
-/*--------------------------------------------
--- Create Table for File Info
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[file_info]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[file_info]
-END
-IF(OBJECT_ID('[dbo].[ts_file_info]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[ts_file_info]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[file_info]
- (
- [capture_date] DATETIME,
- [database_name] SYSNAME,
- [physical_name] NVARCHAR(260),
- [type] TINYINT,
- [size_pages] INT,
- [space_used_pages] INT,
- [max_size_pages] INT,
- [growth_pages_percent] INT,
- [is_percent_growth] BIT
- ) '
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-SET @SQLCommand = REPLACE(@SQLCommand, N'[file_info]', N'[ts_file_info]')
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_file_info] ON [dbo].[file_info] ([capture_date],[physical_name])
-
-CREATE UNIQUE CLUSTERED INDEX [CI_ts_file_info] ON [dbo].[ts_file_info] ([capture_date],[physical_name])
-
-/*--------------------------------------------
--- Create Table for IO Virtual File Stats
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[iovf_stats]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[iovf_stats]
-END
-IF(OBJECT_ID('[dbo].[ts_iovf_stats]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[ts_iovf_stats]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[iovf_stats]
- (
- [capture_date] DATETIME,
- [database_name] SYSNAME,
- [type] TINYINT,
- [physical_name] NVARCHAR(260),
- [sample_ms] INT,
- [num_of_reads] BIGINT,
- [num_of_bytes_read] BIGINT,
- [io_stall_read_ms] BIGINT,
- [num_of_writes] BIGINT,
- [num_of_bytes_written] BIGINT,
- [io_stall_write_ms] BIGINT
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-SET @SQLCommand = REPLACE(@SQLCommand, N'[iovf_stats]', N'[ts_iovf_stats]')
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_iovf_stats] ON [dbo].[iovf_stats] ([capture_date],[physical_name])
-
-CREATE UNIQUE CLUSTERED INDEX [CI_ts_iovf_stats] ON [dbo].[ts_iovf_stats] ([capture_date],[physical_name])
-
-/*-------------------------------------------------------
--- Table for Filtering Database's Files
--------------------------------------------------------*/
-IF(OBJECT_ID('[dbo].[filter_database_file]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[filter_database_file]
-END
-CREATE TABLE [dbo].[filter_database_file]
-(
- [id] INT IDENTITY(1,1),
- [database_name] SYSNAME,
- [logical_file_name] SYSNAME,
- [is_excluded_file_info] BIT,
- [ts_is_included_file_info] BIT,
- [is_excluded_iovf] BIT,
- [ts_is_included_iovf] BIT
-)
-
-/*--------------------------------------------
--- Insert all databases
---------------------------------------------*/
-INSERT INTO [dbo].[filter_database_file]
-( [database_name], [logical_file_name], [is_excluded_file_info], [ts_is_included_file_info], [is_excluded_iovf], [ts_is_included_iovf] )
-SELECT DB_NAME(database_id), name, 0, 0, 0, 0 FROM sys.master_files
-
-
-/*--------------------------------------------
--- Create Table for TempDB Usage
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[tempdb_usage]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[tempdb_usage]
-END
-IF(OBJECT_ID('[dbo].[ts_tempdb_usage]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[ts_tempdb_usage]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[tempdb_usage]
- (
- [capture_date] DATETIME,
- [file_id] SMALLINT,
- [drive] NCHAR(1),
- [unallocated_extent_page_count] BIGINT,
- [version_store_reserved_page_count] BIGINT,
- [user_object_reserved_page_count] BIGINT,
- [internal_object_reserved_page_count] BIGINT,
- [mixed_extent_page_count] BIGINT
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-SET @SQLCommand = REPLACE(@SQLCommand, N'[tempdb_usage]', N'[ts_tempdb_usage]')
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_tempdb_usage] ON [dbo].[tempdb_usage] ([capture_date],[file_id])
-
-CREATE UNIQUE CLUSTERED INDEX [CI_ts_tempdb_usage] ON [dbo].[ts_tempdb_usage] ([capture_date],[file_id])
-
-/*--------------------------------------------
--- Create Table for PerfMon Data
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[perfmon_data]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[perfmon_data]
-END
-IF(OBJECT_ID('[dbo].[ts_perfmon_data]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[ts_perfmon_data]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[perfmon_data]
- (
- [capture_date] DATETIME,
- [counter] NVARCHAR(255),
- [value] DECIMAL(32,2)
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-SET @SQLCommand = REPLACE(@SQLCommand, N'[perfmon_data]', N'[ts_perfmon_data]')
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_perfmon_data] ON [dbo].[perfmon_data] ([capture_date],[counter])
-
-CREATE UNIQUE CLUSTERED INDEX [CI_ts_perfmon_data] ON [dbo].[ts_perfmon_data] ([capture_date],[counter])
-
-/*--------------------------------------------
--- Create Table for Wait Stats
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[wait_stats]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[wait_stats]
-END
-IF(OBJECT_ID('[dbo].[ts_wait_stats]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[ts_wait_stats]
-END
-SET @SQLCommand = N'CREATE TABLE [dbo].[wait_stats]
- (
- [capture_date] DATETIME,
- [wait_type] NVARCHAR(60),
- [waiting_tasks_count] BIGINT,
- [wait_time_ms] BIGINT,
- [max_wait_time_ms] BIGINT,
- [signal_wait_time_ms] BIGINT
- ) '
-
-IF(@@VERSION NOT LIKE N'%Microsoft SQL Server 2000%' AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2005%' AND @DataCompression = 1 AND (CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Enterprise%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Developer%' OR CAST(SERVERPROPERTY(N'edition') AS NVARCHAR(100)) LIKE N'%Data Center%'))
-BEGIN
- SET @SQLCommand = @SQLCommand + N' WITH (DATA_COMPRESSION = PAGE)'
-END
-
-EXEC sp_executesql @SQLCommand
-
-SET @SQLCommand = REPLACE(@SQLCommand, N'[wait_stats]', N'[ts_wait_stats]')
-
-EXEC sp_executesql @SQLCommand
-
-CREATE UNIQUE CLUSTERED INDEX [CI_wait_stats] ON [dbo].[wait_stats] ([capture_date],[wait_type])
-
-CREATE UNIQUE CLUSTERED INDEX [CI_ts_wait_stats] ON [dbo].[ts_wait_stats] ([capture_date],[wait_type])
-
-/*--------------------------------------------
--- Table for Filtering WaitStats
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[filter_wait_types]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[filter_wait_types]
-END
-CREATE TABLE [dbo].[filter_wait_types]
-(
- [id] INT IDENTITY(1,1),
- [wait_type] NVARCHAR(60),
- [is_excluded] BIT,
- [ts_is_excluded] BIT
-)
-
-IF (@@VERSION LIKE N'%Microsoft SQL Server 2005%'
- OR (@@VERSION LIKE N'%Microsoft SQL Server 2008%'
- AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2008 R2%'))
-BEGIN
- INSERT INTO [dbo].[filter_wait_types]
- ( [wait_type], [is_excluded], [ts_is_excluded] )
- VALUES ('AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP', 0, 0)
-END
-
-INSERT INTO [dbo].[filter_wait_types]
-( [wait_type], [is_excluded], [ts_is_excluded] )
-SELECT [wait_type], 0, 0 FROM sys.dm_os_wait_stats
-
----------------------------------------------------------------------------------------------------------------------------------------
--- Set exclude list if no list provided by user then it uses Paul Randal's code
--- (2014 marc) - http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
----------------------------------------------------------------------------------------------------------------------------------------
-UPDATE [dbo].[filter_wait_types]
-SET [is_excluded] = 1,
-[ts_is_excluded] = 1 WHERE [wait_type] IN (
- N'BROKER_EVENTHANDLER',
- N'BROKER_RECEIVE_WAITFOR',
- N'BROKER_TASK_STOP',
- N'BROKER_TO_FLUSH',
- N'BROKER_TRANSMITTER',
- N'CHECKPOINT_QUEUE',
- N'CHKPT',
- N'CLR_AUTO_EVENT',
- N'CLR_MANUAL_EVENT',
- N'CLR_SEMAPHORE',
- N'DBMIRROR_DBM_EVENT',
- N'DBMIRROR_EVENTS_QUEUE',
- N'DBMIRROR_WORKER_QUEUE',
- N'DBMIRRORING_CMD',
- N'DIRTY_PAGE_POLL',
- N'DISPATCHER_QUEUE_SEMAPHORE',
- N'EXECSYNC',
- N'FSAGENT',
- N'FT_IFTS_SCHEDULER_IDLE_WAIT',
- N'FT_IFTSHC_MUTEX',
- N'HADR_CLUSAPI_CALL',
- N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
- N'HADR_LOGCAPTURE_WAIT',
- N'HADR_NOTIFICATION_DEQUEUE',
- N'HADR_TIMER_TASK',
- N'HADR_WORK_QUEUE',
- N'KSOURCE_WAKEUP',
- N'LAZYWRITER_SLEEP',
- N'LOGMGR_QUEUE',
- N'ONDEMAND_TASK_QUEUE',
- N'PWAIT_ALL_COMPONENTS_INITIALIZED',
- N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',
- N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
- N'REQUEST_FOR_DEADLOCK_SEARCH',
- N'RESOURCE_QUEUE',
- N'SERVER_IDLE_CHECK',
- N'SLEEP_BPOOL_FLUSH',
- N'SLEEP_DBSTARTUP',
- N'SLEEP_DCOMSTARTUP',
- N'SLEEP_MASTERDBREADY',
- N'SLEEP_MASTERMDREADY',
- N'SLEEP_MASTERUPGRADED',
- N'SLEEP_MSDBSTARTUP',
- N'SLEEP_SYSTEMTASK',
- N'SLEEP_TASK',
- N'SLEEP_TEMPDBSTARTUP',
- N'SNI_HTTP_ACCEPT',
- N'SP_SERVER_DIAGNOSTICS_SLEEP',
- N'SQLTRACE_BUFFER_FLUSH',
- --N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
- N'SQLTRACE_WAIT_ENTRIES',
- N'WAIT_FOR_RESULTS',
- N'WAITFOR',
- N'WAITFOR_TASKSHUTDOWN',
- N'WAIT_XTP_HOST_WAIT',
- N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG',
- N'WAIT_XTP_CKPT_CLOSE',
- N'XE_DISPATCHER_JOIN',
- N'XE_DISPATCHER_WAIT',
- N'XE_TIMER_EVENT' )
-
-/*--------------------------------------------
--- Table for Filtering PerfMon Counters
---------------------------------------------*/
-IF(OBJECT_ID('[dbo].[filter_performance_counters]') IS NOT NULL AND @DropTableIfExist = 1)
-BEGIN
- DROP TABLE [dbo].[filter_performance_counters]
-END
-CREATE TABLE [dbo].[filter_performance_counters]
-(
- [id] INT IDENTITY(1,1),
- [counter_name] NVARCHAR(60),
- [is_included] BIT,
- [ts_is_included] BIT
-)
-
-/*--------------------------------------------
--- Insert all supported counters
---------------------------------------------*/
-INSERT INTO [dbo].[filter_performance_counters]
-( [counter_name], [is_included], [ts_is_included] )
-SELECT DISTINCT [counter_name], 0, 0 FROM sys.dm_os_performance_counters WHERE cntr_type IN (272696576, 65792)
-
-/*------------------------------------------------------------------------------------
--- My preferred list of counters mixed up from different source
--- Use this poster to interpret the counters:
--- http://www.quest.com/backstage/images/promotions/SQLServer-Perfmonance-Poster.pdf
-------------------------------------------------------------------------------------*/
-/*
- http://blogs.msdn.com/b/sqlosteam/archive/2012/07/11/memory-manager-surface-area-changes-in-sql-server-2012.aspx
- N'Free Pages' /-2008r2/ => N'Free Memory (KB)' /2012+/
- N'Target Pages' /-2014/ => N'Target Server Memory (KB)' /-2014/
- N'Total Pages' /-2008r2/ => N'Total Server Memory (KB)' /-2014/
- N'Stolen Pages' /-2008r2/ => N'Stolen Server Memory (KB)' /2012+/
- N'Database Pages' /-2014/ => N'Database Cache Memory (KB)' /2012+/
-*/
-IF(@@VERSION LIKE N'%Microsoft SQL Server 2012%' OR @@VERSION LIKE N'%Microsoft SQL Server 2014%')
-BEGIN
- UPDATE [dbo].[filter_performance_counters]
- SET [is_included] = 1,
- [ts_is_included] = 1 WHERE [counter_name] IN (
- /* Data Access Performance Counters */
- N'Forwarded Records/sec',
- N'Index Searches/sec',
- N'Full Scans/sec',
- N'Page Splits/sec',
- /* Memory Manager Counters */
- /* "How is My Memory Being Used" Performance Counters */
- N'Total Server Memory (KB)', --*
- N'Target Server Memory (KB)', --*
- N'Free Memory (KB)', --*
- N'Stolen Server Memory (KB)', --*
- N'Database Cache Memory (KB)', --*
- N'Memory Grants Pending',
- /* Buffer Manager and Memory Performance Counters */
- N'Free list stalls/sec',
- N'Lazy writes/sec',
- N'Checkpoint Pages/sec',
- N'Page life expectancy',
- N'Page reads/sec',
- N'Page writes/sec',
- /* Workload Performance Counters */
- N'Batch Requests/sec',
- N'SQL Compilations/sec',
- N'SQL Re-Compilations/sec',
- /* Users and Locks Performance Counters */
- N'User Connections',
- N'Latch Waits/sec',
- N'Number of Deadlocks/sec',
- N'Transactions/sec',
- N'Lock Waits/sec' )
-END
-ELSE
-BEGIN
-UPDATE [dbo].[filter_performance_counters]
- SET [is_included] = 1,
- [ts_is_included] = 1 WHERE [counter_name] IN (
- /* Data Access Performance Counters */
- N'Forwarded Records/sec',
- N'Index Searches/sec',
- N'Full Scans/sec',
- N'Page Splits/sec',
- /* Memory Manager Counters */
- /* "How is My Memory Being Used" Performance Counters */
- N'Total Server Memory (KB)', --*
- N'Total Pages', --*
- N'Target Server Memory (KB)', --*
- N'Target Pages', --*
- N'Free Memory (KB)', --*
- N'Free Pages', --*
- N'Stolen Server Memory (KB)', --*
- N'Stolen Pages', --*
- N'Database Cache Memory (KB)', --*
- N'Database Pages',--*
- N'Memory Grants Pending',
- /* Buffer Manager and Memory Performance Counters */
- N'Free list stalls/sec',
- N'Lazy writes/sec',
- N'Checkpoint Pages/sec',
- N'Page life expectancy',
- N'Page reads/sec',
- N'Page writes/sec',
- /* Workload Performance Counters */
- N'Batch Requests/sec',
- N'SQL Compilations/sec',
- N'SQL Re-Compilations/sec',
- /* Users and Locks Performance Counters */
- N'User Connections',
- N'Latch Waits/sec',
- N'Number of Deadlocks/sec',
- N'Transactions/sec',
- N'Lock Waits/sec' )
-END
-GO
-
-/******************************************************************************
-******************************** CREATE SCHEMA ********************************
-**************************************END*************************************/
-
-/************************************START*************************************
-****************************** CREATE COLLECTORS ******************************
-******************************************************************************/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectConfigData')
- EXEC ('CREATE PROC dbo.sp_CollectConfigData AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectConfigData]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectConfigData.sql
-
-Example:
-EXEC sp_CollectConfigData
-@Retention = 90,
-@BypassNonActiveSrvConfError = 0,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server Server Configuration Data
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@Retention SMALLINT = 90,
-@BypassNonActiveSrvConfError BIT = 0,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help messages.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@BypassNonActiveSrvConfError', N'BIT', N'0', N'The collector checks if there is any non-active server configuration and generates an ERROR if it finds any. If this option is enabled it bypasses the ERROR and generates a WARNING instead.'
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @row_count INT
-DECLARE @non_active_server_config_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @BypassNonActiveSrvConfError IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @BypassNonActiveSrvConfError is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), 'NULL')
- + N', @BypassNonActiveSrvConfError = ' + CAST(@BypassNonActiveSrvConfError AS nvarchar)
- + N', @LogInfo = '+ CAST(@LogInfo AS nvarchar)
- + N', @help = ' + CAST(@help AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(N'[dbo].[configuration_data]') IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table [dbo].[configuration_data] does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @row_count = 0;
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Pre-Initial Data: insert data which have no initial state (e.g.: table is empty or data were deleted manually since the last check)
- ---------------------------------------------------------------------------------------------------------------------------------------
- WITH most_recent_config as (
- SELECT [capture_date], [configuration_id]--, [Value], [value_in_use], [is_initial], [is_pre]
- FROM [dbo].[configuration_data] AS [c] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[configuration_data] AS [cc] WHERE [c].[configuration_id] = [cc].[configuration_id])
- )
- INSERT INTO [dbo].[configuration_data]
- ( [capture_date], [configuration_id], [Value], [value_in_use], [is_initial], [is_pre] )
- SELECT GETDATE(),[configuration_id], [value], [value_in_use], 1, 1
- FROM [sys].[configurations] WHERE [configuration_id] NOT IN (SELECT [configuration_id] FROM most_recent_config)
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as pre-initial config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END;
-
- ---------------------------------------------------------------------------------------------------------
- -- Check and collect changed configuration data
- ---------------------------------------------------------------------------------------------------------
- WITH [most_recent_config] AS (
- SELECT [capture_date], [configuration_id], [Value], [value_in_use]
- FROM [dbo].[configuration_data] AS [c] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[configuration_data] AS [cc] WHERE [c].[configuration_id] = [cc].[configuration_id])
- )
- INSERT INTO [dbo].[configuration_data] ( [capture_date], [configuration_id], [Value], [value_in_use], [is_initial], [is_pre] )
- SELECT GETDATE(), [c].[configuration_id], [c].[value], [c].[value_in_use], 0, 0 FROM [most_recent_config] AS [mrc] INNER JOIN [sys].[configurations] AS [c] ON [mrc].[configuration_id] = [c].[configuration_id] WHERE [mrc].[value] <> [c].[value] OR [mrc].[value_in_use] <> [c].[value_in_use]
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as changed config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- DELETE FROM [dbo].[configuration_data] WHERE [capture_date] < DATEADD(dd, -1*CAST(@retention AS nvarchar) , GETDATE())
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Post-Initial Data: insert data which have no initial state because of the previous expired-deletion
- ---------------------------------------------------------------------------------------------------------
- INSERT INTO [dbo].[configuration_data]
- ( [capture_date], [configuration_id], [Value], [value_in_use], [is_initial], [is_pre] )
- SELECT GETDATE(), [configuration_id], [value], [value_in_use], 1, 0
- FROM [sys].[configurations]
- WHERE [configuration_id] NOT IN (
- SELECT [configuration_id] FROM [dbo].[configuration_data]
- WHERE [capture_date] >= DATEADD(dd, -1*@retention, GETDATE())
- )
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as post-initial config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END;
-
- ---------------------------------------------------------------------------------------------------------
- -- Check Non-Active Server Configurations
- ---------------------------------------------------------------------------------------------------------
- WITH [most_recent_config] AS (
- SELECT [capture_date], [configuration_id], [Value], [value_in_use], [is_initial]
- FROM [dbo].[configuration_data] AS [c] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[configuration_data] AS [cc] WHERE [c].[configuration_id] = [cc].[configuration_id])
- )
- SELECT @non_active_server_config_count = COUNT(*) FROM [most_recent_config] WHERE [Value] <> [value_in_use]
-
- IF(@non_active_server_config_count > 0)
- BEGIN
- SET @InfoMessage = N'WARNING - Non-Active Server Configuration: ' + CAST(@non_active_server_config_count AS NVARCHAR)
-
- IF(@BypassNonActiveSrvConfError = 1)
- BEGIN
- SET @Severity = 10
- END
- ELSE
- BEGIN
- SET @Severity = 16
- END
-
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectDatabaseInfo -----------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectDatabaseInfo')
- EXEC ('CREATE PROC dbo.sp_CollectDatabaseInfo AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectDatabaseInfo]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectDatabaseInfo.sql
-
-Example:
-EXEC sp_CollectDatabaseInfo
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting Database Info
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@Retention SMALLINT = 90,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help messages.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @SQLCommand NVARCHAR(max)
-DECLARE @version_column_list NVARCHAR(max)
-DECLARE @version_column_list_with_table_prefix NVARCHAR(max)
-DECLARE @version_where_predicates NVARCHAR(max)
-
-DECLARE @row_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = '+ CAST(@LogInfo AS nvarchar)
- + N', @help = ' + CAST(@help AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(N'[dbo].[database_info]') IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table [dbo].[database_info] does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @row_count = 0;
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Setting variables based on versions
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@@VERSION LIKE N'%Microsoft SQL Server 2005%')
- BEGIN
- SET @version_column_list = N''
- SET @version_column_list_with_table_prefix = N''
- SET @version_where_predicates = N''
- END
- IF(@@VERSION LIKE N'%Microsoft SQL Server 2008%')
- BEGIN
- SET @version_column_list = N', /* sql 2008+ */ [is_cdc_enabled], [is_encrypted], [is_honor_broker_priority_on] '
- SET @version_column_list_with_table_prefix = N', /* sql 2008+ */ [sd].[is_cdc_enabled], [sd].[is_encrypted], [sd].[is_honor_broker_priority_on] '
- SET @version_where_predicates = N' OR
- /* sql 2008+ */ [mrdbi].[is_cdc_enabled] <> [sd].[is_cdc_enabled] OR
- [mrdbi].[is_encrypted] <> [sd].[is_encrypted] OR
- [mrdbi].[is_honor_broker_priority_on] <> [sd].[is_honor_broker_priority_on] '
- END
- IF(@@VERSION LIKE N'%Microsoft SQL Server 2012%')
- BEGIN
- SET @version_column_list = N', /* sql 2008+ */ [is_cdc_enabled], [is_encrypted], [is_honor_broker_priority_on], /* sql 2012+ */ [replica_id], [group_database_id], [default_language_lcid], [default_fulltext_language_lcid], [is_nested_triggers_on], [is_transform_noise_words_on], [two_digit_year_cutoff], [containment], [target_recovery_time_in_seconds] '
- SET @version_column_list_with_table_prefix = N', /* sql 2008+ */ [sd].[is_cdc_enabled], [sd].[is_encrypted], [sd].[is_honor_broker_priority_on], /* sql 2012+ */ [sd].[replica_id], [sd].[group_database_id], [sd].[default_language_lcid], [sd].[default_fulltext_language_lcid], [sd].[is_nested_triggers_on], [sd].[is_transform_noise_words_on], [sd].[two_digit_year_cutoff], [sd].[containment], [sd].[target_recovery_time_in_seconds] '
- SET @version_where_predicates = N' OR
- /* sql 2008+ */ [mrdbi].[is_cdc_enabled] <> [sd].[is_cdc_enabled] OR
- [mrdbi].[is_encrypted] <> [sd].[is_encrypted] OR
- [mrdbi].[is_honor_broker_priority_on] <> [sd].[is_honor_broker_priority_on] OR
- /* sql 2012+ */ [sd].[replica_id] <> [sd].[replica_id] OR
- [mrdbi].[group_database_id] <> [sd].[group_database_id] OR
- [mrdbi].[default_language_lcid] <> [sd].[default_language_lcid] OR
- [mrdbi].[default_fulltext_language_lcid] <> [sd].[default_fulltext_language_lcid] OR
- [mrdbi].[is_nested_triggers_on] <> [sd].[is_nested_triggers_on] OR
- [mrdbi].[is_transform_noise_words_on] <> [sd].[is_transform_noise_words_on] OR
- [mrdbi].[two_digit_year_cutoff] <> [sd].[two_digit_year_cutoff] OR
- [mrdbi].[containment] <> [sd].[containment] OR
- [mrdbi].[target_recovery_time_in_seconds] <> [sd].[target_recovery_time_in_seconds] '
- END
- IF(@@VERSION LIKE N'%Microsoft SQL Server 2014%')
- BEGIN
- SET @version_column_list = N', /* sql 2008+ */ [is_cdc_enabled], [is_encrypted], [is_honor_broker_priority_on], /* sql 2012+ */ [replica_id], [group_database_id], [default_language_lcid], [default_fulltext_language_lcid], [is_nested_triggers_on], [is_transform_noise_words_on], [two_digit_year_cutoff], [containment], [target_recovery_time_in_seconds], /* sql 2014 */ [is_auto_create_stats_incremental_on], [is_query_store_on], [resource_pool_id], [delayed_durability], [is_memory_optimized_elevate_to_snapshot_on] '
- SET @version_column_list_with_table_prefix = N', /* sql 2008+ */ [sd].[is_cdc_enabled], [sd].[is_encrypted], [sd].[is_honor_broker_priority_on], /* sql 2012+ */ [sd].[replica_id], [sd].[group_database_id], [sd].[default_language_lcid], [sd].[default_fulltext_language_lcid], [sd].[is_nested_triggers_on], [sd].[is_transform_noise_words_on], [sd].[two_digit_year_cutoff], [sd].[containment], [sd].[target_recovery_time_in_seconds], /* sql 2014 */ [sd].[is_auto_create_stats_incremental_on], [sd].[is_query_store_on], [sd].[resource_pool_id], [sd].[delayed_durability], [sd].[is_memory_optimized_elevate_to_snapshot_on] '
- SET @version_where_predicates = N' OR
- /* sql 2008+ */ [mrdbi].[is_cdc_enabled] <> [sd].[is_cdc_enabled] OR
- [mrdbi].[is_encrypted] <> [sd].[is_encrypted] OR
- [mrdbi].[is_honor_broker_priority_on] <> [sd].[is_honor_broker_priority_on] OR
- /* sql 2012+ */ [mrdbi].[replica_id] <> [sd].[replica_id] OR
- [mrdbi].[group_database_id] <> [sd].[group_database_id] OR
- [mrdbi].[default_language_lcid] <> [sd].[default_language_lcid] OR
- [mrdbi].[default_fulltext_language_lcid] <> [sd].[default_fulltext_language_lcid] OR
- [mrdbi].[is_nested_triggers_on] <> [sd].[is_nested_triggers_on] OR
- [mrdbi].[is_transform_noise_words_on] <> [sd].[is_transform_noise_words_on] OR
- [mrdbi].[two_digit_year_cutoff] <> [sd].[two_digit_year_cutoff] OR
- [mrdbi].[containment] <> [sd].[containment] OR
- [mrdbi].[target_recovery_time_in_seconds] <> [sd].[target_recovery_time_in_seconds] OR
- /* sql 2014 */ [mrdbi].[is_auto_create_stats_incremental_on] <> [sd].[is_auto_create_stats_incremental_on] OR
- [mrdbi].[is_query_store_on] <> [sd].[is_query_store_on] OR
- [mrdbi].[resource_pool_id] <> [sd].[resource_pool_id] OR
- [mrdbi].[delayed_durability] <> [sd].[delayed_durability] OR
- [mrdbi].[is_memory_optimized_elevate_to_snapshot_on] <> [sd].[is_memory_optimized_elevate_to_snapshot_on] '
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Pre-Initial Data: insert data which have no initial state (e.g.: table is empty or data were deleted manually since the last check)
- ---------------------------------------------------------------------------------------------------------------------------------------
- SET @SQLCommand = N'WITH most_recent_db_info as (
- SELECT [capture_date], [database_name]
- FROM [dbo].[database_info] AS [di] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[database_info] AS [di2] WHERE [di].[database_name] = [di2].[database_name])
- )
- INSERT INTO [dbo].[database_info]
- ( [capture_date], [database_name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N', [is_initial], [is_pre] )
- SELECT GETDATE(),[name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N', 1, 1
- FROM [sys].[databases] WHERE [name] NOT IN (SELECT [database_name] FROM most_recent_db_info) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as pre-initial config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END;
-
- ---------------------------------------------------------------------------------------------------------
- -- Check and collect changed configuration data
- ---------------------------------------------------------------------------------------------------------
- SET @SQLCommand = N'WITH most_recent_db_info as (
- SELECT [capture_date], [database_name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N'
- FROM [dbo].[database_info] AS [di] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[database_info] AS [di2] WHERE [di].[database_name] = [di2].[database_name])
- )
- INSERT INTO [dbo].[database_info] ( [capture_date], [database_name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N', [is_initial], [is_pre] )
- SELECT GETDATE(), [sd].[name], [sd].[database_id], [sd].[source_database_id], [sd].[owner_sid], [sd].[create_date], [sd].[compatibility_level], [sd].[collation_name], [sd].[user_access], [sd].[is_read_only], [sd].[is_auto_close_on], [sd].[is_auto_shrink_on], [sd].[state], [sd].[is_in_standby], [sd].[is_supplemental_logging_enabled], [sd].[snapshot_isolation_state], [sd].[is_read_committed_snapshot_on], [sd].[recovery_model], [sd].[page_verify_option], [sd].[is_auto_create_stats_on], [sd].[is_auto_update_stats_on], [sd].[is_auto_update_stats_async_on], [sd].[is_ansi_null_default_on], [sd].[is_ansi_nulls_on], [sd].[is_ansi_padding_on], [sd].[is_ansi_warnings_on], [sd].[is_arithabort_on], [sd].[is_concat_null_yields_null_on], [sd].[is_numeric_roundabort_on], [sd].[is_quoted_identifier_on], [sd].[is_recursive_triggers_on], [sd].[is_cursor_close_on_commit_on], [sd].[is_local_cursor_default], [sd].[is_fulltext_enabled], [sd].[is_trustworthy_on], [sd].[is_db_chaining_on], [sd].[is_parameterization_forced], [sd].[is_master_key_encrypted_by_server], [sd].[is_published], [sd].[is_merge_published], [sd].[is_distributor], [sd].[is_sync_with_backup], [sd].[service_broker_guid], [sd].[is_broker_enabled], [sd].[is_date_correlation_on] ' + @version_column_list_with_table_prefix + N', 0, 0
- FROM [most_recent_db_info] AS [mrdbi] INNER JOIN [sys].[databases] AS [sd] ON [mrdbi].[database_name] = [sd].[name]
- WHERE [mrdbi].[database_id] <> [sd].[database_id] OR
- [mrdbi].[source_database_id] <> [sd].[source_database_id] OR
- [mrdbi].[owner_sid] <> [sd].[owner_sid] OR
- [mrdbi].[create_date] <> [sd].[create_date] OR
- [mrdbi].[compatibility_level] <> [sd].[compatibility_level] OR
- [mrdbi].[collation_name] <> [sd].[collation_name] OR
- [mrdbi].[user_access] <> [sd].[user_access] OR
- [mrdbi].[is_read_only] <> [sd].[is_read_only] OR
- [mrdbi].[is_auto_close_on] <> [sd].[is_auto_close_on] OR
- [mrdbi].[is_auto_shrink_on] <> [sd].[is_auto_shrink_on] OR
- [mrdbi].[state] <> [sd].[state] OR
- [mrdbi].[is_in_standby] <> [sd].[is_in_standby] OR
- [mrdbi].[is_supplemental_logging_enabled] <> [sd].[is_supplemental_logging_enabled] OR
- [mrdbi].[snapshot_isolation_state] <> [sd].[snapshot_isolation_state] OR
- [mrdbi].[is_read_committed_snapshot_on] <> [sd].[is_read_committed_snapshot_on] OR
- [mrdbi].[recovery_model] <> [sd].[recovery_model] OR
- [mrdbi].[page_verify_option] <> [sd].[page_verify_option] OR
- [mrdbi].[is_auto_create_stats_on] <> [sd].[is_auto_create_stats_on] OR
- [mrdbi].[is_auto_update_stats_on] <> [sd].[is_auto_update_stats_on] OR
- [mrdbi].[is_auto_update_stats_async_on] <> [sd].[is_auto_update_stats_async_on] OR
- [mrdbi].[is_ansi_null_default_on] <> [sd].[is_ansi_null_default_on] OR
- [mrdbi].[is_ansi_nulls_on] <> [sd].[is_ansi_nulls_on] OR
- [mrdbi].[is_ansi_padding_on] <> [sd].[is_ansi_padding_on] OR
- [mrdbi].[is_ansi_warnings_on] <> [sd].[is_ansi_warnings_on] OR
- [mrdbi].[is_arithabort_on] <> [sd].[is_arithabort_on] OR
- [mrdbi].[is_concat_null_yields_null_on] <> [sd].[is_concat_null_yields_null_on] OR
- [mrdbi].[is_numeric_roundabort_on] <> [sd].[is_numeric_roundabort_on] OR
- [mrdbi].[is_quoted_identifier_on] <> [sd].[is_quoted_identifier_on] OR
- [mrdbi].[is_recursive_triggers_on] <> [sd].[is_recursive_triggers_on] OR
- [mrdbi].[is_cursor_close_on_commit_on] <> [sd].[is_cursor_close_on_commit_on] OR
- [mrdbi].[is_local_cursor_default] <> [sd].[is_local_cursor_default] OR
- [mrdbi].[is_fulltext_enabled] <> [sd].[is_fulltext_enabled] OR
- [mrdbi].[is_trustworthy_on] <> [sd].[is_trustworthy_on] OR
- [mrdbi].[is_db_chaining_on] <> [sd].[is_db_chaining_on] OR
- [mrdbi].[is_parameterization_forced] <> [sd].[is_parameterization_forced] OR
- [mrdbi].[is_master_key_encrypted_by_server] <> [sd].[is_master_key_encrypted_by_server] OR
- [mrdbi].[is_published] <> [sd].[is_published] OR
- [mrdbi].[is_merge_published] <> [sd].[is_merge_published] OR
- [mrdbi].[is_distributor] <> [sd].[is_distributor] OR
- [mrdbi].[is_sync_with_backup] <> [sd].[is_sync_with_backup] OR
- [mrdbi].[service_broker_guid] <> [sd].[service_broker_guid] OR
- [mrdbi].[is_broker_enabled] <> [sd].[is_broker_enabled] OR
- [mrdbi].[is_date_correlation_on] <> [sd].[is_date_correlation_on] ' + @version_where_predicates
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as changed config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- DELETE FROM [dbo].[database_info] WHERE [capture_date] < DATEADD(dd, -1*CAST(@retention AS nvarchar) , GETDATE())
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Post-Initial Data: insert data which have no initial state because of the previous expired-deletion
- ---------------------------------------------------------------------------------------------------------
- SET @SQLCommand = N'INSERT INTO [dbo].[database_info]
- ( [capture_date], [database_name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N', [is_initial], [is_pre] )
- SELECT GETDATE(), [name], [database_id], [source_database_id], [owner_sid], [create_date], [compatibility_level], [collation_name], [user_access], [is_read_only], [is_auto_close_on], [is_auto_shrink_on], [state], [is_in_standby], [is_supplemental_logging_enabled], [snapshot_isolation_state], [is_read_committed_snapshot_on], [recovery_model], [page_verify_option], [is_auto_create_stats_on], [is_auto_update_stats_on], [is_auto_update_stats_async_on], [is_ansi_null_default_on], [is_ansi_nulls_on], [is_ansi_padding_on], [is_ansi_warnings_on], [is_arithabort_on], [is_concat_null_yields_null_on], [is_numeric_roundabort_on], [is_quoted_identifier_on], [is_recursive_triggers_on], [is_cursor_close_on_commit_on], [is_local_cursor_default], [is_fulltext_enabled], [is_trustworthy_on], [is_db_chaining_on], [is_parameterization_forced], [is_master_key_encrypted_by_server], [is_published], [is_merge_published], [is_distributor], [is_sync_with_backup], [service_broker_guid], [is_broker_enabled], [is_date_correlation_on] ' + @version_column_list + N', 1, 0
- FROM [sys].[databases]
- WHERE [name] NOT IN (
- SELECT [database_name] FROM [dbo].[database_info]
- WHERE [capture_date] >= DATEADD(dd, -1*'+CAST(@retention AS nvarchar)+N', GETDATE())
- ) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as post-initial config data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END;
-
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectFileInfo ---------------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectFileInfo')
- EXEC ('CREATE PROC dbo.sp_CollectFileInfo AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectFileInfo]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectFileInfo.sql
-
-Example:
-EXEC sp_CollectFileInfo
-@DestTable = NULL,
-@DestSchema = NULL,
-@TSMode = 0,
-@EmptyTSTable = 0,
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server Database File Information Raw Data
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@DestTable NVARCHAR(128) = NULL,
-@DestSchema NVARCHAR(25) = NULL,
-@TSMode BIT = 0,
-@EmptyTSTable BIT = 0,
-@Retention SMALLINT = 90,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help message.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@DestTable', N'NVARCHAR(128)', N'NULL', N'In troubleshooting mode it specifies the output table. Table must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@DestSchema', N'NVARCHAR(25)', N'NULL', N'In troubleshooting mode it specifies the schema of the output table. Schema must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@TSMode', N'BIT', N'0', N'Enable troubleshooting mode'
-
- UNION ALL
- SELECT N'@EmptyTSTable', N'BIT', N'0', N'Empty the table used for troubleshooting before the data collection.'
-
- SELECT N'Standard' AS [Running Mode], N'[dbo].[file_info]' AS [Default Table]
- UNION ALL
- SELECT N'Troubleshooting', N'[dbo].[ts_file_info]'
-
- SELECT N'Filtering table' AS [Filtering], N'[dbo].[filter_database_file]' AS [Info]
- UNION ALL
- SELECT N'Type of Filtering', N'Exclude - Include (see the columns)'
- UNION ALL
- SELECT N'Column used in Standardmode (exclude)', N'[is_excluded_file_info]'
- UNION ALL
- SELECT N'Column used in TSMode (include)', N'[ts_is_included_file_info]'
-
- SELECT [database_name], [logical_file_name], [is_excluded_file_info], [ts_is_included_file_info] FROM [dbo].[filter_database_file] ORDER BY [database_name]
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @data_compression NVARCHAR(35)
-DECLARE @SQLCommand NVARCHAR(max)
-
-DECLARE @row_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF @TSMode IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @TSMode is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @EmptyTSTable IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @EmptyTSTable is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- --------------
- -- TSMode = 0
- --------------
- IF(@TSMode = 0)
- BEGIN
- SET @DestTable = N'file_info'
- SET @DestSchema = N'dbo'
- END
- --------------
- -- TSMode = 1
- --------------
- ELSE
- BEGIN
- IF(@DestTable IS NOT NULL)
- BEGIN
- SET @DestTable = REPLACE(REPLACE(RTRIM(LTRIM(@DestTable)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestTAble = N'ts_file_info'
- END
-
- IF(@DestSchema IS NOT NULL)
- BEGIN
- SET @DestSchema = REPLACE(REPLACE(RTRIM(LTRIM(@DestSchema)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestSchema = N'dbo'
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @DestTable = ' + ISNULL(N''''+@DestTable+N'''', N'NULL')
- + N', @DestSchema = ' + ISNULL(N''''+@DestSchema+N'''', N'NULL')
- + N', @TSMode = ' + CAST(@TSMode AS nvarchar)
- + N', @EmptyTSTable = ' + CAST(@EmptyTSTable AS nvarchar)
- + N', @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = ' + CAST(@LogInfo AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@Retention > 0 AND @TSMode = 1)
- BEGIN
- SET @Retention = 0
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @Retention has been changed to 0. Reason: @TSMode is enabled. Tables for troubleshooting have to be maintained manually.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)) IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N' does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@TSMode = 1 AND @EmptyTSTable = 1)
- BEGIN
- SET @SQLCommand = N'TRUNCATE TABLE ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)
- EXEC sp_executesql @SQLCommand
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Collect File Info Data
- ---------------------------------------------------------------------------------------------------------------------------------------
- CREATE TABLE #temp_filter
- (
- [database_id] INT,
- [logical_file_id] INT,
- )
-
- ---------------------------------------------------------
- -- Filtering | TSMode - include | StandardMode - exclude
- ---------------------------------------------------------
- IF(@TSMode = 1) /* INCLUDE */
- BEGIN
- INSERT INTO #temp_filter ( [database_id], [logical_file_id] )
- SELECT [sd].[database_id], [mf].[file_id] FROM [sys].[databases] AS [sd]
- INNER JOIN [sys].[master_files] AS [mf] ON [mf].[database_id] = [sd].[database_id]
- INNER JOIN [dbo].[filter_database_file] AS [ft] ON [ft].[database_name] = [sd].[name] AND [ft].[logical_file_name] = [mf].[name]
- WHERE [sd].[state] = 0 AND [ft].[ts_is_included_file_info] = 1
-
- END
- ELSE /* EXCLUDE */
- BEGIN
- INSERT INTO #temp_filter ( [database_id], [logical_file_id] )
- SELECT [sd].[database_id], [mf].[file_id] FROM [sys].[databases] AS [sd]
- INNER JOIN [sys].[master_files] AS [mf] ON [mf].[database_id] = [sd].[database_id]
- LEFT OUTER JOIN [dbo].[filter_database_file] AS [ft] ON [ft].[database_name] = [sd].[name] AND [ft].[logical_file_name] = [mf].[name]
- WHERE [sd].[state] = 0 AND ([ft].[is_excluded_file_info] = 0 OR [ft].[is_excluded_file_info] IS NULL)
- END
-
- DECLARE @object NVARCHAR (300)
- DECLARE c CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
- FOR SELECT DISTINCT QUOTENAME(DB_NAME([database_id])) FROM #temp_filter
- OPEN c;
-
- FETCH NEXT FROM c INTO @object
- WHILE @@FETCH_STATUS = 0
- BEGIN
- SET @sqlcommand = N'USE ' + @object + N' INSERT INTO ' + QUOTENAME(DB_NAME(DB_ID()))+N'.'+QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ( [capture_date], [database_name], [physical_name], [type], [size_pages], [space_used_pages], [max_size_pages], [growth_pages_percent], [is_percent_growth] )
- SELECT GETDATE() AS [capture_date], DB_NAME() AS [database_name], [df].[physical_name], [df].[type], [df].[size] AS [size_pages], FILEPROPERTY([df].[name], ''SpaceUsed'') AS [space_used_pages], [df].[max_size], [df].[growth] AS [growth_pages_percent], [df].[is_percent_growth] FROM [sys].[database_files] AS [df]
- INNER JOIN #temp_filter AS [f] ON DB_ID() = [f].[database_id] AND [df].[file_id] = [f].[logical_file_id] '
- EXEC sp_executesql @sqlcommand
- FETCH NEXT FROM c INTO @object;
- END
- CLOSE c;
- DEALLOCATE c;
-
- DROP TABLE #temp_filter
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- SET @SQLCommand = N'DELETE FROM ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + ' WHERE [capture_date] < DATEADD(dd, -1*' + CAST(@retention AS nvarchar) + N', GETDATE()) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = 'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- IF OBJECT_ID ('tempdb..#temp_filter') IS NOT NULL
- BEGIN
- DROP TABLE #temp_filter
- END
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectInstanceInfo -----------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectInstanceInfo')
- EXEC ('CREATE PROC dbo.sp_CollectInstanceInfo AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectInstanceInfo]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectInstanceInfo.sql
-
-Example:
-EXEC sp_CollectInstanceInfo
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server Server Instace Related Info
-
-License: Copyright (c) 2015 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@Retention SMALLINT = 90,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help messages.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @row_count INT
-DECLARE @config_name NVARCHAR(35)
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = '+ CAST(@LogInfo AS nvarchar)
- + N', @help = ' + CAST(@help AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(N'[dbo].[instance_info]') IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table [dbo].[instance_info] does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @row_count = 0;
- --
- DECLARE @instance_info TABLE
- (
- [name] NVARCHAR(50) NOT NULL,
- [value] SQL_VARIANT NULL
- )
- INSERT INTO @instance_info ([name], [value]) SELECT 'ComputerNamePhysicalNetBIOS', SERVERPROPERTY('ComputerNamePhysicalNetBIOS')
- INSERT INTO @instance_info ([name], [value]) SELECT 'MachineName', SERVERPROPERTY('MachineName')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ServerName', SERVERPROPERTY('ServerName')
- INSERT INTO @instance_info ([name], [value]) SELECT 'InstanceName', SERVERPROPERTY('InstanceName')
- INSERT INTO @instance_info ([name], [value]) SELECT 'IsClustered', SERVERPROPERTY('IsClustered')
- INSERT INTO @instance_info ([name], [value]) SELECT 'Edition', SERVERPROPERTY('Edition')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ProductLevel', SERVERPROPERTY('ProductLevel')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ProductVersion', SERVERPROPERTY('ProductVersion')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ResourceLastUpdateDateTime', SERVERPROPERTY('ResourceLastUpdateDateTime')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ResourceVersion', SERVERPROPERTY('ResourceVersion')
- INSERT INTO @instance_info ([name], [value]) SELECT 'LicenseType', SERVERPROPERTY('LicenseType')
- INSERT INTO @instance_info ([name], [value]) SELECT 'NumLicenses', SERVERPROPERTY('NumLicenses')
- INSERT INTO @instance_info ([name], [value]) SELECT 'ProcessID', SERVERPROPERTY('ProcessID')
- INSERT INTO @instance_info ([name], [value]) SELECT 'Collation', SERVERPROPERTY('Collation')
- INSERT INTO @instance_info ([name], [value]) SELECT 'IsFullTextInstalled', SERVERPROPERTY('IsFullTextInstalled')
- INSERT INTO @instance_info ([name], [value]) SELECT 'IsIntegratedSecurityOnly', SERVERPROPERTY('IsIntegratedSecurityOnly')
- INSERT INTO @instance_info ([name], [value]) SELECT [type_desc], COUNT([type]) FROM sys .server_principals GROUP BY [type_desc]
- INSERT INTO @instance_info ([name], [value]) SELECT 'NumDatabases: ' + [state_desc] , COUNT([name]) FROM sys.databases GROUP BY [state_desc]
-
- --select * from @instance_info
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Pre-Initial Data: insert data which have no initial state (e.g.: table is empty or data were deleted manually since the last check)
- ---------------------------------------------------------------------------------------------------------------------------------------
- ;WITH most_recent_config as (
- SELECT [capture_date], [name]--, [Value], [value_in_use], [is_initial], [is_pre]
- FROM [dbo].[instance_info] AS [c] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[instance_info] AS [cc] WHERE [c].[name] = [cc].[name])
- )
- INSERT INTO [dbo].[instance_info]
- ( [capture_date], [name], [Value], [is_initial], [is_pre] )
- SELECT GETDATE(),[name], [value], 1, 1
- FROM @instance_info WHERE [name] NOT IN (SELECT [name] FROM most_recent_config)
-
- --select * from [dbo].[instance_info]
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as pre-initial instance info data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END;
-
- ---------------------------------------------------------------------------------------------------------
- -- Check and collect changed configuration data
- ---------------------------------------------------------------------------------------------------------
- WITH [most_recent_config] AS (
- SELECT [capture_date], [name], [Value]
- FROM [dbo].[instance_info] AS [c] WHERE [capture_date] = (SELECT MAX([capture_date]) FROM [dbo].[instance_info] AS [cc] WHERE [c].[name] = [cc].[name])
- )
- INSERT INTO [dbo].[instance_info] ( [capture_date], [name], [Value], [is_initial], [is_pre] )
- SELECT GETDATE(), [c].[name], [c].[value], 0, 0 FROM [most_recent_config] AS [mrc] INNER JOIN @instance_info AS [c] ON [mrc].[name] = [c].[name] WHERE [mrc].[value] <> [c].[value]
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as changed instance info data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- DELETE FROM [dbo].[instance_info] WHERE [capture_date] < DATEADD(dd, -1*CAST(@retention AS nvarchar) , GETDATE())
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Post-Initial Data: insert data which have no initial state because of the previous expired-deletion
- ---------------------------------------------------------------------------------------------------------
- INSERT INTO [dbo].[instance_info]
- ( [capture_date], [name], [Value], [is_initial], [is_pre] )
- SELECT GETDATE(), [name], [value], 1, 0
- FROM @instance_info
- WHERE [name] NOT IN (
- SELECT [name] FROM [dbo].[instance_info]
- WHERE [capture_date] >= DATEADD(dd, -1*@retention, GETDATE())
- )
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) added as post-initial instance info data.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END;
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-
-/*- sp_CollectIOVFStats --------------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectIOVFStats')
- EXEC ('CREATE PROC dbo.sp_CollectIOVFStats AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectIOVFStats]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectIOVFStats.sql
-
-Example:
-EXEC sp_CollectIOVFStats
-@DestTable = NULL,
-@DestSchema = NULL,
-@TSMode = 1,
-@EmptyTSTable = 1,
-@CollectingInterval = NULL,
-@SampleInterval = 10,
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server IO Virtual File Statistics Raw Data
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@DestTable NVARCHAR(128) = NULL,
-@DestSchema NVARCHAR(25) = NULL,
-@TSMode BIT = 0,
-@EmptyTSTable BIT = 0,
-@Retention SMALLINT = 90,
-@CollectingInterval SMALLINT = NULL,
-@SampleInterval SMALLINT = 10,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help message.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@DestTable', N'NVARCHAR(128)', N'NULL', N'In troubleshooting mode it specifies the output table. Table must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@DestSchema', N'NVARCHAR(25)', N'NULL', N'In troubleshooting mode it specifies the schema of the output table. Schema must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@TSMode', N'BIT', N'0', N'Enable troubleshooting mode'
-
- UNION ALL
- SELECT N'@EmptyTSTable', N'BIT', N'0', N'Empty the table used for troubleshooting before the data collection.'
-
- UNION ALL
- SELECT N'@CollectingInterval', N'SMALLINT', N'NULL', N'Duration of the data collection in minutes. Maximum 1440 (1 day), so value has to be between 1 and 1440. It can be NULL. In that case the collector only takes one sample, the actual state of the data collected by the collector.'
-
- UNION ALL
- SELECT N'@SampleInterval', N'SMALLINT', N'10', N'Times in seconds between taking two samples.'
-
- SELECT N'Standard' AS [Running Mode], N'[dbo].[iovf_stats]' AS [Default Table]
- UNION ALL
- SELECT N'Troubleshooting', N'[dbo].[ts_iovf_stats]'
-
- SELECT N'Filtering table' AS [Filtering], N'[dbo].[filter_database_file]' AS [Info]
- UNION ALL
- SELECT N'Type of Filtering', N'Exclude - Include (see the columns)'
- UNION ALL
- SELECT N'Column used in Standardmode (exclude)', N'[is_excluded_iovf]'
- UNION ALL
- SELECT N'Column used in TSMode (include)', N'[ts_is_included_iovf]'
-
- SELECT [database_name], [logical_file_name], [is_excluded_iovf], [ts_is_included_iovf] FROM [dbo].[filter_database_file] ORDER BY [database_name]
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @SQLCommand NVARCHAR(max)
-DECLARE @CollectSQLCommand NVARCHAR(max)
-DECLARE @sample_interval NVARCHAR(12)
-
-DECLARE @start_loop DATETIME
-DECLARE @max_loop INT
-DECLARE @loop_count INT
-
-DECLARE @LockResult INT
-DECLARE @RequiredAppLock NVARCHAR(25)
-
-DECLARE @row_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF((@SampleInterval NOT BETWEEN 1 AND 300) OR @SampleInterval IS NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @SampleInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@CollectingInterval NOT BETWEEN 1 AND 1440 AND @CollectingInterval IS NOT NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @CollectingInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- ELSE
- BEGIN
- IF(@CollectingInterval IS NOT NULL AND @SampleInterval > @CollectingInterval*60 )
- BEGIN
- SET @ErrorMessage = N'The time interval of sampling is larger than the collecting time interval!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF @TSMode IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @TSMode is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @EmptyTSTable IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @EmptyTSTable is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- --------------
- -- TSMode = 0
- --------------
- IF(@TSMode = 0)
- BEGIN
- SET @DestTable = N'iovf_stats'
- SET @DestSchema = N'dbo'
- END
- --------------
- -- TSMode = 1
- --------------
- ELSE
- BEGIN
- IF(@DestTable IS NOT NULL)
- BEGIN
- SET @DestTable = REPLACE(REPLACE(RTRIM(LTRIM(@DestTable)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestTAble = N'ts_iovf_stats'
- END
-
- IF(@DestSchema IS NOT NULL)
- BEGIN
- SET @DestSchema = REPLACE(REPLACE(RTRIM(LTRIM(@DestSchema)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestSchema = N'dbo'
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @DestTable = ' + ISNULL(N''''+@DestTable+N'''', N'NULL')
- + N', @DestSchema = ' + ISNULL(N''''+@DestSchema+N'''', N'NULL')
- + N', @TSMode = ' + CAST(@TSMode AS nvarchar)
- + N', @EmptyTSTable = ' + CAST(@EmptyTSTable AS nvarchar)
- + N', @CollectingInterval = ' + ISNULL(CAST(@CollectingInterval AS nvarchar), N'NULL')
- + N', @SampleInterval = ' + CAST(@SampleInterval AS nvarchar)
- + N', @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = ' + CAST(@LogInfo AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@Retention > 0 AND @TSMode = 1)
- BEGIN
- SET @Retention = 0
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @Retention has been changed to 0. Reason: @TSMode is enabled. Tables for troubleshooting have to be maintained manually.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)) IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N' does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@TSMode = 1 AND @EmptyTSTable = 1)
- BEGIN
- SET @SQLCommand = N'TRUNCATE TABLE ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)
- EXEC sp_executesql @SQLCommand
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Create temp tables and set variables
- ---------------------------------------------------------------------------------------------------------------------------------------
- SET @CollectSQLCommand = N'INSERT INTO '+ QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ([capture_date], [database_name], [type], [physical_name], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms])
- SELECT [tio2].[capture_date], DB_NAME([tio2].[database_id]), [mf].[type], [mf].[physical_name], [tio2].[sample_ms]-[tio1].[sample_ms], [tio2].[num_of_reads]-[tio1].[num_of_reads], [tio2].[num_of_bytes_read]-[tio1].[num_of_bytes_read], [tio2].[io_stall_read_ms]-[tio1].[io_stall_read_ms], [tio2].[num_of_writes]-[tio1].[num_of_writes], [tio2].[num_of_bytes_written]-[tio1].[num_of_bytes_written], [tio2].[io_stall_write_ms]-[tio1].[io_stall_write_ms]
- FROM #temp_IOVFStats1 AS [tio1] INNER JOIN #temp_IOVFStats2 AS [tio2]
- ON [tio1].[database_id] = [tio2].[database_id] AND [tio1].[file_id] = [tio2].[file_id]
- INNER JOIN sys.master_files AS [mf]
- ON [tio2].[database_id] = [mf].[database_id] AND [tio2].[file_id] = [mf].[file_id]
- INNER JOIN #temp_filter AS [tf] ON [tf].[database_id] = [tio2].[database_id] AND [tf].[logical_file_id] = [tio2].[file_id] '
-
- CREATE TABLE #temp_IOVFStats1
- (
- [database_id] SMALLINT,
- [file_id] SMALLINT,
- [sample_ms] INT,
- [num_of_reads] BIGINT,
- [num_of_bytes_read] BIGINT,
- [io_stall_read_ms] BIGINT,
- [num_of_writes] BIGINT,
- [num_of_bytes_written] BIGINT,
- [io_stall_write_ms] BIGINT
- )
-
- CREATE TABLE #temp_IOVFStats2
- (
- [capture_date] DATETIME DEFAULT GETDATE(),
- [database_id] SMALLINT,
- [file_id] SMALLINT,
- [sample_ms] INT,
- [num_of_reads] BIGINT,
- [num_of_bytes_read] BIGINT,
- [io_stall_read_ms] BIGINT,
- [num_of_writes] BIGINT,
- [num_of_bytes_written] BIGINT,
- [io_stall_write_ms] BIGINT
- )
-
- CREATE TABLE #temp_filter
- (
- [database_id] INT,
- [logical_file_id] INT,
- )
- ---------------------------------------------------------
- -- Filtering | TSMode - include | StandardMode - exclude
- ---------------------------------------------------------
- IF(@TSMode = 1) /* INCLUDE */
- BEGIN
- INSERT INTO #temp_filter ( [database_id], [logical_file_id] )
- SELECT [iovfs].[database_id], [iovfs].[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS [iovfs]
- INNER JOIN sys.master_files AS [mf] ON [iovfs].[database_id] = [mf].[database_id] AND [iovfs].[file_id] = [mf].[file_id]
- INNER JOIN [dbo].[filter_database_file] AS [ft] ON [ft].[database_name] = DB_NAME([iovfs].[database_id]) AND [ft].[logical_file_name] = [mf].[name]
- WHERE [ft].[ts_is_included_iovf] = 1
- END
- ELSE /* EXCLUDE */
- BEGIN
- INSERT INTO #temp_filter ( [database_id], [logical_file_id] )
- SELECT [iovfs].[database_id], [iovfs].[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS [iovfs]
- INNER JOIN sys.master_files AS [mf] ON [iovfs].[database_id] = [mf].[database_id] AND [iovfs].[file_id] = [mf].[file_id]
- LEFT OUTER JOIN [dbo].[filter_database_file] AS [ft] ON [ft].[database_name] = DB_NAME([iovfs].[database_id]) AND [ft].[logical_file_name] = [mf].[name]
- WHERE [ft].[is_excluded_iovf] = 0 OR [ft].[is_excluded_iovf] IS NULL
-
- END
-
-
-
- IF(@CollectingInterval IS NULL)
- BEGIN
- SET @max_loop = 1
- END
- ELSE
- BEGIN
- SET @max_loop = @CollectingInterval*60/@SampleInterval
- END
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'Number of loops - @max_loop: ' + CAST(@max_loop AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Sample interval - @SampleInterval: ' + CAST(@SampleInterval AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @loop_count = 0
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Collect IO Virtual File Stats Data
- ---------------------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------
- -- initial measurement
- -----------------------------------------
- INSERT INTO #temp_IOVFStats1
- ([database_id], [file_id], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms])
- SELECT [database_id], [file_id], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms]
- FROM sys.dm_io_virtual_file_stats(NULL, NULL)
-
- IF(@debug > 1)
- BEGIN
- SELECT '#temp_IOVFStats1'
- SELECT * FROM #temp_IOVFStats1
- END
-
- SET @start_loop = GETDATE()
-
- WHILE(@loop_count < @max_loop)
- BEGIN
- SET @sample_interval = CONVERT(nvarchar, DATEADD(ms, @SampleInterval*1000-CAST(DATEDIFF(ms,@start_loop, GETDATE()) AS INT), 0), 114)
-
- WAITFOR DELAY @sample_interval;
-
- -----------------------------------------
- -- 2nd measurement
- -----------------------------------------
- INSERT INTO #temp_IOVFStats2
- ([database_id], [file_id], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms])
- SELECT [database_id], [file_id], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms]
- FROM sys.dm_io_virtual_file_stats(NULL, NULL)
-
- IF(@debug > 1)
- BEGIN
- SELECT '#temp_IOVFStats2'
- SELECT * FROM #temp_IOVFStats2
- END
-
- SET @start_loop = GETDATE()
-
- ------------------------------------------------------------------------------------------------
- -- Count and store the differences of the 1st and the 2nd measurement, prepare #temp_IOVFStats1
- ------------------------------------------------------------------------------------------------
- EXEC sp_executesql @CollectSQLCommand
-
- TRUNCATE TABLE #temp_IOVFStats1
-
- INSERT INTO #temp_IOVFStats1
- SELECT [database_id], [file_id], [sample_ms], [num_of_reads], [num_of_bytes_read], [io_stall_read_ms], [num_of_writes], [num_of_bytes_written], [io_stall_write_ms]
- FROM #temp_IOVFStats2
-
- TRUNCATE TABLE #temp_IOVFStats2
-
- SET @loop_count = @loop_count + 1
-
- END
-
- DROP TABLE #temp_IOVFStats1
-
- DROP TABLE #temp_IOVFStats2
-
- DROP TABLE #temp_filter
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- SET @SQLCommand = N'DELETE FROM ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + ' WHERE [capture_date] < DATEADD(dd, -1*' + CAST(@retention AS nvarchar) + N', GETDATE()) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = 'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- IF OBJECT_ID ('tempdb..#temp_IOVFStats1') IS NOT NULL
- BEGIN
- DROP TABLE #temp_IOVFStats1
- END
-
- IF OBJECT_ID ('tempdb..#temp_IOVFStats2') IS NOT NULL
- BEGIN
- DROP TABLE #temp_IOVFStats2
- END
-
- IF OBJECT_ID ('tempdb..#temp_filter') IS NOT NULL
- BEGIN
- DROP TABLE #temp_filter
- END
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectPerfmonData ------------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectPerfmonData')
- EXEC ('CREATE PROC dbo.sp_CollectPerfmonData AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectPerfmonData]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectPerfmonData.sql
-
-Example:
-EXEC sp_CollectPerfmonData
-@DestTable = NULL,
-@DestSchema = NULL,
-@TSMode = 0,
-@EmptyTSTable = 0,
-@CollectingInterval = NULL,
-@SampleInterval = 10,
-@MeasuringInterval = 3,
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server Instance Related Performance Counters
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@DestTable NVARCHAR(128) = NULL,
-@DestSchema NVARCHAR(25) = NULL,
-@TSMode BIT = 0,
-@EmptyTSTable BIT = 0,
-@CollectingInterval SMALLINT = NULL,
-@SampleInterval SMALLINT = 10,
-@MeasuringInterval TINYINT = 3,
-@Retention SMALLINT = 90,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help =1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help message.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@DestTable', N'NVARCHAR(128)', N'NULL', N'In troubleshooting mode it specifies the output table. Table must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@DestSchema', N'NVARCHAR(25)', N'NULL', N'In troubleshooting mode it specifies the schema of the output table. Schema must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@TSMode', N'BIT', N'0', N'Enable troubleshooting mode'
-
- UNION ALL
- SELECT N'@EmptyTSTable', N'BIT', N'0', N'Empty the table used for troubleshooting before the data collection.'
-
- UNION ALL
- SELECT N'@CollectingInterval', N'SMALLINT', N'NULL', N'Duration of the data collection in minutes. Maximum 1440 (1 day), so value has to be between 1 and 1440. It can be NULL. In that case the collector only takes one sample, the actual state of the data collected by the collector.'
-
- UNION ALL
- SELECT N'@SampleInterval', N'SMALLINT', N'10', N'Times in seconds between taking two samples.'
-
- UNION ALL
- SELECT N'@MeasuringInterval', N'TINYINT', N'3', N'Time in seconds between the 1st and 2nd measurement of the data sampling for measuring data during the collecting interval.'
-
- SELECT N'Standard' AS [Running Mode], N'[dbo].[perfmon_data]' AS [Default Table]
- UNION ALL
- SELECT N'Troubleshooting', N'[dbo].[ts_perfmon_data]'
-
- SELECT N'Filtering table' AS [Filtering], N'[dbo].[filter_performance_counters]' AS [Info]
- UNION ALL
- SELECT N'Type of Filtering', N'Include'
- UNION ALL
- SELECT N'Column used in Standardmode', N'[is_included]'
- UNION ALL
- SELECT N'Column used in TSMode', N'[ts_is_included]'
-
- SELECT [counter_name], [is_included], [ts_is_included] FROM [dbo].[filter_performance_counters] ORDER BY [counter_name]
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @FirstMeasurementSQLCommand NVARCHAR(max)
-DECLARE @SecondMeasurementSQLCommand NVARCHAR(max)
-DECLARE @CollectSQLCommand NVARCHAR(max)
-DECLARE @SQLCommand NVARCHAR(max)
-DECLARE @waitfor_delay NVARCHAR (8)
-DECLARE @sample_interval NVARCHAR(12)
-
-DECLARE @start_loop DATETIME
-DECLARE @max_loop INT
-DECLARE @loop_count INT
-
-DECLARE @row_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF((@MeasuringInterval NOT BETWEEN 1 AND 60) OR @MeasuringInterval IS NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @MeasuringInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF((@SampleInterval NOT BETWEEN 1 AND 300) OR @SampleInterval IS NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @SampleInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@CollectingInterval NOT BETWEEN 1 AND 1440 AND @CollectingInterval IS NOT NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @CollectingInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- ELSE
- BEGIN
- IF(@MeasuringInterval >= @SampleInterval)
- BEGIN
- SET @ErrorMessage = N'Parameter @SampleInterval MUST be larger than @MeasuringInterval!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF @TSMode IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @TSMode is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @EmptyTSTable IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @EmptyTSTable is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- --------------
- -- TSMode = 0
- --------------
- IF(@TSMode = 0)
- BEGIN
- SET @DestTable = N'perfmon_data'
- SET @DestSchema = N'dbo'
- END
- --------------
- -- TSMode = 1
- --------------
- ELSE
- BEGIN
- IF(@DestTable IS NOT NULL)
- BEGIN
- SET @DestTable = REPLACE(REPLACE(RTRIM(LTRIM(@DestTable)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestTAble = N'ts_perfmon_data'
- END
-
- IF(@DestSchema IS NOT NULL)
- BEGIN
- SET @DestSchema = REPLACE(REPLACE(RTRIM(LTRIM(@DestSchema)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestSchema = N'dbo'
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @DestTable = ' + ISNULL(N''''+@DestTable+N'''', N'NULL')
- + N', @DestSchema = ' + ISNULL(N''''+@DestSchema+N'''', N'NULL')
- + N', @TSMode = ' + CAST(@TSMode AS nvarchar)
- + N', @EmptyTSTable = ' + CAST(@EmptyTSTable AS nvarchar)
- + N', @CollectingInterval = ' + ISNULL(CAST(@CollectingInterval AS nvarchar), N'NULL')
- + N', @SampleInterval = ' + CAST(@SampleInterval AS nvarchar)
- + N', @MeasuringInterval = ' + CAST(@MeasuringInterval AS nvarchar)
- + N', @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = ' + CAST(@LogInfo AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@Retention > 0 AND @TSMode = 1)
- BEGIN
- SET @Retention = NULL
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @Retention has been changed to 0. Reason: @TSMode is enabled. Tables for troubleshooting have to be maintained manually.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)) IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N' does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@TSMode = 1 AND @EmptyTSTable = 1)
- BEGIN
- SET @SQLCommand = N'TRUNCATE TABLE ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)
- EXEC sp_executesql @SQLCommand
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Create temp table and set variables
- ---------------------------------------------------------------------------------------------------------------------------------------
- SET @FirstMeasurementSQLCommand = N'INSERT INTO #temp_perfcounters
- ( [Counter], [CounterType], [FirstValue], [FirstDateTime] )
- SELECT
- RIGHT(RTRIM(object_name),CHARINDEX('':'',REVERSE(RTRIM(object_name)))-1) + N'':'' + RTRIM([counter_name]) + N'':'' + RTRIM([instance_name]),
- [cntr_type], [cntr_value], GETDATE()
- FROM sys.dm_os_performance_counters '
-
- IF(@TSMode = 0)
- BEGIN
- SET @FirstMeasurementSQLCommand = @FirstMeasurementSQLCommand + N' WHERE [counter_name] IN ( SELECT [counter_name] FROM [dbo].[filter_performance_counters] WHERE [is_included] = 1 ) '
- END
- ELSE
- BEGIN
- SET @FirstMeasurementSQLCommand = @FirstMeasurementSQLCommand + N' WHERE [counter_name] IN ( SELECT [counter_name] FROM [dbo].[filter_performance_counters] WHERE [ts_is_included] = 1 ) '
- END
-
- SET @SecondMeasurementSQLCommand = N'UPDATE #temp_perfcounters
- SET [SecondValue] = [cntr_value],
- [SecondDateTime] = GETDATE()
- FROM #temp_perfcounters INNER JOIN sys.dm_os_performance_counters
- ON [Counter] = RIGHT(RTRIM(object_name),CHARINDEX('':'',REVERSE(RTRIM(object_name)))-1) + N'':'' + RTRIM([counter_name]) + N'':'' + RTRIM([instance_name]) '
-
- IF(@TSMode = 0)
- BEGIN
- SET @SecondMeasurementSQLCommand = @SecondMeasurementSQLCommand + N' WHERE [counter_name] IN ( SELECT [counter_name] FROM [dbo].[filter_performance_counters] WHERE [is_included] = 1 ) '
- END
- ELSE
- BEGIN
- SET @SecondMeasurementSQLCommand = @SecondMeasurementSQLCommand + N' WHERE [counter_name] IN ( SELECT [counter_name] FROM [dbo].[filter_performance_counters] WHERE [ts_is_included] = 1 ) '
- END
-
- SET @CollectSQLCommand = N'INSERT INTO '+ QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ([counter], [value], [capture_date] )
- SELECT [Counter], [CounterValue], [SecondDateTime]
- FROM #temp_perfcounters '
-
- CREATE TABLE #temp_perfcounters
- (
- [Counter] NVARCHAR(770),
- [CounterType] INT,
- [FirstValue] DECIMAL(38, 2),
- [FirstDateTime] DATETIME,
- [SecondValue] DECIMAL(38, 2),
- [SecondDateTime] DATETIME,
- [ValueDiff] AS ( [SecondValue] - [FirstValue] ),
- [TimeDiff] AS ( DATEDIFF(SS, FirstDateTime, SecondDateTime) ),
- [CounterValue] DECIMAL(38, 2)
- )
-
- IF(@CollectingInterval IS NULL)
- BEGIN
- SET @max_loop = 1
- SET @SampleInterval = NULL
- END
- ELSE
- BEGIN
- SET @max_loop = @CollectingInterval*60/@SampleInterval
- END
-
- SET @waitfor_delay = CONVERT(NVARCHAR(8), DATEADD(ss, @MeasuringInterval, 0), 114)
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'Number of loops - @max_loop: ' + CAST(@max_loop AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Time between the 1st and 2nd measurement - @waitfor_delay: ' + @waitfor_delay
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @loop_count = 0
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Collect performance counters
- ---------------------------------------------------------------------------------------------------------------------------------------
- WHILE(@loop_count < @max_loop)
- BEGIN
- SET @start_loop = GETDATE()
- -----------------------------------------
- -- 1st measurement
- -----------------------------------------
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'FirstMeasurement~' + CONVERT(nvarchar, @start_loop,21)
- IF(@debug > 1)
- BEGIN
- IF(@debug > 2)
- BEGIN
- SELECT @InfoMessage
- SELECT * FROM #temp_perfcounters
- END
- SET @InfoMessage = @InfoMessage + CHAR(13) + CHAR(10) + @FirstMeasurementSQLCommand
- END
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- EXEC sp_executesql @FirstMeasurementSQLCommand
-
- WAITFOR DELAY @waitfor_delay;
-
- -----------------------------------------
- -- 2nd measurement
- -----------------------------------------
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'SecondMeasurement~' + CONVERT(nvarchar, GETDATE(),21) + N' /'+ CONVERT(nvarchar, DATEADD(ms, CAST(DATEDIFF(ms,@start_loop,GETDATE()) AS INT), 0), 114) + N'/'
- IF(@debug > 1)
- BEGIN
- IF(@debug > 2)
- BEGIN
- SELECT @InfoMessage
- SELECT * FROM #temp_perfcounters
- END
- SET @InfoMessage = @InfoMessage + CHAR(13) + CHAR(10) + @SecondMeasurementSQLCommand
- END
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- EXEC sp_executesql @SecondMeasurementSQLCommand
-
- -----------------------------------------
- -- Update cntr type 272696576
- -----------------------------------------
- UPDATE #temp_perfcounters
- SET [CounterValue] = [ValueDiff] / [TimeDiff]
- WHERE [CounterType] = 272696576
-
- IF(@debug > 1)
- BEGIN
- SET @InfoMessage = N'After updating cntr_type(272696576)'
- IF(@debug > 2)
- BEGIN
- SELECT @InfoMessage
- SELECT * FROM #temp_perfcounters
- END
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- -----------------------------------------
- -- Update cntr type 65792
- -----------------------------------------
- UPDATE #temp_perfcounters
- SET [CounterValue] = [SecondValue]
- WHERE [CounterType] = 65792
-
- IF(@debug > 1)
- BEGIN
- SET @InfoMessage = N'After updating cntr_type(65792)'
- IF(@debug > 2)
- BEGIN
- SELECT @InfoMessage
- SELECT * FROM #temp_perfcounters
- END
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ----------------------------------------------------------------------
- -- Insert collected data to table
- ----------------------------------------------------------------------
- IF(@debug > 1)
- BEGIN
- SET @InfoMessage = N'Insert Command' + CHAR(13) + CHAR(10) + @CollectSQLCommand
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- EXEC sp_executesql @CollectSQLCommand
-
- TRUNCATE TABLE #temp_perfcounters
-
- SET @loop_count = @loop_count + 1
-
- SET @sample_interval = CONVERT(nvarchar, ISNULL(DATEADD(ms, @SampleInterval*1000-CAST(DATEDIFF(ms,@start_loop, GETDATE()) AS INT), 0), N'00:00:00'), 114)
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'Sample interval (inside the loop): ' + @sample_interval
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- WAITFOR DELAY @sample_interval;
- END
-
- DROP TABLE #temp_perfcounters
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- SET @SQLCommand = N'DELETE FROM ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + ' WHERE [capture_date] < DATEADD(dd, -1*' + CAST(@retention AS nvarchar) + N', GETDATE()) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- IF OBJECT_ID ('tempdb..#temp_perfcounters') IS NOT NULL
- BEGIN
- DROP TABLE #temp_perfcounters
- END
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectTempDBUsage ------------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectTempDBUsage')
- EXEC ('CREATE PROC dbo.sp_CollectTempDBUsage AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectTempDBUsage]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectTempDBUsage.sql
-
-Example:
-EXEC sp_CollectTempDBUsage
-@DestTable = NULL,
-@DestSchema = NULL,
-@TSMode = 0,
-@EmptyTSTable = 0,
-@Retention = 90,
-@CollectingInterval = NULL,
-@SampleInterval = 60,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collecting SQL Server TempDB usage raw data
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@DestTable NVARCHAR(128) = NULL,
-@DestSchema NVARCHAR(25) = NULL,
-@TSMode BIT = 0,
-@EmptyTSTable BIT = 0,
-@Retention SMALLINT = 90,
-@CollectingInterval SMALLINT = NULL,
-@SampleInterval SMALLINT = 60,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help message.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@DestTable', N'NVARCHAR(128)', N'NULL', N'In troubleshooting mode it specifies the output table. Table must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@DestSchema', N'NVARCHAR(25)', N'NULL', N'In troubleshooting mode it specifies the schema of the output table. Schema must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@TSMode', N'BIT', N'0', N'Enable troubleshooting mode'
-
- UNION ALL
- SELECT N'@EmptyTSTable', N'BIT', N'0', N'Empty the table used for troubleshooting before the data collection.'
-
- UNION ALL
- SELECT N'@CollectingInterval', N'SMALLINT', N'NULL', N'Duration of the data collection in minutes. Maximum 1440 (1 day), so value has to be between 1 and 1440. It can be NULL. In that case the collector only takes one sample, the actual state of the data collected by the collector.'
-
- UNION ALL
- SELECT N'@SampleInterval', N'SMALLINT', N'60', N'Times in seconds between taking two samples.'
-
- SELECT N'Standard' AS [Running Mode], N'[dbo].[tempdb_usage]' AS [Default Table]
- UNION ALL
- SELECT N'Troubleshooting', N'[dbo].[ts_tempdb_usage]'
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @CollectSQLCommand NVARCHAR(max)
-DECLARE @SQLCommand NVARCHAR(max)
-
-DECLARE @row_count INT
-
-DECLARE @start_loop DATETIME
-DECLARE @max_loop INT
-DECLARE @loop_count INT
-DECLARE @sample_interval NVARCHAR(12)
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF((@SampleInterval NOT BETWEEN 1 AND 3600) OR @SampleInterval IS NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @SampleInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@CollectingInterval NOT BETWEEN 1 AND 1440 AND @CollectingInterval IS NOT NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @CollectingInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- ELSE
- BEGIN
- IF(@CollectingInterval IS NOT NULL AND @SampleInterval > @CollectingInterval*60 )
- BEGIN
- SET @ErrorMessage = N'The time interval of sampling is larger than the collecting time interval!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF @TSMode IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @TSMode is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @EmptyTSTable IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @EmptyTSTable is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- --------------
- -- TSMode = 0
- --------------
- IF(@TSMode = 0)
- BEGIN
- SET @DestTable = N'tempdb_usage'
- SET @DestSchema = N'dbo'
- END
- --------------
- -- TSMode = 1
- --------------
- ELSE
- BEGIN
- IF(@DestTable IS NOT NULL)
- BEGIN
- SET @DestTable = REPLACE(REPLACE(RTRIM(LTRIM(@DestTable)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestTAble = N'ts_tempdb_usage'
- END
-
- IF(@DestSchema IS NOT NULL)
- BEGIN
- SET @DestSchema = REPLACE(REPLACE(RTRIM(LTRIM(@DestSchema)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestSchema = N'dbo'
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Command
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @DestTable = ' + ISNULL(N''''+@DestTable+N'''', N'NULL')
- + N', @DestSchema = ' + ISNULL(N''''+@DestSchema+N'''', N'NULL')
- + N', @TSMode = ' + CAST(@TSMode AS nvarchar)
- + N', @EmptyTSTable = ' + CAST(@EmptyTSTable AS nvarchar)
- + N', @CollectingInterval = ' + ISNULL(CAST(@CollectingInterval AS nvarchar), N'NULL')
- + N', @SampleInterval = ' + CAST(@SampleInterval AS nvarchar)
- + N', @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = ' + CAST(@LogInfo AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@Retention > 0 AND @TSMode = 1)
- BEGIN
- SET @Retention = 0
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @Retention has been changed to 0. Reason: @TSMode is enabled. Tables for troubleshooting have to be maintained manually.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)) IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N' does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@TSMode = 1 AND @EmptyTSTable = 1)
- BEGIN
- SET @SQLCommand = N'TRUNCATE TABLE ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)
- EXEC sp_executesql @SQLCommand
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Set variables
- ---------------------------------------------------------------------------------------------------------------------------------------
- SET @CollectSQLCommand = N'INSERT INTO ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ( [capture_date], [file_id], [drive], [unallocated_extent_page_count], [version_store_reserved_page_count], [user_object_reserved_page_count], [internal_object_reserved_page_count], [mixed_extent_page_count] )
- SELECT GETDATE() AS [capture_date], [tfsu].[file_id], LEFT([mf].[physical_name],1) AS [drive], [unallocated_extent_page_count], [version_store_reserved_page_count], [user_object_reserved_page_count], [internal_object_reserved_page_count], [mixed_extent_page_count]
- FROM sys.dm_db_file_space_usage AS [tfsu] INNER JOIN sys.master_files AS [mf]
- ON [tfsu].[file_id]=[mf].[file_id] AND [tfsu].[database_id] = [mf].[database_id]
- WHERE [tfsu].[database_id] = 2 '
-
- IF(@CollectingInterval IS NULL)
- BEGIN
- SET @max_loop = 1
- SET @SampleInterval = NULL
- END
- ELSE
- BEGIN
- SET @max_loop = @CollectingInterval*60/@SampleInterval
- END
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'Number of loops - @max_loop: ' + CAST(@max_loop AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- SET @loop_count = 0
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Collect TempDB Usage Data
- ---------------------------------------------------------------------------------------------------------------------------------------
- WHILE(@loop_count < @max_loop)
- BEGIN
- SET @start_loop = GETDATE()
-
- EXEC sp_executesql @CollectSQLCommand
-
- SET @loop_count = @loop_count + 1
-
- SET @sample_interval = CONVERT(nvarchar, ISNULL(DATEADD(ms, @SampleInterval*1000-CAST(DATEDIFF(ms,@start_loop, GETDATE()) AS INT), 0), N'00:00:00'), 114)
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'Sample interval (inside the loop): ' + @sample_interval
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- WAITFOR DELAY @sample_interval;
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- SET @SQLCommand = N'DELETE FROM ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + ' WHERE [capture_date] < DATEADD(dd, -1*' + CAST(@retention AS nvarchar) + N', GETDATE()) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/*- sp_CollectWaitStats --------------------------------------------------------------------
--------------------------------------------------------------------------------------------*/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_CollectWaitStats')
- EXEC ('CREATE PROC dbo.sp_CollectWaitStats AS SELECT ''stub version, to be replaced''')
-GO
-
-ALTER PROC [dbo].[sp_CollectWaitStats]
-
-/*********************************************************************************************
-Written by Robert Virag
-
-File: sp_CollectWaitStats.sql
-
-Example:
-EXEC sp_CollectWaitStats
-@DestTable = NULL,
-@DestSchema = NULL,
-@MeasuringInterval = NULL,
-@ResetWaitStats = 0,
-@TSMode = 0,
-@EmptyTSTable = 0,
-@Retention = 90,
-@help = 0,
-@LogInfo = 1
-
-Version: V1.1 - 2015.04
-
-Tested: SQL Server 2005 / 2008 / 2008 R2 / 2012 / 2014
-
-Summary:
-Collect SQL Server Wait Statistics Raw Data
-
-License: Copyright (c) 2014 Robert Virag | SQLApprentice.net
-
-The solution is free: http://www.sqlapprentice.net/license/
-
-*********************************************************************************************/
-
-@DestTable NVARCHAR(128) = NULL,
-@DestSchema NVARCHAR(25) = NULL,
-@MeasuringInterval SMALLINT = NULL,
-@ResetWaitStats BIT = 0,
-@TSMode BIT = 0,
-@EmptyTSTable BIT = 0,
-@Retention SMALLINT = 90,
-@debug TINYINT = 0,
-@help BIT = 0,
-@LogInfo BIT = 1
-
-AS
-BEGIN
-SET NOCOUNT ON
-
-IF(@help = 1)
-BEGIN
- SELECT (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID)) AS [Collector]
-
- SELECT N'@help' AS [Parameter Name],
- N'BIT' AS [Data Type],
- N'0' AS [Default Value],
- N'Display help message.' AS [Parameter Description]
-
- UNION ALL
- SELECT N'@LogInfo', N'BIT', N'1', N'Generate Log Information'
-
- UNION ALL
- SELECT N'@Retention', N'SMALLINT', N'90', N'Specify the time, in days, after which the data collected are deleted. If no time is specified, then no data are deleted.'
-
- UNION ALL
- SELECT N'@DestTable', N'NVARCHAR(128)', N'NULL', N'In troubleshooting mode it specifies the output table. Table must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@DestSchema', N'NVARCHAR(25)', N'NULL', N'In troubleshooting mode it specifies the schema of the output table. Schema must exist. Can be NULL.'
-
- UNION ALL
- SELECT N'@TSMode', N'BIT', N'0', N'Enable troubleshooting mode'
-
- UNION ALL
- SELECT N'@EmptyTSTable', N'BIT', N'0', N'Empty the table used for troubleshooting before the data collection.'
-
- UNION ALL
- SELECT N'@MeasuringInterval', N'SMALLINT', N'NULL', N'Time in minutes between the 1st and 2nd measurement of the data sampling for measuring data.'
-
- UNION ALL
- SELECT N'@ResetWaitStats', N'BIT', N'0', N'Clear the sys.dm_os_wait_stats after the data collection.'
-
- SELECT N'Standard' AS [Running Mode], N'[dbo].[wait_stats]' AS [Default Table]
- UNION ALL
- SELECT N'Troubleshooting', N'[dbo].[ts_wait_stats]'
-
- SELECT N'Filtering table' AS [Filtering], N'[dbo].[filter_wait_types]' AS [Info]
- UNION ALL
- SELECT N'Type of Filtering', N'Exclude'
- UNION ALL
- SELECT N'Column used in Standardmode', N'[is_excluded]'
- UNION ALL
- SELECT N'Column used in TSMode', N'[ts_is_excluded]'
-
- SELECT [wait_type], [is_excluded], [ts_is_excluded] FROM [dbo].[filter_wait_types] ORDER BY [wait_type]
-
- RETURN
-END
-
-DECLARE @ErrorMessage NVARCHAR(max)
-DECLARE @InfoMessage NVARCHAR(max)
-DECLARE @Severity INT
-
-DECLARE @data_compression NVARCHAR(35)
-DECLARE @SQLCommand NVARCHAR(max)
-DECLARE @waitfor_delay NVARCHAR (8)
-
-DECLARE @AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP NVARCHAR(max)
-
-DECLARE @LockResult INT
-DECLARE @RequiredAppLock NVARCHAR(25)
-
-DECLARE @row_count INT
-
-BEGIN TRY
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info - Start
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- + N'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar) + CHAR(13) + CHAR(10)
- + N'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Check input parameters
- ---------------------------------------------------------------------------------------------------------------------------------------
-
- IF(@MeasuringInterval NOT BETWEEN 1 AND 1440 AND @MeasuringInterval IS NOT NULL)
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @MeasuringInterval is not supported.'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF @ResetWaitStats IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @ResetWaitStats is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @TSMode IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @TSMode is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @EmptyTSTable IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @EmptyTSTable is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @Retention < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @Retention is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @help IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @help is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @LogInfo IS NULL
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @LogInfo is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
-
- IF @debug IS NULL OR @debug < 0
- BEGIN
- SET @ErrorMessage = 'The value for the parameter @debug is not supported.'
- RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
- END
- --------------
- -- TSMode = 0
- --------------
- IF(@TSMode = 0)
- BEGIN
- SET @DestTable = N'wait_stats'
- SET @DestSchema = N'dbo'
- END
- --------------
- -- TSMode = 1
- --------------
- ELSE
- BEGIN
- IF(@DestTable IS NOT NULL)
- BEGIN
- SET @DestTable = REPLACE(REPLACE(RTRIM(LTRIM(@DestTable)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestTAble = N'ts_wait_stats'
- END
-
- IF(@DestSchema IS NOT NULL)
- BEGIN
- SET @DestSchema = REPLACE(REPLACE(RTRIM(LTRIM(@DestSchema)), N'[',N''), N']',N'')
- END
- ELSE
- BEGIN
- SET @DestSchema = N'dbo'
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Log Info
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Command Executed: EXEC ' + (SELECT QUOTENAME(schemas.name) FROM sys.schemas schemas INNER JOIN sys.objects objects ON schemas.[schema_id] = objects.[schema_id] WHERE [object_id] = @@PROCID) + N'.' + QUOTENAME(OBJECT_NAME(@@PROCID))
- + N' @DestTable = ' + ISNULL(N''''+@DestTable+N'''', N'NULL')
- + N', @DestSchema = ' + ISNULL(N''''+@DestSchema+N'''', N'NULL')
- + N', @TSMode = ' + CAST(@TSMode AS nvarchar)
- + N', @EmptyTSTable = ' + CAST(@EmptyTSTable AS nvarchar)
- + N', @MeasuringInterval = ' + ISNULL(CAST(@MeasuringInterval as nvarchar), N'NULL')
- + N', @ResetWaitStats = ' + CAST(@ResetWaitStats AS nvarchar)
- + N', @Retention = ' + ISNULL(CAST(@Retention AS nvarchar), N'NULL')
- + N', @LogInfo = ' + CAST(@LogInfo AS nvarchar)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- IF(@MeasuringInterval BETWEEN 1 AND 1440 AND @MeasuringInterval IS NOT NULL)
- BEGIN
- IF(@ResetWaitStats = 1)
- BEGIN
- SET @ResetWaitStats = 0
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @ResetWaitStats has been changed from 1 to 0. Reason: @MeasuringInterval is specified.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
- END
-
- IF(@TSMode = 1)
- BEGIN
- IF(@Retention > 0)
- BEGIN
- SET @Retention = 0
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Parameter @Retention has been changed to 0. Reason: @TSMode is enabled. Tables for troubleshooting have to be maintained manually.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Schema check
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(OBJECT_ID(QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable)) IS NULL)
- BEGIN
- SET @ErrorMessage = N'Table ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N' does not exist!'
- SET @Severity=16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Handle concurrent running
- ---------------------------------------------------------------------------------------------------------------------------------------
- IF(@ResetWaitStats = 1)
- BEGIN
- SET @RequiredAppLock = N'Exclusive'
- EXEC @LockResult = sp_getapplock @Resource= N'WaitStatsData',
- @LockMode=@RequiredAppLock,
- @LockOwner = N'Session',
- @LockTimeout=500
- IF(@LockResult NOT IN (0,1))
- BEGIN
- SET @ErrorMessage = N'Unable to acquire the appropriate Application Lock(' + @RequiredAppLock + '). Possible cause: Another instance of sp_CollectWaitStatsData is running. sp_CollectWaitStatsData can not run parralel itself with parameter @ResetWaitStats = 1.'
- SET @Severity = 16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- END
- END
- ELSE
- BEGIN
- SET @RequiredAppLock = N'Shared'
- EXEC @LockResult = sp_getapplock @Resource= N'WaitStatsData',
- @LockMode=@RequiredAppLock,
- @LockOwner = N'Session',
- @LockTimeout=500
- IF(@LockResult NOT IN (0,1))
- BEGIN
- SET @ErrorMessage = N'Unable to acquire the appropriate Application Lock(' + @RequiredAppLock + '). Possible cause: Another instance of sp_CollectWaitStatsData is running with parameter @ResetWaitStats = 1. sp_CollectWaitStatsData can not run parralel itself with @ResetWaitStats = 1.'
- SET @Severity = 16
- RAISERROR(@ErrorMessage, @Severity, 1) WITH NOWAIT
- RETURN
- END
- END
-
- IF(@debug >1)
- BEGIN
- SET @InfoMessage = N'Acquired AppLock: ' + APPLOCK_MODE(N'public', N'WaitStatsData', N'Session') + N' | LockResult: '+ CAST(@LockResult AS NVARCHAR(5))
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------------------------------------
- -- Collect waitstats
- ---------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------
- -- One time measurement
- ------------------------------------------
- IF(@MeasuringInterval IS NULL)
- BEGIN
- SET @SQLCommand = N'INSERT INTO ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ([capture_date], [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms])
- SELECT GETDATE(), [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms]
- FROM sys.dm_os_wait_stats '
- ------------------------------------------
- -- Standard Mode
- ------------------------------------------
- IF(@TSMode = 0)
- BEGIN
- SET @SQLCommand = @SQLCommand + N' WHERE [wait_type] NOT IN( SELECT [wait_type] FROM [filter_wait_types] WHERE [is_excluded] = 1 ) AND [waiting_tasks_count] <> 0'
- END
- ----------------------------------------------
- -- Troubleshooting Mode
- ----------------------------------------------
- ELSE
- BEGIN
- SET @SQLCommand = @SQLCommand + N' WHERE [wait_type] NOT IN( SELECT [wait_type] FROM [filter_wait_types] WHERE [ts_is_excluded] = 1 ) AND [waiting_tasks_count] <> 0 '
- END
-
- EXEC sp_executesql @SQLCommand
- END
- ------------------------------------------
- -- Interval measurement
- ------------------------------------------
- ELSE
- BEGIN
- IF(@MeasuringInterval = 1440)
- BEGIN
- SET @waitfor_delay = CONVERT(varchar, DATEADD(ss, @MeasuringInterval*60-1, 0), 114)
- END
- ELSE
- BEGIN
- SET @waitfor_delay = CONVERT(NVARCHAR(8), DATEADD(ss, @MeasuringInterval*60, 0), 114)
- END
-
- ------------------------------------------
- -- 1st measurement of the interval
- ------------------------------------------
- SELECT GETDATE() AS [first_measurement], [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms]
- INTO #temp_stats1 FROM sys.dm_os_wait_stats
-
- IF(@debug > 0)
- BEGIN
- SET @InfoMessage = N'@MeasuringInterval: ' + CAST(@MeasuringInterval AS NVARCHAR(10))+ CHAR(13) + CHAR(10)
- +N'@waitfor_delay: ' + @waitfor_delay
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- WAITFOR DELAY @waitfor_delay
-
- ------------------------------------------
- -- 2nd measurement of the interval
- ------------------------------------------
- SELECT GETDATE() AS [second_measurement], [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms]
- INTO #temp_stats2 FROM sys.dm_os_wait_stats
-
- ----------------------------------------------------------------------
- -- Count and store the differences of the 1st and the 2nd measurement
- ----------------------------------------------------------------------
- IF (@@VERSION LIKE N'%Microsoft SQL Server 2005%'
- OR (@@VERSION LIKE N'%Microsoft SQL Server 2008%'
- AND @@VERSION NOT LIKE N'%Microsoft SQL Server 2008 R2%'))
- AND (
- (@TSMode = 0 AND (SELECT [is_excluded] FROM [dbo].[filter_wait_types] WHERE [wait_type] = 'AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP') = 0)
- OR
- (@TSMode = 1 AND (SELECT [ts_is_excluded] FROM [dbo].[filter_wait_types] WHERE [wait_type] = 'AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP') = 0) )
- BEGIN
- SET @AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP = N' UNION
- SELECT GETDATE(), ''AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP'' AS [wait_type],
- 1 AS [waiting_tasks_count],
- DATEDIFF(ms,(SELECT TOP 1 [first_measurement] FROM #temp_stats1),(SELECT TOP 1 [second_measurement] FROM #temp_stats2)) AS [wait_time_ms],
- 1 AS [max_wait_time_ms],
- 0 AS [signal_wait_time_ms] '
- END
- ELSE
- BEGIN
- SET @AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP = N''
- END
-
- SET @SQLCommand = N'WITH [DiffWaits] AS (
- /* Waits that werent in the first snapshot */
- SELECT [ts2].[wait_type], [ts2].[waiting_tasks_count], [ts2].[wait_time_ms], [ts2].[max_wait_time_ms], [ts2].[signal_wait_time_ms]
- FROM #temp_stats2 AS [ts2] LEFT OUTER JOIN #temp_stats1 AS [ts1]
- ON [ts2].[wait_type] = [ts1].[wait_type]
- WHERE [ts1].[wait_type] IS NULL AND [ts2].[wait_time_ms] > 0
- UNION
- /* Diff of waits in both snapshots */
- SELECT [ts2].[wait_type], [ts2].[waiting_tasks_count] - [ts1].[waiting_tasks_count] AS [waiting_tasks_count], [ts2].[wait_time_ms] - [ts1].[wait_time_ms] AS [wait_time_ms], ts2.[max_wait_time_ms], [ts2].[signal_wait_time_ms] - [ts1].[signal_wait_time_ms] AS [signal_wait_time_ms]
- FROM #temp_stats2 AS [ts2] LEFT OUTER JOIN #temp_stats1 AS [ts1]
- ON [ts2].[wait_type] = [ts1].[wait_type]
- WHERE [ts1].[wait_type] IS NOT NULL AND [ts2].[waiting_tasks_count] - [ts1].[waiting_tasks_count] > 0 AND [ts2].[wait_time_ms] - [ts1].[wait_time_ms] > 0
- )
- INSERT INTO ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + N'
- ([capture_date], [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms])
- SELECT GETDATE(), [wait_type], [waiting_tasks_count], [wait_time_ms], [max_wait_time_ms], [signal_wait_time_ms]
- FROM DiffWaits '
- ------------------------------------------
- -- Standard Mode
- ------------------------------------------
- IF(@TSMode = 0)
- BEGIN
- SET @SQLCommand = @SQLCommand + N' WHERE [wait_type] NOT IN( SELECT [wait_type] FROM [filter_wait_types] WHERE [is_excluded] = 1 ) AND [waiting_tasks_count] <> 0 ' + @AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP
- END
- ----------------------------------------------
- -- Troubleshooting Mode
- ----------------------------------------------
- ELSE
- BEGIN
- SET @SQLCommand = @SQLCommand + N' WHERE [wait_type] NOT IN( SELECT [wait_type] FROM [filter_wait_types] WHERE [ts_is_excluded] = 1 ) AND [waiting_tasks_count] <> 0 ' + @AI_SQLTRACE_INCREMENTAL_FLUSH_SLEEP
- END
-
- IF(@debug > 2)
- BEGIN
- SELECT N'#temp_stats1 Table'
- SELECT * FROM #temp_stats1
-
- SELECT N'#temp_stats2 Table'
- SELECT * FROM #temp_stats2
-
- SET @InfoMessage = N'WaitStats collector command: ' + CHAR(13) + CHAR(10) + @SQLCommand
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- EXEC sp_executesql @SQLCommand
-
- DROP TABLE #temp_stats1
- DROP TABLE #temp_stats2
-
- END
-
- ------------------------------------------
- -- Reset WaitStats
- ------------------------------------------
- IF(@ResetWaitStats = 1)
- BEGIN
- DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR)
-
- If(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'DMV [sys].[dm_os_wait_stats] has been reseted.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- EXEC @LockResult = sp_releaseapplock
- @Resource= N'WaitStatsData',
- @LockOwner = N'Session'
-
- IF(@debug > 1)
- BEGIN
- SET @InfoMessage = N'AppLock released: ' + APPLOCK_MODE(N'public', N'WaitStatsData', N'Session') + N' | LockResult: '+ CAST(@LockResult AS NVARCHAR(5))
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
- ---------------------------------------------------------------------------------------------------------
- -- Delete expired data
- ---------------------------------------------------------------------------------------------------------
- IF(@Retention > 0)
- BEGIN
- SET @SQLCommand = N'DELETE FROM ' + QUOTENAME(@DestSchema)+N'.'+QUOTENAME(@DestTable) + ' WHERE [capture_date] < DATEADD(dd, -1*' + CAST(@retention AS nvarchar) + N', GETDATE()) '
- EXEC sp_executesql @SQLCommand
-
- SET @row_count = @@ROWCOUNT
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = CAST(@row_count AS NVARCHAR) + N'row(s) deleted due to expired retention.'
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Succeeded' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-
-END TRY
----------------------------------------------------------------------------------------------------------------------------------------
--- Handle Errors
----------------------------------------------------------------------------------------------------------------------------------------
-BEGIN CATCH
- DECLARE @ErrMsg NVARCHAR(4000)
- DECLARE @ErrSev INT
- SET @ErrSev = ERROR_SEVERITY()
- SET @ErrMsg = ERROR_MESSAGE()
-
- IF OBJECT_ID (N'tempdb..#temp_stats1' ) IS NOT NULL
- BEGIN
- DROP TABLE #temp_stats1
- END
-
- IF OBJECT_ID (N'tempdb..#temp_stats2' ) IS NOT NULL
- BEGIN
- DROP TABLE #temp_stats2
- END
-
- RAISERROR(@ErrMsg, @ErrSev, 1) WITH NOWAIT
-
- IF(@LockResult IN (0,1))
- BEGIN
- IF(@debug > 1)
- BEGIN
- SET @InfoMessage = N'ERROR: Release AppLock: ' + APPLOCK_MODE(N'public', N'WaitStatsData', N'Session')
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
- EXEC @LockResult = sp_releaseapplock
- @Resource= N'WaitStatsData',
- @LockOwner = N'Session'
- END
-
- IF(@LogInfo = 1)
- BEGIN
- SET @InfoMessage = N'Outcome: Failed' + CHAR(13) + CHAR(10)
- + N'Date and time: ' + CONVERT(nvarchar,GETDATE(),120) + CHAR(13) + CHAR(10)
- SET @Severity = 10
- RAISERROR(@InfoMessage, @Severity, 1) WITH NOWAIT
- END
-END CATCH
-END
-GO
-
-/******************************************************************************
-****************************** CREATE COLLECTORS ******************************
-**************************************END*************************************/
-
-/************************************START*************************************
-********************************* CREATE JOBS *********************************
-******************************************************************************/
-
-/*********************************************************************************************
-Create Jobs for the collectors
-
-For scheduling the collectors with agent jobs, Ola Hallengren's code is used
-with his permission.
-
-http://ola.hallengren.com/license.html
-
-*********************************************************************************************/
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-DECLARE @CreateJobs TINYINT
-DECLARE @OutputFileDirectory nvarchar(max)
-DECLARE @drop_jobs_if_exist TINYINT
-
-SELECT @CreateJobs = CAST(value AS TINYINT) FROM #TempConfiguration WHERE [variable] = N'@CreateJobs'
-
-SELECT @OutputFileDirectory = value FROM #TempConfiguration WHERE [variable] = N'@OutputFileDirectory'
-
-SELECT @drop_jobs_if_exist = CAST(value AS TINYINT) FROM #TempConfiguration WHERE [variable] = N'@DropJobsIfExist'
-
-
-IF RIGHT(@OutputFileDirectory, 1) = N'\'
-BEGIN
- SET @OutputFileDirectory = LEFT(@OutputFileDirectory, LEN(@OutputFileDirectory)-1)
-END
-
-IF SERVERPROPERTY('EngineEdition') <> 4
-BEGIN
- DECLARE @JobCategory nvarchar(max)
- SET @JobCategory = N'Baseline Collector'
-
- IF NOT EXISTS (SELECT * FROM [msdb].[dbo].[syscategories] WHERE [category_class] = 1 AND [category_type] = 1 AND [name] = @JobCategory)
- BEGIN
- EXEC [msdb].[dbo].sp_add_category @class = N'JOB', @type = 'LOCAL', @name = @JobCategory
- END
-
- DECLARE @Version numeric(18,10)
-
- DECLARE @TokenServer nvarchar(max)
- DECLARE @TokenJobID nvarchar(max)
- DECLARE @TokenStepID nvarchar(max)
- DECLARE @TokenDate nvarchar(max)
- DECLARE @TokenTime nvarchar(max)
- DECLARE @TokenLogDirectory nvarchar(max)
-
- DECLARE @JobDescription nvarchar(max)
- DECLARE @JobOwner nvarchar(max)
-
- DECLARE @JobName01 nvarchar(max)
- DECLARE @JobName02 nvarchar(max)
- DECLARE @JobName03 nvarchar(max)
- DECLARE @JobName04 nvarchar(max)
- DECLARE @JobName05 nvarchar(max)
- DECLARE @JobName06 nvarchar(max)
- DECLARE @JobName07 nvarchar(max)
- DECLARE @JobName08 nvarchar(max)
-
- DECLARE @JobCommand01 nvarchar(max)
- DECLARE @JobCommand02 nvarchar(max)
- DECLARE @JobCommand03 nvarchar(max)
- DECLARE @JobCommand04 nvarchar(max)
- DECLARE @JobCommand05 nvarchar(max)
- DECLARE @JobCommand06 nvarchar(max)
- DECLARE @JobCommand07 nvarchar(max)
- DECLARE @JobCommand08 nvarchar(max)
-
- DECLARE @OutputFile01 nvarchar(max)
- DECLARE @OutputFile02 nvarchar(max)
- DECLARE @OutputFile03 nvarchar(max)
- DECLARE @OutputFile04 nvarchar(max)
- DECLARE @OutputFile05 nvarchar(max)
- DECLARE @OutputFile06 nvarchar(max)
- DECLARE @OutputFile07 nvarchar(max)
- DECLARE @OutputFile08 nvarchar(max)
-
- SET @Version = CAST(LEFT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)),CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - 1) + '.' + REPLACE(RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)), LEN(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))) - CHARINDEX('.',CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max)))),'.','') AS numeric(18,10))
-
- IF @Version >= 9.002047
- BEGIN
- SET @TokenServer = '$' + '(ESCAPE_SQUOTE(SRVR))'
- SET @TokenJobID = '$' + '(ESCAPE_SQUOTE(JOBID))'
- SET @TokenStepID = '$' + '(ESCAPE_SQUOTE(STEPID))'
- SET @TokenDate = '$' + '(ESCAPE_SQUOTE(STRTDT))'
- SET @TokenTime = '$' + '(ESCAPE_SQUOTE(STRTTM))'
- END
- ELSE
- BEGIN
- SET @TokenServer = '$' + '(SRVR)'
- SET @TokenJobID = '$' + '(JOBID)'
- SET @TokenStepID = '$' + '(STEPID)'
- SET @TokenDate = '$' + '(STRTDT)'
- SET @TokenTime = '$' + '(STRTTM)'
- END
-
- IF @Version >= 12
- BEGIN
- SET @TokenLogDirectory = '$' + '(ESCAPE_SQUOTE(SQLLOGDIR))'
- END
-
- SET @JobDescription = 'Source: http://sqlapprentice.net'
-
- SET @JobOwner = SUSER_SNAME(0x01)
-
- SET @JobName01 = N'Baseline - CollectConfigData'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName01) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName01, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectConfigData] @Retention = 90, @BypassNonActiveSrvConfError = 1, @LogInfo = 1 */
- SET @JobCommand01 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectConfigData] @Retention = 90, @BypassNonActiveSrvConfError = 1, @LogInfo = 1" -b'
- SET @OutputFile01 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_ConfigData_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile01) > 200 SET @OutputFile01 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile01) > 200 SET @OutputFile01 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName01, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName01, @step_name = @JobName01, @subsystem = 'CMDEXEC', @command = @JobCommand01, @output_file_name = @OutputFile01, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName01
- END
-
- SET @JobName02 = N'Baseline - CollectDatabaseInfo'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName02) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName02, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectDatabaseInfo] @Retention = 90, @LogInfo = 1 */
- SET @JobCommand02 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectDatabaseInfo] @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile02 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_DatabaseInfo_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile02) > 200 SET @OutputFile02 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile02) > 200 SET @OutputFile02 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName02, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName02, @step_name = @JobName02, @subsystem = 'CMDEXEC', @command = @JobCommand02, @output_file_name = @OutputFile02, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName02
- END
-
- SET @JobName03 = N'Baseline - CollectFileInfo'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName03) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName03, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectFileInfo] @Retention = 90, @LogInfo = 1 */
- SET @JobCommand03 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectFileInfo] @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile03 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_FileInfo_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile03) > 200 SET @OutputFile03 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile03) > 200 SET @OutputFile03 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName03, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName03, @step_name = @JobName03, @subsystem = 'CMDEXEC', @command = @JobCommand03, @output_file_name = @OutputFile03, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName03
- END
-
- SET @JobName04 = N'Baseline - CollectIOVFStats'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName04) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName04, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectIOVFStats] @CollectingInterval = NULL, @SampleInterval = 30, @Retention = 90, @LogInfo = 1 */
- SET @JobCommand04 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectIOVFStats] @CollectingInterval = NULL, @SampleInterval = 30, @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile04 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_IOVFStats_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile04) > 200 SET @OutputFile04 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile04) > 200 SET @OutputFile04 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName04, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName04, @step_name = @JobName04, @subsystem = 'CMDEXEC', @command = @JobCommand04, @output_file_name = @OutputFile04, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName04
- END
-
- SET @JobName05 = N'Baseline - CollectPerfmonData'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName05) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName05, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectPerfmonData] @CollectingInterval = NULL, @SampleInterval = 15, @MeasuringInterval = 5, @Retention = 90, @LogInfo = 1 */
- SET @JobCommand05 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectPerfmonData] @CollectingInterval = NULL, @SampleInterval = 15, @MeasuringInterval = 5, @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile05 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_PerfmonData_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile05) > 200 SET @OutputFile05 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile05) > 200 SET @OutputFile05 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName05, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName05, @step_name = @JobName05, @subsystem = 'CMDEXEC', @command = @JobCommand05, @output_file_name = @OutputFile05, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName05
- END
-
- SET @JobName06 = N'Baseline - CollectTempDBUsage'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName06) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName06, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectTempDBUsage] @CollectingInterval = NULL, @SampleInterval = 10, @Retention = 90, @LogInfo = 1 */
- SET @JobCommand06 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectTempDBUsage] @CollectingInterval = NULL, @SampleInterval = 10, @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile06 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_TempDBUsage_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile06) > 200 SET @OutputFile06 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile06) > 200 SET @OutputFile06 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName06, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName06, @step_name = @JobName06, @subsystem = 'CMDEXEC', @command = @JobCommand06, @output_file_name = @OutputFile06, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName06
- END
-
- SET @JobName07 = N'Baseline - CollectWaitStats'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName07) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName07, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectWaitStats] @ResetWaitStats = 0, @MeasuringInterval = NULL, @Retention = 90, @LogInfo = 1 */
- SET @JobCommand07 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectWaitStats] @ResetWaitStats = 0, @MeasuringInterval = NULL, @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile07 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_WaitStats_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile07) > 200 SET @OutputFile07 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile07) > 200 SET @OutputFile07 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName07, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName07, @step_name = @JobName07, @subsystem = 'CMDEXEC', @command = @JobCommand07, @output_file_name = @OutputFile07, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName07
- END
-
- SET @JobName08 = N'Baseline - CollectInstanceInfo'
- IF EXISTS (SELECT * FROM msdb.dbo.sysjobs WHERE [name] = @JobName08) AND @drop_jobs_if_exist = 1
- BEGIN
- EXEC msdb.dbo.sp_delete_job @job_name = @JobName08, @delete_unused_schedule=1
- END
- IF @CreateJobs = 1
- BEGIN
- /* [sp_CollectInstanceInfo] @Retention = 90, @LogInfo = 1 */
- SET @JobCommand08 = 'sqlcmd -E -S ' + @TokenServer + ' -d ' + DB_NAME() + ' -Q "EXECUTE [dbo].[sp_CollectInstanceInfo] @Retention = 90, @LogInfo = 1" -b'
- SET @OutputFile08 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + 'Baseline_InstanceInfo_' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile08) > 200 SET @OutputFile08 = COALESCE(@OutputFileDirectory,@TokenLogDirectory) + '\' + @TokenJobID + '_' + @TokenStepID + '_' + @TokenDate + '.txt'
- IF LEN(@OutputFile08) > 200 SET @OutputFile08 = NULL
-
- EXECUTE msdb.dbo.sp_add_job @job_name = @JobName08, @description = @JobDescription, @category_name = @JobCategory, @owner_login_name = @JobOwner
- EXECUTE msdb.dbo.sp_add_jobstep @job_name = @JobName08, @step_name = @JobName08, @subsystem = 'CMDEXEC', @command = @JobCommand08, @output_file_name = @OutputFile08, @flags=2
- EXECUTE msdb.dbo.sp_add_jobserver @job_name = @JobName08
- END
-END
-GO
-
-/******************************************************************************
-********************************* CREATE JOBS *********************************
-**************************************END*************************************/
-
-/************************************START************************************
-****************************** CREATE SCHEDULES ******************************
-******************************************************************************/
-
-/*********************************************************************************************
-Create Schedules
-*********************************************************************************************/
-
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER ON
-GO
-
-IF SERVERPROPERTY('EngineEdition') <> 4
-BEGIN
- DECLARE @create_schedules TINYINT
- DECLARE @schedule_name SYSNAME
- DECLARE @sa_name SYSNAME
- DECLARE @drop_schedule_if_exist TINYINT
-
- SELECT @sa_name = [name] FROM sys.server_principals WHERE [sid] = 0x01
- SELECT @create_schedules = CAST(value AS TINYINT) FROM #TempConfiguration WHERE [variable] = N'@CreateSchedules'
- SELECT @drop_schedule_if_exist = CAST(value AS TINYINT) FROM #TempConfiguration WHERE [variable] = N'@DropScheduleIfExist'
-
-
- SET @schedule_name = 'baseline - daily - at 2359PM'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=1,
- @freq_subday_interval=0,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=235900,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - at 2357PM'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=1,
- @freq_subday_interval=0,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=235700,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - at 2355PM'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=1,
- @freq_subday_interval=0,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=235500,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - at 2353PM'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=1,
- @freq_subday_interval=0,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=235300,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - at 2351PM'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=1,
- @freq_subday_interval=0,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=235100,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 5 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=5,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 5 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=5,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - every 10 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=10,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - every 10 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=10,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 15 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=15,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 15 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=15,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 30 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=30,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 30 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=4,
- @freq_subday_interval=30,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - every 1 hour'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=1,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 1 hour - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=1,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - daily - every 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=3,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - every 6 hours /6AM/12PM/6PM/12AM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=6,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - every 8 hours /6AM/2PM/10PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=8,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - daily - evey 12 hours /6AM/6PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=4,
- @freq_interval=1,
- @freq_subday_type=8,
- @freq_subday_interval=12,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 5 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=5,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 5 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=5,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 10 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=10,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 10 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=10,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 15 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=15,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 15 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=15,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 30 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=30,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 30 mins - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=4,
- @freq_subday_interval=30,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekday - every 1 hour'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=1,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 1 hour - BT/6AM-7PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=1,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=190000,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - evey 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=3,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 6 hours /6AM/12PM/6PM/12AM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=6,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - every 8 hours /6AM/2PM/10PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=8,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekday - evey 12 hours /6AM/6PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=62,
- @freq_subday_type=8,
- @freq_subday_interval=12,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekend - every 5 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=4,
- @freq_subday_interval=5,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
-
- SET @schedule_name = 'baseline - weekend - every 10 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=4,
- @freq_subday_interval=10,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 15 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=4,
- @freq_subday_interval=15,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 30 mins'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=4,
- @freq_subday_interval=30,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 1 hour'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=8,
- @freq_subday_interval=1,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 3 hours /12AM/3AM/6AM/9AM/12PM/3PM/6PM/9PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=8,
- @freq_subday_interval=3,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=0,
- @active_end_time=235959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 6 hours /6AM/12PM/6PM/12AM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=8,
- @freq_subday_interval=6,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - every 8 hours /6AM/2PM/10PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=8,
- @freq_subday_interval=8,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-
- SET @schedule_name = 'baseline - weekend - evey 12 hours /6AM/6PM/'
- IF @drop_schedule_if_exist = 1 AND EXISTS (SELECT * FROM [msdb].[dbo].[sysschedules] WHERE [name] = @schedule_name)
- BEGIN
- EXEC msdb.dbo.sp_delete_schedule @schedule_name = @schedule_name
- END
- IF(@create_schedules = 1)
- BEGIN
- EXEC msdb.dbo.sp_add_schedule
- @schedule_name = @schedule_name,
- @enabled=0,
- @freq_type=8,
- @freq_interval=65,
- @freq_subday_type=8,
- @freq_subday_interval=12,
- @freq_relative_interval=0,
- @freq_recurrence_factor=1,
- @active_start_date=20140915,
- @active_end_date=99991231,
- @active_start_time=60000,
- @active_end_time=55959,
- @owner_login_name = @sa_name
- END
-END
-GO
-
-DROP TABLE #TempConfiguration
-
-/*****************************************************************************
-****************************** CREATE SCHEDULES ******************************
-**************************************END*************************************/
\ No newline at end of file
diff --git a/CLR/README.md b/CLR/README.md
new file mode 100644
index 00000000..9363be84
--- /dev/null
+++ b/CLR/README.md
@@ -0,0 +1,21 @@
+# Microsoft SQL Server CLR
+
+Useful links:
+ - [Introduction to SQL Server CLR Integration](https://msdn.microsoft.com/en-us/library/ms254498(v=vs.110).aspx)
+ - [CLR User-Defined Functions](https://msdn.microsoft.com/library/ms131077.aspx)
+ - [CLR User-Defined Types](https://msdn.microsoft.com/en-us/library/ms131120(SQL.100).aspx)
+ - [CLR Stored Procedures](https://msdn.microsoft.com/en-us/library/ms131094(SQL.100).aspx)
+ - [CLR Triggers](https://msdn.microsoft.com/en-us/library/ms131093(SQL.100).aspx)
+ - [SQL# CLR functions](https://SQLsharp.com/) (by Sql Quantum Lift)
+
+The common language runtime (CLR) is the heart of the Microsoft .NET Framework and provides the execution environment for all .NET Framework code. Code that runs within the CLR is referred to as managed code. The CLR provides various functions and services required for program execution, including just-in-time (JIT) compilation, allocating and managing memory, enforcing type safety, exception handling, thread management, and security.
+
+With the CLR hosted in Microsoft SQL Server (called CLR integration), you can author stored procedures, triggers, user-defined functions, user-defined types, and user-defined aggregates in managed code. Because managed code compiles to native code prior to execution, you can achieve significant performance increases in some scenarios.
+
+Enabling CLR Integration:
+
+```tsql
+EXEC sp_configure 'clr enabled', 1;
+RECONFIGURE;
+GO
+```
diff --git a/CLR/SQLsharp_SETUP.sql b/CLR/SQLsharp_SETUP.sql
deleted file mode 100644
index 18e41c25..00000000
--- a/CLR/SQLsharp_SETUP.sql
+++ /dev/null
@@ -1,690 +0,0 @@
-
-/*
- ********************************************************************
- *
- * SQL# (SQLsharp)
- * Copyright (c) 2006-2014 Sql Quantum Leap, LLC
- * All Rights Reserved.
- *
- * JsonFx code:
- * Copyright (c) 2006-2009 Stephen M. McKamey
- * All rights reserved.
- *
- * SgmlReader code:
- * Copyright (c) 2002 Microsoft Corporation. All rights reserved. (Chris Lovett)
- * Copyright (c) 2007-2008 MindTouch. All rights reserved.
- *
- * Twitterizer code:
- * Copyright (c) 2008, Patrick "Ricky" Smith . All rights reserved.
- * Copyright (c) 2011-2014, Sql Quantum Leap, LLC. All rights reserved.
- *
- * http://www.SQLsharp.com/
- *
- * Version: 3.3.83 (Free)
- *
- ********************************************************************
-*/
-SET ANSI_NULLS ON;
-SET QUOTED_IDENTIFIER ON;
-GO
-
-/******************************************************************
- ******************************************************************
- ***
- *** INSTRUCTIONS:
- ***
- *** 1) Replace {replace_with_DB_name} in the USE statement with
- *** the name of the Database where SQL# should be installed (line 44)
- ***
- *** 2) Change any of the default settings (lines 61 - 71)
- ***
- ******************************************************************
- ******************************************************************/
-
-USE [{replace_with_DB_name}]; /* replace the DB name and remove this comment starting with the "/*" at the left
-GO
-
-
-DECLARE @SQLsharpSchema sysname,
- @SQLsharpLogin sysname,
- @AllowExternalAccess BIT,
- @AllowUnrestrictedAccess BIT;
-
-DECLARE @InstallSQL#DB BIT,
- @InstallSQL#JsonFx BIT,
- @InstallSQL#Network BIT,
- @InstallSQL#OS BIT,
- @InstallSQL#SgmlReader BIT,
- @InstallSQL#Twitterizer BIT,
- @InstallSQL#TypesAndAggregates BIT;
-
-SET @SQLsharpSchema = N'SQL#'; -- Change this value to install SQL# into a different Schema
-SET @SQLsharpLogin = N'SQL#';
-SET @AllowExternalAccess = 1;
-SET @AllowUnrestrictedAccess = 1; -- If 1 then @AllowExternalAccess will = 1 even if set to 0 above
-SET @InstallSQL#DB = 1;
-SET @InstallSQL#JsonFx = 1; -- Required by SQL#.Twitterizer
-SET @InstallSQL#Network = 1; -- Required by SQL#.DB
-SET @InstallSQL#OS = 1;
-SET @InstallSQL#SgmlReader = 1;
-SET @InstallSQL#Twitterizer = 1;
-SET @InstallSQL#TypesAndAggregates = 1; -- Required by SQL#.Twitterizer and SQL#.Network
-
------------------------------------
-DECLARE @IsSQLServer2005 NVARCHAR(50);
-SET @IsSQLServer2005 = CASE WHEN @@VERSION LIKE N'Microsoft SQL Server 2005%' THEN N'UN' ELSE '' END;
-
-IF (OBJECT_ID(N'tempdb..#SQLsharpOptions') IS NULL)
-BEGIN
- CREATE TABLE #SQLsharpOptions ([Option] NVARCHAR(50) COLLATE database_default, [Value] VARCHAR(50));
-END;
-
-RAISERROR(N'Capturing current Assembly permissions...', 0, 0) WITH NOWAIT;
-INSERT INTO #SQLsharpOptions ([Option], [Value])
- SELECT sa.name, CASE sa.permission_set_desc
- WHEN N'SAFE_ACCESS' THEN 'SAFE'
- WHEN N'UNSAFE_ACCESS' THEN 'UNSAFE'
- ELSE sa.permission_set_desc
- END
- FROM sys.assemblies sa
- LEFT JOIN #SQLsharpOptions sso
- ON sso.[Option] = sa.name --COLLATE database_default
- WHERE sa.name LIKE N'SQL#%'
- AND sso.[Value] IS NULL
- --AND sa.permission_set_desc <> N'SAFE_ACCESS'
- ;
-RAISERROR('', 0, 0) WITH NOWAIT;
------------------------------------
-
-
-BEGIN TRY
-
- ---
- --- CLR must be enabled
- ---
- IF EXISTS (
- SELECT 1
- FROM sys.configurations conf
- WHERE conf.configuration_id = 1562 -- "clr enabled"
- AND conf.value_in_use = 0
- )
- BEGIN
- PRINT 'Enabling the CLR ...';
- PRINT '';
-
- EXEC(N'EXEC sp_configure ''clr enabled'', 1;');
-
- -- Uncomment the WITH OVERRIDE if you get the "ad hoc changes are not allowed" error
- EXEC(N'RECONFIGURE --WITH OVERRIDE');
- END;
- ELSE
- BEGIN
- PRINT 'CLR already enabled; skipping';
- PRINT '';
- END;
-
-
- ---
- --- Make sure that the Login desired to own SQL# exists
- ---
- IF (NOT EXISTS (
- SELECT *
- FROM [master].sys.server_principals sp
- WHERE sp.name = @SQLsharpLogin
- )
- )
- BEGIN
- PRINT '';
- PRINT 'Login [' + @SQLsharpLogin + '] does not exist ...';
-
- IF (NOT EXISTS(
- SELECT *
- FROM [master].sys.assemblies sa
- WHERE sa.name = N'SQL#.Certificate'
- )
- )
- BEGIN
- PRINT 'Creating temporary Assembly ...';
- EXEC(N'USE [master];
- CREATE ASSEMBLY [SQL#.Certificate]
- AUTHORIZATION [dbo]
- FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103002E2E1B510000000000000000E00002210B0108000008000000060000000000004E2600000020000000400000000040000020000000020000040000000000000004000000000000000080000000020000400C0100030040850000100000100000000010000010000000000000100000000000000000000000FC2500004F00000000400000C003000000000000000000000000000000000000006000000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000054060000002000000008000000020000000000000000000000000000200000602E72737263000000C00300000040000000040000000A0000000000000000000000000000400000402E72656C6F6300000C0000000060000000020000000E0000000000000000000000000000400000420000000000000000000000000000000030260000000000004800000002000500D02000002C05000009000000000000000000000000000000502000008000000000000000000000000000000000000000000000000000000000000000000000000E501388F31E59F9E2E94D47CBC27113E604275D501FA1C25E99FBF8E834C00B3DE41563BE47436B0EB0CFF962B68A1BDFCEED9F16CB76D1D52B27BA26420517DD6E6592E0ADD61B052309EE27A03BC0D396ACF73904E427F23A9BD35F034D244801CB7571AAF1CBDE742C4B491DE408E6FB96825FDE5BB5D16618C95DB0F02642534A4201000100000000000C00000076322E302E35303732370000000005006C00000058010000237E0000C4010000EC01000023537472696E677300000000B00300000800000023555300B8030000100000002347554944000000C80300006401000023426C6F620000000000000002000001071400000900000000FA013300160000010000000D000000010000000D0000000B000000010000000100000000000A0001000000000006003A0028000600570028000600740028000600930028000600AC0028000600C50028000600E00028000600FB00280006003301140106004701280006006001280006009D017D010600BD017D010000000001000000000001000100090051000A00110051000A00190051000A00210051000A00290051000A00310051000A00390051000A00410051000A00490051000F00510051000A00590051000A006100510014006900510019002E000B00BF002E001300D5002E001B00EB002E002300F1002E002B0005012E0033000F012E003B00EB002E004B00EB002E005B002E012E0063003A012E006B004301048000000300000047000000010000001D00DB01000002000000000000000000000001001F000000000000000000003C4D6F64756C653E0053514C232E43657274696669636174652E646C6C006D73636F726C69620053797374656D2E5265666C656374696F6E00417373656D626C795469746C65417474726962757465002E63746F7200417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C747572654174747269627574650053797374656D2E52756E74696D652E496E7465726F70536572766963657300436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E4365727469666963617465000003200000000000212658D412A4D0408864020FB94258620008B77A5C561934E089042001010E042001010204200101080320000180A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC61501001053514C232E43657274696669636174650000150100107777772E53514C73686172702E636F6D00000501000000001301000E536F6C6F6D6F6E205275747A6B7900000901000453514C2300001E010019436F7079726967687420C2A9202032303036202D203230313300000B010006332E302E373100000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730100002426000000000000000000003E26000000200000000000000000000000000000000000000000000030260000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058400000680300000000000000000000680334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100000003000000470000000300000047003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004C8020000010053007400720069006E006700460069006C00650049006E0066006F000000A402000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000040000F00010043006F006D00700061006E0079004E0061006D0065000000000053006F006C006F006D006F006E0020005200750074007A006B007900000000004C0011000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E004300650072007400690066006900630061007400650000000000300007000100460069006C006500560065007200730069006F006E000000000033002E0030002E0037003100000000004C001500010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E00430065007200740069006600690063006100740065002E0064006C006C00000000005800190001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A90020002000320030003000360020002D0020003200300031003300000000005400150001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E00430065007200740069006600690063006100740065002E0064006C006C00000000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0030002E0037003100000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0030002E00370031002E0030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000C000000503600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;');
- END;
-
-
- IF (NOT EXISTS(
- SELECT *
- FROM [master].sys.asymmetric_keys ak
- WHERE ak.name = N'SQL#Key'
- )
- )
- BEGIN
- PRINT 'Creating Asymmetric Key: [SQL#Key] ...';
- EXEC(N'USE [master];
- CREATE ASYMMETRIC KEY [SQL#Key] FROM ASSEMBLY [SQL#.Certificate];');
- END;
-
-
- IF (NOT EXISTS(
- SELECT *
- FROM [master].sys.server_principals sp
- WHERE sp.name = @SQLsharpLogin
- AND sp.[type] = N'K' -- ASYMMETRIC_KEY_MAPPED_LOGIN
- )
- )
- BEGIN
- PRINT 'Creating Login: [' + @SQLsharpLogin + '] ...';
- EXEC(N'USE [master];
- CREATE LOGIN [' + @SQLsharpLogin + N'] FROM ASYMMETRIC KEY [SQL#Key];');
- END;
-
-
- IF (@AllowExternalAccess = 1 OR @AllowUnrestrictedAccess = 1)
- BEGIN
- PRINT 'Granting ExternalAccess ...';
- EXEC(N'USE [master];
- GRANT EXTERNAL ACCESS ASSEMBLY TO [' + @SQLsharpLogin + N'];');
- END;
-
-
- IF (@AllowUnrestrictedAccess = 1)
- BEGIN
- PRINT 'Granting UnrestrictedAccess ...';
- EXEC(N'USE [master];
- GRANT UNSAFE ASSEMBLY TO [' + @SQLsharpLogin + N'];');
- END;
-
-
- PRINT 'Dropping temporary Assembly ...';
- EXEC(N'USE [master];
- DROP ASSEMBLY [SQL#.Certificate];');
-
- PRINT 'Login Created.';
- PRINT '';
- END;
- ELSE
- BEGIN
- PRINT N'Login [' + @SQLsharpLogin + N'] already exists; skipping';
- PRINT '';
- END;
-
-
- ---
- --- Make sure that the database where SQL# will be installed has a User based on the Login
- ---
- IF (NOT EXISTS (
- SELECT *
- FROM sys.database_principals dp
- WHERE dp.name = @SQLsharpLogin
- )
- )
- BEGIN
- PRINT '';
- PRINT N'Creating User: [' + @SQLsharpLogin + N'] ...';
-
- EXEC(N'CREATE USER [' + @SQLsharpLogin + N'] FOR LOGIN [' + @SQLsharpLogin + N'];');
- END;
- ELSE
- BEGIN
- IF (NOT EXISTS(
- SELECT *
- FROM [master].sys.server_principals sp
- INNER JOIN sys.database_principals dp
- ON dp.[sid] = sp.[sid]
- WHERE sp.[type] = N'K' -- ASYMMETRIC_KEY_MAPPED_LOGIN
- AND sp.name = @SQLsharpLogin
- )
- )
- BEGIN
- RAISERROR(N'User [%s] exists but does not match the system Login of the same name. Please fix.', 16, 1, @SQLsharpLogin);
- END;
-
- PRINT N'User [' + @SQLsharpLogin + N'] already exists in [' + DB_NAME() + N']; skipping';
- PRINT '';
- END;
-
-
-
- -- Make sure we either complete successfully or nothing is changed
- BEGIN TRAN;
-
- ---
- --- If SQL# already exists, uninstall it
- ---
- DECLARE @CurrentSQLsharpSchema sysname;
-
- SELECT @CurrentSQLsharpSchema = routine.ROUTINE_SCHEMA
- FROM INFORMATION_SCHEMA.ROUTINES routine
- WHERE routine.SPECIFIC_NAME = N'SQLsharp_Uninstall';
-
- IF (@CurrentSQLsharpSchema IS NOT NULL)
- BEGIN
- EXEC(N'
- INSERT INTO #SQLsharpOptions ([Option], [Value])
- SELECT N''PriorVersion'' AS [Option], [' + @CurrentSQLsharpSchema + N'].[SQLsharp_Version]() AS [Value]
- WHERE NOT EXISTS (SELECT * FROM #SQLsharpOptions WHERE [Option] = N''PriorVersion'');
- ');
- EXEC(N'PRINT N''Uninstalling previous install of SQL#: '' + [' + @CurrentSQLsharpSchema + N'].[SQLsharp_Version]() + N'' . . .'';');
- EXEC(N'EXEC [' + @CurrentSQLsharpSchema + N'].[SQLsharp_Uninstall];');
- PRINT 'SQL# Uninstalled';
- PRINT '';
- END;
-
- ---
- --- Make sure that the Schema desired to hold SQL# exists
- ---
- IF NOT EXISTS (
- SELECT *
- FROM INFORMATION_SCHEMA.SCHEMATA schemas
- WHERE schemas.SCHEMA_NAME = @SQLsharpSchema
- )
- BEGIN
- PRINT '';
- PRINT N'Creating Schema: [' + @SQLsharpSchema + N'] ...';
-
- EXEC(N'CREATE SCHEMA [' + @SQLsharpSchema + N'] AUTHORIZATION [' + @SQLsharpLogin + N'];');
-
- PRINT 'Schema Created';
- PRINT '';
- END;
- ELSE
- BEGIN
- PRINT N'Schema [' + @SQLsharpSchema + N'] already exists; skipping';
- PRINT '';
- END;
-
- ---
- --- Create the main SQL# Assembly
- ---
- PRINT 'Creating SQL# Assembly ...';
-
- EXEC(N'
- CREATE ASSEMBLY [SQL#]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010300762168540000000000000000E00002210B010B0000DA08000006000000000000EEF8080000200000000009000000001000200000000200000400000000000000040000000000000000400900000200001B1209000300408500001000001000000000100000100000000000001000000000000000000000009CF808004F00000000000900C803000000000000000000000000000000000000002009000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000F4D808000020000000DA080000020000000000000000000000000000200000602E72737263000000C8030000000009000004000000DC0800000000000000000000000000400000402E72656C6F6300000C000000002009000002000000E008000000000000000000000000004000004200000000000000000000000000000000D0F808000000000048000000020005000438010098C0070009000000000000000000000000000000502000008000000000000000000000000000000000000000000000000000000000000000000000001AEECF889EE17D2DD8837EE5D6CD842F58F9594A06CE684A82860C4BE95309660846798A2933941F2155116C1960B50833397D1CA70F78776E491348A35C0A2F595332CC2575D4B611C9F1467B8948659C47455A671B2947AC3CF63CCE62589620470FD0D3E0B4503B2908F9D99D996A6D422A75CB188D91D7C2C40D004C2D32133006004200000001000011028E69185B8D2B0000010A160B2B2906070207185A938C2C0000010207185A1758938C2C000001281100000A1F10281200000A9C0717580B07028E69185B32CF062A00001330030039000000020000117201000070731300000A0A020C160D2B1B0809910B0612017207000070281400000A6F1500000A260917580D09088E6932DF066F1600000A2A7602163113720D0000701F6602731700000A281800000A2A72110000702A3E020304168D2C00000128050000062A00133005002E0100000300001172110000700A721100007004731900000A0B160C160D161304188D2C00000113081108161F0A9D1108171F0D9D11081306058E692D1D188D2C00000113091109161F209D1109171F099D1109130738D100000005130738C900000016130504076F1A00000A59130408110458028E693107028E690859130407020811046F1B00000A26081104580C076F1A00000A04320608028E693311281C00000A076F1600000A6F1D00000A2A076F1600000A0A0611066F1E00000A0D09162F24032C090611076F1E00000A0D09162F36281C00000A066F1D00000A07166F1F00000A2B440916311B06091759186F2000000A7213000070282100000A2C051813052B03171305281C00000A06160917581105596F2000000A6F1D00000A07160917586F2200000A2608028E693F2EFFFFFF2A1E02282300000A2A000013300400C101000004000011721100007020C8000000731900000A0A06027B020000046F2500000A6F1500000A26027B02000004250B398B010000FE137E540000043A940000001F0B732700000A25721900007016282800000A25722700007017282800000A25723B00007018282800000A25724500007019282800000A2572550000701A282800000A2572610000701B282800000A2572730000701C282800000A2572830000701D282800000A2572930000701E282800000A25729D0000701F09282800000A2572B10000701F0A282800000AFE138054000004FE137E54000004071202282900000A39D700000008450B000000050000000500000005000000050000000500000005000000400000004000000080000000800000008000000038A00000000672CF0000706F1500000A2606027B060000042D0D027C04000004282A00000A2B0572D30000706F1500000A260672DB0000706F1500000A262B650672CF0000706F1500000A2606027B070000046F2B00000A260672DF0000706F1500000A2606027B080000046F2B00000A260672DB0000706F1500000A262B250672CF0000706F1500000A2606027B080000046F2B00000A260672DB0000706F1500000A26066F1600000A2A1E02282300000A2A5202282300000A020203280A0000067D130000042A00001B300300E703000005000011732C00000A0A036F2D00000A6F2E00000A0D38AD030000096F2F00000A74380000010C73080000060B070872E30000706F3000000A742D0000017D01000004070872F90000706F3000000A742D0000017D020000040872130100706F3000000AA53400000120FFFFFF7F330E07283100000A697D040000042B16070872130100706F3000000AA5340000017D040000040872F90000706F3000000A742D0000017261000070282100000A2D1C0872F90000706F3000000A742D0000017255000070282100000A2C170872130100706F3000000AA53400000120A00F0000311C0872F90000706F3000000A742D0000017229010070282100000A2C1A070872130100706F3000000AA534000001185A7D050000042B16070872130100706F3000000AA5340000017D05000004070872350100706F3000000AA5390000017D030000040708724D0100706F3000000AA5390000017D0600000408725B0100706F3000000AA53A00000120FF000000330907167D070000042B160708725B0100706F3000000AA53A0000017D0700000408727D0100706F3000000AA53A00000120FF000000330907167D080000042B160708727D0100706F3000000AA53A0000017D080000040872970100706F3000000A7E3200000A330907167D090000042B16070872970100706F3000000AA5390000017D090000040872AB0100706F3000000A7E3200000A330907167D0A0000042B16070872AB0100706F3000000AA5390000017D0A0000040872C50100706F3000000A7E3200000A330907167D0B0000042B16070872C50100706F3000000AA5390000017D0B0000040872DB0100706F3000000A7E3200000A330907167D0C0000042B16070872DB0100706F3000000AA5390000017D0C0000040872E70100706F3000000A7E3200000A330907167D0D0000042B16070872E70100706F3000000AA5390000017D0D0000040872FD0100706F3000000A7E3200000A330907167D0E0000042B16070872FD0100706F3000000AA5390000017D0E00000408720F0200706F3000000A7E3200000A330D07722F0200707D0F0000042B160708720F0200706F3000000A742D0000017D0F00000408723D0200706F3000000A7E3200000A330D07722F0200707D100000042B160708723D0200706F3000000A742D0000017D1000000408725B0200706F3000000A7E3200000A330D07722F0200707D110000042B160708725B0200706F3000000A742D0000017D110000040872770200706F3000000A7E3200000A330D07722F0200707D120000042B16070872770200706F3000000A742D0000017D1200000406076F3300000A096F3400000A3A48FCFFFFDE1409753C000001130411042C0711046F3500000ADC062A00411C00000200000012000000BF030000D10300001400000000000000133005004A00000006000011027B130000046F3600000A8D2D0000010A160B2B1F060704027B13000004076F3700000A7B0100000405283800000AA20717580B07027B130000046F3600000A32D30306283900000A2A00001B300400CE00000007000011027B130000046F3600000A8D2D0000010A721100007020C8000000731900000A0B160C027B130000046F3A00000A13042B781204283B00000A0D07166F1F00000A07046F1500000A097B010000046F1500000A056F1500000A72950200706F1500000A2607096F070000066F1500000A260772950200706F1500000A26097B030000042D0C0772990200706F1500000A260772A30200706F1500000A2606082517580C076F1600000AA21204283C00000A3A7CFFFFFFDE0E1204FE160300001B6F3500000ADC0306283900000A2A0000011000000200300088B8000E00000000AA027B13000004036F3700000A7B0100000404027B13000004036F3700000A7B040000046A733D00000A2AF2027B13000004036F3700000A7B0100000404027B13000004036F3700000A7B07000004D2027B13000004036F3700000A7B08000004D2733E00000A2A133004003205000008000011140A027B13000004036F3700000A7B020000046F3F00000A250B39E6040000FE137E550000043A8B0100001F1E732700000A2572AD02007016282800000A25721900007017282800000A2572BB02007018282800000A25723B00007019282800000A2572C30200701A282800000A2572CD0200701B282800000A25729D0000701C282800000A2572B10000701D282800000A2572730000701E282800000A2572DF0200701F09282800000A2572EB0200701F0A282800000A2572F70200701F0B282800000A2572FF0200701F0C282800000A2572550000701F0D282800000A2572290100701F0E282800000A2572610000701F0F282800000A25720B0300701F10282800000A2572150300701F11282800000A2572310300701F12282800000A2572430300701F13282800000A2572590300701F14282800000A2572930000701F15282800000A2572630300701F16282800000A2572770300701F17282800000A2572870300701F18282800000A2572270000701F19282800000A2572450000701F1A282800000A2572A90300701F1B282800000A2572C10300701F1C282800000A2572C90300701F1D282800000AFE138055000004FE137E55000004071202282900000A393B03000008451E0000000500000022000000300000004D0000005B0000007900000096000000A5000000B4000000C2000000DF000000FC000000190100003701000046010000640100007301000091010000AF010000CD010000EB010000090200001802000036020000540200006F0200007B02000087020000A2020000BD02000038B8020000027B13000004036F3700000A7B0100000416734000000A0A38C6020000020317280D0000060A38B8020000027B13000004036F3700000A7B0100000418734000000A0A389B020000020319280D0000060A388D020000027B13000004036F3700000A7B010000041F1F734000000A0A386F020000027B13000004036F3700000A7B010000041A734000000A0A385202000002031F21280E0000060A384302000002031F22280E0000060A383402000002031B280E0000060A3826020000027B13000004036F3700000A7B010000041C734000000A0A3809020000027B13000004036F3700000A7B010000041D734000000A0A38EC010000027B13000004036F3700000A7B010000041E734000000A0A38CF010000027B13000004036F3700000A7B010000041F09734000000A0A38B101000002031F0A280D0000060A38A2010000027B13000004036F3700000A7B010000041F0B734000000A0A388401000002031F0C280D0000060A3875010000027B13000004036F3700000A7B010000041F0D734000000A0A3857010000027B13000004036F3700000A7B010000041F0F734000000A0A3839010000027B13000004036F3700000A7B010000041F10734000000A0A381B010000027B13000004036F3700000A7B010000041F11734000000A0A38FD000000027B13000004036F3700000A7B010000041F12734000000A0A38DF00000002031F20280E0000060A38D0000000027B13000004036F3700000A7B010000041F13734000000A0A38B2000000027B13000004036F3700000A7B010000041F14734000000A0A3894000000027B13000004036F3700000A7B010000041F0E734000000A0A2B7902031F15280D0000060A2B6D02031F16280D0000060A2B61027B13000004036F3700000A7B010000041F17734000000A0A2B46027B13000004036F3700000A7B010000041F19734000000A0A2B2B72D1030070027B13000004036F3700000A7B020000046F3F00000A72DB030070283800000A734100000A7A062A0000133004003800000009000011027B130000046F3600000A8D060000010A160B2B0E06070207280F000006A20717580B07027B130000046F3600000A32E406734200000A2A133003008E0000000A000011026F4400000A2C06284500000A2A0F01284600000A2C0B72E1030070734700000A7A0F01284800000A6F4900000A6F4A00000A250B2C2407722F040070282100000A2D0F077251040070282100000A2D062B08170A2B20160A2B1C725B0400700F01284800000A729D040070283800000A734700000A7A026F4B00000A06284C00000A6F4D00000A734E00000A2AA2026F4F00000A2C06285000000A2A026F5100000A16026F5100000A8E69285200000A735300000A2A0013300400770000000B000011026F4F00000A2C06284500000A2A026F5100000A0A160B160C2B4F060893285400000A0B071F413205071F4D310A071F613213071F6D300E0608071F0D58285500000A9D2B20071F4E3205071F5A310A071F6E3211071F7A300C0608071F0D59285500000A9D0817580C08068E6932AB06734E00000A2A00133005008D0200000C000011026F4400000A2C06284500000A2A026F4B00000A8E690A062D06735600000A2A7211000070731300000A0B160C160D1F2D130438B9000000077E140000041104916F5700000A26091104581308388B000000026F4B00000A082517580C911305026F4B00000A082517580C911306026F4B00000A082517580C911307077E14000004110518631F3F5F916F5700000A26077E1400000411061A631F0F5F11051A621F3F5F60916F5700000A26077E1400000411071C63195F110618621F3F5F60916F5700000A26077E1400000411071F3F5F916F5700000A260919580D0911083F6DFFFFFF07285800000A6F1500000A2609110458063F3DFFFFFF077E14000004060959916F5700000A26388B000000026F4B00000A082517580C911305026F4B00000A082517580C911306026F4B00000A082517580C911307077E14000004110518631F3F5F916F5700000A26077E1400000411061A631F0F5F11051A621F3F5F60916F5700000A26077E1400000411071C63195F110618621F3F5F60916F5700000A26077E1400000411071F3F5F916F5700000A260919580D091858063F6CFFFFFF090617592F70026F4B00000A082517580C911305026F4B00000A082517580C911306077E14000004110518631F3F5F916F5700000A26077E1400000411061A631F0F5F11051A621F3F5F60916F5700000A26077E14000004110618621F3F5F916F5700000A26077E1400000416916F5700000A262B5609062F52026F4B00000A082517580C911305077E14000004110518631F3F5F916F5700000A26077E1400000411051A621F3F5F916F5700000A26077E1400000416916F5700000A26077E1400000416916F5700000A2607285800000A6F1500000A26076F1600000A6F4D00000A734E00000A2A00000013300400660200000D000011026F4F00000A2C06285000000A2A026F5100000A8E696A0A06166A3306735900000A2A735A00000A0B166A0C166A0D161304161305161306161307026F5100000A0925176A580DD493130A3808020000110A285B00000A1F20591F3F5F13080811086A5813091109186A3EF100000038E1000000026F5100000A0925176A580DD493285C00000A130411041F2059D2130411041F3F5FD21304026F5100000A0925176A580DD493285C00000A130511051F2059D2130511051F3F5FD21305026F5100000A0925176A580DD493285C00000A130611061F2059D2130611061F3F5FD21306026F5100000A0925176A580DD493285C00000A130711071F2059D2130711071F3F5FD21307071104186220FF0000005F11051A63195F60D26F5D00000A0711051A6220FF0000005F110618631F0F5F60D26F5D00000A0711061C6220FF0000005F11071F3F5F60D26F5D00000A08196A580C081109186A593F14FFFFFF0811092F67026F5100000A0925176A580DD493285C00000A130411041F2059D2130411041F3F5FD21304026F5100000A0925176A580DD493285C00000A130511051F2059D2130511051F3F5FD21305071104186220FF0000005F11051A63195F60D26F5D00000A08176A580C0811092F61026F5100000A0925176A580DD493285C00000A130611061F2059D2130611061F3F5FD213060711051A6220FF0000005F110618631F0F5F60D26F5D00000A08176A580C2B1C026F5100000A0925176A580DD493130A110A1F0A2E28110A1F0D2E22090632E02B1C026F5100000A0925176A580DD493130A110A1F0A2E06110A1F0D3304090632E009063FF1FDFFFF07735E00000A2A000013300200310000000E000011026F4F00000A2C06285000000A2A026F5F00000A186A5BD48D2B0000010A026F5100000A28010000060A06735300000A2A000000133003005A00000002000011026F4400000A2C06284500000A2A026F6000000A69185A736100000A0A026F4B00000A0C160D2B1B0809910B0612017207000070281400000A6F1500000A260917580D09088E6932DF066F1600000A6F4D00000A734E00000A2A0000133002001B0000000F0000117E150000040A12000F00286200000A6C286300000A286400000A2A001330020022000000100000110F00286500000A0A12007E15000004286600000A0B1201286700000A286800000A2A000000000000602122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5FA61F408D2B00000125D056000004286900000A8014000004206C0700001717736A00000A80150000042A1E02282300000A2A000013300400C60700001100001103176A5F176A330C0F00286B00000A1C3302162A03186A5F186A330B0F00286B00000A2D02162A031A6A5F1A6A330C0F00286C00000A173302162A031E6A5F1E6A33220F00286D00000A1F1F33170F00286E00000A1F0C330C0F00286B00000A1B3302162A031F106A5F1F106A33200F00286D00000A1833160F00286E00000A17330C0F00286B00000A173302162A031F206A5F1F206A332C0F00286D00000A1F0F32210F00286D00000A1F1530160F00286E00000A17330C0F00286B00000A173302162A031F406A5F1F406A33320F00230000000000001C40286300000A132A122A286E00000A1C33160F00286E00000A1B330C0F00286B00000A173302162A0320800000006A5F20800000006A33160F00286D00000A1A330C0F00286E00000A1D3302162A0320000100006A5F20000100006A33200F00286D00000A1933160F00286E00000A1D330C0F00286B00000A1B3302162A0320000200006A5F20000200006A33200F00286D00000A1B33160F00286E00000A1D330C0F00286B00000A173302162A0320000400006A5F20000400006A33330F00230000000000001CC0286300000A132B122B286E00000A1E33170F00286E00000A1F09330C0F00286B00000A173302162A0320000800006A5F20000800006A332D0F00286D00000A1F1632220F00286D00000A1F1C30170F00286E00000A1F0B330C0F00286B00000A1A3302162A0320001000006A5F20001000006A332D0F00286D00000A1F1732220F00286D00000A1F1D30170F00286E00000A1F0B330C0F00286B00000A1B3302162A0320002000006A5F20002000006A33180F00286D00000A1F19330D0F00286E00000A1F0C3302162A0320004000006A5F20004000006A33220F00286D00000A1F1833170F00286E00000A1F0C330C0F00286B00000A1B3302162A0320008000006A5F20008000006A33220F00286D00000A1F1A33170F00286E00000A1F0C330C0F00286B00000A173302162A0320000001006A5F20000001006A330C0F00286B00000A1B3302162A0320000002006A5F20000002006A40E40000000F00286B00000A1B40D70000000F00286F00000A1F135D0A0F00286F00000A1F645B0B0F00286F00000A1F645D0C071A5B0D071A5D1304071E581F195B1305071105591758195B13061F13065A075809591106591F0F581F1E5D1307081A5B1308081A5D13091F201811045A581811085A581107591109591D5D130A061F0B11075A581F16110A5A5820C30100005B130B1107110A581D110B5A591F72581F1F5B130C1107110A581D110B5A591F72581F1F5D1758130D0F000F00286F00000A110C110D736A00000A132C122C2300000000000000C0286300000A287000000A2C02162A0320000004006A5F20000004006A40DC0000000F00286B00000A3AD00000000F00286F00000A1F135D130E0F00286F00000A1F645B130F0F00286F00000A1F645D1310110F1A5B1311110F1A5D1312110F1E581F195B1313110F1113591758195B13141F13110E5A110F581111591114591F0F581F1E5D131511101A5B131611101A5D13171F201811125A581811165A581115591117591D5D1318110E1F0B11155A581F1611185A5820C30100005B131911151118581D11195A591F72581F1F5B131A11151118581D11195A591F72581F1F5D1758131B0F00286D00000A111B330D0F00286E00000A111A3302162A0320000008006A5F20000008006A40980000000F00286B00000A1B408B0000000F00286F00000A1A5D131C0F00286F00000A1D5B131D0F00286F00000A1F135D131E1F13111E5A1F0F581F1E5D131F18111C5A1A111D5A58111F591F22581D5D1320111F1120581F72581F1F5B1321111F1120581F72581F1F5D175813220F000F00286F00000A11211122736A00000A132D122D2300000000000000C0286300000A287000000A2C02162A0320000010006A5F20000010006A337F0F00286B00000A2D760F00286F00000A1A5D13230F00286F00000A1D5B13240F00286F00000A1F135D13251F1311255A1F0F581F1E5D13261811235A1A11245A581126591F22581D5D132711261127581F72581F1F5B132811261127581F72581F1F5D175813290F00286D00000A1129330D0F00286E00000A11283302162A0320000020006A5F20000020006A332C0F00286D00000A1E32220F00286D00000A1F0E30170F00286E00000A1F0A330C0F00286B00000A173302162A0320000040006A5F20000040006A332C0F00286D00000A1B32220F00286D00000A1F0B30170F00286E00000A1F0A330C0F00286B00000A1B3302162A0320000080006A5F20000080006A332C0F00286D00000A1F0F32210F00286D00000A1F1530160F00286E00000A18330C0F00286B00000A173302162A0320000000016A5F20000000016A33180F00286D00000A1F0C330D0F00286E00000A1F0A3302162A0320000000026A5F20000000026A33180F00286D00000A1F0B330D0F00286E00000A1F0B3302162A0320000000046A5F20000000046A33220F00286D00000A1F0A33170F00286E00000A1F0B330C0F00286B00000A1B3302162A0320000000086A5F20000000086A33220F00286D00000A1F0C33170F00286E00000A1F0B330C0F00286B00000A173302162A0320000000106A5F20000000106A33180F00286D00000A1F18330D0F00286E00000A1F0C3302162A0320000000206A5F20000000206A33180F00286D00000A1F1F330D0F00286E00000A1F0C3302162A172A000013300700A30100001200001172110000700A140B170C03720D00007072110000706F7100000A287200000A0D09176A3D0701000009166A3FFF00000009694502000000050000007C00000038EB00000002179A72FB040070287300000A0B076F7400000A7E7500000A287600000A2C4E076F7700000A176F7800000A6F7400000A7E7500000A287600000A2C17076F7700000A176F7800000A6F7400000A287900000A0C021702179A076F7400000A03081F306F7A00000A6F7100000AA202179A0A38E600000002189A72FB040070287300000A0B076F7400000A7E7500000A287600000A2C4E076F7700000A176F7800000A6F7400000A7E7500000A287600000A2C17076F7700000A176F7800000A6F7400000A287900000A0C021802189A076F7400000A03081F306F7A00000A6F7100000AA202189A0A2B7202199A72FB040070287300000A0B076F7400000A7E7500000A287600000A2C4E076F7700000A176F7800000A6F7400000A7E7500000A287600000A2C17076F7700000A176F7800000A6F7400000A287900000A0C021902199A076F7400000A03081F306F7A00000A6F7100000AA202199A0A062A001330070046000000130000110F00286500000A0A1200286F00000A0F00286500000A0B1201286E00000A170F01286200000A0F02286200000A0F03286200000A0F04286200000A287B00000A737C00000A2A00001330070068000000140000110F00286500000A0A1200286F00000A0F00286500000A0B1201286E00000A0F00286500000A0C1202286F00000A0F00286500000A0D1203286E00000A287D00000A0F01286200000A0F02286200000A0F03286200000A0F04286200000A287B00000A737C00000A2A660F00286200000A0F01286200000A287D00000A286800000A2A0000133002003700000015000011206D0100000F00286500000A0B1201286C00000A590A0F00286500000A0C1202286F00000A287E00000A2C040617580A06286800000A2A4A0F00286200000A287E00000A287F00000A2A000013300100150000000F0000110F00286500000A0A1200288000000A288100000A2A00000013300100150000000F0000110F00286500000A0A1200288200000A288100000A2A00000013300200B3000000160000110F01286500000A13051205288300000A0F00286500000A13061206288300000A288400000A1632260F00286500000A13071207288300000A0A0F01286500000A13081208288300000A0B170C2B240F01286500000A13091209288300000A0A0F00286500000A130A120A288300000A0B150C160D0613042B2611040F02288500000A281C0000062C040917580D120423000000000000F03F286300000A1304110407288400000A1732CF09085A286800000A2A0013300200210000000F0000110F00286500000A0A1200288300000A0F01288500000A281C000006287F00000A2A000000133008005A030000170000110F02284800000A0A0F00286500000A13111211288600000A20102700006A5B0B0F01286500000A13121212288600000A20102700006A5B0C0807590D0920E80300006A5D13040920E80300006A5B0D091F3C6A5D1305091F3C6A5B1F3C6A5D13060920100E00006A5B1F186A5D13070920E087E1016A5B13080920E087E1016A11085A590D0920802128006A5B13090920802128006A11095A590D0920803A09006A5B130A0920803A09006A110A5A590D0920805101006A5B130B06720B050070166F8700000A130C7211000070130E1A8D2D000001130F178D2D00000113131113167211050070A2111313103859020000061F7D110C6F8800000A130D06110C1858110D110C5918596F2000000A130E110E1110166F8900000A130F06110C1858110D110C5918596F8A00000A0A110F169A6F4A00000A25\
-131439EC010000FE137E570000042D7A1F09732700000A25721705007016282800000A25721D05007017282800000A25722305007018282800000A25722905007019282800000A25722F0500701A282800000A2572350500701B282800000A25723B0500701C282800000A2572410500701D282800000A2572470500701E282800000AFE138057000004FE137E5700000411141215282900000A395401000011154509000000050000003D0000005C0000007B0000009A000000B9000000D5000000F10000000D010000382401000006724D050070110F1205288B00000A720D0000701204288B00000A191F306F7A00000A283800000A281D0000066F7100000A0A38FD00000006724D050070110F1204288B00000A281D0000066F7100000A0A38DE00000006724D050070110F1205288B00000A281D0000066F7100000A0A38BF00000006724D050070110F1206288B00000A281D0000066F7100000A0A38A000000006724D050070110F1207288B00000A281D0000066F7100000A0A388100000006724D050070110F120B288B00000A281D0000066F7100000A0A2B6506724D050070110F120A288B00000A281D0000066F7100000A0A2B4906724D050070110F1209288B00000A281D0000066F7100000A0A2B2D06724D050070110F1208288B00000A281D0000066F7100000A0A2B1106724D05007072550500706F7100000A0A06720B050070166F8700000A130C110C163C9FFDFFFF06288100000A2A000013300600240000000F00001120B20700001717161616738C00000A0A12000F00288D00000A288E00000A286400000A2A133007003000000018000011120020B20700001717161616288C00000A0F00286500000A0C120206286600000A0B1201288F00000A6C289000000A2A13300700B7010000190000112300000000000000000A0F00286500000A13061206286E00000A0D0F00286500000A13071207286D00000A13041613050F02284800000A725D0500706F9100000A2D300F02284800000A6F4A00000A72630500706F9100000A2D180F02284800000A6F4A00000A72670500706F9100000A2C031713050F01286500000A13081208286F00000A0F00286500000A13091209286F00000A596C0A0F01286500000A130A120A286F00000A287E00000A2D190918331511041F1D330F11052C061F1C13042B05190D1713040F01286500000A130B120B286E00000A0932270F01286500000A130C120C286E00000A0933730F01286500000A130D120D286D00000A11042F5F0623000000000000F03F590A0F01286500000A130E120E286F00000A1759287E00000A2D190918331511041F1D330F11052C061F1C13042B05190D17130412010F01286500000A130F120F286F00000A1759091104161616288C00000A2B1D12010F01286500000A13101210286F00000A091104161616288C00000A0F03289200000A2C270F01286500000A1311121107286600000A0C061202286700000A6C230000000000408F405B580A066C289000000A2A0013300400850600001A0000110F01289300000A2C067E9400000A2A0F00284800000A6F4900000A6F4A00000A2513093946060000FE137E580000043AFC0000001F13732700000A25726F05007016282800000A25728505007017282800000A25729505007018282800000A2572A305007019282800000A2572B30500701A282800000A2572BD0500701B282800000A2572D10500701C282800000A2572E10500701D282800000A2572ED0500701E282800000A2572F70500701F09282800000A2572070600701F0A282800000A2572190600701F0B282800000A2572270600701F0C282800000A25723D0600701F0D282800000A25724D0600701F0E282800000A2572550600701F0F282800000A25725F0600701F10282800000A25726D0600701F11282800000A25727B0600701F12282800000AFE138058000004FE137E580000041109120A282900000A3929050000110A451300000005000000300000005B00000086000000060200001C020000320200006202000078020000CB020000CB020000210400002104000050040000680400007E04000094040000AA040000C004000038D10400000F01286500000A130B120B286F00000A6C230000000000408F405B289500000A289600000A286800000A2A0F01286500000A130C120C286F00000A6C2300000000000059405B289500000A289600000A286800000A2A0F01286500000A130D120D286F00000A6C2300000000000024405B289500000A289600000A286800000A2A0F01286500000A130E120E286E00000A1832140F01286500000A130F120F286E00000A1F0B314E0F01286500000A13101210286E00000A1733130F01286500000A13111211286D00000A1A2F280F01286500000A13121212286E00000A1F0C332A0F01286500000A13131213286D00000A1F1C30160F01286500000A13141214286F00000A286800000A2A0F01286500000A13151215286B00000A0B072D021D0B0F01286500000A13161216286E00000A1733580F01286500000A13171217286F00000A171A736A00000A13181218286B00000A0A062D021D0A07062F160F01286500000A13191219286F00000A286800000A2A0F01286500000A131A121A286F00000A1759286800000A2A0F01286500000A131B121B286E00000A1F0C335A0F01286500000A131C121C286F00000A1758171A736A00000A131D121D286B00000A0A062D021D0A07062F180F01286500000A131E121E286F00000A1758286800000A2A0F01286500000A131F121F286F00000A286800000A2A7E9400000A2A0F01286500000A13201220286F00000A286800000A2A0F01286500000A13211221286C00000A286800000A2A0F01286500000A13221222286E00000A289700000A19739800000A289900000A289A00000A289B00000A286800000A2A0F01286500000A13231223286E00000A286800000A2A0F01286500000A13241224286F00000A1717736A00000A13251225286B00000A0C0F01286500000A13261226286C00000A0858289700000A1D739800000A289900000A289A00000A289B00000A286800000A2A0F01286500000A13271227286F00000A1717736A00000A13281228286B00000A130411042D031D13040F01286500000A13291229286B00000A130511052D031D13051613060F01286500000A132A122A286C00000A1E110459303611041A31310F01286500000A132B122B286F00000A17590D11041B2E0D11041C330E09287E00000A2C061F3513062B171F3413062B110F01286500000A132C122C286F00000A0D090F01286500000A132D122D286F00000A40960000000F01286500000A132E122E286F00000A287E00000A2C09206E01000013072B07206D010000130711070F01286500000A132F122F286C00000A591A1105592F160F01286500000A13301230286F00000A17580D171306090F01286500000A13311231286F00000A332D0F01286500000A13321232286C00000A1D110559581104175958130811081D5B130611041A31061106175913061106286800000A2A0F01286500000A13331233286B00000A2D071D286800000A2A0F01286500000A13341234286B00000A286800000A2A0F01286500000A13351235286B00000A1758286800000A2A0F01286500000A13361236286D00000A286800000A2A0F01286500000A13371237289C00000A286800000A2A0F01286500000A13381238289D00000A286800000A2A0F01286500000A13391239289E00000A286800000A2A0F01286500000A133A123A289F00000A286800000A2A72930600700F00284800000A281800000A734700000A7A000000133008002B0300001B0000110F01289300000A2C067EA000000A2A0F01286500000A13091209286F00000A0A0F01286500000A130A120A286E00000A0B0F01286500000A130B120B286D00000A0C0F01286500000A130C120C289C00000A0D0F01286500000A130D120D289D00000A13040F01286500000A130E120E289E00000A13050F00284800000A6F4900000A6F4A00000A25130F397C020000FE137E590000043A940000001F0B732700000A25726F05007016282800000A25728505007017282800000A25729505007018282800000A2572B305007019282800000A2572D10500701A282800000A2572E10500701B282800000A2572ED0500701C282800000A25724D0600701D282800000A2572550600701E282800000A25725F0600701F09282800000A25726D0600701F0A282800000AFE138059000004FE137E59000004110F1210282900000A39C70100001110450B0000000500000037000000690000009B000000AE000000F30000000601000051010000610100007101000082010000388F0100001206066C230000000000408F405B289500000A230000000000408F405A289600000A17171616161628A100000A38740100001206066C2300000000000059405B289500000A2300000000000059405A289600000A17171616161628A100000A38420100001206066C2300000000000024405B289500000A2300000000000024405A289600000A17171616161628A100000A381001000012060617171616161628A100000A38FD0000000717320807193004170B2B26071A3208071C30041A0B2B1A071D3209071F0930041D0B2B0D071F0A3208071F0C30031F0A0B12060607171616161628A100000A38B800000012060607171616161628A100000A38A50000000F01286500000A13111211286B00000A13070F01286500000A131212121107155A6C286300000A130812061208286F00000A1208286E00000A1208286D00000A1616161628A100000A2B5A12060607081616161628A100000A2B4A12060607080916161628A100000A2B3A1206060708091104161628A100000A2B29120606070809110411051628A100000A2B1772930600700F00284800000A281800000A734700000A7A1106286400000A2A0013300400900100001C0000110F0028A200000A2D0A0F0028A300000A172F0B72C506007073A400000A7A0F01284600000A2D180F01284800000A6F4900000A7E7500000A282100000A2C0B721707007073A400000A7A0F02289300000A2C0B725707007073A400000A7A0F02286500000A0A0F01284800000A6F4900000A6F4A00000A250C39BB000000FE137E5A0000042D611D732700000A25728907007016282800000A25729707007017282800000A2572A507007018282800000A2572B507007019282800000A2572C90700701A282800000A2572DB0700701B282800000A2572E90700701C282800000AFE13805A000004FE137E5A000004081203282900000A2C4009450700000002000000060000000A0000000E00000012000000160000001A0000002B1C160B2B40170B2B3C180B2B38190B2B341A0B2B301B0B2B2C1C0B2B2872FB0700700F01284800000A281800000A73A400000A7A120023000000000000F03F286300000A0A1200286B00000A0733E50F0028A300000A17311412000F0028A300000A17591D5A6C286300000A0A06286400000A2A13300900A40000001D0000110F00286200000A16320A0F01286200000A162F0B722B08007073A400000A7A0F00286200000A0D1203282A00000A0B0F01286200000A13041204282A00000A1C1F306F7A00000A0C120007161A6F2000000A287900000A071A186F2000000A287900000A071C186F2000000A287900000A0816186F2000000A287900000A0818186F2000000A287900000A081A186F2000000A287900000A288C00000A06286400000A2A133003004F0000001E0000110F00289300000A2C067E9400000A2A0F00286500000A0B1201286F00000A20102700005A0F00286500000A0C1202286E00000A1F645A580F00286500000A0D1203286D00000A580A06286800000A2A00133003004F0000001E0000110F00289300000A2C067E9400000A2A0F00286500000A0B1201289C00000A20102700005A0F00286500000A0C1202289D00000A1F645A580F00286500000A0D1203289E00000A580A06286800000A2AF20F00286200000A0F01286200000A0F02286200000A0F03286200000A0F04286200000A0F05286200000A0F06286200000A73A100000A286400000A2A13300300560000001F0000110F02284800000A7E7500000A282100000A2C190F00286500000A0B12010F01284800000A28A500000A0A2B230F00286500000A0C12020F01284800000A0F02284800000A28A600000A28A700000A0A06288100000A2A00001330020029000000130000110F00286500000A0A1200286F00000A0F00286500000A0B1201286E00000A287D00000A286800000A2A1E02282300000A2A00000013300500F52300002000001173A800000A0A7285080070728D0800707293080070729B08007072B3080070733E0000060B06076FA900000A72740E0070727C0E007072820E0070728A0E007072A60E0070733E0000060B06076FA900000A723F1200707247120070724D12007072551200707265120070733E0000060B06076FA900000A72BE18007072C618007072CC18007072D418007072E4180070733E0000060B06076FA900000A72F11E007072F91E007072FF1E007072071F007072251F0070733E0000060B06076FA900000A7216260070721E2600707224260070722C260070723C260070733E0000060B06076FA900000A72212C007072292C0070722F2C007072372C007072452C0070733E0000060B06076FA900000A72F231007072FA31007072003200707208320070721A320070733E0000060B06076FA900000A723B3A007072433A007072493A007072513A007072673A0070733E0000060B06076FA900000A72DC41007072E441007072EA41007072F2410070721A420070733E0000060B06076FA900000A72F34A007072FB4A007072014B007072094B0070721D4B0070733E0000060B06076FA900000A728A4E007072924E007072984E007072A04E007072B04E0070733E0000060B06076FA900000A72BD50007072C550007072CB50007072D350007072DF500070733E0000060B06076FA900000A7294540070729C54007072A254007072AA54007072BE540070733E0000060B06076FA900000A72FF5C007072075D0070720D5D007072155D007072255D0070733E0000060B06076FA900000A72F25E007072FA5E007072005F007072085F0070721E5F0070733E0000060B06076FA900000A7257620070725F6200707265620070726D620070727D620070733E0000060B06076FA900000A72F265007072FA650070720066007072086600707218660070733E0000060B06076FA900000A72696A007072716A007072776A0070727F6A007072956A0070733E0000060B06076FA900000A72026F0070720A6F007072106F007072186F0070722A6F0070733E0000060B06076FA900000A724B7400707253740070725974007072617400707271740070733E0000060B06076FA900000A722A7800707232780070723878007072407800707250780070733E0000060B06076FA900000A724D7A007072557A0070725B7A007072637A007072717A0070733E0000060B06076FA900000A723E8400707246840070724C84007072548400707260840070733E0000060B06076FA900000A72A586007072AD86007072B386007072BB86007072CB860070733E0000060B06076FA900000A72148F0070721C8F007072228F0070722A8F007072388F0070733E0000060B06076FA900000A7265980070726D9800707273980070727B980070728B980070733E0000060B06076FA900000A72709A007072789A0070727E9A007072869A007072B49A0070733E0000060B06076FA900000A7289A000707291A000707297A00070729FA0007072B1A00070733E0000060B06076FA900000A72FAA200707202A300707208A300707210A30070733D0000060B06076FA900000A722CA300707234A30070723AA300707242A300707250A30070733E0000060B06076FA900000A7255AD0070725DAD00707263AD0070726BAD007072A9AD0070733E0000060B06076FA900000A7232BC0070723ABC00707240BC00707248BC0070726CBC0070733E0000060B06076FA900000A72A1C4007072A9C4007072AFC4007072B7C4007072C9C40070733E0000060B06076FA900000A72D6C6007072DEC6007072E4C6007072ECC600707206C70070733E0000060B06076FA900000A72B7CA007072BFCA007072C5CA007072CDCA007072DDCA0070733E0000060B06076FA900000A727ED400707286D40070728CD400707294D4007072A6D40070733E0000060B06076FA900000A728FDA00707297DA0070729DDA007072A5DA007072B7DA0070733E0000060B06076FA900000A722CDE00707234DE0070723ADE00707242DE00707250DE0070733E0000060B06076FA900000A7285E20070728DE200707293E20070729BE2007072B1E20070733E0000060B06076FA900000A72FAE700707202E800707208E800707210E80070722EE80070733E0000060B06076FA900000A72C7F0007072CFF0007072D5F0007072DDF00070720FF10070733E0000060B06076FA900000A72B4F6007072BCF6007072C2F6007072CAF6007072D4F60070733E0000060B06076FA900000A72E5F8007072EDF8007072F3F8007072FBF800707207F90070733E0000060B06076FA900000A7280FC00707288FC0070728EFC00707296FC007072A2FC0070733E0000060B06076FA900000A724B0001707253000170725900017072610001707283000170733E0000060B06076FA900000A725808017072600801707266080170726E080170733D0000060B06076FA900000A729E08017072A608017072AC08017072B408017072C6080170733E0000060B06076FA900000A72EF0A017072F70A017072FD0A017072050B017072150B0170733E0000060B06076FA900000A724A120170725212017072581201707260120170726C120170733E0000060B06076FA900000A721D1901707225190170722B19017072331901707277190170733E0000060B06076FA900000A72A022017072A822017072AE22017072B622017072D0220170733E0000060B06076FA900000A728D2C017072952C0170729B2C017072A32C017072B92C0170733E0000060B06076FA900000A720E2F017072162F0170721C2F017072242F017072402F0170733E0000060B06076FA900000A72413101707249310170724F31017072573101707267310170733E0000060B06076FA900000A72DC36017072E436017072EA36017072F236017072FC360170733E0000060B06076FA900000A72D53B017072DD3B017072E33B017072EB3B017072F93B0170733E0000060B06076FA900000A7262410170726A410170727041017072784101707296410170733E0000060B06076FA900000A72BF47017072C747017072CD47017072D547017072E5470170733E0000060B06076FA900000A728A4A017072924A017072984A017072A04A017072B24A0170733E0000060B06076FA900000A7283500170728B5001707291500170729950017072AB500170733E0000060B06076FA900000A72705601707278560170727E560170728656017072AC560170733E0000060B06076FA900000A72CD5A017072D55A017072DB5A017072E35A017072F35A0170733E0000060B06076FA900000A720860017072106001707216600170721E600170722A600170733E0000060B06076FA900000A725B6301707263630170726963017072716301707289630170733E0000060B06076FA900000A72A666017072AE66017072B466017072BC66017072E0660170733E0000060B06076FA900000A725D6D017072656D0170726B6D017072736D017072836D0170733E0000060B06076FA900000A725873017072607301707266730170726E730170727E730170733E0000060B06076FA900000A7287750170728F7501707295750170729D75017072AF750170733E0000060B06076FA900000A72CC7A017072D47A017072DA7A017072E27A0170721A7B0170733E0000060B06076FA900000A7287830170728F8301707295830170729D83017072B9830170733E0000060B06076FA900000A7282860170728A8601707290860170729886017072A2860170733E0000060B06076FA900000A72278F0170722F8F017072358F0170723D8F0170724D8F0170733E0000060B06076FA900000A7286920170728E9201707294920170729C92017072AA920170733E0000060B06076FA900000A72A394017072AB94017072B194017072B9940170733D0000060B06076FA900000A72D594017072DD94017072E394017072EB940170720D950170733E0000060B06076FA900000A72329A0170723A9A017072409A017072489A0170733D0000060B06076FA900000A72809A017072889A0170728E9A017072969A017072A29A0170733E0000060B06076FA900000A72C79C017072CF9C017072D59C017072DD9C017072EB9C0170733E0000060B06076FA900000A72049F0170720C9F017072129F0170721A9F0170722A9F0170733E0000060B06076FA900000A720BA301707213A301707219A301707221A301707231A30170733E0000060B06076FA900000A7226A50170722EA501707234A50170723CA501707248A50170733E0000060B06076FA900000A72F1A8017072F9A8017072FFA801707207A90170721BA90170733E0000060B06076FA900000A7290AE01707298AE0170729EAE017072A6AE017072B4AE0170733E0000060B06076FA900000A726DB301707275B30170727BB301707283B301707297B30170733E0000060B06076FA900000A7288B901707290B901707296B90170729EB9017072AEB90170733E0000060B06076FA900000A72AFC2017072B7C2017072BDC2017072C5C20170733D0000060B06076FA900000A72DBC2017072E3C2017072E9C2017072F1C2017072FBC20170733E0000060B06076FA900000A72A8C7017072B0C7017072B6C7017072BEC7017072D2C70170733E0000060B06076FA900000A723BCC01707243CC01707249CC01707251CC01707263CC0170733E0000060B06076FA900000A72DCD1017072E4D1017072EAD1017072F2D101707200D20170733E0000060B06076FA900000A7211D401707219D40170721FD401707227D401707243D40170733E0000060B06076FA900000A72DCD7017072E4D7017072EAD7017072F2D701707200D80170733E0000060B06076FA900000A7289DF01707291DF01707297DF0170729FDF017072ABDF0170733E0000060B06076FA900000A72B8E3017072C0E3017072C6E3017072CEE30170733D0000060B06076FA900000A7212E40170721AE401707220E401707228E401707264E40170733E0000060B06076FA900000A7231EA01707239EA0170723FEA01707247EA01707259EA0170733E0000060B06076FA900000A728EED01707296ED0170729CED017072A4ED017072B8ED0170733E0000060B06076FA900000A7291F201707299F20170729FF2017072A7F2017072B7F20170733E0000060B06076FA900000A72C8F4017072D0F4017072D6F4017072DEF4017072EEF40170733E0000060B06076FA900000A7213F80170721BF801707221F801707229F801707235F80170733E0000060B06076FA900000A72FEFB01707206FC0170720CFC01707214FC01707228FC0170733E0000060B06076FA900000A7205FE0170720DFE01707213FE0170721BFE0170724FFE0170733E0000060B06076FA900000A724802027072500202707256020270725E0202707268020270733E0000060B06076FA900000A72410702707249070270724F07027072570702707267070270733E0000060B06076FA900000A7254090270725C0902707262090270726A0902707282090270733E0000060B06076FA900000A72BF0D027072C70D027072CD0D027072D50D027072E30D0270733E0000060B06076FA900000A721C1202707224120270722A1202707232120270723E120270733E0000060B06076FA900000A724F1402707257140270725D14027072651402707275140270733E0000060B06076FA900000A720A180270721218027072181802707220180270722C180270733E0000060B06076FA900000A72011D027072091D0270720F1D027072171D027072251D0270733E0000060B06076FA900000A7282230270728A2302707290230270729823027072A6230270733E0000060B06076FA900000A72AB27027072B327027072B927027072C127027072D7270270733E0000060B06076FA900000A72F82D027072002E027072062E0270720E2E0270721A2E0270733E0000060B06076FA900000A72BF33027072C733027072CD33027072D533027072E7330270733E0000060B06076FA900000A72283D027072303D027072363D0270723E3D0270728C3D0270733E0000060B06076FA900000A72B941027072C141027072C741027072CF41027072F5410270733E0000060B06076FA900000A72EA4B027072F24B027072F84B027072004C0270720E4C0270733E0000060B06076FA900000A72974F0270729F4F027072A54F027072AD4F027072C34F0270733E0000060B06076FA900000A72EC54027072F454027072FA54027072025502707244550270733E0000060B06076FA900000A721959027072215902707227590270722F590270723D590270733E0000060B06076FA900000A72365B0270723E5B027072445B0270724C5B0270725C5B0270733E0000060B06076FA900000A720D6102707215610270721B61027072236102707233610270733E0000060B06076FA900000A725865027072606502707266650270726E650270727E650270733E0000060B06076FA900000A72C36A027072CB6A027072D16A027072D96A027072076B0270733E0000060B06076FA900000A72A46C027072AC6C027072B26C027072BA6C027072D66C0270733E0000060B06076FA900000A723B7002707243700270724970027072517002707265700270733E0000060B06076FA900000A7272720270727A72027072807202707288720270729E720270733E0000060B06076FA900000A72B774027072BF74027072C574027072CD74027072D9740270733E0000060B06076FA900000A72127B0270721A7B027072207B027072287B0270727E7B0270733E0000060B06076FA900000A7243820270724B82027072518202707259820270726F820270733E0000060B06076FA900000A72A884027072B084027072B684027072BE84027072CC840270733E0000060B06076FA900000A72FD8802707205890270720B89027072138902707225890270733E0000060B06076FA900000A72C28E027072CA8E027072D08E027072D88E027072EA8E0270733E0000060B06076FA900000A723B930270724393027072499302707251930270725B930270733E0000060B06076FA900000A726C9502707274950270727A9502707282950270728E950270733E0000060B06076FA900000A72EF98027072F798027072FD98027072059902707227990270733E0000060B06076FA900000A72E4A2027072ECA2027072F2A2027072FAA20270733D0000060B06076FA900000A7210A302707218A30270721EA302707226A30270723CA30270733E0000060B06076FA900000A7205A90270720DA902707213A90270721BA90270722FA90270733E0000060B06076FA900000A7294AB0270729CAB027072A2AB027072AAAB0270733D0000060B06076FA900000A72BAAB027072C2AB027072C8AB027072D0AB027072DEAB0270733E0000060B06076FA900000A722BB002707233B002707239B00270\
-7241B002707281B00270733E0000060B06076FA900000A727EB402707286B40270728CB402707294B4027072BEB40270733E0000060B06076FA900000A7213B90270721BB902707221B902707229B902707237B90270733E0000060B06076FA900000A7204BB0270720CBB02707212BB0270721ABB0270722CBB0270733E0000060B06076FA900000A7259BF02707261BF02707267BF0270726FBF02707285BF0270733E0000060B06076FA900000A72B6C4027072BEC4027072C4C4027072CCC4027072E2C40270733E0000060B06076FA900000A72DBCC027072E3CC027072E9CC027072F1CC02707201CD0270733E0000060B06076FA900000A7296D00270729ED0027072A4D0027072ACD0027072C2D00270733E0000060B06076FA900000A72DBD7027072E3D7027072E9D7027072F1D702707201D80270733E0000060B06076FA900000A728EDC02707296DC0270729CDC027072A4DC027072B4DC0270733E0000060B06076FA900000A72A9E7027072B1E7027072B7E7027072BFE7027072CBE70270733E0000060B06076FA900000A7230EB02707238EB0270723EEB02707246EB02707252EB0270733E0000060B06076FA900000A7203F70270720BF702707211F702707219F702707231F70270733E0000060B06076FA900000A720AF902707212F902707218F902707220F90270724AF90270733E0000060B06076FA900000A72EFFC027072F7FC027072FDFC02707205FD0270733D0000060B06076FA900000A7221FD02707229FD0270722FFD02707237FD0270724FFD0270733E0000060B06076FA900000A7224050370722C0503707232050370723A050370724E050370733E0000060B06076FA900000A72EB08037072F308037072F90803707201090370720D090370733E0000060B06076FA900000A72E20C037072EA0C037072F00C037072F80C037072080D0370733E0000060B06076FA900000A72F90E037072010F037072070F0370720F0F037072190F0370733E0000060B06076FA900000A723E1503707246150370724C15037072541503707272150370733E0000060B06076FA900000A72F71A037072FF1A037072051B0370720D1B0370723F1B0370733E0000060B06076FA900000A72902303707298230370729E23037072A623037072B4230370733E0000060B06076FA900000A7255260370725D2603707263260370726B2603707275260370733E0000060B06076FA900000A72062A0370720E2A037072142A0370721C2A0370722E2A0370733E0000060B06076FA900000A7257300370725F3003707265300370726D3003707279300370733E0000060B06076FA900000A7296350370729E35037072A435037072AC35037072EC350370733E0000060B06076FA900000A725939037072613903707267390370726F390370727D390370733E0000060B06076FA900000A723A3E037072423E037072483E037072503E037072723E0370733E0000060B06076FA900000A72CF48037072D748037072DD48037072E548037072F7480370733E0000060B06076FA900000A72684C037072704C037072764C0370727E4C037072884C0370733E0000060B06076FA900000A72894E037072914E037072974E0370729F4E037072B74E0370733E0000060B06076FA900000A72B454037072BC54037072C254037072CA54037072DC540370733E0000060B06076FA900000A72655E0370726D5E037072735E0370727B5E037072895E0370733E0000060B06076FA900000A724A6003707252600370725860037072606003707272600370733E0000060B06076FA900000A72E366037072EB66037072F166037072F96603707211670370733E0000060B06076FA900000A72AA6D037072B26D037072B86D037072C06D037072CC6D0370733E0000060B06076FA900000A72A16F037072A96F037072AF6F037072B76F0370733D0000060B06076FA900000A72C76F037072CF6F037072D56F037072DD6F037072ED6F0370733E0000060B06076FA900000A72FE7103707206720370720C7203707214720370723A720370733E0000060B06076FA900000A720F7403707217740370721D74037072257403707233740370733E0000060B06076FA900000A72F478037072FC7803707202790370720A7903707224790370733E0000060B06076FA900000A72CD80037072D580037072DB80037072E3800370720F810370733E0000060B06076FA900000A72808B037072888B0370728E8B037072968B037072AE8B0370733E0000060B06076FA900000A726B900370727390037072799003707281900370733D0000060B06076FA900000A72B590037072BD90037072C390037072CB900370720D910370733E0000060B06076FA900000A7262950370726A950370727095037072789503707284950370733E0000060B06076FA900000A72519903707259990370725F9903707267990370727D990370733E0000060B06076FA900000A7202A00370720AA003707210A003707218A003707244A00370733E0000060B06076FA900000A72B5A4037072BDA4037072C3A4037072CBA4037072E5A40370733E0000060B06076FA900000A7252AB0370725AAB03707260AB03707268AB03707278AB0370733E0000060B06076FA900000A723DAF03707245AF0370724BAF03707253AF03707261AF0370733E0000060B06076FA900000A7232B50370723AB503707240B503707248B50370725EB50370733E0000060B06076FA900000A7227BB0370722FBB03707235BB0370723DBB03707257BB0370733E0000060B06076FA900000A7230BD03707238BD0370723EBD03707246BD0370725ABD0370733E0000060B06076FA900000A72EFC1037072F7C1037072FDC103707205C203707217C20370733E0000060B06076FA900000A7234C80370723CC803707242C80370724AC80370725CC80370733E0000060B06076FA900000A72E5CB037072EDCB037072F3CB037072FBCB0370721BCC0370733E0000060B06076FA900000A72FCD103707204D20370720AD203707212D203707222D20370733E0000060B06076FA900000A72B7D5037072BFD5037072C5D5037072CDD5037072E7D50370733E0000060B06076FA900000A7250DE03707258DE0370725EDE03707266DE037072C0DE0370733E0000060B06076FA900000A7205E80370720DE803707213E80370721BE803707227E80370733E0000060B06076FA900000A72F4EC037072FCEC03707202ED0370720AED0370721EED0370733E0000060B06076FA900000A7217F40370721FF403707225F40370722DF403707239F40370733E0000060B06076FA900000A725EF803707266F80370726CF803707274F803707286F80370733E0000060B06076FA900000A72D7FC037072DFFC037072E5FC037072EDFC0370733D0000060B06076FA900000A721BFD03707223FD03707229FD03707231FD03707245FD0370733E0000060B06076FA900000A725E0504707266050470726C05047072740504707282050470733E0000060B06076FA900000A72B708047072BF08047072C508047072CD08047072E5080470733E0000060B06076FA900000A72C20B047072CA0B047072D00B047072D80B047072020C0470733E0000060B06076FA900000A727B0F047072830F047072890F047072910F047072C50F0470733E0000060B06076FA900000A7242140470724A14047072501404707258140470726E140470733E0000060B06076FA900000A72F317047072FB170470720118047072091804707243180470733E0000060B06076FA900000A72E821047072F021047072F621047072FE2104707210220470733E0000060B06076FA900000A723924047072412404707247240470724F2404707267240470733E0000060B06076FA900000A72C029047072C829047072CE29047072D629047072E0290470733E0000060B06076FA900000A72152F0470721D2F047072232F0470722B2F0470733D0000060B06076FA900000A723B2F047072432F047072492F047072512F0470725D2F0470733E0000060B06076FA900000A721E3304707226330470722C3304707234330470725C330470733E0000060B06076FA900000A72A13C047072A93C047072AF3C047072B73C047072C73C0470733E0000060B06076FA900000A724C4204707254420470725A42047072624204707270420470733E0000060B06076FA900000A72DD47047072E547047072EB47047072F3470470720D480470733E0000060B06076FA900000A72DE4F047072E64F047072EC4F047072F44F04707226500470733E0000060B06076FA900000A72DB57047072E357047072E957047072F157047072FF570470733E0000060B06076FA900000A729C61047072A461047072AA61047072B261047072C0610470733E0000060B06076FA900000A723D6604707245660470724B66047072536604707263660470733E0000060B06076FA900000A723C6804707244680470724A6804707252680470727C680470733E0000060B06076FA900000A72116B047072196B0470721F6B047072276B047072456B0470733E0000060B06076FA900000A7226740470722E7404707234740470723C7404707258740470733E0000060B06076FA900000A72897A047072917A047072977A0470729F7A0470733D0000060B06076FA900000A72E97A047072F17A047072F77A047072FF7A0470720F7B0470733E0000060B06076FA900000A72B480047072BC80047072C280047072CA80047072E0800470733E0000060B06076FA900000A72B984047072C184047072C784047072CF84047072DF840470733E0000060B06076FA900000A72A88B047072B08B047072B68B047072BE8B047072D28B0470733E0000060B06076FA900000A72C38F047072CB8F047072D18F047072D98F047072EB8F0470733E0000060B06076FA900000A72309504707238950470723E95047072469504707276950470733E0000060B06076FA900000A72579E0470725F9E047072659E0470726D9E047072979E0470733E0000060B06076FA900000A7298AA047072A0AA047072A6AA047072AEAA0470733D0000060B06076FA900000A72D2AA047072DAAA047072E0AA047072E8AA04707206AB0470733E0000060B06076FA900000A72E3AF047072EBAF047072F1AF047072F9AF04707205B00470733E0000060B06076FA900000A72DEB1047072E6B1047072ECB1047072F4B104707202B20470733E0000060B06076FA900000A720BB604707213B604707219B604707221B604707233B60470733E0000060B06076FA900000A062A00000013300200600000002100001102A5090000020A0312007B1B000004288100000A810B0000010412007B1C000004288100000A810B0000010512007B1D000004288100000A810B0000010E0412007B1E000004288100000A810B0000010E0512007B1F000004735300000A512A1E02282300000A2A033002005300000000000000027C67000004284800000A6F2500000A037B170000046F9100000A2D34027C67000004284800000A6F2500000A037B180000046F9100000A2D17027C67000004284800000A037B160000046F9100000A2A172A00133002003C0000002200001128AF00000A6FB000000A027B6A0000043315027B690000041FFE330B02167D69000004020A2B071673AB0000060A06027B6C0000047D6B000004062A1E0228A40000062A1B3005004802000023000011027B690000040B074504000000050000001E0200002B01000017020000381902000002157D6900000402147D700000040273A20000067D71000004027B71000004027B6B0000047D67000004027C6D000004FE1509000002027B710000047C67000004284600000A2D24027B710000047C67000004284800000A6F4900000A7E7500000A282100000A39DC0000000228350000066FB100000A7D7200000402177D6900000438A500000002027C7200000428B200000A7D6E000004027C6D000004027B6E0000047B160000047D1B000004027C6D000004027B6E0000047B170000047D1C000004027C6D000004027B6E0000047B180000047D1D000004027C6D000004027B6E0000047B190000047D1E000004027C6D000004027B6E0000047B1A0000047D1F00000402027B6D0000048C090000027D6800000402187D69000004170ADDFE00000002177D69000004027C7200000428B300000A3A4BFFFFFF0228AC00000638D1000000022835000006027B700000042D1702027B71000004FE06A300000673B400000A7D70000004027B700000046FB500000A7D6F000004027B6F0000043991000000027C6D000004027B6F0000047B160000047D1B000004027C6D000004027B6F0000047B170000047D1C000004027C6D000004027B6F0000047B180000047D1D000004027C6D000004027B6F0000047B190000047D1E000004027C6D000004027B6F0000047B1A0000047D1F00000402027B6D0000048C090000027D6800000402197D69000004170ADE1202157D69000004160ADE070228A9000006DC062A411C000004000000000000003F0200003F02000007000000000000001E027B680000042A1A73B600000A7A001B3002002200000024000011027B690000040A061759450200000001000000010000002ADE070228AC000006DC2A00000110000002001800021A0007000000001E027B680000042A7A02282300000A02037D690000040228AF00000A6FB000000A7D6A0000042A6602157D69000004027C72000004FE160700001B6F3500000A2A0000001330020011000000220000111FFE73AB0000060A06027D6C000004062A000000133004009A0A00002500001173B700000A0A7248BB04707247120070724EBB0470722E74047073400000060B06076FB800000A725EBB04707264BB0470726ABB0470722E74047073400000060B06076FB800000A7278BB047072F91E007072071F0070721100007073400000060B06076FB800000A727EBB047072FA5E00707284BB0470722E74047073400000060B06076FB800000A7294BB047072FB4A0070729ABB0470722E74047073400000060B06076FB800000A72ACBB0470721100007072B2BB0470721100007073400000060B06076FB800000A72CCBB04707234DE007072D2BB0470722E74047073400000060B06076FB800000A72E8BB047072A608017072EEBB0470722E74047073400000060B06076FB800000A7200BC04707206BC0470720CBC0470722E74047073400000060B06076FB800000A7224BC04707213A30170722ABC0470722E74047073400000060B06076FB800000A723CBC04707242BC04707248BC0470722E74047073400000060B06076FB800000A7272BC04707278BC0470727EBC0470722E74047073400000060B06076FB800000A728EBC04707233B002707294BC0470721100007073400000060B06076FB800000A72D2BC047072889A0170721A9F0170722E74047073400000060B06076FB800000A72D8BC047072E3C2017072F1C20170721100007073400000060B06076FB800000A72DEBC047072E4BC047072EABC0470722E74047073400000060B06076FB800000A72F8BC0470721100007072FEBC0470721100007073400000060B06076FB800000A721CBD04707206FC01707222BD0470722E74047073400000060B06076FB800000A722EBD047072C70D02707234BD0470722E74047073400000060B06076FB800000A7246BD0470721BF80170724CBD0470722E74047073400000060B06076FB800000A725CBD04707262BD04707268BD0470722E74047073400000060B06076FB800000A7272BD047072110000707278BD0470721100007073400000060B06076FB800000A7294BD04707211000070729ABD0470721100007073400000060B06076FB800000A72B8BD047072BEBD047072C4BD0470722E74047073400000060B06076FB800000A72D2BD04707202E8007072D8BD0470722E74047073400000060B06076FB800000A72EABD0470721100007072F0BD0470721100007073400000060B06076FB800000A720ABE047072F45402707210BE0470722E74047073400000060B06076FB800000A7224BE04707261BF0270722ABE0470722E74047073400000060B06076FB800000A7236BE047072F79802707205990270721100007073400000060B06076FB800000A723CBE04707286B402707242BE0470722E74047073400000060B06076FB800000A7254BE047072E3CC0270725ABE0470722E74047073400000060B06076FB800000A7276BE0470727CBE04707282BE0470722E74047073400000060B06076FB800000A7294BE04707211000070729ABE0470721100007073400000060B06076FB800000A72B8BE0470720CBB027072BEBE0470722E74047073400000060B06076FB800000A725D05007072BEC4027072D2BE0470722E74047073400000060B06076FB800000A72EABE047072BF74027072F0BE0470722E74047073400000060B06076FB800000A7202BF047072749502707208BF0470722E74047073400000060B06076FB800000A7218BF04707211000070721EBF0470721100007073400000060B06076FB800000A723CBF047072F30803707242BF0470722E74047073400000060B06076FB800000A7254BF0470725ABF04707260BF0470722E74047073400000060B06076FB800000A726EBF04707274BF0470727ABF0470722E74047073400000060B06076FB800000A7296BF0470729CBF047072A2BF0470722E74047073400000060B06076FB800000A72B8BF047072BEBF047072C4BF0470722E74047073400000060B06076FB800000A72DABF047072E0BF047072E6BF0470722E74047073400000060B06076FB800000A72F8BF047072F7FC027072FEBF0470722E74047073400000060B06076FB800000A721CC004707222C004707228C00470722E74047073400000060B06076FB800000A7242C0047072FF1A0370720D1B0370721100007073400000060B06076FB800000A7248C00470724EC004707254C00470722E74047073400000060B06076FB800000A725EC004707264C00470726AC00470722E74047073400000060B06076FB800000A727CC004707282C004707288C00470722E74047073400000060B06076FB800000A7296C00470725F300370726D300370721100007073400000060B06076FB800000A729CC00470721100007072A2C00470721100007073400000060B06076FB800000A72BEC00470726139037072C4C00470722E74047073400000060B06076FB800000A72DEC0047072EB66037072F9660370721100007073400000060B06076FB800000A72E4C0047072EAC0047072F0C00470722E74047073400000060B06076FB800000A720AC10470723AB503707210C10470722E74047073400000060B06076FB800000A722EC10470721FF403707234C10470722E74047073400000060B06076FB800000A724EC1047072A93C04707254C10470722E74047073400000060B06076FB800000A7268C10470726EC104707274C10470722E74047073400000060B06076FB800000A7280C1047072917A04707286C10470721100007073400000060B06076FB800000A72BEC1047072C4C1047072CAC10470722E74047073400000060B06076FB800000A72D4C1047072DAC1047072E0C10470722E74047073400000060B06076FB800000A72F0C10470721AE4017072F6C10470722E74047073400000060B06076FB800000A7208C20470725F9E0470720EC20470721100007073400000060B06076FB800000A7244C204707211000070724AC20470721100007073400000060B06076FB800000A7262C204707268C20470726EC20470722E74047073400000060B06076FB800000A7284C20470728AC204707290C20470722E74047073400000060B06076FB800000A72ACC2047072B2C2047072B8C20470722E74047073400000060B06076FB800000A72CCC2047072D2C2047072D8C20470722E74047073400000060B06076FB800000A721100007072E8C2047072EEC204707234DE007073400000060B06076FB800000A721100007072FEC204707204C304707234DE007073400000060B06076FB800000A72110000707226C30470722CC304707234DE007073400000060B06076FB800000A7211000070723EC304707244C304707234DE007073400000060B06076FB800000A7211000070720BF702707260C304707234DE007073400000060B06076FB800000A72110000707294C30470729AC304707234DE007073400000060B06076FB800000A721100007072B2C3047072B8C304707234DE007073400000060B06076FB800000A721100007072010F037072E4C304707234DE007073400000060B06076FB800000A721100007072F4C3047072FAC304707234DE007073400000060B06076FB800000A721100007072704C0370720AC404707234DE007073400000060B06076FB800000A72110000707234C40470723AC404707234DE007073400000060B06076FB800000A721100007072F7C103707248C404707234DE007073400000060B06076FB800000A7211000070729CAB02707262C404707234DE007073400000060B06076FB800000A062A000013300200600000002600001102A50B0000020A0312007B25000004288100000A810B0000010412007B26000004288100000A810B0000010512007B27000004288100000A810B0000010E0412007B28000004735300000A510E0512007B29000004288100000A810B0000012A1E02282300000A2AEA027C74000004284800000A6F4900000A7E7500000A282100000A2D1C027C74000004284800000A6F2500000A037B240000046F9100000A2A172ADA027C73000004284800000A6F2500000A037B210000046F9100000A2D17027C73000004284800000A037B200000046F9100000A2A172A000013300200480000002700001128AF00000A6FB000000A027B770000043315027B760000041FFE330B02167D76000004020A2B071673B70000060A06027B790000047D7800000406027B7B0000047D7A000004062A1E0228B00000062A1B300500EC02000023000011027B760000040B07450400000005000000C202000084010000BB02000038BD02000002157D7600000402147D8000000402147D810000040273AD0000067D82000004027B82000004027B780000047D73000004027B82000004027B7A0000047D74000004027C7C000004FE150B000002027B820000047C73000004284600000A2D24027B820000047C73000004284800000A6F4900000A7E7500000A282100000A391D010000022838000006027B800000042D1702027B82000004FE06AE00000673B900000A7D80000004027B800000046FBA00000A7D7D000004027B7D00000439F901000002027B7D0000046FBB00000A7D8300000402177D7600000438A500000002027C8300000428BC00000A7D7E000004027C7C000004027B7E0000047B200000047D25000004027C7C000004027B7E0000047B210000047D26000004027C7C000004027B7E0000047B220000047D27000004027C7C000004027B7E0000047B230000047D28000004027C7C000004027B7E0000047B240000047D2900000402027B7C0000048C0B0000027D7500000402187D76000004170ADD4901000002177D76000004027C8300000428BD00000A3A4BFFFFFF0228B8000006381C010000022838000006027B810000042D1702027B82000004FE06AF00000673B900000A7D81000004027B810000046FBE00000A7D7F000004027B7F00000439DC000000027B820000047C74000004284800000A6F4900000A7E7500000A282100000A2D2A027B820000047C74000004284800000A6F2500000A027B7F0000047B240000046F9100000A3991000000027C7C000004027B7F0000047B200000047D25000004027C7C000004027B7F0000047B210000047D26000004027C7C000004027B7F0000047B220000047D27000004027C7C000004027B7F0000047B230000047D28000004027C7C000004027B7F0000047B240000047D2900000402027B7C0000048C0B0000027D7500000402197D76000004170ADE1202157D76000004160ADE070228B5000006DC062A411C00000400000000000000E3020000E302000007000000000000001E027B750000042A1A73B600000A7A001B3002002200000024000011027B760000040A061759450200000001000000010000002ADE070228B8000006DC2A00000110000002001800021A0007000000001E027B750000042A7A02282300000A02037D760000040228AF00000A6FB000000A7D770000042A6602157D76000004027C83000004FE160B00001B6F3500000A2A0000001330020018000000270000111FFE73B70000060A06027D7900000406037D7B000004062A1E02282300000A2A1E02282300000A2A36020304050E0414283E0000062A000013300500750000000100001102282300000A02037D1600000402047D1700000402057D18000004020E047D190000040E052C4D726EC404700E05281800000A10050E056FBF00000A185B8D2B0000010A160B2B1906070E0507185A186F2000000A1F10281200000A9C0717580B070E056FBF00000A185B32DB02067D1A0000042A1E02282300000A2A3602030405140E0428410000062A0013300500670000000100001102282300000A02037D2000000402047D2100000402057D22000004020E057D240000040E042C3F0E046FBF00000A185B8D2B0000010A160B2B1906070E0407185A186F2000000A1F10281200000A9C0717580B070E046FBF00000A185B32DB02067D230000042A00133002006F000000280000110F00286200000A2D0F23000000000000F03F289000000A2A0F00286200000A162F0B72BEC40470734700000A7A0F00286200000A20AA000000310B7208C50470734700000A7A23000000000000F03F0A170B2B0906076C5A0A0717580B070F00286200000A31ED066C289000000A2A001330040032040000290000110F00284800000A7E7500000A282100000A2C0B7256C50470734700000A7A0F00284800000A6F4A00000A0A06250B39F0030000FE137E5B0000043A8B0100001F1E732700000A257292C5047016282800000A2572ACC5047017282800000A2572BCC5047018282800000A2572F0C5047019282800000A25720AC604701A282800000A257220C604701B282800000A257238C604701C282800000A257256C604701D282800000A257274C604701E282800000A257282C604701F09282800000A257296C604701F0A282800000A2572C0C604701F0B282800000A2572EEC604701F0C282800000A25721EC704701F0D282800000A25723AC704701F0E282800000A257250C704701F0F282800000A257260C704701F10282800000A257278C704701F11282800000A257292C704701F12282800000A2572BCC704701F13282800000A2572DCC704701F14282800000A257202C804701F15282800000A25722AC804701F16282800000A25725EC804701F17282800000A25728EC804701F18282800000A2572B0C804701F19282800000A2572C2C804701F1A282800000A2572E0C804701F1B282800000A2572E8C804701F1C282800000A2572F8C804701F1D282800000AFE13805B000004FE137E5B000004071202282900000A394502000008451E0000000500000014000000230000003200000041000000500000005F0000006E0000007D0000008C0000009B000000AA000000B9000000C8000000D7000000E6000000F500000004010000130100002201000031010000400100004F0100005E0100006D0100007C0100008B0100009A010000A9010000B801000038C201000023000000\
-4A78DEB141289000000A2A23F2D318F46A57D23D289000000A2A2305A3923A019D2340289000000A2A23EE05D594DD79B239289000000A2A2367545D759A90603A289000000A2A235CF241D07296603A289000000A2A23CBEB3E35F871603A289000000A2A23FE535ED5DAA4073C289000000A2A239161D9520D860B39289000000A2A231B1CC9F6EDB0303B289000000A2A233C60970F3715B53E289000000A2A232E1148F17678A33D289000000A2A2372C50AB8BA61E93C289000000A2A23F126374DD4E37D3F289000000A2A23FCBC18F88117CD3D289000000A2A232B87167144EE6441289000000A2A238D18571B1AA0E23C289000000A2A23E4D80666566C263B289000000A2A236DE57C8CFE72263B289000000A2A23F34857F6A102793A289000000A2A23862B7BDA6476913A289000000A2A2333BC404841EC873A289000000A2A232C3180D29057853D289000000A2A23526EDE98EDCDD73C289000000A2A2371C375567D716E3E289000000A2A23C20EBE6184E1DF44289000000A2A234289E0C9B8F3963F289000000A2A23A987687407A12040289000000A2A23E7FBA9F1548EF740289000000A2A236A4DF38E3335D940289000000A2A230000000000000000289000000A2A000013300400420600002A0000112300000000000000000A72110000700B0F01284800000A7E7500000A282100000A2C0B7224C90470734700000A7A0F02284800000A7E7500000A282100000A2C0B7250C90470734700000A7A0F01284800000A6F4A00000A0F02284800000A6F4A00000A282100000A2C02022A7E530000040F01284800000A6F4A00000A7278C904700F02284800000A6F4A00000A283800000A12026FC100000A2C100F00288D00000A085A6C289000000A2A0F01284800000A6F4A00000A250D39E1020000FE137E5C0000043AC80000001F0F732700000A25727EC9047016282800000A25728AC9047017282800000A2572A0C9047018282800000A2572B6C9047019282800000A2572CAC904701A282800000A2572D4C904701B282800000A2572DEC904701C282800000A2572E8C904701D282800000A2572F2C904701E282800000A257208CA04701F09282800000A25721CCA04701F0A282800000A25722ACA04701F0B282800000A25723ACA04701F0C282800000A257250CA04701F0D282800000A257260CA04701F0E282800000AFE13805C000004FE137E5C000004091204282900000A39F90100001104450F000000050000001800000035000000520000006F0000008C000000A9000000C6000000E3000000000100001D010000300100004A010000780100009201000038B10100000F00288D00000A0A7270CA04700B38A90100000F00288D00000A237B14AE47E17A843F5A0A7270CA04700B388C0100000F00288D00000A23FCA9F1D24D62503F5A0A7270CA04700B386F0100000F00288D00000A230000000000408F405A0A7270CA04700B38520100000F00288D00000A23FD87F4DBD781D33F5A0A7270CA04700B38350100000F00288D00000A23A60A462575029A3F5A0A7270CA04700B38180100000F00288D00000A234C378941602599405A0A7270CA04700B38FB0000000F00288D00000A23FBCBEEC9C342ED3F5A0A7270CA04700B38DE0000000F00288D00000A238DEDB5A0F7C6B03E5A0A7270CA04700B38C10000000F00288D00000A2395D626E80B2E113E5A0A7270CA04700B38A40000000F00288D00000A0A7282CA04700B38910000000F00288D00000A236666666666127140580A7282CA04700B2B770F00288D00000A2300000000000040405923CDCCCCCCCCCCFC3F5B236666666666127140580A7282CA04700B2B490F00288D00000A23CDCCCCCCCCCCFC3F5B0A7282CA04700B2B2F0F00288D00000A23000000000000F43F5A236666666666127140580A7282CA04700B2B0B729ACA0470734700000A7A07251305398502000011057270CA0470282100000A2D1611057282CA0470282100000A3A9901000038610200000F02284800000A6F4A00000A2513063975010000FE137E5D0000043A870000001F0A732700000A25727EC9047016282800000A25728AC9047017282800000A2572A0C9047018282800000A2572B6C9047019282800000A2572CAC904701A282800000A2572D4C904701B282800000A2572DEC904701C282800000A2572E8C904701D282800000A2572F2C904701E282800000A257208CA04701F09282800000AFE13805D000004FE137E5D00000411061207282900000A39CD0000001107450A0000007601000005000000160000002700000038000000490000005A0000006B0000007C0000008D000000389900000006237B14AE47E17A843F5B0A38600100000623FCA9F1D24D62503F5B0A384F01000006230000000000408F405B0A383E0100000623FD87F4DBD781D33F5B0A382D0100000623A60A462575029A3F5B0A381C01000006234C378941602599405B0A380B0100000623FBCBEEC9C342ED3F5B0A38FA00000006238DEDB5A0F7C6B03E5B0A38E9000000062395D626E80B2E113E5B0A38D800000072CACA0470734700000A7A06230000000000000000340B7251CB0470734700000A7A0F02284800000A6F4A00000A25130839970000001108721CCA0470282100000A3A910000001108722ACA0470282100000A2D2C1108723ACA0470282100000A2D2C11087250CA0470282100000A2D4011087260CA0470282100000A2D402B4C06236666666666127140590A2B49062366666666661271405923CDCCCCCCCCCCFC3F5A230000000000004040580A2B2706236666666666127140590A2B1906236666666666127140590A2B0B72CACA0470734700000A7A066C289000000A2A0000133002007B0000002B0000110F00288500000A186A2F0716287F00000A2A0F00288500000A186A330717287F00000A2A0F00288500000A186A5D166A330716287F00000A2A0F00288500000A6C28C200000A23000000000000F03F580B196A0A2B190F00288500000A065D166A330716287F00000A2A06186A580A066C0731E217287F00000A2A000330030067000000000000000F01286200000A0F02286200000A310B72B5CB0470734700000A7A0F0028C300000A2C1E73C400000A0F01286200000A0F02286200000A6FC500000A286800000A2A0F00286200000A73C600000A0F01286200000A0F02286200000A6FC500000A286800000A2A0013300200050100002C00001102A50D0000020A0312007B2B000004286800000A810E0000010412007B2C000004286400000A810D0000010512007B2D0000046C289000000A81110000010E0412007B2E0000046C289000000A81110000010E0512007B2F0000046C289000000A81110000010E0612007B300000046C289000000A81110000010E0712007B310000046C289000000A81110000010E0812007B320000046C289000000A81110000010E0912007B330000046C289000000A81110000010E0A12007B340000046C289000000A81110000010E0B12007B350000046C289000000A81110000010E0C12007B36000004286800000A810E0000010E0D12007B37000004286800000A810E0000012A00000013300700820300002D0000110F02286200000A172F0B7211CC0470734700000A7A0F03286200000A172F0B7255CC0470734700000A7A0F05288D00000A230000000000000000340B72A1CC0470734700000A7A73C700000A0A20E80300008D0D0000020B0F03286200000A0F02286200000A5A0C0F04286500000A0D23000000000000000013050F00288D00000A1306230000000000000000130723000000000000000013082300000000000000001309230000000000000000130A230000000000000000130B2300000000000028400F03286200000A6C5B1628C800000A289600000A130C0F00288D00000A0F01288D00000A0F03286200000A6C2300000000000059405A5B23000000000000F03F23000000000000F03F0F01288D00000A0F03286200000A6C2300000000000059405A5B5823000000000000F0BF0F03286200000A6C5A0F02286200000A6C5A28C900000A595B5A13081108289500000A130D110D1108110D592300000000000059405A28CA00000A2300000000000059405B58130817130438B50100001106130511080F05288D00000A581105340E11080F05288D00000A5813072B041105130711050F01288D00000A2300000000000059405B0F03286200000A6C5B5A13091109289500000A130E1109110E59230000000000408F405A289500000A230000000000A88140330E110E233D0AD7A3703DE23F5813091109181728CB00000A1309110B110958130B11080F05288D00000A581105341A1107110959130A1105110A59130611061828C800000A13062B2011081105320B11051109581308110813071105130A230000000000000000130607110417598F0D00000211047D2B00000407110417598F0D00000212031104110C5A28CC00000A7D2C00000407110417598F0D00000211057D2D00000407110417598F0D00000211087D2E00000407110417598F0D0000020F05288D00000A7D2F00000407110417598F0D00000211077D3000000407110417598F0D00000211097D3200000407110417598F0D000002110A7D3100000407110417598F0D00000211067D3300000407110417598F0D000002110B7D3400000407110417598F0D000002087D3600000407110417598F0D000002081104597D37000004110417581304110408301011062300000000000000003D36FEFFFF16130F2B2807110F8F0D000002110B7D350000040607110F8F0D000002710D0000026FCD00000A110F1758130F110F1104175932D0062A4E0F00288D00000A28CE00000A6C289000000A2A4E0F00288D00000A28CF00000A6C289000000A2A4E0F00288D00000A28D000000A6C289000000A2A620F00288D00000A7E2A00000428C900000A6C289000000A2A00133002002E0000002E0000112300000000000024400F0128D100000A6C28C900000A0A0F00288D00000A065A289500000A065B6C289000000A2A000013300300560000002F0000110F02284800000A7E7500000A282100000A2C190F0028D200000A0B12010F01284800000A28D300000A0A2B230F0028D200000A0C12020F01284800000A0F02284800000A28A600000A28D400000A0A06288100000A2A3E23555555555555D53F802A0000042A1E02282300000A2A000013300400B901000030000011026F4900000A7E7500000A282100000A2C02162A160A160B160C160D16130416130516130616130716130802178D2C000001130A110A161F7C9D110A6FD500000A130B16130C3861010000110B110C9A130911096F4900000A6F4A00000A25130D3924010000FE137E5E0000042D6D1E732700000A257201CD047016282800000A257217CD047017282800000A257239CD047018282800000A257259CD047019282800000A257289CD04701A282800000A25729DCD04701B282800000A2572B5CD04701C282800000A2572CBCD04701D282800000AFE13805E000004FE137E5E000004110D120E282900000A3999000000110E45080000000200000012000000210000002C0000003A0000004700000055000000630000002B7011043A850000000617600A1713042B7C072D79062000020000600A170B2B6D092D6A061A600A170D2B6211052D5E061F20600A1713052B5411062D500618600A1713062B4711072D43061F40600A1713072B3911082D35061F10600A1713082B2B082D28062000010000600A170C2B1C72E1CD047011096F4900000A7205CE0470283800000A734100000A7A110C1758130C110C110B8E693F94FEFFFF062A000000133004006C00000031000011026F4F00000A2C0716287F00000A2A0F02286200000A172F0B7221CE0470734100000A7A026F5100000A73D600000A0A160B0F03284600000A2D0D0F03284800000A28510000060B0F01284800000A0773D700000A0C08060F02286200000A17596FD800000A287F00000A2A133004007000000031000011026F4F00000A2C067ED900000A2A0F02286200000A172F0B7221CE0470734100000A7A026F5100000A73D600000A0A160B0F03284600000A2D0D0F03284800000A28510000060B0F01284800000A0773D700000A0C08060F02286200000A17596FDA00000A6F7400000A288100000A2A133004007700000031000011026F4F00000A2C067ED900000A2A0F02286200000A172F0B7221CE0470734100000A7A026F5100000A73D600000A0A160B0F04284600000A2D0D0F04284800000A28510000060B0F01284800000A0773D700000A0C08060F02286200000A17590F03286200000A6FDB00000A6F7400000A288100000A2A0013300200650000003200001102A5100000020A0312007B3A000004286800000A810E0000010412007B3B000004288100000A73DC00000A510512007B3C000004286800000A810E0000010E0412007B3D000004286800000A810E0000010E0512007B3E000004286800000A810E0000012A00000013300400D900000033000011026F4F00000A2C0673DD00000A2A0F02286200000A172F0B7221CE0470734100000A7A026F5100000A73D600000A0A160B0F03284600000A2D0D0F03284800000A28510000060B73DD00000A0C1203FE15100000020F01284800000A0773D700000A13051105060F02286200000A17596FDA00000A130411046FDE00000A2D0673DD00000A2A1203177D3A000004120311046F7400000A7D3B000004120311046FDF00000A17587D3C000004120311046FDF00000A11046FE000000A587D3D000004120311046FE000000A7D3E00000408096FE100000A082A00000013300200600000003400001128AF00000A6FB000000A027B860000043315027B850000041FFE330B02167D85000004020A2B071673C00000060A06027B880000047D8700000406027B8A0000047D8900000406027B8C0000047D8B00000406027B8E0000047D8D000004062A1E0228B90000062A13300500CE01000024000011027B850000040A064502000000050000008C01000038B201000002157D85000004027C87000004284600000A3A9B010000027C8B000004286200000A172F0B7221CE0470734100000A7A02167D8F000004027C8D000004284600000A2D1602027C8D000004284800000A28510000067D8F00000473DD00000A26027C90000004FE151000000202027C89000004284800000A027B8F00000473D700000A7D9200000402027B92000004027C87000004284800000A027C8B000004286200000A17596FE200000A7D9100000402167D9300000438DF000000027C90000004027B9300000417587D3A000004027C90000004027B91000004027B930000046FE300000A6F7400000A7D3B000004027C90000004027B91000004027B930000046FE300000A6FDF00000A17587D3C000004027C90000004027B91000004027B930000046FE300000A6FDF00000A027B91000004027B930000046FE300000A6FE000000A587D3D000004027C90000004027B91000004027B930000046FE300000A6FE000000A7D3E00000402027B900000048C100000027D8400000402177D85000004172A02157D8500000402257B9300000417587D93000004027B93000004027B910000046FE400000A3F0BFFFFFF162A1E027B840000042A1A73B600000A7A062A1E027B840000042A7A02282300000A02037D850000040228AF00000A6FB000000A7D860000042A00001330020026000000340000111FFE73C00000060A06027D8800000406037D8A00000406047D8C00000406057D8E000004062A0000133006008000000035000011026F4F00000A2D090F01284600000A2C067ED900000A2A0F04286200000A172F0B7221CE0470734100000A7A160A0F05284600000A2D0D0F05284800000A28510000060A0F01284800000A0673D700000A0B07026F5100000A73D600000A0F02284800000A0F03286200000A0F04286200000A17596FE500000A288100000A2A133002006C0000003600001128AF00000A6FB000000A027B960000043315027B950000041FFE330B02167D95000004020A2B071673C80000060A06027B980000047D9700000406027B9A0000047D9900000406027B9C0000047D9B00000406027B9E0000047D9D00000406027BA00000047D9F000004062A1E0228C10000062A133005005403000024000011027B950000040A06450300000005000000FC01000032030000383403000002157D95000004027C97000004284600000A3A1D030000027C9D000004286200000A172F0B7221CE0470734100000A7A02167DA1000004027C9F000004284600000A2D1602027C9F000004284800000A28510000067DA1000004027CA2000004FE151000000202027C99000004284800000A027BA100000473D700000A7DA400000402027BA4000004027C97000004284800000A027C9D000004286200000A17596FE200000A7DA300000402167DA500000402027BA30000046FE400000A7DA7000004027C9B000004286200000A16312B027C9B000004286200000A027BA30000046FE400000A2F1302027C9B000004286200000A17597DA700000402167DA60000043837010000027CA2000004027BA600000417587D3A000004027CA2000004027C97000004284800000A027BA5000004027BA3000004027BA60000046FE300000A6FDF00000A027BA5000004596F2000000A7D3B000004027CA2000004027BA3000004027BA60000046FE300000A6FDF00000A027BA5000004597D3E000004027CA20000047B3E000004163136027CA2000004027BA500000417587D3C000004027CA2000004027BA3000004027BA60000046FE300000A6FDF00000A7D3D0000042B18027CA2000004157D3C000004027CA2000004157D3D00000402027BA20000048C100000027D9400000402177D95000004172A02157D9500000402027BA3000004027BA60000046FE300000A6FDF00000A027BA3000004027BA60000046FE300000A6FE000000A587DA500000402257BA600000417587DA6000004027BA6000004027BA70000043FB8FEFFFF027CA2000004027BA600000417587D3A000004027CA2000004027C97000004284800000A027BA5000004027C97000004284800000A6FBF00000A027BA5000004596F2000000A7D3B000004027CA2000004027C97000004284800000A6FBF00000A027BA5000004597D3E000004027CA20000047B3E000004163130027CA2000004027BA500000417587D3C000004027CA2000004027C97000004284800000A6FBF00000A7D3D0000042B18027CA2000004157D3C000004027CA2000004157D3D00000402027BA20000048C100000027D9400000402187D95000004172A02157D95000004162A1E027B940000042A1A73B600000A7A062A1E027B940000042A7A02282300000A02037D950000040228AF00000A6FB000000A7D960000042A133002002E000000360000111FFE73C80000060A06027D9800000406037D9A00000406047D9C00000406057D9E000004060E047DA0000004062A000013300400EE00000037000011026F4F00000A2C067ED900000A2A0F04286200000A172F0B7221CE0470734100000A7A160A0F06284600000A2D0D0F06284800000A28510000060A0F01284800000A0673D700000A0B0F05286200000A172F3307026F5100000A73D600000A0F04286200000A17596FDA00000A6F7700000A0F02286200000A6F7800000A6F7400000A0C2B3807026F5100000A73D600000A0F04286200000A17590F05286200000A6FDB00000A6F7700000A0F02286200000A6F7800000A6F7400000A0C087E7500000A287600000A2C0708288100000A2A0F03284600000A2C067ED900000A2A0F03284800000A288100000A2A4A0F00284800000A28E600000A288100000A2A4A0F00284800000A28E700000A288100000A2A13300400F9000000350000110F00284600000A2C067E9400000A2A0F02286200000A172F0B7221CE0470734100000A7A160A0F04284600000A2D0D0F04284800000A28510000060A0F01284800000A0673D700000A0B0F0328C300000A2D0A0F03286200000A172F47070F00284800000A0F02286200000A17596FDA00000A6FDE00000A2C23070F00284800000A0F02286200000A17596FDA00000A6FDF00000A1758286800000A2A16286800000A2A070F00284800000A0F02286200000A17590F03286200000A6FDB00000A6FDE00000A2C2A070F00284800000A0F02286200000A17590F03286200000A6FDB00000A6FDF00000A1758286800000A2A16286800000A2A00000013300600B1000000350000110F00284600000A2D090F01284600000A2C067ED900000A2A0F05286200000A172F0B7221CE0470734100000A7A160A0F06284600000A2D0D0F06284800000A28510000060A0F01284800000A0673D700000A0B070F00284800000A0F05286200000A17596FD800000A2C2A070F00284800000A0F02284800000A0F04286200000A0F05286200000A17596FE500000A288100000A2A0F03284600000A2C067ED900000A2A0F03284800000A288100000A2A1E02282300000A2A000000133003004E000000380000111B8D2D0000010A06167E3F0000040B1201282A00000AA20617720D000070A206187E400000040C1202282A00000AA20619720D000070A2061A7E410000040D1203282A00000AA20628E800000A2A0000033001004C0000000000000028E900000A6FEA00000A6FEB00000A6FEC00000A803F00000428E900000A6FEA00000A6FEB00000A6FED00000A804000000428E900000A6FEA00000A6FEB00000A6FEE00000A80410000042A1B300400D512000039000011725FCE04700A0F00284600000A2D1B0F00284800000A7E7500000A6F9100000A2D080F00284800000A0A7269CE04700B0F01284600000A2D200F01284800000A7E7500000A6F9100000A2D0D0F01284800000A6F4A00000A0B73F000000A0C7211000070731300000A0D097271CE04706FF100000A260972BDCE04706FF100000A260972110000706FF100000A26077269CE0470282100000A39F40900000872F1CE0470067217CF0470283800000A6FF200000A260872F1CE0470067214D00470283800000A6FF200000A260872F1CE04700672BBD00470283800000A6FF200000A260872F1CE047006723CD20470283800000A6FF200000A26087299D304700672BDD30470283800000A6FF200000A26087299D304700672B8D40470283800000A6FF200000A26087299D304700672A1D50470283800000A6FF200000A26087299D3047006728AD60470283800000A6FF200000A26087299D30470067213D90470283800000A6FF200000A26087299D304700672A6DB0470283800000A6FF200000A26087299D304700672FBDC0470283800000A6FF200000A26087299D304700672D2DE0470283800000A6FF200000A26087299D30470067293E00470283800000A6FF200000A26087299D3047006725CE20470283800000A6FF200000A26087299D30470067203E50470283800000A6FF200000A26087299D304700672B2E70470283800000A6FF200000A26087299D304700672B5E90470283800000A6FF200000A26087299D3047006729AEB0470283800000A6FF200000A26087299D30470067289ED0470283800000A6FF200000A26087299D304700672B8EF0470283800000A6FF200000A26087299D304700672F1F10470283800000A6FF200000A26087299D30470067290F40470283800000A6FF200000A26087299D3047006723BF70470283800000A6FF200000A26087299D304700672FEF90470283800000A6FF200000A26087299D3047006725FFB0470283800000A6FF200000A26087299D304700672A4FC0470283800000A6FF200000A26087299D30470067249FE0470283800000A6FF200000A26087299D304700672BEFF0470283800000A6FF200000A26087299D30470067231010570283800000A6FF200000A26087299D30470067270020570283800000A6FF200000A26087299D30470067205040570283800000A6FF200000A26087299D3047006721C050570283800000A6FF200000A26087299D30470067257060570283800000A6FF200000A26087299D304700672EA070570283800000A6FF200000A26087299D3047006728F090570283800000A6FF200000A26087299D304700672A20A0570283800000A6FF200000A26087299D304700672850C0570283800000A6FF200000A26087299D3047006723C0E0570283800000A6FF200000A26087299D304700672F70F0570283800000A6FF200000A26087299D304700672AE110570283800000A6FF200000A26087299D3047006727D130570283800000A6FF200000A26087299D30470067254150570283800000A6FF200000A26087299D304700672CF160570283800000A6FF200000A26087299D30470067212180570283800000A6FF200000A26087299D304700672DF190570283800000A6FF200000A26087299D304700672581B0570283800000A6FF200000A26087299D304700672531C0570283800000A6FF200000A26087299D304700672721D0570283800000A6FF200000A26087299D3047006729D1F0570283800000A6FF200000A26087299D304700672B4210570283800000A6FF200000A26087299D3047006726D230570283800000A6FF200000A26087299D30470067218250570283800000A6FF200000A26087299D304700672B1260570283800000A6FF200000A26087299D30470067240280570283800000A6FF200000A26087299D3047006722B290570283800000A6FF200000A26087299D304700672762A0570283800000A6FF200000A26087299D304700672CD2B0570283800000A6FF200000A26087299D304700672462D0570283800000A6FF200000A26087299D304700672D92E0570283800000A6FF200000A26087299D304700672FC2F0570283800000A6FF200000A26087299D30470067235310570283800000A6FF200000A26087299D30470067284320570283800000A6FF200000A26087299D30470067263340570283800000A6FF200000A26087299D304700672CA350570283800000A6FF200000A26087299D304700672C9360570283800000A6FF200000A26087299D304700672D0370570283800000A6FF200000A26087299D304700672113D0570283800000A6FF200000A26087299D304700672183E0570283800000A6FF200000A26087299D304700672993F0570283800000A6FF200000A26087299D3047006727A400570283800000A6FF200000A26087299D304700672A3410570283800000A6FF200000A26087299D304700672CC420570283800000A6FF200000A26087299D30470067267440570283800000A6FF200000A26087299D30470067252450570283800000A6FF200000A26087299D30470067287460570283800000A6FF200000A26087299D30470067268470570283800000A6FF200000A26087299D30470067249480570283800000A6FF200000A26087299D304700672A6490570283800000A6FF200000A26087299D304700672214B0570283800000A6FF200000A26087299D304700672AA4C0570283800000A6FF200000A26087299D304700672E74D0570283800000A6FF200000A26087299D304700672444F0570283800000A6FF200000A26087299D30470067281500570283800000A6FF200000A26087299D3047006729C510570283800000A6FF200000A26087299D30470067245530570283800000A6FF200000A26087299D304700672B6540570283800000A6FF200000A26087299D304\
-7006723F560570283800000A6FF200000A26087299D3047006727A570570283800000A6FF200000A26087299D304700672CD580570283800000A6FF200000A26087299D304700672205A0570283800000A6FF200000A26087299D3047006729D5B0570283800000A6FF200000A26087299D304700672925C0570283800000A6FF200000A26087299D304700672875D0570283800000A6FF200000A26087299D304700672B25E0570283800000A6FF200000A26087299D304700672CF5F0570283800000A6FF200000A26087299D304700672AC610570283800000A6FF200000A26087299D30470067289630570283800000A6FF200000A26087299D3047006721E650570283800000A6FF200000A26087299D3047006724F660570283800000A6FF200000A26087299D30470067278670570283800000A6FF200000A26087299D304700672BD680570283800000A6FF200000A26087299D3047006721C6A0570283800000A6FF200000A26087299D304700672476B0570283800000A6FF200000A26087299D304700672926C0570283800000A6FF200000A26087299D304700672F36D0570283800000A6FF200000A26087299D304700672026F0570283800000A6FF200000A26087299D3047006727D700570283800000A6FF200000A26087299D304700672A0710570283800000A6FF200000A26087299D304700672C7720570283800000A6FF200000A26087299D3047006722E750570283800000A6FF200000A2609725FCE047008286B0000066F1500000A26077269CE0470282100000A2D100772C3770570282100000A39D0000000086FF300000A0872F377057006720F780570283800000A6FF200000A260872F37705700672AC780570283800000A6FF200000A260872F3770570067245790570283800000A6FF200000A260872EE7905700672147A0570283800000A6FF200000A260872EE7905700672F77A0570283800000A6FF200000A260872EE7905700672DE7B0570283800000A6FF200000A260872EE7905700672A97C0570283800000A6FF200000A260872EE7905700672747D0570283800000A6FF200000A260972537E057008286B0000066F1500000A26077269CE0470282100000A2D100772837E0570282100000A39FE000000086FF300000A087299D3047006729D7E0570283800000A6FF200000A26087299D304700672CC7F0570283800000A6FF200000A26087299D304700672F7800570283800000A6FF200000A26087299D304700672A4820570283800000A6FF200000A26087299D304700672D1830570283800000A6FF200000A26087299D304700672FE840570283800000A6FF200000A26087299D30470067227860570283800000A6FF200000A26087299D30470067250870570283800000A6FF200000A26087299D30470067291880570283800000A6FF200000A26087299D304700672AA8E0570283800000A6FF200000A2609720D90057008286B0000066F1500000A26077269CE0470282100000A2D0D077227900570282100000A2C46086FF300000A0872F1CE0470067237900570283800000A6FF200000A26087299D304700672CA930570283800000A6FF200000A260972BB94057008286B0000066F1500000A26077269CE0470282100000A2D0D0772CB940570282100000A2C2F086FF300000A087299D304700672EB940570283800000A6FF200000A2609729C96057008286B0000066F1500000A26077269CE0470282100000A2D100772BC960570282100000A398B000000086FF300000A087299D304700672CC960570283800000A6FF200000A26087299D304700672CF9C0570283800000A6FF200000A26087299D304700672609F0570283800000A6FF200000A26087299D3047006728DA00570283800000A6FF200000A26087299D30470067274A10570283800000A6FF200000A26097231A2057008286B0000066F1500000A26077269CE0470282100000A2D10077241A20570282100000A398E030000086FF300000A087299D30470067263A20570283800000A6FF200000A26087299D304700672A2A80570283800000A6FF200000A26087299D304700672AFB00570283800000A6FF200000A26087299D30470067206B30570283800000A6FF200000A26087299D30470067217BB0570283800000A6FF200000A26087299D30470067252BD0570283800000A6FF200000A26087299D30470067295C30570283800000A6FF200000A26081B8D2D00000113051105167299D30470A211051706A2110518729CC90570A211051906A211051A72FDCA0570A2110528E800000A6FF200000A26087299D304700672CCD10570283800000A6FF200000A26087299D304700672E1D70570283800000A6FF200000A26081B8D2D00000113061106167299D30470A211061706A211061872ECDD0570A211061906A211061A7253DF0570A2110628E800000A6FF200000A26081B8D2D00000113071107167299D30470A211071706A2110718722AE60570A211071906A211071A7289E70570A2110728E800000A6FF200000A26081B8D2D00000113081108167299D30470A211081706A21108187256EE0570A211081906A211081A72B5EF0570A2110828E800000A6FF200000A26087299D30470067282F60570283800000A6FF200000A26081B8D2D00000113091109167299D30470A211091706A2110918721BFE0570A211091906A211091A72A2FF0570A2110928E800000A6FF200000A26081B8D2D000001130A110A167299D30470A2110A1706A2110A18726F060670A2110A1906A2110A1A72D6070670A2110A28E800000A6FF200000A26081B8D2D000001130B110B167299D30470A2110B1706A2110B1872AB0E0670A2110B1906A2110B1A7212100670A2110B28E800000A6FF200000A26087299D304700672E7160670283800000A6FF200000A26087299D304700672DE1E0670283800000A6FF200000A26081B8D2D000001130C110C167299D30470A2110C1706A2110C187225250670A2110C1906A2110C1A728C260670A2110C28E800000A6FF200000A26087299D304700672612D0670283800000A6FF200000A26087299D30470067250350670283800000A6FF200000A26087299D304700672CD370670283800000A6FF200000A26087299D304700672143E0670283800000A6FF200000A26087299D30470067283440670283800000A6FF200000A26087299D30470067226470670283800000A6FF200000A2609727549067008286B0000066F1500000A260F02289200000A2C1B096F1600000A6F4D00000A1720A00F000028040000063816010000281C00000A096F1600000A73F400000A6FF500000ADE62130411046FF600000A2D31091672974906706FF700000A260972D34906706F1500000A26096F1600000A6F4D00000A1720A00F000028040000062B24281C00000A720D4A067011046FF600000A130D120D282A00000A281800000A6F1D00000AFE1A281C00000A72110000706F1D00000A281C00000A72154A0670286000000672414A0670283800000A6F1D00000A281C00000A72110000706F1D00000A281C00000A726D4A06700672994A0670283800000A6F1D00000A281C00000A72110000706F1D00000A281C00000A72FF4A06706F1D00000A281C00000A728E4B06706F1D00000A281C00000A721B4C06700672414C0670283800000A6F1D00000A140C140D2A000000011000000000BA1117D11162660000011B300200F50200003A0000110F00284800000A6F4900000A72110000706F9100000A2C0B729F4C0670734700000A7A72110000700A0F01284600000A2D130F01284800000A6F4900000A6FBF00000A2D08725FCE04700A2B080F01284800000A0A72FB4C067073F800000A0B73F900000A0C076FFA00000A08722F4D06706FF100000A260872774D06706FF100000A260872B34D06706FF100000A260872ED4D06706FF100000A260872110000706FF100000A2608722F4E06706F1500000A26080F00284800000A6F1500000A260872514E06706FF100000A260872554E06706F1500000A2608066F1500000A260872514E06706FF100000A260872854E06706FF100000A260872D94E06706FF100000A2608722D4F06706FF100000A260872814F06706FF100000A260872110000706FF100000A260872D54F06706FF100000A2608722D5006706FF100000A2608725F5006706FF100000A260872A95006706FF100000A260872ED5006706FF100000A260872435106706FF100000A260872F25206706FF100000A260872285306706FF100000A2608726E5306706FF100000A260872B85306706FF100000A260872110000706FF100000A260872F15406706FF100000A260872110000706FF100000A260872135506706FF100000A260872295506706FF100000A2608724B5506706FF100000A260872110000706FF100000A260872875506706FF100000A260872BD5506706FF100000A260872C95506706FF100000A2608720D5606706FF100000A2608721B5606706FF100000A260872D05606706FF100000A260872DA5606706FF100000A2608720D5606706FF100000A260872E65606706FF100000A260872D05606706FF100000A260872110000706FF100000A260872995706706FF100000A260872B15706706FF100000A260872D55706706FF100000A260872135806706FF100000A260872110000706FF100000A2608721B5806706FF100000A2608723F5806706FF100000A26086F1600000A0773FB00000A0D096FFC00000A26076FFD00000ADE0A072C06076F3500000ADC2A000000411C000002000000600000008A020000EA0200000A000000000000001B300500660400003B000011140A140B72110000700C0F00286200000A16320A0F00286200000A19310B726D580670734100000A7A0F01284600000A2D130F01284800000A7E7500000A282100000A2C08725FCE04700C2B0D0F01284800000A6F4900000A0C72FB4C067073F800000A250A130773FE00000A0D73F900000A130472110000701305066FFA00000A09066FFF00000A0F00286200000A182E0D0F00286200000A194030020000110472BD5806706FF100000A26110472FB5806706FF100000A26110472255906706FF100000A26110472110000706FF100000A26110472555906706FF100000A26110472755906706FF100000A26110472225A06706FF100000A26110472585A06706FF100000A26110472AE5A06706FF100000A26110472065B06706FF100000A261104726A5B06706FF100000A26110472A85B06706FF100000A26110472105C06706FF100000A261104727C5C06706FF100000A26110472B45C06706FF100000A26110472FC5C06706FF100000A26110472485D06706FF100000A260F00286200000A18330D1104727C5D06706FF100000A26110472D65D06706FF100000A261104721C5E06706FF100000A26110472345E06706FF100000A261104723E5E06706FF100000A26110472BD5506706FF100000A26110472445E06706FF100000A26110472505E06706FF100000A261104728C5E06706FF100000A26110472BA5E06706FF100000A26110472EC5E06706FF100000A26110472FE5E06706FF100000A261104720D5606706FF100000A2604280001000A2C29110472065F06706FF100000A26110472895F06706FF100000A26110472A35F06706FF100000A262B0D110472FF5F06706FF100000A26110472D05606706FF100000A26110472DA5606706FF100000A261104720D5606706FF100000A26110472D26006706FF100000A26110472D05606706FF100000A26110472135806706FF100000A260911046F1600000A6F0101000A096FFC00000A261104166F1F00000A0F00286200000A3A8A000000110472246106706FF100000A26110472846106706FF100000A26110472B26106706FF100000A26110472EE6106706FF100000A261104722C6206706F1500000A261104086F1500000A26110472514E06706FF100000A260911046F1600000A6F0101000A096F0201000A250B1308281C00000A076F0301000ADDBF00000011082C0711086F3500000ADC110472546206706F1500000A261104086F1500000A26110472766206706F1500000A260F00286200000A130911091759450300000002000000180000002E0000002B40110472A86206706FF100000A2672B262067013052B2A110472C46206706FF100000A2672E462067013052B141104720C6306706FF100000A26721A63067013050911046F1600000A6F0101000A096FFC00000A26281C00000A723C6306700872746306701105280401000A6F1D00000ADE0C11072C0711076F3500000ADCDE0F130611066F0501000A734100000A7ADE23072C0E076F0601000A2D06076F0701000A062C0E066F0801000A2C06066FFD00000ADC2A000041640000020000005203000010000000620300000C000000000000000200000068000000BB030000230400000C0000000000000000000000040000002D040000310400000F0000003E00000102000000040000003E0400004204000023000000000000001B300400BB0C00003C00001172FB4C067073F800000A0A7269CE04700B0F00284600000A2D200F00284800000A7E7500000A6F9100000A2D0D0F00284800000A6F4A00000A0B73F900000A0C73FE00000A0D077269CE0470287600000A39B20100000872A06306706FF100000A260872F86306706FF100000A260872110000706FF100000A260872326406706F1500000A26080F00284800000A6F1500000A260872686406706FF100000A2608726E6406706FF100000A260872110000706FF100000A260872AC6406706FF100000A260872555906706FF100000A260872F06406706FF100000A260872086506706FF100000A2608723C6506706FF100000A260872866506706FF100000A260872BD5506706FF100000A260872906506706FF100000A260872086606706FF100000A2608721A6606706FF100000A260872110000706FF100000A260872246606706FF100000A2608726E6606706FF100000A260872696706706FF100000A260872AB6706706FF100000A260872E76706706FF100000A260872356806706FF100000A260872716806706FF100000A260872D56806706FF100000A2608721B6906706FF100000A260872110000706FF100000A260872416906706FF100000A260872BD5506706FF100000A260872816906706FF100000A260872086606706FF100000A2608721A6606706FF100000A260872110000706FF100000A260872110000706FF100000A2608728E6A06706FF100000A260872FE6A06706FF100000A260872386B06706FF100000A260872706B06706FF100000A260872110000706FF100000A2608729E6B06706FF100000A260872026C06706FF100000A2608728B6C06706FF100000A260872A95006706FF100000A260872C76C06706FF100000A26077269CE0470282100000A2C0E08721B6D06706FF100000A262B0C0872386F06706FF100000A260872F25206706FF100000A260872866F06706FF100000A260872CA6F06706FF100000A260872717006706FF100000A2608727F7006706FF100000A2608721C7106706FF100000A260872A95006706FF100000A260872547106706FF100000A26077269CE0470282100000A2C0E0872A87106706FF100000A262B0C0872386F06706FF100000A2608727B7206706FF100000A260872110000706FF100000A2608729D7206706FF100000A260872110000706FF100000A260872B17206706FF100000A260872110000706FF100000A260872135506706FF100000A260872295506706FF100000A260872D57206706FF100000A260872110000706FF100000A260872875506706FF100000A260872BD5506706FF100000A2608722D7306706FF100000A2608720D5606706FF100000A260872757306706FF100000A260872E57306706FF100000A260872657406706FF100000A2608728B7406706FF100000A260872110000706FF100000A260872977406706FF100000A2608720D5606706FF100000A260872CB7406706FF100000A2608723D7506706FF100000A260872657406706FF100000A2608728B7406706FF100000A260872110000706FF100000A260872C07506706FF100000A2608720D5606706FF100000A260872F47506706FF100000A260872647606706FF100000A260872E47606706FF100000A260872D05606706FF100000A260872110000706FF100000A260872087706706FF100000A2608720D5606706FF100000A260872407706706FF100000A260872A67706706FF100000A260872E47606706FF100000A260872D05606706FF100000A260872110000706FF100000A260872995706706FF100000A260872B15706706FF100000A2608721C7806706FF100000A260872135806706FF100000A260872110000706FF100000A2608721B5806706FF100000A2608723F5806706FF100000A260872110000706FF100000A260872747806706FF100000A260872847806706FF100000A260872110000706FF100000A2608729C7806706FF100000A2608720D5606706FF100000A260872FE7806706FF100000A260872267906706FF100000A260872D05606706FF100000A260872110000706FF100000A260872587906706FF100000A260872A27906706FF100000A2608725F7A06706FF100000A260872A17A06706FF100000A260872110000706FF100000A260872B17A06706FF100000A260872110000706FF100000A26077269CE0470282100000A39840000000872C57A06706FF100000A260872567B06706FF100000A260872D67B06706FF100000A260872110000706FF100000A2608724E7C06706FF100000A260872D77C06706FF100000A260872BD5506706FF100000A2608725C7D06706FF100000A260872B27D06706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772087E0670282100000A2C4808721E7E06706FF100000A260872BD5506706FF100000A260872A77E06706FF100000A260872017F06706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772397F0670282100000A2C4808724B7F06706FF100000A260872BD5506706FF100000A260872D07F06706FF100000A260872268006706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D07725A800670282100000A2C480872788006706FF100000A260872BD5506706FF100000A260872098106706FF100000A2608726B8106706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772CB940570282100000A2C480872AB8106706FF100000A260872BD5506706FF100000A2608723E8206706FF100000A260872A28206706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D077241A20570282100000A2C480872E48206706FF100000A260872BD5506706FF100000A260872798306706FF100000A260872DF8306706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772BC960570282100000A2C480872238406706FF100000A260872BD5506706FF100000A260872A68406706FF100000A260872FA8406706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D077227900570282100000A2C4808722C8506706FF100000A260872BD5506706FF100000A260872AF8506706FF100000A260872038606706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D077235860670282100000A2C480872558606706FF100000A260872BD5506706FF100000A260872E88606706FF100000A2608724C8706706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772837E0570282100000A2C4808728E8706706FF100000A260872BD5506706FF100000A2608721B8806706FF100000A260872798806706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772B5880670282100000A2C480872CD8806706FF100000A260872BD5506706FF100000A260872588906706FF100000A260872B48906706FF100000A260872E67D06706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D0772C3770570282100000A2C480872EE8906706FF100000A260872BD5506706FF100000A260872918A06706FF100000A260872078B06706FF100000A260872E47606706FF100000A260872135806706FF100000A26077269CE0470282100000A2D0D07725B8B0670282100000A2C480872938B06706FF100000A260872BD5506706FF100000A2608723E8C06706FF100000A260872BC8C06706FF100000A260872E47606706FF100000A260872135806706FF100000A26077269CE0470282100000A39CC0000000872188D06706FF100000A260872BD5506706FF100000A260872948D06706FF100000A260872E28D06706FF100000A260872E67D06706FF100000A260872135806706FF100000A260872110000706FF100000A2608720E8E06706FF100000A2608727A8E06706FF100000A260872D08E06706FF100000A260872FE5E06706FF100000A260872BD5506706FF100000A2608727D8F06706FF100000A260872E58F06706FF100000A260872E67D06706FF100000A260872135806706FF100000A260872110000706FF100000A2608723B9006706FF100000A2608724D9006706FF100000A26066FFA00000A09086F1600000A6F0101000A09066FFF00000A096F0901000A096FFC00000A26281C00000A72DC900670077269CE0470282100000A2D090F00284800000A2B0572E89006707208910670283800000A6F1D00000A066FFD00000ADE0A062C06066F3500000ADC2A00411C0000020000000B000000A50C0000B00C00000A00000000000000133004000C0100003D00001172110000700A160C723C910670280A01000A746E0000010D091A6F0B01000A091A6F0C01000A09166F0D01000A09280E01000A6F0F01000A096F1001000A7472000001130411046F1101000A13051105281201000A731301000A130611066F1401000A0A11046F1501000A11066F1601000A066F4900000A178D2C00000113071107161F2E9D11076FD500000A0B078E6919336607169A287900000A7E3F0000043104170C2B5E07169A287900000A7E3F000004331307179A287900000A7E400000043104170C2B3C07169A287900000A7E3F000004332D07179A287900000A7E40000004331E07189A287900000A7E41000004310F170C2B0B72AE910670731701000A7A08287F00000A2A13300500491500003E00001173F000000A0A0672249206706FF200000A260672110000706FF200000A260672829206706FF200000A260672DC9206706FF200000A260672E19306706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672239406706FF200000A260672249506706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672D99506706FF200000A260672249506706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672DE9606706FF200000A260672039806706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672319806706FF200000A260672039806706FF200000A260672FB9306706FF200000A260672110000706FF200000A2606723E9906706FF200000A260672039806706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672919A06706FF200000A260672249506706FF200000A260672FB9306706FF200000A260672110000706FF200000A260672A89B06706FF200000A260672DA9B06706FF200000A260672E19306706FF200000A260672699C06706FF200000A260672110000706FF200000A260672959C06706FF200000A260672829D06706FF200000A2606729C9D06706FF200000A260672C49D06706FF200000A260672110000706FF200000A2606724B9E06706FF200000A260672039806706FF200000A260672FA9E06706FF200000A260672110000706FF200000A260672A59F06706FF200000A260672E19306706FF200000A260672C49D06706FF200000A260672110000706FF200000A2606725EA006706FF200000A260672E19306706FF200000A260672110000706FF200000A260672EBA006706FF200000A260672829D06706FF200000A260672C0A106706FF200000A260672C49D06706FF200000A260672110000706FF200000A260672EEA106706FF200000A260672039806706FF200000A260672110000706FF200000A26067242A206706FF200000A260672039806706FF200000A260672DBA206706FF200000A26067237A306706FF200000A260672110000706FF200000A260672CEA306706FF200000A260672829D06706FF200000A260672ABA406706FF200000A260672110000706FF200000A26067254A506706FF200000A260672D0A506706FF200000A260672110000706FF200000A26067287A606706FF200000A260672829D06706FF200000A260672C0A106706FF200000A260672C49D06706FF200000A260672110000706FF200000A26067298A706706FF200000A2606724BA806706FF200000A2606727BA806706FF200000A260672110000706FF200000A260672C9A806706FF200000A2606724BA806706FF200000A2606727BA806706FF200000A260672110000706FF200000A2606727EA906706FF200000A26067225AA06706FF200000A260672DBA206706FF200000A26067293AA06706FF200000A260672110000706FF200000A26067226AB06706FF200000A260672C1AB06706FF200000A260672110000706FF200000A26067292AC06706FF200000A260672E19306706FF200000A260672C49D06706FF200000A260672110000706FF200000A2606724FAD06706FF200000A260672039806706FF200000A260672110000706FF200000A2606729DAD06706FF200000A260672039806706FF200000A260672110000706FF200000A26067246AE06706FF200000A2606727AAE06706FF200000A260672C2AE06706FF200000A260672110000706FF200000A260672E2AE06706FF200000A2606723AAF06706FF200000A260672110000706FF200000A26067268AF06706FF200000A26067241B006706FF200000A260672AFB006706FF200000A260672110000706FF200000A26067276B106706FF200000A26067241B006706FF200000A26067243B206706FF200000A260672110000706FF200000A26067234B306706FF200000A260672B9B306706FF200000A26067215B406706FF200000A260672110000706FF200000A26067237B406706FF200000A260672B9B306706FF200000A260672B5B406706FF200000A260672110000706FF200000A260672F7B406706FF200000A2606726BB506706FF200000A26067215B406706FF200000A260672110000706FF200000A260672BBB506706FF200000A2606726BB506706FF200000A260672B5B406706FF200000A260672110000706FF200000A2606722DB606706FF200000A2606723AAF06706FF200000A260672110000706FF200000A26067287B606706FF200000A2606723AAF06706F\
-F200000A260672110000706FF200000A260672D9B606706FF200000A26067253B706706FF200000A2606724BA806706FF200000A260672110000706FF200000A260672C3B706706FF200000A2606723AAF06706FF200000A260672110000706FF200000A2606721FB806706FF200000A260672E19306706FF200000A2606729DB806706FF200000A260672110000706FF200000A26067209B906706FF200000A260672E19306706FF200000A260672110000706FF200000A26067283B906706FF200000A26067220BA06706FF200000A260672E19306706FF200000A260672110000706FF200000A260672D3BA06706FF200000A260672E19306706FF200000A260672110000706FF200000A2606721BBB06706FF200000A2606724BA806706FF200000A2606725DBB06706FF200000A260672110000706FF200000A260672D5BB06706FF200000A26067203BC06706FF200000A260672829D06706FF200000A26067241BC06706FF200000A260672110000706FF200000A26067289BC06706FF200000A260672DFBC06706FF200000A260672FDBC06706FF200000A260672110000706FF200000A26067259BD06706FF200000A260672DFBC06706FF200000A260672E8BD06706FF200000A260672110000706FF200000A26067244BE06706FF200000A260672DFBC06706FF200000A260672110000706FF200000A2606727CBE06706FF200000A260672E19306706FF200000A260672BCBE06706FF200000A260672110000706FF200000A2606720ABF06706FF200000A260672829D06706FF200000A26067280BF06706FF200000A260672110000706FF200000A260672B0BF06706FF200000A260672DFBC06706FF200000A260672110000706FF200000A260672E8BF06706FF200000A260672DFBC06706FF200000A260672110000706FF200000A26067220C006706FF200000A26067271C106706FF200000A260672110000706FF200000A260672A2C306706FF200000A260672D0C306706FF200000A260672DFBC06706FF200000A26067293C406706FF200000A260672A0C506706FF200000A260672110000706FF200000A2606729DC606706FF200000A260672829D06706FF200000A26067238C706706FF200000A26067270C706706FF200000A260672110000706FF200000A260672CAC706706FF200000A260672829D06706FF200000A260672110000706FF200000A26067218C806706FF200000A260672829D06706FF200000A260672110000706FF200000A26067266C806706FF200000A260672D0C806706FF200000A260672829D06706FF200000A260672110000706FF200000A26067285C906706FF200000A26067254CA06706FF200000A260672110000706FF200000A26067278CA06706FF200000A26067227CB06706FF200000A26067255CB06706FF200000A260672110000706FF200000A260672B7CB06706FF200000A26067254CA06706FF200000A260672110000706FF200000A260672FBCB06706FF200000A2606724BA806706FF200000A260672110000706FF200000A26067249CC06706FF200000A2606724BA806706FF200000A260672110000706FF200000A26067297CC06706FF200000A260672E19306706FF200000A26067270C706706FF200000A260672110000706FF200000A2606720BCD06706FF200000A260672E19306706FF200000A260672110000706FF200000A2606723FCD06706FF200000A26067254CA06706FF200000A260672110000706FF200000A2606720ACE06706FF200000A26067254CA06706FF200000A260672110000706FF200000A260672C1CE06706FF200000A260672DFBC06706FF200000A260672110000706FF200000A26067205CF06706FF200000A26067271CF06706FF200000A260672829D06706FF200000A260672110000706FF200000A26067250D006706FF200000A26067286D006706FF200000A260672C2AE06706FF200000A260672110000706FF200000A260672E4D006706FF200000A260672039806706FF200000A260672110000706FF200000A2606723AD106706FF200000A260672039806706FF200000A26067207D206706FF200000A260672110000706FF200000A2606727DD206706FF200000A260672E19306706FF200000A260672110000706FF200000A260672DDD206706FF200000A2606724BA806706FF200000A260672110000706FF200000A26067229D306706FF200000A2606724BA806706FF200000A260672110000706FF200000A2606727DD306706FF200000A2606724BA806706FF200000A260672110000706FF200000A260672D1D306706FF200000A2606724BA806706FF200000A260672110000706FF200000A26067235D406706FF200000A2606724BA806706FF200000A260672BAD406706FF200000A260672110000706FF200000A26067228D506706FF200000A26067270D506706FF200000A260672110000706FF200000A26067223D906706FF200000A26067259D906706FF200000A2606728EDB06706FF200000A260672110000706FF200000A260672F4DB06706FF200000A260672CBDE06706FF200000A26067215DF06706FF200000A260672110000706FF200000A26067285DF06706FF200000A2606727AE106706FF200000A260672110000706FF200000A2606723FE206706FF200000A260672039806706FF200000A260672110000706FF200000A26067270E606706FF200000A260672E19306706FF200000A260672110000706FF200000A260672B6E606706FF200000A260672EAE606706FF200000A260672039806706FF200000A260672110000706FF200000A26067256E706706FF200000A260672B4E706706FF200000A260672110000706FF200000A260672E4E706706FF200000A260672B4E706706FF200000A260672110000706FF200000A26067254E806706FF200000A260672039806706FF200000A260672110000706FF200000A26067215E906706FF200000A260672039806706FF200000A260672110000706FF200000A26067263E906706FF200000A260672039806706FF200000A26067212EA06706FF200000A260672110000706FF200000A26067284EA06706FF200000A260672B4E706706FF200000A260672110000706FF200000A260672DEEA06706FF200000A260672039806706FF200000A260672110000706FF200000A2606723EEB06706FF200000A26067270EB06706FF200000A260672D2EB06706FF200000A260672F1EC06706FF200000A2606720EEE06706FF200000A260672110000706FF200000A26067297EE06706FF200000A2606722EEF06706FF200000A26067245F006706FF200000A2606721CF106706FF200000A260672C9F106706FF200000A260672110000706FF200000A2606723DF206706FF200000A26067230F306706FF200000A260672EDF506706FF200000A260672E4F706706FF200000A260672110000706FF200000A2606727FF806706FF200000A2606724BA806706FF200000A260672E4F706706FF200000A260672110000706FF200000A2606722AFA06706FF200000A2606724BA806706FF200000A260672110000706FF200000A26067284FA06706FF200000A2606724BA806706FF200000A260672110000706FF200000A260672A6FA06706FF200000A260672829D06706FF200000A260672110000706FF200000A260672BEFA06706FF200000A260672F2FA06706FF200000A2606724BA806706FF200000A260672110000706FF200000A2606729FFB06706FF200000A2606723AFC06706FF200000A260672110000706FF200000A26067258FC06706FF200000A2606723AFC06706FF200000A260672110000706FF200000A260672E5FC06706FF200000A2606723AFC06706FF200000A260672110000706FF200000A2606727EFD06706FF200000A26067209FE06706FF200000A260672110000706FF200000A26067225FE06706FF200000A26067209FE06706FF200000A260672110000706FF200000A260672BAFE06706FF200000A2606723AFC06706FF200000A260672110000706FF200000A2606724FFF06706FF200000A260672829D06706FF200000A260672110000706FF200000A2606724A0007706FF200000A260672829D06706FF200000A260672110000706FF200000A260672290107706FF200000A260672570107706FF200000A260672750107706FF200000A260672110000706FF200000A260672C30107706FF200000A260672E19306706FF200000A260672F90107706FF200000A260672110000706FF200000A260672610207706FF200000A260672C50207706FF200000A260672660307706FF200000A2606724F0407706FF200000A260672110000706FF200000A260672C70407706FF200000A260672E30407706FF200000A260672110000706FF200000A260672760507706FF200000A260672090607706FF200000A260672920607706FF200000A260672110000706FF200000A260672410707706FF200000A260672670707706FF200000A260672110000706FF200000A2606720A0807706FF200000A2606724BA806706FF200000A260672110000706FF200000A260672300807706FF200000A2606724BA806706FF200000A260672110000706FF200000A260672560807706FF200000A260672960807706FF200000A260672DFBC06706FF200000A260672110000706FF200000A260672C60807706FF200000A260672EC0807706FF200000A260672110000706FF200000A260672100907706FF200000A260672DFBC06706FF200000A260672110000706FF200000A260672340907706FF200000A260672DFBC06706FF200000A260672110000706FF200000A260672580907706FF200000A260672DFBC06706FF200000A260672110000706FF200000A260672860907706FF200000A260672BC0907706FF200000A260672DC0907706FF200000A260672110000706FF200000A260672340A07706FF200000A260672520A07706FF200000A260672110000706FF200000A260672940A07706FF200000A260672BA0A07706FF200000A260672110000706FF200000A260672240B07706FF200000A26178D060000010B0716726E0B07701F0C20A00F00006A733D00000AA207734200000A0C281C00000A0D09086F1801000A1613042B2108160611046F1901000A742D0000016F1A01000A09086F1B01000A1104175813041104066F1C01000A32D5096F1D01000A2A00000013300100130000003F00001172110000700A286A0000060A06288100000A2A00133001000D0000003F00001172780B07700A06288100000A2A000000133003004E000000380000111B8D2D0000010A06167E3F0000040B1201282A00000AA20617720D000070A206187E400000040C1202282A00000AA20619720D000070A2061A7E410000040D1203282A00000AA20628E800000A2A00001330030090010000400000117211000070731300000A0A06729D7206706FF100000A260672AA0B07706FF100000A260672C40B07706FF100000A260672DE0B07706FF100000A2606720E0C07706F1500000A2606026F1500000A260672514E06706FF100000A260672866506706FF100000A2606720D5606706FF100000A2606723A0C07706F1500000A2606026F1500000A260672620C07706FF100000A26160B2B5D0672800C07706F1500000A26060717586F1E01000A260672AC0C07706FF100000A260672B00C07706FF100000A260603076F1901000A6F1600000A6F1500000A260672AC0C07706FF100000A260672C20C07706FF100000A260717580B07036F1C01000A329A0672CA0C07706FF100000A2606728B7406706FF100000A260672747806706FF100000A260672847806706FF100000A2606725D0D07706FF100000A260672E60D07706FF100000A2606728F0E07706F1500000A2606026F1500000A260672AB0E07706FF100000A260672086606706FF100000A260672FB0E07706FF100000A260672110000706FF100000A26066F1600000A2A1E02282300000A2A1B3004007300000041000011026F4900000A7E7500000A282100000A2C02162A160A0272110F07706F4D00000A176F1F01000A0C160D2B3F08099A0B06D018000001282001000A0717282101000AA518000001600ADE1C2672170F077007721B0F0770283800000A72750F0770732201000A7A0917580D09088E6932BB062A0001100000000030001B4B001C53000001133004009100000042000011026F4F00000A2D090F01284600000A2C067E9400000A2A0F02286200000A172F0B72A10F0770734700000A7A026F5100000A73D600000A0B0F03286200000A0C0817594502000000020000001C0000002B34070F01284800000A0F02286200000A1759166F2301000A0A2B1C070F01284800000A0F02286200000A1759176F2301000A0A2B02160A061758286800000A2A000000133004009100000042000011026F4F00000A2D090F01284600000A2C067E9400000A2A0F02286200000A172F0B72A10F0770734700000A7A026F5100000A73D600000A0B0F03286200000A0C0817594502000000020000001C0000002B34070F01284800000A0F02286200000A1759166F2401000A0A2B1C070F01284800000A0F02286200000A1759176F2401000A0A2B02160A061758286800000A2A000000133001001D0000003F000011026F5100000A73D600000A0A066F4900000A6F4D00000A734E00000A2A00000013300200370000003F000011026F4F00000A2D090F01284600000A2C0716287F00000A2A026F5100000A73D600000A0A060F01284800000A6F2501000A287F00000A2A00133003006700000043000011026F4F00000A2D090F01284600000A2C0716287F00000A2A026F5100000A73D600000A0A160B0F02286200000A0C081759450200000002000000130000002B20060F01284800000A166F2601000A0B2B0F060F01284800000A176F2601000A0B07287F00000A2A00133003006700000043000011026F4F00000A2D090F01284600000A2C0716287F00000A2A026F5100000A73D600000A0A160B0F02286200000A0C081759450200000002000000130000002B20060F01284800000A166F2701000A0B2B0F060F01284800000A176F2701000A0B07287F00000A2A001330030050000000440000110F01286200000A0F00284800000A6FBF00000A2F0B72E50F0770734700000A7A0F00284800000A0A0F02284800000A16176F2000000A282801000A0B060F01286200000A076F7A00000A288100000A2A1330030050000000440000110F01286200000A0F00284800000A6FBF00000A2F0B72E50F0770734700000A7A0F00284800000A0A0F02284800000A16176F2000000A282801000A0B060F01286200000A076F2901000A288100000A2A133002002C0000004500001102A5150000020A0312007B45000004286800000A810E0000010412007B46000004288100000A810B0000012A13300200540000004600001128AF00000A6FB000000A027BAA0000043315027BA90000041FFE330B02167DA9000004020A2B071673D00000060A06027BAC0000047DAB00000406027BAE0000047DAD00000406027BB00000047DAF000004062A1E0228C90000062A1B300400C601000047000011027BA90000040B07450300000005000000A001000072010000389B01000002157DA9000004027BAB0000046F4F00000A3A84010000027CAD000004284600000A3A74010000027CAD000004284800000A7E7500000A282100000A2C0B725B10077073A400000A7A027CAF000004286200000A172E19027CAF000004286200000A182E0B728F10077073A400000A7A027CB1000004FE151500000202167DB200000402178D2D0000010C0816027CAD000004284800000AA2087DB300000402027BAB0000046F5100000A73D600000A7DB400000402167DB5000004027CAF000004286200000A0D091759450200000009000000020000002B0702177DB500000402177DA900000402027BB4000004027BB3000004027BB50000046F8900000A7DB700000402167DB80000042B7402027BB7000004027BB80000049A7DB600000402257BB200000417587DB2000004027CB1000004027BB20000047D45000004027CB1000004027BB60000047D4600000402027BB10000048C150000027DA800000402187DA9000004170ADE3902177DA900000402027BB800000417587DB8000004027BB8000004027BB70000048E693F79FFFFFF0228D1000006160ADE070228CE000006DC062A0000411C00000400000000000000BD010000BD01000007000000000000001E027BA80000042A1A73B600000A7A00133002001F00000024000011027BA90000040A061759450200000001000000010000002A0228D10000062A1E027BA80000042A7A02282300000A02037DA90000040228AF00000A6FB000000A7DAA0000042A2202157DA90000042A00133002001F000000460000111FFE73D00000060A06027DAC00000406037DAE00000406047DB0000004062A001B3003004601000048000011026F5100000A73D600000A0A066F4900000A6FBF00000A2D0B72EF100770734700000A7A72110000700B73F900000A0C72FB4C067073F800000A130506110573FB00000A0D11056FFA00000A096F0201000A130411046F2A01000A39980000000F02286200000A13061106175945020000002E000000750000002B7C1104166F2B01000A2D22081104166F2C01000A6F1600000A6F1500000A26080F01284800000A6F1500000A2611046F2D01000A2DCB2B451104166F2B01000A2D321104166F2C01000A6F1600000A0B076F4900000A6FBF00000A16311608076F1500000A26080F01284800000A6F1500000A2611046F2D01000A2DBBDE0C11052C0711056F3500000ADC086F1A00000A16312608086F1A00000A0F01284800000A6FBF00000A590F01284800000A6FBF00000A6F2200000A26086F1600000A6F4D00000A734E00000A2A00000110000002003C00BEFA000C00000000133004004801000049000011026F4F00000A2D090F02284600000A2C06284500000A2A026F5100000A73D600000A0A7211000070066FBF00000A066FBF00000A0F01286200000A5B0F02284800000A6FBF00000A5A581F6458731900000A0B160C160D721100007013041613050F01286200000A173CBD0000007219110770734700000A7A090F01286200000A58066FBF00000A2F730F01286200000A1305060911056F2000000A13040609110558176F2000000A72950200706F9100000A2C120711046F1500000A260911055817580D2B5611041F206F2E01000A0C08152E1807110416086F2000000A6F1500000A2609085817580D2B300711046F1500000A26091105580D2B20066FBF00000A09591305060911056F2000000A13040711046F1500000A262B1A070F02284800000A6F1500000A2609066FBF00000A3F42FFFFFF076F1600000A6F4D00000A734E00000A2A13300500C70000004A000011026F4F00000A2C06284500000A2A026F5100000A73D600000A0A160B066F4A00000A0A2B63067295020070076F8700000A0B07153309066FBF00000A0B2B520717580B2B3A0607176F2000000A0C08086F2500000A6F9100000A2D1F0616076F2000000A086F2500000A060717586F2F01000A283800000A0A2B0D0717580B07066FBF00000A32BD07066FBF00000A3294066FBF00000A16311C0616176F2000000A0C086F2500000A06176F2F01000A281800000A0A066F1600000A6F4D00000A734E00000A2A00133003003D0000004B000011026F4F00000A2D08036F4F00000A2C0716287F00000A2A026F5100000A73D600000A0A036F5100000A73D600000A0B0607166F3001000A287F00000A2A00000013300500080100004C000011026F4F00000A2D08036F4F00000A2C067E9400000A2A026F5100000A73D600000A0A036F5100000A73D600000A0B077E7500000A282100000A2C0B725B110770734700000A7A0517286800000A283101000A25283201000A2D110518286800000A283101000A283301000A280001000A2C0B7289110770734700000A7A0F02286200000A172F0B72CD110770734700000A7A0F02286200000A066FBF00000A310B7209120770734700000A7A160C0F02286200000A17590D1613042B3B0607090F03286200000A172E03172B01166F2401000A13041104152E270817580C0E04280001000A2C07110417580D2B0A1104076FBF00000A580D09066FBF00000A32BC08286800000A2A13300400AB010000290000110F00284800000A6F4A00000A250B3975010000FE137E5F0000043AD50000001F10732700000A25727B12077016282800000A25728512077017282800000A25728D12077018282800000A25729D12077019282800000A2572A51207701A282800000A2572AF1207701B282800000A2572B51207701C282800000A2572BF1207701D282800000A2572C51207701E282800000A2572CD1207701F09282800000A2572D31207701F0A282800000A2572DB1207701F0B282800000A2572E31207701F0C282800000A2572F11207701F0D282800000A2572FF1207701F0E282800000A2572091307701F0F282800000AFE13805F000004FE137E5F000004071202282900000A398000000008451000000002000000020000000200000002000000020000000A0000000A00000012000000120000001A000000220000002200000022000000220000002A000000320000002B3872130000700A2B4C72151307700A2B4472191307700A2B3C721D1307700A2B3472211307700A2B2C72251307700A2B24722F1307700A2B1C723D1307700F00284800000A7257130770283800000A734700000A7A06288100000A2A00133005004C0100004C000011026F4F00000A2D08036F4F00000A2C067E9400000A2A026F4F00000A2C0716286800000A2A026F5100000A73D600000A0A036F5100000A73D600000A0B077E7500000A282100000A2C0B725B110770734700000A7A0E0417286800000A283101000A25283201000A2D120E0418286800000A283101000A283301000A280001000A2C0B7289110770734700000A7A0F02286200000A172F0B72CD110770734700000A7A0F02286200000A066FBF00000A310B7209120770734700000A7A0F03286200000A172F0B7273130770734700000A7A160C0F02286200000A17590D1613042B450607090F04286200000A172E03172B01166F2401000A13041104152E310817580C080F03286200000A2E230E05280001000A2C07110417580D2B0A1104076FBF00000A580D09066FBF00000A32B2080F03286200000A330A11041758286800000A2A16286800000A2A133004009F0100004D000011026F4F00000A2D090F01284600000A2C06284500000A2A026F5100000A73D600000A0A066F4900000A7E7500000A282100000A2C1072110000706F4D00000A734E00000A2A7211000070731300000A0B178D2D000001130B110B160F01284800000AA2110B0C0608166F8900000A0D0F02284800000A72DF0000706F4D00000A176F1F01000A13041713061104130C16130D38EC000000110C110D9A130714130511076F4900000A178D2C000001130E110E161F2D9D110E6FD500000A130511058E691733411105169A283401000A13081108163EA4000000098E6911083F9A00000011062D0E070F01284800000A6F1500000A260709110817599A6F1500000A261613062B761105169A7E7500000A282100000A2C051713082B0B1105169A283401000A13081105179A7E7500000A282100000A2C07098E6913092B0B1105179A283401000A13091108130A2B2811062D0E070F01284800000A6F1500000A260709110A17599A6F1500000A26161306110A1758130A110A110931D2110D1758130D110D110C8E693F09FFFFFF076F1600000A6F4D00000A734E00000A2A00133003003E0100004E0000110F00284600000A2C0716287F00000A2A0F01286200000A175F17332272B91307701E73D700000A0A060F00284800000A6F3501000A2C0717287F00000A2A0F01286200000A185F183322722F1407701E73D700000A0B070F00284800000A6F3501000A2C0717287F00000A2A72A51407701E73D700000A0C080F00284800000A72B21507706F3601000A0D0F01286200000A1A5F1A331E72B61507701E73D700000A13041104096F3501000A2C0717287F00000A2A0F01286200000A1E5F1E331E725D1607701E73D700000A13051105096F3501000A2C0717287F00000A2A0F01286200000A1F105F1F10331E72041707701E73D700000A13061106096F3501000A2C0717287F00000A2A0F01286200000A1F205F1F20331E72AB1707701E73D700000A13071107096F3501000A2C0717287F00000A2A16287F00000A2A820F00284800000A0F01284800000A0F02284800000A6F7100000A288100000A2A0013300400F60000004F000011160A166A0C0F02284800000A7E7500000A287600000A2C0F0F02284800000A733701000A0B2B06283801000A0B0F01284800000A6F4A00000A2513063995000000110672AD020070282100000A2D2C110672F7020070282100000A2D3211067231030070282100000A2D3B11067277030070282100000A2D452B5B0F00284800000A1F6F071202283901000A0A2B570F00284800000A1F6F071203283A01000A0A096A0C2B400F00284800000A1F6F071204283B01000A0A11046A0C2B280F00284800000A1F6F071205283C01000A0A11056E0C2B10725218077072EF180770732201000A7A062C0708283D01000A2A7E3E01000A2A1E02282300000A2A1E02282300000A2A0000133002002C0000005000001102A5180000020A0312007B47000004286800000A810E0000010412007B48000004286800000A810E0000012A13300200540000005100001128AF00000A6FB000000A027BBB0000043315027BBA0000041FFE330B02167DBA000004020A2B071673D90000060A06027BBD0000047DBC00000406027BBF0000047DBE00000406027BC10000047DC0000004062A1E0228D20000062A13300300F201000024000011027BBA0000040A0645030000000500000011010000A501000038D201000002157DBA000004027CC0000004286200000A2D0B720D190770734700000A7A027CBC000004286200000A027CBE000004286200000A2F19027CC0000004286200000A162F0B7235190770734700000A7A027CBC000004286200000A027CBE000004286200000A3119027CC0000004286200000A16310B72AF190770734700000A7A027CC2000004FE151800000202167DC3000004027CBC000004286200000A027CBE000004286200000A3C9400000002027CBC000004286200000A7DC40000042B6902257BC300000417587DC3000004027CC2000004027BC30000047D47000004027CC2000004027BC40000047D4800000402027BC20000048C180000027DB900000402177DBA000004172A02157DBA00000402257BC4000004027CC0000004286200000A587DC4000004027BC4000004027CBE000004286200000A3284388F00000002027CBC000004286200000A7DC50000042B6902257BC300000417587DC3000004027CC2000004027BC30000047D47000004027CC2000004027BC50000047D4800000402027BC20000048C180000027DB900000402187DBA000004172A02157DBA00000402257BC5000004027CC0000004286200000A587DC5000004027BC5000004027CBE000004286200000A3084162A1E027BB90000042A1A73B600000A7A062A1E027BB90000042A7A02282300000A02037DBA0000040228AF00000A6FB000000A7DBB0000042A0000133002001F\
-000000510000111FFE73D90000060A06027DBD00000406037DBF00000406047DC1000004062A0013300200540000005200001128AF00000A6FB000000A027BC80000043315027BC70000041FFE330B02167DC7000004020A2B071673E10000060A06027BCA0000047DC900000406027BCC0000047DCB00000406027BCE0000047DCD000004062A1E0228DA0000062A13300300F600000024000011027BC70000040A06450200000005000000C500000038DA00000002157DC7000004027CCD000004286200000A2D0B720D190770734700000A7A027CCB000004286200000A162F0B722D1A0770734700000A7A027CCF000004FE151800000202167DD000000402027CC9000004286200000A7DD10000042B6902257BD000000417587DD0000004027CCF000004027BD00000047D47000004027CCF000004027BD10000047D4800000402257BD1000004027CCD000004286200000A587DD100000402027BCF0000048C180000027DC600000402177DC7000004172A02157DC7000004027BD0000004027CCB000004286200000A3284162A1E027BC60000042A1A73B600000A7A062A1E027BC60000042A7A02282300000A02037DC70000040228AF00000A6FB000000A7DC80000042A0000133002001F000000520000111FFE73E10000060A06027DCA00000406037DCC00000406047DCE000004062A00133002002D0000005300001102A5190000020A0312007B49000004286800000A810E0000010412007B4A0000046C289000000A81110000012A00000013300200540000005400001128AF00000A6FB000000A027BD40000043315027BD30000041FFE330B02167DD3000004020A2B071673E90000060A06027BD60000047DD500000406027BD80000047DD700000406027BDA0000047DD9000004062A1E0228E20000062A133003000B02000024000011027BD30000040A064503000000050000002A010000BE01000038EB01000002157DD3000004027CD9000004288D00000A230000000000000000330B720D190770734700000A7A027CD5000004288D00000A027CD7000004288D00000A3421027CD9000004288D00000A230000000000000000340B7235190770734700000A7A027CD5000004288D00000A027CD7000004288D00000A3621027CD9000004288D00000A230000000000000000360B72AF190770734700000A7A027CDB000004FE151900000202167DDC000004027CD5000004288D00000A027CD7000004288D00000A419400000002027CD5000004288D00000A7DDD0000042B6902257BDC00000417587DDC000004027CDB000004027BDC0000047D49000004027CDB000004027BDD0000047D4A00000402027BDB0000048C190000027DD200000402177DD3000004172A02157DD300000402257BDD000004027CD9000004288D00000A587DDD000004027BDD000004027CD7000004288D00000A3284388F00000002027CD5000004288D00000A7DDE0000042B6902257BDC00000417587DDC000004027CDB000004027BDC0000047D49000004027CDB000004027BDE0000047D4A00000402027BDB0000048C190000027DD200000402187DD3000004172A02157DD300000402257BDE000004027CD9000004288D00000A587DDE000004027BDE000004027CD7000004288D00000A3084162A1E027BD20000042A1A73B600000A7A062A1E027BD20000042A7A02282300000A02037DD30000040228AF00000A6FB000000A7DD40000042A00133002001F000000540000111FFE73E90000060A06027DD600000406037DD800000406047DDA000004062A0013300200540000005500001128AF00000A6FB000000A027BE10000043315027BE00000041FFE330B02167DE0000004020A2B071673F10000060A06027BE30000047DE200000406027BE50000047DE400000406027BE70000047DE6000004062A1E0228EA0000062A13300300FF00000024000011027BE00000040A06450200000005000000CE00000038E300000002157DE0000004027CE6000004288D00000A230000000000000000330B720D190770734700000A7A027CE4000004286200000A162F0B722D1A0770734700000A7A027CE8000004FE151900000202167DE900000402027CE2000004288D00000A7DEA0000042B6902257BE900000417587DE9000004027CE8000004027BE90000047D49000004027CE8000004027BEA0000047D4A00000402257BEA000004027CE6000004288D00000A587DEA00000402027BE80000048C190000027DDF00000402177DE0000004172A02157DE0000004027BE9000004027CE4000004286200000A3284162A1E027BDF0000042A1A73B600000A7A062A1E027BDF0000042A7A02282300000A02037DE00000040228AF00000A6FB000000A7DE10000042A00133002001F000000550000111FFE73F10000060A06027DE300000406037DE500000406047DE7000004062A00133002002C0000005600001102A51A0000020A0312007B4B000004286800000A810E0000010412007B4C000004286400000A810D0000012A133004006802000057000011046F4A00000A250B3943020000FE137E600000043A4A0100001F19732700000A2572B305007016282800000A2572671A077017282800000A25724705007018282800000A2572E105007019282800000A2572410500701A282800000A2572711A07701B282800000A25724D0600701C282800000A2572350500701D282800000A2572751A07701E282800000A2572550600701F09282800000A25722F0500701F0A282800000A25725F0600701F0B282800000A2572290500701F0C282800000A2572791A07701F0D282800000A25726D0600701F0E282800000A2572230500701F0F282800000A25727D1A07701F10282800000A25727B0600701F11282800000A25721D0500701F12282800000A2572ED0500701F13282800000A25723B0500701F14282800000A2572811A07701F15282800000A2572D10500701F16282800000A2572871A07701F17282800000A25728D1A07701F18282800000AFE138060000004FE137E60000004071202282900000A39D90000000845190000000200000002000000020000000D0000000D0000000D00000018000000180000001800000024000000240000003000000030000000300000003C0000003C0000003C00000048000000480000005400000054000000540000006200000062000000620000002B6D0F0003283F01000A0A2B780F000328CC00000A0A2B6D0F00036C286300000A0A2B610F00036C284001000A0A2B550F00036C284101000A0A2B490F00036C288E00000A0A2B3D0F00036C284201000A0A2B310F00031D5A6C286300000A0A2B230F0003195A28CC00000A0A2B1672911A07700472B91A0770283800000A734700000A7A062A13300200600000005800001128AF00000A6FB000000A027BED0000043315027BEC0000041FFE330B02167DEC000004020A2B071673F90000060A06027BEF0000047DEE00000406027BF10000047DF000000406027BF30000047DF200000406027BF50000047DF4000004062A1E0228F20000062A133004001C02000024000011027BEC0000040A0645030000000500000047010000DF01000038FC01000002157DEC000004027CF2000004286200000A2D0B720D190770734700000A7A027CEE000004286500000A027CF0000004286500000A284301000A2C19027CF2000004286200000A162F0B727A1B0770734700000A7A027CEE000004286500000A027CF0000004286500000A284401000A2C19027CF2000004286200000A16310B72091C0770734700000A7A027CF6000004FE151A00000202167DF700000402027CEE000004286500000A7DF8000004027CEE000004286500000A027CF0000004286500000A284301000A39120100002B7802257BF700000417587DF7000004027CF6000004027BF70000047D4B000004027CF6000004027BF80000047D4C00000402027BF8000004027CF2000004286200000A027CF4000004284800000A288C0000067DF800000402027BF60000048C1A0000027DEB00000402177DEC000004172A02157DEC000004027BF8000004027CF0000004286500000A284301000A3A6DFFFFFF389300000002257BF700000417587DF7000004027CF6000004027BF70000047D4B000004027CF6000004027BF80000047D4C00000402027BF8000004027CF2000004286200000A027CF4000004284800000A288C0000067DF800000402027BF60000048C1A0000027DEB00000402187DEC000004172A02157DEC000004027BF8000004027CF0000004286500000A284401000A3A6DFFFFFF162A1E027BEB0000042A1A73B600000A7A062A1E027BEB0000042A7A02282300000A02037DEC0000040228AF00000A6FB000000A7DED0000042A1330020026000000580000111FFE73F90000060A06027DEF00000406037DF100000406047DF300000406057DF5000004062A000013300200600000005900001128AF00000A6FB000000A027BFB0000043315027BFA0000041FFE330B02167DFA000004020A2B071673010100060A06027BFD0000047DFC00000406027BFF0000047DFE00000406027B010100047D0001000406027B030100047D02010004062A1E0228FA0000062A133004000801000024000011027BFA0000040A06450200000005000000D400000038EC00000002157DFA000004027C00010004286200000A2D0B720D190770734700000A7A027CFE000004286200000A162F0B729C1C0770734700000A7A027C04010004FE151A00000202167D0501000402027CFC000004286500000A7D060100042B7802257B0501000417587D05010004027C04010004027B050100047D4B000004027C04010004027B060100047D4C00000402027B06010004027C00010004286200000A027C02010004284800000A288C0000067D0601000402027B040100048C1A0000027DF900000402177DFA000004172A02157DFA000004027B05010004027CFE000004286200000A3F72FFFFFF162A1E027BF90000042A1A73B600000A7A062A1E027BF90000042A7A02282300000A02037DFA0000040228AF00000A6FB000000A7DFB0000042A1330020026000000590000111FFE73010100060A06027DFD00000406037DFF00000406047D0101000406057D03010004062A0000133004000C0800005A00001172110000700A72110000700B72110000700C72110000700D171305721100007013080F00288D00000A284501000A23F8FF3326F56B0C43360B72E01C0770734700000A7A02230000000000000000289000000A284601000A280001000A2C1D72401D077013080223000000000000F0BF289000000A284701000A10000F00FE16110000016F1600000A0A06720D0000706F4801000A1304110416312872541D07700B0706110417586F2F01000A181F306F2901000A281800000A0B0611046F4901000A0A0F00288D00000A23000000000000F03F441C070000066FBF00000A195D1309110917594502000000050000001600000038EE06000072601D077006281800000A0A38DD06000072661D077006281800000A0A38CC06000006066FBF00000A19596F2F01000A0D06066FBF00000A19596F4901000A0A721100007013070916176F2000000A25130A3911010000FE137E610000042D7A1F09732700000A25726A1D077016282800000A25726E1D077017282800000A2572721D077018282800000A2572761D077019282800000A25727A1D07701A282800000A25727E1D07701B282800000A2572821D07701C282800000A2572861D07701D282800000A25728A1D07701E282800000AFE138061000004FE137E61000004110A120B282900000A2C7C110B4509000000020000000B000000140000001D000000260000002F00000038000000410000004A0000002B4F728E1D077013072B4672A61D077013072B3D72BE1D077013072B3472DA1D077013072B2B72F41D077013072B22720E1E077013072B1972261E077013072B1072421E077013072B07725E1E0770130711076FBF00000A163109729502007013062B07721100007013060917176F2000000A25130C3945010000FE137E620000042D6D1E732700000A25726E1D077016282800000A2572721D077017282800000A2572761D077018282800000A25727A1D077019282800000A25727E1D07701A282800000A2572821D07701B282800000A2572861D07701C282800000A25728A1D07701D282800000AFE138062000004FE137E62000004110C120D282900000A39BA000000110D45080000000500000017000000290000003B0000004D0000005F0000007100000083000000388E0000001107110672781E0770283800000A13072B7C1107110672861E0770283800000A13072B6A1107110672941E0770283800000A13072B581107110672A01E0770283800000A13072B461107110672AC1E0770283800000A13072B341107110672B81E0770283800000A13072B221107110672C81E0770283800000A13072B101107110672D61E0770283800000A130711076FBF00000A163109729502007013062B07721100007013060917176F2000000A726A1D07706F9100000A39BE0100000918176F2000000A25130E3929030000FE137E630000043A870000001F0A732700000A2572661D077016282800000A25726A1D077017282800000A25726E1D077018282800000A2572721D077019282800000A2572761D07701A282800000A25727A1D07701B282800000A25727E1D07701C282800000A2572821D07701D282800000A2572861D07701E282800000A25728A1D07701F09282800000AFE138063000004FE137E63000004110E120F282900000A3981020000110F450A000000050000001A0000002F00000044000000590000006E0000008300000098000000AD000000C2000000384D0200001107110672E41E0770283800000A130738380200001107110672EC1E0770283800000A130738230200001107110672FA1E0770283800000A1307380E0200001107110672081F0770283800000A130738F901000011071106721A1F0770283800000A130738E401000011071106722C1F0770283800000A130738CF01000011071106723C1F0770283800000A130738BA01000011071106724C1F0770283800000A130738A50100001107110672601F0770283800000A130738900100001107110672721F0770283800000A1307387B0100000918176F2000000A251310396B010000FE137E640000042D7A1F09732700000A25726A1D077016282800000A25726E1D077017282800000A2572721D077018282800000A2572761D077019282800000A25727A1D07701A282800000A25727E1D07701B282800000A2572821D07701C282800000A2572861D07701D282800000A25728A1D07701E282800000AFE138064000004FE137E6400000411101211282900000A39D300000011114509000000050000001A0000002C0000003E000000500000006200000074000000860000009800000038A30000001107110672841F0770283800000A1307388E00000011071106728C1F0770283800000A13072B7C1107110672941F0770283800000A13072B6A1107110672A01F0770283800000A13072B581107110672AA1F0770283800000A13072B461107110672B41F0770283800000A13072B341107110672BC1F0770283800000A13072B221107110672C81F0770283800000A13072B101107110672D41F0770283800000A1307086FBF00000A16310972DE1F077013062B0772950200701306110513121112175945060000006000000002000000120000002200000032000000420000002B5072E41F0770110608283800000A0C2B4E72F81F0770110608283800000A0C2B3E720A200770110608283800000A0C2B2E721C200770110608283800000A0C2B1E7230200770110608283800000A0C2B0E7248200770110608283800000A0C110708281800000A0C110517581305066FBF00000A163D28F9FFFF2B0672602007700C11080807283800000A0C08288100000A2A1B3004007E0000005B000011026F6000000A166A3306285000000A2A140A140B735A00000A250A1304061717734A01000A250B1305026F4B00000A0C070816088E696F4B01000ADE0C11052C0711056F3500000ADCDE0C11042C0711046F3500000ADCDE0D0D096F0501000A734100000A7ADE0A072C06076F4C01000ADC066F4D01000A735300000A2A00000134000002002900143D000C0000000002001D002E4B000C00000000000014004559000D3E000001020014005468000A000000001B300200660000005C000011026F4B00000A734E01000A0A0616734F01000A0B735A00000A0C076F5001000A0D2B0F0809D26F5D00000A076F5001000A0D091533ED086F4D01000A735300000A1304DE1E082C06086F3500000ADC072C06076F3500000ADC062C06066F3500000ADC11042A00000128000002001A002B45000A00000000020014003B4F000A0000000002000C004D59000A000000001B300400470000005D000011735A00000A0A061717735101000A0B026F4B00000A0C070816088E696F4B01000ADE0A072C06076F3500000ADC066F4D01000A735300000A0DDE0A062C06066F3500000ADC092A00011C000002000F001423000A0000000002000600353B000A000000001B300200660000005E000011026F4B00000A734E01000A0A0616735201000A0B735A00000A0C076F5001000A0D2B0F0809D26F5D00000A076F5001000A0D091533ED086F4D01000A735300000A1304DE1E082C06086F3500000ADC072C06076F3500000ADC062C06066F3500000ADC11042A00000128000002001A002B45000A00000000020014003B4F000A0000000002000C004D59000A0000000013300300B40000005F0000110F00284800000A726A20077072110000706F7100000A6F4900000A0A06726E2007701E285301000A2D0716287F00000A2A0616196F2000000A287900000A0B0619186F2000000A287900000A0C061B1A6F2000000A287900000A0D072C06082C03092D0716287F00000A2A07209A020000330716287F00000A2A072004030000310716287F00000A2A0720DB030000331C081F4133170920E0100000320F0920E9100000300716287F00000A2A17287F00000A2A133004004B020000600000110F00284800000A726A20077072110000706F7100000A6F4900000A0A727E2007701E73D700000A0B72922007701E73D700000A0C72B02007701E73D700000A0D72CA2007701E73D700000A130472E82007701E73D700000A13050F01284800000A6F4900000A6F4A00000A25130A3928010000FE137E650000042D551C732700000A25721100007016282800000A25720A21077017282800000A25721421077018282800000A25721A21077019282800000A2572242107701A282800000A25722E2107701B282800000AFE138065000004FE137E65000004110A120B282900000A39B5000000110B4506000000050000004400000054000000640000007400000085000000389100000007066F3501000A3A9C00000008066F3501000A3A9000000009066F3501000A3A840000001104066F3501000A2D7A1105066F3501000A2D7016287F00000A2A07066F3501000A2D6016287F00000A2A08066F3501000A2D5016287F00000A2A09066F3501000A2D4016287F00000A2A1104066F3501000A2D2F16287F00000A2A1105066F3501000A2D1E16287F00000A2A723C2107700F01284800000A281800000A734700000A7A16130618066FBF00000A185D5913072B1B11060611071759176F2000000A287900000A5813061107185813071107066FBF00000A31DB161308066FBF00000A185D175813092B330611091759176F2000000A287900000A185A130811081F0A2F09110611085813062B0A110611081F09595813061109185813091109066FBF00000A32C311061F0A5D2C0716287F00000A2A17287F00000A2A00133003008F0000006100001120000100008D7E0000010A202083B8ED0B160C160D2B2D090C1E13042B1808175F17330808176407610C2B040817640C11041759130411041630E30609E0089E0917580D096E068E696A32CB1513051613062B26110520FF0000005F0211066A6F5401000A61D2130711051E640611079561130511061758130611066A026F6000000A32CF1105666E283D01000A2A0013300300A90000006200001102250B398900000007725E210770282100000A2D36077266210770282100000A2D37077270210770282100000A2D3807727E210770282100000A2D3907728C210770282100000A2D3A2B46285501000A036F5601000A0A2B4E285701000A036F5601000A0A2B40285801000A036F5601000A0A2B32285901000A036F5601000A0A2B24285A01000A036F5601000A0A2B16729A2107700272C2210770283800000A735B01000A7A062A0000001330030055000000630000110F00284800000A6F4900000A6F4A00000A036F4B00000A28970000060A73F900000A0B160C2B1C0706088F2B0000017207000070281400000A6F1500000A260817580C08068E6932DE076F1600000A288100000A2A8A0F00284800000A6F4900000A6F4A00000A036F4B00000A2897000006285C01000A2A13300400F4000000640000110F00284800000A726A20077072110000706F7100000A6F4900000A0A06729502007072110000706F7100000A0A06726E2007701E285301000A2D0716287F00000A2A0616176F2000000A287900000A0B0617176F2000000A287900000A0C0618176F2000000A287900000A0D0619176F2000000A287900000A1304061A176F2000000A287900000A1305061B176F2000000A287900000A1306061C176F2000000A287900000A1307061D176F2000000A287900000A1308061E176F2000000A287900000A130919071104581107585A1D081105581108585A5809110658110958581F0A5D2D0717287F00000A2A16287F00000A2A13300300630000003F0000110F00284800000A6F4A00000A250A2C4D067238220770282100000A2D0F06723E220770282100000A2D1A2B310F01284800000A72442207701E285301000A287F00000A2A0F01284800000A726C2207701F09285301000A287F00000A2A7E5D01000A2A001B300400A30B0000650000110F00284600000A2C0717287F00000A2A0F01284600000A2C0B7247230770734100000A7A140A140B160C72110000700D161304728F230770130572C723077013060F01284800000A1204285E01000A3AF20200000F01284800000A178D2C000001130A110A161F7C9D110A6FD500000A13071107130B16130C38BD020000110B110C9A130811086F4900000A6F4A00000A25130D3980020000FE137E660000043A160100001F15732700000A2572BB02007016282800000A25727703007017282800000A25723103007018282800000A2572F702007019282800000A2572AD0200701A282800000A2572730000701B282800000A2572830000701C282800000A2572FF0200701D282800000A2572430300701E282800000A25720B0300701F09282800000A2572DF0200701F0A282800000A2572150300701F0B282800000A2572CD0200701F0C282800000A25729D0000701F0D282800000A2572C30200701F0E282800000A2572930000701F0F282800000A2572B10000701F10282800000A2572C10300701F11282800000A2572870300701F12282800000A2572630300701F13282800000A25720F2407701F14282800000AFE138066000004FE137E66000004110D120E282900000A3949010000110E451500000005000000100000001B00000026000000310000003D0000003D00000049000000550000006400000073000000820000008E0000009A000000A6000000B2000000BE000000CA000000D6000000E2000000E200000038E900000011041760130438FA00000011041860130438EF00000011041A60130438E400000011041E60130438D900000011041F1060130438CD00000011041F2060130438C100000011041F4060130438B50000001104208000000060130438A6000000110420000100006013043897000000110420000200006013043888000000110420000400006013042B7C110420000800006013042B70110420001000006013042B64110420002000006013042B58110420004000006013042B4C110420008000006013042B40110420000001006013042B34110420000002006013042B28110420000004006013042B1C722524077011086F4900000A7205CE0470283800000A734100000A7A110C1758130C110C110B8E693F38FDFFFF72FB4C067073F800000A250A130F066FFA00000A73FE00000A0B07066FFF00000A07176F5F01000A1104175F17335B1D8D2D00000113101110161105A21110177241240770A21110181106A21110197241240770A211101A7249240770A211101B0F00284800000AA211101C72C20C0770A2111028E800000A0D07096F0101000A076FFC00000A26170C1104185F18335B1D8D2D00000113111111161105A21111177251240770A21111181106A21111197251240770A211111A7249240770A211111B0F00284800000AA211111C72C20C0770A2111128E800000A0D07096F0101000A076FFC00000A26170C11041A5F1A335B1D8D2D00000113121112161105A21112177261240770A21112181106A21112197261240770A211121A7249240770A211121B0F00284800000AA211121C72C20C0770A2111228E800000A0D07096F0101000A076FFC00000A26170C11041E5F1E335B1D8D2D00000113131113161105A21113177273240770A21113181106A21113197273240770A211131A7249240770A211131B0F00284800000AA211131C72C20C0770A2111328E800000A0D07096F0101000A076FFC00000A26170C11041F105F1F10335B1D8D2D00000113141114161105A2111417727B240770A21114181106A2111419727B240770A211141A7249240770A211141B0F00284800000AA211141C72C20C0770A2111428E800000A0D07096F0101000A076FFC00000A26170C11041F205F1F2040B0000000728924077013090F0228A200000A2D4B110972CF0000700F0228A300000A8C3A000001286001000A13090F0328A200000A2D1A110972DE1F07700F0328A300000A8C3A000001286001000A1309110972DB000070281800000A13091D8D2D00000113151115161105A21115171109A21115181106A21115191109A211151A7249240770A211151B0F00284800000AA211151C72C20C0770A2111528E800000A0D07096F0101000A076FFC00000A26170C11041F405F1F40335B1D8D2D00000113161116161105A21116177299240770A21116181106A21116197299240770A211161A7249240770A211161B0F00284800000AA211161C72C20C0770A2111628E800000A0D07096F0101000A076FFC00000A26170C110420800000005F2080000000335B1D8D2D00000113171117161105A211171772A5240770A21117181106A211171972A5240770A211171A7249240770A211171B0F00284800000AA211171C72C20C0770A2111728E800000A0D07096F0101000A076FFC00000A26170C110420000100005F2000010000335B1D8D2D00000113181118161105A211181772BB240770A21118181106A211181972BB240770A211181A7249240770A211181B0F00284800000AA211181C72C20C0770A2111828E800000A0D07096F0101000A076FFC00000A26170C110420000200005F2000020000335B1D8D2D00000113191119161105A211191772C5240770A21119181106A211191972C5240770A211191A7249240770A211\
-191B0F00284800000AA211191C72C20C0770A2111928E800000A0D07096F0101000A076FFC00000A26170C110420000400005F2000040000335B1D8D2D000001131A111A161105A2111A1772D1240770A2111A181106A2111A1972D1240770A2111A1A7249240770A2111A1B0F00284800000AA2111A1C72C20C0770A2111A28E800000A0D07096F0101000A076FFC00000A26170C110420000800005F2000080000335B1D8D2D000001131B111B161105A2111B1772ED240770A2111B181106A2111B1972ED240770A2111B1A7249240770A2111B1B0F00284800000AA2111B1C72C20C0770A2111B28E800000A0D07096F0101000A076FFC00000A26170C110420001000005F2000100000335B1D8D2D000001131C111C161105A2111C1772FF240770A2111C181106A2111C1972FF240770A2111C1A7249240770A2111C1B0F00284800000AA2111C1C72C20C0770A2111C28E800000A0D07096F0101000A076FFC00000A26170C110420002000005F2000200000335B1D8D2D000001131D111D161105A2111D177213250770A2111D181106A2111D197213250770A2111D1A7249240770A2111D1B0F00284800000AA2111D1C72C20C0770A2111D28E800000A0D07096F0101000A076FFC00000A26170C110420004000005F2000400000335B1D8D2D000001131E111E161105A2111E17721D250770A2111E181106A2111E19721D250770A2111E1A7249240770A2111E1B0F00284800000AA2111E1C72C20C0770A2111E28E800000A0D07096F0101000A076FFC00000A26170C110420008000005F2000800000335B1D8D2D000001131F111F161105A2111F177227250770A2111F181106A2111F197227250770A2111F1A7249240770A2111F1B0F00284800000AA2111F1C72C20C0770A2111F28E800000A0D07096F0101000A076FFC00000A26170C110420000001005F2000000100335B1D8D2D00000113201120161105A21120177245250770A21120181106A21120197245250770A211201A7249240770A211201B0F00284800000AA211201C72C20C0770A2112028E800000A0D07096F0101000A076FFC00000A26170C110420000002005F2000000200335B1D8D2D00000113211121161105A2112117724D250770A21121181106A2112119724D250770A211211A7249240770A211211B0F00284800000AA211211C72C20C0770A2112128E800000A0D07096F0101000A076FFC00000A26170C110420000004005F2000000400335B1D8D2D00000113221122161105A2112217726F250770A21122181106A2112219726F250770A211221A7249240770A211221B0F00284800000AA211221C72C20C0770A2112228E800000A0D07096F0101000A076FFC00000A26170CDE0C110F2C07110F6F3500000ADCDE0526160CDE00DE13062C06066FFD00000A072C06076F6101000ADC08287F00000A2A00414C0000020000005403000020080000740B00000C0000000000000000000000460300003C080000820B0000050000003E000001020000004603000043080000890B000013000000000000003216286201000A283D01000A2A1E02282300000A2A00000003300300F1030000000000007E53000004728525077023000000000000C03F6F6401000A7E53000004729925077023000000000000203F6F6401000A7E5300000472B525077023000000000000803E6F6401000A7E5300000472D125077023000000000000E03D6F6401000A7E5300000472ED25077023000000000000403D6F6401000A7E53000004720926077023000000000000A03C6F6401000A7E5300000472252607702300000000000020406F6401000A7E53000004723926077023000000000000503F6F6401000A7E53000004725726077023000000000000B03E6F6401000A7E53000004727526077023000000000000103E6F6401000A7E53000004729326077023000000000000703D6F6401000A7E5300000472B126077023000000000000D03C6F6401000A7E5300000472CF26077023000000000000C0406F6401000A7E5300000472EB2607702300000000000090406F6401000A7E53000004720927077023000000000000503F6F6401000A7E53000004722F27077023000000000000B03E6F6401000A7E53000004725527077023000000000000103E6F6401000A7E53000004727B27077023000000000000703D6F6401000A7E5300000472A12707702300000000000060416F6401000A7E5300000472BD2707702300000000000030416F6401000A7E5300000472DB2707702300000000000090406F6401000A7E53000004720128077023000000000000503F6F6401000A7E53000004722728077023000000000000B03E6F6401000A7E53000004724D28077023000000000000103E6F6401000A7E5300000472732807702300000000000000426F6401000A7E53000004728F28077023000000000000D0416F6401000A7E5300000472AD2807702300000000000030416F6401000A7E5300000472D32807702300000000000090406F6401000A7E5300000472F928077023000000000000503F6F6401000A7E53000004721F29077023000000000000B03E6F6401000A7E53000004724529077023000000000000A0426F6401000A7E5300000472612907702300000000000070426F6401000A7E53000004727F29077023000000000000D0416F6401000A7E5300000472A52907702300000000000030416F6401000A7E5300000472CB2907702300000000000090406F6401000A7E5300000472F129077023000000000000503F6F6401000A7E5300000472172A07702300000000000040436F6401000A7E5300000472332A07702300000000000010436F6401000A7E5300000472512A07702300000000000070426F6401000A7E5300000472772A077023000000000000D0416F6401000A7E53000004729D2A07702300000000000030416F6401000A7E5300000472C32A07702300000000000090406F6401000A2A42736501000A8053000004289F0000062A1E02282300000A2A000042534A4201000100000000000C00000076322E302E35303732370000000005006C000000B0360000237E00001C3700007C2A000023537472696E67730000000098610000EC2A070023555300848C0700100000002347554944000000948C07000434000023426C6F620000000000000002000001579FA22B0902000000FA25330016000001000000890000002B00000006010000010100007101000037000000650100000A000000EF00000003000000650000000B00000016000000160000004D0000000E0000000100000001000000030000001A00000000000A0001000000000006004A01430106005101430106005B0143010600A7028C020A00C202B6020A001503FA020A002103B6020A007E03FA020A00AF039A030A00B8039A030A00C1039A030600270443010A0041049A030A004D049A030A00DD049A030A0011059A030A0044059A030A007B059A0306002D061A060A0040079A030A0048079A030E0052083308060094091A060600C609B1090A00AC0B9A030600AC0C8C020A00BB0EFA0206003A0F1B0F06005C134A13060073134A13060090134A130600AF134A130600C8134A130600E1134A130600FC134A13060017144A13060030141B0F060044144A1306005D144A1306008A147A140600D014B0140600F014B01406001315430106001815430106001D1543010600C406430106003E1532150A005E15FA020A006915FA020600B615430106001916B0140600581643010A005E16B6020A007916B602060094161A060A00BA16B6020600D31643010600DB1643010600E11643010600F116430113000F17000006003F1743010A004917FA020A0072179A030600951743010600EB17430106000D18031806001A18031806003F18430106008B18B01406009A1843010600A01843010600C31843010E000C1933080E00A10833080E00121933080E002E1933080E004919330806009D1943010600C419430106000A1A43010600151A430106007E1A43010600A41AB1090600C61A430106001A1B8C020600281B8C020600DC1C43010600B01D9D1D0600D91DC81D0600061E43010600551F1B0F06006B1F1B0F0600B71F43010600CD1F43010E009C203308060034094A13060009114A1306002C0943010A00AD21FA020A00EA21D4210A000422D4210A002722D4210A00482235220A005A2235220A00A122D4210A00C92235220A00E322B6020E00102305230E00222305230E00812305230E00912305230E00C52305230E00DD2305230600FF23321506001124031806001E2403180A0033249A030600822443010600872443010600B12443010600FA25B1090E004E2938290E00592938290E00802938290600A22943010600C629A9290600CA29A9290600E429A9290600E929A9290600F029A9290600F729A9290600FE2943010A002C2AB6020E005E2A482A0600682A430106006B2A430100000000010000000000010001000100100013000000050001000100022010001A00000005000100070002201000270000000500130009000100100034000000050014001100010010003C000000050016001C0001001000410000000500160035000300100048000000050016003C000B0110005400000009001B003F000300100064000000050020003F000B0110006E000000090025004200010010007C00000005002A0042000B0110008100000009002B005100090110009A00000009003800510001001000A700000005003A0051000B011000AD00000009003A00600008011000BA00000009003F00600080011000C400000005004200620001001000CF00000005004500620001001000D8000000050045006D000B011000DF00000009004500840001001000EC00000005004700840001001000F00000000500470085000B011000F8000000090047009F000B01100004010000090049009F000B0110001201000009004B009F0001010000230100000D004D009F00010000002B010000050053009F0000000000D415000005005400A200130100005A18000009006700A20003011000D61A000005006700A20003011000051B000005006800A400030110001C1E000005007300AD0003011000561E000005007500B000030110001220000005008400B90003011000D620000005009400C10003011000C22400000500A800C90003011000102600000500B900D200030110007A2600000500C600DA0003011000D22600000500D200E20003011000332700000500DF00EA0003011000C52700000500EB00F200030110006D2800000500F900FA000600B90132000600C40132000600CD0135000600D80138000600E30138000600ED0135000600F3013B000600FD013B0006000302350006000D02350006001A02350006002502350006002B02350006003602350006003F02320006005002320006005F02320006006D0232000600AE0242003100E5038C003100300497000600780632000600840632000600920632000600A20632000600A7068C000600780632000600840632000600920632000600A20632000600A7068C000600780632000600840632000600A20632000600A7068C000600480032000600780632000600840632000600A20632000600A7068C0006004800320031002C07250206006107380006006C07970006007807250206008907250206009A0725020600A70725020600B40725020600BE0725020600C70725020600D50725020600E80725020600F60738000600040838005680110832005680210832000600F10838000600FA08320006000009380006000609380006000A09380036001109380036001709380036001D09380056802C09320056803409320056803D09320006009A0A380006009E0A320006000B0C38000600120C38000600190C38000600220C250206002B0C38000600370C97000606430C380056804B0C28065680540C280656805B0C28065680700C280656808F0C28063300B90C450613003416E60713002B17E60713017718CF0B1300B019E6071300F619E60713006A1AE6071300901AE6071300761FE60713008A1FE60713009E1FE6071300E81FE6071300D325E60713008427E6071300E828E6071300FC28E60713001029E60713002429E60713008E29E6071300182AE6070600470FA4140100A71BCF1401003C1C38000100471C38000600470FA4140600871CA4140600971CD2140600B21CD6140600C81CD6140600E81CDA1406000F1DE31406001F1DE7140600470FA41406004800A4140100A71BCF1401003C1C38000100471C38000600470FA4140600871CA41406004800A41406006A1EA41406007B1E34160600951E38160600A91E40160600C01E40160600D31E44160600FA1E44160600211F4D160600321F52160100A71BCF1401003C1C38000100471C380006001B10A41406002020A41406003010A41406003A20A41406004210931006005120931006004A10A41406005E20A41406007420B41D06008920B81D0600AC20BC1D0600BA20C11D0600C82038000100A71BCF1401003C1C38000100471C380006001B10A41406002020A41406003010A41406003A20A4140600650A93100600E220931006004210931006005120931006004A10A41406005E20A4140600ED20B41D06000221B81D06001521BC1D06002321C11D0600312138000600472138000600552138000100A71BCF1401003C1C38000100471C380006003D116E250600CE246E250600220DA4140600DF24A41406009A1193100600EE2493100600FF24722506001425380006002925762506003B25320006004E257A2506006225320006001F1D762506007E2538000100A71BCF1401003C1C38000100471C380006004112931006002726931006004A12931006003526931006005112931006004126931006004B26AD2A06001425380006005E26380006006C2638000100A71BCF1401003C1C38000100471C380006004112931006002726931006005612931006008D26931006005112931006004126931006009C26AD2A0600AF2638000600C42638000100A71BCF1401003C1C38000100471C380006004112EE2B06002726EE2B06004A12EE2B06003526EE2B06005112EE2B06004126EE2B0600EB26F22B0600002738000600152725020600242725020100A71BCF1401003C1C38000100471C380006004112EE2B06002726EE2B06005612931006008D26931006005112EE2B06004126EE2B06004927F22B06005F2738000600752725020100A71BCF1401003C1C38000100471C3800060074126C110600E2276C11060082126C110600F5276C1106005112931006004126931006006B12A41406000628A41406001428532D06002D2838000600432897000100A71BCF1401003C1C38000100471C3800060074126C110600E2276C1106008E12931006008628931006005112931006004126931006006B12A41406000628A41406009A28532D0600B32838000600C9289700D02000000000960060010A000100202100000000960079011100020065210000000096009201170003008321000000009600AD011C0004009421000000009600AD0124000700CE22000000008618B3012E000B00D8220000000086007C023E000B00A524000000008618B3012E000B00AD24000000008618B3014A000B00C424000000008100CC0250000C00D428000000008600DB025B000D002C29000000008600E9025B001000182A0000000081002B0362001300432A000000008100450362001500802A0000000081006C036A001700C02F0000000086008C03700018000430000000009600CB03750018009E30000000009600D4037E001A00C830000000009600DF0385001B004C31000000009600F10390001C00E833000000009600FA037E001D005C3600000000960003047E001E009C36000000009600150490001F00043700000000960056049B0020002C370000000096006A04A2002100CA37000000008618B3012E002200A037000000009118CF0CB1042200D4370000000091007E04A9002200A83F0000000091009004B00024005841000000009600A304B7002600AC41000000009600B304B7002B002042000000009600C204C60030003C42000000009600CE04A20032007F42000000009600E804CF0033009442000000009600F304D6003400B8420000000096000205D6003500DC420000000096001A05DD0036009C430000000096002705E8003900CC430000000096003505F1003B0034470000000096004E05FC003E0064470000000096005B0503013F00A04700000000960066050A01400064490000000096006A0517014400F84F0000000096007205200146003053000000009600840529014800CC540000000096009B0534014B007C55000000009600B205A2004D00D855000000009600BD05A2004E003356000000009600C8053D014F007056000000009600D40550015600D456000000009600DB05A20059000957000000008618B3012E005A001457000000009100F3055B015A00187B000000009100030664015A00407F000000009600390678016000607F00000000910048067F016100088A000000009100560688016100F48E0000000096006B069C016700188F000000008618B3012E006900208F000000008618B3012E006900288F000000008618B301A5016900388F000000008618B301AD016D00B98F000000008618B3012E007200C18F000000008618B301A5017200D08F000000008618B301AD0176004490000000009600B106B6017B00C090000000009600BB06BD017C000095000000009600C406C4017D00509B000000009600CC06CF018000D89B000000009600D406D60181004C9C000000009100E006E1018400609D00000000960000070D029200EEA00000000096001D071E02980002A100000000960022071E02990016A100000000960027071E029A002AA100000000960037071E029B0044A1000000009600720528029C0080A1000000009600530731029E00F2A1000000008618B3012E00A100E2A1000000009118CF0CB104A100FCA10000000096005F08C202A100C4A30000000096006F08C802A2003CA40000000096007708D502A600B8A40000000096008308E202AB003CA50000000091008F08F102B100B0A5000000009600A1080503B70020A9000000009600A7081203BB0054A9000000009600AF081F03BF00F8AD000000009600B7083003C60034AE000000009600BD083F03CB002EAF000000009600CA085203D30041AF000000009600D1085203D50054AF000000009600DA085903D7005CB0000000009600E0086803DC0019B1000000008618B3012E00E40024B100000000960023097B03E40080B1000000009118CF0CB104E400D8B100000000960045098A04E400CCC40000000096004B099404E700ECC70000000096005C099C04E900C4CC0000000096006809A604EC00A8D90000000096007209AC04ED00C0DA0000000096008409B104ED0018F00000000096002C09B504ED0038F00000000096003D09B504ED0054F000000000910089097B03ED00B0F00000000091009E09BA04ED004CF2000000008618B3012E00EF0054F2000000009600D509C104EF00E4F2000000009600ED09C704F00084F3000000009600F909C704F40024F4000000009600010A8500F80050F4000000009600060AD404F90094F40000000096000F0ADD04FB0008F5000000009600180ADD04FE007CF5000000009600230AE8040101D8F50000000096002B0AE804040134F6000000009100340AF304070130F9000000009600B708FE040A015CF9000000009600480A09050D01C0FA0000000096004D0A1405100114FC000000009600560A85001301E8FC0000000096005E0A1F05140134FD000000009600650A2805160148FE0000000096006B0A52031B010000010000009600730A37051C0158010100000096007E0A480522010403010000009600820A530525014E04010000009600AF085C05270170040100000096008C0A67052B017205010000008618B3012E002E017A05010000008618B3012E002E018405010000009100A20A72052E015C08010000009600B50A7D0531012C0A010000009600C60A7D053401580A010000009100D30A880537014C0D010000009600E80A93053A01240F010000009600FB0A9E053D01500F0100000091000A0BA9054001880F010000009100220BB4054301D014010000009600380BBD054601C4160100000096004E0BCA054A01F816010000009600600BD7054E01101F010000009600680BDE054F01D01F0100000096006D0BDE0550016C20010000009600740BDE055101DC200100000096007C0BDE0552017821010000009600840BE505530138220100000096008F0BEC0554019024010000009600990BF50556012C250100000091009F0BFC055701E425010000009600A70B040659014526010000009600B60B0D065B016826010000009600C10BE5055D016827010000009600DB0BEC055E01D827010000009600ED0B16066001D433010000009600FC0B23066401E133010000008618B3012E006401EC33010000009600C00CB1046401E937010000009118CF0CB1046401FA37010000008618B3012E006401847B000000008618B3012E0064018C7B000000008600E91AA8146401EC7B00000000E101361BBC146501347C00000000E1017A1B220865013C7C00000000E101E81640086501AC7E00000000E109B41B28086501B47E00000000E101F61B2E006501BC7E00000000E101211C2E006501FC7E00000000E1095C1C28086501047F000000008618B301C4066501237F0000000081002A1D2E006601748A000000008618B3012E0066017C8A000000008600301E2E166601B78A000000008600431E2E166701F08A00000000E101361BBC146801448B00000000E1017A1B220868014C8B00000000E101E81640086801608E00000000E109B41B28086801688E00000000E101F61B2E006801708E00000000E101211C2E006801B08E00000000E1095C1C28086801B88E000000008618B301C4066801D78E0000000081003E1F2E00690198A600000000E101361BBC14690104A700000000E1017A1B220869010CA700000000E101E81640086901E6A800000000E109B41B28086901EEA800000000E101F61B2E006901F5A800000000E101211C2E006901F7A800000000E1095C1C28086901FFA8000000008618B301C4066901E0A900000000E101361BBC146A0158AA00000000E1017A1B22086A0160AA00000000E101E81640086A01C0AD00000000E109B41B28086A01C8AD00000000E101F61B2E006A01CFAD00000000E101211C2E006A01D1AD00000000E1095C1C28086A01D9AD000000008618B301C4066A016CF600000000E101361BBC146B01CCF600000000E1017A1B22086B01D4F600000000E101E81640086B01C4F800000000E109B41B28086B01CCF800000000E101F61B2E006B01D4F800000000E101211C2E006B01FFF800000000E1095C1C28086B0107F9000000008618B301C4066B0126F900000000810070252E006C01BC0501000000E101361BBC146C011C0601000000E1017A1B22086C01240601000000E101E81640086C01220801000000E109B41B28086C012A0801000000E101F61B2E006C01310801000000E101211C2E006C01330801000000E1095C1C28086C013B08010000008618B301C4066C01880801000000E101361BBC146D01E80801000000E1017A1B22086D01F00801000000E101E81640086D01F20901000000E109B41B28086D01FA0901000000E101F61B2E006D01010A01000000E101211C2E006D01030A01000000E1095C1C28086D010B0A010000008618B301C4066D01940A01000000E101361BBC146E01F40A01000000E1017A1B22086E01FC0A01000000E101E81640086E01130D01000000E109B41B28086E011B0D01000000E101F61B2E006E01220D01000000E101211C2E006E01240D01000000E1095C1C28086E012C0D010000008618B301C4066E01780D01000000E101361BBC146F01D80D01000000E1017A1B22086F01E00D01000000E101E81640086F01EB0E01000000E109B41B28086F01F30E01000000E101F61B2E006F01FA0E01000000E101211C2E006F01FC0E01000000E1095C1C28086F01040F010000008618B301C4066F01FC1101000000E101361BBC147001681201000000E1017A1B22087001701201000000E101E81640087001981401000000E109B41B28087001A01401000000E101F61B2E007001A71401000000E101211C2E007001A91401000000E1095C1C28087001B114010000008618B301C4067001041501000000E101361BBC147101701501000000E1017A1B22087101781501000000E101E816400871018C1601000000E109B41B28087101941601000000E101F61B2E0071019B1601000000E101211C2E0071019D1601000000E1095C1C28087101A516010000008618B301C406710100000100D60C00000100E00C00000100F30100000100EA0C000002004D0A00000300F10C00000100EA0C000002004D0A00000300F10C00000400FF0C000001001A0D000001001A0D00000100220D000002002C0D000003003A0D00000100220D000002002C0D000003003A0D00000100490D00000200560D00000100490D00000200560D00000100490D00000100640D00000200730D000001008A0D00000100970D00000100640D000001008A0D00000100A10D00000100B00D00000100BC0D00000100C60D00000100CF0D00000200D70D00000100E60D00000200F90D00000100CF0D00000200070E000003000F0E00000400190E00000500230E00000100CF0D00000200070E000003000F0E00000400190E00000500230E00000100320E00000200370E00000100CF0D00000100320E00000100CF0D00000100CF0D000001003D0E00000200470E000003004F0E00000100CF0D000002004F0E000001003D0E00000200470E000003005F0E000001006C0E00000100750E000001003D0E00000200470E000003007D0E000004008E0E000001009A0E00000200A30E000001009A0E00000200A30E00000100A80E00000200B30E000003003D0E00000100CD0E00000200D50E00000100CF0D00000100CF0D00000100320E00000200370E00000300DD0E00000400E10E00000500E60E00000600ED0E00000700F40E00000100CF0D00000200000F000003000F0F00000100CF0D00000100170F02000200780602000300840602000400920602000500A20602000600A70600000100470F00000100170F02000200780602000300840602000400A20602000500A70602000600480000000100470F00000200480000000100780600000200840600000300920600000400A20600000100780600000200840600000300920600000400A20600000500A70600000100780600000200840600000300A20600000400480000000100780600000200840600000300A20600000400A70600000500480000000100520F000001005D0F00000100520F000002006A0F000003006F0F00000100520F00000100720F00000200770F00000300820F00000100170F020002006107020003006C07020004007807020005008907020006009A0702000700A70702000800B40702000900BE0702000A00C70702000B00D50702000C00E80702000D00F60702000E000408000001008D0F00000200980F00000300AB0F00000400B70F00000500C70F00000600D50F00000100520F00000100520F00000100520F00000100520F00000100520F00000200EA0F00000100F80F000002000210000003000F0F000001000F10000001001B1000000200301000000300421000\
-0004004A10000000000000000001001B10000002003010000003004210000004004A10000000000000000001001B10000002003010000003004210000004000A09000005004A1000000100170F02000200F10802000300FA08020004005B10020005006410020006000A09000001001B10000002003010000003004210000004004A10000001001B10000002003010000003004210000004004A10000000000000000001001B10000002003010000003006B1000000400650A000005004210000006004A10000001001B1000000200301000000300650A000004004210000005004A10000000000000000001001B10000002003010000003007710000004008A10000005004210000006000A09000007004A10000000000000000001009E1000000000000000000100B110000001001B10000002003010000003004210000004000A09000005004A10000000000000000001001B10000002003010000003006B10000004008A1000000500650A000006004210000007004A1000000100C61000000200D51000000300E61000000100F31000000200C61000000100FB1000000200091100000300161100000100D510000001000911000002002D11000001000F10000001003D11000002004911000003005511000004006011000001003D11000002004911000003005511000004006011000001003D11000001003D11000002004911000001003D11000002004911000003006011000001003D11000002004911000003006011000001003D11000002006F11000003007B11000001003D11000002006F11000003007B1100000100170F020002008811020003009111000001003D1100000200220D000003009A1100000100A61100000200220D00000300AA11000001003D1100000200B51100000300220D000001003D1100000100BF1100000200CC11000001003D1100000200D91100000300421000000400601100000500E01100000100ED11000001003D1100000200D91100000300421000000400F51100000500601100000600E011000001003D11000002000212000003000C12000001003D11000002001312000000000000000001002212000002002D12000003006B10000001003D11000002003212000003000F0F00000100170F020002000B0C02000300120C000001004112000002004A1200000300511200000100411200000200561200000300511200000100170F02000200190C02000300220C000001004112000002004A1200000300511200000100411200000200561200000300511200000100170F020002002B0C02000300370C000001006012000002005112000003006B12000001007412000002008212000003005112000004006B12000001007412000002008E12000003005112000004006B12000001009D1200000100AA1200000100B91200000100AA1200000100B91200000100CA1200000100CE1200000200D71200000100DE1200000100E71200000200DE1200000100E71200000200DE1200000100E71200000200DE1200000100F11200000100480000000200FF12000001000A13000002001913000003002C13000004003D1300000100FE1A000001003C1C00000100FE1A00000100FE1A000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C000001003C1C2000160020004D0020001A002000DD002000F1002200160022004D0022001A002200DD002200F1002300160023004D0023001A002300DD002300F1002400160024004D0024001A002400DD002400F1002500160025004D0025001A002500DD002500F1002600160026004D0026001A002600DD002600F1002700160027004D0027001A002700DD002700F1002800160028004D0028001A002800DD002800F1002900160029004D0029001A002900DD002900F1002A0016002A004D002A001A002A00DD002A00F1002B0016002B004D002B001A002B00DD002B00F100D900B3012E00E100B3012E00E900B301BA06F100B301BA06F900B301BA060101B301BA060901B301BA061101B301BA061901B301BA062101B301BA062901B301BF063101B301BA063901B301BA064101B3012E004901B301C4065101B3012E00690124156B0771012B1571077901B301BA06590123097D0779014C158207090023093E006901B30193076901241599077901B3019F0779015315A50779014C15A90781017115B30789017A15BA0669017F15B90779018E15C40669019915BF076901A315C5077901AF15CB070900B3012E009101B3012E006901CC153E009901B3012E000C00B301C4060C004816F5070C004C16FD07A10123093E0079014C1506081400B3012E00290070161C08B101A0162208B901AE162808C101C2162C083100CB163108D901FA083508140048163A08B901E8164008E101FD162E0014000517A5071400C2165808690124155E086901480A65081400A01672081C00AE1684081C00E81640083100B3019B083100B301A30869011A173E003100B301AC08F101B301BA064100B301BA08F901B3012E0051005E17400849006917050959005E1740080102B301BA06590083173E006901010A3E0069018D173E00510083170A097101AD170F096901BC1718094900B3011D0949005E1740085100691769094900831718097101C8176E095100B30177097101DC17B7097101E417BC094900B3012E0079014C15050A1102F7177B035100B3012E001902B3012E0071012B15570A71012B155C0A21022118610A5100B301660A49005315C30A51005315C30A7901B301C40671008317A50761002B185A0B69003318600B69008317B40B61004818B90B29025118A50771003318C10B3102B318D30B6100B301DD0B6100CD18E40B6100DB18A5076100E918A5076100F118A5076100FB18A50761005E0AEA0B6901AF08250C710104192B0C5102A108300C610283173E0069011A19320069012019C50759023E19380C6902C2163E0C71014F19450C6901230A4A0C710157199A0C6900B3019F0C6100C204F10C6100E8047F0D79003318C80D610060193E00590033180E0E610071193E0061008219B40B61008B19920E81008317C30A61009319C30A6901F909300F6901F909360F6901B7083C0F6901AF15BF07810223093E006100B301A20F89008317AC0F6100CA195A0B2902D519AC0F89003318EC0F69015E0A31107900E619400869005E1740087100F119931089020F1A971071014F199C1071011D1AA1109102B301C4069102271AA8108902331AB41071014F19BD1061003B1AA5076100441AA50761004F1AA50761005A1AA5076900F1196C116100B301701191005E17400891008317E3119902B301BA06610023097D07A102B01A39136100230940132400B3012E00240048163A082C00A016C5149900A01622083400AE168408B9011B1C2E00C902B3012E00D102E01DF414D102F21DA5072400A01672083C00AE1684083C00E81640084400B301101524002D121615D902B3012E004C00B3012E004C0048163A085400B30110154C004D1F69164C00A01672085C00AE1684085C00E81640084C002D12161569015315A507E102B301811664004C16FD078902B21F971071005E174008F102B3012E00F102BE1FCF17F102B301C4066C00B3012E008902C31F7E198902C91F84198902331A97108902C31F8A196100DE1F93196C0048163A0889021D079710890222079710890227079710A1008317CA1AA9008317111B910223097D079102230940136901B708211B6901B3011D095102B301771B51026F087E1B5900F119A4145102A108CB1B5102A108111C4900B3011A1C7400B3012E007102FC1F400861020820A50761025315A507740048163A085102A708CC1D0103C216D41D01030517A5075102AF08151E5102CA08651F5102D108651F690124152020090366212E2009037B213420110383213A2019038F21A50719039921A5071903A321A5072103B3012E00B900B3012E007901C3218207B90048165B20B900CE212E002903B301BA068901F521602031031122A5077901202267203903B301BA067901B3012E00410355222E002903B301B32049036422A507410374222E002903B3012E0029037A22E92079008922F02049039122BA062903AF22F62089017A15FC20690124150321F101BD223E005903D6224008590374222E004103F3220B214903FD222E0069031B239F2171033123C40671035223C40671037323BF0679039E23A6216903B523AC216903D123B3218903ED23B92199030824BF21A103B301C521A90329243E00890374222E00A90374222E00B103B301BA0689014924FE21B900C216042241005A24092289016424FE21B9000517A507890173242E0079014C159B226901B708A922B9039924B3221900AB24BC229902B301C5226901ED0913236901F90913236901060A311069010F0A0D246901180A0D247101E417942469012B0A4A0C59038925400859039525E82659039E2504225903B72540086901ED093B2769019915862769015E0A0D247100201909287900BC25F0207900C52512287101DC17D32851026F0831105102AF08250CA102B301BA06A102E725C52981020726CB29A1010726D829D1010726E52959010726F22981003318FF298100F119052A6100982793196100A1275A0B6100AA275A0B6100B5275A0B610052285D2D61005E285D2D8902D8289710890052284C2E8900DC28552E6901F9095E2E6901AF158627D903B301AF2E21026929BA2E210274222E0019026F290A091902B3017709D903B3010E2F21027729A507E903B301AF2EE903B3010E2F51026F08F12F5100C2168B30F9031B239C300104D829A23009041B23A93011041B23AF3019041B23B53021041B23BB302904B301BA06C900331842317900F119E431A1010726B4324903382ABB3269012415C2323904FD162E004104FC0B4B334904B3012E0064004816F5076400B3012E000E00E0003C020E00E40083020E0008017F030E000C01F0030E0010015904080038012C0608003C013106080040013606080044013B060800480140062E002B0070332E00330076332E003B0050332E0023005A332E0043008C332E004B0070332E005B0070332E006B00CF332E0073002C062E007B00DB332E008300E4332E001B00503320021B02C80840021B022A0960021B027D0980021B02C809A0021B021A0AC0021B027D0AE0021B02CC0A00031B02120B20031B026C0B63031B0B2C06A30333012C06C0031B02590CE0031B02B10CE30333012C0600041B02020D030433012C0620041B023F0D230433012C0640041B028C0D430433012C0660041B02CE0D630433012C0680041B02140E830433012C06A0041B02540EA30433012C06C0041B02B10EC30433012C06E0041B02F00EE30433012C0600051B02640F030533012C0620051B02B00F230533012C0640051B02FC0F430533012C0660051B025A10630533012C0680051B023211A0051B029B11C0051B02F111E0051B02421200061B02881220061B02C41240061B02011360061B025013E0061B02B01340071B02421540081B02881660081B02C81680081B020817A0081B025417C0081B02921700091B02DA1720091B02B41924090B004D0640091B02EA1960091B02201A80091B02561AA0091B02901AC0091B02D21A400A1B023D1B600A1B028D1B800A1B02D31BC00A1B02251CE00A1B02F91C000B1B02DB1D040B0B004D06200B1B02251E400B1B02E41E600B1B022C1F800B1B026A1FA00B1B02A51FC00B1B02DD1F400C7B074020600C7B078D20800C7B07C820A00C7B072C21C00C1B025821E00C7B07E421000D1B021D22200D1B025E22C00D1B02D422E00D1B022223000E1B025D23200E1B029523400E1B02D123600E1B021B24800E1B025924A00E1B029E24E00E1B02DF24000F1B028D25200F1B02FF26400F1B024B27600F1B029127800F1B02D027A00F1B022328C00F1B025E28E00F1B029C2800101B02F32820101B02492940101B028429C0101B021A2AE0101B02B72A20111B02512B40111B02FC2BA0111B02A72CC0111B02652DE0111B02132E00121B02792E20121B02D62E40121B02272F60121B026D2F80121B02B52FA0121B020030C0121B02543000131B02C73020131B02063140131B02493160131B02A13180131B02E831A0131B020B33C4130B00600604140B004D0664140B008106801473052C06A01473052C06C4140B008106E01473052C06001573052C0604150B008106401573052C06601573052C0664150B008106A4150B008106001673052C06201673052C06601673052C06801673052C06C01673052C06E01673052C0604170B008106201773052C06401773052C0664170B008106801773052C0684170B008106A01773052C06E01773052C06E4170B008106001873052C0604180B008106201873052C0624180B008106401873052C06801873052C06A01873052C06C4180B008106E01873052C06E4180B008106001973052C06201973052C06401973052C0664190B008106801973052C0684190B008106A01973052C06A4190B008106E01973052C06E4190B008106001A73052C06401A73052C06601A73052C06641A0B008106841A0B008106A01A73052C06A41A0B008106C01A73052C06C41A0B008106E41A0B008106001B73052C06041B0B008106201B73052C06401B73052C06601B73052C06841B0B008106A01B73052C06A41B0B008106C01B73052C06C41B0B008106001C73052C06041C0B008106201C73052C06401C73052C06601C73052C06841C0B009406A01C73052C06A41C0B009406C01C73052C06001D73052C06201D73052C06401D73052C06601D73052C06841D0B009406A01D73052C06C01D73052C06001E73052C06201E73052C06401E73052C06601E73052C06A01E73052C06C01E73052C06001F73052C06201F73052C06401F73052C06601F73052C06A01F73052C06C01F73052C06002073052C06202073052C06E4240B00810604250B00810624250B00810644250B00810684250B00A706A4250B004D06042C0B0081060000010000000E0000000100000011000100400000001E0077078907D3070D0844086C088908B308C1082309C1090C0A6D0AC70A670BC70BF00B500CAA0CF70C840D9A0E460FF20F3610C4107B11E71139127E124813A013AB13FA142215271532153D155B16C316021748178D17D5179919CE1A171B281B841B201CE51CC61D1D1EDE1E231F26206F20BB2011214B21CF210F225A22A222CB221C2315249924DA247F258525ED2640278B27CB271B28D8283029092A152AB12A462B4C2BF62B952C9B2CA02C572D0D2E632EC22E182F602FA62FF92F3B309030C130FD309431C932200001002200030023000500240007002500090026000B0027000D0028000F00290011002A0013002B0015000000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140000381DF0140000761DF0140200A70003000200AA0005000200B30007000200B60009000200BC000B000200BF000D000200C4000F000200C70011000200CC0013000200CF0015000200D50017000200D80019000200DD001B000200E0001D000200E5001F000200E80021000200ED0023000200F00025000200F50027000200F80029000200FD002B00020000012D0020004801550120004A01570120004C01690020004E015901200050015B01200052016B00200054015F00220060015501220062015701220064016900220066015901220068015B0122006A016B0022006C015F0023007801590123007401570123007601690023007201550123007A015B0123007C016B0023007E015F0024008801590124008401570124008601690024008201550124008A015B0124008C016B0024008E015F0025009201550125009401570125009601690025009801590125009A015B0125009C016B0025009E015F002600AA0159012600A60157012600A80169002600A40155012600AC015B012600AE016B002600B0015F002700BA0159012700B60157012700B80169002700B40155012700BC015B012700BE016B002700C0015F002800C40155012800C60157012800C80169002800CA0159012800CC015B012800CE016B002800D0015F002900D40155012900D60157012900D80169002900DA0159012900DC015B012900DE016B002900E0015F002A00EA0159012A00E60157012A00E80169002A00E40155012A00EC015B012A00EE016B002A00F0015F002B00F40155012B00F60157012B00F80169002B00FA0159012B00FC015B012B00FE016B002B0000025F00EE0715087C089913AE14B514001508152B156116791641177719DE1C60370000560004800000030003005300000001000000C9060E15000002000000000000000000000001003A01000000000200000000000000000000000100B602000000000200000000000000000000000100430100000000030002000400020008000700090007000A0007000B0007000D000C0010000F001500140018001700190017001A0017001E001D001F00070020000700210007002200070023000F0024000F0025001400260017002700170028001700290017002A0017002B0017000000003C4D6F64756C653E0053514C232E646C6C00436F6D6D6F6E00536368656D61436F6C756D6E00526573756C74536368656D6100434F4E564552540044415445004C6F6F6B557000436F756E747279436F646500434F554E545259434F444544617461005374617465436F6465005354415445434F444544617461004D415448004D617468416D6F7274697A6174696F6E5363686564756C6500417070436F6E7374616E74730052454745580052656745784D617463686573005F5F56657273696F6E005F5F4C6F636174696F6E0053514C736861727000535452494E4700535452494E4753706C69747300537973005554494C495459005574696C697479496E7473005574696C697479466C6F617473005574696C6974794461746554696D657300486F6C6964617900556E6974436F6E76657273696F6E006D73636F726C69620053797374656D004F626A6563740056616C75655479706500456E756D00436F6E76657274436861724172726179546F42696E61727900436F6E7665727442696E617279546F486578537472696E67004765744672616374696F6E616C5365636F6E6473466F726D6174005072696E74002E63746F7200436F6C756D6E4E616D650044617461547970650049734E756C6C61626C6500436F6C756D6E53697A65004D61784C656E6774680049734D617800507265636973696F6E005363616C65004973416C696173656400497345787072657373696F6E0049734964656E746974790049734B6579004973526561644F6E6C7900497348696464656E004261736544617461626173654E616D650042617365536368656D614E616D6500426173655461626C654E616D650042617365436F6C756D6E4E616D650047657446756C6C44617461547970650053797374656D2E436F6C6C656374696F6E732E47656E65726963004C697374603100436F6C756D6E730053797374656D2E4461746100446174615461626C6500506F70756C617465536368656D6100476574436F6C756D6E4C69737400476574436F6C756D6E44657461696C73004D6963726F736F66742E53716C5365727665722E5365727665720053716C4D657461446174610053716C44625479706500476574436F6C756D6E4D657461446174615769746853697A6500476574436F6C756D6E4D6574614461746157697468507265636973696F6E416E645363616C6500476574436F6C756D6E4D657461446174610053716C446174615265636F726400476574446174615265636F72640053797374656D2E446174612E53716C54797065730053716C43686172730053716C42797465730053716C537472696E6700546F4261736536340046726F6D42617365363400524F543133005555456E636F64654D6170005555456E636F64650055554465636F646500486578537472696E67546F42696E6172790042696E617279546F486578537472696E67004461746554696D65005F5F4D53496E744461746545706F63680053716C4461746554696D650053716C496E743332004D53496E7444617465546F4461746554696D65004461746554696D65546F4D53496E744461746500497344617465427573696E657373446179005375627374697475746554696D655370616E0046697273744461794F664D6F6E7468004C6173744461794F664D6F6E74680044617973496E4D6F6E746800446179734C656674496E596561720053716C426F6F6C65616E0049734C656170596561720046756C6C44617465537472696E670046756C6C54696D65537472696E670053716C496E74363400427573696E65737344617973004973427573696E65737344617900466F726D617454696D655370616E0053716C446F75626C650046726F6D554E495854696D6500546F554E495854696D65004167650045787472616374005472756E636174650053716C496E743136004E74684F6363757272656E63654F665765656B646179004765744461746554696D6546726F6D496E7456616C7300476574496E744461746500476574496E7454696D65004E65774461746554696D6500466F726D61740044617973496E4D6F6E746846726F6D4461746554696D6500476574436F756E747279436F64657300434F554E545259434F44454461746146696C6C526F770053797374656D2E436F6C6C656374696F6E730049456E756D657261626C6500476574436F756E747279496E666F004765745374617465436F646573005354415445434F44454461746146696C6C526F77004765745374617465496E666F004E756D65726963436F64650054776F4C6574746572436F64650054687265654C6574746572436F6465004E616D6500466C6167496D61676500466163746F7269616C00436F6E7374616E7400436F6E766572740049735072696D650052616E646F6D52616E6765004D415448416D6F7274697A6174696F6E5363686564756C6546696C6C526F7700436F6D706F756E64416D6F7274697A6174696F6E5363686564756C6500436F73680053696E680054616E68005F5F4F6E6554686972640043756265526F6F740053716C427974650053716C446563696D616C00466F726D6174446563696D616C005061796D656E744E756D005061796D656E744461746500426567696E6E696E6742616C616E6365005363686564756C65645061796D656E740045787472615061796D656E7400546F74616C5061796D656E74005072696E636970616C00496E74657265737400456E64696E6742616C616E63650043756D756C6174697665496E74657265737400546F74616C496E74657265737400546F74616C5061796D656E7473005061796D656E74734C656674004441544554494D455F464F524D4154004441544554494D455F4442464F524D41540053797374656D2E546578742E526567756C617245787072657373696F6E730052656765784F7074696F6E730047657452656745784F7074696F6E730049734D61746368004D6174636853696D706C65004D617463684C656E6774680052454745584D6174636846696C6C526F77004D61746368004D617463686573005265706C6163650053706C6974004361707475726547726F75700045736361706500556E65736361706500496E646578005265706C61636549664D617463686564004D617463684E756D0056616C756500537461727400456E64004C656E677468004D616A6F72004D696E6F72004275696C6400546F537472696E670056657273696F6E00417373656D626C790057656253697465005365747570004772616E745065726D697373696F6E7300536574536563757269747900556E696E7374616C6C004973557064617465417661696C61626C650048656C700047657456657273696F6E0041727261794C69737400416464417373656D626C794F626A656374730053797374656D2E476C6F62616C697A6174696F6E00436F6D706172654F7074696F6E7300476574537472696E67436F6D706172654F7074696F6E73004C617374496E6465784F6600496E6465784F66005472696D00436F6E7461696E7300456E6473576974680053746172747357697468005061644C65667400506164526967687400535452494E4753706C69747346696C6C526F77004A6F696E00576F72645772617000496E697443617000457175616C7300436F756E74004E65776C696E65004E7468496E6465784F66004375740049734E756D65726963005472795061727365546F496E74004E756D0056616C005554494C495459496E747346696C6C526F770047656E6572617465496E7452616E67650047656E6572617465496E7473005554494C495459466C6F61747346696C6C526F770047656E6572617465466C6F617452616E67650047656E6572617465466C6F617473005554494C4954594461746554696D657346696C6C526F77005554494C4954595570646174654461746554696D650047656E65726174654461746554696D6552616E67650047656E65726174654461746554696D657300546F576F72647300475A69700047556E7A6970004465666C61746500496E666C61746500497356616C696453534E00497356616C69644343004352433332004765744861736800486173680053716C42696E617279004861736842696E61727900497356616C6964436865636B526F7574696E674E756D62657200497356616C6964506F7374616C436F646500497356616C6964436F6E7665727400476574546F74616C4D656D6F727900496E744E756D00496E7456616C00466C6F61744E756D00466C6F617456616C004461746554696D654E756D004461746554696D6556616C0076616C75655F5F0053617475726461790053756E646179004E6577596561727344617949665765656B646179004E6577596561727344617949664E6577596561724F6E5361747572646179004E6577596561727344617949664E6577596561724F6E53756E6461790044696374696F6E617279603200526174696F7300506F70756C617465526174696F73002E6363746F7200486578537472696E670042797465417272617900536F75726365004D61784C696E654C656E67746800576F726457726170436861726163746572734F7665727269646500526573756C747300536570617261746F72004C6566745369646551756F74650052696768745369646551756F746500436F6C756D6E4E756D626572004669656C64446174615479706500556E656E636F64656456616C756500426173653634466F726D617474696E674F7074696F6E00456E636F64656456616C7565005465787456616C756500486578537472696E6756616C75650042696E61727956616C7565004D53496E7444617465005265616C446174650054686544617465004578636C7564654461794D61736B005265706C6163656D656E744F7074696F6E730054696D65436F6D706F6E656E74004E6577486F7572004E65774D696E757465004E65775365636F6E64004E65774D696C6C697365636F6E640059656172004D6F6E74680053746172744461746500456E6444617465004578636C756465446179734D61736B004F7574707574466F726D617400554E495844\
-6174650053514C44617465004C6561705965617248616E646C696E6700496E636C756465446179730044617465506172740044617465004F6363757272656E6365005765656B6461790053716C466163657441747472696275746500496E744461746500496E7454696D650044617900486F7572004D696E757465005365636F6E64004D696C6C697365636F6E64004461746554696D65466F726D61740043756C74757265006F626A0053797374656D2E52756E74696D652E496E7465726F705365727669636573004F757441747472696275746500536561726368436F646500426173654E756D62657200436F6E7374616E744E616D650046726F6D00546F0053656564004C6F776572426F756E64005570706572426F756E64004C6F616E416D6F756E7400416E6E75616C496E746572657374526174650059656172734F664C6F616E005061796D656E747350657259656172004C6F616E537461727444617465004F7074696F6E616C45787472615061796D656E7400446563696D616C506C61636573005468654E756D626572004E756D626572466F726D6174004F7074696F6E734C6973740045787072657373696F6E546F56616C696461746500526567756C617245787072657373696F6E00537461727441740052656745784F7074696F6E734C697374005374617274506F7300456E64506F73005265706C6163656D656E74004361707475726547726F75704E756D626572004E6F74466F756E645265706C6163656D656E740045787072657373696F6E546F4573636170650045787072657373696F6E546F556E6573636170650053514C7368617270536368656D610053514C7368617270417373656D626C79004A7573745072696E7453514C004772616E74546F005065726D697373696F6E53657400417373656D626C794E616D65005365745472757374776F7274687949664E6F5573657200417373656D626C794F626A6563747300537472696E6756616C75650053656172636856616C7565005374617274496E64657800436F6D70617269736F6E5479706500537472696E675769647468005061644368617261637465720053706C69744E756D0053706C697456616C0053706C69744F7074696F6E0053514C004A6F696E4F7074696F6E004C696E65576964746800537472696E6756616C75654100537472696E6756616C7565420053656172636800436F756E744F7665726C617000454F4C54797065004E74684F63637572616E63650044656C696D69746572004669656C6473004E756D626572547970654D61736B0045787072657373696F6E0046696E640054617267657444617461547970650053746172744E756D00456E644E756D005374657000546F74616C4E756D73004461746554696D65496E0053746570547970650053746172744461746554696D6500456E644461746554696D6500546F74616C4461746554696D6573004E756D6572696356616C75650044617461546F436F6D70726573730044617461546F4465636F6D70726573730053534E0043434E756D6265720043435479706500426173654461746100416C676F726974686D00526F7574696E674E756D62657200506F7374616C436F64650056616C7565546F436F6E7665727400436F6E76657274546F44617461547970657300446563696D616C507265636973696F6E00446563696D616C5363616C650053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E536563757269747900416C6C6F775061727469616C6C795472757374656443616C6C6572734174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C230042797465004368617200537472696E6700436F6E63617400546F427974650053797374656D2E5465787400537472696E674275696C64657200417070656E64006765745F4C656E6774680053716C436F6E746578740053716C50697065006765745F506970650053656E64004C617374496E6465784F66416E79007365745F4C656E67746800537562737472696E67006F705F457175616C6974790052656D6F76650053657269616C697A61626C6541747472696275746500546F5570706572003C50726976617465496D706C656D656E746174696F6E44657461696C733E7B35343131323337462D434134392D344438382D393230432D3541383845313636444142437D00436F6D70696C657247656E6572617465644174747269627574650024246D6574686F643078363030303030372D31004164640054727947657456616C756500496E7433320044617461526F77436F6C6C656374696F6E006765745F526F777300496E7465726E616C44617461436F6C6C656374696F6E426173650049456E756D657261746F7200476574456E756D657261746F72006765745F43757272656E740044617461526F77006765745F4974656D006765745F4D617800426F6F6C65616E00496E7431360044424E756C6C004D6F76654E6578740049446973706F7361626C6500446973706F7365006765745F436F756E7400456E756D657261746F7200546F4C6F776572496E76617269616E740024246D6574686F643078363030303030662D3100457863657074696F6E0053716C46756E6374696F6E417474726962757465006765745F49734E756C6C006765745F4E756C6C0053716C54797065457863657074696F6E006765745F56616C756500546F4C6F77657200426173653634466F726D617474696E674F7074696F6E7300546F426173653634537472696E6700546F4368617241727261790046726F6D42617365363443686172417272617900546F496E74313600546F4368617200456E7669726F6E6D656E74006765745F4E65774C696E650053797374656D2E494F004D656D6F727953747265616D0053747265616D005772697465427974650041646444617973006F705F496D706C696369740054696D655370616E005375627472616374006765745F44617973005F5F5374617469634172726179496E69745479706553697A653D36340024246D6574686F643078363030303039662D310052756E74696D6548656C706572730041727261790052756E74696D654669656C6448616E646C6500496E697469616C697A654172726179004461794F665765656B006765745F4461794F665765656B006765745F4461794F6659656172006765745F446179006765745F4D6F6E7468006765745F5965617200546F496E743634005265676578004361707475726500456D707479006F705F496E657175616C6974790047726F7570436F6C6C656374696F6E006765745F47726F7570730047726F757000546F496E74333200546F446F75626C6500546F4C6F6E6744617465537472696E6700546F4C6F6E6754696D65537472696E67006765745F4461746500436F6D70617265006765745F5469636B7300537472696E6753706C69744F7074696F6E730024246D6574686F643078363030303032362D3100496E743634004164645365636F6E6473006765745F546F74616C5365636F6E6473006765745F497354727565004E756C6C0024246D6574686F643078363030303032612D31004D61746800466C6F6F7200446563696D616C00546F446563696D616C006F705F4469766973696F6E004365696C696E67006765745F486F7572006765745F4D696E757465006765745F5365636F6E64006765745F4D696C6C697365636F6E640024246D6574686F643078363030303032622D3100417267756D656E74457863657074696F6E0024246D6574686F643078363030303032632D310043756C74757265496E666F00437265617465537065636966696343756C747572650049466F726D617450726F7669646572003C3E635F5F446973706C6179436C61737332003C476574436F756E747279496E666F3E625F5F30005F5F436F6465003C476574436F756E747279496E666F3E645F5F340049456E756D657261626C6560310049456E756D657261746F7260310053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E4F626A6563743E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E49456E756D657261626C652E476574456E756D657261746F72003C3E325F5F63757272656E740053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E6765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E52657365740052657365740053797374656D2E49446973706F7361626C652E446973706F7365003C3E315F5F7374617465003C3E6C5F5F696E697469616C54687265616449640053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E6765745F43757272656E74003C3E335F5F536561726368436F6465003C5F5F43757272656E74436F756E747279436F64653E355F5F35003C5F5F43757272656E745265636F72643E355F5F36003C5F5F436F756E747279436F64653E355F5F37005072656469636174656031004353243C3E395F5F436163686564416E6F6E796D6F75734D6574686F6444656C656761746531004353243C3E385F5F6C6F63616C7333003C3E375F5F7772617038003C3E6D5F5F46696E616C6C79390053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E43757272656E740053797374656D2E446961676E6F737469637300446562756767657248696464656E4174747269627574650053797374656D2E546872656164696E6700546872656164006765745F43757272656E74546872656164006765745F4D616E616765645468726561644964004E6F74537570706F72746564457863657074696F6E003C3E635F5F446973706C6179436C6173733130003C4765745374617465496E666F3E625F5F63003C4765745374617465496E666F3E625F5F64003C4765745374617465496E666F3E645F5F3132003C3E335F5F436F756E747279436F6465003C5F5F43757272656E745374617465436F64653E355F5F3133003C5F5F5374617465436F6465733E355F5F3134003C5F5F43757272656E745265636F72643E355F5F3135003C5F5F5374617465436F64653E355F5F3136004353243C3E395F5F436163686564416E6F6E796D6F75734D6574686F6444656C656761746565004353243C3E395F5F436163686564416E6F6E796D6F75734D6574686F6444656C656761746566004353243C3E385F5F6C6F63616C733131003C3E375F5F777261703137003C3E6D5F5F46696E616C6C7931380046696E64416C6C005374727563744C61796F7574417474726962757465004C61796F75744B696E640024246D6574686F643078363030303034322D310024246D6574686F643078363030303034332D310024246D6574686F643078363030303034332D3200537172740052616E646F6D004E65787400526F756E6400506F77004D6964706F696E74526F756E64696E67004164644D6F6E7468730024246D6574686F643078363030303034662D31006765745F53756363657373006765745F496E646578003C4D6174636865733E645F5F30003C3E335F5F45787072657373696F6E546F56616C6964617465003C3E335F5F526567756C617245787072657373696F6E003C3E335F5F53746172744174003C3E335F5F52656745784F7074696F6E734C697374003C5F5F52656745784F7074696F6E733E355F5F31003C5F5F52656765784D617463683E355F5F32004D61746368436F6C6C656374696F6E003C5F5F4D617463683E355F5F33003C5F5F52656765783E355F5F34003C5F5F496E6465783E355F5F35003C53706C69743E645F5F38003C3E335F5F436F756E74003C5F5F52656745784F7074696F6E733E355F5F39003C5F5F52656765784D617463683E355F5F61003C5F5F4D617463683E355F5F62003C5F5F52656765783E355F5F63003C5F5F5374617274506F736974696F6E3E355F5F64003C5F5F496E6465783E355F5F65003C5F5F4D6178436F756E743E355F5F6600476574457865637574696E67417373656D626C79004765744E616D65006765745F56657273696F6E006765745F4D616A6F72006765745F4D696E6F72006765745F4275696C640053716C50726F63656475726541747472696275746500417070656E644C696E6500436C6561720053797374656D2E446174612E53716C436C69656E740053716C436F6D6D616E640045786563757465416E6453656E640053716C457863657074696F6E006765745F4C696E654E756D62657200496E736572740053716C436F6E6E656374696F6E0053797374656D2E446174612E436F6D6D6F6E004462436F6E6E656374696F6E004F70656E004462436F6D6D616E6400457865637574654E6F6E517565727900436C6F7365007365745F436F6E6E656374696F6E006F705F54727565007365745F436F6D6D616E64546578740053716C446174615265616465720045786563757465526561646572006765745F4D65737361676500446244617461526561646572006765745F4973436C6F73656400436F6E6E656374696F6E5374617465006765745F537461746500507265706172650053797374656D2E4E6574005765625265717565737400437265617465004874747057656252657175657374007365745F4D6178696D756D4175746F6D617469635265646972656374696F6E73007365745F4D6178696D756D526573706F6E7365486561646572734C656E677468007365745F4B656570416C6976650043726564656E7469616C4361636865004943726564656E7469616C73006765745F44656661756C7443726564656E7469616C73007365745F43726564656E7469616C7300576562526573706F6E736500476574526573706F6E73650048747470576562526573706F6E736500476574526573706F6E736553747265616D00456E636F64696E67006765745F555446380053747265616D52656164657200546578745265616465720052656164546F456E640053716C4E756C6C56616C7565457863657074696F6E0053656E64526573756C7473537461727400536574537472696E670053656E64526573756C7473526F770053656E64526573756C7473456E6400547970650052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500506172736500537472696E67436F6D70617269736F6E003C53706C69743E645F5F30003C3E335F5F537472696E6756616C7565003C3E335F5F536570617261746F72003C3E335F5F53706C69744F7074696F6E003C5F5F43757272656E7453706C69743E355F5F31003C5F5F43757272656E74436F756E743E355F5F32003C5F5F536570617261746F723E355F5F33003C5F5F54656D70537472696E673E355F5F34003C5F5F53706C69744F7074696F6E3E355F5F35003C5F5F53706C69743E355F5F36003C3E6D5F5F46696E616C6C7937003C3E375F5F7772617039006765745F486173526F777300497344424E756C6C0047657450726F7669646572537065636966696356616C75650052656164006F705F46616C7365006F705F42697477697365416E640024246D6574686F643078363030303037612D31006765745F43757272656E7443756C74757265004E756D6265725374796C6573005472795061727365003C47656E6572617465496E7452616E67653E645F5F30003C3E335F5F53746172744E756D003C3E335F5F456E644E756D003C3E335F5F53746570003C5F5F43757272656E74496E743E355F5F31003C5F5F496E6465783E355F5F33003C5F5F496E6465783E355F5F34003C47656E6572617465496E74733E645F5F37003C3E335F5F546F74616C4E756D73003C5F5F43757272656E74496E743E355F5F38003C5F5F43757272656E74436F756E743E355F5F39003C5F5F496E6465783E355F5F61003C47656E6572617465466C6F617452616E67653E645F5F64003C5F5F43757272656E74466C6F61743E355F5F65003C5F5F43757272656E74436F756E743E355F5F66003C5F5F496E6465783E355F5F3130003C5F5F496E6465783E355F5F3131003C47656E6572617465466C6F6174733E645F5F3134003C5F5F43757272656E74466C6F61743E355F5F3135003C5F5F43757272656E74436F756E743E355F5F3136003C5F5F496E6465783E355F5F31370024246D6574686F643078363030303038392D3100416464596561727300416464486F757273004164644D696E75746573004164644D696C6C697365636F6E6473003C47656E65726174654461746554696D6552616E67653E645F5F3161003C3E335F5F53746172744461746554696D65003C3E335F5F456E644461746554696D65003C3E335F5F5374657054797065003C5F5F43757272656E744461746554696D653E355F5F3162003C5F5F43757272656E74436F756E743E355F5F3163003C5F5F496E6465783E355F5F3164006F705F4C6573735468616E006F705F477265617465725468616E003C47656E65726174654461746554696D65733E645F5F3230003C3E335F5F546F74616C4461746554696D6573003C5F5F43757272656E744461746554696D653E355F5F3231003C5F5F43757272656E74436F756E743E355F5F3232003C5F5F496E6465783E355F5F323300416273006F705F4D756C7469706C790024246D6574686F643078363030303038632D310024246D6574686F643078363030303038632D320024246D6574686F643078363030303038632D330024246D6574686F643078363030303038632D340053797374656D2E494F2E436F6D7072657373696F6E00475A697053747265616D00436F6D7072657373696F6E4D6F646500577269746500546F4172726179005265616442797465004465666C61746553747265616D0024246D6574686F643078363030303039322D310055496E7433320053797374656D2E53656375726974792E43727970746F677261706879004D44350048617368416C676F726974686D00436F6D7075746548617368005348413100534841323536005348413338340053484135313200496E76616C69644F7065726174696F6E457863657074696F6E0024246D6574686F643078363030303039392D3100436F6D6D616E6454797065007365745F436F6D6D616E64547970650053797374656D2E436F6D706F6E656E744D6F64656C00436F6D706F6E656E7400474300466C61677341747472696275746500000000053000780000055800320000032E00000100050D000A00000D620069006E006100720079000013760061007200620069006E0061007200790000096300680061007200000F7600610072006300680061007200000B6E00630068006100720000116E007600610072006300680061007200000F64006500630069006D0061006C00000F6E0075006D0065007200690063000009740069006D00650000136400610074006500740069006D0065003200001D6400610074006500740069006D0065006F00660066007300650074000003280000074D00410058000003290000032C00001543006F006C0075006D006E004E0061006D0065000019440061007400610054007900700065004E0061006D006500001543006F006C0075006D006E00530069007A006500000B6E007400650078007400001741006C006C006F007700440042004E0075006C006C00000D490073004C006F006E00670000214E0075006D00650072006900630050007200650063006900730069006F006E0000194E0075006D0065007200690063005300630061006C00650000134900730041006C0069006100730065006400001949007300450078007000720065007300730069006F006E000015490073004900640065006E007400690074007900000B490073004B006500790000154900730052006500610064004F006E006C007900001149007300480069006400640065006E00001F420061007300650043006100740061006C006F0067004E0061006D006500000D3C004E0055004C004C003E00001D420061007300650053006300680065006D0061004E0061006D006500001B42006100730065005400610062006C0065004E0061006D006500001D420061007300650043006F006C0075006D006E004E0061006D0065000003200000094E004F005400200000094E0055004C004C00000D62006900670069006E00740000076200690074000009640061007400650000116400610074006500740069006D006500000B66006C006F0061007400000B69006D00610067006500000769006E007400000B6D006F006E006500790000097200650061006C00001B73006D0061006C006C006400610074006500740069006D006500001173006D0061006C006C0069006E007400001573006D0061006C006C006D006F006E0065007900000974006500780074000013740069006D0065007300740061006D007000000F740069006E00790069006E007400002175006E0069007100750065006900640065006E007400690066006900650072000017730071006C005F00760061007200690061006E007400000778006D006C00000775006400740000090A000A0009007E0000057E000A00004D42006100730065003600340046006F0072006D0061007400740069006E0067004F007000740069006F006E002000630061006E004E004F00540020006200650020004E0055004C004C002E00002169006E0073006500720074006C0069006E00650062007200650061006B00730000096E006F006E006500004149006E00760061006C0069006400200042006100730065003600340046006F0072006D0061007400740069006E0067004F007000740069006F006E003A002000005D3B002000760061006C006900640020006F007000740069006F006E00730020006100720065003A0020004E006F006E006500200061006E006400200049006E0073006500720074004C0069006E00650042007200650061006B007300000F250028005C00640029002A006400000525007B0000053B003B00000573006D0000056D00730000057300730000056D006900000568006800000564006400000577006B0000056D006D00000579007900000725007B007D00000758005800580000053200380000036600000766006500620000156D0069006C006C0065006E006E00690075006D00000F630065006E007400750072007900000D640065006300610064006500000F690073006F0079006500610072000009790065006100720000136400610079006F0066007900650061007200000F7100750061007200740065007200000B6D006F006E007400680000097700650065006B00000F690073006F007700650065006B000011690073006F005F007700650065006B00000D690073006F0064006F0077000015690073006F007700650065006B00640061007900000F7700650065006B006400610079000007640061007900000968006F0075007200000D6D0069006E00750074006500000D7300650063006F006E00640000176D0069006C006C0069007300650063006F006E006400003149006E00760061006C00690064002000440061007400650050006100720074002000760061006C00750065003A00200000514F006300630075007200720065006E00630065002000630061006E004E004F00540020006200650020004E0055004C004C0020006F00720020006C006500730073002D007400680061006E0020003100013F5700650065006B006400610079002000630061006E004E004F00540020006200650020004E0055004C004C0020006F007200200065006D0070007400790000315300740061007200740044006100740065002000630061006E004E004F00540020006200650020004E0055004C004C00000D730075006E00640061007900000D6D006F006E00640061007900000F740075006500730064006100790000137700650064006E0065007300640061007900001174006800750072007300640061007900000D660072006900640061007900001173006100740075007200640061007900002F49006E00760061006C006900640020005700650065006B006400610079002000760061006C00750065003A00200000594E00650069007400680065007200200049006E007400440061007400650020006E006F007200200049006E007400540069006D0065002000630061006E0020006200650020006E0065006700610074006900760065002100000730003000340000054100460000074100460047000017410066006700680061006E0069007300740061006E000085BF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100330031003200320033003800460030003100370033004300300030003000300030003100320035003400390034003400340031003500340033003800380044004400350039003300330031003400420030003200300031003100430043003500370046004400450036003500310045003600360031004100340041003800370031003900340036003500460041003000380036004100380038003600330036003100330034003900310030003200340041003400320031003800320041003600420036003900360042004500340030003500460041003200410031004200350032003100390043003100430041003200410035004100360036003800410038003400310038004100390036003100410035004100330041003000380034004200390032003000380046003300420041004500450043004300330042004300440036004200360044004200390033003300340045003100410037004300450042003700420045004600330037003300430046004500370046003100460036003000450033004100300035004400320030004500440045003000450044003200\
-44004300320046003100390036003500330031003300300034003600370041004200330046003000440031004500370038004500380032004600320031003700460033003200340039003200430039003300430031004100430044003500330030003500350039003500360036004200390044004300330046003500380035004100390041003400350038004100430034003600390033004500330046003200310038004100300032004100330037003300330033004200340038003600300044004600380042004100370033004500440042003900340045003100310031003800300042003100310032004200410043004600320035003100350031003900380044003800440039003400340044004500350045004100370037004500370039003800310042004300390043003200350031003800300043003700410030003700380046003200340031003200350038004400460030003200390033003800350031004300310044004400440034003000420044004200450036003200330043003900370034003200380038003000340039003800380041003400460037004200300037003700460035003600410042004600380046004300330036003800440046003200300044003600320035003800320032004200410039003000450032004600440046003600310045004400330044003400350031003500450031003400350037004200300045004200430036003600440041004400340039004600420042003100340032003200380039004600450035004500440045003000300034004400310042003600390031004600330036003900410043003800370035003700330041003200440043004200330042003100380041003000420031003700460034003800370038003600330038004400360038003700360038003500410045004100310035003300330046003300420043003700330038003300410038003500370039004600370035004500450046003700330045004200370036004400310038004100320035004200340036003200410039003600370046003400420037003000360045004600460033004600450030004400460043003000330038003700390030003500370043004300460043004500450036003800310045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320034003800000541005800000741004C004100001BC5006C0061006E0064002000490073006C0061006E00640073000183973600300030003000300030003000300045003000380030003600300030003000300030003000320042003300310045004300430044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900300046003100340033004200330036003700450042004200380035003100440030003000300030003000300039004200340039003400340034003100350034003300380038004400360033003600340030003800350045004600410039004600300031003000420042003000390031004200390043003900370030003300380042004500380039004500310039004100410046003200310030003300390037004500450031003700300036003800350042003600440042003000430038004300410044003400420042003100320039004300350030004100390038003800380035003600340039003200320031003800370041003000360042003300300038003700320037004300430035003200410043003100430042004600450030003300340033003000430039003700350041004100430030003600420046003200420034004500320033003500410033003100320039003600410031003900360046003900420036003900360031003400440031003500330030004600300045003300300045003100370030003300310033004500370035004600300036003300360045003900390046003400340031004200430041004300300034003000430033003300300036003600460043003700460038004500300031004100460038004200390031004400330033003100320039003800300034003500410038003700370031003600350036003000390030004200450039003300420030004300440042003200320042004100350030004300340037003000410039004300350036004100460030004600420031004600440043003500380032003500330045004600460045003400430030003100300043003300410035003100360031004200310038003700410031003900380034003600360030003600300033003000300038003900460042003200380045003600420037003200320037004500370033003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300030003800000541004C00000741004C004200000F41006C00620061006E006900610000865736003000300030003000300030003100300030003800300036003000300030003000300030003100320045004400380046003200360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100320036003200360033004100310045003500370042003300300030003000300030003100340042003400390034003400340031003500340033003800380044004200350039003200420042003400450030003200340031003100380034003600430046004300430044004500350038004400300034003500340030004100340041003000420032003300310033004500380032003900350042003100330036004400410035003800350042003100310036004100340041003100460043003200370037004400300038004100330037003300300042003100450036003000390041003800410044003200380038003900350032003800300035004300320032004200300043004500430045003600460036003300380038004300360045004300430036003200350045003100320042004500370046004300330039004600330043004400340035004600350032004200320037004300320030004500410032003700370032003100440044004100390044003800340044003000330032004600430039003100410032003300380032003400310042003800460046003100380044003100320041003500340030003100370038003500430038004400420039003200420031004500450031004100320037003000390035004500320044003400300039004600320038003900430042003400410046003300460034003300390041003300310037003200460042003800300041003200320031004500350036003600330030003000410045003800330038003800460042003800460031003100310037004600450031004500440037003700450039003400420046004200310038004200430032003800380042003000310030003400420037003700330035004500310035004400310032003000300042004100410042004300390038003600420039004100380046004300360032003000350033003400420035004300370035003400310032004500360036003200330037004500420041004600360032004400380035003700390041004100360046003600330032004200340031003900380046003200370043003000440030003100410032003200450035004600430036003100390031003700320031003800350041003400330044003600330046003400440036004400450043003200420038003500300036004300450042004400310032003500330042003100330043004300370033003300300030003200450046004400380038004200320044003200450038004500460039003900440043003800440034003300330034003000370044004100410031003100440044003600310038003200340036004200360045003800320033003200330037003400310039003900340031004200320041003600310044004400360033003800440030003000450036003100430036003600460034004400320035003700330042003100430043004300350044003200380042003100370037003400430032003300410037004400420033004100340036004600390036003700340043003200330041004200440037003800420031004500310036003900340039004200440038004100390041003700360036003800310035004100410036003800450030004300440031004100300045003900350030004200340041003300380037003600370043004300450042004300320032003300360041004200350035003900360046003800450037003700310031004100440041004500350042003600350030003000310038003400380036003700360037004600420031004100440043003400330046003700330045004500390035004600450033004200460041004100460038004400420037004300450043004500430034003500460032003900300036003600420042003800420035004200330035003900410042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300031003200000544005A00000744005A004100000F41006C006700650072006900610000860B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410033003200320043004600340036003500360039004600380030003000300030003000310033003800340039003400340034003100350034003300380038004400430035003900330042004600340042003000320037003100310038004300360033004600460037003300440037004600430032003600310044003000460030003000440043003100340030003800320031003200370031003100360044004100350042004300330043003900320035004200320041003600340032004600430030004600360041003000380039004100410032004200390034003500390043003100410042003200320039004300370046004500380035003700300030003800320037003100310032004300300038003200340030003800450032003800340030003600330035004400340033004200450046004200450030004400340045003000440044004400390044003400360046003400380043004500460046004200460030004500310045003100450035003700390033003500320045004200360031003500300031004100350034004500390042003400310041004400380038004300300043004500300035004600350042004600360030004100310032003000360033003800450037003100330041003100440037003000440044003400300045003000390030003900460032003100460046003300410041003400370041004600370038003200370030003100350035003300410037003800360039003600340043003100320032003900310034004400300037003300420039004500350043003100360042003400330039004200430036003700350039003700440036004200410043003100440045003600310038003600430039004400390031003500350038003100360036004100330030004600300034004400450043003700390038004100380033003400370031003300360033004500410037003000420032003900420036003600310041003100320034004300410041003500350034003600410035003100320038003400430033004200460030003300410037003300460032003600330038003400320045003300350039004300360045003700300033004400330043003400360041003300340031003800390035004300420045003000390033004400410031003300440043003500420038004400410031004200420038004100320044003700330033004300310046003400380034003900410034003500380043003400410038004400350032003000390031003500380031004500370043003900330039003700380043004100320033004100390037004600370033004400410032003300330039003700350038004100350038003200350031004100460038003300360044003700420034003200300031003700340037003600350032004500370033004600320044003300460041003300330041003000460031004200300039004600360035004200370044003800450039004200450046004100430042004300390039004300430044004100360044003400340032004100380035003900300044003200310033004100430030003500370039003600390041003100360030004200330033004600410036003700330037003400380042003900450043004400380032004600300041004600420046003600460038004600300031003500430030004400390045003600340044004300420037004200420044004600430032003000340037003600320045004100380033004600300033003700460030003100410043004100340035004500420039004400460032003800340042003900410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000310036000005410053000007410053004D00001D41006D00650072006900630061006E002000530061006D006F0061000086EF360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300039003200350030004200350036004100410045003600350043003000300030003000300031003700310034003900340034003400310035003400320038003900310041004400390032003400420034004200340032003000310031003000380035004300460042004400350045003000440046003300380031004100320039003900320038003400350031004100340034003200350041003600350030004100300039003900300036003100390034003100390042003700360044003100410032003100460044003000330046003800380039003600380035004500420032003800360038004100330039004200320038003600380044003300320046004200300038004300320030003800410030003800370031003200310034003100320030003400340032004500430043003800410038004200360039003100410039003400440037003500370033003600320044003800410031004500390038004100340045003100350039003000460044004600330039003300330036003700310038003600300038003100440030003000320045003900440039003000320038003600420038003100430031004300410041003100320042004300310045003300330042003800350036003800310034004300360045003100370044003400360045003200370030003400320035003000370039003900340036003000370041003600440031004300340042003500320030003300420044003400360045003200370041003400390036003700450032003400430032003700420042003800300038004500440045003200320041003700430030003400340031003200380036003300450039003300300035003100330046003700310042004400340034003000410042004200310035003000430032003700460041003900430033004200300039003200430032003300420041004500390034003300460036003000350041003000330036003200350041003600310037003500370032003100360039003900370037004600380031003100420030003500370044003100370031003100340031004400440033003700300032003600380042004100410031004300390032003500350031004100390045003600350031003900310037003500380032004500370037003900430030004300360043004400440032003900410037004300390038003400450030003700340036004500390032003600420030003400350044003500360032003900310031004100440035004500350046003900330045004100350044003300320039003800410031004400300037004300390033004600360033004100360046003500320039003000330033004400410034004500460034003900310030003000340031003200410035003500450044004400320042004100310042003200300031004300310041004300310032003900310035003000310034003700310046004600300045003900380043003800310039003100380046004500300045003200430043003700340031004100320045004200300030004300330042003200330035003600390043004200380035003100430032004100440037004400420032003800450037003900330044003000460036003500380032003100450034003600320045003800370032004300440041003300440046003300350030003900420031003500380035004300420046003300430033004400350042003800300045004400450033003300340031003300450033004200440045004600360035003800440033003900370045003900430045003600320039003100330043003700360044003700340030003300430039003600340030004100340041003500390031004500360041004100330030003700340036004300420031004300310034003100410035003300370033003500460046003100390042003500310034003900460042003000430038003100330046003400300032003600460033003800380034003100410046003000460035003200390039003000410030003000310041003000370033003700420042004400310042004600430031003700460031003900420044003000310045004400320041004400300030003900320043004400410036003100430035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300032003000000541004400000741004E004400000F41006E0064006F007200720061000085E33600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004300300046003500390038003800360044003100340030003000300030003000310032004500340039003400340034003100350034003300380038004400430044003900330042004400340045004300320036003000310034003800360039004600450046003600420034004200310042004600450034003400340043003000300031003700310033003000440041003800420038003300380038003000380039003000450032004500320045003500450039003700330037004500310030003500420038003700420030004200320045003200360032004500410045003400450031004100320031004200380030003800450031004200460035003000420034004100350045004400450037004100380030003300310034003800340038003500370037003300430045004600330039003400460034004500340045004300450032004200430045004200390035003500430043004400310036003300460044004300360031003600340032004100350036003700370039004100310041003300440039004200350045004200430033003900390031004500380030003900430036003700410043004100420043004400300030004100420037003000460039003500450037004400350031004300330036003700460033003800380045003900330037004200340044004100310035004100340039003400450034004200320043004600450038003700310038004600370043004600320036003300330044003700300041004600350033004300300037004100320038003900300034004600330038003600380039003900370037004300340039004200340031004500370033003800340037004100450042003800300036004200380044004400320044004500410042004400360031003800390039003300370044003900460036003000360034003100320033003600420042003800340041004500410030004200460037003700340031003700370044003000380045003900430038004400330034003300330041003900340036003200300031003900440031003600410042004400380030004100310038003800450044004100360044003100340043003000460039004400300031004400420035004200370035004400460045003600360030003300350046003000330034003300300034003000320036003400390033003800350046003600300046003800380038003900320034004200320043003000360036004100390041004300340039003900430034004200350039003500330037004400360032003400360038003400320044003100330038004200440034003400360041003000360034004100450038003000340036003300300046004300420035003400390038004100360031003700460039003200330039003100360030004400330039004300410038003600410045003500380045004200310039004400450032004200350037003600380035003500300031004500450035004500410031003300390036003300350034003400420041003600410036004500360032003100370038003200300031003700340043003300320037004200330044003300450037003200430037004200380046003100300042004600460035004400300038004400420043004300340046003200300031004600390030004200350044003400360039004200310031004500390046004600450038003000370037003800420044003500460045003500370045004200310043004400410038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300032003400000541004F000007410047004F00000D41006E0067006F006C0061000085AB3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410033003200330036003000390030003700390030003800320030003000300030003000310032003000340039003400340034003100350034003300380038004400430044003900340033004400320046003000340036003100310034003800350043004600370044004500370039004400310044003900420035003900330042003300420039003300310035003800320045004300430036003200360044003800340032003400310035003400310032003600410030003500410031003100360031003200330046003400300034003400410033003100360038004400340045003200460042004100410044003500340030004100410042003500320041003800420036004400380034003200430031003600460039003000310030003800340033003000310031003300320035004600360036004100450034004100430037004200430045004200360033003100320032003700420039004500350046003300450034004500340031003400390037004300450045004400310031003400360030003600310031003500390034003800460046003900310035003800300030003500410042003100420033004500350033004100310037003000420041003000420043003100430041003000420041004600420038003200450032003400430046003400330037003600320043004100300031004600360035004300380038004400380032003500350043004500440039003800320038004100460030003600440030004600420045003200440046003800420033003900300034003800430034004100300043004100330031003200320033004200430031003400370030003400460037003400440038003000420036003100320041003200330031004200460045004100330035003200330043003300450034004200420038003300450030003400440043003500420034003600310034003700380045003800330046003000330031003600330037003000390030004400440046003400420032004600410034004200410045003900340039003900440032004600390041003000450038004600300045003400390030003600430030003600420032004200370039004400450035004100330037003500350039004300350041004400430045003300300038003900450039004100440030004600390037003800420046004300340034004200460033003500440044004300330041003700300042003800330041004100300041003500330032003500320033003500380033003900390032003700310043004500440035003900420038004200390034004600460030004600340039004300360030003600430035003800450032004200340045004400450033004500450032003100350031003400450041003800360043004500430035003800380032004500420033003500430039004600350039004100360034004100420032003000370038004200300035003700450033004500440038004400300032003100420033003900460041003900320041003100380046003300440042004500390042003500320033003700320031003700410030003300350045004200440043004600460031003100460038004200350035004300390045004300350037004200430030003300370044003100440038003600360045004600370044004300320038003700380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600360030000005410049000007410049004100001141006E006700750069006C00\
-6C00610000881F360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300039003200350031003600330035004100430038004100380035003000300030003000300031004200440034003900340034003400310035003400320038003900310041004400390030004200460036004200310033003700310031003800380037003900460045004600460037003700410035003100310033003600420041004200430036004500320030004600320043004300410042003500390043003900340030004500430035003600420037003400410038003400440037003100300041003200450034004500360041003100370041004200380033003500350038003400360038004600460030003100310044004200410038003900340035003100300030003700410042003200320038003200450032003900300038003000300038003500320035003400330034003400420031003700410037003900340036003800340033004300340045003500340043003800420032003100410035003800440038003600440038003600300038004300330031004200390043004200330039003700390037003000350034003200310034004100390046004500390045003500460033004600300037004500370038003700390034003500360036004600320042004100410033004600340045003800350043003700420035004400320032003100360034004200310032003300440036004200330030004600360045003000330043003800460043004600440044004500370046003600410033003100340044003100360033003700420031003800330037003700430032003800330044003300410037004400410037003500460044003200320041004100320042003700460037004100410033003300330036004200340038004400310033003900410038004400330041003700430039003400340043004100450034004100460037003900390033003000460039004500390045003700450038003600350031003300360035004200460043003600420044004200390039004600430043004300430041003400330031004300440043004600410044003100370037004600330030003000430043003700390033004400380033003600440035004600390037003900460043003000330030003300410030003200380031004500440035003900370033003200440043004400390045004600360046003500320041004200300039003300340030004400340043003500330044003000440031004400310041003400350043003900360041004500360046003500420030004300390046003400340030003800340031003300300042003800390039004100450035004100310031003300350042003800390044004500410043003400320035004200360034003600320046004400330041003800350034003200390037004300320041004600300034003500420036004500330033003800300045004100340031003600440043004300350034003400360032003800340039003000410045004100310039003600340043004100430031004400460044004100340042003300380042003800340034003200300039004400370043004200370038004200310038004200370044003000370037003500330036004400350032004200440043003700430032003700420039003900310044003900300038004300300035003400440032004500310043004100440042003000300038003100430031003400310046003600360045003800310043003400430037003800360045003700460041003300360041003900450032003200420042004500340037003700340031004500340030003500440034004500350032004100460044004200350045003300460042004300410031004300300044004400460038003100320044003300410046003900360042003000410043003200360034003700300045003000390038003600340036003400450033003100390037003500450045003100340044003300320034003700320043003200360031003900310044003000440031003100440045003500440046003200320043004500360046003200410042003100430046003600310035004300300046004100300031003800440030004100460039003800350045004600440045003100460043003300300035004500460038004600350042003200340031003200460031003700330045004200430045003700310032004300310039003400300042003500420046003700310037003100460043003100390042003300420033003700350044003700320042003600300034004300460045003400460037003100330036004400420034003000420036003700460043003500450045003800450046003000450032004300390035003300450032003000460035003700440037004500370045003200440046004500430044004300440035003600340036003500350039004100450043003900440037003200360046004600430038003900460034004100440037004100350046003800360046004600430030003200330045003500360039004100410036004300430042004400380034004200440030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000310030000005410051000007410054004100001541006E00740061007200630074006900630061000087733600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030004100310039003100390030004200340036003600360030003000300030003000310039003200340039003400340034003100350034003300380038004400420035003900330033004200320046003400330036003100310038004300370037004600410037003100370035003500340045003200420035004100440035003000340037003500360042003200410033003100390030004200380031003700310046004300300045003200390036003800380034003400320043004200450038003000350031003600430030003600420033003000310046003100310035003200340035003800320043003100320043003400360032003100300039003700340038003100300042003700340036003700340039003000410036003300410042003400370031003800390033004100410041004200340035004100380033004100380044003400330039003600440038004600430031003700460037004300460032003700460037004600450046004600420042004300430046004600330031003700420041004100360038004500390033004600430038003300330034003600410034004300320036004100330039003600450036003100410031003100380037004400350038003000320030004100380030003300450042003700320031003900390043003700360032003300420033003600330034004500410043004100320031004500380030004600440045004200330030003400370033003700430046003200430045004400380036004400340038003300300044003700410030004400360046004200310034003400390041003600310044003800360044003400420034003100300031003300410045004200430043004200380035004400360036003400360042004200450044003600430039004400330044004200300042003000310039003500300030003400410037003700440034003500410037004300420043004300350030003800370032004400440035004100450032003000340030003500330038004400320038003300420032003400300038003600300031003100370035003800430037003400390035003500320035003400410030004400430037003400350041003700350044004600310042003600360037004100420038003900410043003100420036003100320044003600340046004500450037003100420042004300430035003400350038003000430031003900440042003000350041003800320046003200460045003000430030003100420043004500460045004500320042003700350038003800320043003500390044003200300032003500320036003300440045003300330044004500350042003400440036003900410042003200340032003000310045004300340035003700390045003800420034004600320038003900430041004200360043003200310033003800380046003000310034003800390045003700300034003700450036004200420032004400460034003100340033003600350036003100360045004200300043004400410034004100370041004300330038003400460033003500310038003400300041003700350031004600310045003200450030004400330033004200460033003100420043004100390033003500360035003200320032003000390044003100420038003300430036003300380041003000310044003900420045003700430032003400460041003600420045004400330032004500390044003200460046004300320042003900340046003900320044003500310035003700370045003500340031003800410033003300330030003700330034003100350046003800420031003500330031003500460043004200460033004500420030003700380044003500350038003500330038004500440034003600440039003900360043004300360044004400430032004100350045003900380033003100370039003500320046003400320033003200440035004400430042003700420033003000440031004500420041003000410032004600440030003700420043004200320031003700450032003200410031003000460039003100420046003800420037003300340043003200350037003300300034004500370044003100320046003700350032003100430043004600450044003000420041004200380037003700370031003900460044004100410043003100380039003200340043004300410043004600390044003500440041004600390030003400320041004100360036004300330034003500420046003500350033004600380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000320038000005410047000007410054004700002741006E0074006900670075006100200061006E006400200042006100720062007500640061000088D736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100330032003300380045004500420046004200440038003500300030003000300030003100450042003400390034003400340031003500340033003800380044004100440039003200420031003600420035003300350031003100340043003600370046004600370042004500420043003300430046003200390045004100460043003900420033003100310039004200330038003300340032004400430035003500340030003700380035004600450030003100310039003400350035004100310030003100370038003500420041003200380041003500310031003100370034003100340041003200310039003300320035003100300032003800300038004300450041003500370035003200440033004100440034003200440035003300370030004500380044003400420039004100340030004500340032003400300030004300320038003400410034004100390034003100410036004200350032004400410033003400450046003300410036003800310045003600390046003200390032003600360046003000380033003000420038003700370033003700450045003700450033004600300037003100390039003000420038004500320038004500300042004600420045004200390045003000380038003600320032003700330032004100350031003200350041003700300032003000390038003800380034004200330035003100450044003700440034003700380034004300350033003800390042003800310043004300430036004100340031004200350031003300390039003500320030003100350033003400380035003600410044003100380030004600370046003700440041003600380039004100320035003300410033003100310038003900310045003800300034003700370037003400330039003400420046004200410038003000360032004500320038004100430036004600410044003600310031004300440035003300460038004600310044003300330044004300330045004200300038003500360041004400310038004100360039003000380038003500440045003700410041003000320037003800370033003700430043003000430042003400360039003500360045004100440033004600420037004200310034004300430031004300440041003400380045003000300038004100410035003200360046003500380036004500320034003900450045004200300038003700350044003300360032004600460031004300300037003000300030003900300045004400450036004200430045003100390030004400320032004400300046003000410044004200390032004300430038003200340039003700340035003400330032003900420033003200420038003300360041003100390031003900430044003400390038003400440031003900340034003200460036004100360034003100360034004300430032004200360042003700340045003400410042003700390038004600460036003700300041003100300036003800310037003000320043003800440039003700310039004500350044003300380045003500420042003800300037003800440034003000350042004400380035003100330036004500310031003300320035004100300038004600390039003700300039003100390030003200430037003000390038003100360045003300330039004400390034003700430041004200340041004100320030004100370032004200460030003300380038003800450032003400420044003200380044004100440041003100440034004200460032004600380037003600300036003500370034003800380036003900310035003400320045004100460030004100320046003900380041003900390034004300450046003600420042004300310039003900340041003800390037003400330031003300460039003400320039003400300042004100390038004500460033003100460035003300350030003600340038004500460046003900430033004200450034003700450043004600390031004600440031003100330038003500330037003100380042004200380043003900440037004600380042003700300043003200420045003800420045004100410030004300360045003100390044003700420041003800430041004200450045004600330043004500300044004200300035003500340036003500310046004200310039003200360035004600320046003500310041003000380044003100330035003500340037004300370041003900410045004400360042003000410037004400410032003600380041004200350036004400380041003600420041004200310044003900440033004100460036004500360043003500320032004200360043003000460035004100450044003100460038003500300037003000340037003500390032004500460042003600300038004400440042003800300045004300300044003100460042003000460039003400360045004400440034003700390044003300340030003700310041003900460046004200410037004400340034003900390033004600320045003200310032003600450042004400380031003500420036004600350030003500450035004300330041004400370031003400300036003600340044004300410039004500330038004600360035004200450032004300360037004200440037004100310038004600440030003100360042003500360043003100320041003200430036003500340034004600370030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000330032000005410052000007410052004700001341007200670065006E00740069006E00610000836B360030003000300030003000300030004500300038003000360030003000300030003000300032004200330031004500430043004400300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300044003200350030003100420031003700360041003700390045003000300030003000300030003900300034003900340034003400310035003400330038003800440036003300320043003500440037003500460042003300460030003300300044003000300031003300320044003000430031004400390041003000360042003300450038004300390046003000440030004300340036003000430036004600460046004600460046003100330038004300420043004200460035004600440046003300310037004300370046003700450038003900380031003800310045003100330046003000330042004200420038003000450030003300320042004100460032003800340031003800330038003900300041003800410036004600430046004300450033003300370043003300450033004400380031004500310044003300410039004300390030004300330046003500450035004500320035003400360030004200370031003000360033003300330032003300310033003300330030003300320042003200330030003300300033003300330033003300300033003000330032004600430032003300430041003600300041003200380032004500320046003700450037004400370030004300330046003500460035004500360031003600300036003000360030003600340045003000390034004400340036003300360030004500360031003600320032003600430046003000450032003600330043004600360039003900320034003100350038003200450033004400460039003400320030004200370033003800370036003000300036004100310039003900430031003000300043004500390035003200390036004300310045003500450031004400320030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300035003100000541004D000007410052004D00000F410072006D0065006E006900610000820B36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003700300044003100320037003900320034003600450034004300300030003000300030003000330038003400390034003400340031003500340032003800390031003600330046004300430046004300300046003000390046003800310030003600380030003800390031003600380036004400320044003400360030003900360043003900300043003900450043003700360039003600310033003000320033003000330043003300410041004400310033003000360036003600300036003000360030003600300036003000420043004400440032004300370031003800430032003600300036004600460039004600330039003900410038004500320031003000300030003000310039004400390030004100330032003500440039003000370046003200450030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073500330033000005410057000007410042005700000B410072007500620061000083B3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003300330030003400440038004300420046003000340033003000300030003000300030004100320034003900340034003400310035003400330038003800440036003300380043003600380044004300460044003900460030003100300041003100380031003900310039003100390046004500460046003800370037003300320039003000320034004300330030003000360032004200330033003100330034003300380038004400340036004600410041003100380030004100330037003900380039003100390031003900310043003100350046004500340031004200380033004600440046003100380044003000430043003200350043003200430044003400330031003900380038003900390031003900310032003100340036004500360031003700380033004600330039004500320035003000430032004300310037004300450033003200390034003700460033004100430036004100300032003800430043003400310042003100430031003800430042003000330030003500360031003700360030003600360034003800370043003700390038004300410031003800320044004400390043003600320034003300310039003100380039003000430032004600380045003600380037004200460030004300430042004500340045004300410038003600320032003800380041004300310030004300300043003000430030004300390037003500450046004500410034003800440043003100440034003000340034003300430046003600300043003600320037004100370037003400410038003900330044003500440030003000300043004200410041004300420031003100420034003300300039003700380031003400350034003100460030003300450036004400300043004100360039003500380042003600390031003600370039003000300032003300350045003200350032003300360034003400350033003500420030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300033003600000541005500000741005500530000134100750073007400720061006C006900610000883F360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003300390033003700390044004600340037003900440046003000300030003000300031004300350034003900340034003400310035003400320038003900310041004400390030003300440034004300350033003600310031003400380036003900460045004600440045003700410035003500440034003100410041003000380044003400390030004200430034004100360041003500450044003400320034003200420038003400340041003600440032003300340043003400410031004400380041003100310042003200340046004500300044003200360032004300340030003600330032003200300042004200300034003000310043003400390033004200390038003100380032003700380037003200360039003000450032003600360033004100440035003800340043003900300045003600380031003300310034003100440031003400300038003600300034004400340030003500300030004200430036004600320039004200370041004500310033003200310038003200310042003700310037003600330030003700440046004500440042004300450037003900430045003700460042004300450032004200440036003400370045003200370041004300390045003300360033004600380038003500320030003900350039004100320033003700360044003700340044004600430036003900390034003000370046003700390045004600330032003800420039004300340034003000460038003300430046003700440035003300440034004100310045003100460030004400420037003300450035003200410039004100340043003000430034003600350039004500340044003700440032003700450031003900440036003700370039004100410038003300360030004200300031004500380030004500420041004100390035004200350038003700360037003800380044004400420043004300410044003800350036003000420031004400410033004500420041003600360035003400350039003100340039003200340034003200320038003800410036004300450041003000390035004400350035003700350038003300370033003700300030003000420033004200330044003000440043003000430042003200370031003400310043004300370034003900420030003000380031003400300031004400440039004500430038004100430039004200370034004300420037004400460034003600300038003800310043004400370036003800450046004100460044004100460043003800460036\
-0035004100320043004600440042004400360038003700440033003100420034004100440035004400420045003700440032004500460030003400350041004100340036004400370037003500390038004600390036003500300032004600430038003100410041004500410031003500330036003300360046003600430039004500370037004600460045003800450045003200340039004100310031003100360037003800420039004200340042004100350036004400340036004400450044004100310038003700430035004600300037004300300045003000450042003500410037004100440045004200380031003000410044004100440042003800410043003100410045003900340035004500350031003800330036003300340044003400380036004400370035004200360044003700380043003000360045004100460043003200450031004200380037003000460032004500330031004200360037003900370037003900330043003200390031003300430046003800300041003600450044004400300037004500360044003900330035003700430031003300420045003400440045003600440046003200330032003500370032003000390035003900320045003800450041004600320044003100450039003300380033003900330037003900440035004500320032003900460032004600310045004400370034004400340044003300360033003200390039003400460043003600440038003600300043004300390038003300310036003000420035003200410031003400380042003200350044003300440039003700460039003300440033003700390039003100440035004400350036004400380033003200370039003500300046003400350032003200360045003900320043003900340045003200320031003100370037004300350045003000370032004500380041003900360030004200460042004600380036003600380044003400380033004400460035004600460033003400460041003000320034003000390034003200410031003000360032003400340039003900380037004100390036003700320036003300370043004600430030003300420039004400430031004100300042003000420033004600320041003000320038003700430033003200450042003200440039003100350030004500300046003800440038003900390045003900410046003100460046004400300031003100370042003300420038004300450043003800390046003800380035004600450030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000340030000005410054000007410055005400000F41007500730074007200690061000081CB36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100340031003400320035003300350042003400450042003300420045003600300030003000300030003000320038003400390034003400340031003500340033003800380044003600330042004300320031004300370046004100390046003800310030003600380030003800390031003600380036003800450031004100380043003000320031003800460046004600460046004600330046003100410037003900340033004400340036003000430036004400310039004300330037003700340030004400300036003000300044003300460041003000380030004300390046003200440037003100300033003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300033003100000541005A00000741005A004500001541007A00650072006200610069006A0061006E0000833736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100330031003000460037004400320046003400420034003900300030003000300030003000380033003400390034003400340031003500340032003800390031003600330036003400390038003700340046004300330046003000330030004400300030003100330032004400300043004100350041003900430031003200430037004500310037003200450031003000410035003900300039003100390031003800310045003100330046003000390038003100430036004600380038004100430035003100430041004600370032003400360034004500370036003000360039004500450039003100350030004300330046003900370036004300360037003600300046003800460042003800460045003100440037004300310037003300300043003000430046004600460045003100310033003400390038003600300035003000420030004500380041004200330031004600430033003900370042003800330045003100440037003900450035003300300043003100430045003900340031003000430045004300460045003700360033003400370030004600310042004600370046003000430042004600300045003100300045003700360032003400360041003900410039004500350034003400380035003100430032003300300033003200330043003300370046003000360045003200300033003900390045003500390039004500340034003700410032003100350039003300300032003800360035004500330041003000360030003000320031003100370032004200380039004200450035003600310039004100420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000340034000005420053000007420048005300000F42006100680061006D006100730000837336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310043003300380045003100330035004300380031004200300030003000300030003000390032003400390034003400340031003500340032003800390031003600330036003400330030004200300046004300430046003900300035003000430030004300300032003000410044004300300034003000340044004300300043003800430030004300300046003000390046003800310038003500390035003800310043003100330033003800430038003100320031003300380039003100380031003800310039004200390037003800410030003600430033003000300041004600300030003000330034003300340034003300410030003300380033003600420030003000300033003000330032003300310033003100350030004400380036003000320030003100310035003300390030003600420044004100430037003000300036003500310037004400370035004500410031004100300043003000330030003100310045004100320030004300420044003700350041004100300043004200320035003200310043004400340033003500390038003800310038003100380031003400310034003800380030003900350045003100430030003100410032003300300036003000440031003500360045003900320030004300430036003100420039003000300031003100450041003200300043004100370042003700390039003900320036004300320038003000330030003300440044004300320039003800380041004100390038003200300035003400320035003200330046003100440042003300330030003100380035003800330032004400300032003200450037003000310030003000430046003200300031004200300044003400350046004200310034003900450030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000340038000005420048000007420048005200000F4200610068007200610069006E0000844F36003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310043003300410030004600330042004100390033003700300030003000300030003000430039003400390034003400340031003500340033003800380044003600330046004300460046004600460046004600370046003000360033003400460030004500460045004200330037003800360046003700360042004200370033003000420043003500390042003400390041004500310044004200420039003400420045003800440032003400340030003100340036003600430030003600430033004300300046003700430042004400370031003900390045004400360037003600330030003700430033004500370034003800320036003400380033003500390042003000300039004600450037004500460035003800360045003100340031003600410031003100430033003900370043003300320037003400390033003600310030003000360037003000420041004600380044004600440037003600460030004300450046004400370036004600360033003700380033003300360046003100390043003300420037003000420035003700340039003300360039003800300039003900370043003400380046003300420046003700310039004200450035004400420038004300320046003000460033004400450032003300390032003000440036003500360030004300300031003300310034003600460031003700410045003600320037003800420046003600450032004200430033004400460034004600390046004300390033003200310038003600460045003400460044003700450046003500380036004500310036003100350041003300310037003500320033004500460034003500430037003600340038004100350043003800430033003500380043003500390043003500340034003100380038003400450033004300330031003800300034003400330037004300310038003900380046003900370038004100390036003700330030003000330030003300300033003000330038003700380041003200320030003300390037003800310030004500300033004200420039003200310043003500390030003600440033003300460031004400330033003300300044003000320030004500370035003100410033004100430030003000300030003300390039004100370034003500370041003700390039003200450033003100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000730003500300000054200440000074200470044000015420061006E0067006C006100640065007300680000846B36003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320031003000350044003300420035004300430042003400300030003000300030003000440030003400390034003400340031003500340033003800380044003600330036003400430038004600320046004200430046003400300030003300430030003400340030004200340033003100390031003800310038003100380035003800460030003400390032004100370044004600460043003700390030004600420045003400310037003800330043003100450037003700460030004300370046003100390031003900310038003000450030003800330030003300330034004300390033003600310036003300370038004300370043004100340038004200450043003100380045004500460046004600330030004100430042003800460032003900440038003100460042003200460034003200430043004500320045003300350046003800360044003800310037003700460031003800330043003000440033003800310039004500450037003100450032004600370032004300350036003500390044004500330046003000430030004300300042004100450046004400340030003300310031003400300036004100340037004600460045003600330039003800370033004600440030003700340031003100370036003300330035004400380045004200450044003600460030003600450031004400460042003800450033004400340045004300440033003500460030003600420035003600460046004600340038003300370035003800450036003200370045003100380034003200320046003700380033003000430038003300390046004200300031003300380045003900430034003700310043003600340038003400460031003300360036003100350036003800360042003700370038003600320046004500310034003100460033003300430033003200440032004500330032003000430046004500430043004300320043003000390030004100300043003500430031004600300039003500310039003500330045004500320039003300420031003300340033003800410032003600300037003500450034003300310039003100380046003000320034004200370046004400380032003200430030004300390036003200360044004300360034004100370036003300430036003200310039003700410035003000310045003800430045003400310033004200300038004400390042003800410044003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300035003200000542004200000742005200420000114200610072006200610064006F00730000851F36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030003600310045003300300044003000340046004100370037004400300030003000300030003000460044003400390034003400340031003500340033003800380044003600330036003400350030004100420046004600430046003800300030003300350043003600420044004600370036003400430035003300450041004100330031003500330036004200390045004200430046004600380038004600360039003500350037004100360031003900350036003300360030003600300036003000360030004300320032003500340031003200390031003800370038003800330046004600460046003800370036003000410041003100380046004300300046004300390042003000300033004500370042004500330031003100430033003800460037003000440036004500430039003300460030003200390036004500300033003500460038004500460042004600460046003800430031004500380035003400460031003800450045003300440046004400430044004200300036003400430037003600370038003600320035003300420033004500330033004400430037004200460041003900420043003100410033004600300030003900430033004400460037004600460046003100390046003100450039003600350043003100320037004300390043004100430043004600380033004600440036003800330038004600360031004300370038003900410046003000430043004500410036003500430030004300300043003000430030004300300043003300420034004500370043003600350038003800460035004500300036003300360030003600350036003600430034004500420036003600380032003600310031004300450041004300430043004200370030004500360043003600300046003300380046004600430043003800440031004600300043004100310043004500420043003800340042003400450031003700370033003100300033003000330030003300300033003300420032004200320033004300330045003700360046004600460031003900440036004500450046004600300043003700310030003900310033003200330030003300330042003200420044004500350030003200300043004500360030003000360030003600300036003800360042003200310038003400310038003600390044003200370032003000310031004500370036004500430031003400350038004300310036004500320030004300330036004400350045003400360030004200380046004400460038003300370039004300340044003300350038003300310039003100380031003800310038004600430036004300420039003800390035003500340041003900410043003100330043003900430041003400360035004400320038003100430046004400320041003400300032003000300043004600310041003400410046003100390046003400320046004400410035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310031003200000542005900000742004C005200000F420065006C0061007200750073000083B7360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003300340031003800380033003800420033004100430042003000300030003000300030004100330034003900340034003400310035003400320038003900310041004400440032003400440030004100380032003500300031003400430035004600310046004600370042003600410036003400410030003500310044003400430034003400310044003100300036003600410031003300450044003300350037003000310036003400440041003300340039004200340038003000370034003000440038003200440031003000370035003800410032003600340043004600460037004400410043003400420044003000420046003800370031003300380045003700410041004500460046003100450034003600430037003900430033003500430037003300420041003500440038004100440034003600390039004100310036003700370037004600380030004200350036003200320038003800300035003600430033003100300031004400340035004100300042003500320043004600430043004200330033004200410046003300340035003300430042003100450046003200350030003900350034003100460035004300350044003800420043003200440041003100410030003300370031003800430046003300330043003500390035003800300037003000310033004300350046004100380035004500420038003800410042004500320038004500380043004200390032003700340042004200450032003300300035003800430038004300310043003100360036003800440033003700390039003900320032004400440046004500430044003500350038003000450037003600340044003800420041004400320041003700430032003300460043004300370038004300340032004400340037004300380036004600310036003500430037004600420030003300350041004300390033004100300035004200350046004400430030003200330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000350036000005420045000007420045004C00000F420065006C006700690075006D000081FB36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003500310039003200430039003500360046003700300044004300300030003000300030003000330034003400390034003400340031003500340033003800380044003600330036003400360030003600300046003800430046003800300030003300320043004500440045003500360030003800380046003200360035004300310032004100460037003600370033003700320046004300330038004600360036003700310035004300350041003100390039003800370030004300410035003000300038003400360030004400310045003300350037003800440034004500300035003100380033003000370044003400360030003000300043003900330038003000360035003800420031003400350036003000390044003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300038003400000542005A00000742004C005A00000D420065006C0069007A0065000089CB36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100300031003100460042004600440045003600440044004500300030003000300030003200320038003400390034003400340031003500340033003800380044004200350039003400420044003400460031003300300031003100380043003600370046004400370036004200420039003100450039003500380046003800330041003300380037003000320044003200420034003400350032003200300037004300340036003800300032004200310036003800460043003800380033004100330039003300310036003800320032003900330038004200360038004100320034004500320045003100410031003300430033003600300037003000320030003400450030004500450041003600320044004300360035003600330035003100310033003600330030004300310030003500340035003400300038003900300030003000320031004300410034003700320031004400320035003200410030003700370044003500360042003800460038003300460041003000370044003800380036003600410043003200420042003300450045004600460033004300420046004200420045004300390046004200300038003500460039003500340033003500390046003600410030004400430041003700460035004100450035004400390042003100410045004200350035004600340042003000300036004300300044003400440043003200410033003300300042003600420042004200380033003000440042003100320038004100460037003800320034004100430044003100370033004100440031003500380046003600420030003900440035003500420034003100390036003200430037003600420036003800430035003400450036003200340037003700390046003800450033003200330036004200370039004100440037004500420043004100320037003700340033003400440037004400320037004200420042003800360036004400360036003100300034004100450030003500440037004300380030004200310043003400300038004400390036003200390031003500460044003900340039003500450044004300330046003400360034003700370033004500440042004600380031003600350043003900340044004300460046003500310030003200320033003600340044004600380031003900370044004600460038003600450044004400350030004300460031004500380031003400410046003000370031004500410033003100410030004100460031003800440034003500310045004400440036004300340032003900360044004300380035003800330032004600390044003000440036003300350041003800420044003400360044003000380041003400300037003900450037003000350031004100390043003300370031003000430045003200420036003800310039003200440034004600380046003400460032003300390035003200430043003200340039004400350045004500310043004100330039004200440037003000370030004100340035003500340035003700320031003500350031004100350035003600450031004400350031004200410039003600380035003000450038003800450044004300450033003600410045003000330030003400310035003900320035003100430030004100370032004300300031004600430034004200320032004400380045004200370032003800330039004300310033003900460037004100380035003700460044003800380041004500\
-3400440032004100460035003300360042004300300031003900440039004400340043003800360044003900430031004200370045004300440037004200360041003900450039003300430038004600350043003100440043003100450037004600330042003100460034003600440031004400410037003400430032004100370043004500320045003500430034003300410041003200430042003000330038003000360044004400420044003800300038004100340034003200310031004500360038004200320046004500300046003200350035003600320035003900310036003000300041003600390033003200320039003100340043003100370033004500460031004600300043003400300036003900350031003500300036004500330033004600330046004600330037003100420036003900460042003800310031003600330037004300410035003100450032003100320042003100330032003800460042003400320041003000420043003900310041004500330033003700370033003000440033003000360032003300310033003900420033003900430031003000320041003700370041004600460046004100330043003500390037003200440033004400460044003700380036003700370045003700330037003500410036003900390030003800350031004600300039003100430036003500310041004300460038004500380043004200390035004300340045003500300046003700420033004200300033003600340044003800330031003600410031004200440046004200310035003500360043003600320039004500430031003400350036004300360045003100450031004200330034003500330043003500320032003900420031004500340037003700410041003000460043004100410038003600320030003700330045004200310038003500390030003500450034004400330034003300360034004200370033003600440033004200330037004600410030003600370033003400320046003300380032003000310038003600320036004100330044004300450041003900420032003100420035004100350045003100390037003400420039003800330037003800370033003100450044003600390045004300410044003200340046004200450034004100330035004300370045004600300038003100410031004300390036003800330045003300420034003200450039003800390039004500350044003400330045003800370046004200320034003200440038004100420037003400460042003000330031003200310038004300420032003200420039003400300030003400370030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320030003400000542004A000007420045004E00000B420065006E0069006E0000824336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310044003000320033004500320032003200300045003800300030003000300030003000340036003400390034003400340031003500340033003800380044003600330036003400360038003000460046004300430046003800300030003700310038004600330037004600420039003700440044003200460041004100320032004100330045003300350044003800300030003100330041003900310041003400360030004400310045003000310030003600420033003100300035003200460030004600370031004400430042004600460034004600310044003700430030003700410039003600450033003000430033003200420034003600430036003500460033004200330038004500440034003900330035003700380045003800380035004600310041003800430031004200340033003700310038003000300044004300430046003000450032003100370033003900360042004400420042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300036003000000542004D00000742004D005500000F4200650072006D0075006400610000884736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003000460031003100300037003300330037004200450039004300410038003600300030003000300030003100430037003400390034003400340031003500340032003800390031003900440039003200340031003400380035003300300031003100380043003700370046003600460036004600360041004500450041003900390031003000450030003700360039003600320042003800460031003200430030004300380036003300330030004600340039004200330030004500330042003800340039003700300045003400390039003700350036003000370045004400420034004600320035004300440034004100310041003000300038003400330044003800410039003200300034004100320032003000320042003700420033004500340041003800310036003400340041004400380033004200430039004100340045003000370031003600360044003300410031004300350044004300360036004300360038003600440030004600390037003700420037004200440045004400360044004500430039004200310046004600450039004500330046004200460031004600440046003900460033004500370031003300450032004600370041003600370035004400310032004500460033004500380035004400380045003400300034003000430031003700370043004400380035003700370046003600330041004100460032003700390045004600330045003400350035003100340044004600380035003200450032003600350044003800440038003800370036003100390046003500430041003400350036004100390035004500300037003000440043004400350042004400320033004500440035004300450041004400330036003800330038003700420039004500370038003500410041003500450037004100410039004200350046003400460044004600320030004500460032003400310030003800460046003700460031004500430036004200390031004600390046003900310035003000320038003900300037004200350031004200410046004200390035004300420041003600310041003300360039004100380042003100310038003100360041003700310033003400340044003100380030004400340036003800420034003300320039003700330044003100450043004300310036003000420044003900340032003000310041004200320034003500310035003200350035004300340037003000420038004300320043004400320039004600370033003800380032003200300036003000420035004200360044003000420039004200420034003500380033004200350030003300370035004500410030003600340037003700430033003700440039004300420041004200360034003300360033003300360034003400440041004400450038004200410038004500410044004300410042003800440037004500460041003700440031003600360036003300410031004200420039004200370033003700330037003300430038004200320034004300370041003600300041003000430032003400440043003100410044003400450037004100300037003600350039004100460046004500350046003100320046003900420039003800380039003100460030003200450030004200310041003200370033003600370034003900340032003100410031004100450032003500380031004200420043003400460045004500310039004400320039003700380041003400350041003600360046004400460032003200330035003700320039004100450030003400320038003800430043004500460039004300380031003900420042004400340044003300460035003000380032003700460046003900460043003300360038003600350036004400320037003000300043003900460041003000330030003300410034003600430037003400410038003400390043004600320039004400390039003800300043003800460030003600350030004600360033003400370034004200380036004300330038004400460038003200410042004200460039003500350044003200350044003700360035004100390041004400410034003900320042003800420044003800410041003300420046004500300036004300360038004500360042003500340046003200450031003700440036003200440039003400440042003600440037003900330042003400460036003300380033003800350039003200430037003300450041004300350043004200460046003500350044003400360033003000410046003000450031003600370039003000430034004100370031003000440032004100300039003300350034003200340034003400350038004600460036003200450030003700350032003700320045003000330031004600460042003200440034003400430045003100430043003600420044004600380038003700440031004200350030003200440035003300460035003400420037004600310034003100410041004200420038004100380033004200340030004600370030004600410041003200450036004300360034003700460034003800340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000360034000005420054000007420054004E00000D420068007500740061006E0000892B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004400320030004500420034003200360031003000430030003000300030003000320030003000340039003400340034003100350034003300380038004400410044004400330042004400360042003500330036003100310034004300370046003100450046003700440043003900420044004200440034003900410043004200350032004600380038003400350041004200330036003800410042003500320030003600320034003100380041003800380030004500450032004100300034004500380032003700460038003000320032003800450046004500300031003800320032003000380038003700340044003200430031004100390042003300380042003000450032004500340041003500410042003000360030003700310037003000350030004500380035003200360041004100310034004100390034003900320039003600360038003600430035003500340043003900410045003600420045004500350033004500460037003300380035003900420039003300360032004400300039004600340043004300450037004600390046003000330042004500370046003000360038004200460046003300320037003800340031004400320043004600310043003000390046003500360039003800330042004300330036003900380030003100300032004400300041004600450035003400380034004400340036003900310046003500450034004600300044003400330036003600390030003600430042003800340030004500430031003600440031003800390036003900390038003400370035003100390033003000420033003400450036004600460030004400440046003100360031004300450044003100450043003500450041004200440038003000440035003300330038003200310038003500390044004300420041003400420043003700380046003100390041003200340032003100350046003700350037003100350038004200440032003400360041004600440045003200410032004100390041003800440036004200300043003600300046003400390044003200370030004300340033003300300031004300350032003400420046003300420038003400350032003100390045004300430036003300370044003200420032003500460041003500420034004500410043003400390038003000360031003300410038003800300038004200320046003600390035004400410046003800340033003100410037004400430037003300300044003300300045004600410041003900350031004400340046003700330032003500410031003400420036003000450038004200390045003200310045004300420039003400320031003800460038004400380041004200310033003800340043003100360031003900430045003300450037003500300042003700380045003600300041004300390034004400310037004400310037003300440046003000440030003200360039004500420037003900310035003800370037003000380037003200370037003600390035003800300033003500380041003600380035004100350041004500410033003200410036004200440034003800330039003000450030004600310030003300370034003100350036003100320043004300430038003100430034003600380046004600330044004400440031003600300045003300420043004600410030003900430031004300390032003100460032003300390041004600370035003100340033003200370030003900370033003400330037003400370038003700350036003400360045003800360044003800420032004400310036003200440035003300430044003300370036004200300036003600300044003600330044003900350044004100340030003700410046003200310046004400300037003500310032004600390046003600310043004500420045003200370046004100420039003800410037003900450033003300360044003900330042003600330033003400330041004600370042003400300036003000370042003200300042003200460037003300390036003500410045004600370044004100410039003500370045004200430030004600420033004100430031003700330045003900320045004100450045003000310034003000440045004200430034003200310045004400440034003300340041004300420044003800300037003000450039003100310039003300390044004400330043003500340045003200340042003900420035003900310041004400390043004200360038003900440031003700460031003000420039004600350031003400460043003600380039003200460035004400320035003600350033004200430034003200460039004500410032004400350036004200430039004300370046004200460036003100330041004600390034003900420041004500320033004200310036003300420046004400380034003700420043004200340038004300370041003700370037003300360033003100430044004200340039003600330046003700450045004100350041003200450039003900420030004500320032004500350044003200410036004100330032003500360030004100390038003300330046003100350031003100320044003100360038003000340032004100320032003100370045004600420031004100420046004100420031004200370033004200440042004100300035004200310030003500310043003700440038004100460031004100370031003500450032003300350036004600350030004300350032004600360044003800310037004600450042003000460035004100410036004400360037003800460037004100420030004500300031003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300036003800000542004F00000742004F004C00000F42006F006C0069007600690061000081E3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200450030003300420038003000310036003300430042003000300030003000300030003200450034003900340034003400310035003400330038003800440036003300420043003200310043003700460041003900460038003100300036003800300038003900310036003800360038004500310041003800430030003200310038004200460033004600310032003100390038004400420043003200310036004100330030003000420045003700300043003400440039004100310038003300430046003400380032003600320045003800310039003000430030003000310044003400340030003500430046003500370036003900360031003800460030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000370030000005420041000007420049004800002D42006F0073006E0069006100200061006E00640020004800650072007A00650067006F00760069006E0061000085D3360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100310030003100330031003900330046004600380039004500390045003000300030003000300031003200410034003900340034003400310035003400320038003900310041003500440032004200310034004200300032003600310031003800380030004600310032003700390031004200410041003300340044003200350039003700380041003800360039003600410038003900360046004500380030003100340036004100310030003800410042003600420043003400320041003700380036004300340035004400420037003600380033003100460037003800410042003800340039003800320036004200380038003000450043003700380043004500300030003600350031003100410045003200410036003000360033003900360043003200420030004100370034003000380039003100380033003600420039003000300042003600440032003800320031003300340042004400320045003900460045004400370042004600390046003800460031004600320046003100380044003000350038003300370032003800370045004600430032004500310031003900340043004200330038003500320038003700380038003800410044004300390036004300410043003500360037003000450041004600310036003900380041003400380032003200440039003300370046003700460043003300430039003400340041004100460046003800370043003000320044004200440031003000350030004500430045004100320031003400430041003800420038004500460030004100300042004300420044003800330036003200460031003000350035004400410046003900330043004200340035003400380041003700430036003800310030004200330036003400330038003600360042004400380044003300330042004500380037003400430030004200320036004300330032003900390037004200340032004500310033003900360045003100460035003200460046004400410042004300300046004500450036003600310038003000440036004100330035003000420045004200460044003800330045003300410042003300440044003700460038003400300031003800420045003900450041003500440039003600430037003100370032004200410043004500410031004200430045004200300041003100460030004100300033003500340041004200300044003200340045003900390041004100330036004300300038003400350034004200460045003100390037003700380034003600440042004200380044003600350044003900320038003800410038003100320030003400430041003000350035004400320031003400430041003400420041003300430033004400440037003400420044003800450032003800370041004600310046004200320037004300390039004500430037003100430033003700450046004600420036004500430033004400320042003400360037003000320030003100310031003500350044004400360032003400370036004100300033003900370043004300430046004200450038004400300045003000330039003800360036003800420037003800460043003800360046004400430034003000410046003900420042003000300043004200440033004500410041004600460037003300450030003100450041003100320036003400320034003000360034003800330044003500350030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000370032000005420057000007420057004100001142006F0074007300770061006E00610000824736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310044003200330037003200340042003300300042003600300030003000300030003000340037003400390034003400340031003500340033003800380044003600330032004300350044003700350046004200330046003000330030004400300030003100330032004400300043003100440033003500310038003000350042003000390038003200420046003100440031004300340036003000340036003100370031003700310037003900410041003400300041003400360030003600300036003000360039004100310038004300430045003200450032004500320034003200300042003700330031003900310038004400370039004300370039003400390031004200310037003900460042004300460037003800390031003600450036003000450043003100370034003300430046003400300043003000360030003000300031003200450030004400310030003700370039003000430045003600360030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000370034000005420056000007420056005400001B42006F0075007600650074002000490073006C0061006E00640000073000370036000005420052000007420052004100000D4200720061007A0069006C00008A03360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003300300037003000330032003200370037003500310031003800390035003000300030003000300032003300360034003900340034003400310035003400330038003800440042003500390033003400440034003800390033003700310031004300430037003300460037004200440038004400360035004300380046003700420037003100460036003600340034004400420037004200390035003800330042003400380032003800410034003100300038003100370038003500410038003700380038004600300042003600320045003100440042004300440038004100310032003200320032003400380042004300340034003900450039003600340032003100340044003500410035003200350035004500320032004500380038003500360045003800320038003100370034003200390038004200360030003100450043004300310031004200390039003600320046003500420043004300390037004400350044004300370032003700330044003300340044003900460037003500350030003600370032004600380046003300360038003800420045004300370046004600430042004500370046004600450035004600420046004400460044003500350044004300360039003200420046003200310046003200340039003400370042003500300032004200310034004400310030004100450035003700420032003800300042004400430032004100410036003000380042003800340037003000390042003800340037003600390031003500350033004600460030004500420036004100380030004200460034004400420032003600310038003700320030003600350039003800460038003900410043004300370034003400380036003900430034003100460041003600440031003300350038004400340038003500350044004300310036004100410035003400350031003500370030004200360036004100310045003900460037003500380041003800460045004600410044003900430042004300440046003400310033004300320031003000320032003000350039003300320035004300330042004600370039003200460031004300360030003000440044003300310032003700300046003100370036004200350030003000410045\
-0038003000460043003700360045003500440039003600360031004400370031003800370045003700420038003800370038004400340034004300430046003000330032004600340042004300420045003600440032003700450033004300320031003700320042003900450046003100340046003100410038003100390042004600330044004300340042003000360042003000430042003700320045004100420036003000360045003700330032004100320041003000340039003900410042004600420041003300350043003900310041003200410035003900320039004500300036004500460033003200390031003300340041003200440031004100410041003900440041003600420036003000380044003000320030004200390033003800420030004300330045003000410044003200440036004600430039003900350042003500440038003300300030004500340036003500310035003300370045003300330036004600410031003600360043004500340036003400360031003300420030004100340031003000350034004600450041003300460037003000430032004200300046003800430042004100420043004600300036004400450031003100380045003500360035003300350039004100390032003700390044004400450037003000370035004400430045003300450030003700430041004600380037004600310031003700310041003600300030003300410043003100350038004100370034004400370034003400330038004100410034004600440033003300450037003500300034004200390042003800310039003800350035004300300034004500460037003400300033004200450037003900330042003700390035003900350035003000320044003700440037003600350042003100440036003900410035003900350044003200440032003000340039003600360032003400430039004300300044004200450031003100390030003600410045004200460041003200410039003700310033004200390045004200430041004300430032003300370036004600430037003300420044004400380030003500430046004300320044004500330039004300320043004400300033003300450037004100300032003500440034004300430034003800430036003000380034003000340037004600420031004200420045003200370044003300450043004400310036003900340038003600370039003600430039004100440041004300360031004200350039004100410039004100440033003700370032004500430043003000360044003000300034003600330032003400360035004100340032004300440046003400430043003300390034004100330031003200380039003600310037003500410044003100450033003000390033003700440031003100390037003100320033004400390039003200440043004200380046003400390043003000410034004400390043003500430033003600340046003700410032003900380042004300310039003400450035004500320036003900330046003900320032004400340039003600370043003400380044003200370044004300340034003600380034003500420046003700330037003900340041004200320041003800300042004600340031004500390043004500340038004300450039003200420039004600360036004100410030003100330038004500430046003800430036004500330044003400330045004200410036003600300046003900310035003800440033004500430037003400370035003700370046003000390036003500410043003500310034004600370045004100430032003000300035004300460038004500320045003200370035004300360046003400420037003200420045003500380031003800310044003200300038004600450035004300450045003600450035003200460043003700390034004100320041003100370042003800410035003100460035004500450041004300440035003700370031003100460045003900370042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300038003600000549004F00000749004F005400003D4200720069007400690073006800200049006E006400690061006E0020004F006300650061006E0020005400650072007200690074006F0072007900008E87360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440036003000330030004100300039003000440032004600330031003000300042003700420044003000300030003000300033003500370034003900340034003400310035003400320038003900310034004400390031003500390034004300440042003000350030003000380037004200460037004600300046003800310031004500410043004500420043003100440031003700320035003800410030003300360041003500320030003300420035003800300039003100300045003300350030003600340036004100430038004500360033003400380038003900390043003900340036004200320036003800390043003900390038003900380039003300310033004100330034003100410031004600440034004300430045003300360035003300310043004200390036003600350044003300330039003900330032004400310038003000390039004200310031003200360038003100450031003600360031003800440042003900430045003100320038003800450041003300410033003700340041003300300035003700410043003200410030003100340032003800360044004600460033004500360038003700340044004600450042004500460045003500430042004500460031003300450045003700430037004400340041004500340035003100330033003900460044004500370041004300300046003900340045003200370036004600450044004200360037003300450030004600380031003100430045004200450046003900330039004400460035004300420041004300330045003100360041003000330041004600350039003600340043003800340042003800410038003800390038004100440036003400450042003900350037004300370031004200410039004600460039003700300039003400390036003300440031003500350034003900360039003900420038004400300033003900430041004500350046004500420042004200430035003800360046004100330046003100430039004300370039003800460034003800340031003100320043004300460031004600310033003500420042003600450039003700380042003900350030003000410031003500310035003000430037004200390037003200390033004100420038003000460044004600410039003700330035003800390037004200430034003800340043003400360034004500330038003500370042003800370038003600350039004300390032003000320032004400420033003800310036003500440045003300420035003800340042003800450035004500430035004600370033004600300046003100330039003200300045003500300039004100360044004100370041003100360041003000420033004400440037003000320046004300370032004400350038003500370045004200330030003200360031004200430045004500300035003900310038003700310030003900330034003900350036003900440036003300360034003900340044004200310030004100340044003200380037003200370041004500310045004600410039003000310043004200440038004100320046004200460045004400340037003500330045003000320033004400460032003800340033003500340030003400300038003800350045003300440043003900460044003400420031004300440045003400410030003700310045003700420046004300360039004400390046003900430031003400300035003000340030004300350041003000350034003600390035003100430038003900340034003600300046003600450044003500360038004300430037003300450034003300310034004100340046003800380033003400420043004300320044003600440032003000320032004400320041003700330034004500330030004600340037003300390042004300430046004300310035003000420030003900370045004500440031003300450034003200410042003300450032004300420041003700320035004500410044003700450030003500440046003700340033004100350044004200460042004200440030003600390031003400430038004400410045003200350039004200430042004600350044003400440036003200430041004300440035003100360037003000320032003100430042004300300037004500450030004500380038003400380034004500300030003600310043003700310045003400350031003300380045004400450031004600340035003400390032004600350042004300300044004100430036003600330044003000370035004100330042003500300036003500410045003600330032003800340044003200330032004200340044003800330045004200350045003800380038004600390043004500440041003400320032003900360046004600330046004200450037004600410039003500370046003400320035004500340037003400430044003200360030003800320044004300340042003000310037003600410044003800440045004400460038003500370033003600370032003300320033004400330031003100450034003300320032003900340044004200420045004300450034004300440034004400440033003100370043004600360034003200450031003800410035004200450042004100380038003800350035003800380038004200350033003500300039003200330042003700430045004200320041003500420036003900390045003400380036003400300038004500320036003800370039004500300031003300370030003600410044003000320045003100460031004200440043003700430035004500320037004300320044004100330037003700300033003500340039003500390042003900380046003000380034003200390043003800440044003800340044003300450035004100370041004300320034003800420036003800320043003000450034003000360038003300310038003600350041003900310038003600330031003400420043004400440034003400430030003400380044003300410031004400340033004300320034004400350033004600310031003800360044003900450035003200440036003900340035003600390043004100450030003000380045003700320044003300330046004300360044003700460045004600340038003800380033003600330046003300330043003500440036003500360036004400410042003700340038004100450035004500340035004600460044003000300043003900350046003600350043004400360045003300340039003100450039003100430042003100380037003300300037004400310036004200310034003100340045003400360036003300320031004600350041003200310039003500340041004500310038004600410043003500300033003600460043003300310039003200430034003100340032003900370039003000390033003700320044003100460046003000440034003000450033003300460037004500360031003700350031004100360043004200310031003900450037004200450033003000370037003100340037003900390039003100380045004400450046003100460046004500410045004600410044004200370037003100360033004400380038004200440042004200420038003000340034003100300044003800350044003600370043003500310046003800450046003200440042003100460031004500440034004300410033003400320041004100430044003900450034004500380035003500430043004300440043004400350030003500420039003800360034004600320038003100380032004300440046004100370043003200450035004500310039003200370039003100340043003100310035004500350043003400350033003800440039003700360035004200420043003300390045003200410035003600390039003700310044004100420035003900430037003600430037003000390039003300330033004600300044003500320042003300330035003900460038003600390041003600320041003200320042003700310034004500420034004400440043003600410030003500350044003200460043003600430031003900330032003900390043003000380035004300450035003100450036003400330035003100460036004500460041003900340030003900430042003800380043003300420043003300340031004600370037003500330037003200460033004400360033004300330036004100440036003100330035003900380043003200310042004300460042003500350042003700450038003200380033003700460031004500330041004600370046004400310037003300430033004300440035003600350042003200450038003700390041003200420031003900310038004600360037003200420045004400330038003900350041003900310034003600450042004500420034004600310030003800380041004300370030004100360037004400390030004400300034003200380043003700370035004100410041004300390044003600410039004600380041004500360033003800380045003400450043003000380042003600390041003300410031004100360041003800410036003900450046003100390041003300460042004600410031003400440041003400440031003900460043003000440043003400430043003600350036003200460031004500410043004400380039003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300039003600000542004E000007420052004E0000234200720075006E0065006900200044006100720075007300730061006C0061006D0000883336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003700310030003100390041003900320036004200430042004400300030003000300030003100430032003400390034003400340031003500340032003800390031004100440039003100430031003400450031003300350031003100380034003600430046003900440033003200420035003500380041003000420034003100320032004100380041003900310041003600310031003100330035003300320032003900360037003600310034003400330044003400420030003700330034003300450032003400320035004400460038003000450032004300370035003400370037003000450037003500330046003800300034004100450035004300450038004300450038004400380039003000420036004400410037003100440032004100360039004400320030003600340035003800420034004400300034004100390044003500420036003000430044003300390039004200390044003700340044004400350031003800340042003300300043003100360046004600420032003700450037004600420037003300330045004200310042004600360035003200380045003500370044004500300037004600340037003200380041003500390034003900320030004400390034003500330034003400370036003800420034003800410037003800300045004100310036003500310046004500430045004400310043003100460044003000450043004100460042003800340045004300310036003700410038003500300035004200450044003600320043004500430039003200430044004300390034003500460046003900460043003000380031004200440045003600380042004400350036003600410033004300410035003000370038003900380044003100450038004500390044004600380044004400410030003800390041003300450038004400330036003700380038004400430030004400300035004400410041004300460034003600350030004200410043003100370038004500360033003600320032003300300038003100310030003000320032003500370037003800310046004500340035003000320046003800460035004600310046003800440038003000300039003900340042003700310038004300450043003000430035003900450033003300410045003700360032003700330032003400410046003200450039003200370046004600300039003000350030004600440033003300420038003100450044004400430034003100390044003200380046003500360036003800410043003500370033003800390031003400410032003200440044003300320043004100330031003700420031004100320044003900340035004200300031003700430043003400380032003100310035003400430035003700350039003700370036004500370036004600320033004200370038003200410033003000430043003600300034003100370032003600360033003400340043004500340045003900300033003800330046004300420037003400370034003000410037004400450043003100340041004400450044003100440036003600450045003200460046003700370031004400380034003100330041003200350038003400420044003100390035003700420045003000460045003500410041003800370035003900370032004300390035004200320045003600460032004300380046004200370036003500390037004200300031004600450030003500450032003800430041004300320035003400380038003200370045004600350041003300380043003000390044004300390036003100410041003700420033004500350042004400390030003800370033003300370030004300380043004600390039004200430043004100360039003700440030003800330043003700460046003500340036003100360046004300360046004200380045004500370037003400310035004500360032004200340039004500350042003900360030003600300034003300320033004400350030004300410033003800350031003400340046004500420036004400350045003700360036004300300041003800450043004400460037003900450044004600360033003400310043003100430035003500340038003400340043003300410034003900440036004200380043003200450035004600390041003500380033004300310033004600440033004400430031003000440034003100460045004200380038003300360033003800460042003100410044004600410034003800370039003900360038004600310042004100450036003900300042003700330043003600410046003500300033004300360033004200300043003700430035003800420036004200460034003800370032003900360034004200430045003700320033003100440037003300430037003200360042003200450042004200300044003700390037003400370030004200460042004300460046004500380046003300300033004200300039003800440035003200420039003700420033004500380041003400300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003000300000054200470000074200470052000011420075006C006700610072006900610000820B3600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410032003700320046003500410044003900440045003500360030003000300030003000300033003800340039003400340034003100350034003300380038004400360033004600430046004600460046004600460037004600300036003100410030003000320036003500410031003800330041003300340030004400360036003500310035004400440036003700430039004300320036003000360044004600460039004600380043003600390032003100360030003600300046004300310033003000380045004200450037003800390033003200360036003100430043003700380034004400340044003600380033003400380033004400300044003600360030003000300039003900370044003000440046004200410042003200350046003000360036003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380035003400000542004600000742004600410000194200750072006B0069006E00610020004600610073006F000083AF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100320030004600320038003300370044004100350033003300370043004100300030003000300030003000410031003400390034003400340031003500340033003800380044004500440044003200330031003000410030003200330031003100300038003500450031003300460031004100440036003200380037004100300039003200350030003800450042003800410044003800360038003600330032003900380032004200370046003300300034003500450034003400420030004200330042003000440039003400450034003100430031003300330036003800410035004300390031003200350039003400420043004200300039004300320032003200380038003500330034004400330031004500460031004200310038003400360035004400300037004300330039003200300041004100410035003600300035004600410038003700330046003800330042003500300044004400340036004400380038003800360042003500330034004100300035004100410030004300370030004500330044003700330030003000380034003900440032003100450034003800360046003200320045004300300041004200340039003400370044004300330045004300440030003200380042003900310030003700360030003700420036004200420033003200460045003400380043003600320042004400310034004600460042003800360037003000410033003600460036003800340030003200450036004500370033004500310037003900460038003800420030003700380030004100380030003800360037004100390032003100450033003200300030004200410038003900380046003800390043003400430031004300370034003700460033004400440033004200310033003000350037004600460046004400440037004500310046003700450030003100330045003000320032003200430031004200360033003700340039004500410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100300038000005420049000007420044004900000F42007500720075006E006400690000899F36003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310044003200350039004200320038003900350038003300300030003000300030003200310044003400390034003400340031003500340033003800380044004200350039003400340046003400380044003300370031003100380043003600330046004500460033003600410043004600440043003100390041004200320036003600350033003600360041003500310030003200320032003500360038003600350031003800340032003100310037003400410038003300430032004300320046003400320039003700300036003700350041003900420043003400340035003100300043003800350043003000330031003300410034003400380037003500390034003900380034004400380034003900380037003800370033004100380034003100350035004400330041003100350035003100370036004300380038003800310035003400440034004100350031004200370046003900300037003400330033003600390044004600320044004200440045003000450041003600310035003600410034003900450030004600330044004500310045004400450046003700430033004600420037004400370038004600390038004100410041004100410031004100380036003800450044004600450039003900320043003400430044004200420045003400440032004200330046004300380046003400430037003600310042003400350039003700430046004200330045004400380032003500460043003500360032003100310046003300360038003400330045003600370041003500350034003100320035004300350046003500380037004100350045003000370034004100330031004100380039003700310043003900370043004600410042003200370045004100320030003800430045004300360039003300450043003800410044004300440033003200440034003700450042003600350033003800\
-31003300450037004300410034003000340038004300340044004200350037004100370039004200430044003900420033003800420037004200330038003900450036004600320033003300420041004300390039003400320037004100390039003700360046003100380030003900380034003900380046004200310030003500440039004500430046003200420032004400300031003600300036003100360038003600340044003900420033004500450041003900410030003200340031003400430030003700310045003800300030004600330042003900300035003600440038004600330044003900300046004200350046003200330036003400420032004600330038003800420037004100460034004500390037003100410033004400350036003300370041004400310035004300440031004300320046003300410038003200450036003700320033004100440035003100350039003100450046003800460039004600350033003100430030004100360030004400450035004400300041003400300046003600460033003100300041003300380031003100300035004200310042003800450035003100450038003600460035003200330031003900390045003400340039004500320030003500360044004400310037003600430036004500360039003200420046003100450046003200330042003700380034003900370035003800350033003500420034003500350035004500440032003700320043003700300045003400310031003500340034003700380042003400410046003000410030003000350046004600460037004200390036004200430035003800450041003900420042003600370045004200430032003500410046004100360044004500410044003400430036003800330035003300300038003000340035004300430034003400300045004400450036003600420046003700330032004600300030003100330044003300370031003400300037003100330039003300440030003000420043003900440031004500410030004500390046003500340035003000430043004400410045003100410042004400360039003500350031003700330030003300340034004200430041003400380030003300330030003100380038004600450032003700320036004500430037004500350046003400330030003100380035004600430043003300440036003500410034004400370038003400460045003100350036004300310031003300330030004500380042003900440044004500410037003600310039003200440035003300450038004300390046003900350041004300460031004400310046004200320043003800430043003300360032004300370032003200450036003300350043003100450042004300410033003800390039003400450045003200370036003100340030003100390030003400430032003500370030004400420044004400460046004300430046003800380046003800440033004400350036003300370031004400440035003400310037004100360041004300330039003400440039004200430034004300370036003700360031003300460033004600390043003900310046003900450035003900450045004300390031004600390045003200310045003600460033003300330044003900440039003400440039003900430044003400420034004600360044003900380038004500450041003200300031004500410042003700420045003500430036003100420037003200430037003600370046004200410046003600410034004200340035004200330039003600440041003800410036003500320031003300390041003100360033003200440033003700360034004600410036003100440046004500320034003900410044003400370032003200330038003400460039004400430030003100330042004300410036003700390036004500390037003000430043004400380045003600410033003000440041003200450042003200350031003700460043003500300046004300450032003800300039003400410039003600450032003200430046003900300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003100360000054B00480000074B0048004D000011430061006D0062006F006400690061000085E7360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100440032003800450035003900390045003900330045003000300030003000300031003200460034003900340034003400310035003400330038003800440044003500390034004200440036004100430032003600300031003400380036003900460032004600320036003100380038003700410038003200380046004500380031003700350042003000380042003200450038004500410045004500320032003200380041003200320037003800310039003400450037004100320042003800450042004400300038003600460034003200330032003900350034004500320045003000450035003200390037003800320034003200310036003200350033003100460045004100300035004600440032004300310032003200310034003000430044003800320031003400330043004600370036003700380033003900300046003800370030003700430045003100310046003000450036003100330034003200320039003600310034003000340033003000350041004200370035003100360041003100380030004300350030003700330043004500350033003800350036004100420030003100370030003900430043004600390046003000320030003700410042003100300030003200410033004400460042004600420037004600310035004500380046003700380042003700370042004500460038004400340045003000370038003400300038003100430035003700380033003000320041003300440031003200300033003700310043003700320033003000340044004100320044003500320041003800390035003600300042003000310033003800420033003100390045003700430035003800320045004300370038003800430045003700330038004200380041003600460039003700380041004600320030003100350041004600440033003200390036004100330045003800460042003700440046004500330035004600410046003600380042003900310043003200380030004100390037004300440030003600300031003200380043003900320034003500370043004200450032003700330033003000460038004400420043003600350041003200360034003300320034003900440034003600320039003100360035003100360032003300310032004500440042003200440044003100350032003000390042004400350032004500310036003200350039003200300032003500360041003200410031003500410038004500320041003100450033003700380042004200380044003500410032003800450030004200390032004500440032003700350033003900410046004400370030003800340030004400410033003600430037004500350031003200450046003700300034003000450045003700360041003000360039003100380043004400450036003700330032004100410032004500350033003200320046003900330030003900310031004300330034003000450038003300410046004500450039003700340030004200370043003900460034003800320032003800310042003400450044004400420045003000340046003200360031004400380037004100460044003100380038004600330036004100460035003100420035004300360037003100430043004100340039004100420045004600350034004300330045003000460045004300330035004600460031003000440035004100380043003600320031003400340031003400380033003700440039003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310032003000000543004D00000743004D0052000011430061006D00650072006F006F006E0000837336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310044003200440039003500460033003100440042003100300030003000300030003000390032003400390034003400340031003500340033003800380044003600330036003400410038003800410046004200430046003800300030003300410043003500390037003100450039003900380044003200460042003600460035003600440038004500340034003400320033003700450031004500390033004300430046003800380045003500350038004500380031003800310038003100380031003000390039003700300034004100350036003000440034003600300044003200300044003600360045003600460045004300460043003000430043003800440033003300390045003300310030003000300042003300310038004100440038003200350046004600330031003000380037004100460043003600320046003800460046003900460038003100450031004600440034004500330036003800360035004600430046003000390042004200380037003200380038003300350039004100350046004600330032003800380034003600460046003600300036003000360034003600300036003000460038003700410039003900390039003700410030003600370046004200440043003400430032004600300046003900330038003200420038003400370044003900390032003800320044004300340031003900460043004600460030004600320033004300330038003300350041003600450030003800380037004300380035003800320031003400450044003900330046003100430036004300380041003000440032003600300033003800430031004100300043003000370030003000460041003200380032003600300045003600440037003900370034003500300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100320034000005430041000007430041004E00000D430061006E006100640061000084333600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310032003000460032003200330030004200450044003800340041004500330030003000300030003000300043003200340039003400340034003100350034003200380039003100390044003900320033003100300041003800340033003000310034003400340031004600410032003900350036004400440038003500320036004300320043003600430041004400360044003700320032003100360042003600460032003000440045004300340034004500420030004200350046003000310032003600320036003300450033003200310032004300300034004300310036004300310031003400340037003600430033004300360041004300300033003000330039004600390039003400430031003800460032003800330030003200360035004200300032004300390035003300330041004100430041004300430038003300460032003700300043003500330030003600380033004100430032004500440045003200410036003800310041003200440030003600430031004100410037003800380036004600370035004600370031004400390036003000350042003600300044004300360035003100360042004400420030003600460033003000430037003100300043003400310046003000420030004200310039003400390030003600350044003000420036003900370044003600420036003500410039003300460032003600310045003300450033004400300036004200350038003500370045003800420041003400420033004600360037004100350046003400390039004200460031004200370042003100450044003400330035003000380036003100370041003400320036003800430046004200330043003400370046003300410030003000370039003000450037004400360046004500410037004400410046003300440030004200450043004300420030003300340038003100320039003800410036003400460032004400380041003600450036003300460037004400460032004400300043003200310034004400430031004600370041004600330039003000430036004600360033004600370038004400340046004200430035004500440036003300370046004400430036003100420045003900320032003600460034003100410038003400390037003300370038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310033003200000543005600000743005000560000154300610070006500200056006500720064006500008547360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100440032004500300043004600410034004300300042003000300030003000300031003000370034003900340034003400310035003400330038003800440036003300360034004200300039003800460043003900460038003100300036003800300038003900310036003800360030004500330033003800330039003900390038004600450033003300460030003700320046004300360032003700300044003300420041003000420045003700350033003600430033003000300037004500420031004600380036003400320039003700310033003000430033004600460046004200300033003000440043003700450032003500430043004100300032003200460036003800450032003100430043004600380031004100340039003000360033003300390036003400460033004400380041004500320031003400360036004300360033004600300043003300430036004300310046003100390033004500460045003100340034003600370035003000310045003300350046003000360030003100460036004200370030004300450046003700450038003800310031003600350033003000340042003000390046003700360033003500340030003300350038004200450033003000330030004200310042004600360034004600380046003300350035003100390034004400450039003300460030003600350036004200450045004200300043004200460033004600360039003100330036003700460030004500370030003300430037003500300042004400430030004600430038004600380031003900390046004200300037004300330039004600340046003200460035003100430035003100390046004600330031003300300046003300370044003600370046003800460033004600310032003300350031003000360033003300450045003300450046003500300038003200350032003800440038003100380044004600330031003700300033003200330045003600340046003800460038004300460031003000350035003200310043003300310046003000360036003100410036004100330030004300360046004600450044003900310033003600370033003000420036003900430043003700430031004600410038003700320031004400430046003400320041004300330043003200360033004600410030004300360043003200430046004600310038003400340042003800420046003300320031003800320042003300430036003700440038003700430035003100380044003200380034003300310039003100380037003000410034003800410031004600420046003500390031003800420036003500440035003200360035004500300045003300460038004300390031003000360036003700320038003500450031004600440033003700340045003800360030003300330037003100350038003800330036003100340041003700380042004100390030003100300030003600420033003100350031003400360034004500390036004600430042003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003300360000054B0059000007430059004D00001D4300610079006D0061006E002000490073006C0061006E00640073000088973600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004400330034004600310039003800420035003700310030003000300030003000310044004200340039003400340034003100350034003200380039003100390044003900300034004600360043003400420030003100310043004300370033004600450046004200440041004500460033003300430046004400430033004400410031003700350034003900390036004300440033003600340041003700460032003400360032003200360042003300420032003400300045003400340034003400380032004500440041003200460033003600460037003300350030003200340038004500430032004300310043004400390046003400380039004300320043003100330031004300370030004500380033003800330038003200430032003200320043003200310038003200350033004200420042003200410035003800380041003400350034004400360036003900420032003300320034004400420041003700350034004400440042004200350039004500390033004600310035003200380037004100350044004600440042004500460043004600460037003900420036004600330045003400320046004300450032003100350035004400360041004600350037003000450039003500390039003600370030003300380034003200450038004200300034003600460030003400450033004600460037003800460044004600450032004300360044004400310038004100310035004400320045004600410033003400330033003500320041004200380037004600360034003300340046003500380041004300380034004200360042003600300042003700410042003000370033003000350030003700350041004100410033003400460038004200370031003300340046003100350035003800440042003100420045003000440042004300300036003300330043004200390030003400440032004600410031003600360045003400360034004200300043003000460038004600390033003400380037004300410046003000390033003000390042003400440039003400430042003900350044004100450030003800460039004100410036003100420033003600440035003200410038003500420031003300310039003600370041004200440032003000340039003800360035003300370042003400430033003300430043003200460039004600460037003200320043004500330043004300340045003200440043004300440034003600440046003200330043003300430044004600340033003500370030003100300034003100310030003700300033003800390036004100310031003600410037003600390037003000330034003500310033003800370033003800410045003500410031004400330043004300450037003000420036003400320036003300320046004300310030003200440045003800420041003000450042003100410034004300310037004300460039004400350033004400350045003200370034003700460031004100460032004200440036003300340031003600380037004100360035003500390041003300370037003900390030004300420037003900410045004200460031003300420039003100360035004600300032004300300044003500380038004300450046003900420037003000410034004100340037003000370036004500320042003800430037004300390045003300370031003800460042004600360042003800330038003300370039004200450033003800310037003300310035003600370032003700410037004400380042003700340044003300350033003600460036003300370036003600310038003100430034004100330033004600300033003400340044004100350046003200300042004400460031003600380031004300450041004500360045004100320045003300350033004200430038003900410034003000380038003700340035003700410037004100330036003100330035003800390044003300350031003800450035003200360031004200320036004100420031003500370042004300350038003600430044003200450032003300430046003200380034003600430036003700300043003200430038003700380039003100330041003100360046003400420032003500320038004200360032004200330045004300320030003300370046004200380032004500430046004200410044003000430044004500310045004600440038004200410032003900450044003000450045003200450039003500390033003300420044003300420038004400440034003700320039003100350034003700370030004100460033003900340032004200460032004600430035003700450039004600370033004500310043003700350034003400460037003000460032003600370039003900320046004200410038004200300044004400360030004600430038004500430041003500440039004600450038003900340034003500450032003500390035003400420032004600460043004400340038004400450032003800460031003400410035003900310042003900420039003500320043004400420045003200450031003400460046004500410037004600410031003000300042004600300031003400330036003100390041004300300035003600440032003900380035003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003400300000054300460000074300410046000031430065006E007400720061006C0020004100660072006900630061006E002000520065007000750062006C00690063000085A336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310044003300370036003800390031004500340043004200300030003000300030003100310045003400390034003400340031003500340033003800380044003600330036003400330030003600380046004100430046003000300030003500430041004100320045004600310038004500450042004500310036003600320034003000300037003600420039004600310045003600300035003000460044004600440038003900380031003800310038003100380031004500310033003600320042003100460034003300420030004200340030003300380036003100410037003400430030003000340036003300420038003600380044004400360035003500380039003400420041003800450032003100430033004500310033003400300033003000420044003300330046003800320031004100380039003300360046003800450043003400330032003900300036003300310042004500320046003000430037004600460045003300310033003100460043004600390043003700380034003400460030004600350031003800300033003100420034003700340043004400350039003000360030003600300036003000360035004500380045003400460043004300440046003700460037003100460045004500330045003500460038004300430046004300460045003900420044003000310046003600340034003500440039004100420036003600360041003000410037004400370043004300460043003900430030004300300043003000460030003800450035004600460030004600420044003400420030004600340045004200300034003000440046004500460046004600460046004600370046003400320038004100360045003500420034003700330032004600430042003800370036003800370038003100380031003800310038003100380031003400330034004200380035003400310046003500450038003700320038003200320045004100360044004300430046004600340033003600390038004100350037004100370046004600350034003100340032003800410037004300440045003300440033003300450031003600310036003000450030003600360036003000360030003600300037003800460033004500450044003900440037003000350046004200410042004300460031003000330034003700380044004400430044003700350046003600380034003100340035003900330031003700300033003100460030003400300033004400460037003800\
-45004500310030004200330037003300310037004100380036003600300031003800310046003300310042004500370033003800450039003000410032004400370032004300350041003900410042004600310039004400380033003800310039003100380031003800310038003900340035003900460045003700430033004600360032003700430038003700360030003300410036003600310031003600360046003900360033003400340034003800440031003300420044003600420046003000430042004600410031003600430036003600440036004200460039004300430034004500380031003900370041003600310030004300300030004500390035004100350035004600410033003100310033003000430038004400300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003400380000055400440000075400430044000009430068006100640000820F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100440033004200360031003200370041003800450030003000300030003000300030003300390034003900340034003400310035003400330038003800440036003300360034003500300043004400460043004300460038003000300033003500430045004200350042003700310034004300350033004600410042004400310035003300360042003900440037003200420043003500380046004200440039003800320039003800420035003500380045003800310038003100380031003800310030003900390037003000340041003500360030004400340045003000350031003800330034003700300044003100450033003500370038003400300030004400300036003000300035004300370036003000410033003300430041003700390037004200340033003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310035003200000543004C000007430048004C00000B4300680069006C006500008377360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003200300044003300320032004500300044003900310042003100420046003000300030003000300030003900330034003900340034003400310035003400330038003800440036003300360034003300300035004400460042003900460030003100300037003500380044004100360043004300410031003000450035003200450038004200340042003100410032004600360030003400320045003100330030004500310035003200340036004100310043003100420035003400390039004100440034003300370042003800320039003500440038004200410031003200450034003500380033004500310045003800310043003700420030003600310031003700450037003600450041003100390042004300460035004500380030004200380036003900420038004600420045003300300039004300420046004600390039003100450031004300440043003700390046003100340031004200430043003000320036003300440043004200380046004600390039003400310032004200360043003300370030003300320046003100370032004200430035003800360033003200330030003200300042003900460038004500330044003700440046003000430030004300300043003000430030004300390046004200460046004400410036003800410043003100320043004300390037004600420036004500330039003400310034004400420037004600380035004500310043004400350033003700450042003200300043003600360042004300410032003200370038003400330033003100440035003300300032004100380039003800370032003400370030004400310045003300360030003600300033003000300043004100420043003200350030003800430045003100410042003900310041003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310035003600000543004E000007430048004E00000B4300680069006E0061000083A7360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200440032004500440036004600330036004300370044003000300030003000300030003900460034003900340034003400310035003400330038003800440045004400390032003300310030004500340031003400310031003400340035004300460046004600320031004100380034003400310034003200340044003800380035003800320031003500320038004500430043003100300041003200430034004300320046004400340032004300340035004100320044003600380042004500320032003800300038004400460039003700390031003600460041003600310033003300370042003900430039004200430039003900390037004600330036004500320036003200460031003300320034004100340033004100370030003000390042004500370045003500340046004500350032003800440030004100450037003300450042003000370044004500420041003800320045004300310038003700440037003600380042003300350030003300370044003000320035003300410032003800440043003500350046003400320044003400460030004600440038003000310037003300450030003000300043004300450045003500330043004600340030003100420041003800410035003200340035004500410030003200370037003400350046003900410033004500460043003300450041004400450030003100330033004300340035003700330037003400350032003600410035004100410031004500330031003400370030004400390031004400370034003100330039003700350036003300300030004200410045003500420030004200450038003000320043003700380038004600460030003500430032004500300034003400430035003600450045003900310046004600430043004200450030003200420032003500390030004300310032003800420034003700430043004200420045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310036003200000543005800000743005800520000214300680072006900730074006D00610073002000490073006C0061006E0064000087D33600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100330031004200310044003400410042003600300039004200330030003000300030003000310041004100340039003400340034003100350034003200380039003100390044003900320033004600360038003500330035003100310034004300360037004600460037004400440031004200440033003300340037004600340038004100440031003000370043004100460043003500390036003300380042004300410038003000380044003200340035004200310039003300360030004300310042003100380033004400360041003100330038003600350037003400350030003100430035004300310043003800410037004200370031003700300037003400370034004400300043003100350032004500380032003200410045003000450039003500370036003700320044003000440032003200410032003200380035003200360042003500320036003100410044003200440041004500300037004400370039004600370035004400380037003600380046004500440030003800410041003600360037004200420031004600380037004500460046004500420045003700330038004500380038003400460033004500420036003900390038003900310035004500320035004500390039004100330044003600350038004300320035003200300039003000340046004200410036004100330033003900420041004500340035003200350039003900410041003600420032003300340038004400320045004200390034003700330032004100450033003500300035003400460046004300380030003600330041003200410033003000390043003600310037003600430037003700350033004400430032004200440033003400460038003200410042004300330030003600320043004600380043003900380038003200440032004400350038004600430041004100350041004300340044004400340044004200370036004600450035004600310033003300380035003000330030003900390034003800300045004200420039003900300031004200330039004400330034003300300035004600300042004100320036003300390039004600420032003100340035004400430033004400390036003400380037003500310033003200330034003300330046003700450037004600310037003600410044004300450034004500350035003600330032004400440030004300380046003000360033004400440034003700360046003800460046003000450038004300410030003700450045004500350037004600320032003800310046004300360030004300340037003200350044004200360030004400380043003800350033003700370035003800370043003900410043004500310037003200330036004100320031003600430032004400410042004500380033003200330030003400410034003900330032004400460043004100300031003900360031003800430036003500460034003600340038003200380037003700370043004600300030004100300034004200320045003500450043003200330032004600420032004500430045004600440034004600330031004100360038003600410032003100450045003200410043004200320035004300330042003600310037003800460041003400350037003100370031003700350038003000310037003300420042004600340037003100310035003300300045003700330037003700300041004500440043003600350033004400450032003000420035004400440032003600300046004500360044004600420037004200350041004400380046004500330033004300330042004100370032003900420041003200310045004200390046003300440043003200420032004300420045003900380034004500350034003200330041004500320037003800430043004600320042003200320041003700390046003500340044004400320037003500310034003000370039003700450037004500360030003600410038003700450030004600300038003900410031004400330032004500350034003400440043004200430042003400380031003900340031003100430046003900370037004400370034003200380046004600420039004500340031004500360033003200310036003800430044004200370038004600460041004400420030003700330044004300420032004200430045003800430039003100340041003200410033003600340042003800440046004600330036003300360037004200360039003100410031004200300035004600340046003600300038003200410042003500380042004300410045004300310044003400450030004300460044003500330031004600390036004500300031003700450046004400370041003400370043003400440032003700420031003400440030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100360036000005430043000007430043004B00002F43006F0063006F007300200028004B00650065006C0069006E00670029002000490073006C0061006E00640073000007310037003000000543004F00000743004F004C00001143006F006C006F006D0062006900610000822736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300300046003100370032004200300042004200340044003000300030003000300030003000330046003400390034003400340031003500340033003800380044003600330046004300370033003500310045004300330046003000330030004400300030003100330032004400300043003100440033003500370038003800380031004200430043003900320042003400430030004500460032003000320044003000430036003600360034004200300039003800330043003900410038004500310039003100380031003800310038003100380031003800460037003800380045003800390046004100350038003500430031003200430034003200370046004200460031004200440031004300320045003000410031003100370043003600300030003200450039004100300041004500310043004200310041003300380041004600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003700340000054B004D00000743004F004D00000F43006F006D006F0072006F0073000087333600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900300046003100310030003800330034003600320031003500340033004500410030003000300030003000310038003200340039003400340034003100350034003300380038004400410044004400320034004600340038003900330037003100310038004300300046003100450046003400460035004500420037003600390038004200350034003500380041004300340034004200300033004600340041003900380031004500350032003400380035003000370036004300380046003400440030003200310034003100300046003300420037003800350038003800340037003800450039003900300038003700320043004600300044004100320035003800320044003800440031003400420035003200350030004400300033003100340031004400300038003300390035003400380035003900420042003600410042003100380033003700460030003600390042003700330036004200350034004600320042004500410044004300440037003700360042004500440037004400330041004200440034003500370034004400390045003600460042004200440033004300430046004500310045003100370033003700410044003400420044003200370033004400370032004200420033004400340037004100420041003700380043003900330044003500340035003000430031003700410031003800460032004400430043004500460033003700360032003500410043004100330039003100380041003000360034004300310042003300460044003600330038003400330036003500410037003800370033004500300037003100300034004400360045004300450035004400340038003900440033003700340046003900420042003700390041003100320037003700380046004500320044004300420039004400430031003200300033004400320037004300460044003400300043004100420034003000420038003400460034003600320045003500430045003300340036004600460032003400370037003100370041003600330039004500420033004200430037004600420044003800350042003900340035003200350043004500390031004300360031004500360045004100320043003500450046003700460031004100410045003100330041003800460045003600360031003600360037003800390036004300370031004600450036004300380036003400440033004500340038004200330039003000300034003400380034004400350041004400310035003200360039004500380045004200330031003400350044004300340031003200410042003200410035003800360042003600440036004100410033004100310042004500390031004400440041004600330042003000380034003200350032004400460046004200450037004300300033003000370035003100450041004500440043004500370044003300410042003900370044004300350034003800330039003500430033003200390032003300380039003500390033004100450034004200430041004600380033004300460044004600350033003700340046003900420042003700390031003700350042004600420037003300450030004300440030004200440037003500370038004200350043004400450038004300390030003900360034003800450035003700300045003100350037003800310034003700410046003100460033003000330035003700300038004200450044003200460035004200420038003300340031003700300030003000410043003500410035004500380034004600380032004300420034003500310041003000410035003200330031003600380041003700300032004500310033004500380031004200460035004600390031004400300045003300310038003300420037003100300032004500420043004400460038003300330041004500410041004300310046004600360030003000300043004100430044003500380033004600340036003100310042003300420037003600360044003000340045004200330038003700450034003800360042003000370032004300330032003000450045003200330041003300300030003900410031003400320045003200320044003900330031004100340045004300370033003000340042003400460042003000440038003900460034003800360044004300390032004200410046003700390035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310037003800000543004700000743004F004700000B43006F006E0067006F000086AF3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004500320043004300390044003900370045004500340030003000300030003000310036003100340039003400340034003100350034003300380038004400390035004400340034004400320038003400340035003100310034004300300046003100460046003700440046003700440044003500310035003300340041003200320038003400390032003900320031003400460039003600380035003200310036003100360039003200380035003800440038004400420032003500330031003600390036004300410043004100340045004100340034003400350032003900320046003200390035003600430032003600320035003900310043003600360032003100360042003200350031004300410034003200320039004100350045004300300044004100310031003900380046003300310043003300320030003100460036003300320033003900310037004200440046004200430033003900420042004400420033003900460037004400370041003900370033004500450031003500430043004200370041003700430039003300320037003200410035003200300044004300360043004400330039003200360037003600390046003300300046003600420035003100460034003100390039003700460030003400420044003800300039003900380044003100430034003400360038004300370038003300300039003600310044004500430039003700310030003000410032003800350041004600330030004400450038004200360043003300460044003600410031003400430030003300420039004300360033004300310035003600390033004100320043004400380030003200360034003300300045004600370043004200330037003300460036003700340046004200300034004600430030003600360039003300410032004100330034003000350046004600450031003800420045004500330036004500460031003000360037004500340044003200420032003300450043003100330042003000440045004100380045003800320043004400340039003700330045004500440043003600370031004500360041004500460046004100300030003000420036003100420032004100300035003000340031004200310034003500440034003500380036003400450046003700450032003300380042003300350037004600460035003000440037003800450041003500380030003600300042004400410032004200420044003800440030004500390037004500300032003600370045003600300041003300450046003400440042004100410042004400320035003000350041004300440034003200390037004100340041003000430045003800340031003800320044004200410039003400420032003300410041003800350030003500420030003500340041004200450038003200440044003500410033004100390043003300320034004300450041003400330042004600410030004600310036004300300034003200410044003400440035004600390039003100450037004400330045003700410045003400370036004600430038003200460034003700420045003600430037004600410032003300300038003600300041003600430036004100360042004600350043004500410044003100450033003200370036003200360033003100310034004600450038003100460037003800420041004300360036003600410030003400320038004600420045003900430037004300410033003600460044004500420046003100350030004200360030004100320035004100330032003600380034003200340046003500330034003400340037003200320041003400350046003300450033004400410033003000300044003600360038003900350036003400410038003500320042004600430045004100460036003700320039003600320043003300450037003500390041003300300030003500460036003300350037003700350038004400300046003800320044004400380044003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310038003000000543004400000743004F004400004343006F006E0067006F002C002000440065006D006F006300720061007400690063002000520065007000750062006C006900630020006F00660020007400680065000089273600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004500320039004200390042003300380041003600420030003000300030003000310046004600340039003400340034003100350034003300380038004400390044003900320035004400340038003500330036003100310038004300370037004600450037003300440041003700340044003500420037003000390036003500460031003300350044003500380030004300340036003700350035003500310030003400340034003100310037003200310035004400450043004100360032004500300041003200410032004100460041003200300031004300300039003700390031003300340034003800430031003600310032004500340039004400330037003700360031003100380033003600350038003900310036003000390030003900440031003800440034003500340034003100370043003100340030003000410045004200410041003800460038003900340032004100310044003100410036004100390041004200390044004400430034004500330042004500370037003400330031004400420044003600410036003900420046003300370046004600420046003000460043003100450044004500460037004600370039003700310038003900430042003400350038003800450034004400430041004100300035004200300041004500420038003900320043003100390039004300410045003100420045003500420041003100360043003200300043003600420038003800430032004500310039003500450036004100310037003500340031003700440036004100380034003300\
-3700300044004100370042003800330031004400300043004200320046004600460031003200440041003900380034003000350031003300300046003000330039003200330041003800370032003900320041004200430044003000330034004300410034004200360041003000390039004200350033004300340042004500430043003300340032003200410030004200440043004200330046003100300033003300440043004500440042003700380034003700330045004200320046003800350038003200310041003100430042004200390039003900430038003200300033003300460033004100370039003100360030003400420039003800310041004100310031003300360038004500390036003700320041004400440035004100310036004500410042003100340046003300330045003800300045004600320045003400350044003200370034004400360037003200370039003800370046004100380036003000450041004400390039003900440044003600420035003100440046003200420035003000300030004300360042003500450044003400430041003500350042004600390036003900330038004600380039003400440041004300410045003700350034004400420038004100430030003700410032003500340031004300300044003500430046004600310046003700340046003500390030003800300041004500320042003100420043003800460030004400320045003800420043004400370045003900330045003100350044003800370045003900380039003500440043003800380032003600420038003400340045003700380046003600300038003200330030004200450044003900430041004300370042003800450039003000340043003400430032004200460046004600440042003500320032003400440035003700440033003200330033004100420046003300450032003000370039004300440032003000310045003200440037003800460032003200360036003800330038003900370045003100350035004600420030003100420041003600370046004400340043004300450042003800300031003900300030004100350042003500310039004300360032004400330044004100350038004600450039003800420030003800310046003300350038003800360045003800440031003100440030003400310036003200460046003300460036004600370043004500460046003700360035003700450044003900360034004600380044003700300043004200440036003800370037004100320046003400360045003200380035003000430045003600330032003500340038003000370041004300380032003000370031004400450043003500320035004200440038004200440031003600460046004200350037004400430032004600300031003900370033003300450044004400380036004200320032003200450033004100420038004500390046003000330033003300340045003700430033004200300045003400450032004600350035003200420030004300370033004500340044003700370036003300380038003800330032004600350046003300330037003700350046003600310033004500390039004200460036003900460037003500410033003800330041003600340045004500420034003900440041003100320046003700450038003200410035003900340037004400350035003600300030004500350043004400310037003400380037004300390046003000450045004100430045003900310046004400460044003500380041004300300037004600390031004200450044004300460035003500380043003900390030003400310033004100390041004500460036004400380039004500390042003400370042004300440043003000310043003700380044004300420039003200440044003700380041003400410041003600410042003400390046003600440044003600420033003400350044003100350042003800310041004400330044003500450034003200460039003800340035004400360038004500430041003700450033003900320038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007310038003400000543004B00000743004F004B00001943006F006F006B002000490073006C0061006E00640073000089BB36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350030003100300042003100440032003800300038003900430043004500300030003000300030003200320034003400390034003400340031003500340032003800390031003900350039003100350044003400380039003300370031003100380043003500370046004500460037004600350042003500330033003600320035003700330036004400360031004100330035004300410035004100360041003300350030003800340041003000370030003100360030003400340041004500390038003500340034003400320035004600410034003500300039003000340038003500380041003300380042003000410036004100300039003900360034003100350030003900380035003200320031003100390037003500310031003400340044004500360034003800340038003500350045004100350037003600310031003000360034003500450030003600370042003500410039004400420037003200390042003700330032003800430045003900390044003900460036004100450038004200390031004200340032004300360038004500370046003200390043004500370031004300300045004500370039003100310043003000440043004400440031003900340030003200330033003100440046003600340035003600410045004600420044004100330042003600430032003400430037003500350042003300440038004600340045004400360037003300450037004400390030003000410037003800420030004300440034003600350038003600340039003200390033003000420033004600360045004300360042004600450038003400310030003000320035003900390036003500370046003000430041004400320031004500390039004500330032003100300046003500350043003600300038004200450042004200320035004200380039003500320039003400340044004100410030003600320043003700370041004300450031003900310037004400300045003600360035004400310045004400350041004300320037003600460042003600330039004300420031004400340042003200310039003800300030004200410037003800410042003900440045004400410038004200320034003400310035003700410046003700440035003900390037003400360046003700350036003400360037004600330037003400340045003600450036004600390033004500450036003400340036004400440041003800300032003200350035003100420031003700390036003300330042003100310035003800300041003600340042004600420030003800340037003600340034003600450043004400330037004300310045003000460039003000390035003900390034004500420036003400390038003700340041004100350043003000370041004600350036003500410043004200310044004400350032003800320039003000320034003400430030003600300044003600390034003900300032004100310035003000450030004200320035004500340031003500460037003700380032003700300037003000310045004300460041003200380034003300370042003800340034003300340030004100340043003300380044003100410037003600420035003100300041004300310038004400460042003600460039003800460034003000350030003100450038004500390031004600320037004300330039003000430041004300350031004100300042003700410039004400380036004100390045003900310030004500320036004200350041003000360038003500380035003200360035003400370045003300460038004400370044003000310041004500300044004300350044004100330035003000450043003300380042004200300031004500360033004200360039003100310043004600310038004400360045004400370030004600300030003500410036004300460042003900390039004100350039003500380030004500460044003800350034003900440046003100430046004500340030003800380031003600350042003500390041004300420031004400410045004400410034004200320032004200340034004500460039003700330039003600340033003900340041004400310037003600320038003200410032004500410035003700460036003400380041003500420045004400310045003600410031003400380032003600330037004200330036003700320044003000410043004100350041003900430037003800330032003400320034004400410033004200300037003500360033004300300042004500300045003900410042003400310031004100420032003000440042003100380044004400390037003200330039004600410044003700410042003700460045003000350030004600390033003600340036003100440037004500330045003000430037003900350037003600380046003900420039004500420043003800440044004100340045003300340039004500370030003000320032003900310035003000380030003100310043003700330034004300440042003600370032003300340043003900410041003300380035004500390033004200430038004100310036003500420031003900430033003600330030003100300030003100340041004300440039003500440039004600340038004200300044003700330046004300460044004200460037003400450039004500420037003100450036003500360032003700320031003600420035003500410034003900370045003500450030003600380046003600460031004500410030004600410037004300300037003800330039004600370043003000300038003900330037003000360037003000420038003600370032003900330045004600320039003000330033003500350042004200350038004100440034004400430032003500410042004400310033004300420045003100300037003800430042004200360037003900360036004600310032004400450046003800370046004600310031003300310030003700410043003000340043004600430039003800380037003200300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100380038000005430052000007430052004900001543006F007300740061002000520069006300610000825336003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100320030003800320045003000460041003100340034003300450035003700300030003000300030003000340041003400390034003400340031003500340033003800380044003600330036003400440030004100450046004600430046003400300030003300430030003400340030004200340033003100390031003800310038003100380031003800430046003500430037004400340041003100330031003700330033004600450046004600460046003900460033003600300036004400460034004200430038004100330038004400430031004500370030003400440035003800360035003600450034004400310043004300360030003100360030003100370046003000460039004100310038003400430042003300350034004300310037003200450046004300390037004200350041003900380043004200430030003300380045003400420032003300340030003000360034004100300031003600450045003400340046004500330032003200330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300380034000005430049000007430049005600001B4300F40074006500200064002700490076006F006900720065000181FF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310045003200450032003700440037003100460043003800300030003000300030003000330035003400390034003400340031003500340033003800380044003600330046004300350045004300460046003000390046003000310030003700360030003000440035004500430041004300300041004300310042003800350035003500360045004400390042004400310033003000430044003100300037003600370045003200440032004300410043003000380034003500330038003600340032003300300036004100460030004100380043003100410033003000360038004600310041003300430041003000300036003000330030003000440037004400330030003800310042003300460037003600440036003800310030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100390031000005480052000007480052005600000F430072006F006100740069006100008573360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003700300033003100310032003100310045004300370030003600370037003000300030003000300031003100320034003900340034003400310035003400320038003900310042003500390032003300310034004200430033003500300031003400380035004200460042004300330034003200460044003200410031004400320038003000340041003200350032004400410039003100300043003700300045003500320037003000450039003200360033004100460038003200460046004300300035003500360037003700440044003700340044003100430031003500460045003000330046004400300043003100440035003500440043003100440035004100350038004200350032003900370042003600320030004400350032003600420035003900300032003600370039004300340043003500460039003300440041003900370038004100360030004200460037003900430043003300450031004400450036003300460035004600430042003500380032003700460034003000430039004300380039003000390032004100390045003700330033004100460044003500420030004200320031004300450037003700440034003800450035003700330030003400360039004600410033003700450033004400420046003300300042004100320039004200360037003300320046003500340031004400450042003600410039004100420033003600340042004100440039003000440044003600450035003700360046003200430039004200430031004100330038004500440030003700390031003900410043003800420042004400440036004500410037003200330045004300420041003100320030003700310043004200340045004400360037004200380042003600340033003300370038004400350045003900410043004100320032003800420034003300370034004500460042003700440043003600350037003900370033003800460035003000360034003500390032003900300030004600300037003700380038003700430037004200380045003100410036003300450042003100370036003000420035003800410045003800420046003400310042004100380043003900300034003000300031003900360043003800300031003000320036003900390044003900350038004400380033003600450041003200420030003600340037003000320041003000450032003100380046003100330033003600420030003300380035003500420036003700300046003300410038003200420034004500310046004500410030004200410045004400340043003200330030003100390030003500350033004300420035003700330033004400370045004300410039003500420045004100350039003600350035003300440033003200460036004200380032004300300035003200370046004200320042003400380041003700430034004500390044004400380038004400390035004300390039003100330046004600430036003700380031003100390038004200460042003000320030004200450030003100430036004600390035003300430031003700360035003300340037004500380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100390032000005430055000007430055004200000943007500620061000084D7360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100450033003100410041004400460031003200330044003000300030003000300030004500420034003900340034003400310035003400320038003900310036003300390043003200410045003500460045004200460039004200430037003900320045003100300031003000420033004600300033003300350030003100450033003700390031003100450044004600460042004600310039003900390031003800350036003700300036004100330033004300430045003600330032003600340046003800430043004300340034003600330044003800330045003100330043003700450037004500380036003700460043003900340039003000430046004600370044004200430031003900310038003900380039003800410038003600380033003000310033003100330030003300430033004200460037004600300043003900430042004100390041003000430044003200430044003600350030004300330043004400360041003600390034003100420043004300430043004300370043003300320030003900320031004300430035004600300042003200370046003100360035004300460032003900450042003200310045004300330035003100450042003200300038003600320046004200430038003200320034003100420043004300430032004300300043003000430030004300300032003200320043004300380041003000420041003700440031003900300033003900420041004300320034004300330041003700370033003500370031003800350045003100440033004100430042004600300038004400380039003800350038003100460039004500310034003300300036004200440034003700440033003100380044004100370038004100440031003900360045004200310030003800390033003600450046003000390046004200370045004600310039003500450043004600350041004300430043003000430034004300310043003100460030004600330044003400350039003000360044004500460046003300460031003900370038004600460046004500360034004200380041003700410043004300370037003000430039003300410038003800430031003800310035003700390030004300310038003100340034003100370041003300380036003300310031003400350030003300350038004300310039003100380031003800410038003900460032004100360038003900310038004500350039003800450042003100430039003300300046003400460030003500380033003000440043003600370031003100410030003800410038003100330030003000300030003000440033004400440034004200370046003000380042004100460046003600410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100390036000005430059000007430059005000000D43007900700072007500730000856736003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030003900320038003000430037004400360030003000440042003200300030003000300030003100300046003400390034003400340031003500340033003800380044004200350039003300420044003200450030003400350031003100340043003700370046003700370033004500370036004400380046003100350035003400390043003400350037003400330041003700350031004400330032004200420043003800300044004100360042003700380030003000320044003800440034003200450033003100310042004300380031003800380032003800440036003800410034003800320038003300360035003900360043003800380045004300380041003000440031003100430032004300450044004300390044003800460041003300330032003100410037003300370037003800330046003900390035003200370046003700460043004600320043004600330039004500370032004100310031003100310030004100430030003200410034003200460041003600370037003100460032003500340038003300330034004600410032003700370031003100410031003300330037003400460030003800380045003300370035003100410045003000460039003600460042004500330033003300410037003100460035003700370030004200300034003100370034003700420038003800460032003400360034003900310045003200460037003000450037003500360046003000350037003700370043003000460036003700320037004200370032004300350031003200330043003100330039004500450044004100320032004200440042003400380031004300320030004600410045004400330042004600340045004200370044003600450044003200440045003800390044004400330032004200410042003200340035004600410044003100430045003400410043004100310039003600340036003800360044003100460036003700360036003100390039003400330032003800410039003500450039004400430045003200440036003200390046004100370043003800460046003400450035003000360036004600370031003100440036003700370041003000390036004200360034004300410032003800430043003100300030003300360031004400340039003500360041004100330032004500390044003300300043003800360041003100440041004400410035004400410041003800340042003100380037003500340044004100440036003200350043003500450043003900370036003400380031003000380045004100450036004200320043003400430043004500300032003700300044003900420043003600330041004300450043003500330042003200430044003700420033003700380045004500320038004200410042004600360030003300430033004400450030003000300032004200430045004200390030004600390046003100380039003900450039003300450038003400420046004300310042003000410046004200440032003900460034003400300046004100390044004600340033004400380042003600320042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320030003300000543005A00000743005A004500001D43007A006500630068002000520065007000750062006C006900630000862736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100340030003400300037003000310032004500430042003200410030003300300030003000300030003100330046003400390034003400340031003500340033003800380044003600330046003000320046003500440046003000450038004400440041003700360046004600460041003900300044003900380035004600370031004500420046003500320044004400460037004400450031003900460042004100390043003200380041003300420032003800430033003000300033004200350030003000330033004100370042003200370044004300330042003700310046004200460031003800440037004500430042004600430043004600300046003400460035003200370030003600310042003700440034003500300036003700360035003600310036003800410030004400360036003400320045003600320043\
-004400390037003100380045004300310032003600370044003100410043003300410031003000420046003700320039003300360039003800390039003500330044003900420045003000310035003900450030004400330044003700310046003000430032004200460037003500430036003400370038004600460046003900310042003800330042003500390045003000320030003300320042003000420033003300350039003000360033003300360031003100330046004300460046004600460033004600430033004100430030004400320037003100390031004300420032003600360033003000390043004200440046003100380034003200430038003300330031003500430038004300300043004400450037004400460041004300360042003000370043004400370030003500380036003900460042004600460046003300320035003800450038004300410033003300330030003300330036003100370035003000370035003600430030003200380045003800350041004600370039004600310038003800350038003100330032003900430030004300350044003000360042004300340034003100390046004100460046004300370038004600460037003000340041003300390046004600390046004600330046003800360039003800350037003900370031003800390032003200450039004500360033003700380042004400460039003100460035003100300036003300330033003000330030003000380045003200330035003500380046004500430037003000370038003600440041003400370030003700310039004200340042004500420045003200360044003600340030003300380043003000360041003300300032003300300033003000330034003300430038003900420041004200300043003500390034004600340046003300330042003000460046004600420034003300420032004100310035003800300044003900360046003800460035003800350041003100450041004400310032003100300036003900330043004600430046004300380033003200310030004100420043003100330045003600460036004600330032004500340033004600330044004300390043003000460044004600370031003700340035003800360043003200300044003100360046004500460044003900440041003100460032004400310032003100300036004100420034004600380046003200390033003600310030003600450042003000450035004300370032003700410046004500420031004600450044003100370045003500460042004600330039003300360041003800360033003200330030003300300033003000300030003000300039003700410033004200430035004200440030003900360045004200450039003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320030003800000544004B00000744004E004B00000F440065006E006D00610072006B000082A336003000300030003000300030003100310030003800300036003000300030003000300030004400390042003100350043003800330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003600310038003300380039003400450038003200420042003900300030003000300030003000350045003400390034003400340031003500340033003800380044003600330042004300430030003600330046004300390046003000310030003700440030004200430042003600380035003800310034004400350036003800320045003100350035004400460030003200380036004500370046003500350033003700300032003900430033003000410039003800340038003500320033004400360041004600300043003800330030003900380046003100440033004200450039003300330038003900330031004200420037004100350030003100300033003100330030003700310042004300330041004600340037004300460031003800370045004400450037004400340032003900410043003100460046004600460046004600430037003600390033003000320035003800300045003500460033004600450035003300330038003200350032003900370032004600310036003800430045003100420033003500390038003700450030003600300033003000300045004200410034003200360032004400340031003600420041003000330034003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320036003200000544004A00000744004A004900001144006A00690062006F007500740069000085CF360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100450033003300340034004400310037003300310031003000300030003000300031003200390034003900340034003400310035003400330038003800440041004400440031004300440034004100300032003600310031003400430036004600310042004600450038003800440037003800320046004100450042004400310041003100370035003200390042003600380039003100360044004300320034004400410044003500410044003400340041004100340041003200300046003400380032003200410031003800440031003800320045003400410043003400390043003100340042003100330032003400420034003300310030003900440031004100430037003100390039004200380046004600370036004400330035003000420033003100430035004100390037003900370036003800370046003300460030004500330043003000300039004400350046004100350033003700390046003200410038003300310039003800420038003000340039003900390030003900340035003200330041003400320037003200460033003600430037003000460044004100340046003300450044004300380045003000360030003600460035003000340044003900370042003300430036003900380037003200360046003100410032004300450043004100350033003500420034003300380035003200330034003300450033003400320037003500380031003800340030003400380032003800420043003100410035004300330036003700350034004300350042003000340030003700370042004400310032004400430031003400350036003300340043004500390044004400360034003700390037003300310039004500430042004100390030004300420034003100330043003300450035003700450043003700430044004100310043003200420031004100360044004400350046003600300039003400420030003900380039003000340036003400420033003500300032004300340032003300340033004100350037003100360035003200430038004600350037003200340036004300390037003700320042003200330037004600310037003900370034004100410030003600390031003000380042003400310033003800330043003500330041004300410038003000410043003900360041003800410046004200350031004400350045003700430035003000420033003200420034003500340033003600390035003300340039003900430045003300390034003200410045004600450043003400430038004100320038003500320033003500440030004500350045004200320041003400450041004200420037004300440039004500330039003500430031004100350046003000450044004500300038004500360034003700350038004200420041004400360046003200300044004600450030004100460037004300430033004500310042004200350031004400340045004200420035003700370046003000360036003700360030003400420044003800450043004200350030004500340039003300370046003700390039003300380043003600420046003500310038003000340038004200450035004600360030004500440036003100390042004200360046004500310036003000380045003800450035003000370032004200300036004200350042003300440046003600450038003900390037003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320031003200000544004D00000744004D004100001144006F006D0069006E006900630061000085C3360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100450033003600330034004200420038003700390045003000300030003000300031003200360034003900340034003400310035003400320038003900310039004400390032003300310034004200340032003600310031003400380036003900460045004600410036004300360042004400370032004200420034003200300036004400360035003400300044003200440031003900420035004400350031003200310034004200350033003600340038004400300031003000340031004400300044003200320032003000340032004500460044003800330036003800360039003700340041003800410031003800360041003000320031004300410036004100410039003200310043003800320039003000340038003700300041003700320038003900380043004100320034003100300044003200390042003800340039004400370044003400300042003500460046004600450030004600420043004300370037003700450043004600430033003700420043004500370039003000350045003900330039003800390034003600430042004400310030004100390046003900370032003500360036003100360042003600370038004500430046003900450032004500380046003900340036003300370038003200410031003700350037003400410038004200360043003000340032003400320041004300310036004300340032003900420042003000380041003900350044003100300038003000380030004300450036003000330035003200350046003300360039003900330038003900430032003100300032003200370042003800450033003300310036004500310032004300320031004600310034003200340032003100440045003600320035003600370032004100320033003300340046003600360033004600380032003700370044003900340041003200350031003300450046004300330030003700310046003700390044004600300036003200390035004500300035004100350039003000440045004500310044004200360039003400450030003100440037003700390030004500390042004100430044003500420037003800390034004500340044003200310033003100370030003700320044003700320045003600300046003200390045003700350035003000390030004500450034004500460038004200340041003400330036003300460042003900300045004600440044003000430038003600460044004300300043003000410046003400310042004400420042003800420041003900460035003500350046003200390042003200420045004100430034004200410042004100350039003400440043003900440045003600390038004400460031003800320034003100440033003900300044004300430035003200330036004300320034003700430045004400380044004200350043004600460033003400320038003200410042004100340043003700460035003700310039003500430039004400390031003400420037003200330033004500350045003300310041004200310042003600420041004600360045003500320034003000430035003600450045003100460036003300420034003800410031003400450046004100320046003700300032003700460041003000330046003100340038003500430039004300450035003600380032003200370034003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320031003400000544004F00000744004F004D00002544006F006D0069006E006900630061006E002000520065007000750062006C006900630000841F3600300030003000300030003000300045003000380030003600300030003000300030003000320042003300310045004300430044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900300046003100310030003900320032003800460044004100430037004600410030003000300030003000300042004400340039003400340034003100350034003300380038004400360033003600340044003000340044004600410043004600340030003000300034004300410042003800390036003100430038003000430037003300360034003600300036003000360030003600300037003800330042003600460030004400430033004200330045003200340045003400320035004100310038003900380030003800410041003200300031003300380043003100410030004300300037003800430045003500460044004100420030003900340036003900450042003400320030003100420043003300460037003500460035004600310039004300430046004500370045003600370046003800430034004300430043003900360030004600360045004300320044003600310038003300460046004600460046004600340046004400300045003000390045003500440045004200310038004600450039004500370038004300300032003000460038004600460032004600430033003200350032003500350036003800360032003900420031003000350030003400300044003200360032004100320038004400380039003800390039003100390037004500370044003700430043003200370030004500410043004400350044003000360035004500300045003200450036003200420034003300300033003000420045004500410035004600340030004400300043003500460046003900340045003500310038003300450046003300420031003300310046004300460042004600370039003700450031004600350034004600310036003800360032003300430046003300450031003200330036004600380039003200380030003000390034003100380033004100350037004100430042003100390038003400390033003400320031003800310038003100380031003800310038004100360041004600440041004300460039003000440035004200320038003400410030004300310034003300320046004200390030004400330044003800330030003100340044003800410033004100310037003000350039003000380033004200420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200310038000005450043000007450043005500000F450063007500610064006F007200008513360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200450031003800330032003600340041004100320037003000300030003000300030004600410034003900340034003400310035003400320038003900310042003500390033004200440034004100300033003500310031003000380035004200460042004200370042004200440030003900340041003200410038003300390030003100460034003400310031003200310036003000380032003900440030004100420031004200330046003600320035004100430045004400370043003000420034004200320044003700430031003200320031003200300044003800300038003200320031003600430031003400300034003800390033003400360038004300380039003200430044003100450030004200320042004100430036004500430039004600390044004500350041004300340034003700360043004100390039003700330043004500310043004300450033003000320041004500430041004300320034003600340035003000350036003100360041003200300030004600410032004600410030003900370043003900320032004400330035003900430030004100370031004600410033004200350041003100420036004600410046003500370046004500310038004600350039003800310041004200350042004300330041003300420037003800390046003700450041004200300031003400460041003900430031004300310042003000410030004200410045004300380034004200380044003600320037003800310044003100310043003400310036004300420039003500310044004100410035004200380037004400380041003500390030004100370039004200460034004200330045003800440033003500360035003300300034003300340041003600320033004300360045003300320032003100420046003500330035004500450042004100310033003800430035003300360035004100340042004600420039003600430033003500340034003900450036003200450046003500430035004300420046003600440033004600370033004200340044004600430033004300440041004400310033003200350035003000460034003100460033003800420042003600460044003200300046004300410042003200360033003700310030004100300043004600330032003500440045004400460042004100430034003500450031004200410035003600440031004300390033004300330043004400390037003200310039003000370039004500410041003200370032003200300030003700360036003000310033003100410038003200340030003200310034003800390042003200370045003700420041003200450033003500440037004600390030003600360037004100410045004300410045004300340031003700450030003000320030003700370034004400420039003600380036003400370030004500440030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800310038000005450047000007450047005900000B4500670079007000740000832F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200340033003200310036003700460039004400460045003000300030003000300030003800310034003900340034003400310035003400330038003800440045004400390033003300310030004100300032003400310031003000300034004100420037003700310037004600310043003200380044003100340033003100310034004100330046004200390042003000460046003100360046003300450034003000330030003100350041003300300035003200330034004600460034003700360038004300380044003900430043003000300044003000450041004500450033003900450030004100410041003100390039004400460032004400450036003800390030004400300030003200330041003800330042004600320032003300330046003300380044004600370042004100380032003300410034003800440039003500350034004600410045004400360045004400380038003200440044003600350030003400310036003300380031004400350045003100330046004500300034004100340032004500460030003200320031003500320034003300370032004600390037003300330039003500360031004300350030004400430041003200420038003400310037003600460037003900430033003800310044003000460031003700370038003900430038003100320037003700340033004400320043003700370042004600430031004300300046004300370039003100330030003500370046003000300031003500450041003100460033004400450031003100390030004300390045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320032003200000553005600000753004C005600001745006C002000530061006C007600610064006F00720000831B36003000300030003000300030003000430030003800300036003000300030003000300030003600360046003900340044004300360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320034003300310038004600370036004300430034003400300030003000300030003000370043003400390034003400340031003500340033003800380044003600330036003400350030003900380046004600390046003800310030003600380030003800390031003600380036003000450034004400380033003100390046004600460046004600460034004600330038003800430046004600370044003600360046003800460041004600310030003900300033003200370039003700300030003000330031003300320042003200460030003300300033003100330030004600340031003200440032004300430034004400380042004500450044004400300031004500300036003200350044003600410037003000430037004600460046004200330033003100420043003600360031003200360036003700300042003000300041004100360038004500430031003600370041004500350043003600360042003800320037004600350039004600450031004400370045004600460046003000430039003200330043003400340036003900320031003200450032003800370045004600460037003800430039004200300046003500450038003600310030003600340036003400360034003600300036003100460036004200330042003000360036003600370036003500310043003200300036003800460041003600360033003900410031004200300043003000300043004100410044003200350032003300360043003400330046004200360045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320032003600000547005100000747004E0051000023450071007500610074006F007200690061006C0020004700750069006E006500610000867B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003400320044003900420037003700390030003000420030003000300030003000310035003400340039003400340034003100350034003300380038004400410044004400300043004400320042003400340035003100310043004300360046003100450046003300390037003300390039004500390034004100430041003100440042004100310036004400430030003600360042003200420030004200340042003400420036003500430037003800360034003600340038003900310032004300320043003800430038004400340032003700360046004500300030003800390035003800340038003200390034004100430034003600450035003600460045003800340035003900340043003400390036004100380036004300340039003000460037003300420032003300330034004400330042003800430037003600360043003800360042003700370041003600450045004100460034004500410037003900450044003300460039003700340043004500320033004100430046003900310031003600350031003900320042003700380033004400460032004500430036004500390034004600330038003700340031004500460036003100380030004400330044004200370031003500320038004600360031004500460036003100380030004500340045004400300034003200390042004200440037003700420031003800320035003400380044004500340043003700320036003500370037003700390030003200300042003200320033003100460035003200440031003000420030004400430035004400460046003300320044004300360036004500340033004500420032004500430044003300380039004300430036003700410046003800350041003300320030004100300039004200410041004100430032003200450034004200380043003100440041004300460034003000320039003100380044004200420044004400300030003300390041004400340046004200350042004100420030003100370038004300450035003500420031003700340042\
-00300043003900450035003500420038004100440039004600360036003900430043003000410045003100460041003600320046003900350037004600380045003600320038003000360042003600430045003300380042003900430046003100360037004500320031003600390046003200330037004400300039003200360046004300320041003700390035004200420041003200460046004300320033004500320039003500380045004600420031003600380033003400460043003000300036003400330032003100390043004300340030003900300033004100320044003400380033004100390044003200450030004100460045003500350038003500310030004200300044003800360031004200430046003400330035004300420039004300360033004400420030003000350034003800320041004300410044003300310042003500390030004400350034003800410035004100360045003500310044004400420032004500410044003600330038003100360032003300450042003600340030004500370034004500350034004200460030003400460044004500420035003900350035003600310037004600320044003200430042003700460039004100430034003200410030003900380038004200410046003100300033004500380044003100360037003100410044003000340037003800320036004200450043004100350030003600320044004600310033004600340031003300390045003300410035004300360033003300380042003100450037003100390030004100320030003200330034003700310042003800430031004400360046003700420038004100300032004200430030003300390043003200420036003600460038004400430033003300310045003300370030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200330032000005450052000007450052004900000F45007200690074007200650061000085D3360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200340032004100300035003100330030003500410038003000300030003000300031003200410034003900340034003400310035003400320038003900310041004400440032004200440034004100340033003300310031003800430036004600310037004600390032004600330044003100460041003000310034003500330039004100380030003800410032003700350036004100370035003100310041004300320045003700410030003300360045004300350033004200370030003700360046003400340036004200430030004500420037004100320041004200440030004400310032003200300038003600320041003900390042003800330032004400340041004200420032003800410038004500370044003400390033003900330033003800310034004100420042003600350034003600440046003500440039003100320043003200450046004300390031004200320032003200450045003600300041004200360039003200340046004100380041004300310038003200410046003900380034003400360036003000460038003800460038003800410036004200330036003900330046003600460033003400380032003400450043003100350046003800420042004500430032004400320045003200410044003600420043004300410033003400340042003800390036004600380043004100310039004200390041003800300042003800420042003400360035003700430032004600340032004400460034004100380034003000340033004300340030003400330035003800460032003400310030004600330046003500310031003700340045004500440042003400420031004100310034003400380043003500390042004300340032004300430044003300360031003900410038003900460044003900300039003700410033003100340046004100350041003000440042004300440039004100300032003200450037004600440038003000350041003300340042003400340046003100440045004300380033004300300044004600380045004200310036004400380031004100450032004200350034003600300042004500380035004500370035004200390032003600320035003900350032003200430037003700440036003900370043004200310039003400450042003600410036003300450036003000370033003200370046003100440036003600320046003000320031003600390030004100450034004200340043003500350044003800440038003900430046003900430034003100320036003000300041004400340043003400300033003500390042004100330042003600390034004100370039004100430044004400310043004100300034004200440036004600300043003900330030003700430046004200430039004500420042004100380038003500300034004500310035003900460034003800440032003200330041004600360037004600300035004600350041003600450046004200420041003900350039003800330042004200310031003100330039003500460043004100310041003000440045004600340043004400370039003100460043004400350030004100440045003700410038004500440030004500300037004600350043003100410033004400450045003800410037004200430030003100380042003800340039004500360043003500380034003500440030003700320030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200330033000005450045000007450053005400000F4500730074006F006E0069006100008207360030003000300030003000300030004500300038003000360030003000300030003000300032004200330031004500430043004400300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100370031003700410039003100300032004300380039003000300030003000300030003300370034003900340034003400310035003400330038003800440036003300420034003200410033004400460032003900460038003100300036003800300038003900310036003800360030004500340044003800330035003900440045004400450044004300340046003100330038003300310039003100390031003800310038003400360032003300380046004200360030003600420033004100430035004100420035003800410032003600300036003300330046004500460046004600460037004600330034004600320036003800360042003300300030003000460041004100380030004300300045004600430035003100350032003200330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200330031000005450054000007450054004800001145007400680069006F0070006900610000851B360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100310030003000450031003700320037003200430044004600380035003000300030003000300030004600430034003900340034003400310035003400320038003900310042003500390033004200440034004100300033003500310031003000380035004200460034003900360045004400430036003500360031003800440033004600360030003400300034003800360031003800410038004400380032003300360034003900310033003000420043003900320033003500380046003800300041004500390044003200360039004100420039003500440036003300450034003100390045004300330030003700420030004200310031003000420036003100320031003400320031003000340031003400320035003400390045003300320036004500410039003200380044003900420035004300300042004300310046003200440045003600440037003600410041003800310033003900370033004500360043004300390046004400300036004400360042003700320042003000340032003100450041003400300030003200410031003300340041003000340044004300430041003900460033004600310042003800310042003600330037004100390034004500380032004100390031003100390030003800410034003300420038003700360043004100360034003200350043003000390031003100460044004300360034003400300032003300420041003400360045003900430034004100430032003500450039003600460031003900430042003500460042004500370036004200380038003900300045004400390046003700460041003200380033003400460037004400460037004200310043004100460044004600370032003500310045004400390039003100350031004200410033003400300031003800440037003900390032004600340042003400340041003900340046003400410039003100350035004600350034003500310038004400370036004400360039004600360045003500330035004200430032003700330045003100360033004500310042003600410034004100440035003100390033003300390043003600460044003200460034003100450041004400430034003300320033004500410042003100390034003700310031003100370035004300330041004300310033003900370037004600450030003100380032004100360046003500460039003400300045004600460039003000410036004600330039003300330031003300420046003100430045004400350041003500370041004300340035003100380039003400420037003000310044003800390039004200430032003300350039004100450043003200380041003000300034003400360042003600410044003100350042003100360045003800420046004500350046003600320030004200460037004600390035003400380044003100420036003900340036004300350034003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320033003800000546004B00000746004C004B000037460061006C006B006C0061006E0064002000490073006C0061006E0064007300200028004D0061006C00760069006E0061007300290000886B3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100330031004400310031003100350035004100450032003100450030003000300030003000310044003000340039003400340034003100350034003200380039003100420035003900300034004600340038003900330037003100310038004300370033004600450046004500460044003500320039003500360038003400330036004400450046004500300038003900350036004400330041003900300030004500430036003600420033003100420030004300440041003200430032004200430037003400320039004600330039003000420033003800330044003900360035003600390041003700300045003500320038003700300045003400310044003400410035003400420034003900350031003100310044003900360031003000420033004100340039004600340038003700450038003100320034003100330031003100390033004100300034003400310032003600380036004300330043003100390036004500330034003500390037004200450042004300450042004400440042004200420037004400420031004200450046004100390033003100450038003300390033004400330043004400460045003700460042003700390031004500420045004400320046004300450044003700420042003600450043003000460037003000460037004100330034003600320043003900360032003000370041003500390032003500460032003700430039003400350037003200330034004600370039004600340033003200340039004200340042004600390035003200420041004100300037004400390031004600410030003700330045003800310044004400350039003600440034004400450037004500430042003800450046003400420034003700300043003100360037003500310031004600330041004300390037004300340036003600370046004600370030003900380044003500430039004200370030003400330036004400320043003800360044003300450039004500430043003900340039003800390045003400450039003100340045004600460041004300310045004200430041003000410041004200360036004200360032003500390045003800370033003700330033003400370035003700350038003100320043004200420041003400430045004100340045004100460034003600370041004500460037003700330042004100460037003200300046003100440039003000440030004300340042004300320042003300390041003200330033003500460035004400390044003100450042003700450038003400300037003900300032003400300039004100460037003700330042003800410035003100410030004400450042004200300042003700440046004300310041004300440044003100330031004300430034004400390044004600430034004100390045003300350042003100300033004400420042003600320031004200390045004300310038003500370042003400330032003200370046004300310045003200320043003100300045004200320039004100430045004600390033004200330039004400370031003300370035004600310038003200430032003400340035004600300042004400360044003200320032003000460036003600300035003600320034004600320033003900370038003000460042003000390039004200380032004200310038004400380039004200450036004500310041003900370031003600370039003900360033003400350044003400360043003300410043003700300045003300430044003700420033003600370046003600460044003100320030003000300044004200450037003000360038003700310041004600320033004300380045003600370039003900460043003900300041003500350043004100450037003000460043003900380034003400340046004500460034003500360036003500320033003900420045003200360033003200430034003600320038003200430031004300310041003300380034004600370036003900320045004500330042003900360030003200420041003700300045003100380033003400310035003300350044003600380034004300320037003700410035003800440038003700410046004200460046004300430044003100380041004500420041003300330041004500420032004300450030004500370037003300330031003000420032003300310032004100440030003600430041004500460033003200320041003100460030003600390045004100390042004100330038004200350041004100300030003000330037003400370038003300360034003400410037004200350031004300430032003200430042004100320038003300360038004400380046004400350046003400440036003000320031003200340034004100430035003200430034003700370036004600450034003200440045003700440039003800340033003500420030004200350038003900360038003100310030003900320042003300350033003700330031003400460046003300430046004500330046004100300030003000370046003000300037003100310036004100310038003400430033003500320046003900430036003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320033003400000546004F000007460052004F00001B4600610072006F0065002000490073006C0061006E00640073000082C736003000300030003000300030003100300030003800300036003000300030003000300030003100320045004400380046003200360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350030003100300041003300390030004400310030003400390035004500300030003000300030003000360037003400390034003400340031003500340033003800380044003600330046003800380046003000330033003000310034003100440046004200460046003500450035004200460037004600460037004200360044004400440046004600300043003400350043003700370030003200390043003300300039003900380031003800360038003000340034003600300044004100360042004400430031003200430038004300430035004300370038003900350032003400380041004300330041004200380046004100460037004400410042004100460046004300390037003100310031003200310034003000420033004100300036003000360034003200380033004100380036004400330043003500450046003700370041003600330033003300300033003000330030003300300030003800420041004300460032003400440039003600300039003600460046004200440039003600440038003600440034003400300042003500330035004300450041003700300038003100410031003900370044004300340036003000440038003600300033003000300033003600310046003500460038004200410046003700300030003300420031003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320034003200000546004A00000746004A0049000009460069006A00690000888336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320034003200360030004300410035003400390038003300300030003000300030003100440036003400390034003400340031003500340032003800390031004100440039003000340042003600380031003300350031003100340038003600420046003900420034004300330034003600360031003200390033003800360034003600340037004100440034003900320043003600320041003500350032003400310041004200410032003100340041003900310035003000350031003700410044003000410036004100420042003500300034003100460030003800350044003400420044003000350035004400420038003100300032003900310036004400430034003900370031003500310046003100300031003700350041003100340038004100420036004500370043004100430034003500310037004200360039003800350038004100390044003500320045004100340030004500330031004200350039004100380043003300340043003900430034004300430036003400350043003800380044003500380042003100350034003200460031004400420044004300430033003300390045003700460046004500460045003100310037003600460037004100360045003300380041003200330036004300360043003500450037003500460042003900460044003300300034003900450037004400450033003500310043004500440045004400410036004500460035003400310037003500370030003600340036003300380044004400420034003800340031003300370035004600330031003100420035003300310032004500340043003100410035003400380041003600420043004600310033003800330042004200430046003200360033003800410037004500350031003800420044003700360038003000450036003400440037003100300030004200360044003700340037003100380033003900420039003900320043004500440036004400350046003400350039003100410042004200410046003200360032004100330036003000350031003000450046004200360031004400370036004600450036004300330038004200360038004400390039003100430043003300440042004200300030004100450031003700360034004200430042004500370033004200460036004300460044003400350035004500390034003900430032004200390032004300340032003300380032003800340041003800390042003400320037003400320034003600350042003300430033003300350037004400450033003700420037003200300038003400410030003300410045003400360033003500310045003100310042003900450046003000340032004300430033003300330044003000340038004600420037003600330045003500380042003700430039004100460038004300320036003700430046003000320031004300340037004600410039004600310044004400390032003100310041003900370046003700450033003800430046003900420031003700330036004500350045004400380038004400330043004400300038004500460043003800450041003200330046003100460032003200440036004200300030003200350046004300390045003400460032004200380043003300410035003000460030004100300030004400440041003300330036003500440045003300310045003700430045004200450042003800390041004100320045003100450045003900390036003600340039004300380041003400360042003900310033003300460043004200370034004200320038003900350042003600440043003700430038003600430044004500320030003600370044004300310036003200450037003000320046004100310044003300390031003300300037003900390043004200370039003900310032003600350035003200410044004200420039003800310032003600350035004500450041003600390044004100300037004400450037003200440044004200370038004300320044003700350034003100340039003500380039004400420032004400380033003700350043003800320043004300330034003800370035004500430046003200330046003200350031003800450034004400310039003000430046003900300031003500380041004200460044003700430043004200430030004300440039004100380044003000300041004300410042003500390030004100380030003400450030004500440044004500460039003500380034003800360041003600410032004200360045004300410034004600380046003400310035004500410035003600330046003800310041003100450046004600320043003500430043003900310036003100360046003100430042003300360038004500310030004100410038003100380030003500420038003100460038003800340042003700330037003100420030003700370044003000390039003500440035004100310039004300310034004300310036004100330032004100460034003500370037004600430045003100370046004600360032003300360044003300460046003600320046004300320046003700450030003000440035003200320039003700370036003300460045004400320036003900360030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200340036000005460049000007460049004E00000F460069006E006C0061006E00640000833736003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300300036003200300034003200370034004100410039003600300030003000300030003000380033003400390034003400340031003500340033003800380044003600330046004300460046004600460046004600370046003000360032004300340030004400450036004600300032004300330041003300310037003100460031003900310038003100380031003800310038003600430030004300450034003100380030004500430046003400410043003400410036003000430032003700360030003200320034003900460035004200300033003600390038003600350043004600410039003700420035003800320035003700450046004300460041003000330036003700370046004600380046004300380033003000310039003700330041003500430038003000390031004300310042003400300031003600420045003400350031003000410038003600350045003100380033003300450045003300450037003900310037003600420035003000340034004400370041004400360033003700380046003500450045003200420030003300300033003000330030003300\
-380033003800450042003200310038003400330037004600410031003300420034003900300036004200330042003800390038003200390036003100390035004500300036003000360033003800310042003300300035003700380033003900310038003700300041003900430033003000350038003600350045003100380044003300430043003600300030003000390039004100320032003100320043003100430030003300300039003100460030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200350030000005460052000007460052004100000D4600720061006E00630065000081F73600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310037003100300032003200310044004400420041003300300032004500390030003000300030003000300033003300340039003400340034003100350034003300380038004400360033003600340035003000360042004600380043004600380030003000330032004300450044003000390036003200380038004600320044003500430035003200450042003900370045003300330030003300340033003700360031003100320045004100440030004300340043003300380036003500320038003000340041003300300036003800460031004100330043003600410046003000410038004300310030003300360041003300300030003000460044003400350030003600350039003000330046003300310032003700330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200350034000005470046000007470055004600001B4600720065006E0063006800200047007500690061006E0061000007320035003800000550004600000750005900460000214600720065006E0063006800200050006F006C0079006E0065007300690061000085233600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100360033003800320043004100330030004100420043003000330030003000300030003000300046004500340039003400340034003100350034003300380038004400450044003900340033004600340042003400320035003100310038004300360037004600450037003900430038004200430038003300350038003900350030003400390042003800380031003000380036003600350033004400340045003800440038004500300032003700460030003000420030003400450031004500430032003700310030004400420044004200460041003000300034004400320044003200450033003500420038003300410030004100340035003100300030003900340031003400420043003400380044003400300031003100320044003200340046004300350033004400430046003200440045004400330044003400450041003800390045003200360043003300440046003300460042004600430037003800370039003700380039004600350037004400430041004300310035003300350031003600320034003600440034003000410044003800320039004400460035003500410044003500300041003500380036003800410044004300440031003900340046003700430043003600310037004400370043003400330037003300440035004300360046003000420045003200360039004100330043003500330031003400450030004300330041003400430032004600340046003700390036004400320046003400380045004500360036003000380044003300340033003900320045003500330041004100430031003600390036004400410030004300310039003600420037003800360038003300320042003800340046004300310038004100430042004300370036003800430041004600330045003300300036004400430031004500460046003700310045003300450038003100330045003600340033003200360042003300320043004100320035003400340032003200410034003900450043004100450030004200420033003300450045003800310030003800340046004100320035003500380043003600330038003700390041004600390033003100420039004600460031004400320046003500350031003600310034003000450032003000440041004500380032003000360030003700340042004100300036003600330030004200300035004400460034003300380046003700430042003000340035003200410031004100320030003800340037004300300046004500340045004300450036003400460042004400390035003500460034003400360037003300350041003900440032003700340030003500330044003900430042003900330034004400420039003600360037003000460046004600300043003800340041004100350043003500460046004100460046003800440036003100370045004400350043003400450034003900360042003300460045003700390045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320036003000000554004600000741005400460000374600720065006E0063006800200053006F00750074006800650072006E0020005400650072007200690074006F00720069006500730000073200360036000005470041000007470041004200000B4700610062006F006E000082233600300030003000300030003000310031003000380030003600300030003000300030003000440039004200310035004300380033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003400320034004500320041004200320038004100460030003000300030003000300033004500340039003400340034003100350034003300380038004400360033003600340039003800390037004600300039004600380031003000360038003000380039003100360038003600380045003100410038004300300032003500380037003200430034003100450031004300410037003800350043003100380043003700460032004500380041003800440041003600380041003200310036004100330030003400420044003400430036004100390033003400340039003100350032004300340046003300450034004200350041004400320043003200450030004100310031003700430036003400330043004600360030003000300045003800380033003000420042004600430046003800440036004300440035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007320037003000000547004D00000747004D004200000D470061006D0062006900610000821736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030003400320044003300410043003700370035004600460033004400300030003000300030003000330042003400390034003400340031003500340033003800380044003600330042004300320034003600300046003200390046003800310030003600380030003800390031003600380036003800450031004100380043003000320031003800360046003300450046004500460032003800380032003600300036003300330042003800360046003100420034004400310035003000430030004300300043003000430030004300380043003900460042004600460046004200450034003600310033003800330038003500440036003600410038004600380036004600310031003000330035003100380030003000420042004200380030004400360031004200440036004500420039003200320030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200360038000005470045000007470045004F00000F470065006F0072006700690061000083DF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004100320038003100370046003500340033003700410030003700300030003000300030003000410044003400390034003400340031003500340033003800380044003600330046003800340046003000340046003800440032003300460045003700460046003000420034003100440044004600460032004600300034003700350046004600370046004500390039004600340033003800430039003600460046003400430030004300360038004500300043003700390041003600440030004300370046003600450044004600340037003100370043003600300039004600450044004300420045004300460046003000360033004300440033003600300043003700310031003400380033003700460041004300440042004300310046003000360044004600410031003200380036003100460038004200440037003300310046004300370044004600380039003400410030004100310037004600310046003300450036003500460038004200310037003800310044003400340043004600420041003100440042003800300044004100360032003600360030003400310045003600370030003000340037003900330030003300300046004300460042004300370043003000410032004100460043003900430030003200430032004600340044003500300033003300420033004200430033003400300033003400370036004300310030003000330038004200390045003200360034003400320046003200450038003300310039003100380031003800310038003300380034003200420043003400380037003300390039004100410032003200300033003800420041004100320032003800360033003800450033003000420034003100440044004600460032003400390039003400340032003400410030003500390031003800440033004300430036003000380036004400310030004300380032004400350036003000360041003800320041003100390037003400310030003000370038004500420045004500330033004600450030003900330042003700340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200370036000005440045000007440045005500000F4700650072006D0061006E0079000081F336003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003300330033003100340044003600380042003700380044003800300030003000300030003000330032003400390034003400340031003500340033003800380044003600330036003400360030003600300046003800430046003400300030003300430030003400340030004200340033003800370041003600430031003200430037004200310039003100380038004500440033004300320036003000430036004200420041003300390031003000370030003500320043004600430039003100330034003000410045003300460046004500370034003600430033003900380043003600300036003000330030003000380042004100320030003800370036003600360037003700340035004200440030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200380038000005470048000007470048004100000B4700680061006E0061000083A736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003000300041003300350039003600320030003500420036003500300030003000300030003000390046003400390034003400340031003500340033003800380044003600330033004300320037004100380046003600390046003800310030003600380030003800390031003600380036003800450031004100380043003000320031003800460046003500430031003400320033003200410046003200360045004400430046004600430042004300300043003000430030004300300041003000410031004300380034004300390034004300310030003400350044004600430045003300450037003700460038003600460037003900460046004500330033004100430044004100460031003800330036003100440035003800450031004600300043004500460033004600460044003600370046003800460031003900330042003000350042003500380030003800320039004600380046004100460044003300460034003300360032004300440032003700380036003600440038003700370046003300310033003000330030003300300033003000390043004200390046004100390042003600310037004500300042003100460030003300300037003300420032003300350045003700440034003400300035004300350041003300450037003700460031003900440034003700440044004500330032003300300033003000330030003300300044004300440043003200320043004300320030003200370034003900330038003300380030003800420041003900380038003100380031003800310045003100440032004100440033004600300043003800370031003600300041004300320044003900430034003100380043004300430038003900300036004400330046003900410046003300380036004100380043003100300030004300340041003400330034004500430046003600300035003200360042003600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000732003900320000054700490000074700490042000013470069006200720061006C00740061007200008573360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310033003200460032003900440030003200380030004500460031003000300030003000300031003100320034003900340034003400310035003400320038003900310042003500390033004200310034004100430033003500300031003800380035004200460044004200440038003600300039004200390032003200300044003800320036004200350030003800380041003000380032004500460041003000380038003200430046004100310042003300390042003600460041003500410046003600310031003100420041003700360037003200450042004300350031003600340042003000320038004400330035004200340030004400440045004100360032003900410036004400370044003500320035003400440041003800370038004400360046004600390043003800460033003300390043003500460036003800410044003300350046004600410030004200440032003200430033004500420045003300310033004200310037004300360033004600340046004300380032003100300038003200390033003900420036004200450043004600330033003300320045004500460036004500460046003000360034004500460043003000300044003500450044004100310038003200380030003600410044003500340034003700350037004200350034003600420046004200380035003800440032004200440042003800450045004200340039003400380032003400380037004600340033003700320039003500460035003600310044004400350041003800440033004400460041003400340034003700320043003800370041003100320045004500440045004400380046003400350043003400450034003700360033003800450041003600330033003000450033004200430037003000300037004300460038003300450033003500370033003800430045003900420039004200420038003300300031004100340039003400380034003700450034003000330038003900300030003800410030003800350043003000340044003900360035004300310034004500340042003600380032003300330041003500350038004200350033004400410032004600390030004300440035003100340030003800320030003900410036004100390043004200360034003700410036003100340038003600360035004500350036003600340035003700380046004600390030003300420042003700320043004600420032003600390045003200440035003800430036003000420035003400450042003900330037003900390036004400310038003900350043004500410042003600380033003700440045003000360030003100380046003900420044004300340038003000340036004100390031004400340046004100460033003400320043004100300046003900320045004300410044003800420037004100460045003200420037003100320030003700430034004100410046004300320046003900350030003600440033004400300035003400440032003700320036004400300031003700450030003000420032003900390036003700320035003100450046003500380031003000460030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300300030000005470052000007470052004300000D4700720065006500630065000084B73600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003400320032003000420043003800380044003900410030003000300030003000300045003300340039003400340034003100350034003300380038004400360033003100340039003000450046004600410043004600300030003000350034003700420036003200370042004500390037003900340045003000360031003500350033003600390043004300430043003300340030003200310036003000340031004500360037004300460045004600320034003300390030004600460033004200310042003800410030003200320037003500420030003500300036003300450033004500370036003900320030004300360035003600360036003200460041004300360034003200340038003500310037003300420035003000330038003300390036003800360032003800340039003000360033003300330030003300300037003000330031004500450033003900370030004600460043004400450037003200460033004600380035003100390031003800310038003100380036004300320044004500350031003800420038003300380035003900310038003700360045004500420042003000370035003700420031004600460046003000300033003800360034004600390046003700460039003200450043003600320043003600460046004600460046004600460046004300370041003700430038004400410036003300300031004300330042003500310042004100460034003900370035003300310030003300320033003700320045003400360044003500460031004400430039003200300032003300430044004300370041003000360042003300350031003300410045004500300045003800380045003000340037003200380032003800320038003100360030003100380045004600330042004600430038003000450031004400360044004400370037003200340031003900430041004300420043003300460045003900360041003000430031004200350041004400300037003400380033003200310034003000410038003400300039003400360031004500330039003800300039003700380037004600440032004400430031004300380032003300310037004100300034003400310045003300350030003100340042004200300041004600450036004200370042004600460046004600450037003100350031004400330035003000410032004400320033003100420039003800300033003100330039003600370046003300350037003900410042003800390038003500360036003100300043003000300046004100310032003500350033003900460036003900360042004400390043003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330030003400000547004C000007470052004C00001347007200650065006E006C0061006E0064000085EF360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390030004600310031003000410033003800350039003900350036004400340033003000300030003000300031003300310034003900340034003400310035003400330038003800440036003300460043004600460046004600460046003700460030003600310041003000300032003600350041003100380043004100430030004300300043003000430030003800320034004200450032004500460038003700340046003000430039004600370036003100450036003500460038004600440045004300310035003000330038004200390038003100300030003300390046003800420031003500300033003800420042003800330030003600350030003600420046003500460042003600390035004500310036003900350039003000460043003300440046003800460039004600450031003600320034004300390043004500430030004300450032004400350045003900300043003600320046003900370031003400340031003900430043003800380031004500430036003100460033003700450045003600330037003800310030003500420043004500430030003800300032003300450038004100350033004200380042003100390034003400420032003200320034003900330033004600380046004600440046003700460030004300440037003700350037004300310039003700450033004600370039003800390035003300300033003100330030004600310037003800330044003600430044003600440030004300430043003700430033004300370038003000440034003600380039004200430045004600310037004100450045003300330035003900340038003100380031003800310045003100440046003900370036004600300043003500460030004500390043003200320045004300450032003000460033004200300046003100460038003000360042003700410046003700350039004600300033004600430033003700460037003900380032004200410046004500460044003700440043004500320043003200320038003800440037003000350038004300310037003700380038004300450031003400310043003100360035004100430043004400410030003700410036003000320031003400310037003300310046003400340039003700330031003700430044004300420034003000460041004600310041003900410030003500300035003800410043003100460046004600460046004500360033003700380035004100440031003800420033003300340035003300300033003000330030003300300033004300360046003900450043004500460030004600370044003300310037004400320030004300360036003600300038003000320034004200370034003700310039003000440032003800360039003900380038003100380031003800310045003100440046004600370039004600300043004300460036004200320036003300310042004300390039004200360039004300410030004100310030004300300043003600380036003100380043003000430039003800300035004600\
-38003100380046003800440043004100440031003900350038004100350043003400310038004600450042004300370041004300370046003000360039004300460033003100380036003300460032004600440046003100320036003500320038003500450038003300320039003000350033003400320042003800340030003000320030004100330037004600440042003400360037003600380044004500420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300300038000005470044000007470052004400000F4700720065006E006100640061000088FF360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200340032003000450035004300360045004300420036003000300030003000300031004600350034003900340034003400310035003400330038003800440039003500390033003400440036004600350032003500310031003000380036003900460037003300450031003100360032003200440030004600320038004400390034003600450031004100320043003800390039003100460041003800310035003100420042003700350038003700380044003300360041003400320042003700370036004500460041003200460035004300310030003100360046004500300046003500440039004200310038003100320039003300430041003500410032004200320031003200360041004400330031003900300036003800440041003100300031003700440036003100410036004600380031004400450044004100340030003800350034004200330039003200450030004500340035003200390031003500370034003300360045003700320034003300330046003300430043003300420039003300310039004200310045003500340042003400380043004500390038004400300032003000390030003600390037003300350030003900380045003200410034003200350030003000370030003500440045004200300032004400300046004300360030003000370043003000370036003400310045003200340042003700370041003800450037003100440043003800440045003500390030003200440038003000310044004100420041003400360045003300380036003100440032003100370045004400370042003000440043003900320046004100350035003100440032003900460042004500300041003000410036004300300034004500390042003200410032004500320034003600440033003700440034003600450045003900380033003100430032003900300035004600450046003700350044003100430035003600340046003800310042004600340043003300420043003900440045003800440039003300340044004500450042003000330041004600370031004400340044003800430033003400330031004400360037004100350032004600300036003200330037003400320041004500420032003400300041004500350041004500350035003200420044004100350043003000300030003100460037004600420038003700380035003800420043004300450041003200460037003800380035004300370032003800370030003700420033003000360034003200380043003000370034004100300039003200460046003700430032003600340032004200300042003900340034004400430046004500380032003800460045004200340042003200450039003600310037003500320033004300350034004400460046003200310044003900360034003900350045003500410038004400310039003700440035003000460035003000310033003600310046004400350042003900380035004300320035004300450036003600360033004500360044004300410032003000330046003000390044003800300038003900350044003400380044004500440036003700430030003000360043003300360036003600350038003700390039004400360032003200390036003800460032004300340042003500430044004400430033003300300042003800300044004400340037003300410038004600390042003000390034004100330035004500460044003800360045004200340044003300340046004400430044004400450032004500390039003500330032003200390046004600450031003500300034003000410039004500360041003500390030003000460031003300350039003300420032003600420032003700360034004300320031003100460039004500300038003100440035003200420043004200450031003700450032004100300041003100460033004100390045003500310045003000410035003800300041003900410041003400330033003000360046004200430046003100440030003000410034003300330030003600360046003900410044004500380039004600300030003100440038004200340037003400350045003500390041003100380031003600330036003400430036004200370044003500330033004100460033003500440039004100300046003400450046003300330033004500420035004200460036004500380035003300360031004300420037003100430033003500420038003700370044003100390038004200430031003500390037004100370039004200460046004200440043003700340032004300300034004100430043004500300046004500450043004600450036003000380046003000370042004500320044003500460034003200390045004200440033004300430044003000360038003100340034003000370046003300420033003100440045004200410037003900320045004100380039004100390039003300330045004600410041004100420034004500380043004500310045004400450046003900320045004600350045004400320039003700410032003700300041003300360037003200370039003000450041004200340037004600340035004400360037003400380034004400320038004400360043003100350045003100340034003800340042003600350042003900310036003100350044003800350035003500360043003500380035003000450043003100370030003000370035004200460031004600430032004200460041003000350038003400340042004300360031003000360037003500320032004500370038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330031003200000547005000000747004C0050000015470075006100640065006C006F0075007000650000073300310036000005470055000007470055004D0000094700750061006D000084AB36003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003700300046003000350037003000370044004500450036004300300030003000300030003000450030003400390034003400340031003500340033003800380044003600330042004300360041004500310046003100390046003800310030003600380030003800350038003100380031003800310043003100350035004200340039003000450031003000420031003300330042003500350030004300450034004600390046003700390033003600310046003700450042003700450038003800430031003900460031003900440039003100390033004500330033003700320035003000430035004500300046004600380043003100300039004100380039003500380030004400430045003400430030004600310039004400430035003900310045003100300036004400300031003500310030003600310042003300330042004500360034003900300046003200310036003600370045003000460035003100340036003100420030003600340037004300340032003300440038003300460044004200340037004600330032003300430036003600460042004300450046003000390039004500390032003700380033003900460031003600370031003700310043004400340032003900340032003200320031003100310030003600380037004600460034003200300043004400430037004600440045003300320030003800430041003700320033003200330030003500430041003500390032004300310039003700420036004100450036003300460038004100460032003900430042004600300046003300440042003100390030003600420035004400460033004300300043003000430030004300450039003000340046003500310030003100350031003400300046003800350030004400310039003600340038003500460037003300320041003400460041003900450036003100330038004600390043003300390032003100380032004400430034004200390046003800430034003200460036004400300036004500310044004200390045003000430042003700360046003700410033003000310043004600410041004400340037003300440038003300310039003100380031003800310038004200360037004500320033004300450041003500320038003000360046003300460045004600460043003900430030003400380041003500380043004300440046003300460046003200370030003300300033003000330030003300300033003200330041004400430041003000410030003000340045003300320033003900420035003200370035003300380046003700300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300320030000005470054000007470054004D000013470075006100740065006D0061006C0061000084673600300030003000300030003000300045003000380030003600300030003000300030003000320042003300310045004300430044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310033003100310030003300300044004300340032004200460041003000450030003000300030003000300043004600340039003400340034003100350034003300380038004400440044004400320043004200300041003000310036003100310038004300360046003100460046004300430033003800390036003400330035003800320038003100370038003100420035003700320033004200410045004300300030003500350038004200390030003000350037004100300045003400330041003200430031003400320036003200420035003200320034004500350035003400300045003200310038003700420031004600300045003900390042004500310030003600360038004100360043003600360032004600320036004300390046004100370044004600450036003700440039003500360041003700370046004400450032003400420034004100420039003700340032003700310035004600360031003700330045003700350042004400380044004400310036003900410044004100450031004600330042003000300046003500350042004500310033003600370046003000430030004200370031004500370037004500350041003200300041003500460043003000440032004300320044003400390035003300360046004600320037004300450043003600390030004600360042003300340046003400330041004400320042003200430037003600440045003100410044004200310032003500390033004300430032003000300045003700330042003200420031003300430036003800330033003700360043003600430045003300440039004300300038003200370031003800380043004200420032004300380046003800320038003900420038003700310033003900340038004500320041003100420038003700420033003800310032003800380037003000390039003400450039003900430038003300450030004200370033004300440037003900420034003200310031004100380043004400410043003200330045004400420030003500350030003200390044003700330031003200440031003300350035003500310035003000380041004300450045004500450044003000380030003600440030003500340043004400450039003100340046003000430032003100460037004200300036003700450030003300350032004600410034003700420032003300360045003200320046003500370030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800330031000005470047000007470047005900001147007500650072006E007300650079000085773600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310035003000310030004300300031003700330034003800350036003400360030003000300030003000310031003300340039003400340034003100350034003300380038004400420035003900340042004600340041003000330034003100310030004300360037004600330042004200370031004300360038004400340045003000390046003200450042003500380044004100300034003500360041004600310031003100380032003600300045003300340033004400380041003800380044003900350038003500390035003800440044004100350041003600410041004600380044004300460036003000360033003900330033003200340044004500410038003000300038003000410045004100390039003800340037003800420037003600420031003100380044003300390046003600450030003000360033003900420046003600410039003600390044003600460045003600390042003900390039004400330035004400450037004200340046003000390039004500330037003700370034003800330042003500440030003000450043004400410032004100430042004600370042003700360035003100340036004300410039003000370034003000450034003900300034003600330036004200310033003500440030003000350037003600340032004500440045003800310044003800300043003100410035003500340031003800440038003400330044003600380042003200360042003600300036004200410046003400370046003800300031004400350043004400460039003400330041004100350039004400320045003700310045004200440037004400360037003000430043004500330045003200370041003500300039004300440044004600380043003400420044003400380041004500450043004400390038003300300034003000430046003400430046004500360041003600440038003200300038004400380043004600340032003100300045003100350031003700360035004200330043004400310031003300330037004200340039004100310039003200460041004400360033003000370037003100450035004500440035004600340038003100440033003700360043004300450042004600360034004100350045004600310036003100300032004400450044003300330046003900460030004600310034003100370038004100350042004200380033003800320045004200430039003800430036004400420046004500300039004500450036003900330043003600370044003700380042003000380033003800420042003200310043003700360038003300370032004600360045004200350030003100310038004400440033003500350035003900420046003700370046004300460034004400450035003600350032003000460041004500390041003500410039003300320042003000330038003300450034004500430037003400330039003300410035003200410046004600380041003400430037003000440046003200420032004400370035003500440046003700420045003000300035003400310033003500370030003800360035004200420042004400380035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330032003400000547004E000007470049004E00000D4700750069006E006500610000820F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300030003000460033003700310039003700460036004400370043003000300030003000300030003300390034003900340034003400310035003400330038003800440036003300330043003200370041003800460036003900460030003100300037003500300035004600460030004600390031003800420042004300320035004600320042003600430037003200330044003800460039003500380045003500350033004300440030004300300032004100430037004300300043003000430030004300300038003400340042003800320035003200330030003600410046003000410038004300310041003300300036003800460031004100330043004100300030003600300033003000300043003100450046003000410031003100460042004400430038003600460039003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360032003400000547005700000747004E004200001B4700750069006E00650061002D0042006900730073006100750001839736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100340030003200300037003000460043004400460045003700420042003600300030003000300030003000390042003400390034003400340031003500340032003800390031003600330033004300320037004100380046003600390046003000310030003700350030003500460046003000460039003100380042004200430032003500460032004200350043004600320046003800300030003100330033003900390041003000360038004600430031003500460031003900460045003500310044003700450030004600460030004300300043003000430031004600460045004600460036003500360038004600390046004100390032004500310046004400460046004200460030004300330046003100390037003000300036003300420044003100380030003800350038003100380031003800310038003100390031003800310038003100360031004400440043004600380046003000430042004200370045003700440036003600370038004600430045004600330037004300330030004300310045003100390030003600370036003400360034003600380036003000390046003700430034004400460044004600360034003600300033004400340038004200360043003100300043003000430030004300300043004600410032004300310043003000430043003900310043004300320030004300320043003800430030004300300043003300430038004300390030003100300039004100460042003400330035003800460030004400450035004200330036004200320035003200300035004400430036003000360033003100360032004500300036003600330031003600320045003700320043004300430030003000410038003600370038003700320041003300320036003000300030003000340033003700300032003500320043003200360046004100350035003100310030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300320038000005470059000007470055005900000D47007500790061006E00610000878736003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003600330039003100300039003500370045004600310043003500300030003000300030003100390037003400390034003400340031003500340033003800380044004200350039003400340031003400380035003300370031003100430043003700330046003600460042004500320044004100370033004500420031003300430033003900390034003000430043003200380032003600300030003700390033003700360039003500330031003300410037003400310030003300440038003800330042004100350032003000390044004200410038003800300036003300420031003400440032004400310039004200380037003400380030004600440031004100390034003300320043003100380038003200420041003900330039004400410034003900360036004300360033003200410041004500460030003900320031004100440033003000370039004200430046003500360036004300320043004400460037003800450046004600440042004400410034004100340041004600420036003200350046004100330044003700460046003900460030004600440037004400460039004600320039003300310045004600380042004200430035004400440032003700320033003700430039003400350034003300450036003400330046003500330042003600300043003200450034003200370035003200460042004600420042003900460043004600420046003500440041003400410037003200390034003700330038003300380034003400360046004100370031004600390037004600330031004100370042004100350030003300340041003800360037004500360045004200300039003400420041004400410032003500300030003500360038004400350046004200430036003900440030003700380033003400450045003200320033003800440030003800330035003000300032003600430035004100420037003700380039003700320044004200300039003000340039004200300037003600420030003800350034003000460043003300460031003800430030003400340031003000440031003700460042003200370045004200420043003000440034003500330033003700370037003600450043004100320030004200370032003200320039003000310046003200350037003700430032004300450036004400440043004300450044004100360035003900350032003500370041004200350045003700330030004100370043004100430031004600430032003600340034003600440037004600300046003400390037003900390037004300440043003400340038004200320032004600440037003600330042003900310031004100370044003900380038004400370045003500360046003400300045004300320045004100320045004400310034004300380032003900440036003200420036003300360046003000420031003300360034004400390044004400390042004100370044003100450038004500430039003000430046003700440035004500330037003000390043003300310042003800360045003200300033003500440046004500370039004200450034003200350041003200310039004300430036003700350032004300340037003200350046003300300038003500350035003100390030004300360030003000310031003300340035003100350045004600410030004300390037003400340038004600390042003700440031004500390043003100440031003300360043003900350037004300370033004400430036004500320041004600390030003200420034003100340046003100320033004600390033003100390045004500360042004200300031004200430045003200360038004500370044003200320039003600370042003800440032003900410043004200460038003300460046004500430037003800410045003500410043003700310042003000390037003600380041003400390031004200450033003100340044003800420045003000410043003500420045003800410045004400330034003400420045004100460042004400410035003700370031004400310033004200390036003300350043004200450030003400350035003900430033003300420037004100390044004600300037003800380038003000340045004400380043004500450036004400310031003400440043003600440039003300460035004300410045003100390036003400340042003700430035003900420046004500320030003800450037004600310044004100440044003000340046003500450042004100330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300330032000005480054000007480054004900000B4800610069007400690000840B360030003000300030003000300030004400300038003000\
-36003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320034003100440042004400410045004100300041003700300030003000300030003000420038003400390034003400340031003500340033003800380044004500440039003300420042003000410043003200340030003100300034003500430046004100410041004300380036003800340039003000320046003100300035004200370042004200460032003600350038004400390044003900460039003200370032003200380038004100440046004500340039003200430030003400340031003700430034003400330042003100420031004200460042003200300033004500330036004100420039003200410043003800440046003500410036003400410032003100330038004500440031004300300045003900370031003900410045004100300033003500330035003900340033003000390035003300320041003400420046003200390041004500310035003000310034003200340030004500300034004200430030003000300030003200380030004300420046003500380035003200390046003800340043003600310036003200440046003900330032003400370031004300380037003800440038003600300033003200370032003400390045003200310030004400460039003300430035003800390037004200370041003600420030003500310043004500390031003000340035003600440039003200460035003100390039004400430032003400320043003600370034003900460037004200350032003900440044004100430035003000330042004400420034003000320041003200450045003300320035003700330045004200370046003700300036004100410038003600390033004300410045003800450042003100350042003900420045004400420043003500440036003200440039003000330046003500320039004100420033003200330037003900450045003200320038004300380031003500440034004300410036004400340046003700440041003900360034003000380037004100300046003300320046003400380042003900450032003000460032003800380035003300430039003300380043003000360037003700370038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330033003400000548004D00000748004D0044000043480065006100720064002000490073006C0061006E006400200061006E00640020004D00630044006F006E0061006C0064002000490073006C0061006E006400730000073300330036000005560041000007560041005400003B48006F006C0079002000530065006500200028005600610074006900630061006E002000430069007400790020005300740061007400650029000085CB3400300030003000300030003000310034003000380030003600300030003000300030003000380044003800390031004400300044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310033003000450032003700300046004300430042003700390045004300390030003000300030003000310032003800340039003400340034003100350034003300380038004400450044003900340033004400340042004300330036003000310030004300370037004600340044003600330041003800450036003200390032004400360041004600310030004400360042003500310038003800300035003400310041003400320032003800450038003200380042004500300044003000450032004500320045004300450041004400370037003000460037003200330042003800460042003100350031004300380034004600410033003200360038004100380034003300440030004100320032003200430035003900370038003200340032003400440035004200410042003500360036003900330034004400340032004400320032003200320032003400430046004100340045003000370046004200430046004600460031004500330045004500420038004200420035003000460042003800410033003600370045003300340045003200320046003400440046003100390035003100350034003000460046003400300046004600420032003200420036003500450043003400410046003900350042003500430030004400300041003700410041003800440042003200380036003100310035003300330042004600380039004500420042003800430043003600350035003700370031003500410041004600460034003200360046004100450035003800300042003500450041003300440041003700340035003100330045003100450043004100330038003600310034003000450037003600300036003100390031004500390044003900320030003700310045003900390037004200440034003600430031004200320033004100320046003000440038004400320041003800330036004300450044003100420035003600370039003800390038003000340032003400360036003500380042003000340041004400300041003100440031003800410034004400340033003700370038004100340034004500370030003900430037004600390037003500430046003000460035004300360031003200450039003700410033004400390036004300370032004200310042004200340031003500320041004600410031003600370039003600390039003400440041004600430038003000330037003900320041004600320037003200420039003800350035004200330046003600330046004200330041004300440037003800450043003000440032003300310035004600360045004300430030003200440033003700360045003000460038003900300042003800330038003800320036004500380038004200430037003100390031003000380032003900420042004200430046004600350030003900300043003900430035003900350038003000330039003100410034003200370033003200430046004400300042004200340041003500370033003400340041003700360037003100430039004600330034003300420032004400460041003600360034003500390045003000420041003800430036003500330032003500460045003200440032004300300039004600460034003700420036004500460039004500460030003200330046003000300038004300370042003500410046003100320041004400450038003500410042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330034003000000548004E00000748004E004400001148006F006E006400750072006100730000833336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350030003200310045003100320038004400340034004400390031003200300030003000300030003000380032003400390034003400340031003500340032003800390031003600330036003400370030004400460046003500390046003800310030003600380030003800390031003600380036004400320044003400360030003900360035003000350042003700310044004100390038004600430031004600300046004500380035004300370039004600460046004600410045003300330036004600330030004300340037003700390044003700420046003300420046003600440045003500370044003700430035004100460046003300330046004500460046004600460031004600360037004500340046004400460045004600330039004600380031003900390038003900390031003800310038003900380039003800310036003100440045004100450041003700300043003000430046004600310039003100380039003200440043004100350031003900460045004600440036003300360030004600380046004200450046003300460030003300320042003000420032003300370039003200450036004500350044003700450045004600460046004400360039003300410046003300310043003400420037003900450037004100460044004200460036003500460039003500440046004300320045003000450036004400420039003400380039003300450034004300360033003800390041003800450036003100300030003000300035004200380041004300300042003100320035003200370037003500310045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330034003400000548004B00000748004B004700001348006F006E00670020004B006F006E0067000084D7360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003000340032004100390030003900370032003100300041003000300030003000300030004500420034003900340034003400310035003400330038003800440043004400390033003300310030004100430032003400300031003000340035003900460035004100310039003100310036004300440032003500410039003800350036003200310038003500300037004600300030004500300031003800440036003000350041004100420033003400330039003800300036003000360037003900370032003600370036003500360045004500370031003700320038003100330034003800310041003000380035003100380034003100460030003000300038003100420035003500380032004200380042004400440032003800300036004600430033003000430044003300300046003300450036003300330043004300420034003200340034003800310041003500300042004200300039004500380039004600380030003800330030003000390032004100340033004500350039003800320033003400430036003700380032004300360035003900450034004200390039004100360045003600440041003500370045003800310044004100460035003600450030004200410033003000390039004300300036003000300030003600390030004100350031003000340037003100410043003700320031004100420035004200340035003700390031003600350044003000450039003800300031003000360041004300300045003500300032004300420032003500440043003600450036003000440042003300300039004400430032004600390046004300300035004400380046003700450031003700300038003000440033003000390042003600350042003900350042003300360044003100380030004500360031004200460038003700420032003800340041004100460041003000320030004300330030003100410038003100450037003400310041004600410037003100430045004600370036003600410031004400340032003600380044004200430043003500370033003100390042004300310037004100300044003600310030003800440044004100450037003200330039003900460031004200440042004600340045003000370045003100460031003600300042004200300032004300440038003600430045003000370038003800340045004200310035003800410043003200300038003300360041004600450032003500440038004500300033003800460030003700440043004500460033004600300036004400370044003400310046004200430046003400380037003700410030003200390039003200340036004300330042003600420036003500440045003200450030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300340038000005480055000007480055004E00000F480075006E00670061007200790000820F3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000420032004300320035003500380033004100380034004200340030003000300030003000300033003900340039003400340034003100350034003200380039003100360033004200430041003400410043004600330039004600380031003000360038003000380039003100360038003600440032004400340036003000310036003700450034004600330037003900410031003800430043004600380046004600460046004600460044003100330030003600360036003000360030003600300036003000360030003000390044004200440032003400410031004200380033003500370044004600330041003400340031003300380033003800370035004500310038003000330030003000330033003500350030004100410042003900430043004500330038004600420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300350032000005490053000007490053004C00000F4900630065006C0061006E006400008323360030003000300030003000300031003000300038003000360030003000300030003000300031003200450044003800460032003600300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003200390030003300460036003800320039004600330042003000300030003000300030003700450034003900340034003400310035003400330038003800440036003300360034004200300039003800460045003900460030003100300042004200380042003400320034003800430038003100330044004400320038003300380031003500350035003200390032004500310035004100440039003200340030003600390046003900320045004400440038003900340045003100300034003400430032003400410039003100450033003500370038003500300031003900430043003700380045003600460041003200420041004300410039003400320034004200350031003900300045003100420031004100440031003500300033004100420041003400320034003800330044003000440032004400350030004300370037003900450037004300320034004300440045003000330042004100450041004500350038003000440036003600360030003600300036003000460038004600440046003400320039003000330032003300330033003300330030003300380042003800340030003400380039004500450031004400380041003400310043003100360032003900320042003800310036004100420043003400410035003200350036003100300043004500430035003000460036003900310038004200430046003400370037003300440045003400380033003200310038003000300045004500350045003200370037003200360038003900410042004200320030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330035003600000549004E00000749004E004400000B49006E006400690061000083C736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350031003600320037003000410038004200380033004300370035003200300030003000300030003000410037003400390034003400340031003500340033003800380044004500440044003300320031003000410043003300330030003100380043003500460031003700460034003700300039003800330039003800430032003600320034003600360043003400350041003700410037003600360036004100370042003800440031004500360037003500370039003800450042003100310036003200360042003600330041003600410042003500360035003100380038003900430036003900360035003400430032003800360034003700410032004100410032003500340030004300460036003000450046003000450033004600310033004500420045003200430033004500410045003900310031004400370032004400380030003300460044004300330035004600430039003600320038004300430039004500330038004400450033003900420042004500370046003000310044003000330034003100370041004100450041003900430038003400390033003800440034003300350038004200310037003600340032003200390038003900350032003100320036004200320037003400320035003800420037004300330043004500320044003600380035004400360030004300430038003000330031003000330035004100310037003300380042003700320034004500310045003400310034003200310041004300370034004400440031003300320039003000350030003000440045003000370044004100460036003800360031003000460039004200360043003600340032004500340044003400370035004300390033004300370042004500360044003900350033004400370036003500310032003000350043003800340045004600370045003300460046004600330037004500310034004600450030003000320038003300350033003700430033004100330041003900460031003500310030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300360030000005490044000007490044004E00001349006E0064006F006E0065007300690061000081DB36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320033003100390046003500380032004600320037003900300030003000300030003000320043003400390034003400340031003500340033003800380044003600330033004300320037004100380046003600390046003800310030003600380030003800390031003600380036003800450031004100330043004300340030004400360036003700430042003300370034004500440030003100390041003100380046004300460046004600460046004600440031003700340033004300360041003300300039004400300043003000360030003000430030004400430030003900310041003300420036003500360046003800340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300360034000005490052000007490052004E0000334900720061006E002C002000490073006C0061006D00690063002000520065007000750062006C006900630020006F0066000083F736003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100370031003600300043003100410034004100340044004500320044003400300030003000300030003000420033003400390034003400340031003500340033003800380044004400350039003300410031003000450043003200340030003100300034003400440046004200360032003500300034003800410034003200390031003200300046003900300030003100430037003500300044004200360035004600430039004200460039004300380033003000410030004300300041003800390043003100310030003100340041003400390034004400430044004400320032003900410045003000360038003400460042003400380032003300310036004600430035003600340043003400340043003500360035003600420042004100440033003200380030004100320032003100340032003000370030004400340045003300360038004200330035004400360035004200390032003200380045003900390035004200320042004600310045003100350030003400350030004400410032003800380046003200370030003000330041003900420042003600460041004200450037004500350035004500440031004300410046003300320030003600370037004200460030003300310030004300460045003700340043004600320042004300420033003800410041003000380045004400460041003700310033003700380030004600440045003300370037003700380030003800320038003200440033004100320045003000370035003300380035003000390037003200350036003900350031003000340030003500340042003600350038004300410041003700330034003800310043004600330039003300440036004500320036004500330037004400340035004100340036004300420032003500450041003700440042004200440046003300390045003400390032003600350032004100450033003300310035004100440037004600340034003900330039003300370033003300460036004100450046004600460042004200430030004600360035003000360039003500340031003300460037003900410036003600330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300360038000005490051000007490052005100000949007200610071000084D7360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200330031003400380042003300330038004500430034003000300030003000300030004500420034003900340034003400310035003400330038003800440045004400390033004200440036004100430032003600300031003800380035003900460043003400390046003200410032003400340038003600390030003500440033003400350035004300350041003700340046003400310032003700340037003000450045003600440037003400360039003900370035004500340031003700370045004600340031003000410042004400380030003600450032003200300035003000370031003500420041003100340038004100360038003000340044004400320041003800390035003600330031003900310039003800310032003500330045004200440037004100310032003000380041003700330030004100380032003600370033004200430042004300330033003900450037004500350039003500440045003400450032004600300035003000310034003800300045003000320037004100300034004500460034003800310032003400320046004300430046004600310045004100410033003100450039003600450046003000320036003000460042003500460034004300420044003000350039003600450046004100320044004200300036004200410036004400300030004500300037004300370042004200430043004600330045003000300042003000370043003900370046004100410038004200370030003700300045003600460039004200380039004500370037003000460037004600410034003400330036003700310043003100340033004600450039004100430036004200380038004600420033004600320043003800320038003400390043004100390044003200410030003000430046004300350035004200320041003800330032003600420033004500350038003200410042003400340038004100390042004400360032003300460041004400430041003000350036004200410032003700310039003500330033003700410043004200440032003900350045004300430032004500320031004500390041004600380038003100410038003900310031003900350043003300390043003900460032003800450038003700330031003300380030003800320039003600410035003600440030004400380039003800370041003200410034003900350033003300390041003900460037004400370045004300340039004100410032003900360044004200340039003100430044003800430036003100320037\
-003000460043004200430030003300300035004600460030003200310034004500440035003700310032003600330039003100340036003600410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300370032000005490045000007490052004C00000F4900720065006C0061006E0064000081EB360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100310034003000440030003000380038004400420041003100350044003000300030003000300030003300300034003900340034003400310035003400320038003900310036003300360034003900380039003500460043003900460030003100300037003500380045004100390038004300410031003000410035003600320038004500350044004600320043004100310045003000360038003600460035003400440042003800420034003300320033003000450031003900340041003100310030003800430031004100330043003600410046003000410038004300310037003800300030003000300030003900390043003000360044003300440042004500370035003300340045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380033003300000549004D00000749004D004E000017490073006C00650020006F00660020004D0061006E0000843B36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003300320046003200360034003000390037003100330036003000300030003000300030003000430034003400390034003400340031003500340032003800390031003600330037004300320031004100380046004200390046003800310030003600380030003800390031003600380036003000450039004300430031003500460030003500370039003100390033004500360038003400420033003300460043004600340037003700360031003700380035004100310042004300320046003000380046003900310039003100450031004100440044003400330046003800360031003700410045003800360030004300370046003300380044003800430039003300370039003800460042004600440036003700380036003600460045004100330032003000430037004600310045003300450036003500390030003900340033003600360034004600380036003900410032004300310043003000410031003600410043003100320030004600340045004500330037003000330043004200380046003900460037003800300044003600360032003400320036004600320046004500320041004300410033003000420043004100450046003300360031004500300031003600350032003600360046003800460044004600440031003300300033003500370035004300330042003000330043003700410046003300460037003800460035004200300031003000330032003900340038003100380031003800310045003100370035004100320030004400300033004600420046004100350042003000430045004300300037003100360033003300330030004300420038003800310030003300340039003400380031003800310043003800430038003100330036003900350046004300460043003000410038003200430043004200460030003500390038003200380031003800310045004200440041003400330036003200420034003100300036003700330030004300420046003700390046003000430042004600380046003100450036003700450030003700380034004600390034003000370031003900310038003100380038003800300043003600330037003200300030004300440044003200330031003000300039003900410037003300360046003500350033004100460043003100430042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007330037003600000549004C000007490053005200000D490073007200610065006C000084373600300030003000300030003000310030003000380030003600300030003000300030003000310032004500440038004600320036003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000420032004500320035003600410030004300450036003300360030003000300030003000300043003300340039003400340034003100350034003300380038004400360033004600430046004600460046004600460037004600300036003100410030003000390036004300450044003500430046003600380036003100320045003000330032003300380033004300370030003900390041004200380039003800380039003100360038003600330032003300300033003000330030003300300031003200310042004300360031004600420045004600450036003500360030003600300036003000360030003100300045003000360036003200360043004100360030003100360036003200350044003500300042004200450038003300310030003300300033003000330030003300430033004500340034004300300035004100320044003400310033003700340042003100350046004300330032004400300036003300310034003100310036003800360044004200340046003700450033003000330030003300300033003000330030004100380043004100370030003300300042004300370041004600460038003700360031003500330038003300310041003700450039003300460046003100330030003000350042003400460042004400460046004500460035003200370039004600440046004600440037003100460037004600460046003700460046004400460031004600370042004600340042004500350046003500460046003500420034004600420044003200370041003400450044003300460039003100390031004600370031004600300037003100420033003700320030003200450032003800300034003500380031003800360045003300460038003500300036003800350033003400300037004300330041004200300046003800340038003300380032004500380035003400390031003300420046004400300031003000330030003300300033003100350032003300300046003000360034003800340044003600450034003300320046004500370042003100390034003800370034004100440031004300340036003000410032004300330039003800350034003000300030003000360033003100460039003600430043004500430032003000320031004300430030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073300380030000005490054000007490054004100000B4900740061006C00790000820F36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003400300044003000350046003800420031003500350044003200300030003000300030003000330039003400390034003400340031003500340033003800380044003600330036003400390038004500340046003600390046003000310030003700420038003100360033004400460042003900380041003600390030003900430031003500330036004200390035003700460033003900370031004300370042004400410033004200300035004100420031004300300033003000330030003300300033003100330032004500300039003400410043003100410038004300310041003300300036003800460031004100330043003600410046003000380030003100410030004300300030004400310034003100300041003400440030004100370032003600430033004200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000733003800380000054A004D0000074A0041004D00000F4A0061006D0061006900630061000083933600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003100300030004100330033003700460034003300460045003500300030003000300030003000300039004100340039003400340034003100350034003200380039003100360033004600430037003900380042004500310033004600300033003000330030003300430033004500350037003700390043003000430042003300360046003800380033003200390043003700430043003500430033003400300030004500330030003100370046004200430032003900300041004100460031003900410034003100350037004500380033004200300033003000330030003300300033003000330041003300380042003000440043003300460046004400410035004300300036003000360030004200340033003800380030003200350032003200440034003000330037004600300043003400370039003000360038003600450036004300390030004300300043003800430030004300300043003100300031003700420042004400380033003000330030003900300036003200300031003200450030003300460037003100430038003100430038004300330030004400380036003000310034003200310036003100300033003200310030003100390046004300430037003800360035004400360043003100380046004500310046003500430043003900460030004600460045003700320044004500430046003800450030003400410038003800310041003500430046004100370031003100410030004300430033003900440031003500390038003800360037003600350036004500300044003700380033004400370036003000340041003500440034004300420033003300300041003600350044004100410041003000350039003300410041003600350035004300450030003300300030004200440032003800440044003300460032004500410036003300350044004600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000733003900320000054A00500000074A0050004E00000B4A006100700061006E000084D336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300300035003000300035003200330037004400390039004400300030003000300030003000450041003400390034003400340031003500340033003800380044003600330046004300460046004600460046004600370046003000360031004100300030003200360035004100310038003300410042003000300036003700460033004500370042003900350045003100390032003700370031004100430033003200310033004500320033003800360034003300370043003400360030004300390037004200430044003300310038003300450039004600420044003400410044003000360030003400360037004300360031004600430037004500430046003300310038003600340042004200450031003900300043004600460037004500460043003400340037003500300044003000370033004200380033004400450045003600310039003000430038003200320045003500360041003400310042004600430045004600440037003600460038003600310033003200410041004500300043003300460031004600330046004300370041004100390031003500440035003600390032004300310045003200430045003600450030003600320036003300360035003600410043004600320033003800380033004500320045003300450031003300330033003800300044003600350036003000360030003600300046003800460039004600380033003900430033004300370043003300360037003700300043004100450033003300340046003800450037003900330031003700330038003300350031003100410033003000360041003700430031004500430033003200310032003000340030004400430036004100370030003600410037004300310046004300420036003200360030004300450043004200320039003200420038003000440039003500390035003600340045003000420037003300350032003100440044003600300032003600330036003500360030003600430044003700390036004400300043003400430031004300450043003900380037003200310043004500430031003000330039003100430031003100430037004300300043003000430030004300300046003000390046003000300046003800370034004500360043004100460046003800420035004500410039004600460030004600460032003100410046004500330046004300380036004200460038004600460041003200350037004500410046004600340046003600370041004500310030004400320046003600310046003600460033004100410036003000340030004300420044004200320030003200300030003100330034004200390030004500460034003500350042003100380044004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000738003300320000054A00450000074A0045005900000D4A006500720073006500790000865B360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003500300031003000430032004500440038003900390036004200310046003000300030003000300031003400430034003900340034003400310035003400330038003800440041003500390034003300310034004200430033003400300031003400430037003200460031003900300045003300410035003500430039003900320038004300350044004200420042003500350033003200370030003700410037004100450035004400310034004100440037003600310030004200340045003000420037004300380039003700450038004400410034004600360030003300450034003000320036003800370030003600420037003000380035003200330034003500330032003100300045003300410030003400410035003100300036004400410031003200310046003900330039003100430034004400390035004100360036003900440035003100460031004300310043004500460042004400460046003900460037003700430037004200420031003300340038003000390039003600300035004300330032003100360034003100390043003500410034003200340043003900380034003200340039003900300030003600390037003100340039003900360032003900300046004300420030003200320039003100310030003400300031004200340044004200320030003000340042003400350041004500300046004200360042003900410046003900410037004300330046003400450039003800340045003900460038003800380046003900430037004300440042004100410039004500460032004200410044003100300043004100320042003000380031003000370039004400320037003100410030003500360030003300350044003800370037004500310046004100320032003800340046003200440034003600320033004400450032004600460036003700380042003900410043003900320044004300440044004100450030004300410033003400380044003500450041004200410044003200330041003400450039004500350041003100390030003300430043003600360036003000440042003500300041003900380030003600310043003000360030003000300036003900340041003700320033004600320036003300410044004500450037004600390042004300340041004600360046003000300038003600390041004100370032003800360041003100360041003600440035004200360039004200460046003100440033003700380034003900310038003400320041003700410033003800450044003600360038003800300045003700460031003700410037004400430030004400420044003500320031003700380039004500380041003000390041003100360041004300320042003000440030004100320044003800370038003800390045004200340032004200440030004500390041003400360044003600330044003200330033004400450044003800320041003600410039003900380045004200390036003400410043004200380044003000310045003200310038003900410034004400440035004100310031003000360041003100460043003700350042003600350033004200370037003400430041004600410037004400360042004600330041003200450042003800450033003900430033004600440044004600310038003600410039003500380045003300350037003500330035003100330032004300370031004200320039003900440045003300310044003500450044004500350036003000410035004600390045003900340036003000390041003500420046004500380041003100440035003800460045003100350041003600300039003500320046003200300035003500410043004100440042004500320043003500350033003100430044004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003000300000054A004F0000074A004F005200000D4A006F007200640061006E00008403360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200330030004600300031003500360034003700320038003000300030003000300030004200360034003900340034003400310035003400320038003900310036003300390038004300350032004200460033004400460038003400380035004500420033004600300033003000330030003300350035003300310045003300330039003400310042003500460046003000430030004300300043003000430036003700460045003700430036003300390038004600350046004400310044004300330039003900330046004400460031003800410038003000310045003000300036004300330030003000420035003200430043003000330030003100380030003600310045003000410037003200330033003100430035003500390032003600340037003800320038004300380034004400420039004300310034004300450043004500430030004300460046003700450046004500340034003500310043003000360033003600330043003600320030003500390039003600430042004300300036003300360033003400360039003200430031003400430033003000300036003800420041003800330030003800330046003200420041003700390030004300300043003400430034004300320038003000410042004500310043003300390043003500370030004400420032004600390036004500310034003500450037003100340030004100350043004300430043003500430039004600300045004600440042003700370041004100420038003100380036003700310038003500460031003600360037003600370035003800410031003200370043003800370030003500390039004300390044003200340030003300360031003800300030003500350044004500300038004300330034003200420043003300320043003600330035004500380036003300330044003200410043003000430039003000320034004600390038003300330032003800330035003100300044004100340031004300420030003500300044004200340030003100380030003000300030004300330042004100350034003700450038004500360032003400380030003300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000733003900380000054B005A0000074B0041005A0000154B0061007A0061006B0068007300740061006E0000861F360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300046003200450031003900340032003600410033003200360044003000300030003000300031003300440034003900340034003400310035003400320038003900310041004400390032004200440034004500430032003600300031003400380036003900460045004600410033003500380038004100320032003600380038004300300041004600450033003000310038003100320038003300420041004100320038003300390042004100330038003900410033003000450041004300350045003800340038003300370037004500320034003500410038003300370036003000440030004300380036003000450032004300340032003200320031003300380039003000310038003100330038004400410035003400340032003900380035004400320046003600370033003600330032004100380035003800310042003300420045004300460037003900460032003200360045003700300038004500330046004500350031003600440034003800380042004100360042004600430036003200430034003700310045003600380032004400430045003100330044003500390039003400410030003100420034003500460039003500430034003500320030004200440031003100300033004500370039003600390031003200390037003200450034004400320046003800420034003700360043004200320037003800340039004600340043003800340038003300420031003200330041004400360045004200350043003100410030004600300038003100310037003000440033003300440041003100330032004400430039004600320043004200360035003400390032003700360031003000440045003500380041003000440030003800340034004600320039004600450034004500440039003700380030003200410030004500360045003600410039003700410042004200460038003400380030003200320035004300370038004100360035003100320039003700390034004500380038003700380036004400420044004100300046003600350045003300390039004200410039003700450033003200420034003800460033003100440041003400370039004600330033003700420039003400380035003400430039003400410032004200420032004200310037003400390038004500330034004600450039004100310041003100450039004100350032003800430034003300450036003900460038003300390034004500430044003600420043004500440041003500370042003400380032003100350046003600420034003000460033004100370045004600340035004400360034003400360044004100320043003400420032003700330034004500430039003200450030004200360037004600430038004200410045003800420030003100410042003300370030003500340039004300320044003600310037003200330037003200380036003100310033003500450036003600320034004200360038003200370039003300410038003100330031003100360037003800310044004500450035003000370031003800420033003800450038003100430045003900300044003600430039003500450030004300350032004400340034003400410030003100420034004200340045004300390031003100310044003100350046003000310035003000310039003100340041003900300043003800410031003300420039003900310042003800330036004300430036003300460041003800420035003300320046003400430033004200460046004200410041003200360043004100380038003600460035003900430043003800300030003000300030003000300030003400390034003500340045003400\
-340041004500340032003600300038003200000734003000340000054B00450000074B0045004E00000B4B0065006E00790061000085A33600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000390032003800300046004500340036003900350043003000380030003000300030003000310031004500340039003400340034003100350034003300380038004400420035003900340042004600340041004300330035003000310034004300360037004600360039004200320044003400330046003000350044003300320039003100390038003200340042003300300038003500330038003100340041003400440030003400390043003100330045003400300045003100380032003800460045003000310033003000380035003900310043003500440046004100330030003400320034003700430031003500300039004300300033003200350038003300380031003000450044003900330041004400340041003900410031004300340036003000310037003100330035004400390043004200340044004300310042003200390033003900440033004500350046003000370044004200460037003300420038003700300033004500300044004600380041003200380031003600410033003500300031004100440030003500460036003300430041004600350036004500460044004600360030003200310030003400420036003600350033003100370031003100430032003600380045003800330036004400350039003000380032003100390034003600300032004400300038003000320045003900310046003500370035003500380035003900350041003600350043003600440042003700300030004200430042003400440042004200430042003900320045004100440039003600370043003200370045003300360036003300450035003700340045003800460041003300300038003800360034003300300030003300410042003300310039003900370034003500410031004600340031003800350039003100380034004100300035003300390033003000300035004300450031003600300042003000300041003600370039004300450034003900310038004400320035003100380031003500350039003300440037003400300030003600310043004600390033004500300030004400390037003200430039003100410046003600300037003700370030003100310033003200380039003200300034003700450044004500350044003900350030003900330030004300430044003100340038003200410033003000380031003700310031003400370031004400380045004200300031003300300044004500360043003300380031004400300043004400340045003000450037003300420033003900420038004600430032004300330039003700380033004300380036004400350030003700300030004500460045003200390041003200370037003100380031003600450045003800350032003900460043003600410044004600430041003400460042004600340034003900430041003500370031004500350032003100420038003000370042003700370038003500410046003900460031003300310033004500460030003700410036004500320045004600310039004500440045004100460044003200410037003500350036004500430035003200440034003400380039003800430036003400320045003800310042004300420033003900340039003300300043003700460039003600430035003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000732003900360000054B00490000074B004900520000114B00690072006900620061007400690000893F3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030003400310033003600370035004400380032004600360030003000300030003000320030003500340039003400340034003100350034003200380039003100410035003900320043004400340045003100330030003100310034003400360043004600420034003400330041003700330033003500330038003700460045004400320044003200320041003200390031003400440041003500380035003400330030003900350031003000350037003200360032003600430036003800350030004200350037004200410044003200390035003300460037004200390046004300320043003400300037003200310033004500380031003800460041003000310032004100440031003600310031004200340042003500380033003000440034003200410031003500300044004100330032004400300034004500360037003500410033004100320045003800380032004500300042004300360042003300420044004600370033004200460039003600450037003200380035003400460038003100420034004300330031003000380034003100390030004200440031004500350041003200410046003800420042003800320037004600410042003800320037003000370044003800310035003000310034003700460037003000430038004200320031003000450039004400300032003800330042003200300034004600370034004300300032003400460038004500370030004200410032004500300045003900370042004300330038004200410037003400350036003000430045003100410043004300360037004600370030003200320037004400380034003100330030003100310041004500450046003300410043003900460044004400310038004400350043003100460037004200300038004400370041004400330030003600300037004400410045004600330044004200340035004600410042003300380041003600460030003700460036003200360039004300450032003600370034004400460034003200460031003900440033003600460035003800450035003900440038004400460034003500450043003700370044004500450031004500320044003000450033003000370037003400460032003200420046003400390042003800370032003800460033004200330034003800430039003400420039003800450042003200350043004300460035003100320035003200370032003000320046004600420033003100340036004100410032003800450044003800320042003900430031004500330030003300410034004600450034003700390039003800350036003500460043003700410041003600430032003200360037004400330043003800440039003300340035003600450035003100370039004400430032003100410036003200360030003100340032003500330037003800370046003000460034004400350031004200360037003300310031004200320037004100340043003900450034003400420042004200390034004200370039004200350043003900440038004300330030003300370033004400380036004200450044004400450032003400330037003100380037004600300041003800430043004500320045003500330038003000300043004200440046004100410044003400300046003400440031003600330032004500330041003400310032003700450035003600430041003700420041004300460045004400430036003700330041003100310032003000390037003800450037003100360030003900380032004300410046003500370031003100440045003700450044004400370032004400360032004100370035004600360035004200310044003600450036003400430036004400310035003400300046004200350034003600390042003200460031004200460042004100340045003200370045004100360045003200370045003200430046004200380034004300460033004600360041003000300035004300390046003800390032003200370039004400430036004300350034003500420045003800440035003100360044003700410036003200320034003400380033003200410034003600440042004500360036003300370031003800370038003800350046003600310033003600310039003400360042003800460044003600320043003900360039003900420033004400370043003800410038003700450033003800450043004400350038003400300041003100350041003300460032003600410038003700390036003900310044003500420038003400330034003900390041003300380045003800350043004200450035003000320036003000330030003100380037003000340031003900310033003800330030003400430046004300330045003800390038003600440031003200350031004500460036004200310044003700450043004600430037003500410038004600320030003800450032004400440038003500340039003700320039003900310038004200320036003700380034004400320035003600300033003700440042004200430039004100330033004200350037003900380038003800360041003100430031003800320036004600390045003200320045003400310043004400430042004600430037003400310034003800300034003200420039003400360043003300450038003900320043004200430034003000380036003900330032003900420033003500380033004400350038004400330044003500320038003900300030004500390038004200340031003400430042004200340037004200450042003800380042004300300041004400390037004500370046004100450033003700460045003500330037003300380046003300430043004100340038003500360038004200380031004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003000380000054B0050000007500052004B00004D4B006F007200650061002C002000440065006D006F006300720061007400690063002000500065006F0070006C006500270073002000520065007000750062006C006900630020006F00660001842B36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320033003000430039003800350046003100360039003200300030003000300030003000430030003400390034003400340031003500340032003800390031003600330036003400460036003500440046003400390046003800310030003600380030003400350035004400390041004600370033003100320044003000430036003600370043003600460045004600460036003800380032003600300036004200460039003500350035004300350030003800300041003600360031003500360035003000360041004500390036003700410038003600460046004500460044004500330033004600430046004600460030003800310045003100350042003500330033004200430033004600460031004600330046003400380033003200390038003000390039004200320030003600370036004400320035003000330043003300420046003700460030004300330046003600360043004500360031003600300044003600440037003600350045003000340038003800380032003500440039004300350031003800300036003300330046003200460031003300310042003000410038003200380033003100370043003600420036004500360037004600380037003300460031003300320043003300430046003600350041004200310038003500380041004300430043003400390033003600390038003000350035004400450030004600460041003700340046003000430046004600370046004600450036003400360030003500360039003000360037003600300033003100440034003600370036003000440036003500300036003700460038003700330046004500320032004500350032004500360036003600300036003000360030004600380039003200390036004300330043003000310041004500380043003700430030003900390039003700430044004300300046003000460044003200420043003300380046004500390042003300340039003300360039003800360036004100390038003200320035004300300042003200460038003000420034004400300043003300450037003200460035004100350032003600320044003000430030003600300030003200360037004600330039003800450042003200460041003700310032004600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003100300000054B00520000074B004F00520000254B006F007200650061002C002000520065007000750062006C006900630020006F0066000089F33600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000420032004600300041004400380043003600450041003200450030003000300030003000320033003200340039003400340034003100350034003300380038004400420035003900320044004600340042003500330036003100310043004300360033004600360037003300460034004500440033003700390031004300440036004100390039003100330030003200310037003700390038003200350036004100310038004300320035003000450041003600450032003000310031003000390031003600370038003300440036004100440030003800350037003800330031003300360039003000460045003800320038004100410045004200440033004200390030004200300031004200320046003100370041003100440045004500430034004500350034003500300038003800370033003800320034004300430038003100310034003200340045003700330042004200310039003600370036004200310038004400410042003700300042004300310039004100360045003200330038003800310045003700380036004600390045004600370046004200370043004500300046004400420045003800460032003200320032004300320037004600390030004100420039003100420039004200340042003400460034004400370038003000360036004200330039004500460033004300360046003200460032003300320042003900350043003800450046003500460035003700350045003200460031003300380045003100370030004200380036003100330030003900460043004600330033003300460033004600340046004200350035004100340035003500350035003500360032004200310035003800370033004200300045003300330038003900380041003600380039003800380045003000460035003700410030003900300034003000320041003700310037003200320044003400330045003700440030003600310031003700430033003700300044003100340042003700390042003400300032003000430030004300450043004500300045003400370034003700340037004100430041004400410044003100310038004400340036004400310033003400450044003800430035003500420037003800410036004300330036003400420037003700370037003300370038003600360031003300300033003900330039003800390041004500450042003500340035003600330037004400380038004100440045003600370046004200450045003400330042003600450046003400440042003000330035003100430041003300420032004200410038003100410045004500420043004300430045004300450044003200440046004400460034004600420031003500380032003400390042004300440044003600330046003400390043004500430039004200320032004300340039004100350035003200320032003200320035003200460039004200410032004600370036004300460031004400370039004400460031003500410039003300420035003600360038003500380037004500310043003100430038004100380038003400380032004100390035003100320043004200420032004300450036003300340034003600390044003500380041003900350044003700360046004500380037003800460031004600320046003700410041004400430032004100390036003300460043003800440030004600370034003300360045003300440039004600320036003900380037004300440036003200430037004100460031004600330046004500440034004400420044004400310041004500330039004500330036004600340045003300310041004600420041004100390046003400340045004600300033004600360035003500330046004600410037003100380044004400430045004500300031004300310031003600440039003900360045003000410045004100310033004500410036003300450033004300360032004200300046003200300044004300420031004600430034003700310041004200300030003900340033004300360044003600430032003800390037004200380044004400320032003700420041003100430037004200360036004400390033003400450041003700300031003700380046003200330038004300410034003900370042003300420032004200390044004100310033003300320038003800300045003600460033003300300046004500370034003000320038003000370034003300410038004400360044004400420041004400430031003900390034004300300036004400330033003400370031004200390035004300320043003200430032004300370030004600440034004100300037004500460035004500340044004400310031003300450043003300430039004200450039003000420035004400330045004600350030003600430032003500380039003600380035004300460045003700430033003300340034004400330032003900390034004300310044004200380045004500460033003100430043003700320031003100450038004600330033003300410033004100430041004500360045003600320036003700330037003300370033004500380042004100430045004300390034004600450031004500330039003700320032003800410041003200330030003700300045003300320041003800410030003200410035003500320038003900390039003900390031003900340036003400360034003600410038003500360041004200320034003900330043003900450036003300440044003600330034003800440034003400320032003400310041003100350030003200300031003200380039003500300032004500390037003000310037003000420042003100340038003600430032004400370031003800450043003300440038003500300032003900340043004200360035003000430043003300360030003600460036004600380046004200310042003100420031003300410032003800370030004200310043003700320032003200320038004200380042003800420038004400450043003800360036004100330036004400420042003200430037004600460041003200350046004500310033003200340046004500420031003200430046004600370031003800300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003100340000054B00570000074B0057005400000D4B00750077006100690074000083873600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003300300039004500380033003500450032003100440030003000300030003000300039003700340039003400340034003100350034003200380039003100360033003600340033003000440036004600380043004600310030004500390043004100430030004300300043004200430035003400300034004400430030004300380043003000430030004600300039004600380031003900370038004200380031003200310044003200390035003800310043003100350038003800330043004100300036004300330038003000420031003000360030003300420035003500430038004600360041003300300030003300300033003000330033004200320046004300460036004600390037004100410042004300440042003400410037003600310036003100460032003900330031003900380030003500350044004500300045003700450037003200460041004300420041003100460046004600360039004200350035004200460039003500320036003200320045003000330031003300340035004200410030003700430032003600300038004300330030004500360036003300360036004600440044004400410032004100300037003500440042003900390035004600390034004100320033003000340036003300310044003800390035003800440039003700410031003900430034004200380043003400310038003800390031003900390031003200330033003100390031003800310038004100300039003100320037004300340043003800430043003500300043004500320035004300360045003000430041004300360034004200420031003800310037003000380033004100390045003900340041003600340030003000300030003100340033003600310042003400360035003500380043004600340030003100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003100370000054B00470000074B0047005A0000154B0079007200670079007A007300740061006E000085273600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003100300030004400330036003400300036003800390043003100380030003000300030003000300046004600340039003400340034003100350034003300380038004400420035003900330033004400340042003000330034003100310030003800360039004600440039004200390042004400320038003100410043003400320038003100370034003100420030003300300038003500380044003800320044003800440041004600380036003700460044003200390042003600320032003600380041004200440038003400380043003200380039003200390031003400430031004400430044004500430045003500380041003400420031003500410038003500390038003200390045003700450033004500310036003500440045003100390039003900450044003900450033003900360042003800380042003000300045003200380034003000460035004100370032004500370035004100340030003600380039003800450037004400300041003600340035003900310044003100430046003600330033004400350034003500340032004300360033004400320032003800320042004600300036004400320035004400380044003400440042003500330043003500370032004300380045003300320046003100360041003800310033003600330044004200320045003900330030003300300036003400360034004300340043004200300035004200410035003700420036004100360030004300390045003600340043003200320038004300330044003800420030004100370038003800330044004400370043003800430031003300320032003700380037003500440031003100350043003500430038003500440034003800450042003500380041004500450036003400410041004400330030003400300045003000380045003400350036003900310036003100390031003500420035003600450043003100460031003000390041003400430037004600310046004400310045003300380034003400450031003200460044003400330034004400360038003300320044004500390035003000440032004300320041004600360039003700310041003900420036003700360034003600380037004300350044003600460038003300380030003100450032003500360043004100450044003800360033004400390042004300320032003300380042004600300039003700450033003300320030003900450037003700450038003400390030003200310043003900420035003500460034004200370031003100390042004100460030003000300036004200300041003900420032003600380033003700300038003500420038004500320037004300310033004200460045004500370038004500390037004400320030003500370042004600460031004400460036003300330044003600460036004400320044004600350046003900390035004400360046004600380036004100330030004300410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073400310038000005\
-4C00410000074C0041004F0000414C0061006F002000500065006F0070006C006500270073002000440065006D006F006300720061007400690063002000520065007000750062006C00690063000183D3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200330030003700300046003800440043004600310041003000300030003000300030004100410034003900340034003400310035003400330038003800440036003300330043003200370041003800460036003900460038003100300036003800300038003900310036003800360044003200440034003600300039003600390033003600430034003200330034003300310039003800390031003400310032003300380033003600300031003800380042003000390046003300330032004600380033003900450041003300310033003000330030003300300033003000360043004400410037004600380039004500310044003500440042004300460030003400300044003600360032003100410034003400300035003700340044003900410036003100440046003800320030003200300036003100310034003100310045003000360030003600300036003000360038003600460036004600370035004600310038003900430031003200320036003300300035004300420045004600350031003400410046003300450038003200360031004400430035003900310043003000380033003700390034003800310038003100380031003400310034003400390030003800370041003100420033003300380039003000410030003800420030003900310041004100430041003300320036003400350039003400310038004300390030003600350046004200390046003500380043003200380033003100390032003000440032004500450046003500440043004600460030004500360046004400310037003300380046004600430044004600420032004600300043004500350042004400450042003000390031004100340043004200330035003400430031003300380035004400440043003800320032003600350039003900410043003500460043004400370033004200350041003900380033004200300034004300420030004100300030003300300041003800330030004300330039003900380038003900320041003600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003200380000054C00560000074C0056004100000D4C00610074007600690061000081F736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320033003000330030003800450030003000420030003300300030003000300030003000330033003400390034003400340031003500340032003800390031003600330036004300360037004400300046004600430046003400300030003300430030003400340030004200340033003800370041003600430031003800430045003700360037004100450041003100340039003100380033003300460045004600460046004600390046003200360030003600420033003500430039003800420035003900360031003600450036003300320033003000380045003200360033003700390041003100420030004300300030003600300042004100300043004100350042003100410034003800350032003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003200320000054C00420000074C0042004E00000F4C006500620061006E006F006E000085AF3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003300300030003900310045003900350041004200390030003000300030003000310032003100340039003400340034003100350034003300380038004400450044004400340034003100320042003000340037003100310038004300370046003100450046003700460045004400420032004400380037003600320044003900360038004200390034003000330033003900320038003400390033003600420039003200380036004600430031003500440038004500430041003400350045004500350043004400430031004300390043003100430042004300300032003100370042003900330038003200380032003500340039003300390036004300410032003700300036003000380039003800430041003500340043004200420037003600390042003300350039004200390039004400310046004500310046003200370044003700390039003800390046003600450036003300390046004600460041004600340046003400460034003300430038004600370032004100370038003700380034003000360035003400410034003100310036003800340033004500310036003800360034003700430032004100350034004400300035003100340032003500430035003400360038003500380038003900340038004100380031003900430046003100450041004400440032003100440034004600420031003300320033004100340037003500460037004200320036003300300031004600300044003800330036004500330046003100450037003200350035003700390041003000450034003500380032003400360033003600440041004300340046003200430041003000460030004500460033004500370030004300360038003600360044004200320037003500420042003800370046003900350039004100310042003300320035004300390043003100450042003100390042003900450032003400440036003000330033004200450042003000310036004300440043004500440033003300310039003600350037003400330038004200430036004600320036004300460032003500360038003100460033003500320046004500360046004200300035003300460037003300300045004300330037003900450036004200320036003100440043004400300039004300410045004500300037004600440038003900310045003200450044004500450046003200390042004200440035004400460043003300380036003600440033003200440036003300350043003800340036003700360039003100410032003600330033003100390032003100450036003000370033003700320038003900360043003600360039003800420042004500410038004200320046003100430042003800310035003800320042003000350046004300380037003100360032003500450037003200360041003500450042003300330042004200330034003600360046003600420044004100310037003000350035003000350046004300420046003300420045004200300041003300380034003100380038004100320036003800310042004100300032003500420036003900350032003300410046003800410045004400340046004600410046004600380041003900360046003100330032003400360045003000420036004300320030004600450036003600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003200360000054C00530000074C0053004F00000F4C00650073006F00740068006F000084233600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310035003000320031004600300045003800300035004500420034003100430030003000300030003000300042004500340039003400340034003100350034003300380038004400450044003900330032003100300045004300320034003000310030003400350044004600390032003800360034003200300035003100320038003100450041003000350037003000310035003100350037003500350043003000360035003300440039003900300044004500300030003500310038004200340036003700320039003200320036003500350041004300410042004300340036003100370030003000380032003800410031004200420031004400360045004300300041004500410039003200300036003100460034003900460039003700390046003300370031003900340035003700430031003400340036003900380043003900310038004400300044004600300034003000370042004200450044004400410032004200440038003300440045004500410030003100340046003300360038004500310039003500350037003200320045003200370035004200430041004100410041004500380046004200390045004200320032004300420044004300300038003100350037003000410045003800420041003000450043004600300045003800300036003700360033003600420032004400360039003900410036003200380043004100310036003900310041004300320033003000370034003900330043003500330031004400360035004100320039003800410034003200300030003000310032003400430046003700330033003100430036004200380044003600430034004100390034003200360042003400440035004400440037003600340035003900430036003300300030004300420034003600440038004200440036003900410032003400340039004200450041004200440038003900460034004600340045003100350045004600450037003800420044004200450035003000410031003300430035003300320035004500330031003800440036003600340045003100330038004100430033004500360046004600440032004500330038003200330046004200320044003100380039004400350037003000360031003600310038003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003300300000054C00520000074C0042005200000F4C006900620065007200690061000085433600300030003000300030003000300043003000380030003600300030003000300030003000360036004600390034004400430036003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000300030003000300036004300460033003900370031003800390030003000300030003000310030003600340039003400340034003100350034003300380038004400360033003600340033003000410045004600460043004600380030003000360045003600330043004400420046004200430033004500380043003700320042003000450037003400370031003500320030003000300042003800430039003100310036003600380043004300330030003600420046004400350039003000360030003600300036003000360030003600450035003200350035003300330038004600340038004300310034004300390033003600390034003900310039003500450035003300370030004200300033003000330030003300340033003600310042003400320035003400330036004600380031003100420038003300420037003800440031004100340033003700300046003900340041003800360036003700380044003300440030004300370037003900380042004600390032004500460035004300340036003400360036003600310036003000360030003600300036003800360035004400430037004500460033003200390043003700360037004200430036003700300045003800460043003400330038003600330046003700460046004500330031003800380036003400340034003300320034003800320039003000410039003000360044003200450031003300330037004600370032003700340036003600430036003100420043003400410045003900330033003800330030003900460037003100460046003200310044004300430043003200460043003800440041003500330031004300350046003600310033003300420032003700330042003100460034004300460030004600460042004600370046003000430036004100310046004500450033003200370030003300310039003100360046003300300033003300320037004300370034004600390036003400430038003600410037003000430046004600330045004600430034003400390035003600310032003200440042003400430033003800360030004600390037004100460036003000320043004200460046003300460037004600320039003300370030003900300039003300300042003200330030004200330033003300370045003300390037004400450031004600440042004600410046003500460043003900380046003200390032004300380030003800390039004200460042003000330045003300300044004100370041003000420046003000430046004600460046003500330043003100460033003400380038003000390031004600310031004600450033004400460032004600350046003700460046004400460046004600440038003700390035004100410045003600420032004200320046004300360036003300430032003700410038003800360039003100440043004100380030003100300030003300410039004100350030004100420031003500340036003300460031004200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003300340000054C00590000074C0042005900002D4C0069006200790061006E002000410072006100620020004A0061006D00610068006900720069007900610000819B3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000360031004600320037003400410038003700310033004600420030003000300030003000300031004300340039003400340034003100350034003200380039003100360033003600340039003800360041004600300039004600380031003000360038003000380039003100360038003600380045003100410033004300360041004600300041003800430031003000340030003000300030004500390031003400300031004400410031003600460030004100320043004500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003300380000054C00490000074C0049004500001B4C006900650063006800740065006E0073007400650069006E000083633600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310034003100340032003800310036004100330032003200330034004400390030003000300030003000300038004500340039003400340034003100350034003300380038004400360033003600340044003000410045004600460043004600340030003000330043003000380034003200450032003000430045004600310039003800380031003800440045003900300037004300350030003600420033004300300031003800350043003400430039004600310038004300320042003400370037003300300042004300370038004600440039003300340031003500380038003000390035004500310046003900370042003400450038003600370044003200460046004400320039003300370035003800390034004500330032003500380033004200360046003200300046003000360034003500360039003000360030003600300031004500450033004600300043003400460039004500420044003600330033003800460043004500410033003700430033004500460046004600410043003600340031003900300043003000460038004100450037003300460045003400310039003700450046004600360034003600370046003800460046004600330031004600430033004100460031004600460046003100380035003800420038003400340043003800330036003900340038003100380031003800310038003100390031003500360039003100430037003900320046003000450035003300410032004400430043003600350036003000330043003200370041003800340036003900460045003400330036003600410046003000440030003300310031003800300030003800420041003500320039003900460033004500430031003600370041003600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003400300000054C00540000074C005400550000134C00690074006800750061006E006900610000820B360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003100420030003300310042004600320043004200340041003000300030003000300030003300380034003900340034003400310035003400330038003800440036003300370043004200310038004300460037003300460030003300300044003000300031003300320044003000430031004400390041003000360042003300450034003900440035003500410034003800440043003100330042003900450030004200440032004300340045003000320031003100380043003600320036003600460046004600440030004300360045003000430043003900420033004600360039003600320046003000440030003000420036003300390041003100390030004300300030004200380033004600300041003200300043003000360031004600340045004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003400320000054C00550000074C005500580000154C007500780065006D0062006F00750072006700008217360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003500300030003100320030003000440031004300430033003300330038003000300030003000300030003300420034003900340034003400310035003400330038003800440036003300370043004100460041004400460042003900460038003100300036003800300038003900310036003800360030004500340044003800330031003900370046003200450035003900370041003800430032003600300036004600460046004600460046003700460033003400460032003100380031003800310038003100380031003800350038004500450037004300460045003700330039004300310036003000360033003300330032003200430042004500330042003100410043003600420034003300350031003800300030003900410043003600300046003700340039003100410043004200460039003100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003400360000054D004F0000074D0041004300000B4D006100630061006F00008637360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003500300031003000410031003800340031003700390035003900300030003000300030003000300031003400330034003900340034003400310035003400330038003800440044004400390034003300440034004200340032003600310031003400430037003700460038004600460037004400410036003000330037003200320038004200300032004400310038004200330038004400430041003600380036004300300031003700300038004400420030004200330037003800370041003600300038004600430030004300320045003700440038003400390036004400360039003600420045003800370042003900340034003600340038004200440030004500380045003600430042004100340038003400410032004600370039003600320046003200390035003700370044004100450030004400430044003300440041003100450034004400320037004600330044003900430031004600460046004600330033004600380037003200330042003800420045003500410042003000300036004600390044003600300031003500440030004100360043004500380031003200340033003900370037004600300037003800450030003700460042003100380042004100320034003600420042003600430039003900410036004400300043003500440031003200300046004600360037004600300035004500420041004100410032003100300035003000310042003000360037003000330044003800440032003700460042003000380030003000440037003700330041003800300044003000330030003800300031003000420043003500370036003900340038004500330033004100310032004500360033004100390039003100330032003200440030004100420039003300430038003500350043003900450039003400360039003300310039003600310041003900390035003000370037003700350043003700410035003900450034003900320032003100320043003600450046004400330038003800300035004600370030003100460030004600420033003400310032003900310034003300340041004500440031003600330030003500390030004400370043003700390037004300340032004600450046003400390043004400450045003700310030003400440037004300300046003700370037003300370036004300310044004500450036003100360042003700320046003000460044004300390035003100460037004600450043003500350034003600330031003900330039003200420039003200370034003900340036003600320042003400300036003000450041004400380031003400330033003200310032003600330045004500340039003600360035003200370044003200310034004100430037004500350036003600380033004600420044003700360037003800430038004400300044003500410046004400370037003000300043003200440042003300420038004300350043003900370037003200420033004200310033004100420038003600450037003700420030003900430030003300370036003000330030003600330045003200310030003000370038003100420037004300360030003800460034003700440034004500440038004500310032004100430038004300360032003300320039004200350032004100430035003600390030004400450038003200370034004400340032003200310044004200350039003000440045003800320036003200420035004300320036003400330036003500350038003200430035004600460046004400310035004300420045004100300042004400430039003900370032003300420044004300450038003700430043004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000738003000370000054D004B0000074D004B00440000554D0061006300650064006F006E00690061002C002000740068006500200066006F0072006D006500720020005900750067006F0073006C00610076002000520065007000750062006C006900630020006F0066000086C336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030\
-00300030003000370037003400340039003400440034003500300037004400370030003900310031003000410032004400310045004600310045003800330036004500360030003000300030003000310036003600340039003400340034003100350034003200380039003100420035003900330042004600340042003400320035003100310034004300370033004600340046003900450045003000300046003100430043003400320034004300380031004100310032003800370032003200440041003500410037003200380042004600450038003500360041003000390031004300350041003500410039004100380034003900410039004200300044003900430035004100360041003000430035004100430041004400390041004400410035004500310042003500330034003100350036003100340033003500410035003000300041004600320030004300390031003700410046004100430041003900370041004600450031004600380045003300330044003300350039004100330043003700300033003800460037004400430037004200420045004400460046003300420044003900370037003300390035003600320031003200370042003300410030004400430031003200340039003800300035003700380044004400390033004500380033003400430035003000420034004200340046004200320037004500340038003800300044004400370036003900460046004200310036003600310045004500350038004100320041003100340031003300350030004200310045003400330038003300440032003800360046003800340046003100440031003200370039003800380045004300300030004300410030003000360038004200370041003500390039003500390031003800320032003500350041003400330036003900310031003700360043003800460043003700440030003400300045004400440035003100380031004100390034003300340035003100330045003900440038003600440030003100410042004300410035004300310044003200450035004200430037003500450046003500360041003900340036003600310033003600300042003100450033004600330043003600460030004200440045003700350043004200330042004200300031003900360033004300310032003400340034003500320035003000420046003800340038004600320042003000380036004600430039003700450046004400300032003400320045004200310030004400450038003400460037004200330035003100430032003300450042003100370045003800380044004400410045003800300035003500300033003600370045004300330034004200420030004400350036003400310046003100340031003700340035003700370032004600440030003400360043003100330038004300310042004300390033004400300031004600300043004500380030003300410045003500380045003800410035004400310039004100460044003800410041003400310046003300310036004300430034003700360039003100340043004200430038003700450046003900340030003800300042004500300035003000380041004300300038004400310033003800350033003600420041003700360045004100350037004600320039004600450042004300390036004600430042004200300043003500460034003500410038003600360046004500350031003300430042003100330037003100450032003600450045003400440034003500410037004500350039004500380041004400380035003100460037003200390046003600420042003500370037003500340043003400350033003500330042004400410043003000450033003200340038004300450037003600300046004500310043003100410037003900370038003400390030004400340038003000310046004300430042004500320033004400420033003700340041003900360039004500340030003500310033004300460030003900340037003500460046003100410034003700450044004500320046003400430035003400410043004600350038003000360039004500390032004500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003500300000054D00470000074D004400470000154D006100640061006700610073006300610072000082373600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003200330039004400370046003700450033004600300030003000300030003000300034003300340039003400340034003100350034003300380038004400360033004600430046004600460046004600460037004600300036003100430045003000350046003500330033003500430033004600460033004400330042003700300034003900450033003000350034004300360034004500390031004100330035003700380037003800310042004300430038003200340046003700320043004200460046004200370030004300350037004500350046003100320041003200310043004600450030003100350030004300410046003100380039003600320042003900310036003700460030004400300030004200450033003500310038003300360039003600460033003000300030004200350031003200300045003800330041004500310044003900370031003500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003500340000054D00570000074D0057004900000D4D0061006C0061007700690000842F3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000340032004100320039003000430038004100320038003200340030003000300030003000300043003100340039003400340034003100350034003300380038004400450044003900310033003100300045003000310034003100310038003800350042004600370046004300360045004500310030003200320041004200310033003400410041003200310037004400310042004200380030003900320039004200330038003800350033004200420038003000340041004400380034003000420037003000300031003200440035003100430042003800410045004300300043003500360041003100390032004400380044003900340034003300340031003200410046003700440046003900420046004600370046003200330046003000310035003200370032003600340034003400410038004100420030003000380030004500330044004400390031004100340042003900320037003800380030004600310043003800410033003000300038003200410042003400420035003600310037004600370037003000300033003400350035004300300045004500390036004200300037003200330031004400360031003300410030003700430043003600430038003400340030003800420030004200340033003100390031003600380032003200440031003200430036004400380043003000300036003300310033003600350031004600460042003100410037003700300042003200350044004100440041003700300034004300310044004400330037003200380033003100300030003100430030003900320033003200330039003100460041003800430042004200330046003900460036003700410037003900300042003200450036003400320035003100360034003500420031003700360033003100430033004200300043004100320032003300390042004400370038003100440036003500390038004400420031003300320044003600440042003200310042003600460036004100390044004600430032003500330045003900300045004600340044003700460046003000370037003200340042004400350039004600460033004600440045003800460038003200310046003100370031004400330036003300350037003200420037003700430036003800300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003500380000054D00590000074D005900530000114D0061006C006100790073006900610000859B360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003000450033003600370045003700390039003500430046003000300030003000300031003100430034003900340034003400310035003400320038003900310042003500390032004200460034004200300032003700310031004300380036003900460038004200330042004100440041004300330042003100320041004400340031004600420036003900380044004400390031003400340045004600450030003900340035003000440031003600440032004400300031003200340034003700420034004200340042003400330044003100440045003100340044003200440032003100300034003400300038003400450041004400380045003800440045003100390030004600440030003200410031004200430038003200340032004200430043004100380038004400330033003300380033003600420041003800370033003200380043003200460042003000450033004500440033004300420038003700390037003600370037003800460039003400380034004300360037003600430037004500460030003200410030004400320032003800310031003200420037004300360030003000350036003400330045003100330037003000460041003100380033003300460042003700460046003900300039004400330030003100390044003600440039003900430034003900420033003700350042003200430030003900300044004600360030003200340035003800450032004500430036004500390043004400370041004100300046004400420039003600300030003500300031003700390033004500320045003200390044004600390032003300440036003000450035003700370039003700430045004200320033003300450037003100430044004600360045004300330031003600350035003300360035003300440042004400430043004300440035003300300038003800300030004500340044003100330031003700460037003700360044003600370038003300310037004200300030004100380037004600320041003000430030003700430041003600380044004400320036004200350030004600340046004200330035004300440039003400460042003900310036003400420043004500430036004300390044003800320039003500330038003300340035003300360033003200340042004600380042004300370035003500360045003200350039004200320035003700350031004600340045003700320030004500460035003600310037003000300044003500440044003700450037003100330031003400300036004300410043003400300033003400350043003200340041003700340037004300380044004400380046003300360042003700370035003300300031003200300035004600370045003200460043003500430043003200360045003500440046004200430036004100460037004100350041003900370031004300420031003700350037003900450031003500410032004300380032003500430034003900450044004200350043003300380042003200430046003200340032003200320034003800350036004600450042004300320044003500330037004300300031003800300039003900350036003300320044003800420046003700350045003400300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003600320000054D00560000074D004400560000114D0061006C006400690076006500730000844F36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320032003300360034003700340038004600450036003100300030003000300030003000430039003400390034003400340031003500340033003800380044003600330042004300320034003600300046003200390046003800310030003600380030003800390031003600380036004400320044003400360030003100360036003400430045003100420032004500300036003800360033004200320032003800430036003400310039004100340046003200450036003300460038003300430038003300370031004300300036003900460039003200360031003600320041003800460030003600300034003100440037003400330031003400450038004400380046003100380037004300310045004200440036003300460045004300300036004500330030003300450035004400360044003100300043004400460046004600460045003600320035003800370038003600310031004200430033004200460046004600460046003100390033004500460046004600430038003600350037003300440035003100300036004200420032003800390039003300320045003800340042004100410033003200340034004100440036003900380030003800420033003100330031003300320033003200460043004600420038004600330042003400310031003100310035003700390045003600330032003500410030004300410037003900460035004500340037003100310043003300360037003200380044003100300036003900460037004300370032003800440043003100350034003500410031003300350035003200330032003300460045003400380032003600430041004500300033004400460037003400450033003300350043003700430037004500390042003200310043004600320032003900340038003100390046003800330039004200380031003900370039004400380042004100300038004200380039003800450042004300430045004100330034004200380039003500350043004100430030004300300043003000430030004300300038003800390043004100350036003900390036003800450034003500420045003300310033003000380038003300430041003200340045004400310033003100460034004300410030004100300030003000390039004500330044003000430039003800350045003600370031004200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003600360000054D004C0000074D004C00490000094D0061006C00690000820F36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320032003300340041003900340036003900460034004400300030003000300030003000330039003400390034003400340031003500340033003800380044003600330031003400440039003600410046003500390046003000310030003700330038003200340046003100460030003900380031004100430042003600460032004200360043003700320041004600390036004200330031004400370042003300310039003300300042004100420031004300300033003000330030003300300033003100330032004500300039003400410043003100410038004300310041003300300036003800460031004100330043003600410046003000380030003100410030004300300030003100370036004200300041003200320042003900420038003300330030004600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003700300000054D00540000074D004C005400000B4D0061006C007400610000835F36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350030003200310046003300310033003600330038003900390032003100300030003000300030003000380044003400390034003400340031003500340033003800380044003600330046004300460046004600460046004600370046003000360030003600300036003800360030004200420044003500330031003800370034003100320041003300310039003500380038003400300034003100390037003000380031003000420041003200330041003300380045003500440030003000310031003300300033003000330030003300430033004500370034003700380046003100390042004500390041004500410033003000420043003300430037003500380036003600380038004400300034003000440042004500440030003300460039003500450031004300430041004400310042003000430030004600310046004400430036003000420038004300440046003200380037004500310037003800350037003100460037003500300043003500360046003300460033003600310039003000370043004600410038003600340031003400320034004100380039003800310046004600450041003000330030003600360044003000460034004600410041003100380043004300300038003000420045003300340033003900330041003700330031003900380030003500300034003300300037003000430038003400410045003100350034003400430034004100310038004300330030004400320036003000360039003000310043003700390042003400300030004100330030003600380046003100410033004300310043003000430030003600300030003400460031004100320043003100330042003900450033003700430035003600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003800340000054D00480000074D0048004C0000214D00610072007300680061006C006C002000490073006C0061006E00640073000089BB360030003000300030003000300030004300300038003000360030003000300030003000300036003600460039003400440043003600300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310033003100390030003300380032003800460035003600350032003000300030003000300032003200340034003900340034003400310035003400330038003800440041004400440032004400440034004200350033003000310031004300430036004600310045004600370031003600370043004200420044003100440039003500420035003200440041003700320039003200410035003800320042004200320031003200320033003400460034003500440041003200340032003300450038004100320038004200320038004500380041004500420042003000340046004200300037004600410030003700370041003200330043003400420034004200410032003800380038004500450039004100340039004100380037003900310031003700350036003300390042003500440041003400360030003900330035004500330034004300330041003900380039003200440039004400370033003600450036004200460033003600340044004200330039003500440034003400450039003700410034003300410039004500370046003200420039004600380046003000380033004400460032003300350030004400420041003600460031003100460042003300430035003900450045003600440041004300310032003100430034004400350041003500320030004300300032003600390042003900390044003000370043003700320044004400360030004200390032004400340044003500420044004400330030004500450035003800320037004400410044004300410037003100350044003800360032004400340035003300450033003700360035003000450032004200340033003200330038003300320043004200430038003600340037003400340044004500300045003600420043003000430045004400390045003900370045004300380038003700370041003000380035003100330036003800380030004200310041003200460045003100420032004300300038003500300035004600350044004300340045003500450036004600440031003400330042004300430044004300370043004600300038004100390036003700420030003100330045003400360035003200370046003000340039004400350036003900350045004200300044004100460041003900340045003700360041003000430044003200460032003200450034004500360036003100440044004400370038004300320034003300370036003100370030003600450034003300430043004300390031003100320038004200340039003900410038003200430043003900360037003600420036003900300031003800320030003000370042004400430030004500430041003000410032003500450032004300390036003500350032003400410033004100300042004200340035004200350034003500410033004400410033004300380038004100310037003300350042003200380030004400450042003500300042003400390036004500430032004200320046004200330034003300390030003600300042003000300045003900380043003800410041003800410041003100410041003100340038003000410037004600450030003000330034004600300036004400450035003300360034004200370044003000450033003900460032003000460030003600450039004500410035004300460032004200360038003800310035003100410033004200350036003100380043003000330036003900320046003200340045003200390038004100410034004500320032004300390034004400450034003900360043004100300030004100340039003400330034003800460046004100430036004500390046003600340044004400300046004200360043003100320045003100460042003200410030004300370041003100440045003500320045003800390033003200390037004300340043003000390042003500390032003200330031003000350030003000410042003400310041003300450035004600300033003800310045004400350038004200360038003300300036003100390035004300460036003200410044003300390038003300430045004200430039003100340038003400430045003100360031004600460030003400350044004200450032003000380046003900460034004600360037003100440046003200450033003700390043004200350046003300320038004300340045003400350039003900380042003200450042003100310030003500370033003000360046004400300042003800370032003600380039003200320033004200410034004500340043004300350033004200390031004500340033004200390038003200410031004200390039003900410034004400370032004200370033003700340038004200370042004600310046004400460038004200310039003300320045004100450046004400370032004100460045003500430032003400350033003000410041004400380044003500330031004300430042004500460032003300440046004400440038003800420034004400370043003700430038003800320038003500350042003400460038003300370034003500440042003800430046004400300044004200460030003500460035003700460032003000420032004300450041004500300041003200360037003900410045003300310035003200310031004300350035003400370031003900450036003100430033003700460041004100370045003900420041004500440036003300370043003200360042003600320036003200430030004200310036003700350037003000420045003600450039003100350033003300350033004100340032004300360030003600320045003000350046003400370034003700420038003300430043003400350037004200440036003800440036003500430031003500370034004600380038003000430038003600420037003500330044004200310045003200360039003100310041004600420032003700360043003700350042004500300032004200420033004500430044003100340032003400430035003800320046003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003700340000054D00510000074D005400510000154D0061007200740069006E006900710075006500000734003700\
-380000054D00520000074D005200540000154D006100750072006900740061006E00690061000085C73600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000310031003100310043003600300034003000430031004400340030003000300030003000310032003700340039003400340034003100350034003300380038004400440035003900330042003100340045004300320035003000310038003800350042004600440042003500450035004100410042003200350030004100320039003300310037003100370030003400300030003600310033003200370031004300370044003000440035003700350036003400370044004600380031003100370037003000370030004400320039003900390044003500310035003600390046003000300033003700310032003100460034003000300036004100310034004200360044004100320036004400380031003700420035004400300038003200390034004100450044004500440045003800390039004600450045003400390045004600460043004200430039003900460037004200430034004500390044003300390035004100360034003400310036003900410043003000350041003000310031003000320041003100420038003500320038003500420034003100390036003300410030003000380035003600300041003600380043004100430042003900330030003800360041004100300042003400350035004400320038003600330037003000360031003800430039003600420035003600320041004500360043003000300043004500360042003200390044003700460042003300310041003000310039003700450031004500460032004200410037003000370045003700390038004300310033003900460044003500310036003900420033003900350032003300360033004400330046004100320045003700430037003400340043004100440041004500390041003900300030004300450033003600460033003400430034003900310045003300460031004100330043004300340034003700350042004200370043004500370042003700450041004100460030003100340031004400390039004500320030003900430044003900370031003600410043003300340044004300430037004300440041004400370037003400460036003800330041003300320041004400390045003700380039004300370041004600340031004200460033003900440031004600340042003000300046004400430036003900430037003100450041003500350030003700380046003100320039004600420036004300430031003800300034003500330042004100360045003800320035003800300033004200420036004500430032003200300039003800440032003900360031003900410033004300340032004600300034003100370039004500340032003600390042003800300039003400460042003800360042004200450033003300360043004200440042003100350043003600370039003700360038003900450039003300300033003600450043003300360033004400340031004600440035003100320032003600430044004200420037003000350032003200450039004400300034003800300039003700360043003800460034003900450036003900360041004400390038003300350036004600390032004200390034003600420030004200430038004300390042003500370035003500460046003000460046004300300044004600450042004100360030004100320046003200410041003500360039003900300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003800300000054D00550000074D005500530000134D006100750072006900740069007500730000826336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003000300044003300370033003700360046004100430038004500300030003000300030003000340045003400390034003400340031003500340033003800380044003600330042004300320033003200310046003700390046003800310030003600380030003800390031003600380036004400320044003400360030003900360045004400360043004300410045003700360038003600310033003000320033004100330035003600460042003600380031003800330033003300300033003000330030003300300033003000430045003500420036003400370033003800300032003600300036004600460037003900430044003300460031004100430036003000430030004300300043003000430030004300320043003700410045004200450044003600380039003200380045003500390044004500460043003600300033003300410032003800350043003100340033003200460038004300300031004200390036003600300045004300370039004500410032003500460046004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003700350000055900540000074D0059005400000F4D00610079006F00740074006500000734003800340000054D00580000074D0045005800000D4D0065007800690063006F0000844B3600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000420032004500330030003000370044003100300032004400440030003000300030003000300043003800340039003400340034003100350034003300380038004400360033004500340032004600300043004600410046004600460031004600420035003700300036003600430036003000360039003500320033003900340033003900340041003900320033003500360042003900340046004200420030004500330030004400430038004400340038004300370032004100430037004300300043003000430030004300300038003400350033003800360034003200330030003400430030004400370045004600460046004500310031004300330041003500300044004300440030004300310044003400390037003600300043004600420039003600430044004100300039004500430031003100460035004500440044003600310042003800370046004600370031003500430033004600370031004600340043003000430042004200350037004300440036003200460038004600460045004600310046003400310033004400320043003800340031003400330043003700460037003100390039004500310045003900390033003600370030004300360043003800430032004300300043003400430035004300340032003000430044004100360036003200450030004300430046003500460035004500360035004500300041003100440034004500300037004600460046003900390031003800350045003000410032003800330032003900430039003700360035003600360045003000450036004500360036003500310030004400330033003500360037004600380046004400460042003300370045003500320045003900360039003600440034003600360042003000460038003700370038004500380031004600460030003700320037004300330033004600300039003000330030003600350044003200350034003900300036003400390030003900310044003800360034004600330037003000450035003000360036003300300030003300300033003000330038003300420034004200340031003100380033004200340042003400310031003300310034004100450031003600300039003800410036003600330037003200300030003000300032003700390046003300380039003400460042003100310043004400420037003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350038003300000546004D000007460053004D00003F4D006900630072006F006E0065007300690061002C002000460065006400650072006100740065006400200053007400610074006500730020006F0066000083FB36003000300030003000300030003000430030003800300036003000300030003000300030003600360046003900340044004300360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030003400320045003000350035004100330045003800310043003300300030003000300030003000420034003400390034003400340031003500340033003800380044003600330032004300440044003700340046003700330046003000330030004400300030003100330042003100300041003400350042003800350039003100380038003400420039003500390041003900360042003300300031003300320033003000330034003300410043003800390033003800340033004200430038003900330038003000330031003300320033003700310030003600420033003100300041003300450038004400460037004600300036003800360037003900320037003500460033003200460043003600370038003400420030003200390033003600390038003800390038003100380031004500310031004600390034004600440046003100430037003100460039004300370032004200380046003400360032003000350042004300450043004300430030004300420039004600360044003200300043003600320033004300390038004500310032004100430036004300330043004100390030003600370032003700430033004300300043004200430045003400430042004100430031003000430030004300300043003000430038004300460046003700310030003700450038003700460034003600460043003600310043003200380038003200460042003900450031004600330032004500440039003400310043003100380030004100360039003100380046003900330038003500380031003900460038003300300035004100420031004300430039003000360043003300310035003300310033003200330030004100340039003800340039003300300032003400390039004400330032003000420039003200440033004300460033003900320038003100390031004500310033004600370035003900320031004200330032003700380046004200460035003300370042003100340041003100390031003800310038003100380031003800300030003700460036003600320038004300340035003700370044004100460034004500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003900380000054D00440000074D004400410000294D006F006C0064006F00760061002C002000520065007000750062006C006900630020006F0066000084533600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410032004100310045004200450041003900410030003200310030003000300030003000300043004100340039003400340034003100350034003200380039003100420035003900330042004400300045004300310036003000310038003800350039004600460041004600390035003000410035003100320045003900320030003300360030003300390033004400440036003400320037004200310037003200310039004100450034003300450032003200320035004300380032003400340041004300310035003100420032003300320045003400300034003400360032004600330039003300420034003400380041004200350035003300370041003000450039003200370033003800450042003700390043004600390033003300370032003700330039003000410034004300300032003400320033003400310041003000450045003900370035004500360036004600330044003600370032003600420030003000360036004100350038003900340035003800410038004600330041003500410034004300310031003700450042003300330037003000340032004500360036003800330043004400350043003800300038003800350037003200440039003600370042004200380042004400310036003900440039004200460030003100410046003100370033004100380044004400420039003300380033004100370036003000450036003900430044004600380030003200460031003600390043003000320043003100410041004100410045003200370042003200390030004300370037003800460037004400380037003600340034003400320045004200320045003300340032003000450035004300450035004300360035003900330037003300380036004100340035003700430046004600380031003900360038003900370043003500380041004500380041003700450046003700380038004200390044004300320030003900320031004500430044004600360035003500320036003200320030003700410045004400350033004400340041003900350031003300320032003100450039003000340045003400420037003100450035004300300030003000460039003600430045003800380045004400450045004100360046003000330037003900300031003000420039003800330036003400370035003100340045004400440039003700300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003900320000054D00430000074D0043004F00000D4D006F006E00610063006F000081CB3600300030003000300030003000310032003000380030003600300030003000300030003000350046003200350032004500320044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100360031003100320046003700450034003500370032003500320030003000300030003000300032003800340039003400340034003100350034003300380038004400360033003300430032003700410038004600360039004600380031003000360038003000380039003100360038003600380045003100410033004300360041003300300039004400300044003600360046004300460046004600460046004600360038003000360031003900330035003700380044003400360030003100430030003000300030003700410036004300300036003200330035004100320039004300300036004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003900360000054D004E0000074D004E00470000114D006F006E0067006F006C006900610000842B36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003000300044003300350044003900360031004300440041003200300030003000300030003000430030003400390034003400340031003500340032003800390031004100440044003100330044003000450030003100350031003100300043003000460031004600460044004200420037003600420036003500320039003100340031003200380044003500300032003800340035003200350036004100390044004300410032003100340034004100370035003300420038003000350036003700310030003000370037003000300039004200350043003400300039003400340042004200300035003900350031003000330036004200420042003300340046003200310045003200320033003300340046003600340044003300350031004600390039003500460033003100410033004200360039003500410041004500310034003700320043003800360031003300440036003900440045004500440037003500390036003700420044003600320033003000390046004600440035004100430035003700390032004400460032003600440046003900450038004600430031004600360046003800430044003700310032003900430034003200360041003100370043004500330035003500320034004100410033003800380036003200330046004200310030003700320042004300460036003000360032003300380032004400370044004500320035003000450033003000340039003600450030004100300039003700350030003100410034003700450038003800410045003000330037003800350046003200460034003900320031003900370036003100460038003900330039003200420038004300320038004500340041003000330032004100330036004600330030003100410042004300370041003800410031004300320044004300330032004100330030003500430033003700310041004500430046004300450045003000450034003700310042003900370037003800410037003000310039003000330044004200380033003500360044003000370034004500340032003000350045003100460033003000340037003200430038004500430037003200300033004100300034004500330033004600300045003900440041004400460038003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000734003900390000054D00450000074D004E00450000154D006F006E00740065006E006500670072006F0000852F360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003200410033003300460042003700360046004300350034003000300030003000300031003000310034003900340034003400310035003400320038003900310041004400440030004200310034004100430033003500300031003400430036004600310046004600420044003400390036003300450034003900410041003600320038004100320032003500410033003500300032004300370035003200380044003200450038003000420033003800380042003800320039003300330045003900310034004600450030004500450045003000330033003000380041004500420041003300390033003800450038004500340045003400350030003400310038004200340033004100430039004100440032004500360045003600330038004200380033003800450035003400360045004300310039004300460033003900440046003800460043003300350031003700370041003700370044003200390031004500430036004300430042003300460043003500450038003400350046004400430038004600390039003500430030004300450037003000410038003700430037003000390044004100420035003200340042004500300032003400300045004600410044004100320046003700440037003700450039004100390045003700320045003200340045003300380033003800350038003400370036004400320045004100310033004200380042003700380034003900380038003700340030004400430031003500310046004200460046004200300031004500330034003000390037003600350041003700430031003900340033003600360030004300360031003300460034003600300044003900410038003800450033004500410034004100350038003300430038003500390034004100300042003700360033004100450036003500380033004100420041003200380042003400450036003300430041003400460038004200420032003500320030003900460042003500350034003300360035003800350046003200370032003800340045004300420036003500380033003600320033003500360039003400360035004600360033004100320035004200460037003900410037003500310043003900440036003700380038003500300038004300380043004200390034003500340044004500340038003200350038003300450037003000390036003500320037003700360043003500410041003200460030003600420030004200370031003900330043003700450044003000330038003600430032003300310041003800410046003300320031003000420034004500420036003000360034004300360045003200310042003700430043004300450039004500360041003700300042004600360030003700460032004200320032003300430034003900460045003100340037003200410032004200440038003800360046003600360046003300340039004400430038003300410032004300330036003900300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003000300000054D00530000074D005300520000154D006F006E0074007300650072007200610074000087F736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100330030003000300044003300380031003100460046004400410045003400300030003000300030003100420033003400390034003400340031003500340032003800390031004200350039003000430046003400420044003300370031003100380043003700350046004400460045004600370037003300330042003700360039004600380036003300350033004300410038004100380039003100420042003300410031003600310037004500330035003000320037003300450032004100350030003800410046003900350031003700430044003800330033004600320045004400330046004500380031003200340042004100340039003100310037003400340041004400320045003800310030003100440045003600350039003200340042003200350042003200320031004500330036004100360031004200380033003400310037004300340035003500310033003600360038004300450030003600450032003100430045004100370045003700430033004100300034004400330033003500390030003200310046004100330045003300440033004600370038003500450043004600460042003700390041003400440030004500420033003700340032004200310033003900390038003500410034004300450030004600310037003800370031003000460041003900300043003700450031004500450035004500420046003000320037003300450037004300460031004500330037004500440043004300300038003800350041003800360036003200370033004500300031004300460038003400360041003900390032004500430046003600340039003300310044003800350035004300330039003300410036003200430046004100450045003500450034003200440042003200390036004500330044003700370031003100390039003500450043003000420031004100370041003100330034003300360033003100450033003300420036003200370045003300450038003800410036004500440039003400300045003000450041004200410041003200380041003800360034004200330041003400300032003000310038004300360044003600440041003000320038003000350032004400410037003500460043004400430037004500440037004400340045003700340041003600460032003700430037004500420043003700370034003800360030003300310039004300430046003700350039004200410045004100370034003800390032003800340044003900350043003400310044004400450031003200450037004100370033003200440041003900310037004500330035003400420042003200370034003800320037003500330043003400420036003600320043003400450035003400410038003400310030004500300044004600330038004400390033003200440030003800410035003700440033004500380044004300300041004200320037004500410033003900390044003600420042004600370045003100310034003500380039004500440042004100440043003300440041004500450043003000370030003900430045003400460044003900410043004300420042\
-004400300033004600310037003600460042004400380032003900370041004200320036003400430031004400310044004400430042004300300041003300460044003600440033003400350045003700450041004100440033003600370032003700360031003300390035003800440043003600410032003900450041004500460042003400410038004300380046003700330035003100410036004200460034003700430039003600340037003200330043004200380032003700440031004400350046003300300043003500460046003000330037004300420044004500360044003300430031004500390039004600450046004500340045003500430044003700310033003400350043003300310035003900390037004400410041004300420044003200410043003100450032003400420031003500360046004400460037003600330031003800310033003400350031003300320035003600380046003400350035003000440042003500330042003300460035003900430041003200350043003000360030004100310043003500460032003900300044003900430039004300380038003900450033004600330034003000300031003300320037003100320033004200370042003500330030003700460031004100310034004500410038004600300034004200460045003200380035004100460033004100420037003600330038003000440045003400370044003700420038004400330039004300430034004200370036003600360034003600350032003900370036003700310045003000420033003200340035004600300036003100340045003000320046004600410037004600380046003900350037003000420041003100370037004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003000340000054D00410000074D0041005200000F4D006F0072006F00630063006F000083933600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000460030004400310030003800350031004600460044004100380030003000300030003000300039004100340039003400340034003100350034003300380038004400450044004400330042003100300041004300320033003000310030004300360046003100370046003600320034003500320044003000310035003100300037003400370030003700350037003100310030004100370039003400440044004600340041004500380030004200300038003000450034003500370044003000310044004400360032004400410038003600390041004600380030003600340044003000360033004200320038004400450037004300440046003800460045003300420038003100330044003700410032003000380030004300350030003700320030003800460034004300370036003100380037004300370045003100330046003000460039003700320042003400330042003900330034004300390037003000310036003600420041003800430036003300350043003700420035004100310039004100350038004200430031003400350043004600320030003600460044003500300045004300450042004200430033003700310037003900440037003800440042004300440036003800380033003600370044004100360036003800430036004100370030003300450042003000360042004600410044003100320034003500380030003600440030003400360037003100350042003300340044004300450037003100440046004100410039003900300030003900390037003100460035004400300035003800300031003500320046003000450045003700300044003000300032003700360035003500330032003200380038004600460045003700370044003200460046004300300036003900450042004300320045004200440030004300450037004200330043003900300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003000380000054D005A0000074D004F005A0000154D006F007A0061006D00620069007100750065000087173600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003200330032003400300032003500330041003700380030003000300030003000310037004200340039003400340034003100350034003300380038004400410044004400320033004400340042003500420035003100300030004300360046003100460046003300390033003700320046003200360034003600370033003400310033004200330034003000360031003500310034003800370038003000350033003600330031003300310030003100340041003100440034003100340032003700430035004400310034003500340031004200300035004600340031003100300030003400340035003100310045004300450038003000370044003000340031004400430041004100320032003200450032004500330041003000380034004500420035003300380039003400410032003200340039003600340030004400340045003100380041004600310032003500420039004400450044004200370030003800450038003300450030004500300039003600450034003300450031004600450030003300370033004300460043004300350046004300450037003800430035004500340045003700370045003000310038003000320032004600320037004300370043004500320044004400360046003700460046003100320037004200370032004200440038003500300031003100320035003600380039004100440044004400330046004600340031003700310045004200430038003500300031003400430041003700430032004400410043003100300035003300330042004600410046003900310035004100440037003000440038004200330033003300330046003900410036004300380041003000340032003300390039003200380042003400340033004200440042003100330034003300330043003800370038003300460035004300310030004100430044003400440043003800410036003700370046004300390031004500430034003600300042004100450044003600360038003900460036003400410035004100390034003400430045004100380044003400300034004600420030004300420033004300320043003200340033003900450041004500370036004300350041003900350044003200360031004300310035003000430033003700340035003700310030004200370045003900360038004200310031003100360045004400330043003300420041004500350035003300350032004300380035003800300044003100320039004300310037003500430046003000300034004500450043003300420039003900430044003400310030003200390044004300460030003000300034003800350036003400320031004400430043003900410030004400460041004300310045003200450044004400310039003900430046004300380043004600310036004400330038004300440044003700320046003700440031004300450045004600390032003900310045003300370030003300450030003600380043003500350043004600390031004600340037004600460038004200350035004300330045003200390037004600390034003900390037003500320031003600440044003400390039003700410037004500330032003800380044003200330042003700450034003100360045003300440038003000360037003500370044003200430043004500430043004100340039003600320031003800350042003200350046004300420039003300320031003400350033003800310035003200310042004500440041003800410031003100330035003600410034003200300031003700430043003000310042003800410038003400390036004300390031004200330045003400430035004600380031003000340035004400410045004400390037004400380035003000310030004300420033003400320044004200440032003200350039003100460045004600420044004100420035004600370037003000340033004100320034004300460043003400370039003600340030004300430046003100300034003000350046003000390039004100330031003600310046003600370046003300380038003800300046003200300043003000350037003800300031004200410046003900380030004200380042004200330038004600380043003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003000340000054D004D0000074D004D005200000F4D00790061006E006D006100720000848B36003000300030003000300030003000430030003800300036003000300030003000300030003600360046003900340044004300360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320032003200440043004400320044003300370038004400300030003000300030003000440038003400390034003400340031003500340033003800380044003600330035003400370030003500410046003800390046003000310030004100300034003700380044003900310039003800340030003400330038003100380044004500370046004600430043003100460030004500390043004200320046003800360042004600460046003200300035003200310031004400460030004500330032003200340037004400440044004300350034003000300041003600300038003100330031004100340043003500420039003100390041003400430035003700390031003800360043003400440043003400310039004100450044004400460039004300380046003000450043004500350035003700380036003800420033003700440046003900300036003400310038003300320036003000340032003700360036004400350043003800300033004100380033004100340039003000320030003400330035003600390034003300450038003300420038003000380031003700300033003100370032003700300042003300450042004400430034003100390043004300430039004300310043003200430030004600340039004600390031003400310035003800380043003800350045003100460033004200370045004600300043003700460046004600460044003600330045003000360034004100370038003200430031004300460035004500370044003600350035003800420035004500420030004500430033004100370034004600420046003100390033003600450043004200380043004600460030004600450045003300300046003800360042003700310046003700450039003000360044003300300030004200450046004600460045004600300043003000430030004300300043003000430039004600350046003700450036003700420038004600370046003300300042004300330045003200440037004500460031003900440045003700460046003800430031004600300045004100450044003500370030003600350045004100380032003200330036003800360033004600320034003100420043004300370038003400420035003700450036003300460036003100360035004100340030003300320036004300320034004100340036003000440031004500410043003000360030003300300030004100320043004100340034004100430039004600390037003600370046003500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003100360000054E00410000074E0041004D00000F4E0061006D006900620069006100008AF3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003500300031003000330032003300320031004200300030004200360044003000300030003000300032003700320034003900340034003400310035003400330038003800440041003500390032003500420034003800440033003700310031003400430037003300460046004600440044004400340033003500410037004300440032004400420031004300320043004200340033003600380041003800440039004300350044003200430041003900370046003900350030003500390032003400340036003100340032004100390039003800380033004400320034003700390038004400430034004300380043003400310032003000430035003700450044004100350030004200330045003900380044003400320032003700430034003800320038004100310038003700390045003400410041003800430030004500430041004100350032004100360036003400310037003200440031004100330041003200370045003900440043003600430037003300420041003100450043003200450039003700460031003300420031004600410042004400390044004400460046003700390043004300460033003900390043004600330031003500440038003700410043004500430033003700460042004300460034004500340031003800390041003000450041004300430037003500440037003300300039003600370046004600310037004500460042004600430043003300370035003100310035004500380043003200450045003900340045003300460031003000380034004200300032003900350038003100370032003000430034003500370041003000450037004400450044004300310039003200350042003800320043003700330044003200330044003200420044003600300041003500360032003900410043003200420034004200370045003800380032004500440037004300420036004100430045003400450045004100420037003800310043003200450046003900410032004400300045004400380039003600420042003900390039004200370031003900360039004100440039003100390031003900450037004500420031003200380030003800360038004600320042003300390030004300430043003500460042003100320033004600420032003200440045004100330042003600370033003300390045004200300032003500440032003400430041003400360036004400430030004600410038003900300034004200330031003900430034003800410037003200440034003900430031003700340037003600330031003500330033004500350030003700390038003400380045004200300039003600300036003400450045004400460035004300430034004600310043004100450042003600410033003500330044004200310031003000340030004600340041003800350038004200330030003900350034003300350034003900340042003400320045003100430044003300420031003500340038003200320046003500450036003700460038003700390039003700350046004400330044003000430033003100390042004300320042004400360035003300460038004200410031003100420033003600330036004300310045004600430045003800340033003300340036004200340032004300360045003900330033003600420042003100460044003000410036003000430038003100410046003200360037003500370035003200300039003500350037003900330042003200380039003100350042003100390033004400350032003800410044004400330031003200350044004500410035003400450038003300430036003500300034003100370035004500380037004200390041003900460044003600430046003600460036003400410031003200420039003400380041003600390035003600380037004400410033003000380046004100420042003000330042003100350043003400340035003600420033003100310044003400460034003300370037004100440038003900430039004600360034004500420046003200390044003500460042004600350030004300350036003600360037003200420034004100420039003100340031004400420042003000420038004500310043003200430030004500310039003200330033003300300041003200340031003200320031003100320038004300460034003900450031004200340043004500380039004200350041003000390043004300390038003900340039003500310039003100350034004100440032003200450043003400320033003900300044004400310033004600420038004600320045004300330043004200330031004500370046004300370046004100440039003200440032004100320032003800340044004200410035004500390034003400390039004500450033003000460032004100300044004400410046003400300041003500340046004300310035003200390042004300330043003100440045003100420046003400370035003700460046003300440033003100370030003500310037003600360036004500410032003300450032004500390030004200310041003200340041003200360032004300360033004100320034003400380039003300320030003800360044003500440033003100350037004500330036004400310038003300410045004100370030004300460038004100370044004200420032003800330038003400320041004200410032004200390032004300390044003800340037004200460037003100390033003100330045004600340034004200350041003900310042004100310031003500420037004400300031004200420030003700340043003700340042004600460039004200340032003400440030003000420043004500440045003900350038003000330031003400350043004200340034003400350033003500330046004300440031003600390031003200380030003400320038003500380037003500450036003300380042003700370036004300410041003800370039003500310038003700360042004400360042004400320043003200380038003000450043004200320042004400310046003600420042004500300031003700430030004500310030004200340032003100390036003100390036003300330031003500390034003300320044003700340037003400460036003200450031004200450038003100440041004100320037003300340035003900340034003100340036003400350032003700340032003700300042003600380044004400410033004100330045004100360035003300330030004500420037004600330041004600410031004500300037003300420043003800300044003800310038003600340043003600330032003700320034003700440042003700380044004300440031004600410034004600430030004200390046003700310042003800380030003900430044003900430045003500420036004300310030003700300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003200300000054E00520000074E0052005500000B4E0061007500720075000083633600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030003800310031003200350045003600410043004400360030003000300030003000300038004500340039003400340034003100350034003200380039003100360033003600340044003000410045004600460043004600340030003000330043003000340034003000420034003300340037003000440034003600300031003800430037003700330037003600390044003300320034004600320031003800390031003500330030003500320033003200330032003300380033003900360042003200320038003800330038003500390045003000430043003300380039003400420034004600310038004100450044004400370044004300440046003000460046003300460037003900460036004100320030003400300035003100420032004200330033003400330035003700390031003200420043003300390043003200360033004600380036004100450032003200350037003000360033003600350036003600360042003200350044003800430036003200460030004300460035004600370046003100380030004500390046003700420043003800460030004500300045003900300037003800360043003300450037003100450033003200460043004600430046003500380037003600430038003300310039004400310033003300300038003000460031003700310042003000330032004600330037003300420043003300450037004100460033004600310039004200450037004300460042003400350042003600430031003200430045003800300032003500460042004500460044004100320043003800340030003100380030003000300030003000310038003700320045003100320030004600360032003300420045003800300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003200340000054E00500000074E0050004C00000B4E006500700061006C00008BAF3000300030003000300030003000310034003000380030003600300030003000300030003000380034003600320042004400370037003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030003800320034003700330035003500360038004600350030003000300030003000320041003100340039003400340034003100350034003300380038004400390044003900330035004400340038003900330035003100310038004300370037004600450046003900390037004200440042004600430034004300450043003700420044003100390037004400350034004300460042003700320044003600330036004300330033003200430043004100320030003200360046003000420038003200380038003200450031004100360034004500350034003500310031003700440034003000350031003100340044003100340035003100460042003200370035003500370044004400370034003600310035004600300036004500390032003000430044003000410030004400430034003800460042003200340030003400320043004100330032003700300034004500360042003500360033003200350033004100370036004600360036004500460045003900360041004400360036003200380042004500430038003100300033003800370045003700330039004600460031004600460046004600330033004300450037003800300044003300370044003100310034003700450039003700340046004500330033003800340037003300440038003700460042003000330030004400340031003900430030004500310044003900300044003500320039003900330030004100310032003800430033003300350046003800330032003700350042003100420043003300430037004200450033003800460044003900420036003500330043004600350038004500330034004500390046003900300038003300460030003200360033004600450034003100330036003500390044003700370035003600360046004500420037004200440035003200450039004300410035003400370035003800370046003200410036004500340032003000300038003000340034003300390043003600440031003400460034004600300044004400370037004400370037004300460032004400450041004600460046004500310041004500370031003500440042003300460030003100310034003300350030004500390031003100300033004600420045004200320030004400320031003500310046003600460031004600450043003200330044003500460039004100390046003900420037003300320045003900340039003200370042004300390046004300350037003400300038003200440044003800360041003200310041003900390035003600450032003600320035004100380039003000420034003500330035003900320036003200430046003600360036004600350046004200330042003800450031004200460035003500420032003300320031003400460030003600310046003700310034003400340030003300430034003000310041003800390036003500390043003400440042003900360033003300460033004600300035004500300030004600340044003000310030003600330042004400350046003000300034003800460046003300450041003000350043004600330035003700340043004200440039003500420041004600340046003100440035003500350045003700360046003700460033003500320035003100370035003300350046003100430038004300370030003100300032004300460037003900320039003400450037003400300031004600440031004400300034003700330034003900320046003200310043003000340043004200420044004200460044003900390034\
-004500430030003800420045003500320043004100330041003600460036004500350046003100370037004300450042004300370037003900360035003500420042003800410036003100340036003500420038003000360034004600460037004400360032003500300032004300340034004400340044003200330032003800430043003300340030004400390042003500300037003400350044003800460036003600350039003000410032003100410041003900320041004400440034003200350032004500410038003400340043004100370044003100310041003300310041004600420044004300340037003200320044003000330030004100330039003000380041003900340032003500360037003400300044003600340037004500440039004300320032003400430034003800350044003400330033003000320042003000320032003000340043003200360030003000340045003000340039004500320030004100350037004500410043003300320032003500330033003900460045003600390032004100360041003800390030004400460039004200300038003900300042003200410035003800300046003800390043003100350030003000300043004200460036003800450035003600340035003500410044003300410032004100300043003700350044003500370036003400460031004500430046003000450042003400430034003200340031003400360035004200380030003600440042003600430038003500330032004500380041004400390031004500310030003800370041003600420036003400390042004100440035003000420036004100340035004100450035004100360043004300460044003100410042003900450045004500430035003800370041003000310036003000430045004200320041003200430045004200310038004300320037004400350033003900310036004300430035003900350036003000340039003200330033003800310034003700390033003300360037004300370044003500370034004600410045003600370035003900340043004300300034003800350042003300420041003300350044004400440045003300430039003500310035004600300046003200330036004400450044003000300031003800410035004500340035004300410030003200360033004500370046004500300037004400320033003000450037003700450036003900460030003000380033003700350034004100430045004600310042003500440044004100440041004100310043004400360031003800450044004500410032003600440034004400380043003200430030004300330035004100340032003200440041004400420046003000450030003100300035003400330031004400450041003100420035003300440041004100450041004500370039003300420045004600440031004600330041003000320046003500430038004200370038003000370045003100320039004500380039004100310036004600350042004500310041003800320034003300390036004100440046004400380044003400390045003900410042003600390044004300440037003000310032003000370045003100380038004300450033003100460034003500440037004200340039003800360032003000300031003300330041003100370033004600350034003400460042003600380035004600430045004600420030003700420045003600300033003200380033003300370033004300450030004500320044004400350033004500320037003000380033003900460036003200440041003600330032003200320031003400300036003000440041003600340039003000440030003900370033003500460036003200390034003900420037004600300032003400460046003700300033004500320030004400390035003500430041004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003200380000054E004C0000074E004C00440000174E00650074006800650072006C0061006E00640073000081D736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004200320046003300310036003900430044003000330030004100300030003000300030003000320042003400390034003400340031003500340033003800380044003600330035004300320037004100330046003100390046003800310030003600380030003800390031003600380036003800450031004100380043003000320031003800460046004600460046004600330046003100410037003900340033004400340036003000340036003400350042003700450045004400310043003800310042004100320030003600300033003000300039003400300030003000370046004100410034003600350041004100360041003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350033003000000541004E00000741004E00540000294E00650074006800650072006C0061006E0064007300200041006E00740069006C006C00650073000083A3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003300300030003000450031003000300046003600370032003100440044003000300030003000300030003900450034003900340034003400310035003400330038003800440036003300460038003400460030003000420043003900460033003400460035004600460031004400370031003500390031003400460043003700450044003200350034003400320044004100460045003300330033003100440030003000380038004300310041003000430030003700380043003000430030004300440035004600460038003900350031003100380031004300410043004300440043003000430030004300300043003000420030003700360045004400350035004100320030004300360036004300310032003700320039003200410043004100430044004600300046004100460035003500370030003600300036003000360030003600380036004300330038003700310046003300320033003000330032004600450043003700320041003800370030004400450030003000440038004100440041003500410030003700300036003700310037003100310045003000360030003600300036003000360038003600350037004100460042004500330030004200430037004300300039003300310034003800350043003900430038003700410031004200360044003600300031004100460038004200380039003000410030004100300039003000390035004500380036003100370032004600330045003600330042003000460031003000310041003200320032004100460042003200440032003800450038003100380044003800440039003900380031003800440038004400390039004100310042003200440032003800450031003800320044003000430030004300410033003300390036004600450038003100410030004300300030003400330037003500420043004200380031003900380039004300370044004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003400300000054E00430000074E0043004C00001B4E00650077002000430061006C00650064006F006E0069006100000735003500340000054E005A0000074E005A004C0000174E006500770020005A00650061006C0061006E0064000087D336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004500320038003000300037003100390039003500370031004300300030003000300030003100410041003400390034003400340031003500340032003800390031004200350039003100340044003400380035003400360031003100340038003600390046003700420042004600370031003100320042004200390033003000450039003500360033003300350036003800310033004400410038003400310033003800310030004300420041003300320030004300300034003600370032003100380031003000420032003500310037004600390030003300420035003900320039003000340034003500410035003600380032004500340033003600310034004400340038004400340038003100340041004500330035004300320031003600410045004200320039004600350035004200380045003800430046003100300037003400430032003100390036003300440034003400390041003800390039004200390036004100330033004600370044004500410046003800350032003400350045003400360034003100310038003300440042004200370033004400450037003300390045004500460046004400430045003500310043003200460044003400330044003200350035003100350036003000360041003600390039004200410045004400310038004600370034003300350030003500450038003100430045004200450033004400390044004400330045003800360032003700420046003700320041004600440036003400330046003700340035003000330035003700350035003800300042003300460037004400460037003000440038003700300038003400360036003200440044004100460035003100380031004400350045003900330042003500390031003000360035003600310043003200450043004300330031003600380041004100420039003400300041004600370037003100330041004400420032003800320039003900360038003900410034003700380033003900460042003200380036004600330031004300380032004500300041003500320032004500360043003200420046004300390031003800410036003400440035003300310036004500410035004200450034004400450038003200390039003400380046003100460037003400370038003400310033004200450035003200430034003200390043004400440036004500430035004600420045003600320043004200390044003000450039003500310037003800440036003700360038003900420046004500340035004400410042003000450043003800450039003700410045003300370041003000320041003000410033004500430046003400390044004300460039003200410041004100310030003400340037004200310045003500330044004300370044003000370032003300390039003200320042003600410044004200300039004100340043003200330032003500420030003100430044003900370031004100330032003800340038003200390034003900310042003100360042003700350045004100450030003300310030003000410039004300450036003400330046003800300046004100390032004400300033003000300046003500410037004600420033004300430031004100300038004600420043003700380039004300380031003700370031004200330043003900390044004600370039003700310045003000330042004200430033003200380041004600310035004500460036004500320035003700420037003900380038003900360036003700360044004400460034004400360039003500440030003500410045004400420031003300390042004300450041003100360035003800370042004600450041004500330043003700460033003000320041004300370042004600450039004200430035004400340043003600300035003900390032004400410036004200450037004500380036003100390031004100370039003400460033004600450037003300300043003200310035003400360045004400460032003800410033004400390041004600370031003700330045003400300042003000300042004500310032003100370041003600360039003100310038003900450042004400390035003700460042003000460041003600460043004100310033004300350030004300440032003100440034003500430030003100340032004500430038004600430038003000390035004300410038003300390039003900300038003100350035003100410038003300390038004600310036003900430044003000330033004200430034004500310036003900300044003000330033003500390044004100420031004500440046003800310046003300440041003200380043003900460034004200410033003700330034003900300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003500380000054E00490000074E004900430000134E006900630061007200610067007500610000839B36003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320032003200390043004100340030004600330039003400300030003000300030003000390043003400390034003400340031003500340033003800380044004500440044003300330044003000410043003200340030003100300038003600450031003700370031003200460033003000330041003200310036003800320038003500390035003800350038003500460036004400450043003900380042004500390035003500360032003100420032004300300034004200310034003800360039003500320030003400310031003200310036004100420032004500450037003800380034004400440032003600380035004500300044003400330033003000460031004600330033003800430042003000430044003900340031004500320041004500380030003300460044003400440035003800320045004400350033003300370033003300350041003900350041004500430046004200310041004400390043004600330044003800430038003600450042003100370038003800310042003500360035003500450037004600310039004100440042003800390042003200320045003000300036003500330045003500420039003100380045003900370034004500440038003600420031003500340041004300370046004500390038004200330043004200320042003500410036003300370043003400360046004300310032004400370045003500380031003200360031003000300034004300420032003800380043003900390034004300330037003600450044003800360037004300370041003800390031004600360037003100340045004500320032003800420031004100340038004200300045003100390033003800430033004300380046004600340031003700410038003700420046004600350044003600330041004600370046003200410041003000460035003700300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003600320000054E00450000074E0045005200000B4E0069006700650072000083D3360030003000300030003000300031003300300038003000360030003000300030003000300039003400370039004600440038003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390030004600310031003100300030003300350038004200330037004500420043003000300030003000300030004100410034003900340034003400310035003400330038003800440036003300370043003100300043003400460036003900460038003100300036003800300038003900310036003800360038004500310041003400430031004600380033003100390042004600310045003500440034003300350034004100410046003800460037004600350032003300430034003200350044004300460043004300340031003900460043004600460046004600370046004200430030003600460046004600460046004200390042004500310043004400380034003000340038003600360046004300370044003600330030003300300033003000330030003300300037003000350039003800350033003000380038003100340032004300360030003600300036003400360036004300350036004200330030004300310041003000460038004200320036004200300045004400430035003000300036003000360030003600380036003600460043003700440036003300300037004300440039003300350038003700410030003800420030003900310041004600430045004200450045003300390041003200430034003400380033003600390038003400440044003900380038003200380033003100390032003000440045003600370031003400420036003100450030004200320030004100380031004600330042003900410043003400320031003800370038004400430035003200300038003100410043004300420038004500450045003900300045004100320035003200300035004300420041003700300046003000430030004300300043003000430030004300370046004600380030003400380038003500310043004500430030004300380042004200340031003700420042003400310030003100410033003500310038003100350030003000300030003900300031004500320046004500420037004600340037004500460039003500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003600360000054E00470000074E0047004100000F4E006900670065007200690061000081EF3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100360031004300320032004200350035004100370030004100320030003000300030003000300033003100340039003400340034003100350034003200380039003100360033003600340036003800300046004600430043004600380030003000330032004300460035003200420036003400380038004400320042003200430035003200410042003700450043004400410036003100380036004500380034004400460044004200380042003400330032003300300045003100390034004100310031003000380043003100410033004300360041004600300041003800430031003700380030003000300030004600420035003800300037004500440032003800370038003900360030004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003700300000054E00550000074E004900550000094E0069007500650000862336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003700300030003200430042003500350037003600410043004600300030003000300030003100330045003400390034003400340031003500340032003800390031004500440044003000430044003200420043003300370031003000300043003700460031004600370046003700420037004200310042003100310034003100420043004400330043003600430038004300430032003600360041003500380038004300420031003600340044004200390032004400340044004300440034003100380045004100340043003600330046003300300046004600380030003800330038003300390033004500340043003000390036004300420039003400340034003200390043003500390031004200320037003600310034004400330033004300410043003300430041004300430043003400330043003800430036003600340045003300450037004500430046003600440042004300310043004400460042004600450037003900310044003300450045003200370038003700360035003900390036004100430031003600360036003200320043004600380034004200370038004500390038004600340044004100390039004400380030004600420030004500380039004100360031003700450032003300430036003900340044003300430038003500380041004200310036004300390036004100410031004200310037003300300034004100350034003900440045003900440035003700440036003000460041004500390039004100450043003900310030003000460030004400440033004400370044004400340030004600410042004400310038004200370041004400390032003600330037004600310033003700450034004600310042004300310042004300380039004300310038003500320033004300350032003800380030003300380045004400460037004300390034003200320044004100330036004400370039003200360031004200440033003100330039003500380042003700380046003100410035003200380035004600410042004100360034003700450034003200380042003100330046004600310037003100350041003800310039004300310037003900380039003700460036003100340043003300450041003800340036004200300030003200310043003000350038003200350033003000440034003700450045003200440030004500380044003800440043003500450041003500370037004400380038003300340045003700430046003300370030003900460032003400360035004400300032003300430042003600300034003600330039003200430038003500330033003100350035003800440041004100440031003400420046003400390043004300390044004300310043004100350044003200390041003300440041003300380041003100320042003300350038003100370033003000440031004100350042003100370046003500410035003200410037003600360046003700320030003500350044004100310031004500420037003200340033003800340039004100360038003900410036003600330041003800340043003500460033003400390038003900410037003900370043003700340036003300410044003800420032003000440044003500450031003000330043003500340044003100450031003700300033003200350034003200360031003700300034003800420045004300410035004200310042003000380035004300320041003400420046003400300046004600450031003500460046004400300030003800420042003400360031003800370042004600460035003200370034004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003700340000054E00460000074E0046004B00001D4E006F00720066006F006C006B002000490073006C0061006E00640000858336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030003100330041003200460041003900450030003500440041004200300030003000300030003100310036003400390034003400340031003500340032003800390031003600330039003400360043003600320046003800430046003800300030003500340038004600320043003900390043003300450039004200460046004400380031003400430036004600460046004500450037003300420030003300330033003200330033003300300033003100420033003300310042003500430038004400460031003400340044003900440033004300460033004600330044003300310043003500410036003900460030003900390042003200300033003600370030004600320045003100340031003800360031004200320046003200460031003100410042003900430038003100380035003100380034003500420046004600460046004400360036003500380037003500370031003100310038003300330030003900370032003800380033003900450039003400300039003500310030003600310033004500350045003200460044003700370037003600330030003300430037004300370046003800460045003100460045004600420044004200300043004100460042004500420043004100300038004500430031004600460031003900460045003300330045004300420042004200330038004400450031003100460043003300350046003800360041004200320046003200460033003200370034\
-0031004500410038004100350038004500430031004600460046004500460046003600330037003800460045004600390032003900430033004300460044004600330046003100380039003800390039003900380031003900390045003700430042003800430046004600300046003500440037003600370043004100300044003700450046004200450035003100350030003300300046003100420032004600430033004500420041004600320046003100390033003800350038003300380031003900310038003100380031003800310039003600450042004400420045003400360042003900430031004200330034004600340044003600340033003800460041003600300033004600430033004100460042004600420046003100380031004500420043004200420043003300460030004500360045004200340042003800360042004200360046003600460031003200330034003900380036003000410041004200300035003400420030003600370045003000450035004500300036003300330038004600460046003400320034003800330031003800380046003200340038003300420033003800410031003700380033004100430038003000300032004500350030003600330042003200390037004200330032003300380032003900370042003300320036004300420041004200360038004100380031003900440038003500390044004300310034004400430044003800460041003000410031003400340031003900300043003000330031004500310041003000310030004300380043003500380046003300320038003700360030003000300030004600440045003200350044003100370031003800360045003100320039004300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003800300000054D00500000074D004E00500000314E006F00720074006800650072006E0020004D0061007200690061006E0061002000490073006C0061006E006400730000884F3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030003000300036003600450045004300410033003100390030003000300030003000310043003900340039003400340034003100350034003200380039003100390035003900330042004600360042003100330036003100310043003800370039004600460037004400450036004200340043003600430031004100340043003400430044003200340034003900340043003600340036003800420039003100340041003200410045003200350032003200410036003800330030003000450032003200300045003200450041004500320045003000410036004500370035004200310034003300300037003200370035003700370031003700320044003200350031004400420042003500380033003500380035003100340039003100440041003200340042004100300041004400320032003500360035003100380039003900300037003000360044004100460044003400410034003300350033004600410045004200390046003700410045003700460038003000420039004200340037004500440037003000460043004600380037003000460030004600370043003000350046003700440045004200410046003400420038003300450043004400360031003600320037003000380037003500310032003100370030003700430033004500300043004100310039003800320042003400420039003400320042003700410036003100450038004200440043003200370043003300430043003000370034003700340038003100390038004200450038004500310035003400410033003300460037003700350039003900440042003700310038004400430039003700330036003900310045003500340033003300310034003800430037004500340046003500360046003300300041003200450030004600360039004400430044003700440046004100310031004600380039003700310044003700430038004600310037003800340039004600320041004400330039004300360044003400460036003000440042003600460044003500310031004500310045003500440036003100320043003200340046004600420046003700380033003200420044004300390031003700370042003800330046004300430032003300300043003500330035003100460045003300410037003900320038004300310045003000420046003300420041004400320043003700460035003600320038004100450032004300460030004100350033004400390041003000360037003700310035003700310035003000330042004100340042004500320035003700380039003500370038003300310037004300390045003200370030003200310037003300390043003700430044003600340046004200420045003300350032003400460042003400370039004600330046003900330037004500350036003400390045003400430046003500300035004600440046004100350035003100410046003600420046004200450042004200320045003900360034004100420031003900310043003800350031004100450031004600410032003600340030004100340032004100320043003500370030003600410038003800440033003200370035003300370034004100430031003600430042003300350038003900360039003800370031003100410031003700310030004500450030004500430035004600340035003400420044003300320039004100430043004400330033003300310037003200310038004400420031003500370043003300370036004100410043003100410041004200390038004100360043003900350032003700350030004200440037003100350039004300380039003000370046003800360030003200450046003200340037003700350042003700440039003500350038003500410035004100300031003100420043004300340043004400380038004300310046003300420030003800450042003600460033003900370044003900390039003500390041003400390034003000340039004400310033003900430038004600360038003500430034004200440036003900380036003900350046004300310041004400440041004600420035004600300043004600300036004300450035003200300038004200450042003000450034004600370033003000440036003400420033003800360035003200300041004300420042003200380038004400300045003400340039004100450043003300410037003200440038004400340037004100350038004500310037004500450035004400440043004500410042003800440043003700390045004600410033003500300046003100390033003500300036003500300030003800340031003000380043004300380031004600420043003300340030003600420038003300350041004600420030003700420033004300380039004400380045004200460033003000300041003200360045003900440042003300460045003400440036004300320034003100460035004200330031004400410035004100360030003200460038003400350044004600450030003000410037003200410031004500380034004100330038004500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003700380000054E004F0000074E004F005200000D4E006F00720077006100790000829F36003000300030003000300030003100300030003800300036003000300030003000300030003100320045004400380046003200360030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310037003300340030004200370037003500440046004200300030003000300030003000350044003400390034003400340031003500340033003800380044003600330037004300410046004100440046004200390046003000310030004200310030004200380037003200380039003800310035003100330033003900330038003100380031003800310038003100450031004600460046003500450039003000430031004600370034004600340042003000320039004300330030003900390038003400380035003200330044003600410046003000410030003300320039003800340035004500300043004100320035004100320031003400310032004100420030004500300036003100380031003900330034003300320042003000320036003300370034004100300031004300440038003200380032004600310046004600460046004600460033003800350044003800430039004300340031003400380030003500320043004200380037003200310034003700410039003800380045004500360042004300310031003600340033003000300030003200320033003000310038004100390044004600450042003900440041003800300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000735003100320000054F004D0000074F004D004E0000094F006D0061006E0000838F360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200320032003600350041004600460045004500300035003000300030003000300030003900390034003900340034003400310035003400320038003900310044003500440030004100310030004100300032003400310031003800430034004600310046004600410045004200420031003800300045003800420031003800450035004600320045003200320031004300320046003500370042003000360033003100310039003300340044003800340043003300450039003700340035004300330046003500300033004400460034003200420034003800390030003800360036003000350042003700440043004300310036003700350036003600430042004200310037003900430033003800450031004300370033003000410041003200390037003200430031003500380037003000320033003300380031004600410031004100450035003100380042003100350037004100420044003200310032003400310041003400300039004300340033004300440039003700410038004500390030004300390032003200340030003800460043003800300037003500330036003800310045003700300033003700390037003900450038003000460041003200430030003000360038003000460042003000440032003900460037004100380036004300380043003700380030004600440037003000420037003200410038003800320036003000440035003100340042003900430034003500380046003800310044004400440030003600440041003200410036004300370045003900350045003500440030004200320034004400420042004600310045003100350033004100460043003300320045004200350034003100460030004600460037004400460043003000360035003100300030003200310038003700300030004100300035003600310044003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350038003600000550004B000007500041004B000011500061006B0069007300740061006E0000862736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004400320044003100320046004400310031003600430034003800300030003000300030003100330046003400390034003400340031003500340033003800380044003600330046004300460046004600460046004600370046003000360033003400440030004200310041003300380033004100310037003200370044003200350042004100330030003400390038003000380039003200320044004400380033004400450045003000340030004300330034003000300036003200440034003900320044004500410031004100350043004500330035003500430033004300300043003300430045004300330037003000450044004600390033003500420038003500380041004300340035003200430038003300420033003800360033003300350036004600350032004300430034003100380041004100320042004100440043004200350030004500360035004500430036003200300035003200320043003000320031003700390033003100330039003200360033003900380031004300330045003900390045003100440044004200370037003700300043003400410044003500340041004500340031003900310043003600450031003200430045004600300046003600450042003500420038003600350046003700460037004500430031004300350031004500420044003700420043003400350030004200320042003600380034004500310044003800440044003600330030004300310043003200430031004300300043003300460046004600460045003600340034003000340045003600300034003400310039003200430032004400320030004300440032003000430036003200420043003600430030004300450043003200430045004600300046003300430046003400460042003800460038003900430032003300370033004500300036004300370036003500360037003600380036003900460042004600310031003700320034003400380035004600310044003300300046003400460031003900420038004400380042003800310038004500320032004300450033003700300041004100340031004300460030004500340034003100390042004300460032004300430034004100380036003700460046004600460046003300310037003400300037003700370033003300440038004100410044004100360032004300380046004200450038004600410041003000300034003100330030003300300033003900310034003100370031004600390045003900360035003800360046004100340044004600350030004300430044004600450043004400300043003000370038004100300046003300300041004300330042004200460038004500450031004300380039004400320033003000430045004300320043004500430030004300310036003800410031003600300043003700390032004200460033003300300046003400310030003600350033003000300033003000330030003300340033004300420042003600310036003800360035004200410046003600450033003100390034004200380039003600330030004600380045004100460039003300320044003800410038004400380033003000360043004200380042003000380031003200310036004200350039003100360043003300380042003400460032004600430038003300370039003800380031003800310038003100360031004400350039003900350035003000430041004200430045004100430032003200340041004500440045003000430038004400320041003400300030003000300039004100340032003600330033004400340032003800310046003900350046003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350038003500000550005700000750004C005700000B500061006C006100750000851B3600300030003000300030003000300045003000380030003600300030003000300030003000320042003300310045004300430044003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310030003100370030003400300038004500440033003800340042003100410030003000300030003000300046004300340039003400340034003100350034003300380038004400360033004600340035004100370042004500440033004600300033003000440030003000310033003200440030004300320035004300410036003000340045004100360036004600300043003000410031004300420037003100380046003800350039004400450039003100360034003300300030004200320045003000390035003600430036003500460030004300430039004400320044004400300043004500450043003200360042003100380044003800390038003700450033003200460043003600370036003000360034003300380046003300430039003900360036003100430041004100330034003600380036003300370042004600430035004300390037003700370031003900310037004300320035003800330041004600450038003500320030003600330036004100360039004600300043003000430030004300300043003000430038004300300043004600460031003900340043004600390030004500330031004200340041004200430036003300330037003000330032003700440032003500430046003600300031003500430045004100420030004300370036003800320044004200420031003600410039003000360032003700460043003400450030003200390042003200380041003300430038003300370035003700380043004500450030004400350034003400340038003100450041003700430031004400340030003000350038003000440042004500460032004300350030003400410046003200360034003200460032003300380030004400420045004600330035004400390042004500310044003000370042003400460041004300310041003900450046004400390034003600330044003800460045003200360038004300330043003800330031003900310038003100380031003800460041003100450042003600330033003600430037004500310044004300440046003000450042003100460033004200300033003000330030003300300033004300330037004600300036003400360038003600440033003900460045004300310038003200410036004600320046003600340046003800460045003800460039004200410030004300310038004300380034004200320033003400320037004400330033003700300036003700310042003600320037003000430045004600460046003800380033003000370043004600430032003300340034004400300034003000310038004300300039003900340031003600300045003000460042003300460032004500380036003000370033004600440034003800380033003600310030003000360036003800390036003200410030003000300032004100380034003300420038003300350045003700460043004600420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200370035000005500053000007500053004500003F500061006C0065007300740069006E00690061006E0020005400650072007200690074006F00720079002C0020004F00630063007500700069006500640000836B3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003200320033003200410039003500310041003800410030003000300030003000300039003000340039003400340034003100350034003200380039003100360033003600430033003000330036004600450042004600390039003800310046004100380030004300390038003700380031003800310043003100390037003100360030003600330033003300300033003000330030004400300043003200370030003100360031003800430033003800370038003100380031003400310038004300380037004500370046003100320045003400310043003100320037004400340033003000390038004600310038004300420031004600310037004600360034003000310041003900420034003300340030003600430039004200340033003400380041003000440036003600340032003100370037003800330036003600420031003600430033004500370042003300360037004100390036004600420030003600340035004100310041003000330041004600420031003300310043003500300036004200330032003000370033003900450035004200360039003300440033003900320045004600370045004200330031004300330038004500320039004400340033003300370038003900370033004100330042004300330032004500450031004300370033003200300043003200370031004600430042003500300036004300320041003000330033003400320038003700360041003900420033003300330045004300350032003600330041003300380036003700390030003800380033003600390036003100320038003000330030003300300033003000330030003000300044003200350031004600350032003600460046004100410038003100350030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073500390031000005500041000007500041004E00000D500061006E0061006D0061000084BB360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200320032003100430034003900420037004200410036003000300030003000300030004500340034003900340034003400310035003400330038003800440036003300460043004600460046004600460046003700460030003600320032004300310036003500340031003500330036003200390035003300320033003000360031003100330032003400440045003200410031003200300044003900450037003100450038003200350037003500300044004600450046003600450042003100460034003300430041004500320042004200300043003800350041004200310046003300300045003400410044004200430043004600460030004600330043004600330046004200320030004400360036003400310045003600370030004200310033003100330031003300380041004100460033003300330042004300460046004600360038003700430031003500350035003300380030003800310039004400300035004100420038003700380038003000320038004300450038003900310046003700450044004400370033004600300036003200450033003600320036003800360045004600420046004600460033003100370030004200320041003200310041003400430035003100450034003700310042003100340031003800340044003000300044003200350031003500330030003700360045004300370038003400320037003400310041003800380033004600420031003900450037003800380033003100390044003200380046003100310036004400460030004600460031003900390036003400340031004200340043003900390037004600310039003100380031003800370045003300440037004100340045003500440038003300460046004600460046004300430035004600300036003900460033003700450038003600320037003900390046003500300043003900460042003600310043003600300046003800460046004600420030004600370035003000430036003600360034003600370036003300460038004600330046003600300033004300330044003700360033004500370031003900460045003700440046004600430031004300300043003800380041003900320037003200350031004400330033003100410039003800300035004400340033003900310034003100460035004300380033003200380036003700460035004600420046003600330043003800350031003600340033003000420037003800350030003100340045003300390038004100320033003000460031003700300030003000300044003600340033003400410033003400350039004400350033003700450030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350039003800000550004700000750004E00470000215000610070007500610020004E006500770020004700750069006E0065006100008A5B360030003000300030003000300031003100300038003000360030003000300030003000300044003900420031003500430038003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310037003000320032003800380030003000430043004300350034003000300030003000300032003400430034003900340034\
-003400310035003400330038003800440041004400390032004200460036004200350033003500310031004300430035003300460046003700450035004600440045003800430042003600420041003800410039004200350032003100380039004100340030003500340042004500420035003400420041003800380039003300330038003400350041004100380042004500380035003600370031003700340037003100410039003400410041003700410032003000340043003900320034003500320043003400340031003300370039004400310044004600430030004600320034003100300043003400410044004100440031004400330041003500340031004300410034004100390041003600310034004200310037004400360041004600320036004300390032004600370035004500440045003700350030003800340044004400420045003400410035003500350046003100430030003800350043004200460037003700300030004600450037003700430045004600310031003500370038004400300031003300390036004600300045004100330030004200430031004600460038003400300030004500340034003400430034003600300041003100330046003400350035004100440031004600450045004500420031003200410039003100370045004200380032003100300035004500300036003300420033004300310038004400430041003000360045004600420043003500460037004600320043003600410039004500460035003400390044004400410039004600350045003400390035004200440034004200350035003000360044004300370035003300360037003900350045004400420032003600330038003400320035003000440031003400310033003100320035004600310041004300380037003900310030004500420030003200360046004400350036004500450030004500300038003400300037003600300045004300460041003900350031003100450046003500320037003800390038004200340038004400370030003300360042004300410036003700450038003900410038004200330039004500450041003300320037003000330038003200420041004100300037003400440046004300320037003900410046003800360033004200330045003800380045004100350038003800360039003900430041003000360041004200370045004600440044003000370043004600300037003200380033003300330034004600310044003000360032004500420041004500380043003900350036003200450041003500340046003900320042004500420037004400420039004400410043003700330039003000430039003600340032003800310034003000410034003400330033004100370042003900350035004600440043003200410042004300360038004600330036003500370046004200410034003500320037004100360030004600310045004400420035004400310031004100300034004600300046003500380035003800390042003300410034003200320046003400360033003500360041003100450042003300410032003300320033003200330039003400430042003600350036004100420035004400360045003700350043004400320036003300450034004100320030003900410032004100320045003500340033004100380039003200410031004500420032004500380033003500370031004100360043003300450038004200410032003200370030003300370045003100360037003500390041003400450038003800420030003600310031003800300034003400310038003000450037003700390036004400330032003100360038004200410031003600390031004100420036003600440033003300310041004400310037003900360032004100350031003800380044004500430035004200310033003100410036003800320037003000330041004300320039003100460036004600350042004300310035003900440045004400460037003300370042003100350037003300370033003700330043004300430045004300450031004500380041003900330043004200450035004300380045003700460033003000380032003100320038003300350035004400360045003500360033004600460033004300360041004400420036003700390045003900420035004400430033004200430042003600410035003700300035003200320043003000340033003000300034004400440033004400380044004100440041004100320035003400320041004200350043003900460035004600350037003500310036003100370031003700440039004400390044003900300031004300300034003300350032004600300031004300320041004200320043003900370039003200440038004100380032004100300035003900350035004400300034004600340039003700360033004600310043003600450035003000360038004400440030003000420032004400390032004300430035003600320031003100440046004600370043003300360038003200360044003500330045003100450035004200320039003800360031003500330035003900340030004600410044003100420043003000440041004400410035004100340046003500310038003000350035004200460043004500340043003600350038003300320035004200460042004200360041004100310043003200410036003600390033003200330044003300440038004400360044004400420033004400340035004600370046003000350044003300360042003900350044003200440046003300420032003600450038003700430036003900360030003700340046003200320039003100390030004500350037003200350039004100360044003300360039004400390043003900310044003700350032004500360038003900360037004300370042003600320034004300410045004300340043003700450035003400410037004300350043003700360045004400350038003500350035003500310034004100350031003500430034003700350044004400360033003500440031004600340034003500410044003100350038004500380034004600330031003100310033003100370041003700460044004500420046003400320031003700380032003700390037003300390038004400460032003500370045004400450046003400410045003000360031003800300036003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360030003000000550005900000750005200590000115000610072006100670075006100790000836F360030003000300030003000300030004400300038003000360030003000300030003000300041004400410035003900450036003300300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200440031003300380045003900420032003000360043003000300030003000300030003900310034003900340034003400310035003400330038003800440036003300330043003200370041003800460036003900460038003100300036003800300038003900310036003800360030004500340044003800330031003900350046004300440035004300370034003800430031003800380035004400460046004500460046003600330036003500360030003600300036003000450030003600320036003400460041003400440039003400430031004600460046004600460046003200370031003800370039004500460045004500440044003600320042003800420034003600380033004100380033004100340038003800330034003800330041003800390037003300460038003300390030003900320032004100340031003800330038003900300041003800410032004600300037003000460033003100430043003600360042004400430044004200300035003500340038003800340045003100450042004500310044004400430034003600380032003100430045003600300031004500330042003600370038003600390038003200460045004100300043003000450034004600350046003300310037003000440042003700380031003200360035003300300045003300410034003500350042003700380038003000410036003300380036004200460044004600350039003100390031003800310038003100380031003800390038003300390038003900300042003600330030003600380042003100350041003300310039003800340042003600300036003000330030003000370035003400320032003600390046003700330033004600450045003300320030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600300034000005500045000007500045005200000950006500720075000081FF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100330030003500300033003000460033003100300041003900300038004500300030003000300030003000330035003400390034003400340031003500340033003800380044003600330033004300430033004300300046003000390046003000310030003700350030003500430042004100390034003400310032003800320041003000410041004200440043004200420036003500430042003100380045004500340037003400370045003300440032004300410043003000380034003500330038003600340032003300300036004100460030004100380043003100410033003000360038004600310041003300430041003000300036003000330030003000430043003700450030003700450039004600390035003100370043003300340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600300038000005500048000007500048004C0000175000680069006C0069007000700069006E00650073000085FB3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310032003000450033004100300033003800320044003100440039003900420030003000300030003000310033003400340039003400340034003100350034003200380039003100410044004400320033004400340042003400320037003100310043004300350046003100450046004200460039003400300043003100340032003200370041003700380030003100300035003100310030004500300041004300440030004400330035004600340031004100360043003600420036003900310035003200320038003200380036004100300038003600380036003200380036004100320038003700310030003800320031003800340039003600330036003600390030004100410032003400310039003700380042003500310039003100360030003400350036003000430032003000350037004200310030003900350037004300320034004300420037004200450046004100460034003100390032003500360031004600430045003000420046003800370030003300380031004300370035004100310036003500360034004600350032003800430031003400330042004100340032003200460044003300420037003300300041003500390031003000380034004400420033004500460046003700330032004500340042003400460037003000430035003600320032003900360038003000300032003200300035004600460043003600360033003300390034004500340033003800460032003800320036003100340041004200370042003000300038003500360031003500410043003200460041003400310036003400370042003900450036003700380044003400340044004600430030003700370037003500430044004400360034004200420038003300410035004100360032003100450035003400420036003800360034003500310038003300390033004100380044003100310035003000300032003200350031003900440042003500340030003900320035003400410036004400410030003100360043003300350043003400430041004500450032003200380035003300300039003800340035004400340043003800330032003600410037003800310031004500350037003000320033004200390032003000410036004400330036003700390045003200450030003500450045004600350045004200410037004200360037003400310042004300410038003600370032004300440038003300310038004300440043003600460036003700310039003400430033003000440034003000320039003300450043003100440042003900360041004600440046003900330044003600360037003300430036004400330037003600450036004400350043003400370036004100310041004300410033003900340042003300440039003500320037004200330042004500340044003200350041004100420035004300390046004400380037004100440031004600340031003300350036004600360036003100340033004500370039004400460033003900410034003100300033004500340033003000430042003300360033003100340043003000320036004100350037003300310038004600300039003200330042003800390046003100420031003100370043003400320043003900350042004200300032003500420037003000450035003700360038004300440037003000440033004600460035004500370035003400340046004300300042004600460043003000320031004100370037003900300033004200440037003100370043004100360043003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360031003200000550004E000007500043004E00001150006900740063006100690072006E0000898736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003000460031003100310031003200370037004400410042004100420032004300300030003000300030003200310037003400390034003400340031003500340032003800390031003900440039003000340044003400380039003300300031003100430043003600370046004500460046004200340045003300370037003300310033004200360045003900390036003300360039004200330036003700350042003300340039004200300041003400320045003200440039003500300034003300440031003500340036003700390038004200300043004500410031003000310032004400320044003700420035003100320032003200340046003200310031003500360034003100370038003300340045003100350035004400380041003300410036003500380037003300340038003900410030004500380043003300330030003600440045003500440037003900430042003100430044004100390042004400420039003400440035004600440037004200360042003700430033004300300031004100350044004100360043004600460031004600460033004300460046003800370031004600380046003300300037003500460035003900360036004100460030004200380037003900330032004100390044003000370039004500370031004400390044003600440036004500340045004600340037003700370033004500460035003400330037004200370031004600380046003700320043003600360042004100350041004200320032003800390043003100450033004100360045003400450043003200300042003900340041004400330033004100390034004500360037003800330043003400380038003700320044003400350042003800410046003800350033003900380044003800310035003400330046004200340045004400440044004300360030003500440042003000410046004100390044004400350030004300300034003100320035004300420045003300390046003200440046003700330042004500320045003800410034003500320042004100330032004300310037004200330041003000310036003600340037003900380032004100460042003900350044004600440046003700390030003500410038004500420031003300360033004400380042004200360037003200330042003500320039003100330045003200420045004300460034004200420030003000330038004200380043004600430037004600300042003800310035004200330032003600300046003800460030003300330045003400430031003500380030004200340043003400350032003300410038004500310043004200320036003700380038003200370046003700420037003200300030004100300032003900350044003600340032003800430033004100310031003500310039003200300038003900430042004200380032004100350045004200320034004300390036003800380043004100300032003200310030003800410032003600350030003500350043003000330046003000420043003000350038003000340038004300460036004300460031003400430037004100420034003900310037004300450036003000320039003200440045003600460043003600310031004600310037004500460044003600320031004100330030003200300032004500320030004600360033003100390046003500460035003900350045003400340035003200320046003400300043003200460037003200360044003200430034003300440037003300330030004500430046003900320031003600360043003300350033003600390043004500320032004100300033003800310044004600450042004500340038003900370043003100390038003700350036003800370041004200360043003100450039003700410039003900340039003200440032003100390031004500300043004400390045003800360038003000410030003300340032003800360035003800330042003300370034004200460042004600330033003800410046003200360039003600340039004100370035003500420043004200420043003000440042004400300043004100440042004100460046003300460034003300450030004100370032003500410031003200330039004400360036003400450037004100380035004200430046003800440041003100320030003000300035003500370039003500420042003100440037004600430045003400340035004100380038003100340036003400320046003800300035003200330034004100360034003800320044003700410033004500350037004600330037004100360045004100350032004400360043003600420039003600380034003700450044003200370035003400420033003000390035003300340035003100440044003700300046003300390033003900370032003500460041003500330039004400450034003700420039003500390041003000460037004500310031004500300030003200340034004300380044004400440031004200320044003200450031003200420037004200300044004200420031003800300043004400460043003900310041003800460043003100340036003900330035004300430046004200450046003000410038003300360046003600410034003900320035004200350030003000380038003100420032004400300035004600300043004600310037003100310039004100330036003100310030004500460045003600320033003100310045003200330046003800340044003400360042004600350032004300360039004100360032003500380043004600360038003300360035003300300043003200300043003700320034003400360035004500310045003400300046003100370043003600310033003100450030003400320039003200420032004600440034004400360044003900430038004200460045003000300041003800410034004200430031003500320032004300460046003000310045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360031003600000550004C00000750004F004C00000D50006F006C0061006E0064000081BF360030003000300030003000300030004500300038003000360030003000300030003000300032004200330031004500430043004400300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200300033003000390039003500320032004600350033003000300030003000300030003200350034003900340034003400310035003400330038003800440036003300460043004600460046004600460046003700460030003600310041003000300032003600350041003100380033004100360041004600300031003000330037003900380046003100380045003800380043004400360038003700320031004200330035003900380034004500300036003000330030003000450033003700450030003600340032004300310031003900430036004200330030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600320030000005500054000007500052005400001150006F00720074007500670061006C0000866F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200450030004400350046004200390034004500430043003000300030003000300031003500310034003900340034003400310035003400330038003800440043004400390033004300440034004100300032003600310031003400380036004400460045003300380043004100330038004400350046003900310039004100360039003000380034003300390038003400360035003900310032004500340032004500380032003700450037003600340031003500310041004200320045004300300035004400330042003600460041003200440042004100380035004200320038003100320031003100300032003000390030004100440041003500410042003800300038003200320045004400320033003800380032003400360036004600410030003300370035004300360039004600360039004400330032003600390038004200310044003100300038003700410042003600450037003900430038003700460037004300300033003900380034003400430044004100340034003000460042004300350044004600330042003600370043004100310032003600370041004600350035003800450031004500410037003700450030003700460038004200330044003800320038003900410044003900380033003600300043004300350045003800350042003200430044004100310035004200360045003300370035004300430034004600300030003600310031003200310038003100360037004300410030004600350033003600420041003200370032004400390030003600410033004200460032003000440043004200430034003800370031004200350035003600340035003900300030003800420046003900300036004300360038004200360030004400350044003200320038004100450045004500380031003400360035003600380033003300310045003400320043004200310041003500460038004600310044003500380035003300310032004600340033003300320042003500380042003900310034004300310045004300420038003500340042004300430044003600310034003400380041003700330032003800340032003900440044003900310044003800370032004100460036003400420030003000310035004500360039003800310033004100310043004200430046003600380036004500330042003300310042003800340032003300340046003800380034004300310042003300300032003500310044003400320044003900330033003500380045003200300032004600370041003300360034004300380038003800410042003200410041003200320031003100460044003600380032003100410034003200450044003200380033004300340034004100300032003200310042003300430042003100390042004200410039003800340043003900430045003300430031003400380036003300360036003700460030004600430046004300310033003600460034004400350030004500450034003900340030004500330041004600300033004200310032003900330044004400450037003600440043003600350045003900300030003800330034003300310045003700390033004500410034004200440037003700350035003900390034003700340041003000430038004500300037003200370038003100350042003600350044004200390038004100310046003500450036004500360032003400370044003100440045003500370034004100410032003400430044004300450031003300390037004300440031004600330034003100390041003100440043003200440031003500440045003000380033\
-0042003800420042003200460045003900380046004500320044004600460030003600370045003200340046004300440033003400360031004500330046004500330034004100300045003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000736003300300000055000520000075000520049000017500075006500720074006F0020005200690063006F0000869736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100330030003000320031003300330042004600310043003600380043003200300030003000300030003100350042003400390034003400340031003500340033003800380044004200350039003400330044003400380034003200370031003100300043003000370046004600460041003700330045003000350041003500320032004400450032003000300034003800350034003300350042003800310034003600380033003600440034003100320034004200390034003900420035003300380033003400300034003300350039003400310030004600340030003100440031003100320031003100310031003400440030003500420039003100360042003400330036003300340030003600300035003400310038004400340031003100300038003500420035003400380041003400340031003800320036003100310046003800320038004100460031003700410031004600340044003000410041003100380033003200460046003400410036004200420045003300450045003700370037003700370030003700370032003200310034003300430033003600420037003100330036004200460038003400410043004600330034003500330030003400390031004200430032003900310042003200410042003100410037003300380038004200430039003500440044004300350041004100390037003900450030003800410044003100350035004300450042003000460031004200380043004500460038004500420034003900370033004300310031003500310039004500450042003300420033003300460045003300410032004200460043003700460036003600460042003000350034004300460037003900460035004100300033003100420030003500430036003400450031004100300034004300420045003500340035003300440037003300410044003800320036004300310045004300410038003000430038003000410036003400330046004300350034004100350037003700420045004300300045003100380035003800410036003100390031003200460038003800450034003400440032003100360030003700320043003800380031004300460032004200310031003000420043004200410043003100430037004400370033003900460044003600340039003600360038004300360041003600300045003000450042003900360039004400430034003200410038003300390046003300370038004400370037003600430039004100460030003500450033003000440039003800410033004100450039003500360032003400320036003800320030004500440032003500390030004400440039003500300046003100360038003400350031003400330035004300370038003700350033003600310043003900420046004300370039003900330037004400430031003000440038003500450035003100320045003100330031004100320046003300390039003300310046004400440045003400330041004100390041003300450041003100320034003800330032004100410032003400350033004300340034003300410030003600340041004400450033004500410035003600370034003700410030003400450044003600450034003100450041004300440043003000450046004200330037003100390037004400320030003100350030004400410030003400330042003500330032004500410036003400370036003400320034004400310031003000460033003200460042003800360036003100340031004200430043003800440043003900360043003400360035004400370034004200380032004400310030003200420046003900460035003900430043004400440038004500330039003600350044003900450031004400410030003100350042004600430032003100450043004100390045004400330038004100450046004600360030004200430033004300350038004300430038003400410037004300300046003500360030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600330034000005510041000007510041005400000B510061007400610072000081D33600300030003000300030003000300039003000380030003600300030003000300030003000330036003300340044004300370035003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003200310045003700320046004400350036003900420030003000300030003000300032004100340039003400340034003100350034003200380039003100360033004600430046004600460046004600460037004600300036003200430045003000440035003900440034003700300043003200420038004100330042003100390045004500390046004200450038004300340044003900410032003000360030003200320034004200440037004100380043003100410033003000360030004600320045003800330030003100460045004500410030004100440037004600450039003800380042003400300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600330038000005520045000007520045005500000F5200E90075006E0069006F006E000107360034003200000552004F00000752004F005500000F52006F006D0061006E006900610000820F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200440032004500440036004600330036004300370044003000300030003000300030003300390034003900340034003400310035003400330038003800440036003300360034004400300041004500460046004300460038003000300033003500430045004500350041003700310034004300350033004500360042004400310035003300360042003900350037004300420044003900380045004200440039003800430039003800350035003500380045003800310038003100380031003800310030003900390037003000340041003500360030004400340045003000350031003800330034003700300044003100450033003500370038003400300030004400300036003000300030004400370033003000410032003200440030003400320036003300460046003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360034003300000552005500000752005500530000255200750073007300690061006E002000460065006400650072006100740069006F006E000081D33600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310037003000440033003700310033003100460035003000460039004400390030003000300030003000300032004100340039003400340034003100350034003300380038004400360033004600430046004600460046004600460037004600300036003100410030003000320036003500410031003800330041003600410033003000300041003600300036003400360030003100380038004400420043004100310036004100330030004500330037004600300036003800360044003100430038003100420041003200300036003000330030003000360034004400360030003800310034004400410036003300300045004300360030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600340036000005520057000007520057004100000D5200770061006E00640061000084BF360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200320031004200300032003900370041003200310034003000300030003000300030004500350034003900340034003400310035003400330038003800440044003500440032003300440034004500300032003500310031003800380035004500310046003700420042004400450039003900340039004400340031003000380034003600300036004300340043003000430044003100430032003500320030004100330041003100320030004400350042003600310030004600460036003800360030003500350030003500420042004100300030004400440038003000380044003700360043003600360038004100310030003100350041003500420034003800360030004300320034004600300032003300330043004300440043003400420034003300340039004600370038003500310030004300460030003200390045004500320039004300320033004200340033004600330043004300410034003400390032003200320038003000300033003500320031004600300032003600300042003500360038004300390034004500360038003100450037004600370032003100440046004400440031003400460032004500370038003900440044003500380039004600330038003200300045003300360033003800450045003800450042004500420038004100460033004300310031003400410034004100450041003400330039004300330037004200430034004300360045003300310031004100350038003800300042003200390044003100320043003800380041004200330036003000340043003200300032004200340045004500430031003400340031003500390038003500300037003700450031003600390037003800430042003200320032003000450034003300390043003100350046003800350044003500430045003100420035004200300043003300440030003400440041004100330043003000430035004200350034003600430043004300320030003200420044003100350044003500360037003100310038004600440037003800420033004600430039003000460037004600390030004400300037003300380037003200300043003600450044003300410045003700440041004300370035004400450042003400460038004200360034003800440032003300420035003500460046003700380035004200350034004100460044003800300042003600430043004600390046003100420044004600330042003800310038003700430042004200300042003600300042004600380046004600370035004200430030003600350042003000380034003400300041003800350034003300390030004600440030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600350034000005530048000007530048004E0000195300610069006E0074002000480065006C0065006E0061000087A73600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900300046003100310031003200330038004400420038004500460035003100410030003000300030003000310039004600340039003400340034003100350034003200380039003100430044003900300033004200340038003500420030003100310038003800350042004600320034004400450031003800440031003000360032003400310041003400350044003400350032003200440036004100370043003600300034003100380043003000380033004100410038003800420034004200410039004100350032004500310031003400340042004100380038004100320031003400310041003500300037003100410038004100330031003800370030004200310034003200380042003400320030003600340035004300310032003500390042003000350041003900340033003300320034003400320044003100360038004100320035003100360038004400410038004600380038004300370041004100330041003000350043003400320031003200430044004600350042004100330035004400450043003900390030004300390033003300460045004600460033003900380037003800460041003300460031003800460037004500350033003000340034004200300039004500330043004200320032003400450041003700390037003900450043004500310041004200410035004300300045003600360033004500300043003300310033003500460037003800370045003100460036004400370044003800320041003000430045003800320043004100350031003400420037003200440039003000410038003500320033004500320045003400410037004300390032003400350042004500390034003400370031003900460034004600340042003200310044003000380038003300300042004400450033003600310036004400320035004600320041003900330035003500350037003800440036004200450037003000450041003700430033003900420037003000320039003800300036003600420042004500390042004400460032004600380041003000430038004600370038003400370044003500420041003400350035003500390044003000450038004200340032004100370033003900390033004200330042003700310045003200440044004100360037003700300038003800320038004500440041004400410039003700430034004600360030004600320030004300330043003800340039004400460032003000330039003000330046004400310030003800440031003000420044003900360046003800320042004300410043003400360032003300320042003800350037004600460030003700310042003100410034003200340043003400450046004500430032004600460032004600390046004100320039003200360033004500430046003600370041004200430044004500460034003700380046003100390032003900380038004100420044003200350039004200450030004600410032003600460033004200450033003000450031003400430030003500310042003300300042003600370034003400360034003400410037004500370037003300370033003000450041004600340034003300460042003300350042003100310031003500390031004300390036004300450030003300380039003000340031003200300037003800300044003700410032003300320036004200330034003100340044003500430031003000420041004500300046004200450043003100310031003300330046003000450042003900420044003800440036003100370044003200330035003100360045003600440043003500420033004200320043004600460041003400360038003000450039003600390038003100380045003000450032004200390035003200390032003100350035003500300042003900440031004500320046004200410039004300370044003000460043003900350035003300350045003700300032003500420039003000310035004600370043003600330045003800350036003600440039004300410038003700320043004400300032004200360042003600330039003300360038004300370036003400430037004200410042003700380035003600320041004200390031003400410035003300380037003100330032004100350030003000450037004500320031004400360042003600370032003300380034004300410037003200420039003300390043004100450033003500320046004300410044004600410032003700340044004600430039003400420034003400460035004200390045003500390046003100300033003400330043003000390032003500370032004100380030003200350045003300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000736003500390000054B004E0000074B004E004100002B5300610069006E00740020004B006900740074007300200061006E00640020004E006500760069007300008A6F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300033003700300032003700390041004300370035003000300030003000300032003500310034003900340034003400310035003400330038003800440039004400440032003500440034003800390033003700310031003400430037004600310045004600460033003600430042003300420044004200380036003700370033003200410043004500340038004200310041003000350044004100380042004400310030003900340030004400350037003100300033003400370030003400350044003600350035003800340034003500340032003800380042004400450039003400440034003600440038003700360041003100340032004100460034003600340038003200390031003100320036003000450031003600340031003700340031003900370038004100330033003700310031003900360032003000350038003500440042003800430041003300320042003400330039004300440030003900420041003100370037003400430043004400380037004300420041003600410033003100330036003600350037003600360045003700460038003700300046004500370037004600460045003400370041003000440046003200310046003300390046003500350039003700420046003400340038003700450031003200370045004400300046003400320042004300310038003800380041003500360034004300410046004600300031003000420039003400370031003700410034004100370044003100380042004600300036003300380044003200310038004300310031004600350038003400420045004200310031003300370038004200390045003300300038003600310039004400390045004500450035004500440035003300330046003800450043004200410031003800430036003800390045003200340036003400300046003100420031003400300039004600410043004200410036004200390031004500460039003400320034004400350044003800300032004100430037003100330039004300340045003100370037003600420042003300440041003500430046003600450043004400450031004500330043004200460043004500430035003600370031003500340038004100440030003500330033004300430035004200330044004500310030003000440043004600410033003900380043004400350042004100390041004400410044004300350036003000330030003600300042003500350041003000310044003000360039003000340045004500350046004300420045003500460043003200450033004400370045004100370031003600300035003200370037003700420036004100460030003700360041004300350033003500420041003400410036003600330038003100370039003900410032004100450037003900380039004400370036004600350036003900310036003500410038004100430041004300360034003600310036003100300031003900330043003900380034004300460045003700340033003200370037003800310039004500380033003600420032004500370039004200380034004600460039004500380036003700380035003000340034003500380045004600320041003000450045003600410045004400300035003700330032004300440032004200430046003200320037003700370041003500370038003800320037003500320037003300390035003400410038003500410044004200410038004100390041003700440039004600420038003700320034003800430046004300430035004400320044004200310045004600380041003600340039004500420036003800410032004400410032003400430035004200460031003100430043003700410032004200330044003400330037003800340031003900460033004300360033003300420045003600360042003700340035004500360035003100460033003600370030004100340036003400440034004300350045003500320032003300460046003400450043004400350033004500300042004400440041003200380045004500440032003600390044004500300046003200410041003900450045003000430041003300350034004500390035003000320038003900360034003900320034004600450038004400410042003500340038003000420033003500310034003700380042003400330045003200350037004100370039003600370039004100460038003200340043004100350030003400350030003000410033003200330037004300440046003300390043003800390046004200360039004200430031004100360036003200410035003000430038004400380038003700370031003800320043003100360030004600320037003300300030004300410037003700320038003700310044004600390032003200380039004200440034003300310037003500350031004300440035004100340043004300380038003800300032003800380045003500450041003100380043003300390036003000390038004100380036003700460037003000450030004600340032003200410033004500330044003000440041004400410038004100430035003600320041003100410032004100320030003200390042004300440038003600320038003400320034004200420044003900360045003100360045003100330037003900360045003200330042003300350044003900410030004400350031003000300036003100360032004200300035003000360045003600410030004200330033003300340039003200420041003200340038004600430037003800330043004200450035004300320041003400350046004500360046003100300044003200380030004600450038003900380045004200440036003900300035003800440039003100380034004300430032003700390039003200320030003000370032003300450039003800370036003100330036003100370037003100450041003700300038003400440042003100370046003400300034003700420037003400340034004400450041003900420032003000320039003300330030003900300041003600360045003200420031003200450039004500420039003000440038004200460039004100430042003600430039003700380036003700380033003800420042003200390033003700380034004300460031004500350037004600330042003000340039003200320045004100440036003100320031004100430041004400390033003400460038004200370046004500300030003200380042003500430041003200460036003300370035003600340031003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000736003600320000054C00430000074C004300410000175300610069006E00740020004C0075006300690061000084BB360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310037003000380030003800340031003800440030003400310036003000300030003000300030004500340034003900340034003400310035003400320038003900310042003500390033003300460030004200340031003600310031003400380037003900460039003700310042004100450036004500450031003000330031003800410045004300320032004100310033003100360042004200340043003600430035003600330045004300320046004400300045003100360044003900360035003300330035003800300043004600370033003300440043003400310031003100430039003200410036003100420030003100410045004500370032003100350037003500360033003500300031003600440043\
-004600370034004400390043003300410037003500330041003700460039004500340045004200460043004500310031004500440044003500450044004300360031004600320043004100340044004100360038004300360031004600410045003600410039004100360041003600330043004500440042003000330037003000310030003900390044004600380031004500330036003100350038003800430038003700380046004200380044003500450035004500430043004200360037003800340038004100430036004400350045003400310035004100420039003400300036004100300033003700330042004500320042003800310031003200390035003800340039003600330036004600360041003200330046004300310033004300320033004600450031003400440036004400390035003100310033003900330038003600420038003000330044003100410033003000450039003200370039003800460034003100330044003800410033003000310035003900340033003000450039003600360041003600430042004100310042003100410045003500320035003900350038003200300045003400300036003300420037003200340045003500360045004400380036004100460039004500460033003700330036003300340031003000360042003800420034004500350033003700460045003600330041003400440031004400420031004200360033003000320034003200420030003500380032003600420033003100380037003700410037003100460045003900320041004600310037004500370044003400360032003400450032003000330038004600300032004100410032003900430030003900370033003700440035004200460033003800390037003000450031004600330043003700440043003000310042004100420041003300430043003800460037004200430035004400380042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360036003600000550004D000007530050004D0000335300610069006E0074002000500069006500720072006500200061006E00640020004D0069007100750065006C006F006E000007360037003000000556004300000756004300540000415300610069006E0074002000560069006E00630065006E007400200061006E006400200074006800650020004700720065006E006100640069006E0065007300008453360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300033003400390042003700300046004400430046003000300030003000300030004300410034003900340034003400310035003400330038003800440036003300360034003200380033004100460036003900460030003100300044003900340045004200410043003600350036003800330035003500450038004300320045003800430031003500370034004200450035003000360036004100380037004500410041003800450032003100430045003400340039003400360045003300320043003000410038004300310041003400310039004400430046004100350043003000350032004200390042003200320038003300460037003700440031003600360036004100380037004600410036004300360037003000460036004100420030003000430033004400390041004600300032003000430046003500430046004400340031003800460036003700440031003600320036003600380033003000300042003200310030003500380042004400460043004100340030003600390032003900310034003300310032003700440045004200370039003400420039003300380035003600460038003000390030003300300033003000330030003300380033003000350046003700340037003000360030004200450045003800460032003800360032004600380030003000340031003100370033004200460031004200450036003500360038003900340042004100430035004200300045004500410033003300380030003300300033003000330030003300340033004100330044003400320044003800320041004500320035004300410036003000300036003000360030003600380036003400340039003100320037003000430030004100390037003100440031003900310038003100380031003800310038003200360043003800350045003200330034003600300042003700310030003600340042004200310046004500360030003300300045003400460041003000380036003700350033004300440036003000300036003000360030003600380036003100410038003900330042004300340032004100320035004300440036003000310046003800310035003700420034003300310039003800390031003200340036003300310039003100380030003000350031003500420033003200310032003400380033003000330046004200350030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800380032000005570053000007570053004D00000B530061006D006F0061000083CB360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300032004600310031003100350033003400320033003000300030003000300030004100380034003900340034003400310035003400320038003900310036003300360034003300300036004400460038004300460038003000300034003100380031003900310039003100380038003200390044004200340031003800440036004500450042004200430036004600300031004600340035003800360038003100450031004400320045004400320044003000430043003400300032003200360036003400300045003200460031003700310042004300330046004600460046003000430030004300310037003600450042004400360030004500300036003400360037003600350044003000350037003100350032003700440041003200300042004300300036004400420031003900430041003300330034003800380039004600320033003200440043003700390046004300380045004500310044004600420046003700460030004300330046003700450046004400320031004400420036003000310036003600340043004500440036004100330042003700310039003100380031003800310038003100380039003800390039003100380031003900390034004100340038003500310038004100450044004400370046003400440042003600430031003400430045003800300032004100430032004300340043003000430046004400340035003100450030004300420037003100460042004600320035004400420035003000300036003000360030003600300036003900360041003400370037003700370033003000300034003600460037003700330044003600330038003800460044004600300038003500320032003800330031003900320046003000390039003800460043003200370041004300380043003700340038003000310031003100340041003300300036003500330031004400300030003000300042003700370041003200390044003000320039004400360046003400390037003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360037003400000553004D00000753004D0052000015530061006E0020004D006100720069006E006F000086833600300030003000300030003000310031003000380030003600300030003000300030003000440039004200310035004300380033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000310030004300300033003100320032003400410030003300440030003000300030003000310035003600340039003400340034003100350034003300380038004400440044004400340042004600340041004300330035003000310034004300370046003100360046004400320041003000420031003700410044003500320041003600320034003100430035003000410036004100440031003400390031003000300037003700350037003000310032003000340037003100450044004500340045003800450045003300420033003800460039003000380030004500330045003400300031004400350035004600300043004600410030003500300030003400380037003000450032004400310044003100340035003100420030003100360042003500320044003900350035004100440041003900300033003400360044003600410041004500340046003900300035003800390030003800320037003800440037003700330037004600390046003700420038003700370033003800450032003200410035003900340037003400450030004100380039004400340030004600460033003900440043004200340043004200310038004400350037004300440042004200300044003600430045004100350043004100430037003300440039003900440034003200350035003200340041003100360031003600330037003000380038004400430043004600460031004500360045004200360039004100390038004300360031004200330044003800440037003300300041003700390038003700340041003600340031003600350035003400430033003000410030003000420044004600390043004500320044003700360045003600360043003300450032003300300037003100430034003800320037004300320034003500370032004100440033003100420045004300360032003200380033003400430043004100390041003500420032004200420042004100430033003600340036003800430043004600420043003700360037003400460034003600430032004100420039003800320045003200340043003500350035003200410031003900310045003800440033003200310034004600460038003800450039003700350046003700380042003600440045003500430034004100450042004300380037003800410046004200350043004400340042003700410032004200310039003200320037004200430031003900430046004100450037003900330045004400420042003800340033003700330031004300390036003300460030003300330043004400370041004500350031003500420031003600350039003500330044003100380046003100460045004400340038004100350044004100450032003200300039004400390044004600330038003400330044003500310030003000340044003200330036003800380037003700390043003800390039004600340046003600440043003200300042004100450031004600360036003500300032003300420044003800340046003400300030004100420045004600430041003200420045004200300032003200390038003100410035004600360037003600350042004100390042004100350044003700310039004600410030003600380037003200390033004100380032003400430042004500340038004400440031004400430030003400460035003600440038004300420046004300420038003200420032003600350035003800330041003600350035003400330041003800330036003000350033004400380032004500310030003600370045003800410042003400440037004300370033003900350037003800300032004500320038003000300042003800450044003200340046004500430032003400380046004600310039004600380031004200300039003100430037004300440035003600350044003300340037004400320030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600370038000005530054000007530054005000002B530061006F00200054006F006D006500200061006E00640020005000720069006E00630069007000650000846F36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320030003200430038003800310043003600350039003900300030003000300030003000440031003400390034003400340031003500340032003800390031003600330032004300380041003300370046003800420046004300300045004600330037003000330042003500300031003500330043003200340036003100360038003600380034003400440041004300440034003300370039003800380031003800310038003100380031003100360038003600330033003500450031003200330030004600390030004600450033004200300043003700420045003600340036003000380042003700440034003900390032003000310046004600460046003300330033003000330030003300320036003200380041004200330032003000370033003700450032004500310036003600370031003000360030004600410043004200320030003100360046004600300043003400330045003100380035003900420031003000440041003400300031004400350035003700430046003100350036003000360038003600350038003600460034004300380033003900390044003000300035003500450032004500390034003600320046003800370041003800310031003700340035004500430043003500350042003000360038003600380034003700410030003800370045004600310031003600320031003300450036003300300044003000330034003300350043003200440038003400430036004500420036003200300036003000360030003600300036004200310046003800360037003000430044004300300036003900460035003100430034003200340038003400310039003100380039004100330032003100310036004300310038004200300033003700360036003600300044003800330045003800350038003100340031003500450031003200440033003600300039003400330030003600360038004200370044004300390043003000340045003600320031003800450033003000320037003000310037003200460046003000460042004300440042003000430030003800310038004600380031004500310033003100310046003500350030004300360036003800320031004200450041004600460038003700320041003000360043003200300044004100360038003500410031003000430030004300300043003000430030003000340045004600450033003900340034003700390038004300320044004600370030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600380032000005530041000007530041005500001953006100750064006900200041007200610062006900610000866B360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300036003200460032004500450043003100440039004400410043003000300030003000300031003500300034003900340034003400310035003400330038003800440044003500390034003300420034004200300033003500310031003000380035004200460037004200330037004400390033004300380043004300460032003800380039003200320032003600300041003800320035003800380038004100440036003000360031003200370037003600370036004600450033003200460046003800340042003500390035003700360032003200320038003300360032003200320041003800320046003800430032003100380034003200360032003700340045003300390041004200380038004600440043004400440036004200360031004500390032003500390038003200320038003500410037003900430031003900330045003800360033003300380037003100310045004300410045003600410030003600320030003300390030003800450038003400300043003100300039003500330044003100390036003400390036004300390039003200340032003600340036004100330046003100350034004300300034003400360041003000340032003100300034003900440044003000320037003900440042003000350031003300410034003200430035003000410032003100300034003900450030004100460045003000360032004500360036004600330045004300320043003600450044003200460034003500410039004300440036003200460035003900320042004100450032003000300030003400420035003800350034004400410037003500390036004300360043004200460038003200410041003400310039003300380042003400380032003400460030004500320042004100370042004600310038003400360032004200320032003100440044003300460030004400450039003800430044003100350031003800420035003700330046003800320041004500300042003600460035003800430031003300420038003500380035003200460032003100310042003400330039003600420035004300330031003900370032004200440032004500450037004500310039004100440033003000380032003900440043003000340035003200300044003000360038004400430042003000430044003500340036003600390043004500440038003500300044003200430032003900360039003700410030004500410031004500450042003200330043003300310043004600380044004600330038003800310034004500360033003300310039004100440043003800320034003500320035003400330042004100460035004300420046003300460035003000310041003900450045003600420038003700360034004500420039003300330043003300340039004500440038003200370043003700410038004300420042004400360033003300460037003100460032004600300043004400390031003900310043004400460033003500380032004300350042004600430042004200310044003100300041003000300034004200340038004200360034004100450042003400430036003700320037003100310030003800330041004300410032003300380043004200410033004600310031004400340039003000420036003600430046003600450045003000460035003000370031004400340031004600330038004400320033003100460042003400460034003700430036003500450033003600390031004100360039003000430044003100330043003500370031004600460031004200460037004400320039003700460032003700390037003400410042003300440036003700460045004400460041004600460038003000360039003600310041003800360044004100430030004300360033003500440044003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360038003600000553004E000007530045004E00000F530065006E006500670061006C000083C3360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300032003800380046003700310041003100380030003000300030003000300030004100360034003900340034003400310035003400330038003800440036003300360034003900380045003800460036003900460030003100300037003300380031004600370041004500360039003800380036004500300033003700320042003600430037003200350046003600370037003100310045004600420044003000430036003800330035003500380045003800310038003100380031003800310030003900390037003000340041003500360030004400340036003000440032003000440042004500460031003900450038004200450031004300360037004200320045004100320030004400360036003200310041003400450030004400420031004600360036003800360031003300320046004600390031003800330036003300440031003000360036003600300036003000360030003600300046003000350033003700380043004200360030003200310046004500380039003700320038003300420039003500380046004500330032004200430046004600430039004300320033003000450046004200410032003400300033003000330030003300300033003800330041004400450034003400370030003600320045003900360042004600300043003500460032003900330035003900380038003100380031003800310043003100350043004500430031003300380033003900450046003000310037003300380039004200310038003400300039003400430031004600460031003900310038003100380046003600460041003500440036003400360030003600300036003000360030003700380046003500390044003900350037004100300036004300420046003200460043004300340043004100430036003000370030003600330045004200390030004400370046003800330030003100350034003900320032003800350032004200460033003300320037003500420030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073600380038000005520053000007530052004200000D5300650072006200690061000085CF360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003100370030003400320044004100450036004400350037003000300030003000300031003200390034003900340034003400310035003400330038003800440042004400440034003400440034004100430033003600300031003400380035004500310046003700340042003900330041003600320034003400350036004100360039004300340038003200380041003400380039003100330041004100390042003800380030003800320033003800370034003000330038004100350033004200370045003000300045003900430042004200300031003500440038003000350033003900310032003200420038003000300036003700300035003000370034003100410038003800320044003200350041003500340036003200380039004200340036003900390033004600450032003400430036003000350033003400380038003200310041004400360037003700380030003700300046003800370037004200450031003800410042004200450041003500450043003800310043003200320043004400300033004600440031003500370036003700330030004100430044003800410043003300450042004100410034004100320030003800420044003900430030004400450038003200430036003400420043003900320035003900340033004300380032004300350034004600390045004300410036004100360043003500380038004500310041004100410042004400300031004600320041003800380044003500460037003000350030004100340036004600330034004400330030003700460032004200310036003000430031004300310043003500440034004600310036004500300044003900330044004500420030003800310041004300360046004500300045003700300034003200390037004200380038003900440044003900450034004200380046003500370037003300430042003200420031004200330042004500380032003600430041003900330038004300350036003500320034004300420034003200410046003600430031003300420034004200420042003100310041003400370045004500370038003200320032004200460034003800440033004300410035004200310038004600460038004200300046003000370034003800440035003400340036003400390030004500410042004500390033003400410032004500460041003100320046003100390031003400380043003000320036003200450030003100320046004100340031003200430033003800370032003100350039003300440036003300330039003200360042004600320036003000440042003700430037003500330041003600380041003300300036003500440042004400310041003000420031003600360031003100380034004500310044004300460042004300330043004500330042003100370036004300450037003800460037003000340044004500310041004300380043004400310041004600420041003700330037003600380043003500420035003600340033003000360031004300380046004200\
-440035003300350046003700460035003300410035003900300034003300420034003700380037003600340042003700430041004300390031004200430046003200320046004600460046003200420039003200450036003000370044004400380032003600370031003100450032003200310039004400300037003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360039003000000553004300000753005900430000155300650079006300680065006C006C00650073000085C736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100350030003100300039003100410038003400350041003600420045004600300030003000300030003100320037003400390034003400340031003500340032003800390031003600330036003400420030003600460046004600430046003800300030003500340038004600300046004600370041004600330041003800450033003100410030003300310033004400330037004600310031003700340042003900390046003700370042004500440046003700390035003800370039003900370038003100450031004600370033004600310035003600430037004100310039003100380031003800310038003500380037003000340039003100430032004300420044003700440038003700380039004500390042004600300035004200410046003800420042003900350041004600380045004200430035003900460045004300320038003800380031003800310038003100300042003900370035004500390043003000360036003700330039004200430033004500410031003200430046004100300042004300350044003000460046004200460046004500370046003700420035003400370036004600420044004300430046003000370033004600360043004600300031003900380038004400330036003000300039004600450035004600360046003200360038003400330046003400350046003100320032003900320044003700380039003300320039003400350033003500330046003300320045003800360043003100450038003400310034003000410043004400370033003900330035003300350045004600300041004100370041003500330044004500360037003100370034003900340036003100360034003600370035003700340031003300310031003800330039003000380038003800460031003300410042004100360031003000430030004300300043004300410033003000330039004200380043003100430038003400310038003000430046004500420046003800300043003400330030003600370030003800330036003100340031003800300043004400450042004300340031003800460036004600320043004200460042004200370032003700310045003500460037004400370043004600380043003100430035003400460043003700310046003500440038003300310038003900430045003500460030004600410038003400310032004600460034004600420044003800370030003500420037003800460043003000420043003800450043004200330030003700340030003300360045004200440037003900430034004600370045004500460042003600370044003900370046004600460046004600300039003300330033003000330030003000380043003300320043003600320039003400460030003600420037004300370044003300440045003100430043004100330045003700460035003700370046003900330038003500350044003400310039003600310038003600420044004600410046004400340044003100300038004600300031003000340030003100450033004100430038003600450034004600350042004600310039003500380044003900320045003200390038003800330030003500440046004500460031003800450038004200350034003000330037003000300031003000300044003900390042004400310034003000380035003900420046004400390039003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360039003400000553004C00000753004C004500001953006900650072007200610020004C0065006F006E0065000081D73600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003000320034003800360043003700450044004100420030003000300030003000300032004200340039003400340034003100350034003300380038004400360033003900340044004200360041004600350039004600380031003000360038003000380039003100360038003600380045003100410038004300300032003100380046004600460046004600460033004600310041003700390034003300440034003600300034003600380036004100320036003300410033003900310033003700340034003000440030003600300030003900380043004100300038003500420039004500340045004300370043004400300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000737003000320000055300470000075300470050000013530069006E006700610070006F00720065000084933600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310032003000310030003300300045004600390042003800360046004100310030003000300030003000300044004100340039003400340034003100350034003300380038004400360033003300430032003700410038004600360039004600380031003000360038003000300039004300360036003000310035003100370036003500350030003900430033003700390031003800310044003700440031003900410038003100380039003900330039003300380031003400330034003500380031003300410030003600430042003400440036004500360033004600380037003600450035003300410043003300460037003000420035003700310039003300380046003400330034003100380030003400340033004600430031003800350038003800340030003400320039003300330039003800390031003900350038003500380031004400370043003100390041004500310043004200410031003100330030004300440032004100440039003500300043003300460032004500350044003600330037003800440045003300310038003900340031004200410042003500390032003800310039003100390035003900350032004300380033003500390031003800310038003100380031003800460045004600460046004500430033004600300046003700460044003700420030003600310036003300310036003100380036003600370030004400440044003000430030003200460045003900450030004300440046003600460044004500360031003700380042004200360041003100330043003300460046004400460042004600430039003700370033003100300033003000330030003300430033004400330043003600350045003000360042003100410043003400340030003600380036004200460037004600310039003900380033003800330039003100380039003800350038003500390031003900310038003500390039003800460030004500390043003500300042003100380039003100350033003000350039003700410031003000450030003300420042003800410032003200430033003900370041003300410037003100380037004500330046003700460043003900430030003400300034003100370041003600310037004300440041004400300034004400390033004500340043003600460038004600460046004600370046004400410041003600450033003500310038003300340037003000440038003600300033003000300035003000360045003300420038003900370045003900360034003800310035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370030003300000553004B000007530056004B00001153006C006F00760061006B006900610000861B360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003100420030003500460033003500330030003400340038003000300030003000300031003300430034003900340034003400310035003400330038003800440044003500440034004200460034004100300033003400310031003000300036004600300036004600430044003500440037003200380039003800380041004300340031003200320030004100360041004300340039004300410032004100440038003500380032003800350032003000460036003900360038003200380035003800460045003000320042004600380030003600370036003800320038004100440038003800380037004600370041003800420032003800320034003100380043003900310035003000410031004500300038003200320034003400320033004100340035003200310033003800330032003600370042003100450039004500450034003900320042003100390033004200420038003800450030004100320032003900460043004200410038003100450031004200370043003300430030003200430032003300320032003400320030004200440032004400360030004100420034004100350042003000450032003200440031004100410046003300360045004300380042004300420032004600340044003500410036003200300038003600410036004600380046003900430034004300390045003500380043003600330039003900390035004300320037003900330045004200350034003400390041003600430039003800430038004500390032004300390037003500320041004100450036004400390033003600430031003400330036003700350046003000460039004300380043003600420034003800330030003900300030003800330035004200410042003000380043003500300037003900300033003800440043003400310037004500370045003000390042003900450042003000370043003400330043003700440033004600380039003600460043003700340043003500350041003100340034003300390044004500460033003000350044003400380035003800300037003500360032003400300031004200310039003400360032003000310030003900300035004200340033003300330035004300410032003300300031004100360046003000450034003400450041003100340042003500460042003400370035003800410039003200430044004300350032003100390032003200440043004600390033004200460038004100380031003800340032003500350036003900340037004500360041004100380032004300350044004400300041003900320033003900300037003800350036003700310037003800360044004200320044003000440033003300340043004500450046004200300045003600340033003900350045004300350044004500320044004300330034004200420030003000330046004400430045003100330043003600420041003800300030004300460035003400310044003800330035003300390044003800450034004200410030004600360036003900430036003300370044003700430030003100390042004100350031003800360036003200330036003500410043003500380043003700440030004500450036004500450034003200370036004500380036003000310038003000300035003500350033003800330033003700330038003800390043003600350035003100410046003000410036003900460034003500420046003800320046004600320046004600460045003800410030004600350030003500330041004200330042003500320036003500380030003200390030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700300035000005530049000007530056004E00001153006C006F00760065006E006900610000838736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320030003200320036004600410034003400380039004500300030003000300030003000390037003400390034003400340031003500340032003800390031003600330046004300460046004600460046004600370046003000360031004100300030003200360037003400380031003700460046004600310039003100380039004500420043004600420043004200460030003800460034003200450042003500380044003000300035003600430036004100350046003300300033004300460046004600430038003800340031003900430034003700390036004500310034003400410042003200340046003900300036004100460033004500460035003000330034003500340030003400360038003800390031003200310043003500350035003800370036003100430037004400390043004600300043004500380037003200320034003100390031004300330036004600390033004400380041003800300041004600450041003100460038003600370046003000430030004300300043004200460037004500460043003600320034003000390037003200330043003900360030003700340038003100440044003300370046004500330032003300430037004400460035003900340045003100450041003300420033003600300036003000360036003600420032004300440043003500330034004600380030003700330033003300420043003300420039003800460045004300310034003100390043004100430030004300300043003000430030004200320045004100430046003000320043004100340043004300300030003100310038004600460033003300330030004400300032003700310044003000460037004100380033003000310039003300390044003300300036003600450038003100450031004200300031003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007300039003000000553004200000753004C004200001F53006F006C006F006D006F006E002000490073006C0061006E00640073000085DF36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003000460031003100310034003300380038004400440034003500320039004300300030003000300030003100320044003400390034003400340031003500340032003800390031004100440044003000330031003200430030003300360031003100380038003700460031004500370046004200370041003600440043004100340032003800340039004400340034004200420044003400320030003000360036003200360042003900380043003400320030003900370031003800380039003400350036003200310030003200360038003900440035004300340036003200310034003300310037003400430030003600320045003900320041003900310038003600360038003800380035004100360038003400340041004100380041004400380033003500410031004400350031003000390032004400330042004200440037003400300034003500350041004500320041004500460031004500450044004600390033004400460046004600350033004600450044003100350044003300310046004200440041004400380033004200320046004600320046003000360043003600310036003800430044003400380036004600310042003400370042003900320032003700370038004600310036003600450034004600320039003600310033003800370043004300360034003200370034003000420039004600370041004300320032003800330042003000450034004200450033003200310045003200430037003700390045003600330037003600460042003000430035003600310037003100410043003900330036003400410036004300300044003400440041004100350045003700450030003400410032004100430038004600450036004400330033003000410033003300320031003700450039004600430036004100370031003500340033003300440041004400310043003600360030004200390034003500450036004300300034004100310036004300380042004300370036003000310030004600390037004300360032003000300042004300440039003000450038004500320038003900360032003700340032003600430041003700450046003900390038004400450035003300430030004200410035004300410041003000330030003100330031003200450044003600410045003100450030004100320038003800440046003500300030003000460034003800370039004200340038003500440039003500420030004300410038004500360042003600310046003500310039003000310034003300420033003300450031003300320031003900450043004100330033004200370037003100380044003400460032004200360032004400330031003100390032003900390030003200390033004100420035003900440037004300320039004100360035003900380030003900360039003000380036003800300030003500450041004400300046003600310036003300340030003200330034004100310038003600430034004600420042003100360044003600380038004200460030003700320042003900330030003700330041003400450033004400300042003700460030004300350037003800320046003500340043004600450033003500460043004400460043003100320046004500380043003900340045004200370044003400460033003800370037004600440044003300420036003300410046004200370037004500390042003700310032004100300034003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370030003600000553004F00000753004F004D00000F53006F006D0061006C00690061000083933600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310033003000450032004200320030004300420044003300450043003900430030003000300030003000300039004100340039003400340034003100350034003300380038004400360033003700340045004300420043004600420039004600380031003000360038003000380039003100360038003600380045003100410034004300390045004300310046003200430032004100430030004300460032004300320041004300440034003300330039003800380044003800350039003100380031003900370038003300380039004300310034003100380033003800370043003100340031003800330038003700380031003900370038003300380039003800310038004400380035003900310041003000430031003200430038003400310034003700300042003000330032003300310035003400370038003800390033003200350038003200380037003300330031003300300033003000330030003300300041003800340042004200300033003300370034003600430037004200430044004600300045004200430046003500460043004100350043004600430045003900460042003500460038003600300039004200420044004600330030004600430046003900460037003900460045003100430046004200460046004600300043003100330037003600420046003600310046003800460034003100440042004600410031003400340042003900390038003800310038003100380031003400310035003900380043003800440032003100360046004500390033003300330038004600420044003500410037003300460044003400330031004600380046003800390044003600460043003400320038003400330030003100300033003900460044004300380036004200460043003100300030003000360041003600320033003200350041003100430037004600370038003000300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000737003100300000055A00410000075A0041004600001953006F007500740068002000410066007200690063006100008867360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300041003100410030003300300032004500390046004100300042003000300030003000300031004300460034003900340034003400310035003400330038003800440042003500440034003500460034003800350033003600310031003800430037004600310045004600330039004100450046004400370031003300420045003800350034003900360030004100360044003600320030003800380045003300390031003200340034003800390031003200310035004300340030003400390037003700460045004500340032003800410034003400310044003200320030004100340032003500440031003900370039004500310038004400430031004600300041003600300032003200460038003400320038003200380042004100310032004300310031004200340031004500430041003600320045003800410041003100410042003900430031003300340044003900390038003800350044003800380041003100410035003200300046004500390039004400420043004500450039003200320037003600340038003100310033004300390045004500380042003900370042003700460033004300370043003700380037003800440046003800370035003700360030004100300035003500300031004200300031004100340044003000430044003700440046004300350037004600430035004300440036004500360030003800300041003300320046003400310046004500410035004400320034004300330035003200350038003300340039003400350032003000390045003400430033003200420039004600320039003500450030004100460034004400370043004400440046004400440038003100440046003900430034004300320042003300390030003400380045003800380032004300350031003900360046003900300035003200450042003900450031004100420043003500420038004400450030003100440045003900360037004200430044003000340039004500450043004200300039003800430039004500350032003700440031003300450046004600430033003800310043003700430035004400420037003800440044003500300034003900460046003600330032003900310031003100380038003200350045003200340043003200430038003500300038004500460045004600440032004400380046004200310038003900420036003400450037003700380033004500300034004200320041004300310039003100360030003000320035003200460034004200360034004200340043004600430036003600350037003700300045004500440041004200310045003100360030004600360043003600410034003300340045004200410043003400360038004200330039004600340036004100330043003400430046003200370038004600380038003400370042004600360039003800370035003300380037003800450035004200360036003800360046004300310032004300330044004200340035003300430044004400370030003200320032003300410038003800440046003700410045003500350046003200440043004400370038003600440044003600320042004400330038003000430045003000370032003800380042004300370041003200380038003100430042003400310036003700440034004300330035004100430043004100320030003900330041003100370030003600330030004100340043003100460032003800\
-420032004300320045004400390032004400330038003400330035003500420041003600300046003100370034004500300037003200380038003400430030004600360035004200300036004500430045004100360033004100350032004100450030004200380035004600460037003800430037003000360038003000420046004200370041003200330036003700410046003600350036003100340035003100380030004100460036003500390043004300380045003200390036003200360035003800420043003500330036003500320032003300340039003200430044003600430041004500390042003900420030004200310035003200370044003000410036004500320033003200430032003300440030003100440036004400460032004200440034004400430037004500410042003100390030003500310030004300320036003300300035003400410035004200420034003800340042003900370044003400390030004400330033004300430045003900330043003600420042003800340046003600350041003600390037004100450030003700350033004300430037004300440045004400300030004300410041003100330035003700340034004100450039004600340030004500420041004500370041003900390045004600300044003700300033003800320037003700310041003300460045003800440032004500310034004300300031003000390033004600460033004300350030004500410037003700360042004300380032004200410037004100370037004200390041003000460031004600420046004500420030003200350033004600350031004200300033004500460039004200440030003700310033003500350044004100380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073200330039000005470053000007530047005300005953006F007500740068002000470065006F007200670069006100200061006E0064002000740068006500200053006F007500740068002000530061006E00640077006900630068002000490073006C0061006E006400730000894336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100300031003700330041003000430041004200390030003900340037004500300030003000300030003200300036003400390034003400340031003500340032003800390031004100350039003200430044003400420039003300300031003100430043003700330046004300460042003300360037003300440039004200430042003200300042003700390034003900340036003200430033004300390036003800350041004300430036003600360046003400430032003700310035003100440038003200450038003500340037003900430039003300410046003400370032003500390046003500300046004400340041003100350042003100340034003100410037004100340038003800300045003100310033003400340046003100440036004300460034003200320037003400380038003800410036003200420036003700340038004300380041004400430035004300360041004400330041003600410045003600440045003500460036004300430039003700360044003400460030003700360031004600360044003400430035004500430037004200460041004600310046004200460032004600440046003000450033004300420034004600380038003500430042004500410041004500410045004300300045004100450033004300340042004500330046003700300037004600310039004400370034004400330037004400460037003000430046003700340046004400440045003100450036004200440031003000420045003800330030004400390043003700360041004600340031003600370037003700450030003300430046004500390038004400460036003500390030003800420045003800320035003900350044003900420043003900450033004600320035003300340033003500350044003500320042004200330044003300350031004300360039003200430041003100450046004400380034004200360034003500430036003100460033003000390032004600380039003900450030003000380045003100460035003100370034004200360034003600360045003000460043004300440033004400370031003700320036003100410039004400440036003800340035004400440036003400390045003600310037003200340033004500340044004400360046004500300044004600450045003800370036004100420039004100340044004100390038003400330032003300340034003400390035004300420030003500330041003900440043003600370032003800360044004300390035004200390042003900370039003000330041003900430034003200380046004200450041003500450046003200330036003700460030003800390044004200310039004100350038003200430035003300460031004100350032004600440045004100330030003800380032003800300043003500420032003900360044004100420039003100340037004100380042003100390045003500430032003300390044003600460042004300450042003300390038003500330039003800310041003900420036003200340036004100430034003600350035003500350030003800430035003200420043003100370043003100450039004300410044003600440031003400340034003100330041003600360046004100440038004300370045003000440036004200380045003100300037004200350033004200350035003800420037003300420033003000320045004500340042003800330031003200380037003200330044003600320030003000450030003500410035003000450035004500320037004200310033004100360042003600330036003300360041004400380033004600450044003800410032003200360036003800420035004500370034003900370044003900460034003500410045004300390041003100320038003500390035004100420036004200430034003000310030003900360037004400410039003400330039004500450032003500360045004600300034003300440034004600320037003200380031003600430042004200340045004600310034004600300037003400310045003600330032003000390043004500340035003500370030003100430042004600350046004100340041004200360042003000370044004500460041004200340030003600360043003300360031003700440038004400380039003000340031004200360033004400450031004200300036003300300046004300460030003300300036003500340042003500300030003100380039003700330041003800360042003300440041003800450035003700320030003900420041004400380038004100370035003300380046003200430035003700320033004400390034003600390038004600450042003000390046003600340046004300310031003600460035004500440037003000330034004200310046003200320046004500320042003100340032003000390033003200390033003100390042003800430041003300340034004600420031003900340046003600460041003500370044003500370031004400320045004600420033003600340034003700310046003900340036003600390033003500450030003600430035003600340036003100380046004500380039003700350037003700380031004200310043003100300030004400310043004600300046003900310036003600350034004300410036003500430046004600460038003100300031003700320034003600310033003800390045003100330032003000460044004500420035003700320041003000320035003400410031003500370033003100410037004600350035003100440041004600340034004200460030003000440039003000410042003600300033003100340042003100420036004200350030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700320034000005450053000007450053005000000B53007000610069006E000084CB3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310034003000420031003700320041004300330045003900380036003200460030003000300030003000300045003800340039003400340034003100350034003300380038004400440035004400340034003100340041004300330034003000310034003800300045003100460046003200350039003300360039004300320031003800390032003400440030004200300035004200310033003700420030004200380035003200410038004500380033004400420043003800340038003700370032004500350031003500350043003900370041003200320030003100360031003700420041003700300039004200320045004100410032003800330034003400360036003200390042003900360034003900300046004400300031003600380043003300320030004200360037004600390031003600440046004500320037004600420043003900310039003100330039004100380037003100460030003300430031003700410038003500330035003800320035003400370037003300320037004200300044003400340033003700360033003600410045004100430038003700460036004500430041004600360030004200350036004400350038003900360030003100380046003200330034003300380045003200360044003500310035003200370036003700420033004300360046003000340036004500330042004300310030004500450043003700430032004500340036003500340035003300390034004600350038004500450046003500420038004200390046003500460046003000450037004600370046003400350041003400440032003200370030004200330034003100440037004600340030003900430035004500440032003800440030003600450043003000450046003600340033004600380046003300350035003500310036003900380033003700440030004600420039004200450043004200390038003300450035004600350031003100350031003100370036004400350030004300440045003600380031004300450046003500420031003600430042003000350042004400410034004500300044003000390034004400340031004600330033004400340037003100310042004400390042004100380044003000360042003000380034003300450037003100320042004500330046004300430032003500300030003400390036004100450036003400330043004200430038003100420034003900420043003100460032003700340044004100370031003700320044003200320041003100460038003700320045004400430037004600460038003500370041004300300031003600340044003800340031004200430030003700460045004200340034003800300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000731003400340000054C004B0000074C004B004100001353007200690020004C0061006E006B0061000086F736003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004600320037003000380046003900310038004100390044003600300030003000300030003100370033003400390034003400340031003500340032003800390031004200350039003300340042003200460030003300360031003100340038003600390046004300450033003700330033004100360031003700360044003500440035004100340035004500390038003200310030003100360031003200360043004500430043003400430041004400450043003600450035003600460046003800300033004600450030004300300039003000420031004200300039003100420031003600310036004300320041003600340032004100320044003200420038003800350038004100360042003300340036003400410032003100440036003600430036003300370031003600440035003400410033003700330032003200340044004500440035003300390045003700370044004600330045003400320034003200370032003700320030004200330037003800320046003800450041003000410041003300300031003200310044004100460044003200300034004300300031003300300031004500430046003200420037004500460034003700300044003600310031003700440035003700340031003500390041003500370046004100360041004300330043003500430034003000440037003300340046003600360041003500300039004300310043004200340038003800380041004200440044003100360030004500350036004200420046003800420030003900350031004600380031003400360044003400410031003700370045003200380031004500310045003900360042003700450034004500370045004500390037003800420044003000330041003100340041003800340032003600350031003800440038004600330041003400460036003800420032003500360037004200310032003400450042003700350032003000300041003800370045004300300039003600410039003000310044003000330036003600300035003200320041003300360033003000330038003500420032003000440045003600450046003100350041004400340037003900370046004400350032003800350045003800340042003900430046004300350037003800460042004300410030003100460045003300360041004500410041003300310046003900380045003600360042003800370038003100320031003400340044003700320042003900440033003800410046004200410036003100300034004200350042003600340043003600380041003700350035003900350046003100420035003700310035003800430044004200420038003600450038003400360034004200460034003900320034003600310033003300420039003700300038003400410032003500360030004500390044003500420045004200460043003300420044003800320045003000390034003600360037003000410043003400440033003100360037004100430038004300350032004500410039003300430039004500340034003800390037003500390036003700390033004100380042004600430031004400350043003700450044003600440039003500460043004100370030003900370038004200440032003900340042003600430038003200450036003500390038003900380043004600420033004200460044004300380044003100450041004300330046004100410032004600420030004400300032003400380041004500410037003100390044003600440030003600320030004400310032004600330038004400390036004100340033004100380039003200460043003600360030004100320033004500430037003200370042003100380043003700360038003700340037004500300037003100450039004100420041003200310042004600390031004300320042003100320041003800460037003200420045003900440041004300370039003800350042004400390036003500410031004400380043003300390046003400380043003300460030003200310030004600380041004600430046004600420030003400380032003100460038003500380041003400460038004400370046004300380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700330036000005530044000007530044004E00000B53007500640061006E00008423360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300031004600330037004300430030003400380046003000300030003000300030004200450034003900340034003400310035003400320038003900310036003300460034004600370044003500460042003500460037004400380043003800440038003100450033003200460030003300350035003000310044003300340036004400350044004600300043003500310037004500440046003100390045004500300038004600450041003300410045004300310030004300300043003000430030004300370037003000340046004600330031003400340046003900370044003600370044003800410038004600410039004200360041003000360033003300330032003100340036003900460045003400370031003600460030003600340035003200370038003300440039003100440031004500450031004500330037003200330030004200340035003500450036003000340031003100370044003800460045004500460038003100450038003600330030003900350036004400310045003500420031003300440030004300330041003100320041004100360034003100420043004300380034003400440046003000430041003800420044004200300043003800450044003300310032003100380035004500370044003700390034003700350044003800330037003500320034003500340031003900460036003600370032004400360030003100300045003300310031003200320044004200360030003800430033003000450036003700390046004500460046004200350044003800460039004200460046003700390038004600450046004300410037003500320031003800460046004600390043003700430030004200300046003700300035004300330039003700410042003100460034003500420046003300300033003000380038003500320036003200320038004300320045003000330037003300460031003900310038004200360033004400380035004400300035003400300033004500450035003200460046003100390035003800390038004600450033003300330030003300300035003000310035003000330030003000410044004200350035003000410036003300460042003500410036004300340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700340030000005530052000007530055005200001153007500720069006E0061006D00650000844F360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300031004300410045004300350035003500330035003000300030003000300030004300390034003900340034003400310035003400330038003800440045004400390034004200440030004500340031003400310031003000380035004200460044004400320042003500430034003100340032003800460030003800310041003000440038003900370038003000370036004600450030003200350033003400320032003600410030003500340046004500300038004400370038003000320038003900340032003800420042003800370034003100410046004600350037003600320035003700320031003100340030004100420042003800390036004300450037003500340033003300430039003900390033003300320037003900330039003300310031003700340032004200310041003000370039003000320045003400340039004400300041003000420041004400420035003900330035003300340034003800320046003600360030003600320043003500390034003700370030003100380030004600320041004300380043003800380035003900420041003600310034003500340043004400360046003700410030003000350043003700360039004300410043004100340037004300340034003400380038004500350041004500430038004200380032003200440033004400430030003100370030003300460037003900410038003800420032003400350043004600420042004600300039004100330032003100440042003500420045003200390037004300460043004600340035003800350030004200450042003600310044003100330038003600360034004300340035003100380046003800360043003400360046003900370037004200460031004400450035003000390038003300450046003600450043003100430036003300310039003000410038003100440035003800460035003400420030003800300046003100320044003500320033004500370037003900440032003300380032003300310036004100440043004500440038003400340039003200440031003900420035003400420037004100380046004100410043004200460030004100420042004300410042003100460038004600460038004100310037003100450031003900300031003300440037003500360032004200450030004500350042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370034003400000553004A00000753004A004D00002D5300760061006C006200610072006400200061006E00640020004A0061006E0020004D006100790065006E000007370034003800000553005A000007530057005A0000135300770061007A0069006C0061006E006400008817360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300030003000450030004200320046003000420032003000420041003000300030003000300031004200420034003900340034003400310035003400330038003800440042003500390034004200460036004200310033003700310031003800380037003900460036004600370032003300390043004200310039003300390038004400330044004600300038004300420034004200410038003400390036004600360033004100340038004200370034003000410038003800420044003900320032003400310031003700340031003500430038004200390034004500450036003200310036004500370034004500300045004500320031004600390030004300310043003900410035003000440031003400320034004200350046004500350038003800410035003800300037003200390032003500450041003600320037003200330035003800310038004200320031003200310045003900350044003700420042004400350043004500450031004300410034003800350032003200410038003000380046003700360045003200460037004300440045004500370046004400460030004200450032004600410046004300380044004400370046003100390031003200340031004300340041003200380030003000320034003800300042004400330045004600320032003000310038004200370036003300390031004500430039003200380043003400360041003300320046003900340037004600300035003000390036004400390039004100330035003400300042004600430034003600320041003100430030004600450043004500300045004300440037003200390039003700300033003000460038003700460037003000330044003900330045003100440039004400310035003900320036003300330037003700310038003100450036004500460031003600410046004400330039003400320030003800450043003600360039003300380046004300420043004200460034004100420044003500350046003400320034003500320031003300360033003600340036004400300045004400390045004400340043003600450046004300410046003200450033004500330032003400350034003400320032003400360033003800340033003400330035004500320046003300410043004300310030004200320037004300310045003400430034003100350043003200340030004100320044003300410045004600310043003300460041003800450045003300330038003700430036003900330034003900380042003800350044003400340031004100420037003300380042003800360038003300330035004500420038003400370036003000300046004600310046003700460036003700450037003700370043003300340037004600380031003500410036004100390045003800350044003100320036004200450037003400380036003600320044003500340035003500350035003500330034003400440043003300460033003300430046004100460044003300450044003900360043003900360035003200410039003800340045003700370039004100340044003300360039004300450032004200330032004200420030004600410036004600310030004600\
-31004400440045003000370044003700340039003000350035004400430045003600440044003600300031003900300038004500330042003600430042003700410037004600380039003400420041004300310042003500440037003600460035003100380033003000330031004500310039003000360041004200380030004100450045004200420038004100450038004200360035003500390031003400380042003400350034004300440033004300340037003500350044004500340037003800390043004100460032004200320042004600340044003600310043003700430032003100410038004500360036004500410032004600350031004100440043004100320037004500440041003700310032003000300034003600360035003200450037004500410037004500450042004400340038004300390046003700340033004100370043003300330034004400310032003800390030003400390035003400410038003500370043003300450038004600440044003600410042003100420044004200340043003400360030003600330045003300340034004400420035003300350032004300340037004300300046004400350042003300460046004200450033004300300030003400460039003600460039003300300033003700430037004100450045004200370032003500390044003300350038003900430039003900410031004600350032004600350037003100310044003500310044003400420034004600390042003000460041003300450030003200320042004400410039004500350032003200300031003400370046003600380034003700450030003200440032004200450042003100360035003300340042003200420035003300410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700350032000005530045000007530057004500000D530077006500640065006E00008333360030003000300030003000300030004500300038003000360030003000300030003000300032004200330031004500430043004400300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003100380032003500450033003100300037003700340033003000300030003000300030003800320034003900340034003400310035003400330038003800440036003300360034003800380039004500460039003900460030003100300042003900300045003300460042004300380037003000320046004100330038003700380031003800310038003100380031003600310046003900330035003300440038003600440038003200440041003100440038003900340045003100300034003400430032003400410039003100450033003500390038003100430043003000390032003600410037003000300036004100420038003400310030004300370037003700330038003500420034003500460030003100440030003300320045003700350042003800300030004500330039004600380042003600320035003800350033003000350041003500380030003700360034003100390031004200390043004200310046004100420038003400310030004300370037003700380036003500360042004200350044003000430030004300300043003000430030004300410037003900460043004200330030004300430042004200360043003400430039004100430031004200330032004600390038003600300039003500390030004500330046004200300038003300370046003800430045003700420032003100300036003500430045004100370030003800310041003100390037004400430038003600390045004300310030003000370034004300440031004600310033003700410034003800390030003500340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700350036000005430048000007430048004500001753007700690074007A00650072006C0061006E0064000082DB34003000300030003000300030003100340030003800300036003000300030003000300030003800440038003900310044003000440030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100330030004100320046003000390045004100300034003100390032003800300030003000300030003000360043003400390034003400340031003500340033003800380044003600330042004300320031004300370046004100390046003800310038004100380030003800390039004100380036004400310043003400340030003100360034003200300041004100340041003600320044003400370045003100330046004300420038004100410034004300430034003000350045004500460036003000340032003400410035003000430030004500300030004600340033004100410031004200430038003700300034003300380045004600350033004600300043003700460044004300420030004600430033004600410039004500300045003300380036004500350046004600390031004300440031003800460043003500450041003600420041003800310038004300380034004600320042003200460041004300330035004600320038004600430039004200460032003600430037003800300044003100430046004300350045004100360037004600450031004600300037003900450042003500410039003200300043003200340031003800320039004100340038003200430031003100460038003600300030004100320039004400350031003500320037003200340046003300340034003300300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000737003600300000055300590000075300590052000029530079007200690061006E00200041007200610062002000520065007000750062006C00690063000083773600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003100300030004400330041003400390044004500440030003300330030003000300030003000300039003300340039003400340034003100350034003300380038004400360033003300430032003700410038004600360039004600380031003000360038003000380039003100360038003600380045003100410038004300300032003100380046004600460046004600460038004600330035004600320046004500330033004600430036003700360030003600340036003000430034004100420031003900390046003100410039004300320045003900450037003300450042003100300034003100350037004500310035003500460033003100460030004200350038004600370045003000430043003700460038003600370039003000390046004600450042004300450041004400460046004600460045004600460046003300460030004300460039003700460046004600460046004600440041004600330042004200370046004500330046004300330042004300380034004600460045004200310045003900430043003100360036004300340037004600410043003400310046003100460030004300420035004200380036003700330036004600310046003300300038003800370033004600320033003300350038003800390041003900360030003700350044003000420031003500370037003700310038003500450037004500460046004300380036003000320034004100430043003000320030004300460032003300380043003200310038004600330033003800430032003900300035003800430030004300300043003000430041003300330039003600460038003800310041003000430030003000350034003100320037003300440042004500410041004400380032003300460030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073100350038000005540057000007540057004E000033540061006900770061006E002C002000500072006F00760069006E006300650020006F00660020004300680069006E00610000847B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000340030003300300046003900410043003100330032003300320030003000300030003000300044003400340039003400340034003100350034003300380038004400450044003900320042003100300041003800320035003000310034003800360042004600410042003000450032004400350039004500310036003800380033003800420032003800460034003100380032004500430045004200440034003400380046004400300042003300460034003200380030004400340045003300450034003100340033004300330031004400300034003900370030003800300032004100390039003000320030003400380042003300320044003500300043004200450041004200360034003500460046004600380043003300460044004300450045003100390045003400460043003000410032004100320031003100320031004100300036004100420035003500300033003100360042003900370034004600360032003300340038004200430039003600340038003400450033004600340034003900440033003900430046003500370041004600460033003600410038003100330031004300300034003300360034003100360030004500330037003900340033004100340033004300310030003400350031004200410032003600380041003300300034004400360045004500310033003000430030004400440037003300350030003900430033003300310044003300410039003400330031003800380045003700310035004400310033004300330044003000420041004400450042004600300036003100370043003500390035003200340043003900390031004600320030003800380030003900340034003700390032003200340041003700320038004100450034004100450030004400410035003700430034004600310031003600440046003100460042003000350041003600350039004300340045003100370045003200370038004100420030003400300035003100300034004400320042003700340035004400360030003500390033004400420032004500430034004300350039004400360044003500460038004300380038004100330039004300420037004100350033003000320033004200450035003400350045004600310031003100350033004300330030004600360046004200410038003900440046004300300046004600450036004400460030003000440038004600320045003400300034004500390033003300420032004600450032003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370036003200000554004A00000754004A004B000015540061006A0069006B0069007300740061006E00008383360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310036003100340030003600340031003800300031004500370042003000300030003000300030003900360034003900340034003400310035003400320038003900310045004400390032004200310030004100300032003300310031003000340034004400460038003600370038003100320035003000350030004100430046004300300033004600440033003100420046004400360035004500390032003500320032004200450031004300340032004200450034004300320043003500420042003500420038004200460034003400390037003500390044004400330030004400430043004200430038003500360035004500340030004100430041003000320033003200340042003400300031003700300035003400420046003400460045003500450030004400440031003800420036004100310034003100300043003000320039004500320041004100450046003100330035003500320044003800370045003600300046003700430035004200420030003300420034003000360030004500430036003000370035003000300042003300320039004400360036004300450044003300320032003800330034003400370038003800420037003600430044004400310039003300340035003500350042003700350046003000440034003400310046003400330030004300370045004300430037003100360044004300300039004300430042003600300043003000450043004600460030004100380042003100440037004500390044004400440038004500390036003500380043003800380032003600420033004400370032003100460036003000390034003200420031003200330035004300460045003300420043004500460041003000310032003100340039003300320046003000350046004100460044004600460032003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380033003400000554005A00000754005A0041000039540061006E007A0061006E00690061002C00200055006E0069007400650064002000520065007000750062006C006900630020006F0066000089A336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320030003100380041003900410038003900310032004300300030003000300030003200310045003400390034003400340031003500340033003800380044003900440044003400350044003400380039003300350031003100380043003000460031004600460046004200450045003500440042004100340044004500370039004300320039004300350032004100320044003100320041003200320030003000440044003200320043003700370042003100380042003200320032003400300033003200460046003200360032003500360044003000320037003600350039004600380038003900340038003900350033003400370034004300430032003800410032004300420032003900420034003800460032004100360032003800320032003800320034003400450038003200320043003200380042003800380032004500380032004600320032003200460031003400360039003700310046003400420037003900330037004400420046003600320041004400360044004100350037003100370041003100410032004500460035003600440033004500370045004100370030004300450037003300370045004500370037003900330038003800370032003300360043004500380044004400310033003600370038003500350031003200380046004400450036004200360035003900450036004600330039004200300030003700350045004400440033003000340036003700310036003200380036003900320035004100300032003800430030004300390038004300300030003400370043003200350045003200450035004400350031004500380045003900300042004100390037003200390036003000440045003700340042003600310036004500390039003600350042004500460035003000350032003800360039003900420043003600310037003800380041003900370032004300410038004100420034004100390043003300300032003700300044003800310030004500340041004300450038004100350044003100410039004600300041003400460037003900370032004100320037003600440039003500340030003600420041004400380031003200410046004200450036004400340045003000330035003900410030003800450044003600360039003900440039003400460030003100370036003300420031003500330043004200320042004100430041004500320032004400310032004400440036004400350039004200430043004600410045004100360036003400450038004300320046004600450031003200410046004400330034004600350035004100320046004100450039004200340031003100450042004400460043003400390037004300430039003500350034004200310041003600380033004300360035004500300044003800460031003700430043004500340043003300360046003300440036003500330046004100370037003300450031003900390038003200330034003600370031003600350037004200440031003700440046003500360033003600420035003100370030003700420041003200410041003900430041004400390042003200340031004500420042003800430030004300350041003200410044003900330039003500430038003700330046003600410035004300330038003300300031003100420041003500460033003700380033003400330032004600370033004100370035003300450031004600450044003300350039003600320034004200330041003100370034003500420038003500380041003300450037004600320042003900370035004400340046004200310041003700380033003500360041003500330031003900380042004500300032004300330031003400410041004200430039004300370037004100420037003900460030004100380037004300320043003000370030003400340042003500360031004100330034003500340033004400370037003500320033003500330038003500460042003200380031004200420039003800410031004300430039003400450044003800420031003300380033003700420030004100360043004600440032003900330033003300340041003700460046003700320034004500350034003700370046004100380035003000340031003800300044003300380037003700340042004300370042003900360034004600350037003900450038004200450041003900310031004200340039003500310030003000340039003200460043003400420038003600360039004100410032003700380036003200380041004100410046003300300041003500460030003600440035003500350035004100460032003400340031004500330041003800440036003800420036003500420042003100380045003300420046003000380034003700330039003300380032004600330031003500420046004300450031004400450033004600420046003300300039003700360044003900460044003000390044003100390041003000330045003900370043003700380036003100410031004100370041003000380039003000410046003700440044003900340035003000300030004100310041004300340038003100420046004600440038003100460035003600320044004100430033003600380039003700340033003600360035004200320042003600420043003900340031003300450033004300440030004300380035003200430032003900380031004600330033003000410030004600410038003400300045004400410044003200420038004500370033003000460033003200300035003200340042003800370043004600340045003200430032004500320036004400380046004100450046003500380046004300320041003300320030003400330041003100410033003200440039004200360037003700300037003900350036003300320044003000430038003400300041003900360030004400430045004300350031004600300046003800420042003500390037004400310039004300310030003400300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700360034000005540048000007540048004100001154006800610069006C0061006E006400008227360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300031003400410030003100450044004400300037003000300030003000300030003300460034003900340034003400310035003400330038003800440036003300330043003200370041003800460036003900460038003100300036003800300038003900310036003800360033003200330030003300300033003000420030003800380045003700410037004400320043003400360030004300360046004600460046004600460030004600410044004100300036003000360034003500300046003300310043003500410032004500310045003300350031003800300045003800360035004500370032003600330037003900330039003700310033003600340044003000430036003600310043003700320038003500310030003000300045004400430043003100300038004300390036004200450034004500320042003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007360032003600000554004C00000754004C0053000017540069006D006F0072002D004C006500730074006500018557360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200340033003500380038003100420030003800350044003000300030003000300031003000420034003900340034003400310035003400320038003900310042003500440033004200310034004100430033003500300031003400430036004600310037004600370032004300420041003500380044003700410043003500300043004400360045004100310036003800370035003000430034003200370035003000440043004300340034003100370030004500390032003000310039003000410037003100370034003800440044004400310043004500410045003200390041003200440030004600450030004100410041003800380033003500330034003000460041003000300043004500380032003200320032003200380032004200380041003800310038004300390035003200300044003800390044003700410044003200300034004500360044004500410037003900380030004400460030003700450037003700430043003700360038004100460032004100440044003500350033003600440043003600390043003600330039003000360041003000390037003100430043003900440031004300450031004300380044003200420034003100460046004500360037004200370043003300300038003000350035003300350038003800330041003700350042003600390044003400390039003200460033004100320037003400380030003000300030004500300030003400340041003500430041003600390045004600380033004500370033004300410037004200350041003700350030004300420032003600460039004100420032003600370046003200420030003900340037003500310038003400360035003500390035004300460034004500450033003900420039003700430036003700370044003600330030003200360037003400420035003200360042003800450031003600360030003000410032003100300038003800320030003000440046004600370046003100330043003800460033003400340044004200390037004500460038003600320036004400460037003800390039003700410034004100300044003600330034003900390044004600390037004400380032004400330031003100340035004300320039003800410038003200330030003000430037003100350044003900370033003800380045003500310034004100420031003600300037004600370032003700430044003800360030003700360034003600440030004200460044003500320034003600370046003900440030003300420031004600310043003400460034004100340039003900360036003500460038003900420038004100410038003500330043003700370038003600340032003400460030003000460033004300360038004300350045003200350034003200390046003000310037004600430032004600330044003600450041004600320038004400440039004400310045004600460045003700460044003000300038004200330030003600410037003100430038004200440035003200320036003000300030003000300030003000300034003900340035003400450034003400410045003400\
-3200360030003800320000073700360038000005540047000007540047004F00000954006F0067006F00008533360030003000300030003000300030004500300038003000360030003000300030003000300032004200330031004500430043004400300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300043003200300031003100440030003700340032003900380038003000300030003000300031003000320034003900340034003400310035003400330038003800440036003300420043003200340036003000460032003900460030003100300046003000380046003600310032003600350042003800320044004300300038004100340046003000390035003600430030003800340043004100360033003600320036003000310031003100330032003600440039003100300036004300380030003000350039003900430033003600330036004600430041004300300036004400360044004300340046003000420032003600350033004100350043003400430034004200460030003300330030003300390046003300300031003300380036003400360041003200300043003600360031003600450030003600330039003000450041003200390036003300450030004200310033003700360033003600300045003400450036003600300045003000440034003500360036003500370038003500360044003500430037004600300045004200460045003100330038003600310035003400450036003700310039003300380031003400420046003900330036004300330030003100330030003300300033003000330043003300440046003000460039004600310038003500450033003400340045003600310036003000310031003100320036003000360030004500360045003000360030003700380033004400360035003000390043003300410046004600420034004600340038003300360030004300430033004300350030004300300043003000430030004300410043003100320041003200300043003500460038004600390045003600330046003800460033004600360031004400300033003800370042004100310032004300330044003700410033004500370031003800310038003100380031003800310038004400360044004300390037003600320046003800460036004600330030004600430039003000360033003300430032003500320030003500380042004100380031003000430033003900460044003700450046003200300042003600380039003800420033003000460043003700390046003900380036003800310038003100380031003000410041003900300032003600360032003800300033003000330030003300440043003500300034004100300030004500330038003600320043003000440042004300450039004600380041004400450031003400460038003600330046004400430046004600340038003300370046003800460046003300390030003600420043003000360039003300300042003400380034004600410030003400340030003200310036003900330030004400370036004200340033003100460038004500430031004200300031003900410031003800340043004200330041003000300030003000300038003700420046003400340036003500390043004300350041003700330030003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370037003200000554004B00000754004B004C00000F54006F006B0065006C00610075000007370037003600000554004F00000754004F004E00000B54006F006E00670061000083BF3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410031004100310030003800360035003700420042004400350030003000300030003000300041003500340039003400340034003100350034003200380039003100360033004600430046004600460046004600460037004600300036003200380046003800460037004500440031004200430033004400420041004400350042003100390046003800360044003600430031003800440038003200340032003500360031004300320030004300360037004600350046003400310038004200450035004500420045004300430034003000300041003600300034003200450036004600430037004500460033003800360045003100370041003500380031003800430033003900370037003300450037003400380033003200300034004100460043003100340046003200370034004300360030003300380041004200410037004300370043003000430030004300300043003000370030003300440032003200380032004500310037003600350041003100410037003500300043004500360042003500420030003600300039003000430043004300430036003400360030003600300036003000360030003100300030003900300039003600310031003000460032004600350041003500430038003600300031003600310038003800330043004600430032003800320038003100340033003400310038003100450031004600440045004500440044003000430031003200430039004300390030004300460043003300360033003600310034003100390043004300460038004100380041003300450033003300460032003100340035003400460032003700340043003600300046003800460035004500320030003500360039003000360031004600360034003600300032003000360038003300300033003900380030003800390042003000390032003500310038003300320039003000340030003000380037004200460032004200460038004100440044003700360043003600430030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700380030000005540054000007540054004F0000275400720069006E006900640061006400200061006E006400200054006F006200610067006F000089433600300030003000300030003000300044003000380030003600300030003000300030003000410044004100350039004500360033003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003000300045003500440037004300320034003700440030003000300030003000320030003600340039003400340034003100350034003300380038004400390044003900320034004600340038003900330037003100310043003800370039004600370037003800320046003900310036003800330035004500340043003700380031003100440045003400450042003500320038004400380041003500310044004100320034003300420037004100380032003800310038003100350035003600320034003000430032003500430038004200310043003900360030003600310045004200320032003400380034003900310044003400410043003900340038003000430045004300310046003400410032003200410036004100420038003900320031003500420041003900380039003500330032003600420043003500300034003400310036004100430039004100410037004400310031003000360034003700420036003300360033003900420042003200420044003500420038003700360034003100300045004100340041003900460045003300300033004200460038003700320046004600430033004500340032004600340034003600370042003700310044004500370032003800300038003600430036003400360042003200440039003200430030003000390032003200340033003100330043003300380043003800330045004500460033004200420034004400370045003300360043003000370043003300460032003900330030003100300045003700420032003700370038004500460046003700320033004300420033003200300030003900410041003600370031004400410036004100360035004600320043003800340031003600340038004600310033003000340036003100450042003600310038003000450034003600340039003000440044004100440039004400430043003800440038004500360031003300360039004200300031004300380045003500370032003500430036004400360041004100320034004200460042003800390046003200450038003200450043003200380045004300410032004400380035003200420045004300360032004600350034004400380030004600430037003200390043004300320034003400310030003400370036004600330037003500460039003700360032003400340032003200310031003000300034003200410031003100300031003100370044003900350043004200460037004500450039003000390044003900410041003500390030003500440044003900350041003100380041003000390030004300450039003000460036003000350036003800360043003600420032003500350033003200330041003100410041003200410030003000450031003700300039003800450039003200460039004600420031003300440045004400300031004600350031003300460039003800340046003600430046004200300046003000350031003300320031003500440037003500420038003100440041004200360031003600340036003200410035003600370031004200420044004400450038004200410030004500380030004100320032003800420043003100390037004100430039004100450038004500350045003500320033003300460033003600350043003300380036003000440036004400420031003400380045004300350036003200370044003600310046003400420038004300460039003400360033003100310041003800440030003000340034004100330035003100380045003900440033004100430039004600370032004200370035003500340044004200320045003600430032003300420043003400360046004300430035003000380041003600450037003500450036003600300033003600460035003100310034003000350038003000350034003200410038003500460035004400430035003900430036004600360043004200440034004200360042003500360043004200410039003800420032003600310038003000440034004300430033004300390035004400370044004100300039003000450042004600430032003600320042003100300030004100300045004200330041003200450039003700380042004400420038004200300042004500430037004400440036003800350041003100410041003600410044004400420042004200460033004500360046003300330046003200300039003800440037004300360030003100410037004200460037003700440031003600390033004200460030003800380037004300330030003000410038004100410043004100340032003300320038003100450044003600310030003700320042003500330037003300310034004400320039003900460046004200460042003800310034003800460036004200430034004500410031004400330043004200450044003400380030004300370045003300320039003700390042004600440046004300460037003100410037003100440042003100460046003000310045003200320031003500330043003900360046004200430038004100370032003000380030003200460032003700350030003700450033003700420037003600450032003600430036004500320036003900370043004200300031003200300043004200330032004200450041003100320031003600410037004100300036003400380034004500300036004200370031003100350045003400330033004100370046003800360034003800440044003000390032004500440036004400370041003300360039003700460037003600320044003800410032003200460044003700440037004400310043004600440046003000380044004400460044003100310039004300440031003300320034003100330045003700410037003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370038003800000554004E000007540055004E00000F540075006E00690073006900610000858336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310031003200300038003100350039004300460043004300440034003100300030003000300030003100310036003400390034003400340031003500340033003800380044004400350039003400420031003400410043003300360030003100340038003500420046004600430034004400390041003900410034003100350042003800320035004100370030003200430039004400310034003000410034004100440034003300410033003800460039003000360030004500450032003500320033003200380038003100340035004600430034004300390043003500410031003000340041003700350038004400430043003400440031004100350034004600360030003100310038003700380032003200320041003500370034003100340038004200350030003100410039003700410034003300310036004400450041004500360045003600340046003800390036003400460030004300430046003700370045003100430043004500330044003500430045003500310044003700330034003600300041003100320036003900340030003500330030003500410042003700330034004400360035003300320036003800390035003700350030003000410032004300450030004200340043004100370037004600300037003600420033004200350042004500340039004200300044003600320045004600310033003000300039003100350046004300320041004200390044003100310042003500390046004100340037004200380041004500430037003800410032004200380038003200440039003600450045003100310044003900440032003000350036003900370033003100450043003600330036003200330046003200300042004200350046003600350036003800310044003100300030004600330045003700450030003500340042003300330033003600450041003300360043003100350035003100330043003600360033003000410037003700320045004500310043003300320033003400320043004600330032003100420038004500330030004500410042003600440034004200310031003400410043003900360034004200340034003900440036003700420034004200440036004400380032003900420035004200460043003800420030003600420045003700330038004400350038003200420041003200390036003400420035003200420030003300340045003300340039004100460038004600350036004400390032003000420043003600460042003100370038003700390034004500460034004400410034003500420037003300360038003900440046003000360034004300370041004600440045003400380045003700440043003700360035004500310042003400300036004200390031004300410033003400330031004200370044004400370032003200300045004200460035003000430043003000320042004500450033003400410043003100440032004500330034003100340041004100440046003800350031003800320031004500430046003000370034004500410030004600460046003700320042004200450030003100360046004600340036003200410038004600340034004600460034003600380030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700390032000005540052000007540055005200000D5400750072006B006500790000856B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410032004500330038003000380043003800450030004400380030003000300030003000310031003000340039003400340034003100350034003300380038004400360033003700430043004300320035004600450039004600380031003000360038003000380039003100360038003600300045003800430043003100320043004600320042003200300043003600430036003600430036003000430034004300460043004600430036003400310039004300430038003200360031003900330041003000300030003800330045003000390034003100450030003600300045003400460033003700380036004500460039004200420037003300330046004300370044004600410038004300450031004600370044003500450042003000430044004600390036004100450041003200430043003600300043003100360039003700440030004300310043004300450030004500300043004100460039004300420043003100390037004500350046004200380030004300350035004300350043003200430030003600450036003100430041004600300045004200450032003600350038003600460046004400460037004600390030003600450033003000410042004200360032003600300033004100370039004600310037004300330045003700300039004400330031003000380036003300320033003000330030003300300046004300460039004300330046003000460042004600320033003500300036004100450038003800310030003000360036003600370031003500310038003600440046004400370036004500330032003700430044004600420034003800440037003800380033003500390031003400450034003100380031003800310038003100380031003800370045003500460042004200380031004100310039003000340039003400360038004100380031004200370032003000390033003800310034003500340039003900310045003100380035004200310031004400360039003200450046004500460033004500300031003100430034004500350035004100310041003100380030004100460046003300440037003900430036004600300037003900430032003700340030003600320036003700310035003100300036003500360030004400330035003800360033004600420037004500450045003000330035003900380031003100330044003800330030003800320046003900460030003700300039003600330033003700370046004400340033003000330036003300310036003400460038003700350046003100300041004300330046004600450046004400460030003900420041003100360041004200430031004400340034004100310035003100380030003600430033003000300038004200420043003200430030003300390033004200380031003800430033003900460039004200370037003100380046004500370044004600430034003800390032004100310037003800300044004100360031003400300043004200440042003200300032003000300035004500380035003600310045004400450038003300320043003800310041003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370039003500000554004D00000754004B004D0000195400750072006B006D0065006E0069007300740061006E000087CF3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000310030004300310046003000360032003500460043003700320030003000300030003000310041003900340039003400340034003100350034003300380038004400410044004400330042004400340046003500330035003100310038004300370046003100450046004200390045003700420045003500300044004100340033003400420032003000410035003900380030003600350046003100410041003900430036003800340034003100380044003800330036004300320036003100380032003700350043004600440030003300390043003400430031004300440044003900430046004400380033003900430044003500430039004100380035003100310033003600320030003700380044003200300030003800380033003400440034003500410046004200340035004300360046004300420042003900320046004500370042003800300038004500410036003000440032003400320039004600450039003100390034004500330045004600390045003500370037004600320030003800450045004100440035004100380030004400420044004600420041004400430044004600300043003900380035004500390041004100330042003700420036004300360039003300390041004500320035003100410033004300410037003100430037003300390035004300420041003800390034004600460039004400360031003900370036003200410030004100360045003500450036003400320046003000450030003000390030003800450043003300460035003700330031003700420038004200320037003000390045004500390034003200360039003700340042003800450032003200370034003400340046003500460035003100300044004600360032003800380036004100370039003800320041003200340030003000410038004100300034003000410034003000460030003800450033003100450037003700390037003500370038003600380036004400440043003300340035003000380031003800370034003300430037004500420043003500380036003700440030004400450034003600330036003400300030003800430031003700430042003900380032003400450031003300420036004300330035004400360036003400410030004100340037003000380038004300420035004300330032003700380045003100320039003700320046003000440038003100390039004300380045003800330034003600300046004600430030004300370035004100380042004300450037003200440032003300430036003700370035004500390031004100410045003200330038003700340032004600460034003900410043004200430038004300460041004100360032003500410044003000420045004100360044003400420041004600410039003000310044003800460041004400450036003100410036004100380044003800440038003600440046003300420038004600350037004100460034003200410037003200320042004600380032004300300044004500460037004600330041004400340041003400340036003600370039003300340037003800460043003200330038003200320038004300410033004100310035003100460038004100420038004100340031003200450046003900330034003900390035003200350037003400350037003600300041003000390033004100390035003200330034003100460046003400440041004300420043003800430031004200420031004300370044003700360045003400430044003300300034004200340031003600460034003700380045003000370045003200450037003900370039004200410043003800420042003700390034003300330035003900340034004300430035003200370037003200460046003500340045003100300042003400330035003900450037004300430036004100340031003400440036003700460038004100450031003900300046003200430038003500410035004400390031003700440043004200390044003400450034004200320035004200320032003700300046003300460031004300300046004200410039004300370044003900380037003200420038003400380039004300460044003500300037004300420037003400460042004300310037003800360030003200420030003400350042004300460035004100320043003200450034004500460030004500310046003900300036004500410046003700340039003100460037003700380045003300450043004600310038003900380037004400460033003100310046004400370036003900440042003200330034004600340042004300420039003100330043003100420046003000300046003000410031003900420031003000310032004100410044003400330035003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370039003600000554004300000754004300410000315400750072006B007300200061006E006400200043006100690063006F0073002000490073006C0061006E00640073000087B336003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035\
-0030003700440037003000390030004600310031003100390030003000310030003700380039003400340046003000300030003000300031004100320034003900340034003400310035003400320038003900310042003500390030003300440034003800310042003700310031004300380036003900460042004200360042004100430044003100320038003600410038003300440038003100340034003500330031003100320037003000320038004500320034003500310037003900420035003800300037004100310030003500310037004300310038004600300045003700450030004300440035003800320034003400390044003000420037003600370030003500320032004100380032003900330041003200390034003000450034003500460030003100430038003400380032003800380041003800420033004400330034003900360041003300340045003200310032004200310032003800340036003800440038004400310031004600310037004100410038003400390033004300300037003200310045003500410036003000360043003100370037004600430033004600420043004300460046004600450035003200370030003400380037004200460031004100390032004400330043003500450038003600410030004300340035003500310046003100370035004300420037003400370045004500460036003500460036004500330033003700320036003700460046003800460031004200440037004600340035003800460039004300380031004500340037003400350031004400390042003100340043004200410031003100320041003200410042004500310038003900440037003500300035004200340039003400320037004200310037003800310041003000380031004500450041003900340037003400370039003300390039004100350041004300320037003500310039003400320032004100320042003600370036003600450033003800360043003500430035003200440034003200410031004200330046003400430035004200420042003200360043003900380035004500390032003400390046003400340030003800300041004300410041003200410039003000320034003100330041004100460034004300420036003900380042003900460046004400460036004200360032003200300038003000320037003600420042003800440043003200450042003200380031003600460042003000420046003400430031003700450046003200370044003000330043003400330035003900440043003800340031003800340033004600360032003000450038003600360031003800300037004600330046003500350031004300310042004300410041003500450046004500440030004500300039004500420035004600410045004100320033003700430043004100390031004500330045003800460035004300410035004200380033003800310046003200440041003400420034004400410038003500460035003500360036003300360032003500330036003400330043003900380046003900350030003500340030004400380036003700450036003500390033004500440037003600350033003900430030004200360042003700420037003100440033003200320034003700380031003800450045003500320030003000460043004200430035003000450045003700380031003300440031004300460039004400370045003600430035003900450045003700310031004100360045003700430033003400430041004400380034003400390032003400450045003700380035003300320042003500300035003700440046004300360043003600440036003200390045004200450041003200310038004100320032004400320044004500350045003800330044003700310031003300330031003500380046003600330033003600320034004600370033003400430041003600430031003100340044003400440045003700410043004100390035003600450030004400460045003700300032003700430033003200440046003300380043004400420043003200430043004100360032003600310036004500380035003900360046004400350042003700450033004100330033003600380046004500460030003800450039003300350033003300440043003500320035003900300038003700310046003200330044003600420034003300380032003700450031004400370038004300330037004400410031003800310044004100420036003500370033003500420033003300460031003400370032004600460045003500460043003400410037003900300033004500410039004600380031004500370042003200310038004500420037003600300046003000320033003000300030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700390038000005540056000007540055005600000D54007500760061006C00750000899B3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900300046003100310031003900300034003100370031003500350030003500360030003000300030003000320031004300340039003400340034003100350034003200380039003100390035004400320034004400340038004400330037003100310038004300300046003100450046004500460042004600460046003700460037003300390042004300440042003500460039004400360041003100450036003400420042003800330035004600350041003000300037004100310030003200360044003500440039003300450041003900300037003600410038004500380031003000310035003600310035003400410037003900320032003800310030003800410035004500310030004200410038003500310038003100380030003400390031003900370030004500300039003500440033003200450038003100300041003200350032003900370037003200360039004600330036003500350036003100420035003200450036004300420044004300370032003700330044004200370046004400420041004600340042003800340036003200320031003700420041004500430046004600330037004300370038003900450038003700340037003400430037003400330046003900310041003200430041004300350039004400440031003600350046004100350046004600410045003900330038003500410043004200390039003900450037004200460034003500440045003800450034004500310038004200370031003200450045004500440046004300310033003900420037003000390035003100450035004500320046003600430046003200380035004200380035003400440038004200310032004400330038004200350030003800450042004300380045004600320037004300330038004300430038004400460032003300380038003100430037003600440042003400330034003500350030003000370030004400300035004200430032004600380046003900440044003700340042003400370041004500380043004200390034003700330042003800370037003600430034004200440034004100450034003500420038004500450042003900380039003400440038004200320032004100360030004600390043003900320045004200390033003300320039004200320035004500390039004600410032004100300042004500300036003600310033003000360043003600380045004300330041003700450045004300390046004100300031003000390032003000360046004200370042003000320042003100330041003500340034003500320037003900450032003900340034003900440036003900460031003200310038003400410030004400380036004500410031003700340032004400380036004400310036003100320033003700390041004400310042004600420044003900370036004600340034003400380041003100460045003100320035003100360033003400330033003500320043004100430044003200300039003200440033003100350042004400300043004300450042003700420032004400370046003900390036003200460046003100360041003200320036003900320037003000300043004100420033003800340031004400350037003700440032003500310036003300440043003900380033004100300045003400460045003300370031003500380030004200420038003100320043003900440034003100300044003400420041003300390037003500440035003600380035003500370037003300390039003400440042003000430039003900300032003400310038004100460032003100390045004200310044003200310042004200430034003200320034004500440034003400320031003000370038003000450031004400360041003100440036003800450044003100440030004100460046003900430042003200330043004200370045003700460032003400460035004200350042004300420038003300300035004100350033003500360036003800310039004200310039003600300036004400450038004300380035003200370046004200330046004300450038003700340034004100440033004200420031004300460039003600390035003100330032003600440035004200410031004500430045003400380038004400350030004100320039003200350034004300450034004300300045003800350032003200360044003800350039003300310035003700440043004300410043004200410031003100320037003700410030003600330036004500460042003800340035003300380038004400300042004200380036004400390046003100390035004500360043003000360043003000410041004100450044003200420038004600440031004400460045003900350030003600450041003800410033004500330030004200320044003400380043003900320032004600300041003600300035003600310033004200380032004300420033003600380032003200300044003800300039004500330033004200320036003700440042003200370044003600420032003600360038003600310036003700440036003400410035003200310037004600350038003000380034003900340043004200370033003300420034004500300030003300450030004100410041003700300042003800370037003100390031003400370042003300390037003400380045003500300041004600450044003600450035003000350033003700330039003800360046003100390035003000430035003200350036004600300039004400420036003900440034004600330031003200410033004100300033003700330045004400320043004600460046003900380034003000440030003300450034003700330045003300360041004500420031003400410041004300380033003000420039004500410043003500410038004100340034003800450037003400430046004600410044004600440030004400340034003700350043003400450046004600410035004500440037003700390030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800300030000005550047000007550047004100000D5500670061006E006400610000847B3600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410030003700330034003400350033003800330033003100380030003000300030003000300044003400340039003400340034003100350034003300380038004400360033003600340036003000360030004600380043004600340030003000330043003000340034003000420034003300310039003100380031003800310038003500380043004100370033003600380036003300330030004500330046004600450037003400330032004300320038003100380045004600350039003700320031003000370034003300310039004200380045003300390043003300310044003500330037004200300036003700390037003100320039003000360044003600320044004300420031003900370045003500440033003900340039004400300036003000380032003200450046004500430046003200330043003000320030004400450042003500390045003600310044004600430033004400460030004300440032004500450034003900300043004500320035004400450042003100390046004500460033003000380031003000330034003900380036003500430036004400330033004600370038003100350043003800310038004100390033003200450034004600320030003900330032003300430037004200460044003900410036003100450044004400340032004500300036004600460043003000330030003800360041004400440043004100410030004300340046003600450031004500320037003600380046003800370046003700430035003800350030003500300046003000460046004200420033003700450046004600450031004600330044003700320046003400370046003700460035004400460035004600460038003700310042003500370046004300310037003100340031003400430034004100420038003700380031003800310045003100330046004300310041003000370038004600460046004500330044003800330038004600390046003000460043003300390044004200420037003700310038003300380032003400360034003100380032003200330042003200370033003100420043003700460046004600390045004100300036004200380037003600300037003200440042003100380043004200340032003100330031003700420033004500380044004500360031004100310038003500420039004200340030004200300041003000300034003100410045003500310038003600370034004600320039003300360031003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380030003400000555004100000755004B005200000F55006B007200610069006E0065000081D7360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003200310031003200300031004200330036004500410035004600350042003000300030003000300030003200420034003900340034003400310035003400330038003800440036003300420034003200410033004400460032003900460038003100300036003800300038003900310036003800360038004500310041003300430043003400300044003600360038003900330034003500380034004600310033003800330031003900370046004400450031003500310042003400440043003700410033003000360044003300430039003600300030003000380034004500410030003600420034003500320033004100420042004400360030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073700380034000005410045000007410052004500002955006E00690074006500640020004100720061006200200045006D006900720061007400650073000082933600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003100330031003100300032003800350045004400380042004100390030003000300030003000300035004100340039003400340034003100350034003200380039003100360033003300430032003700410038004600360039004600300031003000440044003400380037004200440033004300420030004400390046003800410033003000330042004100330038003200390038003000380039003100320043004400300033003600320033003000300042003300360034003100300037003700450038004200440046003000410033004100360041004300370041003900360045003700300041003200360031003000360041004200410030003600350038003000320035003200350030003600300046004200440033003000360036004300340039003600440043004400360043004200460030004500460035004500460045004600440033004400300046003200350030003600360033003000440045003300300042004200370036004500420031004400450046003900460039003700310038003400380035003300310030003000300036003900450031003600460042003200410039004500340032003600320030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800320036000005470042000007470042005200001D55006E00690074006500640020004B0069006E00670064006F006D000088DF360030003000300030003000300030004200300038003000360030003000300030003000300037004200460043003700440037004500300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200300031003400410035003500310043004200380032003000300030003000300031004500440034003900340034003400310035003400320038003900310039004400390033003400460034003800390033003000310031003800430036003700460044004600330037004400370042003400460035003600440039003500370033003400450037003200460044004100310034003300410043004300310039003600440034003400310034004300300038003800430043003500390030004500350043003100330039003600410031004500380043003800380031003200390032003200450032003300300036003400390038003200320030004500430045003000430031003900420038003100340039003800350030003500310039004400350037003600340038003800390043003100430038003900330034003500300034003300310031003300390041003100350038004400390038004400330036004300340045004100420042003900340043004400370036003800350046003800370043004100350043004600460035003600330045004300370046003700370039004400460045003700370039003700390035004500350045003200310044004100370034003500320044003600370042003500410035003100450044004400430043003600460030004600440035003700310043004500460030004100390031003400410032004600420033003100410034004600320045004200390043003800330039004400440030003000380038004600450034003100410043003200370036004500450035004600310039003200350041003800350044003700360039004300320046004400460045003200390043003200360034003100430042004400410037003100350046003100420041004300350034004500450032004600360035004400450032003600440045004400440038003000430032003200430039004500300032003900300032004400440038003700440031003400410043003500310034003800320041003400350036004400310044003500420032003800370046003000430031003100430043004400450033003400310043004100390042004500410033003100460036004600410030003800420044004300390032003100370036003500430031004400410033004500410039004500430038004600460031003800460043003400440042003000430043003700450039003100340036004500460031003000380032004500420043004300300044004600390046004200340030003800390034004100340039003400330046003500310036003600410031003700410037003600300036004500300045004100440043003300380036004200320042004300380043004300460045003900300046003400340041004100360043003000300045004300300045003800370037003800330037004600320032003000380046003700460046004300370043003900360030004200460045003700310033004500320045003700440035004100330031003100370032003600330044003900440046003200320046003200420046004400380034004500430044003400300043003000420032003300410033003000300036003800450041003600410035003100350036003500360031003400380043003400390030003800450042004300430030003500380035004400370038003200410032004400320031003600350037004300310041003600330035003600440042004300330041004500330046003500320035004500420033003800450044004200340042003000370037003900370039004500360043003200320034003900360041003300380030003400330041003100440039004200450041003600410046003200330032003500360034003800310042004600320046003800350031003700350032003500370037003100450034004500420033003900340043003900410045003000380032004200320032003600460034004400390044004400330038003900330034004500370038004600450044004500330045004300310031003200420039004200450037003100330042004300330045004500370036003300450031003600350038004300300031004300350037003600380045003500450037004500340036003400330042003500310031004600390041003600310046003800300046003900340033004600350039003800440043004400370033003000390042003200410042003000330041003600410031003000300035003000310034004400370046003300460030003700330034003100390039003200410035003000360030003600380032003200460030003800340037003600360031003000300032003800310034003700420032003600330046004600300045003300320044003100310038004200330033004400370044004300380035004200380044003000430036004500330034004400330045004400390046003200300042004400390038003000310046004500460043003200300035004100410039003900380032004200310044003300360037004500330037003500460036003400330033003800380043003400440042004400410042004600310036003200430046003600360046003800320036003300460046003700340041003000350034003700410039003900340036004500460044003000300046003800330035004500310046003900390036003800380043004500360039004500330045004200450030003000390045003100360044003900310043003200360031003000440034003700340030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800340030000005550053000007550053004100001B55006E006900740065006400200053007400610074006500730000862F360030003000300030003000300030004300300038003000360030003000300030003000300036003600460039003400440043003600300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003500300043003100320033003400460039003600320033004500450039003000300030003000300031003400310034003900340034003400310035003400330038003800440042003500430045004300440034004100300032003600310030003000380035004500310037003700370034003400340043003700330031004400310043003600330031004400330039003400430034003800430032003800430034003800350038004200310036003400310044003000300035003400340044003000410041003100360044003100350044003700340030003300340031003300370044003100420041004500420036003800440031004100360032003000360038003100310036003400310034003600380041003600350036003900360033003500410039003800440033004600390039004400460044003700410036003600440043003400300034003900450044003500350039003100430031004500380045003500320044003800330043003900300031003700440037003300350046003200300042003000390031003400410039003700300037003900350042003600370037003100320045003800360035004200370031003500310037003900420032004300380046003900350044004500430031003700340046003700310031004100420035004400370046004600320034003300460031004600320037003100340044003400360039003700350042004100450034004200320030003900410032004400310032003000440035003500410039003300360043004400320034003400460035004100390031003400300045003800460039004300430033003000460043004400330036003900390041003400380039004600440033003100430030004200320036004300380043003400390039004400370036004100420034004200450033004100440038003300450045004400370037003800320045004400450037003100420035004200330045\
-003700310043003400450034004300380035003100300035003200330032003600440045004100410038003100450038003500430031003500300036003000380034004600430041003400380037003000360035004500410046003800370043003000360043003900430044003400440036004200410037003300350038004600330037004100420038003200390033003700460030003700390044004400380043003800340041003000350034003700390034003100370035004300330030003800320038004400460033003700350038003800410030003400420030003800450043004600390043004300330042004400430031003900300036004300430041003600340034003200460033004400310042003200460042003600340035003200310031003200320045003100320030004400350043003700350037004400320033003300320036003000330044004200430036003900370034004500330041003800370033003700300043003000460034003200300038003500430041003200300042003100410034003800320039003500310046004100450046004500340043003300320045004100340046004300430034003800380036003900380045003500310030003000370035003300370046003000460035003500330043003500320046003900330031003100460044003700320044004400330039003100430035004500350042004600450044003700410033004200460041003200390043004100460036004300430042004200310043003000440044003500320037003500330043004600300034003900370043003700350032004300460030003300370038003600360031003600450032003100390041004400430038004200450031003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007350038003100000555004D00000755004D004900004955006E006900740065006400200053007400610074006500730020004D0069006E006F00720020004F00750074006C00790069006E0067002000490073006C0061006E006400730000073800350038000005550059000007550052005900000F55007200750067007500610079000085A336003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004200320043003300390034004300330042004400380046004200300030003000300030003100310045003400390034003400340031003500340033003800380044004400350044003300420046003400410043003300370030003100340043003500460031004500460032004400360039004400410033003400310032004100310034003500350042003200420031004100320043003000380032003200320032004100320034003300390043003400340039003700330045003800300045003000450036003200420042003800330039004600390030004300360045004200450038003400450038004500340032003600380032003300410044003900450032003500320030003400370031004100420031003500320044003100350041004400370046003300300035003600350033003100410034004400370045004300450042004100330035003900300043003100460042003000300031004600300045003800370037003300340035003200390041003500380038004500310033003400300030004100350031003400430046004500440031004200460034003600340039003200360036004200440043004100340038003600390038003900360043003200450038004600380038003700300037003400460045003800300046004200460039003100350030004400300045004300330039003000430036004400350030003100390041003500460043003100460037003500450046003100370042003200440038003200430039003500350038003600300042003300360039004200330042003100370035004300350045004200420044003100450030003500360041003300380041004500450035003700300038004400430035003300440032003100410037003400310046004200420030003400360033003000450036003000420033004200440033003100310037003200440042003100350032003800410046003700380045003400420045003800420042003500380036003600300032003400390030003400460034004200430032004500420037003800440031004100420039004500320030003200360035004100370044003000330037003000410041003000380039003000380044003600450030003100300045004400390037003100390044004500330041003400460037004300460042003300440042003400450043003000410041003500450039003600350037003400330044004300350045004300460041003600310046003400320041003800410046003600330043004100390034004300390045004600420046004100300034003600360033004100380033003600450038004300360032003000430038004300300033003500300037003600300041003400430044003900350036004400460042003000460043003900440039004200450037003700440036003000310038003200360032003200440032003300370046003600300042003500450044004200330041003800420036003500430037004300320045003200360045003300430037003000360043003900460042003700370046004400320038004300430033003800440042003100380041004200440045003300420042004600460044003500460031003000460037003000410046003700300039003800360043003200380041003300440038003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380036003000000555005A00000755005A004200001555007A00620065006B0069007300740061006E000083D73600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430032003000300042003200440031003600440030004600320030003000300030003000300041004200340039003400340034003100350034003200380039003100440035004400300033003100300045004300310035003000310043003800300046003100450046003300440039003500310034003800440039003000310034003800330043003100360034003200310039003100420038003800340043004400440034004400350037004400390043004300310036004500420033003400380041003400340033004300460036003000370035003000300031003200380039003300340031003100300042003800320045003800450042004400460036003000390030004400380038004100330037004600380030004500460030003100420033004500430035003200340031003400380030003500310042004200430039004500390039004500420030004400380043003400310038003800310039004500450046003600310035003200340031004100310035003900310044003800450036003400340044003000330037003400410041003100450043003300350036003900440046003900330041004100360035003100370030004500390035003600340041003200340032003600300035003100310038004300390038004300430032003800380030003000330042003000330044003500460041003900420039003700390046004100370045003100390043004600430039004200310042004600440043003000300039003000380046004300380036003700360041003300430030004400320033003000300041004400350031003400410032003900380043003900310036004600420043003100370032004300460032003100420045003800330044003600440030003300420035003000410041004200360030003100360034003400330036003600300036003700350039004400430030004400360043004300300046004600460037004600380030003100320036003600380033003100440037003900390044004400360037003400460030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073500340038000005560055000007560055005400000F560061006E0075006100740075000086C736003000300030003000300030003000440030003800300036003000300030003000300030004100440041003500390045003600330030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300320030003000380042003400310046003800310034003800300030003000300030003100360037003400390034003400340031003500340033003800380044004100440044003200440044003200420034003300370031003000300043003600460031004500460044003900390039004200330045003300450043004300430045003600320044004400410039003200360043004200350032003800440031003200450034003800340041003900310031004200380044003700320034003700460038003000330044003400320038003200390037004600380030004300420039003500390037004100340032003400350032003800410042003400340042003200390034003500390032003700300034003300410044003500360042004200320032003700320045003100450035003800320039003400440038004100360044003500360043004600420042003900350038003700360034003100360041003600330043004600310046004600300045003900450039004500390039003100350041003800420032004300360032004300430045003400430030003600330044003400320039003600340030004300460045004100350032003800440042003200440039003700380043004200450035004600310031003400450043003600300041003000360034004200390041003800410046003000300044003400300034004600330042003200430036004300430031004500420042003900310035003900460036004100410037003500310033003600460046003000460030003600300034003800300041004500430031004600380032003000370034004200370043003200440043003200360043003400380033003300360037004300410041003900440030003600350039004600420033004200410043003600420031003200320033003500450038003500380037004100370033003400410037004100310030004600320036003800360041003000430033003000330042003300310042003900300030004100440039004600300041003900300045004400430037003200370031004600450046003000460043003900340043003600340039003300300034003900370033004200440043004300460035003500440038004100430030003500450030003200410042003000450039003300320033004400300044003600300034004600450037003500420038003000380032003900420038003000430032004100420041003200340045003700300034003100420030003100320032003300310043003100460044003700330038004100340038003200430034004400350046004100370034003200360030003200460043003100350042003000430041003600350037004300300045003900380030003900330033003500340038003800420030003400350037004200370038003900460043003100410044003700350034003100390045003800450046003500320031003800460036003200410034004300320046004300370033003900330038004600420046003800440031004600380046003800430036003000340044003500360036003200380033003600450036003000450030003300330034004400340043003900390034003500420032003500430032004400370043003900450043004300360033003300390042003700300031003800410046003800340035004500320037003300380046003200460042004600390041004600410046004400380038004600350036003600340043003000310041003400420035004500360030003100360046004500460045004500330044004400390037004600320030004300350038003500420046003200320037003300300030004200310046004100440032003200310036003000330042003000460033003500380038003600450038003700350034003200390044004600350035004600360030003100360039003600440043004100350034003200460034003300390043003100360035003200420030003800460038003900350034004600460031004300320037003000430030004300410032003900460032003800410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800360032000005560045000007560045004E000013560065006E0065007A00750065006C0061000083EF360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003100300042003200460030003200440036003100440036003200310043003000300030003000300030004200310034003900340034003400310035003400330038003800440036003300460043003700450035003100460043003300460030003300300044003000300031003300320044003000430031004400330035003100380030003500330030003300320031003800410046004300360031004200370039003800430038004300300043003000430039004300450043004300430030004300300036003600410030003200300043003000430030004300300043003000430031003700360045003700440036003000460038004600450046003300320046004300330037004600300032003500310034004500440030004300350044003900410031003200410030004300330041003200410046004300300043004600430033004300410043003000430046004300330043004100430030004300330041003200410046004300300043004400390041003100320041003000340035004400430043003800320034004600420032003300440034003700380037004100310036004600450039003600440038003600440037004500460037004600410032003800380044004600370046004600410039003500410031003300440034003700380037004100310037003200430041003100350039004300370041003700310030003600380035003800330042003100320038004300330039003300350037004400460031003900450045003300430046004500380032003500350041003300380041003200430030004600380033003800430031003800320037004300330038003100420033004100460034003900370033004600310041004200460037003300460031003900330045003700440046004400380044004400330034003500390046004200450046004500360036003700380046003500310045003700370034003800330032003900450031003700440031003100450043004400370039003400330044003400360030003000300031004500450034003300320042003400440045004100340039003600310032003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007370030003400000556004E00000756004E004D000011560069006500740020004E0061006D00008543360030003000300030003000300030004600300038003000360030003000300030003000300045003000360044003300460036003800300030003000300030003000300036003600320034004200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003800300031003000310031004500420039003800340046004400320033003000300030003000300031003000360034003900340034003400310035003400330038003800440042003500390032004200440034004500430033003300300031003400380035003300460043003700390031003500310039003200460032003900330041003100310033004100320031003300300032003000390044004500300031003200360044003800460042003000430046003000300038003800430036004300410043003900350046004100330034003500440046004100310030003200430039004400350030003200420035003500410038003700340041003500310033003200340036003900450033003900380032003100300032004100310031003200330037003200450036004100430045003700380045004400460042004600390039004500370033003200440039004500450033003300330034003300300033004600320039004100380030003600450030003500390036003900310034003100340036004500450045003600390043004300310046003100450044003900320041003300390042004500350045004500430031003000370035003700330039003800370044003700320042003600370042003000360046003700440033003100330030003000380042004600420034003200450037004300380038003200450035003600310038003000310037004500350043003600300046003200460032003800450043003900300035003400350032003200320041004600420038003500450044003500370030003400410037003000350032003700380046003100460045004300370035003300340036003200430044003900370032003900320030003900420037003900430043003900450035004100320034003900330036004100440033004400360032003800390032003800390043003700460038004200450043003500460042003400300046004400330039003500420030004300310034004500330042004200370044003200420037003400320033003100380034004100410042004600330037004500380038004600450036003500350037003200370046003000440036003000460033003100370039003700350030003400340045003600300038003000460030003500320045003300320039003400330033004100390035004100340035003300380039003500340036003500410044003400450044003600450035003700440041004200440044004300440035003800300043003100350046003300350045003000300043003000460031003400330034004100420042003900420046003100330041003000410033003700460036003500390039003700460037003300330046003100420039004500360046003300340035004400360044003600440036003500350031004200340035003100350041003000300045004500410030003400460045004100460031004100300033003700460030003100330035003300370035003200320031003500340030003300340042004500410030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073000390032000005560047000007560047004200002F560069007200670069006E002000490073006C0061006E00640073002C00200042007200690074006900730068000088DF3600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310033003000300030004400320037003900430046003700440037003100310030003000300030003000310045004400340039003400340034003100350034003200380039003100410035003900310034004400340038003900330030003100310038004300370037004600450046003500370043004500340044003600330035004600370045004100300032003400390039004200330038003100320037004500440039004400350044004100360042003300300045003000350044004400330033003000390042003200300045003900350039003700350035003700340030004200410041003800330042003700320038003800320034004500340039003500310031004400320032004300360038003400360045003100320035003100340031004200370035004400390043003600430043004500380036003100450035004300330036003500410032004500390043003800440031003700360034003600330042003900370037004500460037004300330042003000340041003300330037003400380039003400460045004100370038003700450037004300370046003300450033003700390037003800380034004600340046003400370044003500330046003200460039004200390046003700350045003200330031004100380044003100330042004500410034003300320046003900450032003200410041004600320045003300460045003300460031004300420030003400450031003300330044004400350043003500310030004600320030004600390046004300300043003500430037003800430042003500450032003300460034004600370044004600330035003200370038003300360045004300450046003600440035003500310034003600340046003900320043004500350035004500380042003900310038003600320037004400450036003000440046004500410044003000430035003200360046003100460034004600310037004100410043004300430044003200440039003100430039003600430045004500350044004200430041003200410041004100360041003500350033004100460035003300340039004100350042003000300046003000450038003200320034003500390044003000340030003400320036004400440034004300330041003700330043004200340042003400300039004300380038004100380043004300440032003600350030004400310034003400330045004200450043004500330037004200380039004300300044003800440032003300300038003000320035004500360046003000420045004400440042003400350031003400410046003800370043004100380044003600420042003800430032004400370041003900390035003200420031003400420045003100360046003800320031004200360036003200390041003200360032003400420045003300340030003600420042004300360042003200360034004200350037003900340036003100430032004100410039003700410039003200440036003800450032003100430030004400330045003000450032003600430042003100390044004300330043003700460043003300340045004200360035003100450032004400380041003300430034004300440042003000300037003800310030003300370042003900390033003700340045003000300038003000340033003800370034003100300033004500370043004100450035003900420036003300370041004200330041003100440030003800380034003800320045003700460031004400420033004300390038003700350044004400430032004500350044003100410036003000320034004600360036004600330043004300420043004300420036003300310038003300420038004300310043003100370030003800380045003900440036003300360031003600390038003300350038003300430034003700330034003200410033003200330031003300310034004300410038003400420042003300300043003900360037003100440032003600430039003700450039004600310042003400420031004100360036004200340038003400320041004600350035003300430046003500330043003600420036003900430034004500320033003900360032003300380038003100310043003000300038003600420031003400330032003400330032003400460045003400410046004500370042003800450035003100320043004200430035003200410036004500350037003200370044004400320045003100460039004200390041004600350035003500310032004100380044003300450043003300330041003700340046004400380042003800330044004200450034003500350041003700330042003000420043004200450038003600420045003500440045003600350036004100300038003900350032004300390043003900430041004100410046003100370042004500330046004400340041003000310042004500370044003100370038003900320037003300410042003900370039003200340038004600450032004600380038003400350034004100420039003200350043003100430036003200460035003800460045003300300035003900380033003200460046004100440044003800330044003800410032003200370031004400340036003700320037004200330046003600310033003500440033003700320043004500430042004600430034004200420045003500310037004300300034003000410043003200410039004200350042003000390045003500300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000738003500300000055600490000075600490052000029560069007200670069006E002000490073006C0061006E00640073002C00200055002E0053002E00008BFF36003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400\
-4200340037003400340030003000460046003000300046004600300030004600460041003000420044004100370039003300300030003000300030003000300037003700340034003900340044003400350030003700440037003000390031003000310037003000440032003200450037003400310033003900380035003000300030003000300032004200350034003900340034003400310035003400330038003800440042003500390034003400390036003800310033003700310031003800430035003700460034003900320036003300330043004400320034003300350034004400380043003100410042003700350041004100420045004400340035004100350045004500450030004400320034003300410039003000370035003100360041004200310035003500430031004600440044003400340033004600310035003000350031003000460031004500370033003900300030004100420044004100380044003000340033004400350038003300360032003300440042003800380030003200320038004100410032003600300045004400340031003500340034003400340031004100430030004200310032003200330041004400430036003200360036004400420041003200340044003300360034003300410035003900360036004600450031004500340034004100340035004100460035003200300037004400440037004600370042004400430037004500330046004200310045003900460034004400300038003200310039003800300032004400380041003700430032003700340038003200420031003300360044003000380035003100360045004400340030003100420037004500330033004500390036003000330032004600450030003800450044004500330032003100320043003300330033003300320039003900460044003100410032003200340041003300390044003600380046003100390042003000300034003800330046003000380044003300420032004300380034003400380045004100320033003800370035004100320045003600310043003800410036003700440035003200310044003400360041004400430038003100350041003900430034003500340031004400320030003300440037004600300035004200310044003600340031003200330035003100340030003700370037003600300031003600330032004100340031003300300046004200300036003700350046003900300046004100370041003100350043003500440045003400420033003600360042004100310039003400390045003900440039003800440038003300370037004200310033004500410041003200340045003400430043004200380031003600390046003400360033003400420039004400430035003100450044004200380037003100450041004500320037003900370033003300460030004300410031003100360034003000390046003400410031003000370030003000300043004200460036004200380032003200460030004400330038003400360035004100430039004100360032003300310034004600320032003600430045004500300030003900360036003900340033003700300031003600300031003300340032003800380033004200420044003500310041004100370043003500450035004500320036003300350032004100380043003500370037003800300036003500420043003800450042003100310031003600390037004300320039003500410045003300440031004300360042004600370031003100370034004500350046003800410034003200420039003400420041003700320030004300310041003000410043003700310041003000350034003700460036004200360046003300320035003000450039003600370044003200360043004100440043003100330043003400380042004200370041003300330041003200350032004100460044003200350044004600310033003800370036004400300045003100450041003700430037003300390044003300330046003400340037003900350039003200440031004400370044003500420043003800460042003500410030003800460037004400390046003100350041003700370035003800310037004600300035003000450039003900460034003100340044003400300036003600390031004300370043003300460041003800300034004300430030004200410043003700450037003100380037004300320041004500430041003400440033004600370031003000450046004600430038003300370034003600350030004300350045004500390043003600430046003100440033003700460038004100370044003100460034003300360043003200420032004500390037004500450045004200460042004500430035004500440039004500310042003400380042003600440044003300340041004600360043003600330041003100370034003800390045003300360042003600340042004300340045003100350036003100410041003600300030003900420032003000450038003100420045004200430043003000390038004600370033003000410037004600340046004400370038004300360034004400350045003800430038004300460045004400450038004100300035004300350036004500420032003200450039003500430036003100320039003500460041004400350042004200370030004100420036004500310045004600350044004400340033003900450037003300380030003700390041004200410045003300300045004500340044003400430031003000410035004100340030003400310035004400350045004400330038004300420034003300450034003700330045003300430034003700340039004400410035004600450039003200300039003300330038004500350030003200380031003400300032003200380032004400390032003500390045003200350031004600310034003800310032004300390041003100310034004400440046004400370037004600390044004300310042003600360041003500450044003100430045004100380032003300310030003600440045003000370037003000440042003100340034003600390035003300430043003100420041003100310038004300350038003200420045003700350032003300350034003800300045003900350045004200440035003600420035003000320035003000390039003700450034003600300036004500390031003400320034003000390031004200460031004600450046004400370034004500430036003400370036003300370034003700360039004600410037004100430037003000390031004600350043004200300046003200330043004200340031003200320043004600390041003100390037003900330046003800440039003900350035003100410036003500320042003500410045003900340039003600410032003400460042003200460042003300420035004600360030003900420032004500320046004500410044004400370039003300310041004600460034003000440045004300430037003300460041004500450034003900370036003200450035004200340042003200310044004300380038003500370044003500340039003600370045004300320034003600360035004400360030004400420036003000320035004400330035004400320045004400450036004500410043003900410035004300320043004600450030003100430042004200320038003400310030003400320041003400310033004400440041003200450046004500390030003600390031004600410037004100350035003800430031003900380036004400380044004300460044003500430042003400370044004500380046004400410033004500450041004600380039004600460030003700350033004600360038003400420045003000310043003600310036003500420039003000320035003300360038003800370045003000300030003000300030003000300034003900340035003400450034003400410045003400320036003000380032000007380037003600000557004600000757004C0046000023570061006C006C0069007300200061006E006400200046007500740075006E00610000073700330032000005450048000007450053004800001D5700650073007400650072006E0020005300610068006100720061000084DB36003000300030003000300030003000420030003800300036003000300030003000300030003700420046004300370044003700450030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100330031003500330032003300310032004100310030003200390045003700300030003000300030003000450043003400390034003400340031003500340032003800390031004100440044003000330031003600420043003200360030003100340038003500450031004200370036003900330045003800440035003000360043003000370036003900300032003400450031004100320038003200320030004500370035003700320037003200430044003900300044003200430031004300350039004600390031003400390045003800450038004100430039004200460046003200300042003800360035004100440045003000450041003200320039004400310043003500440031004300390034003400380034003100300032004400410043003100340039003300310036003800310043003800340033004100320038003100380046003000330042003700300039003700330042003300430046003700370030003600390034003200410034003400310038003400450043003100390034003100450034003400310039003400390037003000430032004200300030003200360044003000300035003300450039003100390037003800370044003100450039004300320037004600450036004100360042003900460043004200310041004300440039003400450035003500300046003500320036003100380030003500340041003900340034004400450046003300440030003800410034003500300030004300320043003500380032003300460044003700450035004100350035003600340033003600340042003300330043004100360044003300330037003600310045003500440041003700320033003300310045003300330041003900350036003000390038003300300030003800300037003500420046003400460035003200440037003000390031004300300037003400350038003800350038003800440041004600430032003500410041003100430030004400420036003000380030003300300030004300300030003900450036004400390042004100440045004600360033003700340033004100310043004300320033003000310036003700430046003100380041004400460034004100360045003300350036004300350038004200330044004400350033003600320031004600340042004200380030003500360046003000350042003400360044004600380032004500440046004300330039004400410033003000320046003800310039004600380041004100430033004600340035003500300045003000410041003000460036004400450041003100460035003700310036004100320043003300330034003700360032003700350036003800330037003900460034003500350033004300310030003000300030003000300030003000340039003400350034004500340034004100450034003200360030003800320000073800380037000005590045000007590045004D00000B590065006D0065006E000081D73600300030003000300030003000300046003000380030003600300030003000300030003000450030003600440033004600360038003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000430031004600330041003200340031003600460041004600340030003000300030003000300032004200340039003400340034003100350034003300380038004400360033003700430041004600410044004600420039004600380031003000360038003000380039003100360038003600380045003100410038004300300032003100380046004600460046004600460033004600310041003700390034003300440034003600300034003600300036003000360038003600440031004300380031004200410032003000360030003300300030004100430037003900300037003500440041004300340044003900310034004600300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000738003900340000055A004D0000075A004D004200000D5A0061006D0062006900610000840736003000300030003000300030003000460030003800300036003000300030003000300030004500300036004400330046003600380030003000300030003000300030003600360032003400420034003700340034003000300046004600300030004600460030003000460046004100300042004400410037003900330030003000300030003000300030003700370034003400390034004400340035003000370044003700300039003100310030004300310046003300380043004100310038003900420044003800300030003000300030003000420037003400390034003400340031003500340033003800380044004500440044003000420031003000410038003200360030003100340038003600450031004600370033003700340033003100300039003200430032003000410032004300360038004400300032004400410038003200420036003800360039003600430036003900360043003600390045003900360045003800320042003600320045004100320038004200360038003600430036004300320041003500420041003300420036003200300038003300440030003500310033003300420035003400310041003200330031003500300036004100460032003100420043004600450031003700420033003800310043003600310032004300340038004600380034003100450034004100430034003500430042003000330035003300380030004100440034003000300044003700300036003400380038003600320042003000300032003000380039004600330039003600300035003700380035004500450030003500360036003300310033003400350034004200300032003300410038004600420045003000320036004200300044003200340031004500340037004400380035003100450043003000430038003000350033003300380034003900440030003400450042003100360033004300340034003800450038004200440046004200390032004200420030004100390043003200330036003800340036003300450035003300330043004600300043003400460046003700300041003600440041004600430034003400440038004500350039003300410033004500300030004300330031004500380043003300420033003900450031004300310042003900340043004600460032004100370033004400320032003200450036003800370031003400440036003900410033003000330031004400320042004400390034003100350046004500390036003000320032004500450030003300460043003200320046003300390034003700320044003700380036004200320043003800350046003200300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000737003100360000055A00570000075A005700450000115A0069006D00620061006200770065000085133600300030003000300030003000300042003000380030003600300030003000300030003000370042004600430037004400370045003000300030003000300030003000360036003200340042003400370034003400300030004600460030003000460046003000300046004600410030004200440041003700390033003000300030003000300030003000370037003400340039003400440034003500300037004400370030003900310031003000410032003300320034004100390036003700430032004400410030003000300030003000300046004100340039003400340034003100350034003200380039003100420035003900330042004400340041004300330030003000300030003800340042004600330034003100350031004300350032003700300039003000350034003100460034003100300032003300410030004200440032004100350034004500410032004500300032003800300041004200410042003800330039003200390038003800390042003400460041003000320045003100350030003200320045003400360030003200320039004200380032004100460045003800300039003300450030004500360041003600340031003700300039003000380032004500440041003000300031003000420032003500300044003400410036004200430045004300390031003700340038004400330038003300350042004200460045003100460038004300450033003800300042003400450037003500460034004200340034004400360031004600320039004200330043003600330034003800350032003100380033004500450033003900450041004600330031003300310046004400390032003200460031003800410030004600330044004500320030004100380045004600420033003300320045003700330033003500360043004100300039003100430042003700360045004500380042004100330042004400300037003400420038004100460032004500350032004100410045004400450032003900380033004600380033003800310045003300440042003400420042003500300033003900370046003100460035003400370042004500460043003500460034004300350035003600380043004600320046004500310031004600440037003900380036004100420043003600360032003700410042004400460035003700360042003600460035003900390044004200420042003200330045004100460036004400370044003900430035003400410034003300340035003500310034003400350042003200360044003500420034003000410036003100360033003100340044004100430038003500320041004400440046003800380031004400310039003100300032003300380033003300380034003600310034003800420030004200390043003100410031003900310034003000440039004300410033003600380035003200340046003500390041003600460039003800350036003000460039003400370032003500350042004600410030004500380031004400300043004200450046003100420046003100350034003900390032004500300042003900350042004100430043004500370041004600390035003900330031003100340038004600380037004600350042004300330046003300460036003900380042004300380030004400310039004100450037004100300030003000300030003000300030003400390034003500340045003400340041004500340032003600300038003200000530003100000F41006C006100620061006D006100000530003200000541004B00000D41006C00610073006B006100000536003000000530003400000F4100720069007A006F006E0061000005300035000011410072006B0061006E007300610073000005380031000019420061006B00650072002000490073006C0061006E0064000005300036000015430061006C00690066006F0072006E0069006100000530003800001143006F006C006F007200610064006F00000530003900000543005400001743006F006E006E0065006300740069006300750074000005310030000011440065006C006100770061007200650000053100310000054400430000294400690073007400720069006300740020006F006600200043006F006C0075006D00620069006100000531003200000546004C00000F46006C006F007200690064006100000536003400003D460065006400650072006100740065006400200053007400610074006500730020006F00660020004D006900630072006F006E006500730069006100000531003300000536003600000531003500000548004900000D480061007700610069006900000538003400001D48006F0077006C0061006E0064002000490073006C0061006E006400000531003600000B49006400610068006F00000531003700001149006C006C0069006E006F0069007300000531003800000F49006E006400690061006E006100000531003900000549004100000949006F0077006100000538003600001B4A00610072007600690073002000490073006C0061006E006400000536003700001D4A006F0068006E00730074006F006E002000410074006F006C006C0000053200300000054B005300000D4B0061006E0073006100730000053200310000114B0065006E007400750063006B00790000053800390000194B0069006E0067006D0061006E002000520065006500660000053200320000134C006F00750069007300690061006E006100000532003300000B4D00610069006E00650000053600380000053200340000114D006100720079006C0061006E006400000532003500001B4D0061007300730061006300680075007300650074007400730000053200360000054D00490000114D006900630068006900670061006E00000537003100001D4D00690064007700610079002000490073006C0061006E006400730000053200370000134D0069006E006E00650073006F007400610000174D00690073007300690073007300690070007000690000053200390000114D006900730073006F00750072006900000533003000000F4D006F006E00740061006E006100000537003600001D4E006100760061007300730061002000490073006C0061006E00640000053300310000114E00650062007200610073006B00610000053300320000054E005600000D4E006500760061006400610000053300330000054E004800001B4E00650077002000480061006D0070007300680069007200650000053300340000054E004A0000154E006500770020004A006500720073006500790000053300350000054E004D0000154E006500770020004D0065007800690063006F0000053300360000054E00590000114E0065007700200059006F0072006B00000533003700001D4E006F0072007400680020004300610072006F006C0069006E00610000053300380000054E00440000194E006F007200740068002000440061006B006F007400610000053600390000053300390000054F00480000094F00680069006F0000053400300000054F004B0000114F006B006C00610068006F006D00610000053400310000054F005200000D4F007200650067006F006E00000537003000000539003500001B500061006C006D007900720061002000410074006F006C006C000005340032000019500065006E006E00730079006C00760061006E00690061000005370032000005340034000005520049000019520068006F00640065002000490073006C0061006E006400000534003500001D53006F0075007400680020004300610072006F006C0069006E006100000534003600001953006F007500740068002000440061006B006F00740061000005340037000013540065006E006E0065007300730065006500000534003800000554005800000B54006500780061007300000537003400003755002E0053002E0020004D0069006E006F00720020004F00750074006C00790069006E0067002000490073006C0061006E006400730000053400390000055500540000095500740061006800000535003000000556005400000F5600650072006D006F006E0074000005350031000011560069007200670069006E00690061000005370038000035560069007200670069006E002000490073006C0061006E006400730020006F0066002000740068006500200055002E0053002E000005370039000017570061006B0065002000490073006C0061006E0064000005350033000005570041000015570061007300680069006E00670074006F006E00000535003400000557005600001B57006500730074002000560069007200670069006E0069006100000535003500000557004900001357006900730063006F006E00730069006E00000535003600000557005900000F570079006F006D0069006E006700000541004200000F41006C006200650072007400610000054200430000214200720069007400690073006800200043006F006C0075006D0062006900610000054D00420000114D0061006E00690074006F006200610000054E004200001B4E006500770020004200720075006E0073007700690063006B0000334E006500770066006F0075006E0064006C0061006E006400200061006E00640020004C00610062007200610064006F00720000054E00530000174E006F00760061002000530063006F0074006900610000054E005400002B4E006F00720074006800770065007300740020005400650072007200690074006F007200690065007300000F4E0075006E00610076007500740000054F004E00000F4F006E0074006100720069006F0000295000720069006E006300650020004500640077006100720064002000490073006C0061006E006400000551004300000D51007500650062006500630000195300610073006B0061007400630068006500770061006E00000B590075006B006F006E00004F380039003500300034004500340037003000440030004100310041003000410030003000300030003000300030004400340039003400380034003400350032003000300030003000300030003100004942006100730065004E0075006D006200650072002000630061006E006E006F00740020006200650020006C0065007300730020007400680061006E0020007A00650072006F002E00004D42006100730065004E0075006D006200650072002000630061006E006E006F0074002000620065002000670072006500610074006500720020007400680061006E0020003100370030002E00003B43006F006E007300740061006E0074004E0061006D0065002000630061006E004E004F005400200062006500200065006D007000740079002E000019730070006500650064006F0066006C006900670068007400000F670072006100760069007400790000336700720061007600690074006100740069006F006E0061006C0061006300630065006C00650072006100740069006F006E00001965006C00\
-65006300740072006F006E006D006100730073000015700072006F0074006F006E006D0061007300730000176E0065007500740072006F006E006D00610073007300001D610074006F006D00690063006D0061007300730075006E0069007400001D65006C0065006300740072006F006E00630068006100720067006500000D70006C0061006E0063006B00001362006F006C0074007A006D0061006E006E0000296D00610067006E0065007400690063007000650072006D0065006100620069006C00690074007900002D6400690065006C006500630074007200690063007000650072006D0069007400740069007600690074007900002F63006C006100730073006900630061006C0065006C0065006300740072006F006E00720061006400690075007300001B660069006E006500730074007200750063007400750072006500001562006F0068007200720061006400690075007300000F7200790064006200650072006700001766006C00750078007100750061006E00740075006D00001962006F00680072006D00610067006E00650074006F006E00002965006C0065006300740072006F006E006D00610067006E00650074006D006F006D0065006E007400001F6E00750063006C006500610072006D00610067006E00650074006F006E000025700072006F0074006F006E006D00610067006E00650074006D006F006D0065006E00740000276E0065007500740072006F006E006D00610067006E00650074006D006F006D0065006E007400003363006F006D00700074006F006E0065006C0065006300740072006F006E0077006100760065006C0065006E00670074006800002F63006F006D00700074006F006E00700072006F0074006F006E0077006100760065006C0065006E006700740068000021730074006500660061006E002D0062006F006C0074007A006D0061006E006E000111610076006F0067006100640072006F00001D69006400650061006C0067006100730076006F006C0075006D0065000007670061007300000F6600610072006100640061007900002B7100750061006E00740075006D0068006F006C00650072006500730069007300740061006E0063006500002B460072006F006D002000630061006E004E004F005400200062006500200065006D007000740079002E00002754006F002000630061006E004E004F005400200062006500200065006D007000740079002E0000057E007E00000B6D0065007400650072000015630065006E00740069006D00650074006500720000156D0069006C006C0069006D00650074006500720000136B0069006C006F006D006500740065007200000966006F006F007400000969006E006300680000096D0069006C0065000009790061007200640000156D006900630072006F006D00650074006500720000136E0061006E006F006D006500740065007200000D6B0065006C00760069006E00000F630065006C0073006900750073000015660061006800720065006E006800650069007400000F720061006E006B0069006E006500000F72006500610075006D00750072000011640069007300740061006E00630065000017740065006D0070006500720061007400750072006500002F460072006F006D002000760061006C007500650020006900730020006E006F0074002000760061006C006900640000808554006F002000760061006C007500650020006900730020006E006F0074002000760061006C00690064002C0020006F00720020006E006F0074002000760061006C0069006400200069006E00200063006F006D00620069006E006100740069006F006E00200077006900740068002000460072006F006D002000760061006C0075006500006343006F006E00760065007200740065006400560061006C00750065002000630061006E006E006F00740020006200650020006C0065007300730020007400680061006E0020004100620073006F006C0075007400650020005A00650072006F002E00005B4C006F0077006500720042006F0075006E0064002000630061006E004E004F0054002000620065002000670072006500610074006500720020007400680061006E0020005500700070006500720042006F0075006E0064002E000043590065006100720073004F0066004C006F0061006E0020006D007500730074002000620065002000310020006F007200200067007200650061007400650072002E00004B5000610079006D0065006E0074007300500065007200590065006100720020006D007500730074002000620065002000310020006F007200200067007200650061007400650072002E00005F4F007000740069006F006E0061006C00450078007400720061005000610079006D0065006E00740073002000630061006E006E006F00740020006200650020006C0065007300730020007400680061006E0020007A00650072006F002E000015690067006E006F007200650063006100730065000021630075006C00740075007200650069006E00760061007200690061006E007400001F6500780070006C0069006300690074006300610070007400750072006500002F690067006E006F00720065007000610074007400650072006E00770068006900740065007300700061006300650000136D0075006C00740069006C0069006E00650000177200690067006800740074006F006C006500660074000015730069006E0067006C0065006C0069006E0065000015650063006D00610073006300720069007000740000235200650067004500780020006F007000740069006F006E0020006F00660020002700011B2700200069007300200069006E00760061006C00690064002100013D53007400610072007400410074002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E00200031002E000009530051004C002300000761006C006C00004B4400450043004C00410052004500200040004500720072006F0072004D0065007300730061006700650020004E0056004100520043004800410052002800340030003000300029003B0000334400450043004C004100520045002000400045006E007400720079004E0075006D00620065007200200049004E0054003B0000254300520045004100540045002000500052004F0043004500440055005200450020005B000080FB5D002E005B00530051004C00730068006100720070005F0055006E0069006E007300740061006C006C005D0020004000530051004C007300680061007200700041007300730065006D0062006C00790020007300790073006E0061006D00650020003D0020004E0055004C004C0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B0055006E0069006E007300740061006C006C005D000080A55D002E005B00530051004C00730068006100720070005F00480065006C0070005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B00480065006C0070005D0000817F5D002E005B00530051004C00730068006100720070005F00530065007400530065006300750072006900740079005D00200040005000650072006D0069007300730069006F006E0053006500740020005B0069006E0074005D002C002000400041007300730065006D0062006C0079004E0061006D00650020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C00200040005300650074005400720075007300740077006F007200740068007900490066004E006F00550073006500720020005B006200690074005D0020003D002000300020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B00530065007400530065006300750072006900740079005D0000815B5D002E005B00530051004C00730068006100720070005F004700720061006E0074005000650072006D0069007300730069006F006E0073005D00200040004700720061006E00740054006F0020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000530051004C007300680061007200700053006300680065006D00610020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B004700720061006E0074005000650072006D0069007300730069006F006E0073005D0000234300520045004100540045002000460055004E004300540049004F004E0020005B000080F95D002E005B00530051004C00730068006100720070005F004900730055007000640061007400650041007600610069006C00610062006C0065005D00280029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B004900730055007000640061007400650041007600610069006C00610062006C0065005D000080E75D002E005B00530051004C00730068006100720070005F00560065007200730069006F006E005D00280029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B00560065007200730069006F006E005D000080E75D002E005B00530051004C00730068006100720070005F0057006500620053006900740065005D00280029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00530051004C00730068006100720070005D002E005B0057006500620053006900740065005D000082875D002E005B00520065006700450078005F004300610070007400750072006500470072006F00750070005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040004300610070007400750072006500470072006F00750070004E0075006D0062006500720020005B0069006E0074005D002C00200040004E006F00740046006F0075006E0064005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C00200040004C0065006E0067007400680020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004300610070007400750072006500470072006F00750070005D000082915D002E005B00520065006700450078005F004300610070007400750072006500470072006F007500700034006B005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004300610070007400750072006500470072006F00750070004E0075006D0062006500720020005B0069006E0074005D002C00200040004E006F00740046006F0075006E0064005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C00200040004C0065006E0067007400680020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004300610070007400750072006500470072006F00750070005D000081535D002E005B00520065006700450078005F004500730063006100700065005D0028004000450078007000720065007300730069006F006E0054006F0045007300630061007000650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004500730063006100700065005D000081D55D002E005B00520065006700450078005F0049006E006400650078005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C00200040004C0065006E0067007400680020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B0049006E006400650078005D000081BF5D002E005B00520065006700450078005F00490073004D0061007400630068005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B00490073004D0061007400630068005D000081C75D002E005B00520065006700450078005F00490073004D00610074006300680034006B005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B00490073004D0061007400630068005D000082A55D002E005B00520065006700450078005F004D0061007400630068005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B004D0061007400630068004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00560061006C00750065005D0020005B006E0076006100720063006800610072005D0028006D0061007800290020004E0055004C004C002C0020005B005300740061007200740050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0045006E00640050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004C0065006E006700740068005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004D0061007400630068005D000082AD5D002E005B00520065006700450078005F004D006100740063006800650073005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B004D0061007400630068004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00560061006C00750065005D0020005B006E0076006100720063006800610072005D0028006D0061007800290020004E0055004C004C002C0020005B005300740061007200740050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0045006E00640050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004C0065006E006700740068005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004D006100740063006800650073005D000082015D002E005B00520065006700450078005F004D0061007400630068004C0065006E006700740068005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C00200040004C0065006E0067007400680020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004D0061007400630068004C0065006E006700740068005D000081E35D002E005B00520065006700450078005F004D006100740063006800530069006D0070006C0065005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004D006100740063006800530069006D0070006C0065005D000081ED5D002E005B00520065006700450078005F004D006100740063006800530069006D0070006C00650034006B005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054\
-004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B004D006100740063006800530069006D0070006C0065005D0000822D5D002E005B00520065006700450078005F005200650070006C006100630065005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F0075006E00740020005B0069006E0074005D002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B005200650070006C006100630065005D000082375D002E005B00520065006700450078005F005200650070006C0061006300650034006B005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F0075006E00740020005B0069006E0074005D002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B005200650070006C006100630065005D0000829D5D002E005B00520065006700450078005F005200650070006C00610063006500490066004D006100740063006800650064005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004E006F00740046006F0075006E0064005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400043006F0075006E00740020005B0069006E0074005D002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B005200650070006C00610063006500490066004D006100740063006800650064005D000082A95D002E005B00520065006700450078005F005200650070006C00610063006500490066004D0061007400630068006500640034006B005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004E006F00740046006F0075006E0064005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F0075006E00740020005B0069006E0074005D002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B005200650070006C00610063006500490066004D006100740063006800650064005D000082C15D002E005B00520065006700450078005F00530070006C00690074005D0028004000450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400052006500670075006C0061007200450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400043006F0075006E00740020005B0069006E0074005D002C0020004000530074006100720074004100740020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B004D0061007400630068004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00560061006C00750065005D0020005B006E0076006100720063006800610072005D0028006D0061007800290020004E0055004C004C002C0020005B005300740061007200740050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0045006E00640050006F0073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004C0065006E006700740068005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B00530070006C00690074005D0000815F5D002E005B00520065006700450078005F0055006E006500730063006100700065005D0028004000450078007000720065007300730069006F006E0054006F0055006E0065007300630061007000650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B00520045004700450058005D002E005B0055006E006500730063006100700065005D000081435D002E005B0053007400720069006E0067005F0043006F006E007400610069006E0073005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530065006100720063006800560061006C007500650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0043006F006E007400610069006E0073005D000081A35D002E005B0053007400720069006E0067005F0043006F0075006E0074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053006500610072006300680020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D002C002000400043006F0075006E0074004F007600650072006C006100700020005B006200690074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0043006F0075006E0074005D000081735D002E005B0053007400720069006E0067005F004300750074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000440065006C0069006D00690074006500720020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004600690065006C006400730020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B004300750074005D000081715D002E005B0053007400720069006E0067005F0045006E006400730057006900740068005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530065006100720063006800560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0045006E006400730057006900740068005D0000813D5D002E005B0053007400720069006E0067005F0045007100750061006C0073005D002800400053007400720069006E006700560061006C0075006500410020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053007400720069006E006700560061006C0075006500420020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0045007100750061006C0073005D000081935D002E005B0053007400720069006E0067005F0049006E006400650078004F0066005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530065006100720063006800560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005300740061007200740049006E0064006500780020005B0069006E0074005D002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0049006E006400650078004F0066005D000081155D002E005B0053007400720069006E0067005F0049006E00690074004300610070005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0049006E00690074004300610070005D000081395D002E005B0053007400720069006E0067005F00490073004E0075006D0065007200690063005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004E0075006D0062006500720054007900700065004D00610073006B0020005B0069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B00490073004E0075006D0065007200690063005D000081915D002E005B0053007400720069006E0067005F004A006F0069006E005D0028004000530051004C0020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053006500700061007200610074006F00720020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004A006F0069006E004F007000740069006F006E0020005B0069006E0074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B004A006F0069006E005D000081A35D002E005B0053007400720069006E0067005F004C0061007300740049006E006400650078004F0066005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530065006100720063006800560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005300740061007200740049006E0064006500780020005B0069006E0074005D002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B004C0061007300740049006E006400650078004F0066005D000081115D002E005B0053007400720069006E0067005F004E00650077006C0069006E0065005D002800400045004F004C00540079007000650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B004E00650077006C0069006E0065005D000081E15D002E005B0053007400720069006E0067005F004E007400680049006E006400650078004F0066005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053006500610072006300680020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530074006100720074004100740020005B0069006E0074005D002C00200040004E00740068004F00630063007500720061006E006300650020005B0069006E0074005D002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D002C002000400043006F0075006E0074004F007600650072006C006100700020005B006200690074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B004E007400680049006E006400650078004F0066005D000081B55D002E005B0053007400720069006E0067005F005000610064004C006500660074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053007400720069006E0067005700690064007400680020005B0069006E0074005D002C002000400050006100640043006800610072006100630074006500720020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B005000610064004C006500660074005D000081B95D002E005B0053007400720069006E0067005F00500061006400520069006700680074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053007400720069006E0067005700690064007400680020005B0069006E0074005D002C002000400050006100640043006800610072006100630074006500720020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B00500061006400520069006700680074005D000081B55D002E005B0053007400720069006E0067005F005200650070006C006100630065005D0028004000450078007000720065007300730069006F006E0020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000460069006E00640020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040005200650070006C006100630065006D0065006E00740020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B005200650070006C006100630065005D000081CD5D002E005B0053007400720069006E0067005F00530070006C00690074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400053006500700061007200610074006F00720020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000530070006C00690074004F007000740069006F006E0020005B0069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530070006C00690074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00530070006C0069007400560061006C005D0020005B006E0076006100720063006800610072005D0028006D0061007800290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B00530070006C00690074005D000081D55D002E005B0053007400720069006E0067005F00530070006C006900740034006B005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400053006500700061007200610074006F00720020005B006E0076006100720063006800610072005D002800340030003000\
-300029002C0020004000530070006C00690074004F007000740069006F006E0020005B0069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530070006C00690074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00530070006C0069007400560061006C005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B00530070006C00690074005D000081795D002E005B0053007400720069006E0067005F0053007400610072007400730057006900740068005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000530065006100720063006800560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F006D00700061007200690073006F006E00540079007000650020005B0069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0053007400610072007400730057006900740068005D000081415D002E005B0053007400720069006E0067005F005400720069006D005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B005400720069006D005D000081CB5D002E005B0053007400720069006E0067005F005400720079005000610072007300650054006F0049006E0074005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005400610072006700650074004400610074006100540079007000650020005B006E0076006100720063006800610072005D0028003100350029002C0020004000430075006C00740075007200650020005B006E0076006100720063006800610072005D00280031003000290029002000520045005400550052004E00530020005B0042004900470049004E0054005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B005400720079005000610072007300650054006F0049006E0074005D000081775D002E005B0053007400720069006E0067005F0057006F007200640057007200610070005D002800400053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040004C0069006E0065005700690064007400680020005B0069006E0074005D002C002000400053006500700061007200610074006F00720020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0053005400520049004E0047005D002E005B0057006F007200640057007200610070005D000080F95D002E005B005500740069006C005F00430052004300330032005D00280040004200610073006500440061007400610020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B0062006900670069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00430052004300330032005D0000811D5D002E005B005500740069006C005F004400650066006C006100740065005D0028004000440061007400610054006F0043006F006D007000720065007300730020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B004400650066006C006100740065005D000082295D002E005B005500740069006C005F00470065006E00650072006100740065004400610074006500540069006D006500520061006E00670065005D0028004000530074006100720074004400610074006500540069006D00650020005B006400610074006500740069006D0065005D002C002000400045006E0064004400610074006500540069006D00650020005B006400610074006500740069006D0065005D002C0020004000530074006500700020005B0069006E0074005D002C00200040005300740065007000540079007000650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B004400610074006500740069006D0065004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004400610074006500740069006D006500560061006C005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E00650072006100740065004400610074006500540069006D006500520061006E00670065005D000082155D002E005B005500740069006C005F00470065006E00650072006100740065004400610074006500540069006D00650073005D0028004000530074006100720074004400610074006500540069006D00650020005B006400610074006500740069006D0065005D002C002000400054006F00740061006C004400610074006500540069006D006500730020005B0069006E0074005D002C0020004000530074006500700020005B0069006E0074005D002C00200040005300740065007000540079007000650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B004400610074006500740069006D0065004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004400610074006500740069006D006500560061006C005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E00650072006100740065004400610074006500540069006D00650073005D000081B75D002E005B005500740069006C005F00470065006E006500720061007400650046006C006F0061007400520061006E00670065005D0028004000530074006100720074004E0075006D0020005B0066006C006F00610074005D002C002000400045006E0064004E0075006D0020005B0066006C006F00610074005D002C0020004000530074006500700020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B0046006C006F00610074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0046006C006F0061007400560061006C005D0020005B0066006C006F00610074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E006500720061007400650046006C006F0061007400520061006E00670065005D000081A95D002E005B005500740069006C005F00470065006E006500720061007400650046006C006F006100740073005D0028004000530074006100720074004E0075006D0020005B0066006C006F00610074005D002C002000400054006F00740061006C004E0075006D00730020005B0069006E0074005D002C0020004000530074006500700020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B0046006C006F00610074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0046006C006F0061007400560061006C005D0020005B0066006C006F00610074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E006500720061007400650046006C006F006100740073005D000081975D002E005B005500740069006C005F00470065006E006500720061007400650049006E007400520061006E00670065005D0028004000530074006100720074004E0075006D0020005B0069006E0074005D002C002000400045006E0064004E0075006D0020005B0069006E0074005D002C0020004000530074006500700020005B0069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B0049006E0074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0049006E007400560061006C005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E006500720061007400650049006E007400520061006E00670065005D0000818D5D002E005B005500740069006C005F00470065006E006500720061007400650049006E00740073005D0028004000530074006100720074004E0075006D0020005B0069006E0074005D002C002000400054006F00740061006C004E0075006D00730020005B0069006E0074005D002C0020004000530074006500700020005B0069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B0049006E0074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0049006E007400560061006C005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470065006E006500720061007400650049006E00740073005D000080E95D002E005B005500740069006C005F0047006500740054006F00740061006C004D0065006D006F00720079005D00280029002000520045005400550052004E00530020005B0062006900670069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0047006500740054006F00740061006C004D0065006D006F00720079005D000081495D002E005B005500740069006C005F0047005A00690070005D0028004000440061007400610054006F0043006F006D007000720065007300730020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0047005A00690070005D000081555D002E005B005500740069006C005F00470055006E007A00690070005D0028004000440061007400610054006F004400650063006F006D007000720065007300730020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B00470055006E007A00690070005D000081775D002E005B005500740069006C005F0048006100730068005D002800400041006C0067006F0072006900740068006D0020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004200610073006500440061007400610020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0048006100730068005D000081915D002E005B005500740069006C005F004800610073006800420069006E006100720079005D002800400041006C0067006F0072006900740068006D0020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004200610073006500440061007400610020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028003800300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B004800610073006800420069006E006100720079005D000081215D002E005B005500740069006C005F0049006E0066006C006100740065005D0028004000440061007400610054006F004400650063006F006D007000720065007300730020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049006E0066006C006100740065005D000081375D002E005B005500740069006C005F0049007300560061006C0069006400430043005D0028004000430043004E0075006D0062006500720020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043004300540079007000650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049007300560061006C0069006400430043005D0000814D5D002E005B005500740069006C005F0049007300560061006C006900640043006800650063006B0052006F007500740069006E0067004E0075006D006200650072005D002800400052006F007500740069006E0067004E0075006D0062006500720020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049007300560061006C006900640043006800650063006B0052006F007500740069006E0067004E0075006D006200650072005D000081DD5D002E005B005500740069006C005F0049007300560061006C006900640043006F006E0076006500720074005D0028004000560061006C007500650054006F0043006F006E00760065007200740020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400043006F006E00760065007200740054006F0044006100740061005400790070006500730020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400044006500630069006D0061006C0050007200650063006900730069006F006E0020005B0073006D0061006C006C0069006E0074005D002C002000400044006500630069006D0061006C005300630061006C00650020005B0073006D0061006C006C0069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049007300560061006C006900640043006F006E0076006500720074005D000081655D002E005B005500740069006C005F0049007300560061006C006900640050006F007300740061006C0043006F00640065005D002800400043006F0075006E0074007200790043006F006400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400050006F007300740061006C0043006F006400650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049007300560061006C006900640050006F007300740061006C0043006F00640065005D000080FD5D002E005B005500740069006C005F0049007300560061006C0069006400530053004E005D0028004000530053004E0020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0049007300560061006C0069006400530053004E005D000081055D002E005B005500740069006C005F0054006F0057006F007200640073005D00280040004E0075006D006500720069006300560061006C007500650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B005500540049004C004900540059005D002E005B0054006F0057006F007200640073005D0000853F5D002E005B004D006100740068005F0043006F006D0070006F0075006E00640041006D006F007200740069007A006100740069006F006E005300630068006500640075006C0065005D00280040004C006F0061006E0041006D006F0075006E00740020005B0066006C006F00610074005D002C002000400041006E006E00750061006C0049006E00740065007200650073007400520061007400650020005B0066006C006F00610074005D002C0020004000590065006100720073004F0066004C006F0061006E0020005B0069006E0074005D002C00200040005000610079006D0065006E0074007300500065007200590065006100720020005B0069006E0074005D002C00200040004C006F0061006E0053007400610072007400440061007400650020005B006400610074006500740069006D0065005D002C00200040004F007000740069006F006E0061006C00450078007400720061005000610079006D0065006E00740020005B0066006C006F00610074005D0029002000520045005400550052004E005300200020005400410042004C004500200028005B005000610079006D0065006E0074004E0075006D005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B005000610079006D0065006E00740044006100740065005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0042006500670069006E006E0069006E006700420061006C0061006E00630065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B005300630068006500640075006C00650064005000610079006D0065006E0074005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B00450078007400720061005000610079006D0065006E0074005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0054006F00740061006C005000610079006D0065006E0074005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B005000720069006E0063006900700061006C005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0049006E007400650072006500730074005D0020005B0066006C\
-006F00610074005D0020004E0055004C004C002C0020005B0045006E00640069006E006700420061006C0061006E00630065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B00430075006D0075006C006100740069007600650049006E007400650072006500730074005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0054006F00740061006C0049006E007400650072006500730074005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0054006F00740061006C005000610079006D0065006E00740073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B005000610079006D0065006E00740073004C006500660074005D0020005B0069006E0074005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0043006F006D0070006F0075006E00640041006D006F007200740069007A006100740069006F006E005300630068006500640075006C0065005D000081055D002E005B004D006100740068005F0043006F006E007300740061006E0074005D002800400043006F006E007300740061006E0074004E0061006D00650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0043006F006E007300740061006E0074005D0000817F5D002E005B004D006100740068005F0043006F006E0076006500720074005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D002C0020004000460072006F006D0020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400054006F0020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0043006F006E0076006500720074005D000080DF5D002E005B004D006100740068005F0043006F00730068005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0043006F00730068005D000081275D002E005B004D006100740068005F00430075006200650052006F006F0074005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B00430075006200650052006F006F0074005D000081275D002E005B004D006100740068005F0046006100630074006F007200690061006C005D002800400042006100730065004E0075006D0062006500720020005B0069006E0074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0046006100630074006F007200690061006C005D000081995D002E005B004D006100740068005F0046006F0072006D006100740044006500630069006D0061006C005D00280040005400680065004E0075006D0062006500720020005B006E0075006D0065007200690063005D002800330038002C0020003100380029002C00200040004E0075006D0062006500720046006F0072006D006100740020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000430075006C00740075007200650020005B006E0076006100720063006800610072005D00280031003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B0046006F0072006D006100740044006500630069006D0061006C005D000080E95D002E005B004D006100740068005F00490073005000720069006D0065005D002800400042006100730065004E0075006D0062006500720020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B00490073005000720069006D0065005D000081335D002E005B004D006100740068005F00520061006E0064006F006D00520061006E00670065005D0028004000530065006500640020005B0069006E0074005D002C00200040004C006F0077006500720042006F0075006E00640020005B0069006E0074005D002C00200040005500700070006500720042006F0075006E00640020005B0069006E0074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B00520061006E0064006F006D00520061006E00670065005D000080DF5D002E005B004D006100740068005F00530069006E0068005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B00530069006E0068005D000080DF5D002E005B004D006100740068005F00540061006E0068005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B00540061006E0068005D0000815B5D002E005B004D006100740068005F005400720075006E0063006100740065005D002800400042006100730065004E0075006D0062006500720020005B0066006C006F00610074005D002C002000400044006500630069006D0061006C0050006C00610063006500730020005B00740069006E00790069006E0074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004D004100540048005D002E005B005400720075006E0063006100740065005D000081795D002E005B0044006100740065005F004100670065005D002800400053007400610072007400440061007400650020005B006400610074006500740069006D0065005D002C002000400045006E006400440061007400650020005B006400610074006500740069006D0065005D002C00200040004C006500610070005900650061007200480061006E0064006C0069006E00670020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400049006E0063006C00750064006500440061007900730020005B006200690074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004100670065005D000081875D002E005B0044006100740065005F0042007500730069006E0065007300730044006100790073005D002800400053007400610072007400440061007400650020004400410054004500540049004D0045002C002000400045006E006400440061007400650020004400410054004500540049004D0045002C00200040004500780063006C0075006400650044006100790073004D00610073006B00200042004900470049004E00540029002000520045005400550052004E005300200049004E00540020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0042007500730069006E0065007300730044006100790073005D0000813B5D002E005B0044006100740065005F00440061007900730049006E004D006F006E00740068005D0028004000590065006100720020005B0069006E0074005D002C00200040004D006F006E007400680020005B0069006E0074005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00440061007900730049006E004D006F006E00740068005D0000815B5D002E005B0044006100740065005F00440061007900730049006E004D006F006E0074006800460072006F006D004400610074006500540069006D0065005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E005300200049004E00540020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00440061007900730049006E004D006F006E0074006800460072006F006D004400610074006500540069006D0065005D0000813B5D002E005B0044006100740065005F0044006100790073004C0065006600740049006E0059006500610072005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0044006100790073004C0065006600740049006E0059006500610072005D000081195D002E005B0044006100740065005F0045007800740072006100630074005D00280040004400610074006500500061007200740020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0045007800740072006100630074005D000081A75D002E005B0044006100740065005F00460069007200730074004400610079004F0066004D006F006E00740068005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D002C00200040004E006500770048006F007500720020005B0069006E0074005D002C00200040004E00650077004D0069006E0075007400650020005B0069006E0074005D002C00200040004E00650077005300650063006F006E00640020005B0069006E0074005D002C00200040004E00650077004D0069006C006C0069007300650063006F006E00640020005B0069006E0074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00460069007200730074004400610079004F0066004D006F006E00740068005D0000816F5D002E005B0044006100740065005F0046006F0072006D00610074005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D002C00200040004400610074006500540069006D00650046006F0072006D006100740020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000430075006C00740075007200650020005B006E0076006100720063006800610072005D00280031003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0046006F0072006D00610074005D000081875D002E005B0044006100740065005F0046006F0072006D0061007400540069006D0065005300700061006E005D002800400053007400610072007400440061007400650020005B006400610074006500740069006D0065005D002C002000400045006E006400440061007400650020005B006400610074006500740069006D0065005D002C00200040004F007500740070007500740046006F0072006D006100740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0046006F0072006D0061007400540069006D0065005300700061006E005D000081395D002E005B0044006100740065005F00460072006F006D0055004E0049005800540069006D0065005D002800400055004E0049005800440061007400650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00460072006F006D0055004E0049005800540069006D0065005D000081515D002E005B0044006100740065005F00460075006C006C00440061007400650053007400720069006E0067005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00460075006C006C00440061007400650053007400720069006E0067005D000081515D002E005B0044006100740065005F00460075006C006C00540069006D00650053007400720069006E0067005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00460075006C006C00540069006D00650053007400720069006E0067005D0000817B5D002E005B0044006100740065005F004700650074004400610074006500540069006D006500460072006F006D0049006E007400560061006C0073005D002800400049006E007400440061007400650020005B0069006E0074005D002C002000400049006E007400540069006D00650020005B0069006E0074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004700650074004400610074006500540069006D006500460072006F006D0049006E007400560061006C0073005D000080F35D002E005B0044006100740065005F0047006500740049006E00740044006100740065005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0047006500740049006E00740044006100740065005D000080F35D002E005B0044006100740065005F0047006500740049006E007400540069006D0065005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0047006500740049006E007400540069006D0065005D000081295D002E005B0044006100740065005F004900730042007500730069006E006500730073004400610079005D0028004000540068006500440061007400650020004400410054004500540049004D0045002C00200040004500780063006C0075006400650044006100790073004D00610073006B00200042004900470049004E00540029002000520045005400550052004E005300200042004900540020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004900730042007500730069006E006500730073004400610079005D0000811B5D002E005B0044006100740065005F00490073004C0065006100700059006500610072005D0028004000590065006100720020005B0069006E0074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B00490073004C0065006100700059006500610072005D000081DB5D002E005B0044006100740065005F004C006100730074004400610079004F0066004D006F006E00740068005D0028004000540068006500440061007400650020005B006400610074006500740069006D0065005D002C00200040004E006500770048006F007500720020005B0069006E0074005D002C00200040004E00650077004D0069006E0075007400650020005B0069006E0074005D002C00200040004E00650077005300650063006F006E00640020005B0069006E0074005D002C00200040004E00650077004D0069006C006C0069007300650063006F006E00640020005B0069006E0074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004C006100730074004400610079004F0066004D006F006E00740068005D000081DB5D002E005B0044006100740065005F004E00650077004400610074006500540069006D0065005D0028004000590065006100720020005B0069006E0074005D002C00200040004D006F006E007400680020005B0069006E0074005D002C002000400044006100790020005B0069006E0074005D002C002000400048006F007500720020005B0069\
-006E0074005D002C00200040004D0069006E0075007400650020005B0069006E0074005D002C00200040005300650063006F006E00640020005B0069006E0074005D002C00200040004D0069006C006C0069007300650063006F006E00640020005B0069006E0074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004E00650077004400610074006500540069006D0065005D000081935D002E005B0044006100740065005F004E00740068004F006300630075007200720065006E00630065004F0066005700650065006B006400610079005D00280040004F006300630075007200720065006E006300650020005B0073006D0061006C006C0069006E0074005D002C00200040005700650065006B0064006100790020005B006E0076006100720063006800610072005D0028003100300029002C002000400053007400610072007400440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B004E00740068004F006300630075007200720065006E00630065004F0066005700650065006B006400610079005D0000812F5D002E005B0044006100740065005F0054006F0055004E0049005800540069006D0065005D0028004000530051004C00440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B0054006F0055004E0049005800540069006D0065005D000081275D002E005B0044006100740065005F005400720075006E0063006100740065005D00280040004400610074006500500061007200740020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0044004100540045005D002E005B005400720075006E0063006100740065005D000081435D002E005B0043006F006E0076006500720074005F00420069006E0061007200790054006F0048006500780053007400720069006E0067005D0028004000420069006E00610072007900560061006C007500650020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B00420069006E0061007200790054006F0048006500780053007400720069006E0067005D0000815D5D002E005B0043006F006E0076006500720074005F004400610074006500540069006D00650054006F004D00530049006E00740044006100740065005D00280040005200650061006C00440061007400650020005B006400610074006500740069006D0065005D0029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B004400610074006500540069006D00650054006F004D00530049006E00740044006100740065005D000081295D002E005B0043006F006E0076006500720074005F00460072006F006D004200610073006500360034005D002800400045006E0063006F00640065006400560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B00460072006F006D004200610073006500360034005D000081495D002E005B0043006F006E0076006500720074005F0048006500780053007400720069006E00670054006F00420069006E006100720079005D002800400048006500780053007400720069006E006700560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B0048006500780053007400720069006E00670054006F00420069006E006100720079005D0000815F5D002E005B0043006F006E0076006500720074005F004D00530049006E007400440061007400650054006F004400610074006500540069006D0065005D00280040004D00530049006E007400440061007400650020005B0069006E0074005D0029002000520045005400550052004E00530020005B006400610074006500740069006D0065005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002C002000520045005400550052004E00530020004E0055004C004C0020004F004E0020004E0055004C004C00200049004E005000550054002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B004D00530049006E007400440061007400650054006F004400610074006500540069006D0065005D0000810D5D002E005B0043006F006E0076006500720074005F0052004F005400310033005D00280040005400650078007400560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B0052004F005400310033005D000081795D002E005B0043006F006E0076006500720074005F0054006F004200610073006500360034005D002800400055006E0065006E0063006F00640065006400560061006C007500650020005B00760061007200620069006E006100720079005D0028006D006100780029002C002000400042006100730065003600340046006F0072006D0061007400740069006E0067004F007000740069006F006E0020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B0054006F004200610073006500360034005D000081215D002E005B0043006F006E0076006500720074005F00550055004400650063006F00640065005D002800400045006E0063006F00640065006400560061006C007500650020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B00760061007200620069006E006100720079005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B00550055004400650063006F00640065005D000081255D002E005B0043006F006E0076006500720074005F005500550045006E0063006F00640065005D002800400055006E0065006E0063006F00640065006400560061006C007500650020005B00760061007200620069006E006100720079005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B0043004F004E0056004500520054005D002E005B005500550045006E0063006F00640065005D000082655D002E005B004C006F006F006B00550070005F0047006500740043006F0075006E0074007200790049006E0066006F005D002800400053006500610072006300680043006F006400650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E005300200020005400410042004C004500200028005B004E0075006D00650072006900630043006F00640065005D0020005B006E0063006800610072005D0028003300290020004E0055004C004C002C0020005B00540077006F004C006500740074006500720043006F00640065005D0020005B006E0063006800610072005D0028003200290020004E0055004C004C002C0020005B00540068007200650065004C006500740074006500720043006F00640065005D0020005B006E0063006800610072005D0028003300290020004E0055004C004C002C0020005B004E0061006D0065005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0046006C006100670049006D006100670065005D0020005B00760061007200620069006E006100720079005D0028006D0061007800290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004C006F006F006B00550070005D002E005B0047006500740043006F0075006E0074007200790049006E0066006F005D000082935D002E005B004C006F006F006B00550070005F004700650074005300740061007400650049006E0066006F005D002800400053006500610072006300680043006F006400650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F0075006E0074007200790043006F006400650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E005300200020005400410042004C004500200028005B004E0075006D00650072006900630043006F00640065005D0020005B006E0063006800610072005D0028003200290020004E0055004C004C002C0020005B00540077006F004C006500740074006500720043006F00640065005D0020005B006E0063006800610072005D0028003200290020004E0055004C004C002C0020005B004E0061006D0065005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0046006C006100670049006D006100670065005D0020005B00760061007200620069006E006100720079005D0028006D0061007800290020004E0055004C004C002C0020005B0043006F0075006E0074007200790043006F00640065005D0020005B006E0063006800610072005D0028003200290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023005D002E005B004C006F006F006B00550070005D002E005B004700650074005300740061007400650049006E0066006F005D00002F730071006C0023002E007400790070006500730061006E0064006100670067007200650067006100740065007300001B4300520045004100540045002000540059005000450020005B0000809B5D002E005B0054007900700065005F0046006C006F0061007400410072007200610079005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B0054007900700065005F0046006C006F0061007400410072007200610079005D000080975D002E005B0054007900700065005F0048006100730068005400610062006C0065005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B0054007900700065005F0048006100730068005400610062006C0065005D000080A75D002E005B0054007900700065005F004E005600610072006300680061007200410072007200610079005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B0054007900700065005F004E005600610072006300680061007200410072007200610079005D000025430052004500410054004500200041004700470052004500470041005400450020005B000080E15D002E005B004100670067005F00470065006F006D00650074007200690063004100760067005D00200028004000560061006C007500650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B004100670067005F00470065006F006D00650074007200690063004100760067005D000080E55D002E005B004100670067005F004A006F0069006E005D00200028004000760061006C007500650020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D002800340030003000300029002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B004100670067005F004A006F0069006E005D000080C95D002E005B004100670067005F004D0065006400690061006E005D00200028004000760061006C007500650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B004100670067005F004D0065006400690061006E005D000080C95D002E005B004100670067005F00520061006E0064006F006D005D00200028004000760061006C007500650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B004100670067005F00520061006E0064006F006D005D000080DD5D002E005B004100670067005F0052006F006F0074004D00650061006E005300710072005D00200028004000560061006C007500650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0066006C006F00610074005D002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D002E005B004100670067005F0052006F006F0074004D00650061006E005300710072005D00002F530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073000019730071006C0023002E006E006500740077006F0072006B0000812D5D002E005B0049004E00450054005F00410064006400720065007300730054006F004E0075006D006200650072005D002800400049005000410064006400720065007300730020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B0062006900670069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B00410064006400720065007300730054006F004E0075006D006200650072005D000081295D002E005B0049004E00450054005F00480054004D004C004400650063006F00640065005D002800400045006E0063006F00640065006400480054004D004C0020005B006E0076006100720063006800610072005D0028006D0061007800290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B00480054004D004C004400650063006F00640065005D000081AB5D002E005B0049004E00450054005F00480054004D004C0045006E0063006F00640065005D00280040004400650063006F00640065006400480054004D004C0020005B006E0076006100720063006800610072005D0028006D006100780029002C00200040005700680069007400650053007000610063006500480061006E0064006C0069006E00670020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400043006F006E00740069006E0075006F007500730045006E0063006F00640069006E00670020005B006200690074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B00480054004D004C0045006E0063006F00640065005D0000812B5D002E005B0049004E00450054005F0049007300560061006C00690064004900500041006400640072006500730073005D002800400049005000410064006400720065007300730020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B0049007300560061006C00690064004900500041006400640072006500730073005D0000812B5D002E005B0049004E00450054005F004E0075006D0062006500720054006F0041006400640072006500730073005D0028004000490050004E0075006D0062006500720020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B004E0075006D0062006500720054006F0041006400640072006500730073005D000081275D002E005B0049004E00450054005F005500520049004400650063006F00640065005D002800400045006E0063006F0064006500640055005200490020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B005500520049004400650063006F00640065005D000081275D002E005B0049004E00450054005F0055005200490045006E0063006F00640065005D00280040004400650063006F0064006500640055005200490020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B0055005200490045006E0063006F00640065005D0000813F5D002E005B0049004E00450054005F0055005200490045006E0063006F006400650044006100740061005D00280040004400650063006F00640065006400550052004900440061007400610020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B0055005200490045006E0063006F006400650044006100740061005D000086175D002E005B0049004E00450054005F0055005200490047006500740049006E0066006F005D002800400055005200490020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E005300200020005400410042004C004500200028005B004100620073006F006C0075007400650050006100740068005D0020005B006E0076006100720063006800610072005D0028003400300030003000\
-290020004E0055004C004C002C0020005B004100620073006F006C007500740065005500720069005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0041007500740068006F0072006900740079005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0044006E007300530061006600650048006F00730074005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0046007200610067006D0065006E0074005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B00480061007300680043006F00640065005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0048006F00730074005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0048006F00730074004E0061006D00650054007900700065005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B00490073004100620073006F006C007500740065005500720069005D0020005B006200690074005D0020004E0055004C004C002C0020005B0049007300440065006600610075006C00740050006F00720074005D0020005B006200690074005D0020004E0055004C004C002C0020005B0049007300460069006C0065005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073004C006F006F0070006200610063006B005D0020005B006200690074005D0020004E0055004C004C002C0020005B004900730055006E0063005D0020005B006200690074005D0020004E0055004C004C002C0020005B0049007300570065006C006C0046006F0072006D00650064004F0072006900670069006E0061006C0053007400720069006E0067005D0020005B006200690074005D0020004E0055004C004C002C0020005B004C006F00630061006C0050006100740068005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B00500061007400680041006E006400510075006500720079005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0050006F00720074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00510075006500720079005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0053006300680065006D0065005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B00550073006500720045007300630061007000650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00550073006500720049006E0066006F005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B0055005200490047006500740049006E0066006F005D000081615D002E005B0049004E00450054005F005500520049004700650074004C0065006600740050006100720074005D002800400055005200490020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040005000610072007400690061006C00540079007000650020005B006E0076006100720063006800610072005D00280035003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004E006500740077006F0072006B005D002E005B0049004E00450054005D002E005B004700650074004C0065006600740050006100720074005D000019530051004C0023002E004E006500740077006F0072006B00000F730071006C0023002E00640062000083915D002E005B00440042005F00420075006C006B0043006F00700079005D002000400053006F007500720063006500540079007000650020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C002000400053006F00750072006300650043006F006E006E0065006300740069006F006E0020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C002000400053006F0075007200630065005100750065007200790020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000440065007300740069006E006100740069006F006E0043006F006E006E0065006300740069006F006E0020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C0020004000440065007300740069006E006100740069006F006E005400610062006C0065004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400042006100740063006800530069007A00650020005B0069006E0074005D002C00200040004E006F0074006900660079004100660074006500720052006F007700730020005B0069006E0074005D002C0020004000540069006D0065004F007500740020005B0069006E0074005D002C002000400043006F006C0075006D006E004D0061007000700069006E006700730020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C0020004000420075006C006B0043006F00700079004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290020003D0020004E0055004C004C002C002000400052006F007700730043006F007000690065006400200042004900470049004E00540020003D0020002D00310020004F005500540050005500540020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00440042005D002E005B00440042005D002E005B00420075006C006B0043006F00700079005D000180EF5D002E005B00440042005F0058004F0052005D0028004000560061006C00750065004F006E00650020005B006200690074005D002C0020004000560061006C0075006500540077006F0020005B006200690074005D0029002000520045005400550052004E00530020005B006200690074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00440042005D002E005B00440042005D002E005B0058004F0052005D00000F530051004C0023002E0044004200001F730071006C0023002E00730067006D006C007200650061006400650072000081AF5D002E005B0043006F006E0076006500720074005F00480074006D006C0054006F0058006D006C005D002800400044006F00630075006D0065006E00740020005B006E0076006100720063006800610072005D0028006D006100780029002C002000400044006F00630075006D0065006E00740055007200690020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000430061007300650046006F006C00640069006E00670020005B006E0076006100720063006800610072005D00280035003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028006D0061007800290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00530067006D006C005200650061006400650072005D002E005B00530047004D004C005200650061006400650072005D002E005B00480074006D006C0054006F0058006D006C005D00001F530051004C0023002E00530067006D006C00520065006100640065007200000F730071006C0023002E006F0073000086015D002E005B004F0053005F004500760065006E0074004C006F00670052006500610064005D00280040004C006F0067004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004D0061006300680069006E0065004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400053006F00750072006300650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400045006E00740072007900540079007000650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400049006E007300740061006E00630065004900440020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000430061007400650067006F007200790020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400055007300650072004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004D0065007300730061006700650020005B006E0076006100720063006800610072005D002800340030003000300029002C0020004000540069006D006500470065006E0065007200610074006500640042006500670069006E0020005B006400610074006500740069006D0065005D002C0020004000540069006D006500470065006E0065007200610074006500640045006E00640020005B006400610074006500740069006D0065005D002C002000400049006E0064006500780042006500670069006E0020005B0069006E0074005D002C002000400049006E0064006500780045006E00640020005B0069006E0074005D002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020005B006E0076006100720063006800610072005D0028003400300030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B0049006E006400650078005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00430061007400650067006F00720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0045006E0074007200790054007900700065005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0049006E007300740061006E0063006500490064005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B00540069006D006500470065006E006500720061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B00540069006D0065005700720069007400740065006E005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B004D006500730073006100670065005D0020005B006E0076006100720063006800610072005D0028006D0061007800290020004E0055004C004C002C0020005B0044006100740061005D0020005B00760061007200620069006E006100720079005D0028006D0061007800290020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004F0053005D002E005B004F0053005D002E005B004500760065006E0074004C006F00670052006500610064005D0000828F5D002E005B004F0053005F004500760065006E0074004C006F006700570072006900740065005D00280040004C006F0067004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C00200040004D0061006300680069006E0065004E0061006D00650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400053006F00750072006300650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400045006E00740072007900540079007000650020005B006E0076006100720063006800610072005D002800340030003000300029002C002000400049006E007300740061006E00630065004900440020005B0069006E0074005D002C0020004000430061007400650067006F007200790020005B0073006D0061006C006C0069006E0074005D002C00200040004D0065007300730061006700650020005B006E0076006100720063006800610072005D0028006D006100780029002C0020004000420069006E00610072007900440061007400610020005B00760061007200620069006E006100720079005D0028003800300030003000290029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004F0053005D002E005B004F0053005D002E005B004500760065006E0074004C006F006700570072006900740065005D0000812B5D002E005B004F0053005F00470065006E006500720061007400650054006F006E0065005D00280040004600720065007100750065006E006300790020005B0069006E0074005D002C00200040004400750072006100740069006F006E0020005B0069006E0074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004F0053005D002E005B004F0053005D002E005B00470065006E006500720061007400650054006F006E0065005D000080E55D002E005B004F0053005F004D0061006300680069006E0065004E0061006D0065005D00280029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004F0053005D002E005B004F0053005D002E005B004D0061006300680069006E0065004E0061006D0065005D000080BB5D002E005B004F0053005F0055007000740069006D0065005D00280029002000520045005400550052004E00530020005B0069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E004F0053005D002E005B004F0053005D002E005B0055007000740069006D0065005D00000F530051004C0023002E004F0053000021730071006C0023002E00740077006900740074006500720069007A006500720000863D5D002E005B0054007700690074007400650072005F0042006C006F0063006B0055007300650072005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C0020004000530063007200650065006E004E0061006D00650020005B006E0076006100720063006800610072005D00280032003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0042006C006F0063006B0055007300650072005D0000880B5D002E005B0054007700690074007400650072005F004300720065006100740065004600610076006F0072006900740065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E005300200020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B\
-00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004300720065006100740065004600610076006F0072006900740065005D000082555D002E005B0054007700690074007400650072005F00440065007300740072006F0079004400690072006500630074004D006500730073006100670065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00440065007300740072006F0079004400690072006500630074004D006500730073006100670065005D0000880F5D002E005B0054007700690074007400650072005F00440065007300740072006F0079004600610076006F0072006900740065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E005300200020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00440065007300740072006F0079004600610076006F0072006900740065005D000082395D002E005B0054007700690074007400650072005F00440065007300740072006F0079005300740061007400750073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005B006E0076006100720063006800610072005D0028003400300030003000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00440065007300740072006F0079005300740061007400750073005D000086415D002E005B0054007700690074007400650072005F0046006F006C006C006F00770055007300650072005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C0020004000530063007200650065006E004E0061006D00650020005B006E0076006100720063006800610072005D00280032003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0046006F006C006C006F00770055007300650072005D000086055D002E005B0054007700690074007400650072005F0047006500740042006C006F0063006B0073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D002800310030003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0047006500740042006C006F0063006B0073005D0000815F5D002E005B0054007700690074007400650072005F004700650074004600610076006F00720069007400650073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086CD5D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004700650074004600610076006F00720069007400650073005D000086135D002E005B0054007700690074007400650072005F0047006500740046006F006C006C006F0077006500720073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D002800310030003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C004500520020\
-004100530020002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0047006500740046006F006C006C006F0077006500720073005D000086095D002E005B0054007700690074007400650072005F0047006500740046007200690065006E00640073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D002800310030003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0047006500740046007200690065006E00640073005D000081655D002E005B0054007700690074007400650072005F0047006500740048006F006D006500540069006D0065006C0069006E0065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086D55D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002000290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0047006500740048006F006D006500540069006D0065006C0069006E0065005D0000815D5D002E005B0054007700690074007400650072005F004700650074004D0065006E00740069006F006E0073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086CB5D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004700650074004D0065006E00740069006F006E0073005D0000815D5D002E005B0054007700690074007400650072005F004700650074004D0065007300730061006700650073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086CB5D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004700650074004D0065007300730061006700650073005D000087975D002E005B0054007700690074007400650072005F00470065007400520065007400770065006500740065006400420079005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0049007300500072006F007400650063007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0049007300560065007200690066006900650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B004400650073006300720069007000740069006F006E005D0020005B006E0076006100720063006800610072005D0028003400300030003000290020004E0055004C004C002C0020005B0043007200650061007400650064004F006E005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500540043004F00660066007300650074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B00500072006F00660069006C00650049006D006100670065005500720069005D0020005B006E0076006100720063006800610072005D0028003200300034003800290020004E0055004C004C002C0020005B00500072006F00660069006C0065005500720069005D0020005B006E0076006100720063006800610072005D0028003200300034003800290020004E0055004C004C002C0020005B0046007200690065006E006400730043006F0075006E0074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004E0075006D006200650072004F00660046006F006C006C006F0077006500720073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B004E0075006D006200650072004F006600530074006100740075007300650073005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00470065007400520065007400770065006500740065006400420079005D000081855D002E005B0054007700690074007400650072005F00470065007400520065007400770065006500740073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800\
-610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086CB5D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00470065007400520065007400770065006500740073005D000081655D002E005B0054007700690074007400650072005F00470065007400520065007400770065006500740073004F0066004D0065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086D35D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00470065007400520065007400770065006500740073004F0066004D0065005D000081655D002E005B0054007700690074007400650072005F00470065007400530065006E0074004D0065007300730061006700650073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086D35D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00470065007400530065006E0074004D0065007300730061006700650073005D000087F55D002E005B0054007700690074007400650072005F004700650074005300740061007400750073005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004700650074005300740061007400750073005D000086455D002E005B0054007700690074007400650072005F0047006500740055007300650072005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005500730065007200490044006F007200530063007200650065006E004E0061006D00650020005B006E0076006100720063006800610072005D00280032003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0047006500740055007300650072005D000081655D002E005B0054007700690074007400650072005F004700650074005500730065007200540069006D0065006C0069006E0065005D002800400043006F006E00730075006D00650072004B006500790020005B006E007600610072006300\
-6800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004F007000740069006F006E0061006C0050006100720061006D006500740065007200730020005B000086D35D002E005B0054007900700065005F0048006100730068005400610062006C0065005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B004700650074005500730065007200540069006D0065006C0069006E0065005D000087ED5D002E005B0054007700690074007400650072005F0052006500740077006500650074005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040005300740061007400750073004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005400410042004C004500200028005B00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0043007200650061007400650064005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F00530074006100740075007300490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B0049006E005200650070006C00790054006F005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00490073004600610076006F00720069007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B00490073005400720075006E00630061007400650064005D0020005B006200690074005D0020004E0055004C004C002C0020005B0053006F0075007200630065005D0020005B006E0076006100720063006800610072005D002800320030003000290020004E0055004C004C002C0020005B0053007400610074007500730054006500780074005D0020005B006E0076006100720063006800610072005D002800330030003000290020004E0055004C004C002C0020005B0052006500630069007000690065006E007400490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B00540069006D0065005A006F006E0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B00530063007200650065006E004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0055007300650072004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B005500730065007200490044005D0020005B0062006900670069006E0074005D0020004E0055004C004C002C0020005B004C006F0063006100740069006F006E005D0020005B006E0076006100720063006800610072005D002800310030003000290020004E0055004C004C002C0020005B0050006C00610063006500490044005D0020005B006E0076006100720063006800610072005D00280035003000290020004E0055004C004C002C0020005B0050006C006100630065004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C00610063006500460075006C006C004E0061006D0065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650054007900700065005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C0061006300650043006F0075006E007400720079005D0020005B006E0076006100720063006800610072005D002800350030003000290020004E0055004C004C002C0020005B0050006C006100630065004C0061007400690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0050006C006100630065004C006F006E006700690074007500640065005D0020005B0066006C006F00610074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D00690074005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065006D00610069006E0069006E0067005D0020005B0069006E0074005D0020004E0055004C004C002C0020005B0052006100740065004C0069006D0069007400520065007300650074005D0020005B006400610074006500740069006D0065005D0020004E0055004C004C00290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0052006500740077006500650074005D0000827B5D002E005B0054007700690074007400650072005F00530065006E0064004400690072006500630074004D006500730073006100670065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004D0065007300730061006700650020005B006E0076006100720063006800610072005D00280031003400300029002C002000400052006500630069007000690065006E00740020005B006E0076006100720063006800610072005D00280032003000290029002000520045005400550052004E00530020005B0062006900670069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00530065006E0064004400690072006500630074004D006500730073006100670065005D000086455D002E005B0054007700690074007400650072005F0055006E0042006C006F0063006B0055007300650072005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C0020004000530063007200650065006E004E0061006D00650020005B006E0076006100720063006800610072005D00280032003000290029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0055006E0042006C006F0063006B0055007300650072005D0000866D5D002E005B0054007700690074007400650072005F0055006E0046006F006C006C006F00770055007300650072005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C0020004000530063007200650065006E004E0061006D00650020005B006E0076006100720063006800610072005D0028003200300029002C002000400055007300650072004900440020005B0062006900670069006E0074005D0029002000520045005400550052004E00530020005400410042004C00450020002800550073006500720049004400200042004900470049004E0054002C002000530063007200650065006E004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200055007300650072004E0061006D00650020004E005600410052004300480041005200280031003000300029002C00200049007300500072006F0074006500630074006500640020004200490054002C002000490073005600650072006900660069006500640020004200490054002C0020004400650073006300720069007000740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043007200650061007400650064004F006E0020004400410054004500540049004D0045002C0020004C006F0063006100740069006F006E0020004E005600410052004300480041005200280035003000300029002C002000540069006D0065005A006F006E00650020004E005600410052004300480041005200280031003000300029002C0020005500540043004F0066006600730065007400200049004E0054002C002000500072006F00660069006C00650049006D0061006700650055007200690020004E0056004100520043004800410052002800320030003400380029002C002000500072006F00660069006C00650055007200690020004E0056004100520043004800410052002800320030003400380029002C00200046007200690065006E006400730043006F0075006E007400200049004E0054002C0020004E0075006D006200650072004F00660046006F006C006C006F007700650072007300200049004E0054002C0020004E0075006D006200650072004F00660053007400610074007500730065007300200049004E0054002C002000530074006100740075007300540065007800740020004E005600410052004300480041005200280033003000300029002C00200052006100740065004C0069006D0069007400200049004E0054002C00200052006100740065004C0069006D0069007400520065006D00610069006E0069006E006700200049004E0054002C00200052006100740065004C0069006D00690074005200650073006500740020004400410054004500540049004D0045002C0020004C0061006E006700750061006700650020004E00560041005200430048004100520028003500300029002C0020004E0075006D006200650072004F0066005000750062006C00690063004C006900730074004D0065006D0062006500720073006800690070007300200049004E0054002C00200049007300470065006F0045006E00610062006C006500640020004200490054002C00200046006F006C006C006F00770069006E00670020004200490054002C0020004D007500740069006E0067002000420049005400290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B0055006E0046006F006C006C006F00770055007300650072005D000082A15D002E005B0054007700690074007400650072005F005500700064006100740065005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0020005B006E0076006100720063006800610072005D00280031003000300029002C002000400041006300630065007300730054006F006B0065006E0053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C00200040004D0065007300730061006700650020005B006E0076006100720063006800610072005D00280031003400300029002C002000400049006E005200650070006C00790054006F005300740061007400750073004900440020005B0062006900670069006E0074005D002C00200040004C00610074006900740075006400650020005B0066006C006F00610074005D002C00200040004C006F006E0067006900740075006400650020005B0066006C006F00610074005D0029002000520045005400550052004E00530020005B0062006900670069006E0074005D0020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B005500700064006100740065005D0000824D5D002E005B0054007700690074007400650072005F00780041007500740068005D002800400043006F006E00730075006D00650072004B006500790020005B006E0076006100720063006800610072005D00280031003000300029002C002000400043006F006E00730075006D006500720053006500630072006500740020005B006E0076006100720063006800610072005D00280031003000300029002C002000400055007300650072004E0061006D00650020005B006E0076006100720063006800610072005D00280031003000300029002C0020004000500061007300730077006F007200640020005B006E0076006100720063006800610072005D002800310030003000290029002000520045005400550052004E00530020005400410042004C004500200028005B0041006300630065007300730054006F006B0065006E005D0020005B006E0076006100720063006800610072005D00280031003000300029002C0020005B0041006300630065007300730054006F006B0065006E005300650063007200650074005D0020005B006E0076006100720063006800610072005D0028003100300030002900290020005700490054004800200045005800450043005500540045002000410053002000430041004C004C00450052002000410053002000450058005400450052004E0041004C0020004E0041004D00450020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D002E005B0054005700490054005400450052005D002E005B00780041007500740068005D000021530051004C0023002E00540077006900740074006500720069007A0065007200003B0A000A007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E000A0000390A007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E000A0000077E007E007E00002B20002A002A002A002000530051004C00230020002800530051004C007300680061007200700029002000002B200068006100730020006200650065006E00200069006E007300740061006C006C006500640021002100002B2000200020006E006F007700200079006F0075002000630061006E002000450058004500430020005B0000655D002E00530051004C00730068006100720070005F00480065006C007000200074006F0020006700650074002000610020006C0069007300740020006F00660020007700680061007400200069007300200069006E0063006C0075006400650064002E0000808D2000200020002D002D0020004E004F00540045003A00200049006600200079006F0075002000770061006E007400200074006F0020007500730065002000660075006E006300740069006F006E00730020007400680061007400200061006300630065007300730020007200650073006F007500720063006500730020006F0075007400730069006400650001808B2000200020002D002D0020002000200020002000200020006F00660020007400680065002000640061007400610062006100730065002C0020007300750063006800200061007300200049006E007400650072006E006500740020006F0072002000460069006C006500530079007300740065006D002C00200079006F00750020006D007500730074000125200020002000200020002000200020002000200020002000450058004500430020005B00005D5D002E00530051004C00730068006100720070005F00530065007400530065006300750072006900740079002000320020007C002000330020005B002C002000400041007300730065006D0062006C0079004E\
-0061006D0065005D00005B4D0075007300740020007000610073007300200069006E0020006100200063006F006D006D0061002D0073006500700061007200610074006500640020006C0069007300740020006F0066002000750073006500720073002E00013363006F006E007400650078007400200063006F006E006E0065006300740069006F006E0020003D002000740072007500650000474400450043004C00410052004500090040004F0062006A006500630074004E0061006D006500090009004E005600410052004300480041005200280031003200380029002C00003B09000900090040004F0062006A006500630074005400790070006500090009004E00560041005200430048004100520028003100300029002C00003909000900090040004700720061006E00740054006F00090009004E0056004100520043004800410052002800310030003000300029002C0000410900090009004000530051004C007300680061007200700053006300680065006D00610009004E005600410052004300480041005200280031003000300029000021530045005400200040004700720061006E00740054006F0020003D002000270001032700012F53004500540020004000530051004C007300680061007200700053006300680065006D00610020003D00200027000153530045005400200040004700720061006E00740054006F0020003D0020005200450050004C00410043004500280040004700720061006E00740054006F002C00200027002F0027002C0020002700270029000153530045005400200040004700720061006E00740054006F0020003D0020005200450050004C00410043004500280040004700720061006E00740054006F002C00200027002A0027002C0020002700270029000153530045005400200040004700720061006E00740054006F0020003D0020005200450050004C00410043004500280040004700720061006E00740054006F002C00200027003B0027002C0020002700270029000153530045005400200040004700720061006E00740054006F0020003D0020005200450050004C00410043004500280040004700720061006E00740054006F002C00200027002D0027002C00200027002700290001574400450043004C0041005200450020006300750072005F006F0062006A006500630074007300200043005500520053004F005200200046004100530054005F0046004F0052005700410052004400200046004F00520000310900530045004C00450043005400090073006F002E006E0061006D0065002C00200073006F002E00740079007000650000490900460052004F004D0009007300790073002E006D006F00640075006C0065005F0061007300730065006D0062006C0079005F0075007300610067006500730020006D00610075000043090049004E004E004500520020004A004F0049004E0009007300790073002E0061007300730065006D0062006C006900650073002000610073006D0062006C00790000550900090009004F004E000900610073006D0062006C0079002E0061007300730065006D0062006C0079005F006900640020003D0020006D00610075002E0061007300730065006D0062006C0079005F00690064000081AD09000900090041004E0044000900610073006D0062006C0079002E006E0061006D006500200049004E00200028002700530051004C00230027002C0020002700530051004C0023002E004F00530027002C0020002700530051004C0023002E00540077006900740074006500720069007A006500720027002C0020002700530051004C0023002E00530067006D006C0052006500610064006500720027002C0020002700530051004C0023002E0044006F0074004E00650074005A006900700027002C0020002700530051004C0023002E0049006D0061006700650027002C0020002700530051004C0023002E004400420027002C0020002700530051004C0023002E00460069006C006500530079007300740065006D0027002C0020002700530051004C0023002E004E006500740077006F0072006B0027002C0020002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730027002C0020004E002700530051004C0023002E004A0073006F006E004600780027002C0020004E002700530051004C0023002E0058004D004C00270029000135090049004E004E004500520020004A004F0049004E0009007300790073002E006F0062006A006500630074007300200073006F0000450900090009004F004E00090073006F002E006F0062006A006500630074005F006900640020003D0020006D00610075002E006F0062006A006500630074005F0069006400004909000900090041004E004400090073006F002E007400790070006500200049004E002000280027004600540027002C00200027004600530027002C0020002700500043002700290001813709000900090041004E004400090073006F002E006E0061006D00650020004E004F005400200049004E00200028002700530051004C00730068006100720070005F005300650074007500700027002C0020002700530051004C00730068006100720070005F00550070006400610074006500270020002C002700530051004C00730068006100720070005F0055006E0069006E007300740061006C006C0027002C0020002700530051004C00730068006100720070005F005300650074005300650063007500720069007400790027002C0020002700530051004C00730068006100720070005F004700720061006E0074005000650072006D0069007300730069006F006E00730027002C0020002700530051004C00730068006100720070005F0044006F0077006E006C006F00610064002700290001214F00500045004E0020006300750072005F006F0062006A00650063007400730000154600450054004300480009004E004500580054000021460052004F004D0009006300750072005F006F0062006A006500630074007300003B49004E0054004F00090040004F0062006A006500630074004E0061006D0065002C00200040004F0062006A00650063007400540079007000650000355700480049004C0045002000280040004000460045005400430048005F0053005400410054005500530020003D00200030002900000B42004500470049004E0000430900490046002000280040004F0062006A006500630074005400790070006500200049004E002000280027004600530027002C002000270050004300270029002900010D090042004500470049004E000080B3090009004500580045004300280027004700520041004E0054002000450058004500430055005400450020004F004E0020005B00270020002B0020004000530051004C007300680061007200700053006300680065006D00610020002B00200027005D002E005B00270020002B00200040004F0062006A006500630074004E0061006D00650020002B00200027005D00200054004F002000270020002B00200040004700720061006E00740054006F0029000109090045004E004400000B090045004C00530045000080B1090009004500580045004300280027004700520041004E0054002000530045004C0045004300540020004F004E0020005B00270020002B0020004000530051004C007300680061007200700053006300680065006D00610020002B00200027005D002E005B00270020002B00200040004F0062006A006500630074004E0061006D00650020002B00200027005D00200054004F002000270020002B00200040004700720061006E00740054006F002900011709004600450054004300480009004E0045005800540000230900460052004F004D0009006300750072005F006F0062006A006500630074007300003D090049004E0054004F00090040004F0062006A006500630074004E0061006D0065002C00200040004F0062006A006500630074005400790070006500000745004E004400002343004C004F005300450020006300750072005F006F0062006A006500630074007300002D4400450041004C004C004F00430041005400450020006300750072005F006F0062006A006500630074007300004F5000650072006D0069007300730069006F006E005300650074002000630061006E0020006F006E006C007900200062006500200030002C00200031002C00200032002C0020006F00720020003300003D4400450043004C0041005200450009004000440042004E0061006D00650020004E005600410052004300480041005200280031003200380029002C000029090009004000530051004C0020004E00560041005200430048004100520028003200350036002900002F53004500540020004000440042004E0061006D00650020003D002000440042005F004E0041004D00450028002900001F49004600200028004E004F005400200045005800490053005400530028000080AB0900090009000900530045004C004500430054000900730061002E002A002C00200027002D002D002D00270020004100530020005B002D002D002D005D002C0020007500730072002E002A002C00200027002D002D002D00270020004100530020005B002D002D002D005D002C0020006C0067006E002E002A002C00200027002D002D002D00270020004100530020005B002D002D002D005D002C0020007000650072006D002E002A0001350900090009000900460052004F004D0009007300790073002E0061007300730065006D0062006C006900650073002000730061000055090009000900090049004E004E004500520020004A004F0049004E0020007300790073002E00640061007400610062006100730065005F007000720069006E0063006900700061006C007300200075007300720000570900090009000900090009004F004E0009007500730072002E007000720069006E0063006900700061006C005F006900640020003D002000730061002E007000720069006E0063006900700061006C005F00690064000063090009000900090049004E004E004500520020004A004F0049004E0020005B006D00610073007400650072005D002E007300790073002E007300650072007600650072005F007000720069006E0063006900700061006C00730020006C0067006E00003D0900090009000900090009004F004E0009006C0067006E002E005B007300690064005D0020003D0020007500730072002E005B007300690064005D000067090009000900090049004E004E004500520020004A004F0049004E0020005B006D00610073007400650072005D002E007300790073002E007300650072007600650072005F007000650072006D0069007300730069006F006E00730020007000650072006D00006B0900090009000900090009004F004E0009007000650072006D002E006700720061006E007400650065005F007000720069006E0063006900700061006C005F006900640020003D0020006C0067006E002E007000720069006E0063006900700061006C005F006900640000370900090009000900570048004500520045000900730061002E006E0061006D00650020003D0020004E002700530051004C00230027000147090009000900090041004E004400090009007000650072006D002E0063006C0061007300730020003D00200031003000300020002D002D002000530045005200560045005200014B090009000900090041004E004400090009007000650072006D002E005B00730074006100740065005D0020003D0020004E0027004700270020002D002D0020004700520041004E0054000133090009000900090041004E004400090009007000650072006D002E005B0074007900700065005D00200049004E0020002800005909000900090009000900090009000900090009004E0027005800410027002C0020002D002D002000450058005400450052004E0041004C002000410043004300450053005300200041005300530045004D0042004C005900014509000900090009000900090009000900090009004E00270058005500270020002D002D00200055004E005300410046004500200041005300530045004D0042004C00590001170900090009000900090009000900090009000900290000090900090009002900000509002900000B09004900460020002800003B09000900090028000900530045004C004500430054000900690073005F007400720075007300740077006F0072007400680079005F006F006E00002D0900090009000900460052004F004D0009007300790073002E00640061007400610062006100730065007300003109000900090009005700480045005200450009006E0061006D00650020003D0020004000440042004E0061006D0065000011090009000900290020003D002000300000070900090029000080810900090053004500540020004000530051004C0020003D002000270041004C005400450052002000440041005400410042004100530045002000270020002B0020004000440042004E0061006D00650020002B0020002700200053004500540020005400520055005300540057004F00520054004800590020004F004E002700011909000900450058004500430028004000530051004C002900005B090009005000520049004E005400200027004300680061006E0067006500640020004400420020006F007000740069006F006E0020005400520055005300540057004F005200540048005900200074006F0020004F004E0027000180D10900090052004100490053004500520052004F00520028004E00270041007300730065006D0062006C00790020006F0077006E0065007200200064006F006500730020006E006F0074002000680061007600650020007000650072006D0069007300730069006F006E00200061006E006400200040005300650074005400720075007300740077006F007200740068007900490066004E006F00550073006500720020007700610073002000730065007400200074006F00200030002E0027002C002000310036002C002000310029000151090009005000520049004E005400200027005400520055005300540057004F005200540048005900200061006C00720065006100640079002000730065007400200074006F0020004F004E002E002700015F530045004C004500430054000900640062002E00690073005F007400720075007300740077006F0072007400680079005F006F006E002C0020006100730073002E007000650072006D0069007300730069006F006E005F00730065007400002D460052004F004D00090009007300790073002E00640061007400610062006100730065007300200064006200003B49004E004E004500520020004A004F0049004E0009007300790073002E0061007300730065006D0062006C006900650073002000610073007300003D090009004F004E0009000900640062002E00640061007400610062006100730065005F006900640020003D002000440042005F00490044002800290000270900090041004E004400090009006100730073002E006E0061006D00650020003D0020002700012141004C00540045005200200041005300530045004D0042004C00590020005B0000315D002000570049005400480020005000450052004D0049005300530049004F004E005F0053004500540020003D00200000095300410046004500001153004100460045002000280031002900001F450058005400450052004E0041004C005F004100430043004500530053000027450058005400450052004E0041004C005F004100430043004500530053002000280032002900000D55004E005300410046004500002155004E005200450053005400520049004300540045004400200028003300290000375300750063006300650073007300660075006C006C0079002000730065007400200041007300730065006D0062006C00790020005B00002B5D0020005300650063007500720069007400790020004C006500760065006C00200074006F003A00200000574400450043004C004100520045000900400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020004E00560041005200430048004100520028004D004100580029002C00003909000900400041007300730065006D0062006C00790054006F00520065006D006F007600650020007300790073006E0061006D0065003B0000355300450054002000400041007300730065006D0062006C00790054006F00520065006D006F007600650020003D0020004E002700010527003B00013D5300450054002000400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020003D002000270027003B0001435000520049004E0054002000270020002A002A002A00200043006800650063006B0020004500780069007300740065006E006300650020002A002A002A0027003B000117090009000900530045004C0045004300540009002A000033090009000900460052004F004D0009007300790073002E0061007300730065006D0062006C006900650073002000730061000049090009000900570048004500520045000900730061002E006E0061006D00650020003D002000400041007300730065006D0062006C00790054006F00520065006D006F0076006500000909000900290029000077090052004100490053004500520052004F00520028004E00270025007300200064006F006500730020006E006F0074002000650078006900730074002E0027002C00200030002C00200030002C002000400041007300730065006D0062006C00790054006F00520065006D006F007600650029003B0001110900520045005400550052004E003B00000945004E0044003B0000495000520049004E0054002000270020002A002A002A00200043006800650063006B00200044006500700065006E00640065006E00630069006500730020002A002A002A0027003B000180F9530045004C004500430054000900400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020003D0020002800400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020002B002000430041005300450020005700480045004E002000400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020003D0020002700270020005400480045004E00200027002700200045004C005300450020004E0027002C0020002700200045004E00440020002B0020007300610031002E006E0061006D00650029000141460052004F004D0009007300790073002E0061007300730065006D0062006C0079005F007200650066006500720065006E006300650073002000730061007200003B49004E004E004500520020004A004F0049004E0009007300790073002E0061007300730065006D0062006C006900650073002000730061003100004D090009004F004E0009007300610031002E0061007300730065006D0062006C0079005F006900640020003D0020007300610072002E0061007300730065006D0062006C0079005F0069006400003B49004E004E004500520020004A004F0049004E0009007300790073002E0061007300730065006D0062006C0069006500730020007300610032000063090009004F004E0009007300610032002E0061007300730065006D0062006C0079005F006900640020003D0020007300610072002E007200650066006500720065006E006300650064005F0061007300730065006D0062006C0079005F006900640000455700480045005200450009007300610032002E006E0061006D00650020003D002000400041007300730065006D0062006C00790054006F00520065006D006F007600650000254F00520044004500520020004200590009007300610031002E006E0061006D0065003B00003F4900460020002800400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730020003C003E00200027002700290001810B090052004100490053004500520052004F00520028004E002700430061006E006E006F007400200075006E0069006E007300740061006C006C002000250073002000610073002000690074002000690073002000720065007100750069007200650064002000620079002000740068006500200066006F006C006C006F00770069006E006700200041007300730065006D0062006C006900650073003A0020002500730027002C002000310036002C00200031002C002000400041007300730065006D0062006C00790054006F00520065006D006F00760065002C002000400044006500700065006E00640065006E00740041007300730065006D0062006C0069006500730029003B00016F5000520049004E0054002000270020002A002A002A0020005300740061007200740069006E006700200074006F00200055004E0069006E007300740061006C006C002000530051004C00230020002800530051004C0073006800610072007000290020002A002A002A0027003B0001394400450043004C00410052004500090040004F0062006A006500630074004E0061006D00650009007300790073006E0061006D0065002C0000370900090040004F0062006A00650063007400540079007000650020004E00560041005200430048004100520028003100300029002C00002D09000900400053006300680065006D0061004E0061006D00650020007300790073006E0061006D0065003B0000634400450043004C0041005200450020006300750072005F006F0062006A006500630074007300200043005500520053004F00520020004C004F00430041004C00200046004100530054005F0046004F0052005700410052004400200046004F0052000080870900530045004C00450043005400090073006F002E006E0061006D0065002C00200073006F002E0074007900700065002C00200053004300480045004D0041005F004E0041004D004500280073006F002E0073006300680065006D0061005F0069006400290020004100530020005B0053006300680065006D0061004E0061006D0065005D00003B0900460052004F004D0009007300790073002E0061007300730065006D0062006C0079005F006D006F00640075006C0065007300200061006D0000530900090009004F004E000900610073006D0062006C0079002E0061007300730065006D0062006C0079005F006900640020003D00200061006D002E0061007300730065006D0062006C0079005F006900640000821B09000900090041004E0044000900610073006D0062006C0079002E006E0061006D006500200049004E00200028004E002700530051004C007300680061007200700027002C0020004E002700530051004C00230027002C0020004E002700530051004C0023002E004F00530027002C0020004E002700530051004C0023002E00540077006900740074006500720069007A006500720027002C0020004E002700530051004C0023002E00530067006D006C0052006500610064006500720027002C0020004E002700530051004C0023002E0044006F0074004E00650074005A006900700027002C0020004E002700530051004C0023002E0049006D0061006700650027002C0020004E002700530051004C0023002E004400420027002C0020004E002700530051004C0023002E00460069006C006500530079007300740065006D0027002C0020004E002700530051004C0023002E004E006500740077006F0072006B0027002C0020004E002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730027002C0020004E002700530051004C0023002E004A0073006F006E004600780027002C0020004E002700530051004C0023002E0058004D004C0027002C0020004E002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730050006C007500730027002900014D09000900090041004E0044000900610073006D0062006C0079002E006E0061006D00650020003D002000400041007300730065006D0062006C00790054006F00520065006D006F007600650000430900090009004F004E00090073006F002E006F0062006A006500630074005F006900640020003D00200061006D002E006F0062006A006500630074005F00690064000080A509005700480045005200450009004F0042004A004500430054005F004E0041004D004500280061006D002E006F0062006A006500630074005F0069006400290020004E004F005400200049004E00200028004E002700530051004C00730068006100720070005F0055006E0069006E007300740061006C006C0027002C0020004E002700530051004C00730068006100720070005F005300650074007500700027002900010D090055004E0049004F004E0000809B0900530045004C004500430054000900610074002E006E0061006D0065002C0020004E0027005400590050004500270020004100530020005B0074007900700065005D002C00200053004300480045004D0041005F004E0041004D0045002800610074002E0073006300680065006D0061005F0069006400290020004100530020005B0053006300680065006D0061004E0061006D0065005D0001370900460052004F004D0009007300790073002E0061007300730065006D0062006C0079005F007400790070006500730020006100740000530900090009004F004E000900610073006D0062006C0079002E0061007300730065006D0062006C0079005F006900640020003D002000610074002E0061007300730065006D0062006C0079005F00690064000080D109000900090041004E0044000900610073006D0062006C0079002E006E0061006D006500200049004E00200028004E002700530051004C007300680061007200700027002C0020004E002700530051004C00230027002C0020004E002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730027002C0020004E002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730050006C007500730027002900012109004F0052004400450052002000420059002000320020004100530043003B00001342004500470049004E00200054005200590000234F00500045004E0020006300750072005F006F0062006A0065006300740073003B00005749004E0054004F00090040004F0062006A006500630074004E0061006D0065002C00200040004F0062006A0065006300740054007900700065002C002000400053006300680065006D0061004E0061006D0065003B0000470900490046002000280040004F0062006A006500630074005400790070006500200049004E00200028004E0027004600530027002C0020004E00270046005400270029002900016F090009005000520049004E00540020002700440072006F007000700069006E0067002000460075006E006300740069\
-006F006E003A002000270020002B00200040004F0062006A006500630074004E0061006D00650020002B002000270020002E0020002E0020002E0027003B00017F09000900450058004500430028004E002700440052004F0050002000460055004E004300540049004F004E0020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B0020004E0027005D002E00270020002B00200040004F0062006A006500630074004E0061006D00650029003B000125090009005000520049004E00540020002700440072006F00700070006500640027003B00010B090045004E0044003B0000330900490046002000280040004F0062006A00650063007400540079007000650020003D0020004E00270050004300270029000171090009005000520049004E00540020002700440072006F007000700069006E0067002000500072006F006300650064007500720065003A002000270020002B00200040004F0062006A006500630074004E0061006D00650020002B002000270020002E0020002E0020002E0027003B0001808109000900450058004500430028004E002700440052004F0050002000500052004F0043004500440055005200450020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B0020004E0027005D002E00270020002B00200040004F0062006A006500630074004E0061006D00650029003B0001330900490046002000280040004F0062006A00650063007400540079007000650020003D0020004E0027004100460027002900016F090009005000520049004E00540020002700440072006F007000700069006E00670020004100670067007200650067006100740065003A002000270020002B00200040004F0062006A006500630074004E0061006D00650020002B002000270020002E0020002E0020002E002700017F09000900450058004500430028004E002700440052004F005000200041004700470052004500470041005400450020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B0020004E0027005D002E00270020002B00200040004F0062006A006500630074004E0061006D00650029000123090009005000520049004E00540020002700440072006F007000700065006400270001370900490046002000280040004F0062006A00650063007400540079007000650020003D0020004E0027005400590050004500270029000165090009005000520049004E00540020002700440072006F007000700069006E006700200054007900700065003A002000270020002B00200040004F0062006A006500630074004E0061006D00650020002B002000270020002E0020002E0020002E002700017509000900450058004500430028004E002700440052004F0050002000540059005000450020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B0020004E0027005D002E00270020002B00200040004F0062006A006500630074004E0061006D00650029000157090049004E0054004F00090040004F0062006A006500630074004E0061006D0065002C00200040004F0062006A0065006300740054007900700065002C002000400053006300680065006D0061004E0061006D006500000F45004E0044002000540052005900001742004500470049004E0020004300410054004300480000610900490046002000280043005500520053004F0052005F00530054004100540055005300280027006C006F00630061006C0027002C00200027006300750072005F006F0062006A0065006300740073002700290020003E003D0020003000290001270900090043004C004F005300450020006300750072005F006F0062006A0065006300740073000031090009004400450041004C004C004F00430041005400450020006300750072005F006F0062006A006500630074007300004909004400450043004C00410052004500200040004500720072006F0072004D0065007300730061006700650020004E00560041005200430048004100520028004D004100580029000080BB0900530045005400200040004500720072006F0072004D0065007300730061006700650020003D0020004E0027004D00730067002000270020002B00200043004F004E0056004500520054002800560041005200430048004100520028003200300029002C0020004500520052004F0052005F004E0055004D0042004500520028002900290020002B0020004E0027003A002000270020002B0020004500520052004F0052005F004D00450053005300410047004500280029000141090052004100490053004500520052004F005200280040004500720072006F0072004D006500730073006100670065002C002000310036002C00200031002900000F0900520045005400550052004E00001345004E00440020004300410054004300480000808F5000520049004E00540020002700440072006F007000700069006E0067002000500072006F0063006500640075007200650073003A002000530051004C00730068006100720070005F0055006E0049006E007300740061006C006C00200061006E0064002000530051004C00730068006100720070005F00530065007400750070002E0020002E0020002E002700017F450058004500430028002700440052004F0050002000500052004F0043004500440055005200450020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B00200027005D002E00530051004C00730068006100720070005F0055006E0069006E007300740061006C006C00270029000177450058004500430028002700440052004F0050002000500052004F0043004500440055005200450020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B00200027005D002E00530051004C00730068006100720070005F0053006500740075007000270029000180872F002A0020006E006F00770020007400680061007400200074006800650020006F0062006A0065006300740073002000610072006500200067006F006E0065002000770065002000630061006E002000640072006F0070002000740068006500200061007300730065006D0062006C007900200069007400730065006C00660020002A002F0000808349004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C007300680061007200700027002900015509005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C007300680061007200700020002E0020002E0020002E00270001330900440052004F005000200041005300530045004D0042004C00590020005B00530051004C00730068006100720070005D00002109005000520049004E00540020002700440072006F00700070006500640027000115730071006C0023002E0069006D0061006700650000808749004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E0049006D0061006700650027002900015909005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E0049006D0061006700650020002E0020002E0020002E00270001370900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E0049006D006100670065005D000011730071006C0023002E0078006D006C0000808349004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E0058004D004C0027002900015509005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E0058004D004C0020002E0020002E0020002E00270001330900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E0058004D004C005D00001D730071006C0023002E0064006F0074006E00650074007A006900700000808F49004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E0044006F0074004E00650074005A006900700027002900016109005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E0044006F0074004E00650074005A006900700020002E0020002E0020002E002700013F0900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E0044006F0074004E00650074005A00690070005D0000809149004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E00530067006D006C0052006500610064006500720027002900016309005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E00530067006D006C0052006500610064006500720020002E0020002E0020002E00270001410900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E00530067006D006C005200650061006400650072005D0000809349004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E00540077006900740074006500720069007A006500720027002900016509005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E00540077006900740074006500720069007A006500720020002E0020002E0020002E00270001430900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E00540077006900740074006500720069007A00650072005D0000808149004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E004F00530027002900015309005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E004F00530020002E0020002E0020002E00270001310900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E004F0053005D0000808149004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E004400420027002900015309005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E004400420020002E0020002E0020002E00270001310900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E00440042005D00001F730071006C0023002E00660069006C006500730079007300740065006D0000809149004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E00460069006C006500530079007300740065006D0027002900016309005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E00460069006C006500530079007300740065006D0020002E0020002E0020002E00270001410900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E00460069006C006500530079007300740065006D005D0000808B49004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E004E006500740077006F0072006B0027002900015D09005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E004E006500740077006F0072006B0020002E0020002E0020002E002700013B0900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E004E006500740077006F0072006B005D000017730071006C0023002E006A0073006F006E006600780000808949004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E004A0073006F006E004600780027002900015B09005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E004A0073006F006E004600780020002E0020002E0020002E00270001390900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E004A0073006F006E00460078005D000080A149004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E005400790070006500730041006E0064004100670067007200650067006100740065007300270029000175090009005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730020002E0020002E0020002E002700015309000900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073005D000037730071006C0023002E007400790070006500730061006E006400610067006700720065006700610074006500730070006C00750073000080A949004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730050006C007500730027002900017D090009005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730050006C007500730020002E0020002E0020002E002700015B09000900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023002E005400790070006500730041006E006400410067006700720065006700610074006500730050006C00750073005D00007B49004600200045005800490053005400530020002800530045004C00450043005400200031002000460052004F004D0020007300790073002E0061007300730065006D0062006C0069006500730020005700480045005200450020006E0061006D00650020003D0020004E002700530051004C00230027002900014D09005000520049004E00540020002700440072006F007000700069006E006700200041007300730065006D0062006C0079003A002000530051004C00230020002E0020002E0020002E002700012B0900440052004F005000200041005300530045004D0042004C00590020005B00530051004C0023005D00006B2F002A0020006C006100730074006C0079002000770065002000640072006F0070002000740068006500200053006300680065006D006100200074006800610074002000680065006C006400200074006800650020006F0062006A00650063007400730020002A002F000055490046002000280053004300480045004D0041005F00490044002800400053006300680065006D0061004E0061006D006500290020004900530020004E004F00540020004E0055004C004C00200041004E0044000080AB09004E004F00540020004500580049005300540053002800530045004C00450043005400200031002000460052004F004D0020007300790073002E006F0062006A006500630074007300200073006F00200057004800450052004500200073006F002E0073006300680065006D0061005F006900640020003D00200053004300480045004D0041005F00490044002800400053006300680065006D0061004E0061006D00650029002900006709005000520049004E00540020002700440072006F007000700069006E006700200053006300680065006D0061003A002000270020002B002000400053006300680065006D0061004E0061006D00650020002B002000270020002E0020002E0020002E00270001550900450058004500430028002700440052004F005000200053004300480045004D00410020005B00270020002B002000400053006300680065006D0061004E0061006D00650020002B00200027005D002700290001115000520049004E00540020002700270001808D5000520049004E0054002000270020002A002A002A002000530051004C00230020002800530051004C0073006800610072007000290020006900730020006E006F007700200075006E0069006E007300740061006C006C00650064002E002000200048006100760065002000610020006E0069006300650020006400610079002E0020002A002A002A002700010B20002A002A002A002000001F530051004C00230020002800530051004C00730068006100720070002900003320006900730020006E006F007700200075006E0069006E007300740061006C006C00650064002E00200020002A002A002A00007168007400740070003A002F002F007700770077002E00730071006C00730068006100720070002E0063006F006D002F007500740069006C006900740079002F00630075007200720065006E0074005F00760065007200730069006F006E005F0066007200650065002E0070006800700000754400610074006100200066006F0072002000630075007200720065006E0074002000760065007200730069006F006E0020006900730020006E006F007400200063006F00720072006500630074002E0020002000540072007900200061006700610069006E0020006C0061007400650072002E00005D530051004C00230020002800530051004C0073006800610072007000290020002800630029002000320030003000360020002D0020003200300031003000200053006F006C006F006D006F006E0020005200750074007A006B00790001592A002A002A00200052006500670075006C00610072002000450078007000720065007300730069006F006E00200028005200650067004500780029002000460075006E006300740069006F006E00730020002A002A002A00008103520065006700450078005F00490073004D0061007400630068002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E00560041005200430048004100520028003400300030003000290029000019520045005400550052004E0053003A00200042004900540000274E004F005400450053003A002000530074006100720074004100740020003E003D00200030000080FF520065006700450078005F004D0061007400630068002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E00560041005200430048004100520028003400300030003000290029000080B3520045005400550052004E0053003A0020005400410042004C004500200028004D0061007400630068004E0075006D00200049004E0054002C002000560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740050006F007300200049004E0054002C00200045006E00640050006F007300200049004E0054002C0020004C0065006E00670074006800200049004E0054002900008103520065006700450078005F004D006100740063006800650073002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E0056004100520043004800410052002800340030003000300029002900008123520065006700450078005F004D0061007400630068004C0065006E006700740068002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740041007400200049004E0054002C0020004C0065006E00670074006800200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E0056004100520043004800410052002800340030003000300029002900002D520045005400550052004E0053003A0020004E00560041005200430048004100520028004D0041005800290000810B520065006700450078005F004D006100740063006800530069006D0070006C0065002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E0056004100520043004800410052002800340030003000300029002900008151520065006700450078005F005200650070006C006100630065002800450078007000720065007300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C0020005200650070006C006100630065006D0065006E00740020004E0056004100520043004800410052002800340030003000300029002C00200043006F0075006E007400200049004E0054002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E0056004100520043004800410052002800340030003000300029002900008115520065006700450078005F00530070006C0069007400280045007800700072006500\
-7300730069006F006E0054006F00560061006C006900640061007400650020004E00560041005200430048004100520028004D004100580029002C00200052006500670075006C0061007200450078007000720065007300730069006F006E0020004E0056004100520043004800410052002800340030003000300029002C00200043006F0075006E007400200049004E0054002C0020005300740061007200740041007400200049004E0054002C002000520065006700450078004F007000740069006F006E0073004C0069007300740020004E005600410052004300480041005200280034003000300030002900290000312A002A002A00200053007400720069006E0067002000460075006E006300740069006F006E00730020002A002A002A0000808D53007400720069006E0067005F0043006F006E007400610069006E007300280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C002000530065006100720063006800560061006C007500650020004E0056004100520043004800410052002800340030003000300029002900002B4E004F005400450053003A00200043006100730065002D00530065006E007300690074006900760065000180EB53007400720069006E0067005F0043006F0075006E007400280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C002000530065006100720063006800560061006C007500650020004E00560041005200430048004100520028004D004100580029002C0020005300740061007200740041007400200049004E0054002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E0054002C00200043006F0075006E0074004F007600650072006C0061007000200042004900540029000019520045005400550052004E0053003A00200049004E00540000274E004F005400450053003A002000530074006100720074004100740020003E003D00200031000080854E004F005400450053003A00200043006F006D00700061007200690073006F006E00540079007000650020003D00200031002000280063006100730065002D00730065006E00730069007400690076006500290020006F007200200032002000280063006100730065002D0049004E00730065006E0073006900740069007600650029000180AD53007400720069006E0067005F00430075007400280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C002000440065006C0069006D00690074006500720020004E0056004100520043004800410052002800340030003000300029002C0020004600690065006C006400730020004E00560041005200430048004100520028003400300030003000290029000080A94E004F005400450053003A0020004600690065006C006400730020003D0020005B0042006500670069006E004600690065006C0064002D005D0020007C0020005B002D0045006E0064004600690065006C0064005D0020007C0020005B0042006500670069006E004600690065006C0064002D0045006E0064004600690065006C0064005D0020007C0020005B004600690065006C0064004E0075006D005D0020005B002C005D000180B753007400720069006E0067005F0045006E00640073005700690074006800280053007400720069006E006700560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C002000530065006100720063006800560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E005400290000808B53007400720069006E0067005F0045007100750061006C007300280053007400720069006E006700560061006C0075006500410020004E00560041005200430048004100520028004D004100580029002C00200053007400720069006E006700560061006C0075006500420020004E00560041005200430048004100520028004D0041005800290029000080D353007400720069006E0067005F0049006E006400650078004F006600280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C002000530065006100720063006800560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740049006E00640065007800200049004E0054002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E0054002900002D4E004F005400450053003A0020005300740061007200740049006E0064006500780020003E003D0020003100005353007400720069006E0067005F0049006E0069007400430061007000280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D00410058002900290000809753007400720069006E0067005F004A006F0069006E002800530051004C0020004E00560041005200430048004100520028004D004100580029002C00200053006500700061007200610074006F00720020004E0056004100520043004800410052002800340030003000300029002C00200043006F006D00620069006E0065004F007000740069006F006E00200049004E0054002900005B4E004F005400450053003A00200053006500700061007200610074006F0072002000630061006E0020006200650020006D006F007200650020007400680061006E002000310020006300680061007200610063007400650072000080954E004F005400450053003A00200043006F006D00620069006E0065004F007000740069006F006E003A002000310020003D00200066006F00720020004B00650065007000200045006D00700074007900200045006E00740072006900650073003B002000320020003D002000520065006D006F0076006500200045006D00700074007900200045006E00740072006900650073000080DB53007400720069006E0067005F004C0061007300740049006E006400650078004F006600280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C002000530065006100720063006800560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C0020005300740061007200740049006E00640065007800200049004E0054002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E00540029000080A74E004F005400450053003A0020005300740061007200740049006E0064006500780020003E003D00200031003B00200043006F006D00700061007200690073006F006E00540079007000650020003D00200031002000280063006100730065002D00730065006E00730069007400690076006500290020006F007200200032002000280063006100730065002D0049004E00730065006E007300690074006900760065002900017B53007400720069006E0067005F004E00650077006C0069006E006500280045004F004C00540079007000650020004E00560041005200430048004100520028003400300030003000290029002000520045005400550052004E00530020004E0056004100520043004800410052002800340030003000300029000080B54E004F005400450053003A00200045004F004C00540079007000650020003D002000630072006C0066002C00770069006E002C00770069006E0064006F00770073002C0064006F0073002C006F0073002F00320020003B0020006C0066002C0075006E006900780020003B002000630072002C006D006100630020003B0020006600660020003B0020006E0065006C002C003300390030002C006F0073002F003300390030002C0065006200630064006900630000810F53007400720069006E0067005F004E007400680049006E006400650078004F006600280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C00200053006500610072006300680020004E00560041005200430048004100520028004D004100580029002C0020005300740061007200740041007400200049004E0054002C0020004E00740068004F00630063007500720061006E0063006500200049004E0054002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E0054002C00200043006F0075006E0074004F007600650072006C0061007000200042004900540029000080B153007400720069006E0067005F005000610064004C00650066007400280053007400720069006E006700560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C00200053007400720069006E00670057006900640074006800200049004E0054002C00200050006100640043006800610072006100630074006500720020004E0056004100520043004800410052002800340030003000300029002900002F520045005400550052004E0053003A0020004E005600410052004300480041005200280034003000300030002900004D4E004F005400450053003A00200053007400720069006E0067005700690064007400680020003E003D0020004C0045004E00280053007400720069006E006700560061006C007500650029000080B353007400720069006E0067005F0050006100640052006900670068007400280053007400720069006E006700560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C00200053007400720069006E00670057006900640074006800200049004E0054002C00200050006100640043006800610072006100630074006500720020004E00560041005200430048004100520028003400300030003000290029000080A553007400720069006E0067005F00530070006C0069007400280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C00200053006500700061007200610074006F00720020004E0056004100520043004800410052002800340030003000300029002C002000530070006C00690074004F007000740069006F006E00200049004E0054002900006D520045005400550052004E0053003A0020005400410042004C00450020002800530070006C00690074004E0075006D00200049004E0054002C002000530070006C0069007400560061006C0020004E00560041005200430048004100520028003400300030003000290029000080914E004F005400450053003A002000530070006C00690074004F007000740069006F006E003A002000310020003D00200066006F00720020004B00650065007000200045006D00700074007900200045006E00740072006900650073003B002000320020003D002000520065006D006F0076006500200045006D00700074007900200045006E007400720069006500730000809953007400720069006E0067005F00530070006C006900740049006E0074006F004600690065006C0064007300200040005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C002000400052006500670045007800440065006C0069006D00690074006500720020004E0056004100520043004800410052002800340030003000300029000080CF500052004F0043003A00200052006500730075006C007400200073006500740020006900730020004E00560041005200430048004100520028004D0041005800290020006600690065006C0064002000730070006500630069006600690065006400200069006E0020004000510075006500720079002000620072006F006B0065006E00200069006E0074006F0020006600690065006C006400730020006200610073006500640020006F006E002000400052006500670045007800440065006C0069006D0069007400650072000080BB53007400720069006E0067005F005300740061007200740073005700690074006800280053007400720069006E006700560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C002000530065006100720063006800560061006C007500650020004E0056004100520043004800410052002800340030003000300029002C00200043006F006D00700061007200690073006F006E005400790070006500200049004E0054002900004D53007400720069006E0067005F005400720069006D00280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D0041005800290029000080A753007400720069006E0067005F0057006F00720064005700720061007000280053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D004100580029002C0020004C0069006E00650057006900640074006800200049004E0054002C00200053006500700061007200610074006F00720020004E005600410052004300480041005200280034003000300030002900290000332A002A002A0020005500740069006C006900740079002000460075006E006300740069006F006E00730020002A002A002A0000475500740069006C005F00430052004300330032002800420061007300650044006100740061002000560041005200420049004E0041005200590028004D004100580029002900001F520045005400550052004E0053003A00200042004900470049004E00540000575500740069006C005F004400650066006C006100740065002800440061007400610054006F0043006F006D00700072006500730073002000560041005200420049004E0041005200590028004D004100580029002900002D520045005400550052004E0053002000560041005200420049004E0041005200590028004D004100580029000080D75500740069006C005F00470065006E00650072006100740065004400610074006500540069006D006500520061006E00670065002800530074006100720074004400610074006500540069006D00650020004400410054004500540049004D0045002C00200045006E0064004400610074006500540069006D00650020004400410054004500540049004D0045002C0020005300740065007000200049004E0054002C0020005300740065007000540079007000650020004E0056004100520043004800410052002800340030003000300029002900006D520045005400550052004E0053003A0020005400410042004C004500200028004400610074006500740069006D0065004E0075006D00200049004E0054002C0020004400610074006500740069006D006500560061006C0020004400410054004500540049004D00450029000080C54E004F005400450053003A002000530074006500700020003C003E00200030003B00200053007400650070005400790070006500200049004E002000280079006500610072002C0020006D006F006E00740068002C0020006400610079002C00200068006F00750072002C0020006D0069006E007500740065002C0020007300650063006F006E0064002C0020006D0069006C006C0069007300650063006F006E0064002C00200071007500610072007400650072002C0020007700650065006B0029000080CB5500740069006C005F00470065006E00650072006100740065004400610074006500540069006D00650073002800530074006100720074004400610074006500540069006D00650020004400410054004500540049004D0045002C00200054006F00740061006C004400610074006500540069006D0065007300200049004E0054002C0020005300740065007000200049004E0054002C0020005300740065007000540079007000650020004E00560041005200430048004100520028003400300030003000290029000080EF4E004F005400450053003A002000530074006500700020003C003E00200030003B00200054006F00740061006C004400610074006500540069006D006500730020003E003D00200030003B00200053007400650070005400790070006500200049004E002000280079006500610072002C0020006D006F006E00740068002C0020006400610079002C00200068006F00750072002C0020006D0069006E007500740065002C0020007300650063006F006E0064002C0020006D0069006C006C0069007300650063006F006E0064002C00200071007500610072007400650072002C0020007700650065006B0029000080835500740069006C005F00470065006E006500720061007400650046006C006F0061007400520061006E00670065002800530074006100720074004E0075006D00200046004C004F00410054002C00200045006E0064004E0075006D00200046004C004F00410054002C0020005300740065007000200046004C004F00410054002900005B520045005400550052004E0053003A0020005400410042004C0045002000280046006C006F00610074004E0075006D00200049004E0054002C00200046006C006F0061007400560061006C00200046004C004F0041005400290000214E004F005400450053003A002000530074006500700020003C003E0020003000007D5500740069006C005F00470065006E006500720061007400650046006C006F006100740073002800530074006100720074004E0075006D00200046004C004F00410054002C00200054006F00740061006C004E0075006D007300200049004E0054002C0020005300740065007000200046004C004F0041005400290000414E004F005400450053003A002000530074006500700020003C003E00200030003B00200054006F00740061006C004E0075006D00730020003E003D002000300000735500740069006C005F00470065006E006500720061007400650049006E007400520061006E00670065002800530074006100720074004E0075006D00200049004E0054002C00200045006E0064004E0075006D00200049004E0054002C0020005300740065007000200049004E0054002900004F520045005400550052004E0053003A0020005400410042004C0045002000280049006E0074004E0075006D00200049004E0054002C00200049006E007400560061006C00200049004E005400290000715500740069006C005F00470065006E006500720061007400650049006E00740073002800530074006100720074004E0075006D00200049004E0054002C00200054006F00740061006C004E0075006D007300200049004E0054002C0020005300740065007000200049004E005400290000595500740069006C005F00470055006E007A00690070002800440061007400610054006F004400650063006F006D00700072006500730073002000560041005200420049004E0041005200590028004D00410058002900290000515500740069006C005F0047005A00690070002800440061007400610054006F0043006F006D00700072006500730073002000560041005200420049004E0041005200590028004D00410058002900290000795500740069006C005F004800610073006800280041006C0067006F0072006900740068006D0020004E0056004100520043004800410052002800340030003000300029002C002000420061007300650044006100740061002000560041005200420049004E0041005200590028004D004100580029002900006F4E004F005400450053003A00200041006C0067006F0072006900740068006D0020003D0020004D00440035002C00200053004800410031002C0020005300480041003200350036002C0020005300480041003300380034002C0020006F0072002000530048004100350031003200005B5500740069006C005F0049006E0066006C006100740065002800440061007400610054006F004400650063006F006D00700072006500730073002000560041005200420049004E0041005200590028004D004100580029002900007D5500740069006C005F0049007300560061006C0069006400430043002800430043004E0075006D0062006500720020004E0056004100520043004800410052002800340030003000300029002C00200043004300540079007000650020004E0056004100520043004800410052002800340030003000300029002900006B4E004F005400450053003A00200043004300540079007000650020003D0020006D0063002C00200076006900730061002C00200064006900730063002C00200061006D00650078002C002000640069006E006500720073002C0020007B0065006D007000740079007D0000795500740069006C005F0049007300560061006C006900640043006800650063006B0052006F007500740069006E0067004E0075006D00620065007200280052006F007500740069006E0067004E0075006D0062006500720020004E005600410052004300480041005200280034003000300030002900290000809B5500740069006C005F0049007300560061006C006900640050006F007300740061006C0043006F0064006500280043006F0075006E0074007200790043006F006400650020004E0056004100520043004800410052002800340030003000300029002C00200050006F007300740061006C0043006F006400650020004E00560041005200430048004100520028003400300030003000290029000080B14E004F005400450053003A00200043006F0075006E0074007200790043006F006400650020003D002000760061006C0069006400200032002000630068006100720061006300740065007200200043006F0075006E00740072007900200043006F006400650020002800630075007200720065006E0074006C00790020006F006E006C007900200055005300200061006E006400200043004100200073007500700070006F007200740065006400290000475500740069006C005F0049007300560061006C0069006400530053004E002800530053004E0020004E005600410052004300480041005200280034003000300030002900290000415500740069006C005F0054006F0057006F0072006400730028004E0075006D006500720069006300560061006C0075006500200046004C004F0041005400290000774E004F005400450053003A0020004200650074007700650065006E0020002D003900390039002C003900390039002C003900390039002C003900390039002C00390039003900200061006E00640020003900390039002C003900390039002C003900390039002C003900390039002C00390039003900012D2A002A002A0020004D006100740068002000460075006E006300740069006F006E00730020002A002A002A00003D4D006100740068005F0046006100630074006F007200690061006C00280042006100730065004E0075006D00620065007200200049004E005400290000474E004F005400450053003A00200042006100730065004E0075006D0062006500720020004200450054005700450045004E0020003000200061006E006400200031003700300000554D006100740068005F0043006F006E007300740061006E007400280043006F006E007300740061006E0074004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002900001D520045005400550052004E0053003A00200046004C004F0041005400005B4E004F005400450053003A002000530065006500200064006F00630075006D0065006E0074006100740069006F006E00200066006F007200200061006C006C00200033003000200043006F006E007300740061006E007400730000808D4D006100740068005F0043006F006E007600650072007400280042006100730065004E0075006D00620065007200200046004C004F00410054002C002000460072006F006D0020004E0056004100520043004800410052002800340030003000300029002C00200054006F0020004E0056004100520043004800410052002800340030003000300029002900005B4E004F005400450053003A002000530065006500200064006F00630075006D0065006E0074006100740069006F006E00200066006F007200200061006C006C00200063006F006D00620069006E006100740069006F006E00730000374D006100740068005F0043006F0073006800280042006100730065004E0075006D00620065007200200046004C004F00410054002900003F4D006100740068005F00490073005000720069006D006500280042006100730065004E0075006D00620065007200200042004900470049004E0054002900004D4E004F005400450053003A002000300020003D0020004E006F0074002000610020005000720069006D0065002C002000310020003D002000490053002000610020005000720069006D00650000754D006100740068005F00520061006E0064006F006D00520061006E006700650028005300650065006400200049004E0054002C0020004C006F0077006500720042006F0075006E006400200049004E0054002C0020005500700070006500720042006F0075006E006400200049004E0054002900002F4E004F005400450053003A00200053006500650064002000630061006E0020006200650020004E0055004C004C0000374D006100740068005F00530069006E006800280042006100730065004E0075006D00620065007200200046004C004F0041005400290000374D006100740068005F00540061006E006800280042006100730065004E0075006D00620065007200200046004C004F0041005400290000814F4D006100740068005F0043006F006D0070006F0075006E00640041006D006F007200740069007A006100740069006F006E005300630068006500640075006C00650028004C006F0061006E0041006D006F0075006E007400200046004C004F00410054002C00200041006E006E00750061006C0049006E007400650072006500730074005200610074006500200046004C004F00410054002C002000590065006100720073004F0066004C006F0061006E00200049004E0054002C0020005000610079006D0065006E00740073005000650072005900650061007200200049004E0054002C0020004C006F0061006E0053007400610072007400440061007400650020004400410054004500540049004D0045002C0020004F007000740069006F006E0061006C00450078007400720061005000610079006D0065006E007400200046004C004F0041005400290000822F520045005400550052004E0053003A0020005400410042004C004500200028005000610079006D0065006E0074004E0075006D00200049004E0054002C0020005000610079006D0065006E00740044006100\
-7400650020004400410054004500540049004D0045002C00200042006500670069006E006E0069006E006700420061006C0061006E0063006500200046004C004F00410054002C0020005300630068006500640075006C00650064005000610079006D0065006E007400200046004C004F00410054002C002000450078007400720061005000610079006D0065006E007400200046004C004F00410054002C00200054006F00740061006C005000610079006D0065006E007400200046004C004F00410054002C0020005000720069006E0063006900700061006C00200046004C004F00410054002C00200049006E00740065007200650073007400200046004C004F00410054002C00200045006E00640069006E006700420061006C0061006E0063006500200046004C004F00410054002C002000430075006D0075006C006100740069007600650049006E00740065007200650073007400200046004C004F00410054002C00200054006F00740061006C0049006E00740065007200650073007400200046004C004F00410054002C00200054006F00740061006C005000610079006D0065006E0074007300200049004E0054002C0020005000610079006D0065006E00740073004C00650066007400200049004E0054002900002D2A002A002A00200044006100740065002000460075006E006300740069006F006E00730020002A002A002A000080C144006100740065005F00410067006500280053007400610072007400440061007400650020004400410054004500540049004D0045002C00200045006E006400440061007400650020004400410054004500540049004D0045002C0020004C006500610070005900650061007200480061006E0064006C0069006E00670020004E0056004100520043004800410052002800340030003000300029002C00200049006E0063006C0075006400650044006100790073002000420049005400290000810B4E004F005400450053003A0020004C006500610070005900650061007200480061006E0064006C0069006E0067003A0020003200380020002F002000460020002F00200046006500620020003D00200046006500620020003200390074006800200069006E0020006E006F006E002D004C00650061007000200059006500610072002000690073002000460065006200200032003800740068003B002000310020002F0020004D0020002F0020004D00610072006300680020003D00200046006500620020003200390074006800200069006E0020006E006F006E002D004C006500610070002000590065006100720020006900730020004D00610072006300680020003100730074000180FB4E004F005400450053003A00200049006E0063006C00750064006500440061007900730020003D00200031002000770069006C006C002000720065007400750072006E0020006E0075006D0062006500720020006F0066002000640061007900730020006200650074007700650065006E002000700072006500760069006F0075007300200061006E006E006900760065007200730061007200790020006400610074006500200061006E006400200045006E0064004400610074006500200061007300200064006500630069006D0061006C002C00200065006C00730065002000720065007400750072006E00730020002E0030003000300000809944006100740065005F0042007500730069006E006500730073004400610079007300280053007400610072007400440061007400650020004400410054004500540049004D0045002C00200045006E006400440061007400650020004400410054004500540049004D0045002C0020004500780063006C0075006400650044006100790073004D00610073006B00200049004E005400290000374E004F005400450053003A00200053007400610072007400440061007400650020003C003D00200045006E006400440061007400650000594E004F005400450053003A00200053006500650020006D0061006E00750061006C00200066006F00720020004500780063006C0075006400650044006100790073004D00610073006B002000760061006C00750065007300004D44006100740065005F00440061007900730049006E004D006F006E00740068005D0028005900650061007200200049004E0054002C0020004D006F006E0074006800200049004E0054002900004D44006100740065005F0044006100790073004C0065006600740049006E0059006500610072005D002800540068006500440061007400650020004400410054004500540049004D0045002900006944006100740065005F00450078007400720061006300740028004400610074006500500061007200740020004E0056004100520043004800410052002800340030003000300029002C002000440061007400650020004400410054004500540049004D00450029000080B34E004F005400450053003A0020004400610074006500500061007200740020003D00200044006500630061006400650020002F002000430065006E00740075007200790020002F0020004D0069006C006C0065006E006E00690075006D0020002F002000490053004F0044004F00570020007C002000490053004F005700650065006B0044006100790020002F002000490053004F00590065006100720020002F002000490053004F005700650065006B000080CD44006100740065005F00460069007200730074004400610079004F0066004D006F006E00740068005D002800540068006500440061007400650020004400410054004500540049004D0045002C0020004E006500770048006F0075007200200049004E0054002C0020004E00650077004D0069006E00750074006500200049004E0054002C0020004E00650077005300650063006F006E006400200049004E0054002C0020004E00650077004D0069006C006C0069007300650063006F006E006400200049004E00540029000023520045005400550052004E0053003A0020004400410054004500540049004D0045000080AD44006100740065005F0046006F0072006D0061007400540069006D0065005300700061006E00280053007400610072007400440061007400650020004400410054004500540049004D0045002C00200045006E006400440061007400650020004400410054004500540049004D0045002C0020004F007500740070007500740046006F0072006D006100740020004E0056004100520043004800410052002800340030003000300029002900002D520045005400550052004E00530020004E00560041005200430048004100520028003400300030003000290000614E004F005400450053003A00200053006500650020006D0061006E00750061006C00200066006F00720020004F007500740070007500740046006F0072006D00610074002000730070006500630069006600690063006100740069006F006E00004344006100740065005F00460072006F006D0055004E0049005800540069006D006500280055004E00490058004400610074006500200046004C004F00410054002900004D44006100740065005F00460075006C006C00440061007400650053007400720069006E0067005D002800540068006500440061007400650020004400410054004500540049004D0045002900004D44006100740065005F00460075006C006C00540069006D00650053007400720069006E0067005D002800540068006500440061007400650020004400410054004500540049004D0045002900007344006100740065005F004900730042007500730069006E006500730073004400610079002800540068006500440061007400650020004400410054004500540049004D0045002C0020004500780063006C0075006400650044006100790073004D00610073006B00200049004E0054002900003344006100740065005F00490073004C00650061007000590065006100720028005900650061007200200049004E00540029000080C944006100740065005F004C006100730074004400610079004F0066004D006F006E00740068002800540068006500440061007400650020004400410054004500540049004D0045002C0020004E006500770048006F0075007200200049004E0054002C0020004E00650077004D0069006E00750074006500200049004E0054002C0020004E00650077005300650063006F006E006400200049004E0054002C0020004E00650077004D0069006C006C0069007300650063006F006E006400200049004E00540029000080B544006100740065005F004E00740068004F006300630075007200720065006E00630065004F0066005700650065006B0064006100790028004F006300630075007200720065006E0063006500200053004D0041004C004C0049004E0054002C0020005700650065006B0064006100790020004E00560041005200430048004100520028003100300029002C00200053007400610072007400440061007400650020004400410054004500540049004D0045002900004344006100740065005F0054006F0055004E0049005800540069006D0065002800530051004C00440061007400650020004400410054004500540049004D0045002900006B44006100740065005F005400720075006E00630061007400650028004400610074006500500061007200740020004E0056004100520043004800410052002800340030003000300029002C002000440061007400650020004400410054004500540049004D00450029000080DD4E004F005400450053003A0020004400610074006500500061007200740020003D0020004D0069006C006C0065006E006E00690075006D0020002F002000430065006E00740075007200790020002F00200044006500630061006400650020002F002000590065006100720020002F002000510075006100720074006500720020002F0020004D006F006E007400680020002F0020005700650065006B0020002F00200044006100790020002F00200048006F007500720020002F0020004D0069006E0075007400650020002F0020005300650063006F006E00640000352A002A002A00200049006E007400650072006E00650074002000460075006E006300740069006F006E00730020002A002A002A00005D49004E00450054005F00410064006400720065007300730054006F004E0075006D00620065007200280049005000410064006400720065007300730020004E0056004100520043004800410052002800340030003000300029002900005549004E00450054005F00480054004D004C004400650063006F0064006500280045006E0063006F00640065006400480054004D004C0020004E00560041005200430048004100520028004D0041005800290029000080CB49004E00450054005F00480054004D004C0045006E0063006F006400650028004400650063006F00640065006400480054004D004C0020004E00560041005200430048004100520028004D004100580029002C0020005700680069007400650053007000610063006500480061006E0064006C0069006E00670020004E0056004100520043004800410052002800340030003000300029002C00200043006F006E00740069006E0075006F007500730045006E0063006F00640069006E0067002000420049005400290000754E004F005400450053003A0020005700680069007400650053007000610063006500480061006E0064006C0069006E00670020003D00200053007000610063006500730020002F002000520065007400750072006E00730020002F00200042006F007400680020002F0020004E006F006E006500005F49004E00450054005F0049007300560061006C0069006400490050004100640064007200650073007300280049005000410064006400720065007300730020004E0056004100520043004800410052002800340030003000300029002900004B49004E00450054005F004E0075006D0062006500720054006F0041006400640072006500730073002800490050004E0075006D00620065007200200042004900470049004E0054002900005349004E00450054005F005500520049004400650063006F0064006500280045006E0063006F0064006500640055005200490020004E0056004100520043004800410052002800340030003000300029002900005349004E00450054005F0055005200490045006E0063006F006400650028004400650063006F0064006500640055005200490020004E0056004100520043004800410052002800340030003000300029002900006349004E00450054005F0055005200490045006E0063006F0064006500440061007400610028004400650063006F00640065006400550052004900440061007400610020004E005600410052004300480041005200280034003000300030002900290000808349004E00450054005F005500520049004700650074004C006500660074005000610072007400280055005200490020004E0056004100520043004800410052002800340030003000300029002C0020005000610072007400690061006C00540079007000650020004E00560041005200430048004100520028003500300029002900006D4E004F005400450053003A0020005000610072007400690061006C00540079007000650020003D00200041007500740068006F00720069007400790020002F002000500061007400680020002F0020005100750065007200790020002F00200053006300680065006D006500004749004E00450054005F0055005200490047006500740049006E0066006F00280055005200490020004E00560041005200430048004100520028003400300030003000290029000083B1520045005400550052004E0053003A0020005400410042004C004500200028004100620073006F006C00750074006500500061007400680020004E0056004100520043004800410052002800340030003000300029002C0020004100620073006F006C0075007400650055007200690020004E0056004100520043004800410052002800340030003000300029002C00200041007500740068006F00720069007400790020004E0056004100520043004800410052002800340030003000300029002C00200044006E007300530061006600650048006F007300740020004E0056004100520043004800410052002800340030003000300029002C00200046007200610067006D0065006E00740020004E0056004100520043004800410052002800340030003000300029002C002000480061007300680043006F0064006500200049004E0054002C00200048006F007300740020004E0056004100520043004800410052002800340030003000300029002C00200048006F00730074004E0061006D006500540079007000650020004E00560041005200430048004100520028003500300029002C002000490073004100620073006F006C0075007400650055007200690020004200490054002C00200049007300440065006600610075006C00740050006F007200740020004200490054002C00200049007300460069006C00650020004200490054002C002000490073004C006F006F0070006200610063006B0020004200490054002C0020004900730055006E00630020004200490054002C00200049007300570065006C006C0046006F0072006D00650064004F0072006900670069006E0061006C0053007400720069006E00670020004200490054002C0020004C006F00630061006C00500061007400680020004E0056004100520043004800410052002800340030003000300029002C002000500061007400680041006E0064005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C00200050006F0072007400200049004E0054002C0020005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C00200053006300680065006D00650020004E00560041005200430048004100520028003500300029002C0020005500730065007200450073006300610070006500640020004200490054002C002000550073006500720049006E0066006F0020004E005600410052004300480041005200280034003000300030002900290000352A002A002A002000440061007400610062006100730065002000460075006E006300740069006F006E00730020002A002A002A00008233440042005F00420075006C006B0043006F007000790020005B00400053006F00750072006300650043006F006E006E0065006300740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C005D002000400053006F0075007200630065005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C0020005B004000440065007300740069006E006100740069006F006E0043006F006E006E0065006300740069006F006E0020004E0056004100520043004800410052002800340030003000300029002C005D0020004000440065007300740069006E006100740069006F006E005400610062006C0065004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000400042006100740063006800530069007A006500200049004E0054002C00200040004E006F0074006900660079004100660074006500720052006F0077007300200049004E0054002C0020004000540069006D0065004F0075007400200049004E00540020005B002C002000400043006F006C0075006D006E004D0061007000700069006E006700730020004E0056004100520043004800410052002800340030003000300029005D0020005B002C0020004000420075006C006B0043006F00700079004F007000740069006F006E0073004C0069007300740020004E0056004100520043004800410052002800340030003000300029005D000065500052004F0043003A00200049006D0070006F007200740073002000640061007400610020006C0069006B00650020004200430050002C00200053005300490053002C00200061006E0064002000420055004C004B00200049004E0053004500520054000082D5440042005F00420075006C006B004500780070006F0072007400200040005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C002000400054006500780074005100750061006C006900660069006500720020004E0056004100520043004800410052002800340030003000300029002C002000400054006500780074005100750061006C0069006600790041006C006C0043006F006C0075006D006E00730020004200490054002C002000400043006F006C0075006D006E00480065006100640065007200480061006E0064006C0069006E00670020004E00560041005200430048004100520028003100300029002C0020004000420069007400480061006E0064006C0069006E00670020004E00560041005200430048004100520028003100300029002C00200040004600690072007300740052006F007700200049004E0054002C00200040004C0061007300740052006F007700200049004E0054002C00200040004F0075007400700075007400460069006C006500500061007400680020004E0056004100520043004800410052002800340030003000300029002C00200040004600690065006C0064005400650072006D0069006E00610074006F00720020004E0056004100520043004800410052002800340030003000300029002C002000400052006F0077005400650072006D0069006E00610074006F00720020004E0056004100520043004800410052002800340030003000300029002C0020004000460069006C00650045006E0063006F00640069006E00670020004E00560041005200430048004100520028003200300029002C002000400041007000700065006E006400460069006C006500200042004900540020003D00200030002C002000400052006F00770073004500780070006F007200740065006400200049004E00540020003D0020002D00310020004F00550054005000550054000149500052004F0043003A0020004500780070006F007200740073002000640061007400610020006C0069006B0065002000420043005000200061006E00640020005300530049005300006F4E004F005400450053003A0020004000420069007400480061006E006C00640069006E00670020003D00200057006F007200640020002800440065006600610075006C00740029002C0020004C00650074007400650072002C0020006F00720020004E0075006D006200650072000081F3440042005F0046006F007200450061006300680020005B004000440042005000610074007400650072006E0020004E0056004100520043004800410052002800340030003000300029002C005D0020005B004000440042004500780063006C007500640065005000610074007400650072006E0020004E0056004100520043004800410052002800340030003000300029002C005D0020005B0040005400610062006C0065005000610074007400650072006E0020004E0056004100520043004800410052002800340030003000300029002C005D0020005B0040005400610062006C0065004500780063006C007500640065005000610074007400650072006E0020004E0056004100520043004800410052002800340030003000300029002C005D0020005B0040005000720065005400610062006C0065005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C005D0020005B00400046006F00720045006100630068005400610062006C0065005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C005D0020005B00400050006F00730074005400610062006C0065005100750065007200790020004E0056004100520043004800410052002800340030003000300029005D000080C3500052004F0043003A00200057006F0072006B00730020006C0069006B00650020004D0053005F0046006F00720045006100630068004400420020006200750074002000630061006E00200061006C0073006F0020006900740074006500720061007400650020006F0076006500720020007400610062006C00650073002000770069007400680020007000720065002D00200061006E006400200070006F00730074002D005400610062006C006500200063006F006D006D0061006E006400730001842F440042005F00480054004D004C004500780070006F007200740028005100750065007200790020004E0056004100520043004800410052002800340030003000300029002C00200043006F006C0075006D006E00480065006100640065007200480061006E0064006C0069006E00670020004E0056004100520043004800410052002800340030003000300029002C002000420069007400480061006E0064006C0069006E00670020004E0056004100520043004800410052002800340030003000300029002C0020004E0075006C006C005200650070006C006100630065006D0065006E00740020004E0056004100520043004800410052002800340030003000300029002C0020004600690072007300740052006F007700200049004E0054002C0020004C0061007300740052006F007700200049004E0054002C0020005000720065005400610062006C00650020004E00560041005200430048004100520028004D004100580029002C00200050007200650048006500610064006500720052006F00770020004E0056004100520043004800410052002800340030003000300029002C00200050007200650048006500610064006500720043006F006C0075006D006E0020004E0056004100520043004800410052002800340030003000300029002C00200050006F007300740048006500610064006500720043006F006C0075006D006E0020004E0056004100520043004800410052002800340030003000300029002C00200050006F007300740048006500610064006500720052006F00770020004E0056004100520043004800410052002800340030003000300029002C002000500072006500440061007400610052006F00770020004E0056004100520043004800410052002800340030003000300029002C002000500072006500440061007400610043006F006C0075006D006E0020004E0056004100520043004800410052002800340030003000300029002C00200050006F0073007400440061007400610043006F006C0075006D006E0020004E0056004100520043004800410052002800340030003000300029002C00200050006F0073007400440061007400610052006F00770020004E0056004100520043004800410052002800340030003000300029002C00200050006F00730074005400610062006C00650020004E00560041005200430048004100520028004D004100580029002C0020004F0075007400700075007400460069006C006500500061007400680020004E0056004100520043004800410052002800340030003000300029002C002000460069006C00650045006E0063006F00640069006E00670020004E0056004100520043004800410052002800340030003000300029002C00200045006E0063006F0064006500480054004D004C0020004E00560041005200430048004100520028003400300030003000290029000045440042005F0058004F0052002800560061006C00750065004F006E00650020004200490054002C002000560061006C0075006500540077006F002000420049005400290000332A002A002A00200043006F006E0076006500720074002000460075006E006300740069006F006E00730020002A002A002A00006B43006F006E0076006500720074005F00420069006E0061007200790054006F0048006500780053007400720069006E0067002800420069006E00610072007900560061006C00750065002000560041005200420049004E0041005200590028004D004100580029002900005D43006F006E0076006500720074005F00460072006F006D00420061007300650036003400280045006E0063006F00640065006400560061006C007500650020004E00560041005200430048004100520028004D004100580029002900002F520045005400550052004E0053003A002000560041005200420049004E0041005200590028004D00410058002900006F43006F006E0076006500720074005F0048006500780053007400720069006E00670054006F00420069006E00610072007900280048006500780053007400720069006E006700560061006C007500650020004E00560041005200430048004100520028004D0041005800290029000080BF43006F006E0076006500720074005F00480074006D006C0054006F0058006D006C00280044006F00630075006D0065006E00740020004E00560041005200430048004100520028004D004100580029002C00200044006F00630075006D0065006E00740055007200690020004E005600410052004300480041005200280031\
-0030003200340029002C002000430061007300650046006F006C00640069006E00670020004E00560041005200430048004100520028003500300029002900004D43006F006E0076006500720074005F0052004F0054003100330028005400650078007400560061006C007500650020004E00560041005200430048004100520028004D0041005800290029000080AD43006F006E0076006500720074005F0054006F00420061007300650036003400280055006E0065006E0063006F00640065006400560061006C00750065002000560041005200420049004E0041005200590028004D004100580029002C00200042006100730065003600340046006F0072006D0061007400740069006E0067004F007000740069006F006E0020004E005600410052004300480041005200280034003000300030002900290000714E004F005400450053003A00200042006100730065003600340046006F0072006D0061007400740069006E0067004F007000740069006F006E0020003D00200049006E0073006500720074004C0069006E00650042007200650061006B00730020006F00720020004E006F006E006500005943006F006E0076006500720074005F00550055004400650063006F0064006500280045006E0063006F00640065006400560061006C007500650020004E00560041005200430048004100520028004D004100580029002900005F43006F006E0076006500720074005F005500550045006E0063006F0064006500280055006E0065006E0063006F00640065006400560061006C00750065002000560041005200420049004E0041005200590028004D00410058002900290000312A002A002A0020004C006F006F006B00550070002000460075006E006300740069006F006E00730020002A002A002A0000614C006F006F006B00550070005F0047006500740043006F0075006E0074007200790049006E0066006F00280053006500610072006300680043006F006400650020004E005600410052004300480041005200280034003000300030002900290000811D520045005400550052004E0053003A0020005400410042004C004500200028005B004E0075006D00650072006900630043006F00640065005D0020004E0043004800410052002800330029002C0020005B00540077006F004C006500740074006500720043006F00640065005D0020004E0043004800410052002800320029002C0020005B00540068007200650065004C006500740074006500720043006F00640065005D0020004E0043004800410052002800330029002C0020005B004E0061006D0065005D0020004E00560041005200430048004100520028003500300029002C0020005B0046006C006100670049006D006100670065005D002000560041005200420049004E0041005200590028004D00410058002900290000811B4E004F005400450053003A00200053006500610072006300680043006F00640065002000630061006E002000620065002000650069007400680065007200200074006800650020004E0075006D0065007200690063002C002000540077006F004C006500740074006500720043006F00640065002C0020006F0072002000540068007200650065004C006500740074006500720043006F00640065003B0020006900660020006500690074006800650072002000540077006F0020006F00720020005400680072006500650020004C006500740074006500720043006F00640065002C0020007400680065006E0020006900730020004E004F005400200063006100730065002D00730065006E007300690074006900760065000180874E004F005400450053003A00200049006600200053006500610072006300680043006F0064006500200069007300200065006D0070007400790020002700270020006F00720020004E0055004C004C0020007400680065006E002000720065007400750072006E007300200061006C006C00200043006F0075006E00740072006900650073000180954C006F006F006B00550070005F004700650074005300740061007400650049006E0066006F00280053006500610072006300680043006F006400650020004E0056004100520043004800410052002800340030003000300029002C00200043006F0075006E0074007200790043006F006400650020004E0056004100520043004800410052002800340030003000300029002900008115520045005400550052004E0053003A0020005400410042004C004500200028005B004E0075006D00650072006900630043006F00640065005D0020004E0043004800410052002800320029002C0020005B00540077006F004C006500740074006500720043006F00640065005D0020004E0043004800410052002800320029002C0020005B004E0061006D0065005D0020004E00560041005200430048004100520028003500300029002C0020005B0046006C006100670049006D006100670065005D002000560041005200420049004E0041005200590028004D004100580029002C0020005B0043006F0075006E0074007200790043006F00640065005D0020004E00430048004100520028003200290029000080D54E004F005400450053003A00200053006500610072006300680043006F00640065002000630061006E002000620065002000650069007400680065007200200074006800650020004E0075006D00650072006900630020006F0072002000540077006F004C006500740074006500720043006F00640065003B002000690066002000540077006F004C006500740074006500720043006F00640065002C0020007400680065006E0020006900730020004E004F005400200063006100730065002D00730065006E007300690074006900760065000180AB4E004F005400450053003A00200049006600200053006500610072006300680043006F0064006500200069007300200065006D0070007400790020002700270020006F00720020004E0055004C004C0020007400680065006E002000720065007400750072006E007300200061006C006C00200053007400610074006500730020006200610073006500640020006F006E00200043006F0075006E0074007200790043006F006400650001734E004F005400450053003A00200043006F0075006E0074007200790043006F006400650020003D00200065006D007000740079002000270027002000280069002E0065002E0020006E006F002000660069006C0074006500720029002C002000550053002C0020006F0072002000430041000180F12A002A002A0020004F00530020002F002000530079007300740065006D002000460075006E006300740069006F006E007300200028004500760065006E0074004C006F0067002C002000470065006E006500720061007400650054006F006E0065002C00200061006E0064002000500072006F0063006500730073002000660075006E006300740069006F006E00730020007200650071007500690072006500200055004E00520045005300540052004900430054004500440020007000650072006D0069007300730069006F006E00730020002F0020004C006500760065006C0020003300290020002A002A002A000082BB4F0053005F004500760065006E0074004C006F0067005200650061006400280040004C006F0067004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C00200040004D0061006300680069006E0065004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000400053006F00750072006300650020004E0056004100520043004800410052002800340030003000300029002C002000400045006E00740072007900540079007000650020004E0056004100520043004800410052002800340030003000300029002C002000400049006E007300740061006E00630065004900440020004E0056004100520043004800410052002800340030003000300029002C0020004000430061007400650067006F007200790020004E0056004100520043004800410052002800340030003000300029002C002000400055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C00200040004D0065007300730061006700650020004E0056004100520043004800410052002800340030003000300029002C0020004000540069006D006500470065006E0065007200610074006500640042006500670069006E0020004400410054004500540049004D0045002C0020004000540069006D006500470065006E0065007200610074006500640045006E00640020004400410054004500540049004D0045002C002000400049006E0064006500780042006500670069006E00200049004E0054002C002000400049006E0064006500780045006E006400200049004E0054002C0020004000520065006700450078004F007000740069006F006E0073004C0069007300740020004E00560041005200430048004100520028003400300030003000290029000081F5520045005400550052004E0053003A0020005400410042004C004500200028005B0049006E006400650078005D00200049004E0054002C0020005B00430061007400650067006F00720079005D0020004E005600410052004300480041005200280035003000300029002C0020005B0045006E0074007200790054007900700065005D0020004E00560041005200430048004100520028003500300029002C0020005B0049006E007300740061006E0063006500490064005D00200042004900470049004E0054002C0020005B0053006F0075007200630065005D0020004E005600410052004300480041005200280035003000300029002C0020005B00540069006D006500470065006E006500720061007400650064005D0020004400410054004500540049004D0045002C0020005B00540069006D0065005700720069007400740065006E005D0020004400410054004500540049004D0045002C0020005B0055007300650072004E0061006D0065005D0020004E005600410052004300480041005200280031003000300029002C0020005B004D006500730073006100670065005D0020004E0056004100520043004800410052002800340030003000300029002C0020005B0044006100740061005D002000560041005200420049004E0041005200590028004D0041005800290029000080994E004F005400450053003A0020004500760065006E007400540079007000650020003D0020004500720072006F0072002C00200049006E0066006F0072006D006100740069006F006E002C0020005700610072006E0069006E0067002C0020004600610069006C007500720065002000410075006400690074002C00200053007500630063006500730073002000410075006400690074000081A94F0053005F004500760065006E0074004C006F00670057007200690074006500280040004C006F0067004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C00200040004D0061006300680069006E0065004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000400053006F00750072006300650020004E0056004100520043004800410052002800340030003000300029002C002000400045006E00740072007900540079007000650020004E0056004100520043004800410052002800340030003000300029002C002000400049006E007300740061006E006300650049004400200049004E0054002C0020004000430061007400650067006F0072007900200053004D0041004C004C0049004E0054002C00200040004D0065007300730061006700650020004E0056004100520043004800410052002800340030003000300029002C0020004000420069006E0061007200790044006100740061002000560041005200420049004E00410052005900280038003000300030002900290000594F0053005F00470065006E006500720061007400650054006F006E00650028004600720065007100750065006E0063007900200049004E0054002C0020004400750072006100740069006F006E00200049004E005400290000214F0053005F004D0061006300680069006E0065004E0061006D0065002800290000174F0053005F0055007000740069006D0065002800290000332A002A002A00200054007700690074007400650072002000460075006E006300740069006F006E00730020002A002A002A000080AB54007700690074007400650072005F00440065007300740072006F0079004D00650073007300610067006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E0056004100520043004800410052002800340030003000300029002C00200053007400610074007500730049004400200049004E00540000809954007700690074007400650072005F0047006500740046007200690065006E0064007300540069006D0065006C0069006E006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E0056004100520043004800410052002800340030003000300029002900001D520045005400550052004E0053003A0020005400410042004C00450000808B54007700690074007400650072005F004700650074004D006500730073006100670065007300280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E005600410052004300480041005200280034003000300030002900290000809754007700690074007400650072005F004700650074005000750062006C0069006300540069006D0065006C0069006E006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E005600410052004300480041005200280034003000300030002900290000808954007700690074007400650072005F004700650074005200650070006C00690065007300280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E0056004100520043004800410052002800340030003000300029002900001B520045005400550052004E00530020005400410042004C00450000809354007700690074007400650072005F00470065007400530065006E0074004D006500730073006100670065007300280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E005600410052004300480041005200280034003000300030002900290000809354007700690074007400650072005F004700650074005500730065007200540069006D0065006C0069006E006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E00560041005200430048004100520028003400300030003000290029000080F954007700690074007400650072005F00530065006E0064004400690072006500630074004D00650073007300610067006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E0056004100520043004800410052002800340030003000300029002C0020004D0065007300730061006700650020004E005600410052004300480041005200280031003400300029002C00200052006500630069007000690065006E00740020004E00560041005200430048004100520028003400300030003000290029000080DD54007700690074007400650072005F00550070006400610074006500280055007300650072004E0061006D00650020004E0056004100520043004800410052002800340030003000300029002C002000500061007300730077006F007200640020004E0056004100520043004800410052002800340030003000300029002C0020004D0065007300730061006700650020004E005600410052004300480041005200280031003400300029002C00200049006E005200650070006C00790054006F0053007400610074007500730049004400200049004E0054002900002D2A002A002A002000530051004C0023002000460075006E006300740069006F006E00730020002A002A002A00001D530051004C00730068006100720070005F0053006500740075007000004D500052004F0043003A00200043007200650061007400650073002000460075006E006300740069006F006E007300200061006E0064002000500072006F0063006500640075007200650073000035530051004C00730068006100720070005F004900730055007000640061007400650041007600610069006C00610062006C00650000674E004F005400450053003A002000520065007100750069007200650073002000730065006300750072006900740079002000730065007400740069006E00670020006F0066002000450058005400450052004E0041004C005F004100430043004500530053000063530051004C00730068006100720070005F004700720061006E0074005000650072006D0069007300730069006F006E007300200040004700720061006E00740054006F0020004E00560041005200430048004100520028003400300030003000290000809F500052004F0043003A0020004700720061006E007400730020005000650072006D0069007300730069006F006E007300200066006F0072002000530051004C0023002000460075006E006300740069006F006E007300200061006E0064002000500072006F006300650064007500720065007300200074006F002000730070006500630069006600690065006400200075007300650072002800730029000080E74E004F005400450053003A0020004500780063006500700074003A002000530051004C00730068006100720070005F00530065007400750070002C002000530051004C00730068006100720070005F005500700064006100740065002C002000530051004C00730068006100720070005F0055006E0069006E007300740061006C006C002C002000530051004C00730068006100720070005F00530065007400530065006300750072006900740079002C002000530051004C00730068006100720070005F004700720061006E0074005000650072006D0069007300730069006F006E00730000774E004F005400450053003A002000540068006500200066006F006C006C006F00770069006E0067002000630068006100720061006300740065007200730020006100720065002000720065006D006F007600650064003A0020002A002C0020002F002C0020002D002C00200061006E00640020003B00011B530051004C00730068006100720070005F00480065006C007000008091500052004F0043003A00200044006900730070006C0061007900730020006C0069007300740020006F006600200064006500660069006E006900740069006F006E007300200066006F007200200061006C006C002000530051004C0023002000460075006E006300740069006F006E007300200061006E0064002000500072006F006300650064007500720065007300008091530051004C00730068006100720070005F0053006500740053006500630075007200690074007900200040005000650072006D0069007300730069006F006E00530065007400200049004E00540020005B002C002000400041007300730065006D0062006C0079004E0061006D00650020004E0056004100520043004800410052002800340030003000300029005D00008087500052004F0043003A002000530065007400730020004400420020005400720075007300740077006F0072007400680079002000280066006F0072002000320020006F007200200033002900200061006E006400200041007300730065006D0062006C00790020005000450052004D0049005300530049004F004E005F005300450054002E000080AD4E004F005400450053003A002000300020003D00200044006900730070006C00610079002000630075007200720065006E0074002000730065007400740069006E0067002C002000310020003D00200053004100460045002C002000320020003D002000450058005400450052004E0041004C005F004100430043004500530053002C0020006F0072002000330020003D00200055004E0052004500530054005200490043005400450044000025530051004C00730068006100720070005F0055006E0069006E007300740061006C006C000080A1500052004F0043003A002000440072006F0070007300200061006C006C002000530051004C0023002000460075006E006300740069006F006E007300200061006E0064002000500072006F006300650064007500720065007300200061006E0064002000660069006E0061006C006C00790020007400680065002000530051004C0073006800610072007000200041007300730065006D0062006C0079002E000025530051004C00730068006100720070005F00560065007200730069006F006E00280029000025530051004C00730068006100720070005F00570065006200530069007400650028002900003F2A002A002A00200055007300650072002D0044006500660069006E00650064002000410067006700720065006700610074006500730020002A002A002A00012F4100670067005F00470065006F006D0065007400720069006300410076006700280046004C004F0041005400290000254100670067005F004A006F0069006E0028004E00560041005200430048004100520029000023520045005400550052004E0053003A0020004E00560041005200430048004100520000234100670067005F004D0065006400690061006E00280046004C004F0041005400290000234100670067005F00520061006E0064006F006D00280046004C004F00410054002900002D4100670067005F0052006F006F0074004D00650061006E00530071007200280046004C004F0041005400290000352A002A002A00200055007300650072002D0044006500660069006E006500640020005400790070006500730020002A002A002A00011F54007900700065005F0046006C006F00610074004100720072006100790000574E004F005400450053003A0020004900730020006100200031002D0062006100730065006400200069006E006400650078006500640020006100720072006100790020006F006600200046004C004F00410054007300011D54007900700065005F0048006100730068005400610062006C00650000414E004F005400450053003A002000490073002000610020006B00650079002F00760061006C007500650020007000610069007200200061007200720061007900002554007900700065005F004E0056006100720063006800610072004100720072006100790000694E004F005400450053003A0020004900730020006100200031002D0062006100730065006400200069006E006400650078006500640020006100720072006100790020006F00660020004E0056004100520043004800410052002800340030003000300029007300014920002D002D002D002D002D002D002D002000200065006E00640020006F0066002000680065006C007000200069006E0066006F00200020002D002D002D002D002D002D002D002000010969006E0066006F00003168007400740070003A002F002F007700770077002E00730071006C00730068006100720070002E0063006F006D002F00001909004900460020002800450058004900530054005300280000190900090009000900530045004C0045004300540009002A00002F0900090009000900460052004F004D0009007300790073002E0061007300730065006D0062006C00690065007300002B09000900090009005700480045005200450009005B006E0061006D0065005D0020003D0020004E0027000127090009005000520049004E0054002000270009004300720065006100740069006E0067002000011D20004F0062006A00650063007400730020002E002E002E0027003B00012B090009005300450054002000400045006E007400720079004E0075006D0062006500720020003D00200000033B000011090009004500580045004300280027000107270029003B000180910900090052004100490053004500520052004F00520028004E002700090009002500640020004F0062006A00650063007400280073002900200063007200650061007400650064002E0027002C00200030002C00200030002C002000400045006E007400720079004E0075006D0062006500720029002000570049005400480020004E004F0057004100490054003B000180870900530045005400200040004500720072006F0072004D0065007300730061006700650020003D0020004E0027004C0069006E0065002000270020002B00200043004F004E00560045005200540028004E00560041005200430048004100520028003300300029002C0020004500520052004F0052005F004C0049004E0045002800290029000180A7090009002B0020004E0027002000280045006E00740072007900200023002000270020002B00200043004F004E00560045005200540028004E00560041005200430048004100520028003300300029002C002000400045006E007400720079004E0075006D00620065007200290020002B0020004E00270029003A002000270020002B0020004500520052004F0052005F004D00450053005300410047004500280029003B00011B090052004100490053004500520052004F005200280027005B00014F5D00200041007300730065006D0062006C0079003A0020002500730027002C002000310036002C00200031002C00200040004500720072006F0072004D0065007300730061006700650029003B00011545004E0044002000430041005400430048003B0000052C007C00000322000059220020006900730020006E006F007400200061002000760061006C0069006400200053007400720069006E00670043006F006D0070006100720065004F007000740069006F006E0073002000760061006C00750065002E00002B400053007400720069006E00670043006F006D0070006100720065004F007000740069006F006E00730000435300740061007200740049006E006400650078002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E00200031002E0000\
-7553007400720069006E006700570069006400740068002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E00200074006800650020006C0065006E0067007400680020006F006600200053007400720069006E006700560061006C00750065002E00003353006500700061007200610074006F0072002000630061006E004E004F005400200062006500200065006D00700074007900005F3100200061006E00640020003200200061007200650020006F006E006C0079002000760061006C006900640020006F007000740069006F006E007300200066006F0072002000530070006C00690074004F007000740069006F006E002E000029530051004C002000630061006E004E004F005400200062006500200065006D007000740079002E0000414C0069006E006500570069006400740068002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E00200031002E00002D5300650061007200630068002000630061006E004E004F005400200062006500200065006D00700074007900004343006F006D00700061007200690073006F006E0054007900700065002000630061006E0020006F006E006C0079002000620065002000310020006F00720020003200003B53007400610072007400410074002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E0020003100007153007400610072007400410074002000630061006E004E004F0054002000620065002000670072006500610074006500720020007400680061006E00200074006800650020006C0065006E0067007400680020006F006600200053007400720069006E006700560061006C00750065000009630072006C0066000007770069006E00000F770069006E0064006F0077007300000764006F00730000096F0073002F00320000056C006600000975006E006900780000056300720000076D006100630000056600660000076E0065006C000007330039003000000D6F0073002F00330039003000000D6500620063006400690063000009680074006D006C00000B7800680074006D006C0000030A0000030D0000030C000003850001093C00420052003E00000D3C006200720020002F003E00001945004F004C00540079007000650020006F0066003A002000001B20006900730020006E006F0074002000760061006C006900640000454E00740068004F00630063007500720061006E00630065002000630061006E004E004F00540020006200650020006C0065007300730020007400680061006E002000310000755E0028005B002B005D007C005B002D005D0029003F0028005C0064007B0030002C007D0029003F0028005B002E005D005C0064007B0030002C007D0029003F0028005B0045006500440064005D0028005B002B005D007C005B002D005D0029003F005C0064007B0031002C007D0029003F00240001755E0028005B002B005D007C005B002D005D0029003F0028005C0064007B0030002C007D0029003F0028005B002C005D005C0064007B0030002C007D0029003F0028005B0045006500440064005D0028005B002B005D007C005B002D005D0029003F005C0064007B0031002C007D0029003F00240001810B28002800A20029007C002800A30029007C002800A40029007C002800A50029007C002800F20929007C002800F30929007C0028003F0E29007C002800DB1729007C002800A02029007C002800A12029007C002800A22029007C002800A32029007C002800A42029007C002800A52029007C002800A62029007C002800A72029007C002800A82029007C002800A92029007C002800AA2029007C002800AB2029007C002800AC2029007C002800AD2029007C002800AE2029007C002800AF2029007C002800B02029007C002800B12029007C002800FCFD29007C00280069FE29007C00280004FF29007C002800E0FF29007C002800E1FF29007C002800E5FF29007C002800E6FF29002900010324000080A55E002800280028005B002B005D007C005B002D005D0029003F005B0024005D003F0029007C0028005B0024005D003F0028005B002B005D007C005B002D005D0029003F00290029003F00280028005C0064007B0031002C0033007D0028005B002C005D005C0064007B0033007D0029002A0029007C0028005C0064007B0030002C007D00290029003F0028005B002E005D005C0064007B0030002C007D0029003F0024000180A55E002800280028005B002B005D007C005B002D005D0029003F005B0024005D003F0029007C0028005B0024005D003F0028005B002B005D007C005B002D005D0029003F00290029003F00280028005C0064007B0031002C0033007D0028005B002E005D005C0064007B0033007D0029002A0029007C0028005C0064007B0030002C007D00290029003F0028005B002C005D005C0064007B0030002C007D0029003F0024000180A55E002800280028005B002B005D007C005B002D005D0029003F005B0024005D003F0029007C0028005B0024005D003F0028005B002B005D007C005B002D005D0029003F00290029003F00280028005C0064007B0031002C0033007D0028005B0020005D005C0064007B0033007D0029002A0029007C0028005C0064007B0030002C007D00290029003F0028005B002E005D005C0064007B0030002C007D0029003F0024000180A55E002800280028005B002B005D007C005B002D005D0029003F005B0024005D003F0029007C0028005B0024005D003F0028005B002B005D007C005B002D005D0029003F00290029003F00280028005C0064007B0031002C0033007D0028005B0020005D005C0064007B0033007D0029002A0029007C0028005C0064007B0030002C007D00290029003F0028005B002C005D005C0064007B0030002C007D0029003F00240001809B49006E00760061006C00690064002000540061007200670065007400440061007400610054007900700065002E002000560061006C00690064002000760061006C0075006500730020006100720065003A002000540049004E00590049004E0054002C00200053004D0041004C004C0049004E0054002C00200049004E0054002C00200061006E006400200042004900470049004E0054002E00001D54006100720067006500740044006100740061005400790070006500002753007400650070002000630061006E004E004F00540020006200650020007A00650072006F00007953007400650070002000630061006E004E004F00540020006200650020006E00650067006100740069007600650020007700680065006E00200045006E0064004E0075006D0020003E002000530074006100720074004E0075006D002000280063006F0075006E00740069006E0067002000750070002900007D53007400650070002000630061006E004E004F005400200062006500200070006F0073006900740069007600650020007700680065006E00200045006E0064004E0075006D0020003C002000530074006100720074004E0075006D002000280063006F0075006E00740069006E006700200064006F0077006E002900003954006F00740061006C004E0075006D0073002000630061006E004E004F00540020006200650020006E0065006700610074006900760065000009790079007900790000036D000003640000036E000003730000057700770000057100710000037100002749006E00760061006C00690064002000530074006500700054007900700065003A00200028000080BF29000A005300740065007000540079007000650020006D0075007300740020006200650020006F006E00650020006F0066003A002000280079006500610072002C0020006D006F006E00740068002C0020006400610079002C00200068006F00750072002C0020006D0069006E007500740065002C0020007300650063006F006E0064002C0020006D0069006C006C0069007300650063006F006E0064002C00200071007500610072007400650072002C0020007700650065006B00290000808D53007400650070002000630061006E004E004F00540020006200650020006E00650067006100740069007600650020007700680065006E00200045006E0064004400610074006500540069006D00650020003E002000530074006100720074004400610074006500540069006D0065002000280063006F0075006E00740069006E006700200075007000290000809153007400650070002000630061006E004E004F005400200062006500200070006F0073006900740069007600650020007700680065006E00200045006E0064004400610074006500540069006D00650020003C002000530074006100720074004400610074006500540069006D0065002000280063006F0075006E00740069006E006700200064006F0077006E002900004354006F00740061006C004400610074006500540069006D00650073002000630061006E004E004F00540020006200650020006E006500670061007400690076006500005F560061006C00750065002000630061006E006E006F00740020006200650020006C006100720067006500720020007400680061006E0020003900390039002C003900390039002C003900390039002C003900390039002C0039003900390000134E0065006700610074006900760065002000000B200061006E00640020000005300030000003300000033100000332000003330000033400000335000003360000033700000338000003390000174F006E0065002000480075006E0064007200650064000017540077006F002000480075006E006400720065006400001B540068007200650065002000480075006E006400720065006400001946006F00750072002000480075006E006400720065006400001946006900760065002000480075006E00640072006500640000175300690078002000480075006E006400720065006400001B53006500760065006E002000480075006E006400720065006400001B450069006700680074002000480075006E00640072006500640000194E0069006E0065002000480075006E006400720065006400000D5400770065006E0074007900000D540068006900720074007900000B46006F00720074007900000B46006900660074007900000B53006900780074007900000F53006500760065006E0074007900000D450069006700680074007900000D4E0069006E006500740079000007540065006E00000D45006C006500760065006E00000D5400770065006C0076006500001154006800690072007400650065006E00001146006F00750072007400650065006E00000F4600690066007400650065006E00000F5300690078007400650065006E00001353006500760065006E007400650065006E00001145006900670068007400650065006E0000114E0069006E0065007400650065006E0000074F006E0065000007540077006F00000B54006800720065006500000946006F0075007200000946006900760065000007530069007800000B53006500760065006E00000B4500690067006800740000094E0069006E00650000052C00200000132000540068006F007500730061006E006400001120004D0069006C006C0069006F006E0000112000420069006C006C0069006F006E00001320005400720069006C006C0069006F006E0000172000510075006100720069006C006C0069006F006E00001720004200720061007A0069006C006C00690061006E0000095A00650072006F0000032D00010F5E005C0064007B0039007D00240000135E0034005C0064007B00310035007D002400001D5E0035005B0031002D0035005D005C0064007B00310034007D00240001195E0036003000310031005C0064007B00310032007D002400001D5E0033005B0034002C0037005D005C0064007B00310033007D00240000215E0033005B0030002C0036002C0038005D005C0064007B00310032007D0024000009760069007300610000056D00630000096400690073006300000961006D0065007800000D640069006E00650072007300002149006E00760061006C006900640020004300430054007900700065003A00200000076D006400350000097300680061003100000D730068006100320035003600000D730068006100330038003400000D730068006100350031003200002749006E00760061006C0069006400200041006C0067006F0072006900740068006D003A00200000753B002000760061006C006900640020006F007000740069006F006E00730020006100720065003A0020004D00440035002C00200053004800410031002C0020005300480041003200350036002C0020005300480041003300380034002C00200061006E006400200053004800410035003100320000057500730000056300610000275E005C0064007B0035007D0028005B002D005D003F005C0064007B0034007D0029003F0024000180D95E005B0061002D0063002C00200065002C00200067002D0068002C0020006A002D006E002C00200070002C00200072002D0074002C00200076002C00200078002D0079005D005C0064005B0061002D0063002C00200065002C00200067002D0068002C0020006A002D006E002C00200070002C00200072002D0074002C00200076002D007A005D005B0020005D003F005C0064005B0061002D0063002C00200065002C00200067002D0068002C0020006A002D006E002C00200070002C00200072002D0074002C00200076002D007A005D005C0064002400014743006F006E00760065007200740054006F004400610074006100540079007000650073002000630061006E006E006F00740020006200650020004E0055004C004C002100210000374400450043004C0041005200450020004000530051004C007300680061007200700043006F006E00760065007200740054006F00200000473B00200053004500540020004000530051004C007300680061007200700043006F006E00760065007200740054006F0020003D00200043004F004E0056004500520054002800001572006F007700760065007200730069006F006E00001B4400610074006100540079007000650020006F00660020002700010742004900540000072C0020002700010F540049004E00590049004E005400001153004D0041004C004C0049004E005400000749004E005400000D42004900470049004E005400000F44004500430049004D0041004C00000B4D004F004E0045005900001553004D0041004C004C004D004F004E004500590000095200450041004C00000B46004C004F0041005400001B53004D0041004C004C004400410054004500540049004D00450000114400410054004500540049004D00450000134400410054004500540049004D0045003200000944004100540045000009540049004D004500001D4400410054004500540049004D0045004F0046004600530045005400000758004D004C00002155004E0049005100550045004900440045004E00540049004600490045005200001552004F005700560045005200530049004F004E0000136200690074007E007E006200790074006500001B6200690074007E007E006B0069006C006F006200790074006500001B6200690074007E007E006D006500670061006200790074006500001B6200690074007E007E0067006900670061006200790074006500001B6200690074007E007E0074006500720061006200790074006500001B6200690074007E007E0070006500740061006200790074006500001362007900740065007E007E00620069007400001D62007900740065007E007E006B0069006C006F006200790074006500001D62007900740065007E007E006D006500670061006200790074006500001D62007900740065007E007E0067006900670061006200790074006500001D62007900740065007E007E0074006500720061006200790074006500001D62007900740065007E007E0070006500740061006200790074006500001B6B0069006C006F0062007900740065007E007E00620069007400001D6B0069006C006F0062007900740065007E007E00620079007400650000256B0069006C006F0062007900740065007E007E006D00650067006100620079007400650000256B0069006C006F0062007900740065007E007E006700690067006100620079007400650000256B0069006C006F0062007900740065007E007E007400650072006100620079007400650000256B0069006C006F0062007900740065007E007E0070006500740061006200790074006500001B6D0065006700610062007900740065007E007E00620069007400001D6D0065006700610062007900740065007E007E00620079007400650000256D0065006700610062007900740065007E007E006B0069006C006F00620079007400650000256D0065006700610062007900740065007E007E006700690067006100620079007400650000256D0065006700610062007900740065007E007E007400650072006100620079007400650000256D0065006700610062007900740065007E007E0070006500740061006200790074006500001B670069006700610062007900740065007E007E00620069007400001D670069006700610062007900740065007E007E0062007900740065000025670069006700610062007900740065007E007E006B0069006C006F0062007900740065000025670069006700610062007900740065007E007E006D0065006700610062007900740065000025670069006700610062007900740065007E007E00740065007200610062007900740065000025670069006700610062007900740065007E007E0070006500740061006200790074006500001B740065007200610062007900740065007E007E00620069007400001D740065007200610062007900740065007E007E0062007900740065000025740065007200610062007900740065007E007E006B0069006C006F0062007900740065000025740065007200610062007900740065007E007E006D0065006700610062007900740065000025740065007200610062007900740065007E007E00670069006700610062007900740065000025740065007200610062007900740065007E007E0070006500740061006200790074006500001B700065007400610062007900740065007E007E00620069007400001D700065007400610062007900740065007E007E0062007900740065000025700065007400610062007900740065007E007E006B0069006C006F0062007900740065000025700065007400610062007900740065007E007E006D0065006700610062007900740065000025700065007400610062007900740065007E007E00670069006700610062007900740065000025700065007400610062007900740065007E007E0074006500720061006200790074006500000000007F23115449CA884D920C5A88E166DABC0008B77A5C561934E0890600011D051D030500010E1D050400010E08070003011D030206090004011D0302061D030320000102060E0206020206080206060320000E070615121101120C0520010112150A200115121101120C12150620030E0E0E0E072002121908111D052001121908042000122108000212251229112D060001122912250600011225122503061D05060001122512290306113106000111351139060001113911350600020211310A0600020E1D0E0E0E0005113511351139113911391139080002113911391139060001113D1139060001112D11350A00031139113511351141080002113D113511410A0003112D11351135112D06000111351145060001114511350C0004114511351135112D113D0800021139112D11350800021135112D11350A000311351149112D1135080002113511391139120007113511391139113911391139113911390A0003112D1135112D112D080000151211011220130006011C10112D10112D10112D10112D101229060001124D112D080000151211011228130006011C10112D10112D10112D10122910112D080002124D112D112D072004010E0E0E0E082005010E0E0E0E0E060001114511390600011145112D0A000311451145112D112D060001113D11410A000311391139113911392B000E011C101139101135101145101145101145101145101145101145101145101145101145101139101139100006124D1145114511391139113511450600011145114502060D0800021145114511510A0003112D1155112D112D46790079007900790027002D0027004D004D0027002D0027006400640020004800480027003A0027006D006D0027003A002700730073002E0066006600660066006600660066003E790079007900790027002D0027004D004D0027002D0027006400640020004800480027003A0027006D006D0027003A002700730073002E0066006600660005000111590E0C0004113D1225112D1139112D0C0004112D1225112D1139112D0E0005112D1225112D11391139112D130006011C1011391012251011391011391011390C0004124D1225112D1139112D0C0004124D112D112D1139112D100006112D1225112D112D11391139112D0E0005124D112D112D11391139112D120007112D1225112D1139112D11391139112D060001112D112D0E00051139112D112D11391139112D120007112D112D112D112D112D11391139112D0300000E7068007400740070003A002F002F007700770077002E00730071006C00730068006100720070002E0063006F006D002F007500740069006C006900740079002F00630075007200720065006E0074005F00760065007200730069006F006E005F0066007200650065002E007000680070006868007400740070003A002F002F007700770077002E00730071006C00730068006100720070002E0063006F006D002F007500740069006C006900740079002F00630075007200720065006E0074005F0061007300730065006D0062006C0079002E007000680070003068007400740070003A002F002F007700770077002E00730071006C00730068006100720070002E0063006F006D002F0009000301112D112D113D07000201112D112D090003011139112D113D05000101112D040000113D03000001040000112D0600020E0E125D05000111610E0C000411391225112D11391139080002113D1225112D0A0003113D1225112D11390A0003112D112D1139112D0A0003011C10113910112D0A0003124D1225112D11390A000312251225112D11390A0003122512251139112D080002113D122512250E000511391225122511391139113D100006113912251225113911391139113D0A000312251225112D112D080002113D112D11390A0003112D112D112D112D0A00031141112D112D112D0A0003011C1011391011390A0003124D1139113911390A0003011C1011391011450A0003124D1145114511450A0003124D1145113911450A0003011C10113910113508000311311131080E0C0004124D113511351139112D0C0004124D113511391139112D060001112D114506000112291229060001113D112D080002113D112D112D060001114112290700021D050E1D05080002112D112D12290800021165112D12290C0004113D112D112D1149114904000011410306116C040100000004020000000404000000040800000004100000000706151269020E0D12010001005408074D617853697A650A0000002001000200540809507265636973696F6E260000005408055363616C651200000012010001005408074D617853697A65FFFFFFFF12010001005408074D617853697A658000000012010001005408074D617853697A650F000000042001010E0420010102042001010880A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC60500020E1C1C050002050E080507021D05080420010E0E0620011280BD0E0907041280BD051D05080520020103080500020E0E0E052002010E08032000080920031280BD1D0308080500001280C5052001081D030520020E0808050002020E0E0720021280BD080812070A0E1280BD080808081D031D031D031D030706151269020E0806151269020E0807200201130013010820020213001013010620011280BD060707031280BD0E080615121101120C0520001280D50520001280DD0320001C0420011C0E0300000A04061280ED0520010113000320000213070515121101120C120C1280E11280DD1280F10520011300080600030E0E0E0E0600020E0E1D0E0507021D0E08092000151180F501130007151180F501120C04200013001107051D0E1280BD08120C151180F501120C072003010E111D0A082004010E111D0505062002010E111D06070312190E08062001011D12190607021D1219083C01000300540E044E616D6510436F6E766572745F546F42617365363454020F497344657465726D696E6973746963015402094973507265636973650104000012250420001D050800020E1D051181050420001D03052001011D030607021181050E3E01000300540E044E616D6512436F6E766572745F46726F6D42617365363454020F497344657465726D696E6973746963015402094973507265636973650104000012290800031D051D030808052001011D053901000300540E044E616D650D436F6E766572745F524F54313354020F497344657465726D696E69737469630154020949735072656369736501040001060304000103080607031D0306083C01000300540E044E616D6510436F6E766572745F5555456E636F646554020F497344657465726D696E697374696301540209497350726563697365010620011280BD030D0709081280BD080808050505083C01000300540E044E616D6510436F6E766572745F55554465636F646554020F497344657465726D696E69737469630154020949735072656369736501040001050804000105030420010105062001011281110F070B0A12810D0A0A05050505080A084501000300540E044E616D6519436F6E766572745F486578537472696E67546F42696E61727954020F497344657465726D696E697374696301540209497350726563697365010320000A0407011D054501000300540E044E616D6519436F6E766572745F42696E617279546F486578537472696E6754020F497344657465726D696E697374696301540209497350726563697365014701000300540E044E616D651B436F6E766572745F4D53496E7444617465546F4461746554696D6554020F497344657465726D696E6973746963015402094973507265636973650105200111310D0600011135113104070111314701000300540E044E616D651B436F6E766572745F4461746554696D65546F4D53496E744461746554020F497344657465726D696E69737469630154020949735072656369736501042000113107200111811511310500011139080707021131118115030611780900020112811D1181210620030108080805200011812505200102113134072E080808080808\
-08080808080808080808080808080808080808080808080808080808080808080808080811311131113111310520020E0E0E0400010A0E07000212812D0E0E05200012813506200112813908040001080E0520020E08030807040E12812D080A4001000300540E044E616D6514446174655F46697273744461794F664D6F6E746854020F497344657465726D696E697374696301540209497350726563697365010400010D080A2007010808080808080D060702113111313F01000300540E044E616D6513446174655F4C6173744461794F664D6F6E746854020F497344657465726D696E697374696301540209497350726563697365010500020808080A070411311131113111313C01000300540E044E616D6510446174655F44617973496E4D6F6E746854020F497344657465726D696E697374696301540209497350726563697365013F01000300540E044E616D6513446174655F446179734C656674496E5965617254020F497344657465726D696E69737469630154020949735072656369736501040001020807070308113111313B01000300540E044E616D650F446174655F49734C6561705965617254020F497344657465726D696E69737469630154020949735072656369736501050001113D023F01000300540E044E616D6513446174655F46756C6C44617465537472696E6754020F497344657465726D696E69737469630154020949735072656369736501050001112D0E3F01000300540E044E616D6513446174655F46756C6C54696D65537472696E6754020F497344657465726D696E697374696301540209497350726563697365013D01000300540E044E616D6511446174655F427573696E6573734461797354020F497344657465726D696E69737469630154020949735072656369736501070002081131113116070B11311131080811311131113111311131113111313E01000300540E044E616D6512446174655F4973427573696E65737344617954020F497344657465726D696E697374696301540209497350726563697365013F01000300540E044E616D6513446174655F466F726D617454696D655370616E54020F497344657465726D696E69737469630154020949735072656369736501052002080E080520020803080920021D0E1D0E11813D1D07160E0A0A0A0A0A0A0A0A0A0A0A08080E1D0E1D0E113111311D0E0E083D01000300540E044E616D6511446174655F46726F6D554E495854696D6554020F497344657465726D696E69737469630154020949735072656369736501092006010808080808080320000D3B01000300540E044E616D650F446174655F546F554E495854696D6554020F497344657465726D696E6973746963015402094973507265636973650105000111450D090703113111811511313401000300540E044E616D6508446174655F41676554020F497344657465726D696E69737469630154020949735072656369736500042001020E2307120D11311181150808021131113111311131113111311131113111311131113111313801000300540E044E616D650C446174655F4578747261637454020F497344657465726D696E69737469630154020949735072656369736501030611390400010D0D040001080D060001118149080B0002118149118149118149080001118149118149060001081181496D073B0808080808080808080E081131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111311131113111313901000300540E044E616D650D446174655F5472756E6361746554020F497344657465726D696E69737469630154020949735072656369736501030611350A200701080808080808081F071308080808080811310811311131113111311131113111310E08113111314701000300540E044E616D651B446174655F4E74684F6363757272656E63654F665765656B64617954020F497344657465726D696E697374696301540209497350726563697365010320000609070411311181250E084701000300540E044E616D651B446174655F4765744461746554696D6546726F6D496E7456616C7354020F497344657465726D696E6973746963015402094973507265636973650108070511310E0E08083B01000300540E044E616D650F446174655F476574496E744461746554020F497344657465726D696E69737469630154020949735072656369736501090704081131113111313B01000300540E044E616D650F446174655F476574496E7454696D6554020F497344657465726D696E697374696301540209497350726563697365013C01000300540E044E616D6510446174655F4E65774461746554696D6554020F497344657465726D696E697374696301540209497350726563697365013701000300540E044E616D650B446174655F466F726D617454020F497344657465726D696E697374696301540209497350726563697365010600011281510E0720020E0E1281550707030E113111314801000300540E044E616D651C446174655F44617973496E4D6F6E746846726F6D4461746554696D6554020F497344657465726D696E69737469630154020949735072656369736501061512110112200A07021512110112201220040701112480F201000500540E1146696C6C526F774D6574686F644E616D6516434F554E545259434F44454461746146696C6C526F77540E0F5461626C65446566696E6974696F6E734E756D65726963436F6465204E434841522833292C2054776F4C6574746572436F6465204E434841522832292C2054687265654C6574746572436F6465204E434841522833292C204E616D65204E56415243484152283530292C20466C6167496D6167652056415242494E415259284D415829540E044E616D65154C6F6F6B55705F476574436F756E747279496E666F54020F497344657465726D696E697374696301540209497350726563697365010306112D0520010212200615128159011C061512815D011C0820001512815D011C0920001512815D01130002061C03061124030612200806151281610112200306127C0806151180F50112200328001C05000012816905070112808007151180F50112200715128161011220052002011C180B2001130015128161011300040702020803070108061512110112280A07021512110112281228040701112C80EA01000500540E1146696C6C526F774D6574686F644E616D65145354415445434F44454461746146696C6C526F77540E0F5461626C65446566696E6974696F6E6F4E756D65726963436F6465204E434841522832292C2054776F4C6574746572436F6465204E434841522832292C204E616D65204E56415243484152283530292C20466C6167496D6167652056415242494E415259284D4158292C20436F756E747279436F6465204E43484152283229540E044E616D65134C6F6F6B55705F4765745374617465496E666F54020F497344657465726D696E697374696301540209497350726563697365010520010212280306112C07061512110112280306122808061512816101122804061280840806151180F501122805070112808807151281610112280F20011512110113001512816101130007151180F5011228062001011181753A01000300540E044E616D650E4D6174685F466163746F7269616C54020F497344657465726D696E697374696301540209497350726563697365000407020D083901000300540E044E616D650D4D6174685F436F6E7374616E7454020F497344657465726D696E697374696301540209497350726563697365010507030E0E083801000300540E044E616D650C4D6174685F436F6E7665727454020F497344657465726D696E6973746963015402094973507265636973650006151269020E0D0B07090D0E0D0E080E0E080E3801000300540E044E616D650C4D6174685F49735072696D6554020F497344657465726D696E697374696301540209497350726563697365010407020A0D3C01000300540E044E616D65104D6174685F52616E646F6D52616E676554020F497344657465726D696E697374696300540209497350726563697365010520020808080407011134819B01000500540E1146696C6C526F774D6574686F644E616D651F4D415448416D6F7274697A6174696F6E5363686564756C6546696C6C526F77540E0F5461626C65446566696E6974696F6E81065061796D656E744E756D20494E542C205061796D656E7444617465204441544554494D452C20426567696E6E696E6742616C616E636520464C4F41542C205363686564756C65645061796D656E7420464C4F41542C2045787472615061796D656E7420464C4F41542C20546F74616C5061796D656E7420464C4F41542C205072696E636970616C20464C4F41542C20496E74657265737420464C4F41542C20456E64696E6742616C616E636520464C4F41542C2043756D756C6174697665496E74657265737420464C4F41542C20546F74616C496E74657265737420464C4F41542C20546F74616C5061796D656E747320494E542C205061796D656E74734C65667420494E54540E044E616D65214D6174685F436F6D706F756E64416D6F7274697A6174696F6E5363686564756C6554020F497344657465726D696E69737469630154020949735072656369736500061512110111340500020D0D080500020D0D0D0800030D0D0811817D0520011131081A07101512110111341D1134081131080D0D0D0D0D0D0D080D0D083501000300540E044E616D65094D6174685F436F736854020F497344657465726D696E697374696301540209497350726563697365003501000300540E044E616D65094D6174685F53696E6854020F497344657465726D696E697374696301540209497350726563697365003501000300540E044E616D65094D6174685F54616E6854020F497344657465726D696E697374696301540209497350726563697365003901000300540E044E616D650D4D6174685F43756265526F6F7454020F497344657465726D696E697374696301540209497350726563697365003901000300540E044E616D650D4D6174685F5472756E6361746554020F497344657465726D696E69737469630154020949735072656369736500032000050307010D3E01000300540E044E616D65124D6174685F466F726D6174446563696D616C54020F497344657465726D696E697374696301540209497350726563697365010520001181490907030E1181491181490620011D0E1D0314070F115902020202020202020E1D031D0E080E083901000300540E044E616D650D52656745785F49734D6174636854020F497344657465726D696E69737469630154020949735072656369736501062002010E1159052002020E080807030E11591281293D01000300540E044E616D651152656745785F4D6174636853696D706C6554020F497344657465726D696E6973746963015402094973507265636973650107200212812D0E083D01000300540E044E616D651152656745785F4D617463684C656E67746854020F497344657465726D696E6973746963015402094973507265636973650108200312812D0E080805200101112D040701114080B701000500540E044E616D650B52656745785F4D61746368540E1146696C6C526F774D6574686F644E616D651152454745584D6174636846696C6C526F7754020F497344657465726D696E69737469630154020949735072656369736501540E0F5461626C65446566696E6974696F6E474D617463684E756D20494E542C2056616C7565204E56415243484152284D4158292C205374617274506F7320494E542C20456E64506F7320494E542C204C656E67746820494E54061512110111401307060E1159151211011140114012812D12812980B901000500540E1146696C6C526F774D6574686F644E616D651152454745584D6174636846696C6C526F77540E0F5461626C65446566696E6974696F6E474D617463684E756D20494E542C2056616C7565204E56415243484152284D4158292C205374617274506F7320494E542C20456E64506F7320494E542C204C656E67746820494E54540E044E616D650D52656745785F4D61746368657354020F497344657465726D696E6973746963015402094973507265636973650103061159030611400406128181040612812905070112808C0720021281810E0806200112812D083901000300540E044E616D650D52656745785F5265706C61636554020F497344657465726D696E697374696301540209497350726563697365010720040E0E0E0808070702115912812980B701000500540E044E616D650B52656745785F53706C6974540E1146696C6C526F774D6574686F644E616D651152454745584D6174636846696C6C526F7754020F497344657465726D696E69737469630154020949735072656369736501540E0F5461626C65446566696E6974696F6E474D617463684E756D20494E542C2056616C7565204E56415243484152284D4158292C205374617274506F7320494E542C20456E64506F7320494E542C204C656E67746820494E540507011280903E01000300540E044E616D651252656745785F4361707475726547726F757054020F497344657465726D696E6973746963015402094973507265636973650108070311591281290E3801000300540E044E616D650C52656745785F45736361706554020F497344657465726D696E697374696301540209497350726563697365010400010E0E3A01000300540E044E616D650E52656745785F556E65736361706554020F497344657465726D696E697374696301540209497350726563697365013701000300540E044E616D650B52656745785F496E64657854020F497344657465726D696E697374696301540209497350726563697365014201000300540E044E616D651652656745785F5265706C61636549664D61746368656454020F497344657465726D696E697374696301540209497350726563697365010500010E1D0E0707041D0E08080805000012818505200012818905200012818D1A01000100540E044E616D650E53514C73686172705F5365747570042001081C062001011281950720021280BD080E1D070E0E0E125D1280BD1281991D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E082501000100540E044E616D651953514C73686172705F4772616E745065726D697373696F6E73072002010E12819D0C07040E12819D1280BD1281952001000100540E044E616D651453514C73686172705F53657453656375726974790620010112819D05000102113D0520001281A9062001011281A90700040E0E0E0E0E0520001181B11A070A12819D1281A90E1281951280BD0E1280F912819D1281A9081E01000100540E044E616D651253514C73686172705F556E696E7374616C6C0C070412819D0E1280BD1281954601000300540E044E616D651A53514C73686172705F4973557064617465417661696C61626C6554020F497344657465726D696E697374696300540209497350726563697365010600011281B50E0500001281C1062001011281C10520001281C50520001281110500001281CD092002011281111281CD1407080E1D0E021281B91281C91281111281D11D031901000100540E044E616D650D53514C73686172705F48656C700520010112210420011C0805200201080E0D0705125D1D121912211280C5083C01000300540E044E616D651053514C73686172705F56657273696F6E54020F497344657465726D696E697374696301540209497350726563697365010307010E3C01000300540E044E616D651053514C73686172705F5765625369746554020F497344657465726D696E697374696301540209497350726563697365010620011280BD080607021280BD080920021D0E1D0311813D0800011281DD1181E10800031C1281DD0E02052002010E0E08070411610E1D0E083E01000300540E044E616D6512537472696E675F4C617374496E6465784F6654020F497344657465726D696E69737469630154020949735072656369736501082003080E081181E5050703080E083A01000300540E044E616D650E537472696E675F496E6465784F6654020F497344657465726D696E697374696301540209497350726563697365013701000300540E044E616D650B537472696E675F5472696D54020F497344657465726D696E697374696301540209497350726563697365013B01000300540E044E616D650F537472696E675F436F6E7461696E7354020F497344657465726D696E697374696301540209497350726563697365013B01000300540E044E616D650F537472696E675F456E64735769746854020F497344657465726D696E69737469630154020949735072656369736501072002020E1181E50507030E02083D01000300540E044E616D6511537472696E675F5374617274735769746854020F497344657465726D696E697374696301540209497350726563697365013A01000300540E044E616D650E537472696E675F5061644C65667454020F497344657465726D696E69737469630154020949735072656369736501040001030E0407020E033B01000300540E044E616D650F537472696E675F506164526967687454020F497344657465726D696E697374696301540209497350726563697365010407011154808D01000500540E1146696C6C526F774D6574686F644E616D6513535452494E4753706C69747346696C6C526F77540E0F5461626C65446566696E6974696F6E1A4E756D20494E542C2056616C204E56415243484152284D415829540E044E616D650C537472696E675F53706C697454020F497344657465726D696E69737469630154020949735072656369736501030612250306115403061D0E040611813D05070112809407070402081D0E08815901000500540E044E616D650B537472696E675F4A6F696E54020F497344657465726D696E697374696300540209497350726563697365015455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730100000054557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D446174614163636573730100000004200102081107070E0E1280BD1281951281A912819D083B01000300540E044E616D650F537472696E675F576F72645772617054020F497344657465726D696E6973746963015402094973507265636973650104200108030A07060E1280BD08080E083A01000300540E044E616D650E537472696E675F496E697443617054020F497344657465726D696E697374696301540209497350726563697365010420010E080507030E080E3901000300540E044E616D650D537472696E675F457175616C7354020F497344657465726D696E697374696301540209497350726563697365010407020E0E3801000300540E044E616D650C537472696E675F436F756E7454020F497344657465726D696E69737469630154020949735072656369736501080002113D11391139080002113D113D113D0707050E0E0808083A01000300540E044E616D650E537472696E675F4E65776C696E6554020F497344657465726D696E697374696301540209497350726563697365013D01000300540E044E616D6511537472696E675F4E7468496E6465784F6654020F497344657465726D696E697374696301540209497350726563697365013601000300540E044E616D650A537472696E675F43757454020F497344657465726D696E69737469630154020949735072656369736501040001060E1A070F0E1280BD1D0E1D0E1D0E1D0E020E0808081D0E1D0E081D033C01000300540E044E616D6510537472696E675F49734E756D6572696354020F497344657465726D696E697374696301540209497350726563697365011807081281291281291281290E1281291281291281291281293A01000300540E044E616D650E537472696E675F5265706C61636554020F497344657465726D696E697374696301540209497350726563697365014001000300540E044E616D6514537472696E675F5472795061727365546F496E7454020F497344657465726D696E697374696301540209497350726563697365010500001281510C0004020E1181E9128155100A0C0004020E1181E912815510080C0004020E1181E912815510060C0004020E1181E9128155100505000111410A030611410B0707021281510A0806050E0407011160809101000500540E1146696C6C526F774D6574686F644E616D65125554494C495459496E747346696C6C526F77540E0F5461626C65446566696E6974696F6E16496E744E756D20494E542C20496E7456616C20494E54540E044E616D65155574696C5F47656E6572617465496E7452616E676554020F497344657465726D696E6973746963015402094973507265636973650103061160050701128098808D01000500540E1146696C6C526F774D6574686F644E616D65125554494C495459496E747346696C6C526F77540E0F5461626C65446566696E6974696F6E16496E744E756D20494E542C20496E7456616C20494E54540E044E616D65115574696C5F47656E6572617465496E747354020F497344657465726D696E6973746963015402094973507265636973650105070112809C0407011164809B01000500540E1146696C6C526F774D6574686F644E616D65145554494C495459466C6F61747346696C6C526F77540E0F5461626C65446566696E6974696F6E1C466C6F61744E756D20494E542C20466C6F617456616C20464C4F4154540E044E616D65175574696C5F47656E6572617465466C6F617452616E676554020F497344657465726D696E6973746963015402094973507265636973650103061145030611640507011280A0809701000500540E1146696C6C526F774D6574686F644E616D65145554494C495459466C6F61747346696C6C526F77540E0F5461626C65446566696E6974696F6E1C466C6F61744E756D20494E542C20466C6F617456616C20464C4F4154540E044E616D65135574696C5F47656E6572617465466C6F61747354020F497344657465726D696E697374696301540209497350726563697365010507011280A4040701116806070311310E0880AA01000500540E1146696C6C526F774D6574686F644E616D65175554494C4954594461746554696D657346696C6C526F77540E0F5461626C65446566696E6974696F6E254461746554696D654E756D20494E542C204461746554696D6556616C204441544554494D45540E044E616D651A5574696C5F47656E65726174654461746554696D6552616E676554020F497344657465726D696E69737469630154020949735072656369736501030611680507011280A8070002021131113180A601000500540E1146696C6C526F774D6574686F644E616D65175554494C4954594461746554696D657346696C6C526F77540E0F5461626C65446566696E6974696F6E254461746554696D654E756D20494E542C204461746554696D6556616C204441544554494D45540E044E616D65165574696C5F47656E65726174654461746554696D657354020F497344657465726D696E697374696301540209497350726563697365010507011280AC3801000300540E044E616D650C5574696C5F546F576F72647354020F497344657465726D696E69737469630154020949735072656369736501080002113D11451145080002114511451145042001080E1507130E0E0E0E08080E0E0E080E080E080E080E08083501000300540E044E616D65095574696C5F475A697054020F497344657465726D696E697374696301540209497350726563697365010A2003011281111181F102072003011D05080813070612810D1281ED1D051280F912810D1281ED3701000300540E044E616D650B5574696C5F47556E7A697054020F497344657465726D696E69737469630154020949735072656369736501092002011281111181F10E070512810D1281ED12810D0812293801000300540E044E616D650C5574696C5F4465666C61746554020F497344657465726D696E697374696301540209497350726563697365010C070412810D1281F51D0512293801000300540E044E616D650C5574696C5F496E666C61746554020F497344657465726D696E697374696301540209497350726563697365010E070512810D1281F512810D0812293B01000300540E044E616D650F5574696C5F497356616C696453534E54020F497344657465726D696E69737469630154020949735072656369736501070003020E0E11590607040E0808083A01000300540E044E616D650E5574696C5F497356616C6964434354020F497344657465726D696E6973746963015402094973507265636973650118070C0E128129128129128129128129128129080808080E083601000300540E044E616D650A5574696C5F435243333254020F497344657465726D696E69737469630154020949735072656369736501042001050A0B07081D09090909080908050500001281FD0620011D051D0505000012820505000012820905000012820D0500001282110507021D050E3501000300540E044E616D65095574696C5F4861736854020F497344657465726D696E697374696301540209497350726563697365010807031D051280BD083B01000300540E044E616D650F5574696C5F4861736842696E61727954020F497344657465726D696E6973746963015402094973507265636973650106000111651D054A01000300540E044E616D651E5574696C5F497356616C6964436865636B526F7574696E674E756D62657254020F497344657465726D696E697374696301540209497350726563697365010C070A0E0808080808080808084201000300540E044E616D65165574696C5F497356616C6964506F7374616C436F646554020F497344657465726D696E697374696301540209497350726563697365010306113D80CA01000400540E044E616D65135574696C5F497356616C6964436F6E766572745455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730100000054020F497344657465726D696E69737469630154020949735072656369736501060002020E1008062001011182190600030E1C1C1C41072312819D128195020E080E0E1D0E0E0E1D031D0E080E0812819D1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E1D0E\
-1D0E3F01000300540E044E616D65135574696C5F476574546F74616C4D656D6F727954020F497344657465726D696E697374696300540209497350726563697365010400010A020901000453514C230000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000004201003D436F7079726967687420C2A920323030362D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00000B010006332E332E383300000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730100C4F808000000000000000000DEF80800002000000000000000000000000000000000000000000000D0F80800000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF250020001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000580009006C03000000000000000000006C0334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004CC020000010053007400720069006E006700460069006C00650049006E0066006F000000A802000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C0065006100700000000000340005000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C00230000000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033000000000034000900010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E0064006C006C0000000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E00000000003C00090001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E0064006C006C00000000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E0030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F008000C000000F03800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL# Assembly Created.';
- PRINT '';
-
-
- IF (@InstallSQL#TypesAndAggregates = 1 OR @InstallSQL#Twitterizer = 1 OR @InstallSQL#Network = 1)
- BEGIN
- PRINT 'Creating SQL#.TypesAndAggregates Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.TypesAndAggregates]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007C2168540000000000000000E00002210B010B000048000000080000000000003E67000000200000008000000000001000200000000200000400000000000000040000000000000000C000000002000037A60000030040850000100000100000000010000010000000000000100000000000000000000000F06600004B00000000800000300400000000000000000000000000000000000000A000000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000044470000002000000048000000020000000000000000000000000000200000602E72737263000000300400000080000000060000004A0000000000000000000000000000400000402E72656C6F6300000C00000000A000000002000000500000000000000000000000000000400000420000000000000000000000000000000020670000000000004800000002000500C041000030250000090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000079A7F532311507575258ADFFCA27F09415552860B475A2077298592B04EB87E90E5F9BB7C5DC6CFDAAAC76CFEFD4C51ADFEF27562892F179A7BB103B1320DB6080636589B6358B7FB6FCD8E1AFC859A868B411C95865B6BEFF9E44F42099273D24FC99AF12C4DA204F4E5167C5BFE5421F86D674FB9A52DA9613A82AE14C84313202731100000A7D010000042A960F01281200000A2C012A027B010000040F01281300000A6F1400000A1F2C6F1500000A262A4E027B01000004037B010000046F1600000A262A001330040042000000010000117E1700000A0A027B010000042C28027B010000046F1800000A16311A027B0100000416027B010000046F1800000A17596F1900000A0A066F1A00000A731B00000A2A00001B300200940000000200001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A02066F2700000A732800000A7D01000004DE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A0128000002002A004771000A0000000002002400597D000A0000000002001C006D89000A000000001B3004006700000003000011732200000A0A06732A00000A0B07027B010000046F2B00000A6F2C00000A732200000A0C081717732D00000A0D066F2E00000A13040911041611048E696F2F00000ADE0A092C06096F2900000ADC03086F2E00000A6F3000000ADE0A082C06086F2900000ADC2A00011C000002002D001744000A0000000002002400385C000A000000001E02283100000A2A3202733200000A7D020000042A760F01283300000A2C012A027B020000040F01283400000A6F3500000A2A4A027B02000004037B020000046F3600000A2A0000133004008A000000040000112300000000000000000A160B027B020000046F3700000A027B020000046F3800000A0B0716315D07185D2D2E027B0200000407185B17596F3900000A6C027B0200000407185B6F3900000A6C582300000000000000405B0A2B23027B02000004076C2300000000000000405B283A00000A283B00000A6F3900000A6C0A06733C00000A2A7E3D00000A2A00001B300200BF0000000500001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A066F3E00000A1305110515312F021105733F00000A7D020000041613062B17027B02000004066F4000000A6F3500000A1106175813061106110532E3DE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A000128000002002A00729C000A000000000200240084A8000A0000000002001C0098B4000A000000001B300400AE00000006000011732200000A0A06732A00000A0B07027B020000046F3800000A6F4100000A027B020000046F3700000A027B020000046F4200000A13062B101206284300000A6C0C07086F4400000A1206284500000A2DE7DE0E1206FE160200001B6F2900000ADC732200000A0D091717732D00000A1304066F2E00000A1305110411051611058E696F2F00000ADE0C11042C0711046F2900000ADC03096F2E00000A6F3000000ADE0A092C06096F2900000ADC2A000001280000020036001D53000E00000000020071001889000C00000000020067003CA3000A000000001E02283100000A2A7202167D030000040223000000000000F03F284700000A7D040000042AAE0F01283300000A2C012A02257B0300000417587D0300000402257B0400000403284800000A7D040000042AB602257B030000040F017B03000004587D0300000402257B040000040F017B04000004284800000A7D040000042A9E027C04000004283400000A23000000000000F03F027B030000046C5B284900000A733C00000A2A7202167D0500000402230000000000000000284700000A7D060000042A0330040045000000000000000F01283300000A2C012A02257B0500000417587D0500000402257B060000040F01283400000A230000000000000040284900000A6C284700000A284A00000A7D060000042AB602257B050000040F017B05000004587D0500000402257B060000040F017B06000004284A00000A7D060000042A7A027C06000004283400000A027B050000046C5B284B00000A733C00000A2A3202733200000A7D070000042A760F01283300000A2C012A027B070000040F01283400000A6F3500000A2A4A027B07000004037B070000046F3600000A2A133003003200000007000011160A160B734C00000A0C027B070000046F3800000A0B0816076F4D00000A0A027B07000004066F3900000A6C733C00000A2A00001B300200BF0000000500001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A066F3E00000A1305110515312F021105733F00000A7D070000041613062B17027B07000004066F4000000A6F3500000A1106175813061106110532E3DE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A000128000002002A00729C000A000000000200240084A8000A0000000002001C0098B4000A000000001B300400AE00000006000011732200000A0A06732A00000A0B07027B070000046F3800000A6F4100000A027B070000046F3700000A027B070000046F4200000A13062B101206284300000A6C0C07086F4400000A1206284500000A2DE7DE0E1206FE160200001B6F2900000ADC732200000A0D091717732D00000A1304066F2E00000A1305110411051611058E696F2F00000ADE0C11042C0711046F2900000ADC03096F2E00000A6F3000000ADE0A092C06096F2900000ADC2A000001280000020036001D53000E00000000020071001889000C00000000020067003CA3000A000000001E02283100000A2A2A027B0800000414FE012A00133001000A000000080000111200FE1507000002062A00001330040091000000090000110F00281200000A2C06281F0000062A1200FE15070000020F00281300000A7E1700000A6F4F00000A2C0E1200735000000A7D080000042B570F00281300000A178D2F0000010D09161F2C9D096F5100000A0B1200078E69735200000A7D080000040713041613052B1E110411059A0C12007B08000004086F5300000A6F5400000A110517581305110511048E6932DA062A00000013300400380100000A0000110F01285600000A027B080000046F5700000A1758313972010000700F01285600000A13041204285800000A7286000070027B080000046F5700000A13051205285800000A285900000A735A00000A7A0F01285600000A162F2072A00000700F01285600000A13061206285800000A285B00000A735A00000A7A02281E0000062C0B02735000000A7D080000040F02281300000A178D2F00000113071107161F2C9D11076F5100000A0A0316285C00000A285D00000A285E00000A2C2F0613081613092B1D110811099A0B027B08000004076F5300000A6F5400000A110917581309110911088E6932DB2B46068E69735200000A0C06130A16130B2B18110A110B9A0D08096F5300000A6F5400000A110B1758130B110B110A8E6932E0027B080000040F01285600000A1759086F5F00000A0271070000022A133003005D0000000B0000110F01285600000A027B080000046F5700000A31067E6000000A2A0F01285600000A172F1F72EE0000700F01285600000A0A1200285800000A285B00000A735A00000A7A027B080000040F01285600000A17596F6100000A286200000A2A4A027B080000046F6300000A0271070000022A62027B080000040F01281300000A6F6400000A736500000A2A0000001B300300A30000000C0000110F02286600000A2D48027B080000046F6700000A0D2B211203286800000A0A060F01281300000A17286900000A2C0917286A00000A0CDE691203286B00000A2DD6DE571203FE160400001B6F2900000ADC027B080000046F6700000A13042B211204286800000A0B070F01281300000A16286900000A2C0917286A00000A0CDE201204286B00000A2DD6DE0E1204FE160400001B6F2900000ADC16286A00000A2A082A00011C0000020015002E43000E0000000002005E002E8C000E000000007E02281E0000062C067E6C00000A2A027B080000046F5700000A285C00000A2ABA02281E0000062C067E6C00000A2A723C010070027B080000046F6D00000A286E00000A6F6F00000A285C00000A2A0013300400970000000D0000110F02285600000A027B080000046F5700000A3137723E0100700F02285600000A0A1200285800000A7286000070027B080000046F5700000A0B1201285800000A285900000A735A00000A7A0F02285600000A172F1F72EE0000700F02285600000A0C1202285800000A285B00000A735A00000A7A027B080000040F01281300000A0F02285600000A17596F7000000A1758285C00000A2A00133004000B0100000E0000110F02285600000A027B080000046F5700000A3137723E0100700F02285600000A0C1202285800000A7286000070027B080000046F5700000A0D1203285800000A285900000A735A00000A7A0F02285600000A172F2072EE0000700F02285600000A13041204285800000A285B00000A735A00000A7A0F03286600000A2D440F02285600000A17590A2B28027B08000004066F6100000A0F01281300000A17286900000A2C09061758285C00000A2A0617580A06027B080000046F5700000A32CA2B420F02285600000A17590B2B28027B08000004076F6100000A0F01281300000A16286900000A2C09071758285C00000A2A0717580B07027B080000046F5700000A32CA16285C00000A2A00133004008F0000000D0000110F01285600000A027B080000046F5700000A3137723E0100700F01285600000A0A1200285800000A7286000070027B080000046F5700000A0B1201285800000A285900000A735A00000A7A0F01285600000A172F1F72EE0000700F01285600000A0C1202285800000A285B00000A735A00000A7A027B080000040F01285600000A17596F7100000A0271070000022A6A027B080000040F01281300000A6F7200000A260271070000022A000013300400960000000D0000110F01285600000A027B080000046F5700000A3137723E0100700F01285600000A0A1200285800000A7286000070027B080000046F5700000A0B1201285800000A285900000A735A00000A7A0F01285600000A172F1F72EE0000700F01285600000A0C1202285800000A285B00000A735A00000A7A027B080000040F01285600000A17590F02285600000A6F7300000A0271070000022A4A027B080000046F7400000A0271070000022A4A027B080000046F7500000A0271070000022A9202281E0000062C067E1700000A2A72B4010070027B080000046F6D00000A286E00000A2A0000001B300200BF0000000500001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A066F3E00000A1305110515312F021105735200000A7D080000041613062B17027B08000004066F2700000A6F5400000A1106175813061106110532E3DE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A000128000002002A00729C000A000000000200240084A8000A0000000002001C0098B4000A000000001B300400B30000000F000011732200000A0A06732A00000A0B02281E0000062C0907156F4100000A2B4807027B080000046F5700000A6F4100000A027B080000046F6700000A13062B0F1206286800000A0C07086F2C00000A1206286B00000A2DE8DE0E1206FE160400001B6F2900000ADC732200000A0D091717732D00000A1304066F2E00000A1305110411051611058E696F2F00000ADE0C11042C0711046F2900000ADC03096F2E00000A6F3000000ADE0A092C06096F2900000ADC2A000128000002003C001C58000E0000000002007600188E000C0000000002006C003CA8000A000000002A027B0900000414FE012A00133001000A000000100000111200FE1508000002062A00001330040096000000110000110F00281200000A2C0628330000062A1200FE15080000020F00281300000A7E1700000A6F4F00000A2C0E1200733200000A7D090000042B5C0F00281300000A178D2F0000010D09161F2C9D096F5100000A0B1200078E69733F00000A7D090000040713041613052B23110411059A0C12007B09000004086F5300000A287600000A6F3500000A110517581305110511048E6932D5062A00001B30020053000000120000112300000000000000000A027B090000046F4200000A0C2B0D1202284300000A6C0B0607580A1202284500000A2DEADE0E1202FE160200001B6F2900000ADC06027B090000046F3800000A6C5B6C284700000A2A0001100000020016001A30000E000000001330040042010000130000110F01285600000A027B090000046F3800000A1758313972010000700F01285600000A13041204285800000A7286000070027B090000046F3800000A13051205285800000A285900000A735A00000A7A0F01285600000A162F2072A00000700F01285600000A13061206285800000A285B00000A735A00000A7A0228320000062C0B02733200000A7D090000040F02281300000A178D2F00000113071107161F2C9D11076F5100000A0A0316285C00000A285D00000A285E00000A2C340613081613092B22110811099A0B027B09000004076F5300000A287600000A6F3500000A110917581309110911088E6932D62B4B068E69733F00000A0C06130A16130B2B1D110A110B9A0D08096F5300000A287600000A6F3500000A110B1758130B110B110A8E6932DB027B090000040F01285600000A1759086F7700000A0271080000022A0000133003005F0000000B0000110F01285600000A027B090000046F3800000A31067E3D00000A2A0F01285600000A172F1F72EE0000700F01285600000A0A1200285800000A285B00000A735A00000A7A027B090000040F01285600000A17596F3900000A6C6C284700000A2A4A027B090000046F7800000A0271080000022A62027B090000040F01283400000A6F7900000A736500000A2A7E0228320000062C067E6C00000A2A027B090000046F3800000A285C00000A2A0013300400970000000D0000110F02285600000A027B090000046F3800000A3137723E0100700F02285600000A0A1200285800000A7286000070027B090000046F3800000A0B1201285800000A285900000A735A00000A7A0F02285600000A172F1F72EE0000700F02285600000A0C1202285800000A285B00000A735A00000A7A027B090000040F01283400000A0F02285600000A17596F7A00000A1758285C00000A2A00133004008F0000000D0000110F01285600000A027B090000046F3800000A3137723E0100700F01285600000A0A1200285800000A7286000070027B090000046F3800000A0B1201285800000A285900000A735A00000A7A0F01285600000A172F1F72EE0000700F01285600000A0C1202285800000A285B00000A735A00000A7A027B090000040F01285600000A17596F7B00000A0271080000022A6A027B090000040F01283400000A6F7C00000A260271080000022A000013300400960000000D0000110F01285600000A027B090000046F3800000A3137723E0100700F01285600000A0A1200285800000A7286000070027B090000046F3800000A0B1201285800000A285900000A735A00000A7A0F01285600000A172F1F72EE0000700F01285600000A0C1202285800000A285B00000A735A00000A7A027B090000040F01285600000A17590F02285600000A6F7D00000A0271080000022A4A027B090000046F7E00000A0271080000022A4A027B090000046F3700000A0271080000022A1B30020046000000120000112300000000000000000A027B090000046F4200000A0C2B0D1202284300000A6C0B0607580A1202284500000A2DEADE0E1202FE160200001B6F2900000ADC066C284700000A2A000001100000020016001A30000E000000001B3002006D000000140000110228320000062C067E1700000A2A027B090000046F3800000A735200000A0A027B090000046F4200000A0C2B161202284300000A6C0B061201287F00000A6F5400000A1202284500000A2DE1DE0E1202FE160200001B6F2900000ADC72B4010070066F6D00000A286E00000A2A0000000110000002002B00234E000E000000001330040080000000040000112300000000000000000A160B027B090000046F3700000A027B090000046F3800000A0B07185D2D2E027B0900000407185B17596F3900000A6C027B0900000407185B6F3900000A6C582300000000000000405B0A2B23027B09000004076C2300000000000000405B283A00000A283B00000A6F3900000A6C0A06733C00000A2A1B300200BF0000000500001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A066F3E00000A1305110515312F021105733F00000A7D090000041613062B17027B09000004066F4000000A6F3500000A1106175813061106110532E3DE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A000128000002002A00729C000A000000000200240084A8000A0000000002001C0098B4000A000000001B300400B400000006000011732200000A0A06732A00000A0B0228320000062C0907156F4100000A2B4907027B090000046F3800000A6F4100000A027B090000046F4200000A13062B101206284300000A6C0C07086F4400000A1206284500000A2DE7DE0E1206FE160200001B6F2900000ADC732200000A0D091717732D00000A1304066F2E00000A1305110411051611058E696F2F00000ADE0C11042C0711046F2900000ADC03096F2E00000A6F3000000ADE0A092C06096F2900000ADC2A0128000002003C001D59000E0000000002007700188F000C0000000002006D003CA9000A000000002A027B0A00000414FE012A00133001000A000000150000111200FE1509000002062A000013300400BF000000160000110F00281200000A2C0628470000062A1200FE15090000020F00281300000A7E1700000A6F4F00000A2C111200738000000A7D0A00000438820000000F00281300000A178D2F00000113041104161F269D11046F5100000A0B1200078E69738100000A7D0A000004188D210000010C0713051613062B3F110511069A0D09178D2F00000113071107161F3D9D11076F5100000A0C12007B0A00000408169A6F5300000A08179A6F5300000A6F8200000A110617581306110611058E6932B9062A001330040089000000170000110228460000062C0B02738000000A7D0A0000040F01281300000A178D2F0000010D09161F269D096F5100000A0A188D210000010B0613041613052B3E110411059A0C08178D2F00000113061106161F3D9D11066F5100000A0B027B0A00000407169A6F5300000A07179A6F5300000A6F8200000A110517581305110511048E6932BA0271090000022ACE0228460000062C0B02738000000A7D0A000004027B0A0000040F01281300000A0F02281300000A6F8200000A0271090000022A4A027B0A0000046F8300000A0271090000022A62027B0A0000040F01281300000A6F8400000A736500000A2A62027B0A0000040F01281300000A6F8500000A736500000A2A7E0228460000062C067E6C00000A2A027B0A0000046F8600000A285C00000A2A76027B0A0000040F01281300000A6F8700000A7421000001286200000A2A1B300300E4000000180000110F02286600000A2D69027B0A0000046F8800000A6F8900000A0D2B38096F8A00000A74210000010A060F01281300000A17286900000A2C1C027B0A000004066F8700000A7421000001286200000A0CDD8E000000096F8B00000A2DC0DE7E097527000001130411042C0711046F2900000ADC027B0A0000046F8800000A6F8900000A13052B3611056F8A00000A74210000010B070F01281300000A16286900000A2C19027B0A000004076F8700000A7421000001286200000A0CDE2611056F8B00000A2DC1DE1511057527000001130611062C0711066F2900000ADC7E6000000A2A082A011C000002001A00445E0014000000000200840043C700150000000066027B0A0000040F01281300000A6F8C00000A0271090000022A00001B300300AA000000190000110228460000062D0D027B0A0000046F8600000A2D067E1700000A2A723C010070732800000A0A027B0A0000046F8800000A6F8900000A0C2B3F086F8A00000A74210000010B06076F1400000A260672B80100706F1400000A2606027B0A000004076F8700000A6F1600000A260672BC0100706F1400000A26086F8B00000A2DB9DE110875270000010D092C06096F2900000ADC06066F1800000A1759176F8D00000A26066F2B00000A2A000001100000020037004B820011000000001B3002006C000000190000110228460000062C067E6C00000A2A723C010070732800000A0A027B0A0000046F8E00000A6F8900000A0C2B14086F8A00000A74210000010B06076F1400000A26086F8B00000A2DE4DE110875270000010D092C06096F2900000ADC066F2B00000A6F6F00000A285C00000A2A0110000002002A00204A0011000000001E027B0A0000042A1B300300C50000000500001103036F1C00000A6F1D00000A281E00000A6F1F00000A732000000A0B0716732100000A0C732200000A0D086F2300000A13042B11091104D26F2400000A086F2300000A130411041533EA09732500000A0A066F1C00000A166A6F2600000A066F3E00000A13051105153135021105738100000A7D0A0000041613062B1D027B0A000004066F2700000A066F2700000A6F8200000A1106175813061106110532DDDE0A092C06096F2900000ADCDE0A082C06086F2900000ADCDE0A072C06076F2900000ADC2A0000000128000002002A0078A2000A00000000020024008AAE000A0000000002001C009EBA000A000000001B300400DB0000001A000011732200000A0A06732A00000A0B0228460000062C0907156F4100000A2B7007027B0A0000046F8600000A6F4100000A027B0A0000046F8800000A6F8900000A13062B2B11066F8A00000A74210000010C07086F2C00000A07027B0A000004086F8700000A74210000016F2C00000A11066F8B00000A2DCCDE1511067527000001130711072C0711076F2900000ADC732200000A0D091717732D00000A1304066F2E00000A1305110411051611058E696F2F00000ADE0C11042C0711046F2900000ADC03096F2E00000A6F3000000ADE0A092C06096F2900000ADC2A000128000002004100387900150000000002009E0018B6000C00000000020094003CD0000A000000001A288F00000A2A0042534A4201000100000000000C00000076322E302E35303732370000000005006C000000D00D0000237E00003C0E0000C809000023537472696E67730000000004180000C001000023555300C4190000100000002347554944000000D41900005C0B000023426C6F6200000000000000020000015717A2090900000000FA2533001600000100000038000000090000000A000000570000003B000000090000008F000000190000001A000000030000000C0000000C00000004000000010000000300000000000A000100000000000600A800A1000A00D600BB000600E700A1000A000601F10006001C0110010A004201F1000A005D01F10006007A01700106008C0170010600C001A5010A00D101F1000A002E02F1000A004B02F10006001C0309030A009A03F1000600C204B0040600D904B0040600F604B00406001505B00406002E05B00406004705B00406006205B00406007D05B0040600B50596050600C905B0040600E205B00406000F06FF050600550635060600750635060600AB06A1000A00C106BB000A00E206BB000600FA06A10006001E07700106003407A10006004E0770010E0071075B070E007F075B070600BA07A1000600DA07A5010600FA07A1002B001A08000006004808960506005E08960506009608A1000A00A208BB000600C508A1000A00D508BB000600E808A1000A00F508F1000E004E092F090E0054092F0906008609A10006008D0909030600A20909030600AE09090300000000010000000000010001000120100026000000050001000100012010002F000000050002000800092110003A0000000D0003000F00092110004B0000000D0005001300012010005B00000005000700170009211000660000000D0008001E0009211000790000000D000900320009211000890000000D000A00460001002A010A000100C7012F000100DB0147000100E9014A000100DB0147000100FA014A000100C7012F00010009026000010009022F00010009022B01D0200000000086003D010E000100DD200000000086004C01120001000321000000008600570118000200182100000000860066011E000300682100000000E601870123000300302200000000E601990129000400C0220000000086189F010E000500C8220000000086003D010E000500D5220000000086004C\
-0136000500F32200000000860057013C0006000823000000008600660142000700A02300000000E601870123000700942400000000E60199012900080078250000000086189F010E00090080250000000086003D010E0009009D250000000086004C0136000900C92500000000860057014E000A00F725000000008600660142000B001F260000000086003D010E000B003C260000000086004C0136000B008D26000000008600570154000C00BB26000000008600660142000D00DA260000000086003D010E000D00E7260000000086004C0136000D00052700000000860057015A000E001827000000008600660142000F00582700000000E601870123000F004C2800000000E60199012900100030290000000086189F010E001100382900000000E60914026700110044290000000096081F026B0011005C29000000009600280270001100FC29000000008600370277001200402B0000000086003F0280001400A92B000000008600450287001500BC2B00000000860056028C001500D82B000000008600630293001600A42C00000000860873029C001800C42C0000000086087D029C001800F42C0000000086008C02A1001800982D0000000086009802AA001A00B02E000000008600A702B5001D004B2F000000008600B002BC001E00682F000000008600BB02C3001F000A30000000008600C702870021001D30000000008600CF0287002100303000000000C600D402CC002100583000000000E6018701230021004C3100000000E601990129002200343200000000E60914026700230040320000000096081F02DE00230058320000000096002802E3002300FC32000000008600FA02420024006C330000000086003702EA002400BC340000000086003F02F300260027350000000086004502FA0027003A350000000086005602FF002700533500000000860873029C00280074350000000086008C02060128001836000000008600A7020F012A00B336000000008600B00216012B00D036000000008600BB021D012C007237000000008600C702FA002E008537000000008600CF02FA002E009837000000008600FE0242002E00FC3700000000C600D402CC002E008838000000008600020342002E00143900000000E601870123002E00083A00000000E601990129002F00F03A00000000E609140267003000FC3A0000000096081F022F013000143B000000009600280234013000E03B00000000860037023B013100753C000000008600260342013200A93C00000000860045024B013400BC3C0000000086002E038C003400D53C0000000086003A038C003500EE3C00000000860873029C0036000E3D0000000086004803500136002C3D000000008600510357013700383E00000000860066033B013900543E00000000C600D402CC003A001C3F00000000860871039C003A00A43F000000008608860360013A00AC3F00000000E601870123003A00A84000000000E601990129003B00B841000000008600A10365013C0000000100CE0300000100D40300000100DA0300000100E50300000100CE0300000100D40300000100DA0300000100E50300000100F40300000100FA0300000100F40300000100FA0300000100CE0300000100D40300000100DA0300000100E503000001000304000001000E04000002001404000001000E04000001002104000001002E04000002003C04000001002104000002000E04000001002E04000002000E04000003003C04000001000E04000001004A04000001000E0400000200E902000001005604000001006504000001000304000001000E04000002001404000001000E04000001007404000001007404000002000E04000001000E04000001008104000001000E0400000200E902000001005604000001006504000001000304000001008D0400000100980400000200A10400000100210400000100210400000100AC04000001002E04000002003C0400000100980400000100560400000100650402000900030009000600090007001100070009000800110008000900090011000900090081009F01740189009F01740191009F01740199009F017401A1009F017401A9009F017401B1009F017401B9009F017401C1009F017901C9009F017401D1009F017401D9009F010E00E1009F017E01E9009F010E00F1009F010E00F9009F01250229009F010E003100140267003100E906CC002900F3069E022900F306A4022900F306AA0209010107B00229000707B3022900D402B70209011207BD0239009F01C20241002507CC0211010707D20219013C07D60241004407DB0221019F01E10229019F01E70221019F010E0011018F07B30211019807F10241009F01F6021101A207FD024100AF07CC0029009F0174013901C6070E0049009F01F6020900D402CC0049009901740129019F0111032101CE071C0311019901210349009901E10209009F010E000C009F010E005900140267005900E906C5030C00D607C9030C00E807CF030C00CF020E000C007302B3020C00F107DA034901FF07E00319013C07E50359009F01EA035900E4024A0041000508B3020C009F017E0141000F08C503490099017E010C002508050414003308160449009901EA0314003F08670059019F01AB0459006908B20459007508B80449018108C10459008508B80449019108E00369019F010E0069019D08C50571019F0125020901BE082F061C009F010E000901CA083A061C009F017E010901D008CC001C00D607C90381019F010E006100E906B3021C007302B3028901D402CC000901EE08880691019F0174010901EE089006610069089606610006099C0669001209A5061C001A09AB063100E402CE061C00F107DA0331006908D2061C0045020E001C002609DC0669009F0179016900E90667001C002508050424003308160499016109E90669006908F20624003F0867006100E4020B071C00CE070F0709016909150709010707B3021C006E091C071C00A7027E011C007609DC061C00BB0231071C00C7020E001C00CF020E0019017D09A7070C001A09AB060C0045020E000C002609DC060C006E091C070C00A7027E010C007609DC060C00BB0231070C00C7020E00A901D402CC0071009F010E0071009F017E017100D6074208710045020E0071002E03A20871003A03A20871007302B3027100F107A70871009909AC08B9012508B208C1013308B808C1013F08670071007609CF0829007609D4087100BA09AC0879001F02810A2E006B00330B2E0073003C0B2E0063002E0B2E000B00860A2E001300A30A2E001B00B90A2E002300BF0A2E002B00D50A2E003300DF0A2E003B00B90A2E004B00B90A2E005B00220B430083002C02630083003903830083003204A3008300C704C30083003F05E3007302D305030173024E0723017302EA072004AB024E06C006AB024E062009AB0259084009AB025908E00AAB02FE08C80202032903EF03F4031B04CB052A064106B706D806F806230729073707A207AC07B907C407DB073D0848089308BC08DB08E7080700010008000500090008000000DD02D0000000E402D4000000E902D9000000EF02D9000000DD02D0000000E40226010000E902D9000000DD02D0000000E4026A010000E902D9000000AD03D9000000BE036F0102001E00030002001F000500020026000700020027000900020032000B00020033000D0002003A000F0002004600110002004700130002004E001500020053001700020054001900BF030F043406E2060480000003000300530000000100000083019306000002000000000000000000000001009800000000000200000000000000000000000100AF00000000000200000000000000000000000100A100000000000000003C4D6F64756C653E0053514C232E5479706573416E64416767726567617465732E646C6C004167675F4A6F696E004167675F4D656469616E004167675F47656F6D6574726963417667004167675F526F6F744D65616E537172004167675F52616E646F6D00547970655F4E56617263686172417272617900547970655F466C6F6174417272617900547970655F486173685461626C65006D73636F726C69620053797374656D004F626A6563740053797374656D2E44617461004D6963726F736F66742E53716C5365727665722E536572766572004942696E61727953657269616C697A650056616C7565547970650053797374656D2E446174612E53716C547970657300494E756C6C61626C650053797374656D2E5465787400537472696E674275696C64657200696E7465726D656469617465526573756C7400496E69740053716C537472696E6700416363756D756C617465004D657267650053716C4368617273005465726D696E6174650053797374656D2E494F0042696E61727952656164657200526561640042696E617279577269746572005772697465002E63746F720053797374656D2E436F6C6C656374696F6E732E47656E65726963004C69737460310056616C75654C6973740053716C446F75626C65005F5F436F756E7456616C756573005F5F43757272656E7441766572616765005F5F43757272656E7456616C7565005F5F5468654172726179006765745F49734E756C6C006765745F4E756C6C0050617273650053716C496E743332004164644461746100476574417400436C6561720053716C426F6F6C65616E00436F6E7461696E734974656D00436F6E7461696E735061747465726E006765745F436F756E74006765745F446174614C656E67746800496E6465784F664974656D00496E6465784F665061747465726E0052656D6F766541740052656D6F76654974656D0052656D6F766552616E6765005265766572736500536F727400546F537472696E670049734E756C6C004E756C6C00436F756E7400446174614C656E677468004176670053756D004D656469616E0053797374656D2E436F6C6C656374696F6E7300486173687461626C65004164644974656D00436F6E7461696E734B657900436F6E7461696E7356616C75650047657456616C75650047657456616C756542794B65795061747465726E0052656D6F766550616972006765745F56616C756573446174614C656E677468006765745F4E6174697665486173687461626C650053716C586D6C004765745461626C65584D4C0056616C756573446174614C656E677468004E6174697665486173687461626C650076616C7565006F746865720053657269616C697A656400546F426553657269616C697A65640056616C7565004F7468657241676700496E6974537472696E6700496E64657800496E707574537472696E677300536561726368537472696E67005365617263685061747465726E004361736553656E73697469766500496E707574537472696E670045787465726E616C5265616465720045787465726E616C57726974657200536561726368446F75626C6500496E707574446F75626C6500496E707574506169727300496E7075744B657900496E70757456616C7565004B65790053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C747572654174747269627574650053797374656D2E52756E74696D652E496E7465726F70536572766963657300436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E536563757269747900416C6C6F775061727469616C6C795472757374656443616C6C6572734174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E5479706573416E64416767726567617465730053657269616C697A61626C654174747269627574650053716C55736572446566696E656441676772656761746541747472696275746500466F726D6174006765745F56616C756500417070656E6400537472696E6700456D707479006765745F4C656E67746800546F4368617241727261790053747265616D006765745F4261736553747265616D00436F6E7665727400546F496E74333200526561644279746573004D656D6F727953747265616D0053797374656D2E494F2E436F6D7072657373696F6E004465666C61746553747265616D00436F6D7072657373696F6E4D6F646500526561644279746500577269746542797465007365745F506F736974696F6E0052656164537472696E670049446973706F7361626C6500446973706F736500546F4172726179004164640049456E756D657261626C6560310041646452616E6765006765745F4974656D004D61746800466C6F6F720052656164496E7433320052656164446F75626C6500456E756D657261746F7200476574456E756D657261746F72006765745F43757272656E74004D6F76654E657874005374727563744C61796F7574417474726962757465004C61796F75744B696E64006F705F496D706C69636974006F705F4D756C7469706C7900506F77006F705F4164646974696F6E00537172740052616E646F6D004E6578740053716C55736572446566696E65645479706541747472696275746500457175616C7300436861720053706C6974005472696D0053716C4D6574686F6441747472696275746500496E74333200436F6E6361740053716C54797065457863657074696F6E006F705F457175616C697479006F705F5472756500496E7365727452616E676500436F6E7461696E730053797374656D2E546578742E526567756C617245787072657373696F6E730052656765780052656765784F7074696F6E730049734D61746368004A6F696E00496E6465784F660052656D6F766500546F446F75626C6500446F75626C650049436F6C6C656374696F6E006765745F4B6579730049456E756D657261626C650049456E756D657261746F72006765745F56616C75657300000000008083400049006E006400650078002000630061006E006E006F0074002000620065002000670072006500610074006500720020007400680061006E002000740068006500200043006F0075006E007400200070006C0075007300200031003B002000400049006E006400650078002000750073006500640020007700610073003A00200000192C00200043006F0075006E0074002000690073003A002000004D400049006E0064006500780020006D0075007300740020006200650020003E003D00200030003B002000400049006E006400650078002000750073006500640020007700610073003A002000004D400049006E0064006500780020006D0075007300740020006200650020003E003D00200031003B002000400049006E006400650078002000750073006500640020007700610073003A00200000010075400049006E006400650078002000630061006E006E006F0074002000620065002000670072006500610074006500720020007400680061006E002000740068006500200043006F0075006E0074003B002000400049006E006400650078002000750073006500640020007700610073003A00200000032C0000033D0000032600006AD403685DE29B4ABB3D1B3527566B7F0008B77A5C561934E0890306121503200001052001011119052001011208042000121D0520010112210520010112250606151229010D05200101112D05200101120C042000112D0206080306112D0520010111100520010111140520010112180606151229010E03200002040000111C060001111C1119082002111C1131111906200111191131042000111C0620011135111908200211351119113504200011310820021131111911310A20031131111911311135062001111C1131062001111C1119082002111C113111310320000E03280002040800111C0428001131040000112006000111201119082002112011311119062001112D113104200011200620011135112D0820021131112D1131062001112011310620011120112D082002112011311131040800112003061239040000112406000111241119062001112411190820021124111911190420001124062001111911190820021119111911350420001239042000123D04080011240428001239042001010E0420010102042001010880A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC6062001011180817101000200000005005402124973496E76617269616E74546F4E756C6C73015402174973496E76617269616E74546F4475706C696361746573005402124973496E76617269616E74546F4F726465720054080B4D61784279746553697A65401F0000540E044E616D65084167675F4A6F696E05200112150E05200112150305200112151C02060E032000080520020E08080420001D03052001011D030307010E0520001280890320000A040001080A0520011D0508052001011D0509200201128089118099042001010506200101128089042001010A0E07051221128091128095128091080A200301128089118099020420001D05072003011D0508080F070512809112251280911280951D05808401000200000006005402124973496E76617269616E74546F4E756C6C73015402174973496E76617269616E74546F4475706C696361746573005402124973496E76617269616E74546F4F726465720154020D49734E756C6C4966456D7074790154080B4D61784279746553697A65401F0000540E044E616D650A4167675F4D656469616E05151229010D0320000D0520010113000A200101151280A10113000520011300080400010D0D040001080D042001010D0407020D081007071221128091128095128091080808092000151180A901130006151180A9010D042000130016070712809112250D1280911280951D05151180A9010D7801000100000005005402124973496E76617269616E74546F4E756C6C73015402174973496E76617269616E74546F4475706C696361746573005402124973496E76617269616E74546F4F726465720054020D49734E756C6C4966456D70747901540E044E616D65104167675F47656F6D6574726963417667062001011180B1050001112D0D080002112D112D112D0500020D0D0D7701000100000005005402124973496E76617269616E74546F4E756C6C73015402174973496E76617269616E74546F4475706C696361746573005402124973496E76617269616E74546F4F726465720054020D49734E756C6C4966456D70747901540E044E616D650F4167675F526F6F744D65616E537172808401000200000006005402124973496E76617269616E74546F4E756C6C73015402174973496E76617269616E74546F4475706C696361746573005402124973496E76617269616E74546F4F726465720054020D49734E756C6C4966456D7074790154080B4D61784279746553697A65401F0000540E044E616D650A4167675F52616E646F6D05200208080807070308081280B5560100020000000400540E044E616D6512547970655F4E56617263686172417272617954020D4973427974654F7264657265640154020D497346697865644C656E6774680054080B4D61784279746553697A65401F0000040701111C042001020E05151229010E0620011D0E1D030C0706111C1D0E0E1D031D0E0839010003005402094973507265636973650154020A4F6E4E756C6C43616C6C00540216496E766F6B654966526563656976657249734E756C6C010700040E0E0E0E0E0500020E0E0E0500011131080800021135113111310500010211350B20020108151280A101130016070C1D0E0E151229010E0E0808081D031D0E081D0E080306111905000111190E0307010805200102130006151180A9010E080003020E0E1180D10500011135021207050E0E1135151180A9010E151180A9010E030611310520001D13000600020E0E1D0E06200208130008050703080808070705080808080805200201080816070712809112250E1280911280951D05151180A9010E530100020000000400540E044E616D650F547970655F466C6F6174417272617954020D4973427974654F7264657265640154020D497346697865644C656E6774680054080B4D61784279746553697A65401F000004070111200400010D0E0C070611201D0E0E1D031D0E080A07030D0D151180A9010D16070C1D0E0E151229010D0E0808081D031D0E081D0E080E0703151229010E0D151180A9010D520100020000000400540E044E616D650E547970655F486173685461626C6554020D4973427974654F7264657265640154020D497346697865644C656E6774680054080B4D61784279746553697A65401F00000407011124052002011C1C10070811241D0E1D0E0E1D031D0E081D033901000300540216496E766F6B654966526563656976657249734E756C6C015402094973507265636973650154020A4F6E4E756C6C43616C6C000E07071D0E1D0E0E1D031D0E081D03042001021C0420011C1C0520001280D90520001280E10320001C1207070E0E11191280E112809D1280E112809D042001011C062002121508080B070412150E1280E112809D16070812809112250E1280911280951D051280E112809D818101000700540E044E616D650B4765745461626C65584D4C5455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D446174614163636573730000000054020A4F6E4E756C6C43616C6C00540216496E766F6B654966526563656976657249734E756C6C0054020F497344657465726D696E69737469630054020949735072656369736501040000123D1C01001753514C232E5479706573416E64416767726567617465730000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300004201003D436F7079726967687420C2A920323030362D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00000B010006332E332E3833000004010000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301001867000000000000000000002E670000002000000000000000000000000000000000000000000000206700000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058800000D80300000000000000000000D80334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00438030000010053007400720069006E006700460069006C00650049006E0066006F0000001403000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C0065006100700000000000580018000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033000000000058001C00010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073002E0064006C006C000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E000000000060001C0001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E005400790070006500730041006E00640041006700670072006500670061007400650073002E0064006C006C0000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033\
-002E00380033002E003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000C000000403700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL#.TypesAndAggregates Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.TypesAndAggregates Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#JsonFx = 1 OR @InstallSQL#Twitterizer = 1)
- BEGIN
- PRINT 'Creating SQL#.JsonFx Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.JsonFx]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007C2168540000000000000000E00002210B010B0000E0020000080000000000006EFF02000020000000000300000000100020000000020000040000000000000004000000000000000040030000020000ED49030003004085000010000010000000001000001000000000000010000000000000000000000014FF020057000000000003007804000000000000000000000000000000000000002003000C000000DCFD02001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E7465787400000074DF02000020000000E0020000020000000000000000000000000000200000602E7273726300000078040000000003000006000000E20200000000000000000000000000400000402E72656C6F6300000C000000002003000002000000E80200000000000000000000000000400000420000000000000000000000000000000050FF020000000000480000000200050024680100B89501000900000000000000000000000000000050200000800000000000000000000000000000000000000000000000000000000000000000000000886198188F81FBC268568D058B1FE2C550D053535126662DC739B9FD3DEAE2D41F9DD21106F633824E43B2BD4B529D84B8BD914146BD7D701C0875DC466585D9E7303D0C79BE9449EE2599BE1C731CDCA9E0480D239AFC90C899C257FFF7E0DC945AAB67F5E6A037549C0BD7DFDE11EFA8C3BE099473193A3FD63FEE3DE9863E13300200220100000100001102282500000A032D0B7201000070732600000A7A036F2700000A0A02036F2800000A7D0300000402066F2900000A7D0200000402066F2A00000A7D0400000403D03D000001282B00000A282C00000A753D0000010B02072D077E2D00000A2B06076F2E00000A7D0600000403D039000001282B00000A282C00000A75390000010C02082D077E2D00000A2B06086F2F00000A7D0800000403D038000001282B00000A282C00000A75380000010D02092D077E2D00000A2B06096F3000000A7D0700000403D03B000001282B00000A282C00000A753B00000113040211042D077E2D00000A2B0711046F3100000A7D0900000403D03A000001282B00000A282C00000A753A00000113050211052D077E2D00000A2B0711056F3200000A7D050000042A6AD002000002282B00000A6F3300000A730100000680010000042A5E20B207000017171616161617733500000A80320000042A1E02282500000A2A0000001B3003003100000002000011032D0B7213000070732600000A7A733600000A0A0203062808000006066F3700000A0BDE0A062C06066F1300000ADC072A00000001100000020014001125000A000000001B3003004D00000003000011042D0B7221000070732600000A7A032D0B7213000070732600000A7A04283800000A733900000A0A03283A00000A0B076F3B00000A2D09020607280900000626DE0A062C06066F1300000ADC2A00000001100000020028001A42000A00000000133005006501000004000011046F3C00000A0A046F3B00000A2D090614283D00000A2C0C06722F000070733E00000A7A067B3F00000A193304170B2B29067B3F00000A173304160B2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A046F4100000A26036F4200000A6F4300000A0C1B0D031A176F4400000A26046F3C00000A0A1613043890000000072C15067B3F00000A1A331E046F4100000A26388C000000067B3F00000A183309046F4100000A262B7A072C101204284500000A284600000A13052B39067B3F00000A1B2E1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A067B4700000A7B5D0100041305046F4100000A26090203041105280A000006580D046F3C00000A0A110417581304046F3B00000A2D0C0614284800000A3A5CFFFFFF03166F4900000A036F4200000A6F4300000A1306030811065969176F4400000A2603096F4A00000A03110608591A6A5969176F4400000A26092A000000133004009703000005000011046F3C00000A0A046F3B00000A2D090614283D00000A2C0C06722F000070733E00000A7A067B3F00000A130E110E175945030000000B0000001D00000007000000110E1C2E0A2B161A0B2B2E190B2B2A067B4B00000A280E0000060B2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A03076F4900000A170C08030517280B000006580C067B4B00000A75130000020D092C10080902036F4C00000A580C38E802000007130F110F175945120000001A0000003B0000005700000057000000670000006F0200007D0000009F000000CF0000006F0200001F010000C50100003B0000003B0000000D020000330200005102000051020000110F1F7F3B66020000110F20FF0000003B5A020000385E020000046F4100000A2603067B4B00000AA5520000016F4D00000A081E580C3859020000046F4100000A260803066F4E00000A16280B000006580C383D020000080203042809000006580C382D020000046F4100000A26080306280C000006580C3817020000046F4100000A2603067B4B00000A742400001B6F4F00000A081F0C580C38F5010000046F4100000A261713101210067B4B00000A285000000A13040311042D03162B01176F4900000A0817580C38C5010000046F4100000A26067B4B00000AA50800000113051205285100000A1833091205285200000A130512057E32000004285300000A13061206285400000A6A13070311076F5500000A081E580C3875010000046F4100000A26067B4B00000A751F00000113081108393E01000011086F5600000A13090803110917280B000006580C16130A110A2D0772890000702B05728B000070130B11086F5700000A195F13111111175945030000000200000012000000220000002B2E110B728F000070285800000A130B2B1E110B7293000070285800000A130B2B0E110B7297000070285800000A130B0803110B17280B000006580C38CF000000046F4100000A26067B4B00000A750F000002130C110C39980000000803110C6F3800000616280B000006580C03110C6F3A00000628450000066F4F00000A081F0C580C3887000000046F4100000A26067B4B00000A750C000002130D110D2C53080203110D280D000006580C2B61046F4100000A2603067B4B00000AA5500000016F4A00000A081A580C2B43046F4100000A2603067B4B00000AA5560000016F5500000A081E580C2B25046F4100000A262B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A082A00133003003600000006000011170A283800000A036F5900000A0B042D0F02078E6917586F4A00000A061A580A02076F4F00000A06078E69580A02166F4900000A062A0000133002003A00000007000011037B4B00000A280F0000060A02066F510000066F4A00000A02066F4F0000066F4900000A02066F4E0000066F4F00000A1F09066F51000006582A0000133004006C00000008000011036F4200000A6F4300000A0A1A0B031A176F4400000A260703046F29000006282F00000616280B000006580B070203046F2B0000062809000006580B036F4200000A6F4300000A0C0306085969176F4400000A2603076F4A00000A030806591A6A5969176F4400000A26072A133001000701000009000011022C08026F5A00000A2B01140A06285B00000A0B0745130000000C000000140000000C000000020000000700000004000000040000000400000004000000040000001100000011000000110000000F0000000F0000000F0000000900000014000000070000002B121E2A1F102A182A1F092A1F0A2A172A1F102A0275130000022C0C0274130000026F600000062A0275540000012C031F112A02751F0000012C031F0B2A0275190000012D1802752400001B2D100275110000022D0802750B0000022C021B2A0275100000022C021D2A02750E0000022C031F0E2A02750D0000022C031F0D2A02750C0000022C031F0F2A02750F0000022C031F0C2A729D000070735C00000A7A0013300200660000000A0000110275110000020A062C02062A02750B0000022C151B02A5190000010B1201285D00000A734D0000062A0275190000012C151902A5190000010C1202285D00000A734D0000062A02752400001B2C0D1602742400001B734D0000062A72DB000070735C00000A7A1E02282500000A2A1E02282500000A2A46027B350000046F5E00000A6F4300000A2A13300300790000000B000011036F5F00000A162F012A036F5E00000A6F4300000A0A036F6000000A0B02042D077E570000042B057E560000046F6100000A2B080203042817000006036F5E00000A6F4300000A06590717596A32E5036F6200000A2C0C722F0000700673C40200067A02042D077E520000042B057E510000046F6100000A2A00000013300300E00200000C000011036F6200000A0A03281A0000060B042D0C020728860000066F6100000A0613171117175945120000001A000000330000008700000090000000990000006E020000A1000000C3000000E80000006E02000012010000950100004700000067000000D7010000FC010000170200003202000011171F7F3B65020000111720FF0000003B590200003833020000036F6300000A0C02088C5200000128880000066F6100000A2A0328190000060D020928880000066F6100000A2A032819000006283000000613040211048C0D00000228880000066F6100000A2A032819000006283500000613050211058C0E00000228880000066F6100000A2A02031628160000062A02031728160000062A020328180000062A031F0C6F6400000A1306021106733D0000068C1000000228880000066F6100000A2A036F6200000A16FE0116FE0113070211072D077E540000042B057E550000046F6100000A2A7E3200000413181218036F6500000A6C286600000A13080211088C0800000128880000066F6100000A2A03281A000006130903281A000006130A2000010000130B110A6F6700000A1759130C2B41110A110C6F6800000A130D110D131911191F6759450300000016000000160000000800000011191F6D2E0A2B0E110B1760130B2B06110B1860130B110C1759130C110C162FBA1109110B736900000A130E02110E28880000066F6100000A2A032819000006130F031F0C6F6400000A1310733C00000613121112110F6F3900000611121110733D0000066F3B0000061112131102111128880000066F6100000A2A036F6000000A26032819000006131302111328880000066F6100000A02031628160000062A036F6000000A13140211148C5000000128880000066F6100000A2A036F6500000A13150211158C5600000128880000066F6100000A2A036F6500000A13160211168C5600000128880000066F6100000A2A7217010070068C03000002284000000A036F5E00000A6F4300000A73C40200067A2A13300500A40000000D000011036F6000000A0A036F6200000A0B03066F6400000A0C071305110545060000005700000057000000310000001E000000570000000B000000110520800000002E4E2B4C061F1033470873230000068C0B0000020D2B41061F10333408736A00000A8C190000010D2B2E0816286B00000A0A068D590000011304081A11041606286C00000A161104734D0000060D2B080708734D0000060D020928880000066F6100000A2A133004001A0000000E000011026F6000000A0A02066F6D00000A0B0716061759736E00000A2A000013300200210000000F000011736F00000A0A2B0806076F7000000A26026F7100000A250B2DEE066F5600000A2A82032D0B7221000070732600000A7A0203283800000A737200000A281D0000062A72032D0B7253010070732600000A7A020316737300000A281B0000062A001B3003004000000010000011032D0B725F010070732600000A7A02037D35000004030C737400000A0A0603162816000006027E340000047D35000004060BDE0A082C06086F1300000ADC072A01100000020017001D34000A000000003A02176F1F00000602287500000A2A3E032C0B027B350000046F1300000A2A567E7600000A283800000A737200000A80340000042A4A027E340000047D3500000402282500000A2A360203737800000A7D360000042A360203736A00000A7D360000042A2202037D360000042A220F007B360000042A1E0273240000062A0000133001001500000011000011027B360000040A1200FE16190000016F5600000A2A46287900000A027B360000046F7A00000A2A1E027B370000042A2202037D370000042A1E027B380000042A2202037D380000042A1E02282500000A2A2202037D390000042A220F007B390000042A1E02732E0000062A1E027B390000042A46287C00000A027B390000046F7D00000A2A2202037D3A0000042A220F007B3A0000042A1E0273330000062A1E027B3A0000042A46287C00000A027B3A0000046F7D00000A2A1E027B3B0000042A2202037D3B0000042A1E027B3C0000042A2202037D3C0000042A1E02282500000A2AB6032D0B7253010070732600000A7A038E691F0C2E10726D0100707253010070737E00000A7A02037D3E0000042A000000133004009700000012000011021F0C8D590000017D3E0000040F017E32000004285300000A0B1201287F00000A690A061632080620FFFF0000311F72A301007020FFFF00008C600000017207020070288000000A738100000A7A027B3E00000416061F186320FF0000005DD29C027B3E00000417061F106320FF0000005DD29C027B3E00000418061E6320FF0000005DD29C027B3E000004190620FF0000005DD29C2A00133003003C00000013000011027B3E00000416911F1862027B3E00000417911F106260027B3E00000418911E6260027B3E0000041991600A7E320000040B1201066C288200000A2A82027B3E0000041A91027B3E0000041B911E6260027B3E0000041C911F1062602A52027B3E0000041D91027B3E0000041E911E62602A8E027B3E0000041F09911F1062027B3E0000041F0A911E6260027B3E0000041F0B91602A3A0F00FE16100000026F5600000A2A1E0228490000062A5A0F007B3E000004252D0B267E3D0000047B3E0000042A1E02733D0000062A133004005300000014000011027B3E0000040A062D0B7E3D0000047B3E0000040A1F188D620000010B160C160D2B2407080609911F105B28510300069D07080609911F105D28510300069D0818580C0917580D081F1832D707738300000A2A00133005001A000000150000111F0C8D590000010A027B3E0000041606161F0C286C00000A062A0000133002001700000016000011021200284A0000062C02062A723F020070738400000A7A00133004006E0000001700001102288500000A2D0A026F6700000A1F182E0D037E3D0000048110000002162A1F0C8D590000010A160B2B300207186F8600000A2000020000288700000A1202288800000A2D0D037E3D0000048110000002162A0607089C0718580B071F1832CB0306733D0000068110000002172A46288900000A027B3E0000046F8A00000A2A46168D59000001733D000006803D0000042A8E02282500000A042D0B7253010070732600000A7A02037D4000000402047D410000042A1E027B410000042A1E027B400000042A26027B4100000403912A26027B410000048E692A1E026F5600000A2A1E0228580000062A1E027B410000042A221602734D0000062A00133004004500000014000011027B410000040A1F188D620000010B160C160D2B2407080609911F105B285B0000069D07080609911F105D285B0000069D0818580C0917580D081F1832D707738300000A2A000000133005001A000000150000111F0C8D590000010A027B410000041606161F0C286C00000A062A000013300200170000000700001102120028590000062C02062A7289020070738400000A7A0013300400630000001700001102288500000A2C09037E3F00000451172A026F6700000A185B8D590000010A160B2B2C0207186F8600000A2000020000288700000A1202288800000A2D09037E3F00000451162A0607089C0718580B07026F6700000A32CB031606734D00000651172A46288900000A027B410000046F8A00000A2A52021F0A2F06021F3058D12A021F0A591F6158D12A46027B41000004740300001B6F8C00000A2A32027B410000046F8D00000A2A4A16168D59000001734D000006803F0000042A1B300300760000001800001102282500000A032D0B72C7020070732600000A7A02037D4D000004738E00000A0A036FA80200062C33036FA80200066F8F00000A0C2B11086F9000000A0B072C0706076F9100000A086F9200000A2DE7DE0A082C06086F1300000ADC02067D4F0000040203036FA302000673340300067D4E0000042A000001100000020035001D52000A000000001E027B4D0000042A2602031428790000062A0000133002005400000019000011289700000A6F9800000A027BCF0100043315027BCE0100041FFE330B02167DCE010004020A2B131673A10300060A06027BD00100047DD001000406027BD20100047DD101000406027BD40100047DD3010004062A1E02289A0300062A13300400800000001A000011027BCE0100040A06450200000002000000550000002B6702157DCE010004027BD10100042D0B7213000070732600000A7A02027BD1010004283A00000A7DD50100042B2D02027BD0010004027BD5010004027BD30100046F7C0000067DCD01000402177DCE010004172A02157DCE010004027BD50100046F3B00000A2CC6162A1E027BCD0100042A1A739900000A7A062A1E027BCD0100042A7A02282500000A02037DCE01000402289700000A6F9800000A7DCF0100042A133002001F000000190000111FFE73A10300060A06027DD001000406037DD201000406047DD4010004062A0013300200480000001B000011289700000A6F9800000A027B9B00000A3315027B9C00000A1FFE330B02167D9C00000A020A2B1316739D00000A0A06027B9E00000A7D9E00000A06027B9F00000A7DA000000A062A1E0228A100000A2A13300400950000001A000011027B9C00000A0A064502000000020000006A0000002B7C02157D9C00000A027BA000000A2D0B7213000070732600000A7A02D02F00001B282B00000A7DA200000A02027BA000000A283A00000A7DA300000A2B3202027B9E00000A027BA300000A027BA200000A6F7C000006A52F00001B7DA400000A02177D9C00000A172A02157D9C00000A027BA300000A6F3B00000A2CC1162A1E027BA400000A2A1A739900000A7A062A32027BA400000A8C2F00001B2A7A02282500000A02037D9C00000A02289700000A6F9800000A7D9B00000A2A000013300200180000001C0000111FFE73A500000A0A06027DA600000A06037DA700000A062A220203280100002B2A00000013300300840000001D00001102031200287F0000062C02062A036F3C00000A0B077B3F00000A0C08175945030000000F0000003200000006000000081C2E142B2C020304287E0000062A020304287D0000062A036F4100000A26027B4E00000404077B4B00000A6F3A0300062A036F4100000A2607725B000070077B3F00000A8C20000002284000000A733E00000A7A13300600290100001E000011036F4100000A0A067B3F00000A172E1C0672D9020070067B3F00000A8C20000002284000000A733E00000A7A027B4D0000046FA7020006046F200300060B0428410300060C027B4E000004046F360300060D38B7000000036F3C00000A0A067B3F00000A13081108182E1B11081B332B036F4100000A26067B4700000A7B5D01000413042B38036F4100000A26027B4E00000404096F3A0300062A036F4100000A26067211030070067B3F00000A8C20000002284000000A733E00000A7A082C081413050813062B27072C1E07110412056FA800000A2C1211052D03142B0711057B9601000413062B0614130514130602031106287C0000061307027B4E00000409041105110411076F38030006036F3B00000A393EFFFFFF7E50000004727B030070733E00000A7A000000133004003D0100001F000011036F4100000A0A067B3F00000A192E1C0672A3030070067B3F00000A8C20000002284000000A733E00000A7A0428420300060B0714FE010C73A900000A0D38DF000000036F3C00000A0A067B3F00000A13051105175945060000002D0000007A00000002000000170000007A0000003F0000002B780203082D03072B0114287E00000613043886000000036F4100000A26027B4E0000040407096F3E0300062A0203082D03072B0114287D00000613042B5E02031204287F0000062D1B036F4100000A0A0614284800000A2D03142B06067B4B00000A1304082D35027B4E0000040711046F3A03000613042B23036F4100000A260672D9030070067B3F00000A8C20000002284000000A733E00000A7A07110428430300060B0911046FAA00000A26036F3B00000A3916FFFFFF7E50000004722D040070733E00000A7A0000001B3004004C00000020000011036F3B00000A2D3D027B4F0000046F8F00000A0C2B1B086F9000000A0A06027B4D00000403046FAB00000A2C04170BDE19086F9200000A2DDDDE0A082C06086F1300000ADC041451162A072A0110000002001400273B000A00000000361902737902000673AC00000A2A3E19020304737A02000673AC00000A2A22190273AC00000A2A361702737902000673AC00000A2A22170273AC00000A2A00001330020014000000210000110228AD00000A0A1B06737902000673AC00000A2A361B02737902000673AC00000A2A221B0273AC00000A2A221C0273AE00000A2A03300200B0000000000000001673AF00000A80500000041A73AF00000A80510000041873AF00000A80520000041C73AF00000A80530000041C168C5300000173AE00000A80540000041C178C5300000173AE00000A80550000041973AF00000A80560000041773AF00000A80570000041C23000000000000F8FF8C5200000173AE00000A80580000041C23000000000000F07F8C5200000173AE00000A80590000041C23000000000000F0FF8C5200000173AE00000A805A0000042A7202282500000A032D0B72C702007073B000000A7A02037DB100000A2A1E027BB100000A2A2202036F0200002B2A0000133003002B000000220000110203D03500001B282B00000A6FB300000A0A06753500001B2D0A1201FE153500001B072A06A53500001B2A260203146FB300000A2A000000133004002500000023000011026FB400000A0A062D0B725304007073B500000A7A020606036FB600000A0428B700000A2A2202036F0300002B2A0000133003002B000000220000110203D03500001B282B00000A6FB900000A0A06753500001B2D0A1201FE153500001B072A06A53500001B2A260203146FB900000A2A000000133004002500000023000011026FB400000A0A062D0B727D040070732600000A7A020606036FBA00000A0428B700000A2A0000001B3005005F00000024000011026FB400000A0A062D0B727D040070732600000A7A026FBB00000A0B072D0B7291040070732600000A7A0706036FB600000A6FBC00000A0DDE2326FE1A0C086FBD00000A066FBE00000A066FBF00000A066FC000000A0873C70200067A092A00011C000000002A00103A00036D00000200002A00103D00202A0000011B3005009400000025000011026FBB00000A0A062D0B7291040070732600000A7A0604056FC100000A6F0100000A0B076F9200000A2D05141304DE61076F1200000A0C0228C200000A6FA50200062D25076F9200000A2C1D72A3040070036FBE00000A036FBF00000A036FC000000A73C50200067A081304DE2326FE1A0D096FBD00000A036FBE00000A036FBF00000A036FC000000A0973C70200067A11042A011C000000001500596E00036D00000200001500597100202A00000122020328C300000A2A320228C400000A73760000062A00001B3002006700000026000011022D0B72D5040070732600000A7A02753800001B0A062C1B066FC500000A16311006166FC600000A7B3F00000A1CFE012A162A026FC700000A0D2B13096FC800000A0B077B3F00000A1CFE010CDE16096F9200000A2DE5DE0A092C06096F1300000ADC162A082A000110000002003A001F59000A000000001B3002006700000026000011022D0B72D5040070732600000A7A02753800001B0A062C1B066FC500000A16311006166FC600000A7B3F00000A17FE012A162A026FC700000A0D2B13096FC800000A0B077B3F00000A17FE010CDE16096F9200000A2DE5DE0A092C06096F1300000ADC162A082A000110000002003A001F59000A0000000013300200BA00000027000011022D0B72D5040070732600000A7A02283A00000A0A066F3B00000A2D0E066F4100000A7B3F00000A172E02162A160B2B7C066F3C00000A0C087B3F00000A0D0917594505000000020000001C000000020000000F0000002E0000002B490717580B066F4100000A262B430717590B066F4100000A262B36072C0D0717590B066F4100000A262B26162A066F4100000A26072D1A032C0E03087B4700000A6FC900000A2C09172A066F4100000A26066F3B00000A3979FFFFFF162A1E02282500000A2A3603027BDE01000428850200062A1B3003005500000028000011140B73AA0300060C08037DDE01000402072D0D08FE06AB03000673CA00000A0B0728AF0000066FCB00000A0A066F9200000A2D03142B0F066FCC00000A1304120428CD00000A0DDE0A062C06066F1300000ADC092A0000000110000002002C001D49000A0000000022021428AF0000062A9A022D0B72D5040070732600000A7A02753800001B2D080273CE00000A1000020328B00000062A133002004800000029000011289700000A6F9800000A027BE10100043315027BE00100041FFE330B02167DE0010004020A2B071673B30300060A06027BE30100047DE201000406027BE50100047DE4010004062A1E0228AC0300062A133003008C0100002A000011027BE00100040A0645020000000500000050010000387001000002157DE001000402027BE2010004283A00000A7DE6010004027BE60100046F3B00000A3A48010000027BE60100046F4100000A7B3F00000A17403201000002167DE7010004381601000002027BE60100046F3C00000A7DE8010004027BE80100047B3F00000A0B0717594505000000050000004300000005000000240000006A00000038CC00000002257BE701000417587DE7010004027BE60100046F4100000A2638B900000002257BE701000417597DE7010004027BE60100046F4100000A26389A000000027BE7010004399F00000002257BE701000417597DE7010004027BE60100046F4100000A262B73027BE60100046F4100000A26027BE70100042D5F027BE40100042C18027BE4010004027BE80100047B4700000A6FC900000A2C3F02027BE80100047B4700000A027BE601000428BC00000673CF00000A7DDF01000402177DE0010004172A02157DE00100042B0C027BE6\
-0100046F4100000A26027BE60100046F3B00000A39DAFEFFFF162A1E027BDF0100042A1A739900000A7A062A32027BDF0100048C3F00001B2A7A02282500000A02037DE001000402289700000A6F9800000A7DE10100042A0000001330020018000000290000111FFE73B30300060A06027DE301000406037DE5010004062A1B3002006700000026000011022D0B72D5040070732600000A7A02753800001B0A062C1B066FC500000A16311006166FC600000A7B3F00000A19FE012A162A026FC700000A0D2B13096FC800000A0B077B3F00000A19FE010CDE16096F9200000A2DE5DE0A092C06096F1300000ADC162A082A000110000002003A001F59000A0000000022021428B30000062A9A022D0B72D5040070732600000A7A02753800001B2D080273CE00000A1000020328B40000062A13300200480000002B000011289700000A6F9800000A027BEB0100043315027BEA0100041FFE330B02167DEA010004020A2B071673BB0300060A06027BED0100047DEC01000406027BEF0100047DEE010004062A1E0228B40300062A133003000B0100001A000011027BEA0100040A0645030000000500000055000000BE00000038EB00000002157DEA01000402027BEC010004283A00000A7DF0010004027BF00100046F3B00000A3AC3000000027BF00100046F4100000A7B3F00000A192E2102027BEC0100047DE901000402177DEA010004172A02157DEA010004388F00000002167DF10100042B7602027BF00100046F3C00000A7DF2010004027BF20100047B3F00000A1A2E67027BEE0100042C13027BEE010004027BF10100046FD200000A2C2302027BF001000428BC0000067DE901000402187DEA010004172A02157DEA0100042B0B027BF001000428BD00000602257BF101000417587DF1010004027BF00100046F3B00000A397AFFFFFF162A1E027BE90100042A1A739900000A7A062A1E027BE90100042A7A02282500000A02037DEA01000402289700000A6F9800000A7DEB0100042A0013300200180000002B0000111FFE73BB0300060A06027DED01000406037DEF010004062A96022D0B72D5040070732600000A7A02753800001B2D080273CE00000A10000228B60000062A0000133002003C0000002C000011289700000A6F9800000A027BF50100043315027BF40100041FFE330B02167DF4010004020A2B071673C30300060A06027BF70100047DF6010004062A1E0228BC0300062A1B3003002A0200002D000011027BF40100040B07450900000005000000EC01000082000000EC010000DB000000EC0100006E010000EC010000BC01000038E701000002157DF4010004027BF601000428AA0000063AD0010000027BF601000428AB00000639E400000002027BF60100041428AF0000066FCB00000A7DFC01000402177DF401000438A600000002027BFC0100046FCC00000A7DF801000402027BF80100040C120228CD00000A7DF301000402187DF4010004170ADD7501000002177DF401000402027BF80100040D120328CD00000A28B50000066FD000000A7DFD01000402197DF40100042B3202027BFD0100046FD100000A7DF901000402027BF90100047DF3010004021A7DF4010004170ADD1C01000002197DF4010004027BFD0100046F9200000A2DC10228C5030006027BFC0100046F9200000A3A4AFFFFFF0228C403000638DC000000027BF601000428B100000639CC00000002027BF60100041428B30000066FD000000A7DFE010004021B7DF4010004389300000002027BFE0100046FD100000A7DFA01000402027BFA0100047DF3010004021C7DF4010004170ADD89000000021B7DF401000402027BFA01000428B50000066FD000000A7DFF010004021D7DF40100042B2F02027BFF0100046FD100000A7DFB01000402027BFB0100047DF3010004021E7DF4010004170ADE3B021D7DF4010004027BFF0100046F9200000A2DC40228C7030006027BFE0100046F9200000A3A5DFFFFFF0228C6030006160ADE070228C1030006DC062A0000411C00000400000000000000210200002102000007000000000000001E027BF30100042A1A739900000A7A001B300200980000002E000011027BF40100040A0617594504000000020000000200000002000000020000002B2B027BF40100040B071959450200000002000000020000002B09DE070228C5030006DCDE070228C4030006DC027BF40100040C081B594504000000010000000100000001000000010000002A027BF40100040D091D59450200000002000000020000002B09DE070228C7030006DCDE070228C6030006DC2A0134000002003A00023C00070000000002002100244500070000000002008500028700070000000002006C0024900007000000001E027BF30100042A7A02282500000A02037DF401000402289700000A6F9800000A7DF50100042A6E02157DF4010004027BFC0100042C0B027BFC0100046F1300000A2A6E02177DF4010004027BFD0100042C0B027BFD0100046F1300000A2A6E02157DF4010004027BFE0100042C0B027BFE0100046F1300000A2A6E021B7DF4010004027BFF0100042C0B027BFF0100046F1300000A2A0013300200110000002C0000111FFE73C30300060A06027DF7010004062A96022D0B72D5040070732600000A7A02753800001B2D080273CE00000A10000228B80000062A00133002003C0000002F000011289700000A6F9800000A027B020200043315027B010200041FFE330B02167D01020004020A2B071673CF0300060A06027B040200047D03020004062A1E0228C80300062A1B300200B500000030000011027B010200040B07450400000005000000230000008B00000071000000388600000002157D0102000402027B030200047D0002000402177D01020004170ADE7302157D0102000402027B0302000428B60000066FD000000A7D0602000402187D010200042B2F02027B060200046FD100000A7D0502000402027B050200047D0002000402197D01020004170ADE2502187D01020004027B060200046F9200000A2DC40228D0030006160ADE070228CD030006DC062A0000000110000004000000ACAC0007000000001E027B000200042A1A739900000A7A001B300200220000001A000011027B010200040A061859450200000001000000010000002ADE070228D0030006DC2A00000110000002001800021A0007000000001E027B000200042A7A02282500000A02037D0102000402289700000A6F9800000A7D020200042A6E02157D01020004027B060200042C0B027B060200046F1300000A2A0013300200110000002F0000111FFE73CF0300060A06027D04020004062A86022D07168D3A00001B2A02753800001B2D080273CE00000A10000228BA0000062A00133002003C00000031000011289700000A6F9800000A027B090200043315027B080200041FFE330B02167D08020004020A2B071673D80300060A06027B0B0200047D0A020004062A1E0228D10300062A1B3002007F00000030000011027B080200040B07450300000002000000590000003F0000002B5702157D0802000402027B0A020004283A00000A7D0C02000402177D080200042B2302027B0C02000428BC0000067D0702000402187D08020004170ADE2502177D08020004027B0C0200046F3B00000A2CD00228D9030006160ADE070228D6030006DC062A00011000000400000076760007000000001E027B070200042A1A739900000A7A001B300200220000001A000011027B080200040A061759450200000001000000010000002ADE070228D9030006DC2A00000110000002001800021A0007000000001E027B070200042A7A02282500000A02037D0802000402289700000A6F9800000A7D090200042A6E02157D08020004027B0C0200042C0B027B0C0200046F1300000A2A001330020011000000310000111FFE73D80300060A06027D0B020004062A000000133002003C00000032000011289700000A6F9800000A027B0F0200043315027B0E0200041FFE330B02167D0E020004020A2B071673E10300060A06027B110200047D10020004062A1E0228DA0300062A13300300D501000033000011027B0E0200040A06450600000005000000700000009F00000005010000310100004F01000038A901000002157D0E020004027B100200046F3B00000A3A9201000002167D1202000402027B100200046F4100000A7D13020004027B130200047B3F00000A0B0717594503000000280000003401000028000000071C402D01000002027B130200047D0D02000402177D0E020004172A02157D0E020004383201000002257B1202000417587D1202000402027B130200047D0D02000402187D0E020004172A02157D0E02000438AB00000002027B100200046F4100000A7D13020004027B130200047B3F00000A0C0817594504000000020000002E000000020000002E0000002B5802257B1202000417587D1202000402027B130200047D0D02000402197D0E020004172A02157D0E0200042B4802257B1202000417597D1202000402027B130200047D0D020004021A7D0E020004172A02157D0E0200042B1C02027B130200047D0D020004021B7D0E020004172A02157D0E020004027B100200046F3B00000A2D0C027B12020004163D3CFFFFFF027B120200041631367E5000000472E3040070733E00000A7A027B130200047221050070027B130200047B3F00000A8C20000002284000000A733E00000A7A162A1E027B0D0200042A1A739900000A7A062A1E027B0D0200042A7A02282500000A02037D0E02000402289700000A6F9800000A7D0F0200042A0000001330020011000000320000111FFE73E10300060A06027D11020004062A00000013300300C600000034000011026F3B00000A2C107E5000000472E3040070733E00000A7A026FD400000A160A026F4100000A0B077B3F00000A0C08175945030000000B000000680000000B000000081C3364026FD500000A2A0617580A2B30026F4100000A7B3F00000A0D0917594504000000020000000800000002000000080000002B0A0617580A2B040617590A026F3B00000A2D04061630C4061631107E5000000472E3040070733E00000A7A026FD500000A2A077221050070077B3F00000A8C20000002284000000A733E00000A7A000013300300A500000034000011026F3B00000A2C012A160A026F4100000A0B077B3F00000A0C0817594503000000050000005C00000005000000081C33582A0617580A2B30026F4100000A7B3F00000A0D0917594504000000020000000800000002000000080000002B0A0617580A2B040617590A026F3B00000A2D04061630C4061631107E5000000472E3040070733E00000A7A2A077221050070077B3F00000A8C20000002284000000A733E00000A7A32168D2200001B805E0000042A00001B300200640000001800001102282500000A032D0B72C7020070732600000A7A02037D67000004738E00000A0A036FBC0200062C33036FBC0200066F8F00000A0C2B11086F9000000A0B072C0706076F9100000A086F9200000A2DE7DE0A082C06086F1300000ADC02067D680000042A01100000020035001D52000A00000000133004003A00000035000011027B670000046FB10200060C08183313027B670000046FB302000673940200060A2B0673990200060A737400000A0B0207060328C2000006072A00001B300500B302000036000011052D0C037E530000046F6100000A2A04056F920200062C46027B670000046FB10200061305110545030000001A000000020000000E0000002B18177267050070738E0200067A1872BB050070738E0200067A037E530000046F6100000A2A027B680000046F8F00000A13062B2511066F9000000A0A06027B670000040512016FD600000A2C0C03076FD700000ADD2002000011066F9200000A2DD2DE0C11062C0711066F1300000ADC056F5A00000A0C086FD800000A2C160305740200000128880000066F6100000ADDE401000008285B00000A1307110745130000000A010000170100000A01000005000000FC00000029000000290000002900000029000000290000002900000029000000290000009B0000003F00000029000000FC00000017010000FC000000381201000003171308120805285000000A2D077E540000042B057E550000046F6100000ADD600100000305740400000128880000066F6100000ADD4A01000005A5520000010D0928D900000A2C0D037E580000046F6100000A2B3B0928DA00000A2C0D037E590000046F6100000A2B260928DB00000A2C0D037E5A0000046F6100000A2B1103098C5200000128880000066F6100000ADDEE00000005A56B0000011304110428DC00000A2C0D037E580000046F6100000A2B3E110428DD00000A2C0D037E590000046F6100000A2B28110428DE00000A2C0D037E5A0000046F6100000A2B120311048C6B00000128880000066F6100000ADD8D000000030528880000066F6100000ADE7F037E530000046F6100000ADE720575060000012C1002030405740600000128C3000006DE5A0575190000012D1005756C0000012D080575130000012C0E030528880000066F6100000ADE340575540000012C180305A5540000018C5400000128880000066F6100000ADE14020304080528C6000006DE0804056F93020006DC2A0041340000020000006B000000320000009D0000000C00000000000000020000005E0000004C020000AA0200000800000000000000133005006F00000037000011020528C70000060A056F0100000A0B07754400001B2C100203040607744400001B28C50000062A07751E0000012C100203040607741E00000128C40000062A030628820000066F6100000A2B0E020304076F1200000A28C2000006076F9200000A2DEA037E510000046F6100000A2A00033004004400000000000000030528840000066F6100000A2B21030E046FDF00000A28850000066F6100000A0203040E046FE000000A28C20000060E046F9200000A2DD6037E520000046F6100000A2A133004004C00000038000011030528840000066F6100000A2B290E046FE100000A0A03120028E200000A28860000066F6100000A020304120028E300000A28C20000060E046F9200000A2DCE037E520000046F6100000A2A1B300400D500000039000011020E0428C70000060A030628840000066F6100000A027B670000046FBB020006056F200300060B072D0C037E520000046F6100000A2A027B670000046FBB020006076FE400000A6F1E0300060C086FE500000A13052B5B11056FE600000A0D097B9A0100042D4B097B970100042C43097B970100040E046F6A0000061304097B990100042C11097B990100040E0411046F120300062D1B03097B9501000428870000066F6100000A020304110428C200000611056F9200000A2D9CDE0C11052C0711056F1300000ADC037E520000046F6100000A2A000000011000000200550068BD000C000000001B300200590000003A000011027B670000046FBB020006032D03142B06036F5A00000A6F1F0300060A062C31066FE700000A0D2B14096FE800000A0B1201287C0200062D04070CDE1A096F9200000A2DE4DE0A092C06096F1300000ADC7E5C0100042A082A00000001100000020027002047000A0000000013300400150000003B00001102030412006FE900000A0B05068C4B00001B51072A7205145104754B00001B2C0F020304A54B00001B056FEA00000A2A162A1E02282500000A2A1E0228EB00000A2A0000133002003900000021000011027B6C000004250A2C2D06722D06007028EC00000A2D1C06726B06007028EC00000A2D110672B506007028EC00000A2D062B04162A172A182A000000133002003A0000003C000011030A064503000000020000000E0000001A0000002B1802722D0600707D6C0000042A02726B0600707D6C0000042A0272B50600707D6C0000042A0000133002004F0000003D000011046F3C00000A0A0614283D00000A2D16067B3F00000A1C330D067B4B00000A754A0000012D0905FE1508000001162A066F4E00000A0528D60000062D0905FE1508000001162A046F4100000A26172A00133005001B0000003E00001105178D2200001B0A0616020428D70000062888000006A20651172A001B300500420000003F000011030272B5060070284500000A208F00000028ED00000A8108000001DE0C2603FE1508000001160ADE1703285100000A18330C0303285200000A8108000001172A062A000001100000000000001D1D000C2A000001860F01285100000A1833090F01285200000A10010F01027B6C00000428EE00000A2A4A02726B0600707D6C0000040228EF00000A2A000000133002004F0000003D000011046F3C00000A0A0614283D00000A2D16067B3F00000A1C330D067B4B00000A754A0000012D0905FE1508000001162A066F4E00000A0528DB0000062D0905FE1508000001162A046F4100000A26172A00133005001B0000003E00001105178D2200001B0A0616020428DC0000062888000006A20651172A0013300400970000004000001102288500000A2C0903FE1508000001162A7E77000004026FF000000A0A066FF100000A2C20066FF200000A176FF300000A6FF400000A1D284500000A120128F500000A2D0903FE1508000001162A07210028D3ED7CC7FFFF300D037EF600000A81080000012B2E072100DC1FD277E60000320D037EF700000A81080000012B15037E760000040C1202076C286600000A8108000001172A00133003003F000000410000110F01285100000A1833090F01285200000A10010F017E76000004285300000A0A1200285400000A6A0B7207070070078C560000017215070070288000000A2AAE20B207000017171616161617733500000A8076000004721B0700702008030000736900000A80770000042A1E0228EF00000A2A7202282500000A032D0B72C702007073B000000A7A02037DF800000A2A1E027BF800000A2A1B3003004C00000042000011026FF900000A0A062D0B7267070070732600000A7A026FFA00000A0B072D0B7275070070732600000A7A0706036FFB00000A046FFC00000ADE1126FE1A0C086FBD00000A08738B0200067A2A011C000000002A00103A00036400000200002A00103D000E2A0000011B3003004D00000043000011026FF900000A0A062D0B7267070070732600000A7A026FFA00000A0B072D0B7275070070732600000A7A0706036FFB00000A6FFD00000A0DDE1126FE1A0C086FBD00000A08738B0200067A092A000000011C000000002A00103A00036400000200002A00103D000E2A00000122020328FE00000A2A1A283800000A2A320228FF00000A73C00000062A22021428F30000062A8E02282500000A0203288500000A2D09031728F50000062B057E2D00000A7D790000042A1E027B790000042A2602031728F60000062A033003004F0000000000000002288500000A2C14042C0B7289070070730001000A7A7E2D00000A2A0272B307007072890000706F0101000A1000020328F70000062D1672B70700700272D1070070280201000A730001000A7A022A0013300400B80000004400001102288500000A2C02162A032C4302178D6200000113071107161F2E9D11076F0301000A0A0613081613092B1A110811099A0B071628F70000062D05161306DE75110917581309110911088E6932DE172A0228F80000062C02162A160C160D026F6700000A13042B4602096F6800000A1305082C0C11051F30320611051F39312A11051F61320611051F7A311811051F41320611051F5A310C11051F5F2E0611051F243304170C2B02162A0917580D09110432B5172A11062A13300400460400004500001102250A393C040000FE137E140200043A1E0300001F3D730401000A2572F907007016280501000A25720308007017280501000A25720F08007018280501000A25721908007019280501000A2572250800701A280501000A25722F0800701B280501000A25723B0800701C280501000A25724D0800701D280501000A25725F0800701E280501000A25726F0800701F09280501000A25727D0800701F0A280501000A2572830800701F0B280501000A25728D0800701F0C280501000A25729D0800701F0D280501000A2572A50800701F0E280501000A2572B70800701F0F280501000A2572BD0800701F10280501000A2572C30800701F11280501000A2572D90800701F12280501000A2572E10800701F13280501000A2572EF0800701F14280501000A2572FD0800701F15280501000A2572070900701F16280501000A2572130900701F17280501000A25721B0900701F18280501000A2572290900701F19280501000A2572310900701F1A280501000A25723B0900701F1B280501000A2572470900701F1C280501000A2572510900701F1D280501000A2572630900701F1E280501000A2572730900701F1F280501000A25727D0900701F20280501000A2572870900701F21280501000A2572930900701F22280501000A25729F0900701F23280501000A2572AD0900701F24280501000A2572B70900701F25280501000A2572C50900701F26280501000A2572D50900701F27280501000A2572E10900701F28280501000A2572ED0900701F29280501000A2572F70900701F2A280501000A25720D0A00701F2B280501000A25721B0A00701F2C280501000A2572230A00701F2D280501000A2572370A00701F2E280501000A2572410A00701F2F280501000A25724F0A00701F30280501000A25725F0A00701F31280501000A25726F0A00701F32280501000A2572830A00701F33280501000A2572910A00701F34280501000A25729D0A00701F35280501000A2572AB0A00701F36280501000A2572B70A00701F37280501000A2572D10A00701F38280501000A2572DF0A00701F39280501000A2572F30A00701F3A280501000A2572050B00701F3B280501000A25720D0B00701F3C280501000AFE138014020004FE137E14020004061201280601000A39FE00000007453D000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000002B02172A162A1E0273F30000062A42022D067E2D00000A2A027B790000042A1E0273F30000062A9A027B79000004288500000A2C0C0472F90700706F0701000A2A04027B790000046F0701000A2A1E027B790000042A000013300300450000004600001103752E0000020A062D080203280801000A2A027B79000004288500000A2C0F067B79000004288500000A2C02172A280901000A027B79000004067B790000046F0A01000A2A46280901000A027B790000046F0B01000A2A320273AA02000628EE0000062A4A02032D0773AA0200062B010328EE0000062AF602032D0773AA0200062B010328EE000006042D0B72190B007073B000000A7A02048E698D4A0000017D7B00000404027B7B000004048E69280C01000A2A000000133002003C00000047000011289700000A6F9800000A027B1B0200043315027B1A0200041FFE330B02167D1A020004020A2B131673E90300060A06027B1C0200047D1C020004062A1E0228E20300062A1B3003001D01000030000011027B1A0200040B07450600000005000000EB00000067000000AA000000C7000000E400000038E600000002157D1A020004027B1C0200047B7B0000042C7B02177D1A02000402027B1C0200047B7B0000047D1E02000402167D1F0200042B4202027B1E020004027B1F0200049A7D1D02000402027B1D0200047D1902000402187D1A020004170ADD8F00000002177D1A02000402027B1F02000417587D1F020004027B1F020004027B1E0200048E6932AE0228EA0300062B570272330B00707D1902000402197D1A020004170ADE4C02157D1A0200040272550B00707D19020004021A7D1A020004170ADE2F02157D1A0200040272690B00707D19020004021B7D1A020004170ADE1202157D1A020004160ADE070228E7030006DC062A000000411C00000400000000000000140100001401000007000000000000001E027B190200042A1A739900000A7A00133002001F0000001A000011027B1A0200040A061759450200000001000000010000002A0228EA0300062A1E027B190200042A7A02282500000A02037D1A02000402289700000A6F9800000A7D1B0200042A2202157D1A0200042A001330020011000000470000111FFE73E90300060A06027D1C020004062A000000133002003C00000048000011289700000A6F9800000A027B220200043315027B210200041FFE330B02167D21020004020A2B131673F20300060A06027B230200047D23020004062A1E0228EB0300062A133002003B0000001A000011027B210200040A064502000000020000001D0000002B2202157D210200040272810B00707D2002000402177D21020004172A02157D21020004162A1E027B200200042A1A739900000A7A062A1E027B200200042A7A02282500000A02037D2102000402289700000A6F9800000A7D220200042A001330020011000000480000111FFE73F20300060A06027D23020004062A320228FF00000A73080100062A7202282500000A032D0B72C7020070732600000A7A02037D7C0000042A1E027B7D0000042A2202037D7D0000042A1B3003002800000049000011730F01000A0A020306280C010006066F1001000A6F5600000A0BDE0A062C06066F1300000ADC072A0110000002000600161C000A000000001B300400E70200004A000011032D0B7213000070732600000A7A027B7C0000046FB50200060A160B160C160D036FC700000A1308389F02000011086FC800000A130411047B3F00000A1309110945070000004C02000080010000BB0100000500000040000000E0010000650000003847020000082C13041F2C6F1101000A062C080204092814010006072C11062C0C0204091758250D2814010006160B041F5B6F1101000A170B160C382A020000072C04160B2B0F062C0C0204091759250D2814010006041F5D6F1101000A170C3805020000082C13041F2C6F1101000A062C080204092814010006072C11062C0C0204091758250D2814010006160B11047B4B00000A2C0E11047B4B00000A6F5A00000A2B011413051105285B00000A13061106130A110A4510000000440000005100000044000000020000005100000029000000290000002900000029000000290000002900000029000000290000002900000029000000290000002B4F0417130B120B11047B4B00000A285000000A2D0772030800702B05720F0800706F0701000A2B5311056FD800000A2D1F020411047B4B00000A11066F0F0100062B380472F90700706F0701000A2B2B11047B4B00000A750D00001B130711072C0B110702046F0500000A2B0E020411047B4B00000A6F0D010006170C38EA000000082C13041F2C6F1101000A062C080204092814010006072C11062C0C0204091758250D2814010006160B041F7B6F1101000A170B160C38AF000000072C04160B2B0F062C0C0204091759250D2814010006041F7D6F1101000A170C388A000000082C13\
-041F2C6F1101000A062C080204092814010006072C11062C0C0204091758250D2814010006160B020411047B4700000A7B5D0100046F0E010006062C200472B30700706F0701000A041F3A6F1101000A0472B30700706F0701000A2B08041F3A6F1101000A160C2B1E1104725B00007011047B3F00000A8C20000002284000000A733E00000A7A11086F9200000A3A55FDFFFFDE0C11082C0711086F1300000ADC2A00411C00000200000028000000B2020000DA0200000C0000000000000013300400340000004B0000110475540000012C1D020304A5540000010A1200281201000A8C560000011F0B6F0F0100062A020302046F150100066F130100062A3E020302046F150100066F130100062A13300300480200004C000011160A05130411041959450D00000024000000D30100001101000005000000B20000007B010000D100000097010000F0000000B501000030010000640000004300000038CE01000004A55900000113051205728B000070284500000A281301000A0B38C0010000171306120604285000000A2D07728D0B00702B0572910B00700B38A1010000170A04A52200000113071207728B000070284500000A281401000A0B388001000004A5520000010C0828D900000A2C0802036F120100062A08281501000A2C180828DB00000A2C0802036F100100062A02036F110100062A120272950B0070284500000A281601000A0B383201000004A57500000113081208728B000070284500000A281701000A0B381301000004A55000000113091209728B000070284500000A281801000A0B38F4000000170A04A556000001130A120A728B000070284500000A281901000A0B38D300000004A576000001130B120B728B000070284500000A281A01000A0B38B400000004A56B0000010D0928DC00000A2C0802036F120100062A09281B01000A2C180928DE00000A2C0802036F100100062A02036F110100062A120372950B0070284500000A281C01000A0B2B6904A560000001130C120C728B000070284500000A281D01000A0B2B4D170A04A577000001130D120D728B000070284500000A281E01000A0B2B2F170A04A578000001130E120E728B000070284500000A281F01000A0B2B1104288800000672990B0070733E00000A7A062C170204282001000A6F180100062C090203076F130100062A03076F0701000A2A320372F90700706F0701000A2A320372F90700706F0701000A2A320372F90700706F0701000A2A00133005002C0100004D000011160A046F6700000A0B031F226F1101000A060C38F000000004086F6800000A0D091F1F311F091F7F2F1A027B7D0000042C05091F3C2E0D091F222E08091F5C40C0000000080631100304060806596F8600000A6F0701000A0817580A09130411041E5945060000001D00000051000000370000005E0000002A0000004400000011041F222E0611041F5C3352031F5C6F1101000A03096F1101000A2B670372C30B00706F0701000A2B5A0372C90B00706F0701000A2B4D0372CF0B00706F0701000A2B400372D50B00706F0701000A2B330372DB0B00706F0701000A2B260372E10B00706F0701000A03040828530300061305120572E70B0070282101000A6F0701000A0817580C08073F09FFFFFF070631100304060706596F8600000A6F0701000A031F226F1101000A2A133002002F0000001A00001103027B7C0000046FB90200066F0701000A160A2B1503027B7C0000046FB70200066F0701000A0617580A060432E72A720375020000012C0D0203740200000128160100062A0328AD00000A2A13300400BD0000004E000011036F5A00000A0A027B7C0000046FBB020006066F220300060B06D07A000001282B00000A176F2201000A2C700603282301000A2D67060328170100060D098E698D4A00000113041613052B3A070911059A110411058F4A0000016F2401000A2C0C110411059A288500000A2C13110411050911059A72ED0B00706F2501000AA21105175813051105098E6932BF72F10B00701104282601000A0C2B1F070312026F2401000A2C0808288500000A2C0C0372ED0B00706F2501000A0C082A00000013300400A40000004F00001103282701000A0A02282801000A0B076F2901000A732A01000A0C06166A331E080302284500000A282B01000A74020000016F2C01000A086F2D01000A2A076F2901000A17590D2B3A07096F2E01000A282701000A1304092D061104166A2E1F0611045F11043317061104590A0807096F2E01000A75020000016F2C01000A0917590D09162FC206166A2E12080206282F01000A75020000016F2C01000A086F2D01000A2A1B3002001C0000003F00001103283001000A6C283101000A03283201000A0ADE0526170ADE00062A0110000000000000151500050100000122020328080100062A00000013300800D20000005000001103288500000A2C02162A042D07733301000A1002037E89000004176F3401000A0A06169A0B160C160D388B000000170C091631160772F70B0070285800000A0B0706099A285800000A0B04076F3501000A2D627E8A000004076F3601000A2D5504076F3701000A092D2E052C1F0272FB0B00700772F70B00700616068E691759283801000A6F3901000A2B0C02723B0C0070076F3A01000A052C0E02724D0C0070076F3B01000A2B0C0272BB0C0070076F3A01000A0917580D09068E6917593F6AFFFFFF052C09082C06026F3C01000A082A3203720F0D00706F0701000A2A52031F2D6F1101000A0372170D00706F0701000A2A320372170D00706F0701000A2ACE0475080000012C0D0304A50800000128200100062A04751F0000012C0D0304741F00000128210100062A020304280D0100062A6A041628F70000062C0803046F0701000A2A020304280E0100062A13300600C3000000510000110F01285100000A2D7F0272290D00701D8D010000010C08160F01283D01000A8C50000001A208170F01283E01000A17598C50000001A208180F01283F01000A8C50000001A208190F01284001000A8C50000001A2081A0F01284101000A8C50000001A2081B0F01284201000A8C50000001A2081C0F01284301000A8C50000001A2086F4401000A2A0F01285100000A1833090F01285200000A10010F017E88000004285300000A0A1200285400000A6A0B02727F0D0070078C560000016F3A01000A2A2602031628220100062A00000013300500FA00000052000011032D0C0272F90700706F0701000A2A036F5600000A0A06288500000A2C06729B0D00700A042D0772890000702B05728B0000700B036F5700000A195F130511051759450300000002000000100000001E0000002B2807728F000070285800000A0B2B1A077293000070285800000A0B2B0C077297000070285800000A0B021F2F6F1101000A066F6700000A0C160D0913042B420611046F6800000A130611061F2F332C020609110409596F8600000A6F0701000A110417580D021F5C6F1101000A020611046F6800000A6F1101000A11041758130411040832B90206090809596F8600000A6F0701000A021F2F6F1101000A02076F0701000A2A0000133008008D0000005300001120B207000017171616161617733500000A8088000004178D620000010A06161F2E9D0680890000041F0A8D4A0000010B071672A50D0070A2071772B50D0070A2071872C70D0070A2071972D30D0070A2071A72E10D0070A2071B72F10D0070A2071C72030E0070A2071D72170E0070A2071E72230E0070A2071F0972310E0070A207734501000A808A0000042A00000013300400460100004500001102250A393C010000FE137E150200043AD50000001F10730401000A25723F0E007016280501000A2572490E007017280501000A2572530E007018280501000A2572650E007019280501000A25726B0E00701A280501000A2572730E00701B280501000A25727F0E00701C280501000A2572850E00701D280501000A25728D0E00701E280501000A2572990E00701F09280501000A2572A90E00701F0A280501000A2572B70E00701F0B280501000A2572C10E00701F0C280501000A2572CB0E00701F0D280501000A2572D50400701F0E280501000A2572D70E00701F0F280501000AFE138015020004FE137E15020004061201280601000A2C4A074510000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000002B02172A162A000013300400460100004500001102250A393C010000FE137E160200043AD50000001F10730401000A2572DF0E007016280501000A2572E90E007017280501000A2572FB0E007018280501000A2572010F007019280501000A2572070F00701A280501000A2572130F00701B280501000A25721D0F00701C280501000A2572270F00701D280501000A25722D0F00701E280501000A25723B0F00701F09280501000A25723F0F00701F0A280501000A25724B0F00701F0B280501000A2572510F00701F0C280501000A25725D0F00701F0D280501000A2572630F00701F0E280501000A25726F0F00701F0F280501000AFE138016020004FE137E16020004061201280601000A2C4A074510000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000002B02172A162A000013300400FE0800004500001102250A39F0080000FE137E170200043A980600002081000000730401000A2572750F007016280501000A2572790F007017280501000A2572830F007018280501000A25723F0E007019280501000A2572930F00701A280501000A25729B0F00701B280501000A2572A50F00701C280501000A2572AF0F00701D280501000A2572B70F00701E280501000A2572990E00701F09280501000A2572BD0F00701F0A280501000A2572C50F00701F0B280501000A2572CD0F00701F0C280501000A2572D10F00701F0D280501000A2572DB0F00701F0E280501000A2572E50F00701F0F280501000A2572F30F00701F10280501000A2572290900701F11280501000A2572D70E00701F12280501000A2572FD0F00701F13280501000A2572091000701F14280501000A2572850E00701F15280501000A2572191000701F16280501000A2572D50400701F17280501000A2572251000701F18280501000A2572331000701F19280501000A25723D1000701F1A280501000A2572451000701F1B280501000A2572511000701F1C280501000A2572551000701F1D280501000A25725D1000701F1E280501000A2572691000701F1F280501000A25727F1000701F20280501000A25728F0000701F21280501000A2572891000701F22280501000A2572991000701F23280501000A2572A31000701F24280501000A2572A91000701F25280501000A2572AF1000701F26280501000A2572B91000701F27280501000A2572BD1000701F28280501000A2572C91000701F29280501000A2572D71000701F2A280501000A2572DF1000701F2B280501000A2572E71000701F2C280501000A2572ED1000701F2D280501000A2572F11000701F2E280501000A2572011100701F2F280501000A2572111100701F30280501000A25721F1100701F31280501000A2572351100701F32280501000A2572650E00701F33280501000A25723B1100701F34280501000A2572491100701F35280501000A2572511100701F36280501000A2572611100701F37280501000A2572691100701F38280501000A2572771100701F39280501000A2572851100701F3A280501000A25728B1100701F3B280501000A2572911100701F3C280501000A2572971100701F3D280501000A25729D1100701F3E280501000A2572A31100701F3F280501000A2572A91100701F40280501000A2572B71100701F41280501000A25727F0E00701F42280501000A2572C51100701F43280501000A2572CD1100701F44280501000A2572D51100701F45280501000A25723B0F00701F46280501000A2572DF1100701F47280501000A2572E71100701F48280501000A2572F71100701F49280501000A2572071200701F4A280501000A2572171200701F4B280501000A2572FB0E00701F4C280501000A25721D1200701F4D280501000A2572010F00701F4E280501000A2572251200701F4F280501000A2572270F00701F50280501000A25722B1200701F51280501000A2572351200701F52280501000A25723B1200701F53280501000A2572411200701F54280501000A25726B0E00701F55280501000A2572E90E00701F56280501000A2572511200701F57280501000A25723F0F00701F58280501000A25724B0F00701F59280501000A25725D0F00701F5A280501000A2572630F00701F5B280501000A2572510F00701F5C280501000A25726F0F00701F5D280501000A25725D1200701F5E280501000A25726B1200701F5F280501000A25727D1200701F60280501000A25728F1200701F61280501000A2572A90E00701F62280501000A25728D0E00701F63280501000A2572991200701F64280501000A2572A51200701F65280501000A2572B31200701F66280501000A2572BF1200701F67280501000A25722D0F00701F68280501000A2572D11200701F69280501000A2572DF1200701F6A280501000A2572F11200701F6B280501000A2572FF1200701F6C280501000A2572111300701F6D280501000A2572070F00701F6E280501000A25721F1300701F6F280501000A25722F1300701F70280501000A2572CB0E00701F71280501000A2572530E00701F72280501000A2572B70E00701F73280501000A25723D1300701F74280501000A2572491300701F75280501000A25725B1300701F76280501000A2572490E00701F77280501000A2572DF0E00701F78280501000A2572730E00701F79280501000A2572691300701F7A280501000A2572130F00701F7B280501000A25721D0F00701F7C280501000A25727B1300701F7D280501000A2572C10E00701F7E280501000A2572891300701F7F280501000A25729B1300702080000000280501000AFE138017020004FE137E17020004061201280601000A3938020000074581000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000400000004000000040000000400000004000000070000000700000007000000070000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000001000000010000000100000001000000010000000100000001000000010000000100000001000000013000000130000001300000013000000130000001300000013000000130000001300000013000000130000001300000013000000130000001300000016000000160000001600000016000000160000001C0000001C0000001C0000002200000022000000280000002800000028000000280000002800000028000000280000002800000028000000280000002B2C172A1F112A1F182A192A1E2A1A2A1F202A1F402A20000200002A20020100002A20800100002A20000100002A20008000002A1E02282500000A2A9E0273580200067D9A00000402282500000A032D0B72C7020070732600000A7A02037D990000042A1E027B9B0000042A2202037D9B0000042A1E027B9C0000042A2202037D9C0000042A1E027B9D0000042A2202037D9D0000042A32027B9A0000046F550200062A00001B3003002800000049000011730F01000A0A0203062835010006066F1001000A6F5600000A0BDE0A062C06066F1300000ADC072A0110000002000600161C000A0000000013300600BB02000054000011032D0B7213000070732600000A7A03284701000A0A140B3893020000066F4801000A0C087B4901000A130A110A1759450500000005000000C4010000050000004B020000070200003846020000087B4A01000A0D087B4901000A1304066F4B01000A26066F4801000A0C73650200060B027B9A00000412037B5F0100046F510200062D2012037B5F010004288500000A2C44027B9A0000047E2D00000A6F500200062D32027B9A00000412037B5F010004166F5302000613050712037B5D010004110512037B5F010004737A0200066F5C0200062B1B0712037B5E01000412037B5F0100046F5E02000607096F5C020006027B9A000004076F4D02000614130638DF00000011062D1A027B9B0000042D0B734C01000A130B110B2B05734D01000A1306087B4A01000A1307027B9A00000412077B5E01000412077B5F0100046F56020006130811082C6B110812077B5E010004284E01000A2C18120712077B5D010004110812077B5F01000417287B020006027B9A00000412077B5F0100046F510200062D2F12077B5F010004288500000A2C12027B9A0000047E2D00000A6F500200062C0F07110812077B5F0100046F5E020006066F4B01000A26066F4801000A0C1106110708252D06267E400100046F4F01000A066F4B01000A26066F4801000A0C066F5001000A2D0C087B4901000A1A3B0DFFFFFF02041104091106072836010006140B38A3000000027B9A0000046F4C0200062C26020418027B9A0000046F4E0200066F5B02000614142836010006027B9A0000046F4F02000626066F4B01000A26066F4801000A0C2B60087B5101000A751B00001B130911092C0B110902046F5201000A2B1804086F5301000A027B9D000004027B9B000004283C010006066F4B01000A26066F4801000A0C2B1C08725B000070087B4901000A8C5B000002284000000A735401000A7A066F5001000A3962FDFFFF2A001B3006006A010000550000110F037B5D010004288500000A2C012A027B9A0000040F037B5E0100040F037B5F0100046F56020006252D08260F037B5E0100040A031F3C6F1101000A04183308031F2F6F1101000A06288500000A2D100203062839010006031F3A6F1101000A02030F037B5D01000428390100060E052C3F0E056F6302000613042B1D11046F5501000A0B02031201285601000A1201285701000A283701000611046F9200000A2DDADE0C11042C0711046F1300000ADC0E042C790E046F5801000A13052B5711056F5901000A0C027B9A0000041202285A01000A7B5E0100041202285A01000A7B5F0100046F56020006252D0D261202285A01000A7B5E0100040D0203091202285A01000A7B5D0100041202285B01000A283801000611056F9200000A2DA0DE0C11052C0711056F1300000ADC027B9B0000042D1404193310031F206F1101000A031F2F6F1101000A031F3E6F1101000A027B9B0000042C0F0419330B02031805141428360100062A0000011C000002007B002AA5000C000000000200BE006422010C00000000033004005800000000000000031F206F1101000A020372A7130070283901000604288500000A2D10031F3A6F1101000A0203042839010006031F3D6F1101000A031F226F1101000A0305027B9D000004027B9B000004283F010006031F226F1101000A2A13300400C700000056000011031F206F1101000A04288500000A2D100203042839010006031F3A6F1101000A02030528390100060E047B5101000A751B00001B0A062C03142B070E046F5301000A0B062D2607288500000A2C1E02282F0100060C0845030000000200000003000000050000002B032A050B031F3D6F1101000A031F226F1101000A0E047B4901000A0D091B3322062C0A0602036F5201000A2B290307027B9D000004027B9B000004283F0100062B140E04725B0000700E04284000000A735401000A7A031F226F1101000A2A0013300500B401000057000011160A046F6700000A0B060C388801000004086F6800000A0D091F613208091F7A3E6F010000091F413208091F5A3E62010000091F5F3B5A0100000920C0000000320B0920D60000003E470100000920D8000000320B0920F60000003E340100000920F8000000320B0920FF0200003E21010000092070030000320B09207D0300003E0E01000009207F030000320B0920FF1F00003EFB00000009200C200000320B09200D2000003EE8000000092070200000320B09208F2100003ED50000000920002C0000320B0920EF2F00003EC2000000092001300000320B0920FFD700003EAF000000092000F90000320B0920CFFD00003E9C0000000920F0FD0000320B0920FDFF00003E890000000816313C091F303205091F39317B091F2D2E76091F2E2E710920B70000002E69092000030000320809206F030000315909203F20000032080920402000003149080631100304060806596F8600000A6F0701000A0817580A0372B31300706F0701000A03040828530300061304120472E70B0070282101000A6F0701000A0372B91300706F0701000A0817580C08073F71FEFFFF070631100304060706596F8600000A6F0701000A2A2A02031616283C0100062A2A02030416283C0100062A0000133005002301000058000011160A036F6700000A0B060C38F700000003086F6800000A0D09130611061F0D2E4211061F262E3011061F3C59450300000002000000350000000E0000002B3372BD1300701304389800000072C71300701304388C00000072D11300701304388000000005399A0000007E2D00000A13042B71091F202F0A091F0A2E05091F093335042C05091F7F2F2D091F7F32080920840000003120092086000000320809209F00000031100920D0FD000032550920EFFD0000304D03082853030006130572DD130070120572E5130070284500000A281801000A1F3B8C62000001288000000A1304080631100203060806596F8600000A6F0701000A0817580A0211046F0701000A0817580C08073F02FFFFFF070631100203060706596F8600000A6F0701000A2A2A02031616283F0100062A2A02030416283F0100062A000000133005003A0100005800001103288500000A2C012A160A036F6700000A0B060C380501000003086F6800000A0D09130611061F222E5111061F26594502000000360000004800000011061F3C59450300000002000000410000000E0000002B3F72BD1300701304389A000000053AB400000072C71300701304388800000072D113007013042B7F72E913007013042B7605399000000072F713007013042B67091F203235042C05091F7F2F2D091F7F32080920840000003120092086000000320809209F00000031100920D0FD000032550920EFFD0000304D03082853030006130572DD130070120572E5130070284500000A281801000A1F3B8C62000001288000000A1304080631100203060806596F8600000A6F0701000A0817580A0211046F0701000A0817580C08073FF4FEFFFF070631100203060706596F8600000A6F0701000A2A1E027BA60000042A2202037DA60000042A1E027BA70000042A2202037DA70000042A133002003C00000059000011289700000A6F9800000A027B260200043315027B250200041FFE330B02167D25020004020A2B131673FA0300060A06027B270200047D27020004062A1E0228F30300062A1B300200C200000030000011027B250200040B074504000000050000002B000000980000007E000000389300000002157D25020004027B270200047BA50000042D1902147D2402000402177D25020004170ADE7802157D2502000402027B270200047BA50000046F5C01000A7D2902000402187D250200042B3402027B290200046F5D01000A7D2802000402027B280200046F5600000A7D2402000402197D25020004170ADE2502187D25020004027B290200046F9200000A2DBF0228FB030006160ADE070228F8030006DC062A00000110000004000000B9B90007000000001E027B240200042A1A739900000A7A001B300200220000001A000011027B250200040A061859450200000001000000010000002ADE070228FB030006DC2A00000110000002001800021A0007000000001E027B240200042A7A02282500000A02037D2502000402289700000A6F9800000A7D260200042A6E02157D25020004027B290200042C0B027B290200046F1300000A2A001330020011000000590000111FFE73FA0300060A06027D27020004062A0000001B300200610000005A000011032D0802147DA50000042A02735E01000A7DA5000004036F0D01000A0B2B18076F0E01000A0A027BA50000040673610100066F5F01000A076F9200000A2DE0DE0A072C06076F1300000ADC027BA50000046F6001000A172F0702147DA50000042A0000000110000002001D002441000A0000000032027BA40000046FD80100062A32027BA40000046FD90100062A32027BA40000046FDA0100062A001B300500090100005B000011027BA30000046F55020006140A046F6101000A2B7B046F6201000A0D091F262E45091F3C33630203046FDB010006285601000602030406284F0100060B061428620100062C0D071428630100062C0F070A2B0B070628620100062C02140A046F6101000A2B2A0203046FDB01000628560100060203020428580100062856010006046F6101000A2B07046F6301000A26046F6401000A397AFFFFFF0203046FDB0100062856010006027BA30000046F4C0200062C2E027BA60000042C262B17027BA30000046F4F02000626037E410100046F6501000A027BA30000046F4C0200062DDCDE2326FE1A0C086FBD00000A046FDA010006046FD9010006046FD80100060873C70200067A2A000000011C000000000B00DAE500036D00000200000B00DAE800202A00000113300500E80100005C000011046F6301000A1F3C2E1D7205140070046FDA010006046FD9010006046FD801000673C50200067A046F6401000A2C1002031F3C286601000A2856010006142A020428500100060A0614286701000A2C530228470100062C42051428630100062C39067B5101000A75590000020B072C2A076F3A020006723314007028EC00000A2C18067B4901000A067B4A01000A076F3E020006736801000A0A03066F6501000A142A046F6201000A0C170D081F2F3310180D046F6301000A26046F6201000A0C042853010006130411041428620100062C281F3C286601000A13050918331011051F2F8C62000001286901000A1305020311052856010006142A051428630100062C4611040528630100062D0409182E381F3C286601000A13060918331011061F2F8C62000001286901000A1306110611046F5600000A285800000A1306020311062856010006142A1413072B66736F010006130911090428530100066F6B0100061109020428520100066F6D0100061109130811086F6A0100061428620100062C1D723B140070046FDA010006046FD9010006046FD801000673C50200067A11072D07736A01000A1307110711086F6B01000A0204120328540100062C8F020309110411072855010006027BA50000042C0F027BA500000411046F6C01000A2D02142A11042A13300700940200005D000011036F6201000A0A060D091F215945050000000D0000\
-006C020000B40100006C020000E4000000091F3F3B85000000385F020000036F6301000A26036F6201000A130411041F2D2E0811041F5B2E282B420203726D140070726D14007028510100060B072C2D7233140070726D1400700728440200062A02037273140070728314007028510100060C082C070828480200062A7289140070728900007002037E2D00000A7E2D00000A285101000628440200062A036F6301000A26036F6201000A130511051F3D3321728D14007072931400700203728D1400707293140070285101000628440200062A7293140070729314007002037E2D00000A7293140070285101000628440200062A036F6301000A26036F6201000A0A06130611061F2D302211061F21594504000000490000007E000000490000004900000011061F2D2E162B7611061F3A2E3B11061F3D2E3511061F402E2F2B627297140070729F1400700203726D140070726D1400701F258C62000001286901000A285101000628440200062A036F6301000A261F258C62000001068C62000001286901000A72A714007002037E2D00000A72A7140070285101000628440200062A72A714007072A714007002037E2D00000A72A7140070285101000628440200062A036F6301000A26036F6201000A0A06130711071F2B5945030000003B000000700000000E00000011071F3D2E3511071F402E2F2B6272AB14007072B31400700203726D140070726D1400701F238C62000001286901000A285101000628440200062A036F6301000A261F238C62000001068C62000001286901000A72BB14007002037E2D00000A72BB140070285101000628440200062A72BB14007072BB14007002037E2D00000A72BB140070285101000628440200062A142A13300400F70000005E000011036F6201000A0A046F6700000A0B160C2B48036F6401000A2D1A0604086F6800000A3310036F6301000A26036F6201000A0A2B22082D02142A72BF140070036FDA010006036FD9010006036FD801000673C50200067A0817580C080732B4051F3E8C62000001286901000A1003036F6101000A056F6700000A0D1613042B53060511046F6800000A3337110417581304110409322F036FDB0100061305036F6301000A260917590D09163112110511056F6700000A09596F6D01000A130511052A161304036F6301000A26036F6201000A0A036F6401000A2CA572F3140070036FDA010006036FD9010006036FD801000673C50200067A0013300400B00100005F000011032857010006036F6201000A1F3D2E0B7E2D00000A28480200062A036F6301000A26032857010006036F6201000A0A061F222E08061F2740E5000000036F6301000A26036F6201000A0B036F6101000A071F3C4083000000036F6301000A26020328500100060C0814286701000A2C6B036F6201000A0B2B0E036F6301000A26036F6201000A0B036F6401000A2D0C07284C0300062D04070633DE036F6401000A2D0407062E1D7221150070036FDA010006036FD9010006036FD801000673C50200067A036F6301000A26082A036F6301000A26036F6201000A0B036F6401000A2D04070633E6036F6401000A2C1D72F3140070036FDA010006036FD9010006036FD801000673C50200067A036FDB0100060D036F6301000A260928480200062A036F6101000A061F3C331D036F6301000A26020328500100061304110414286701000A2C0311042A036F6201000A13052B0F036F6301000A26036F6201000A1305036F6401000A2D1511051F2F2E0F11051F3E2E091105284C0300062CD4036F6401000A2C1D72F3140070036FDA010006036FD9010006036FD801000673C50200067A036FDB01000628480200062A1B3005006C00000060000011026F6201000A0A06285A0100062D02142A026F6101000A026F6301000A26026F6201000A0A026F6401000A2D0806285B0100062DE2026FDB0100060B0773610100060DDE250C727515007007284000000A026FDA010006026FD9010006026FD80100060873C70200067A092A0110000000003C00094500252A00000113300400A500000061000011036F6401000A2C1D72F3140070036FDA010006036FD9010006036FD801000673C50200067A032857010006036F6201000A0A061F2F2E07061F3E2E5E2B65036F6301000A26036F6201000A1F3E332E044A172E1D72AB150070036FDA010006036FD9010006036FD801000673C50200067A036F6301000A26041954172A72AB150070036FDA010006036FD9010006036FD801000673C50200067A036F6301000A26172A162A0000001B3006001F03000062000011041840FF0000001201057BAA000004057BA9000004027BA3000004057BA9000004166F52020006287A020006027BA30000046F4F0200060A062C11066F5B0200060728860200063991000000027BA60000042D6B062C0C027BA3000004066F4D02000612017B5E010004288500000A2D42027BA300000412017B5E0100046F500200062D2E12017B5F010004288500000A2C20027BA30000047E2D00000A6F500200062D0E120112017B5D0100042879020006037E410100046F6501000A2A027BA3000004076F540200062D10062C0C027BA3000004066F4D0200062A037E410100046F6501000A066F5B0200060728860200062C0F027BA30000046F4F020006250A2DD82A73650200060A0E0439D90000000E046F6E01000A17590C38C30000000E04086F6F01000A0D096F6A0100067BA9000004288500000A2C50096F6A0100067BAA00000472A713007028EC00000A2C39096F6C01000614287001000A2C0B72D715007073B500000A7A067E2D00000A096F6C0100066F5301000A6F5E0200060E04086F7101000A2B54096F6A0100067BA900000472A713007028EC00000A2C3D096F6C01000614287001000A2C0B72D715007073B500000A7A06096F6A0100067BAA000004096F6C0100066F5301000A6F5E0200060E04086F7101000A0817590C08163C36FFFFFF027BA3000004066F4D020006057BA9000004288500000A2D36027BA3000004057BA90000046F500200062D23027BA30000047E2D00000A6F500200062C1106057BA90000047E2D00000A6F5E02000606057BAA000004057BA9000004027BA3000004057BA9000004166F52020006737A0200066F5C0200060419331303066F5B02000628460200066F6501000A2B1103066F5B02000628450200066F6501000A0E042C7E0E046F7201000A13062B5A1206287301000A1304120511046F6A0100067BAA00000411046F6A0100067BA9000004027BA300000411046F6A0100067BA9000004166F52020006287A02000603110528470200066F6501000A0311046F6C0100066F6501000A1206287401000A2D9DDE0E1206FE166700001B6F1300000ADC0419330C027BA30000046F4F020006262A0001100000020099026700030E00000000133004007D0000006300001104288500000A2C012A036F7501000A0A06163003142B09030617596F7601000A0B0714286701000A2C46077B4901000A1B333D077B5101000A754A0000012C3006172E11030618596F7601000A7B4901000A1A2E1B03061759077B5101000A04286901000A28480200066F7701000A2A030428480200066F6501000A2A7E2B07026F6301000A26026F6401000A2D0D026F6201000A284C0300062DE42A00000013300400A101000064000011036F6301000A1F262E1D7201160070036FDA010006036FD9010006036FD801000673C50200067A036F6201000A0C036F6401000A2D1208284C0300062D0A081F262E05081F3C33081F26286601000A2A081F2340E5000000036F6301000A26036F6201000A0C160D036F6401000A2D1A081F782E05081F583310170D036F6301000A26036F6201000A0C036F6101000A2B0E036F6301000A26036F6201000A0C036F6401000A2D080828500300062DE2036FDB0100060B07092D03162B052000020000284500000A1204287801000A2C1E110428540300060A036F6401000A2D0C081F3B3307036F6301000A26062A092C361A8D0100000113061106161F268C62000001A21106171F238C62000001A21106181F788C62000001A211061907A21106287901000A2A1F268C620000011F238C6200000107288000000A2A036F6101000A2B0E036F6301000A26036F6201000A0C036F6401000A2D0808284E0300062DE2036FDB0100060B07285901000613051105162F0E1F268C6200000107286901000A2A036F6401000A2D0C081F3B3307036F6301000A26110528540300062A000000133002003D1400006100001102288500000A2C02152A02166F6800000A0A061F4159453A00000005000000A0000000B6000000DF00000008010000381300009001000038130000A601000038130000080200001E020000340200004A0200007302000021030000381300007003000086030000AF030000EB03000038130000381300004D040000630400008C040000381300003813000038130000381300003813000038130000A2040000BC0500000B060000F20600007A07000074080000E9080000220900007109000038130000450A00005B0A0000780B0000ED0B0000AE0C0000CE0D0000C80E0000DB0E0000E80F000041110000EF110000381300009D120000B3120000C6120000FF12000038331300000272231600706F7A01000A2C0620C60000002A02722F1600706F7A01000A2C0620C10000002A02723D1600706F7A01000A2C0620C20000002A0272491600706F7A01000A2C0620C00000002A0272571600706F7A01000A2C0620910300002A0272631600706F7A01000A2C0620C50000002A02726F1600706F7A01000A2C0620C30000002A02727D1600706F7A01000A399E12000020C40000002A0272871600706F7A01000A398812000020920300002A0272911600706F7A01000A2C0620C70000002A02729F1600706F7A01000A395F12000020A70300002A0272A71600706F7A01000A2C0620212000002A0272B51600706F7A01000A393612000020940300002A0272C11600706F7A01000A2C0620D00000002A0272C91600706F7A01000A2C0620C90000002A0272D71600706F7A01000A2C0620CA0000002A0272E31600706F7A01000A2C0620C80000002A0272F11600706F7A01000A2C0620950300002A0272011700706F7A01000A2C0620970300002A0272091700706F7A01000A39AE11000020CB0000002A0272131700706F7A01000A399811000020930300002A02721F1700706F7A01000A2C0620CD0000002A02722D1700706F7A01000A2C0620CE0000002A0272391700706F7A01000A2C0620CC0000002A0272471700706F7A01000A2C0620990300002A0272511700706F7A01000A393611000020CF0000002A02725B1700706F7A01000A3920110000209A0300002A0272671700706F7A01000A390A110000209B0300002A0272751700706F7A01000A39F4100000209C0300002A02727B1700706F7A01000A2C0620D10000002A0272891700706F7A01000A39CB100000209D0300002A02728F1700706F7A01000A2C0620520100002A02729B1700706F7A01000A2C0620D30000002A0272A91700706F7A01000A2C0620D40000002A0272B51700706F7A01000A2C0620D20000002A0272C31700706F7A01000A2C0620A90300002A0272CF1700706F7A01000A2C06209F0300002A0272DF1700706F7A01000A2C0620D80000002A0272ED1700706F7A01000A2C0620D50000002A0272FB1700706F7A01000A391D10000020D60000002A0272051800706F7A01000A2C0620A60300002A02720D1800706F7A01000A2C0620A00300002A0272131800706F7A01000A2C0620332000002A02721F1800706F7A01000A39CE0F000020A80300002A0272271800706F7A01000A39B80F000020A10300002A02722F1800706F7A01000A2C0620600100002A02723D1800706F7A01000A398F0F000020A30300002A0272491800706F7A01000A2C0620DE0000002A0272551800706F7A01000A2C0620A40300002A02725D1800706F7A01000A39530F000020980300002A0272691800706F7A01000A2C0620DA0000002A0272771800706F7A01000A2C0620DB0000002A0272831800706F7A01000A2C0620D90000002A0272911800706F7A01000A2C0620A50300002A0272A11800706F7A01000A39F10E000020DC0000002A0272AB1800706F7A01000A39DB0E0000209E0300002A0272B11800706F7A01000A2C0620DD0000002A0272BF1800706F7A01000A39B20E000020780100002A0272C91800706F7A01000A399C0E000020960300002A0272D31800706F7A01000A2C0620E10000002A0272E11800706F7A01000A2C0620E20000002A0272ED1800706F7A01000A2C0620B40000002A0272F91800706F7A01000A2C0620E60000002A0272051900706F7A01000A2C0620E00000002A0272131900706F7A01000A2C0620352100002A0272231900706F7A01000A2C0620B10300002A02722F1900706F7A01000A2C031F262A0272371900706F7A01000A2C0620272200002A02723F1900706F7A01000A2C0620202200002A0272471900706F7A01000A2C031F272A0272511900706F7A01000A2C0620E50000002A02725D1900706F7A01000A2C0620482200002A0272691900706F7A01000A2C0620E30000002A0272771900706F7A01000A39820D000020E40000002A0272811900706F7A01000A2C06201E2000002A02728D1900706F7A01000A2C0620B20300002A0272971900706F7A01000A2C0620A60000002A0272A51900706F7A01000A39330D000020222000002A0272AF1900706F7A01000A2C0620292200002A0272B71900706F7A01000A2C0620E70000002A0272C51900706F7A01000A2C0620B80000002A0272D11900706F7A01000A2C0620A20000002A0272DB1900706F7A01000A2C0620C70300002A0272E31900706F7A01000A2C0620C60200002A0272ED1900706F7A01000A2C0620632600002A0272F91900706F7A01000A2C0620452200002A0272031A00706F7A01000A2C0620A90000002A02720D1A00706F7A01000A2C0620B52100002A0272191A00706F7A01000A2C06202A2200002A0272211A00706F7A01000A394C0C000020A40000002A02722F1A00706F7A01000A2C0620D32100002A0272391A00706F7A01000A2C0620202000002A0272471A00706F7A01000A2C06202F2100002A0272511A00706F7A01000A2C0620B00000002A0272591A00706F7A01000A2C0620B40300002A0272651A00706F7A01000A2C0620662600002A0272711A00706F7A01000A39C40B000020F70000002A02727F1A00706F7A01000A2C0620E90000002A02728D1A00706F7A01000A2C0620EA0000002A0272991A00706F7A01000A2C0620E80000002A0272A71A00706F7A01000A2C0620052200002A0272B31A00706F7A01000A2C0620032000002A0272BD1A00706F7A01000A2C0620022000002A0272C71A00706F7A01000A2C0620B50300002A0272D71A00706F7A01000A2C0620612200002A0272E31A00706F7A01000A2C0620B70300002A0272EB1A00706F7A01000A2C0620F00000002A0272F31A00706F7A01000A2C0620EB0000002A0272FD1A00706F7A01000A2C0620AC2000002A0272071B00706F7A01000A39CA0A000020032200002A0272131B00706F7A01000A2C0620920100002A02721D1B00706F7A01000A2C0620002200002A02722B1B00706F7A01000A2C0620BD0000002A0272391B00706F7A01000A2C0620BC0000002A0272471B00706F7A01000A2C0620BE0000002A0272551B00706F7A01000A39550A000020442000002A0272611B00706F7A01000A2C0620B30300002A02726D1B00706F7A01000A2C0620652200002A0272731B00706F7A01000A39190A00001F3E2A0272791B00706F7A01000A2C0620D42100002A0272831B00706F7A01000A2C0620942100002A02728D1B00706F7A01000A2C0620652600002A02729B1B00706F7A01000A39CD09000020262000002A0272A91B00706F7A01000A2C0620ED0000002A0272B71B00706F7A01000A2C0620EE0000002A0272C31B00706F7A01000A2C0620A10000002A0272CF1B00706F7A01000A2C0620EC0000002A0272DD1B00706F7A01000A2C0620112100002A0272E91B00706F7A01000A2C06201E2200002A02721B0A00706F7A01000A2C06202B2200002A0272F51B00706F7A01000A2C0620B90300002A0272FF1B00706F7A01000A2C0620BF0000002A02720D1C00706F7A01000A2C0620082200002A0272171C00706F7A01000A39F908000020EF0000002A0272211C00706F7A01000A39E308000020BA0300002A02722D1C00706F7A01000A2C0620D02100002A0272371C00706F7A01000A2C0620BB0300002A0272451C00706F7A01000A2C0620292300002A02724F1C00706F7A01000A2C0620AB0000002A02725B1C00706F7A01000A2C0620902100002A0272651C00706F7A01000A2C0620082300002A0272711C00706F7A01000A2C06201C2000002A02727D1C00706F7A01000A2C0620642200002A0272831C00706F7A01000A2C06200A2300002A0272911C00706F7A01000A2C0620172200002A02729F1C00706F7A01000A2C0620CA2500002A0272A71C00706F7A01000A2C06200E2000002A0272AF1C00706F7A01000A2C0620392000002A0272BD1C00706F7A01000A2C0620182000002A0272C91C00706F7A01000A39C30700001F3C2A0272CF1C00706F7A01000A2C0620AF0000002A0272D91C00706F7A01000A2C0620142000002A0272E51C00706F7A01000A2C0620B50000002A0272F11C00706F7A01000A2C0620B70000002A0272FF1C00706F7A01000A2C0620122200002A02720B1D00706F7A01000A395107000020BC0300002A0272111D00706F7A01000A2C0620072200002A02721D1D00706F7A01000A2C0620A00000002A0272271D00706F7A01000A2C0620132000002A0272331D00706F7A01000A2C0620602200002A0272391D00706F7A01000A2C06200B2200002A02723F1D00706F7A01000A2C0620AC0000002A0272471D00706F7A01000A2C0620092200002A0272531D00706F7A01000A2C0620842200002A02725D1D00706F7A01000A2C0620F10000002A02726B1D00706F7A01000A399006000020BD0300002A0272711D00706F7A01000A2C0620F30000002A02727F1D00706F7A01000A2C0620F40000002A02728B1D00706F7A01000A2C0620530100002A0272971D00706F7A01000A2C0620F20000002A0272A51D00706F7A01000A2C06203E2000002A0272B11D00706F7A01000A2C0620C90300002A0272BD1D00706F7A01000A2C0620BF0300002A0272CD1D00706F7A01000A2C0620952200002A0272D91D00706F7A01000A2C0620282200002A0272DF1D00706F7A01000A2C0620AA0000002A0272E91D00706F7A01000A2C0620BA0000002A0272F31D00706F7A01000A2C0620F80000002A0272011E00706F7A01000A2C0620F50000002A02720F1E00706F7A01000A2C0620972200002A02721D1E00706F7A01000A397005000020F60000002A0272271E00706F7A01000A2C0620B60000002A0272311E00706F7A01000A2C0620022200002A02723B1E00706F7A01000A2C0620302000002A0272491E00706F7A01000A2C0620A52200002A0272531E00706F7A01000A2C0620C60300002A02725B1E00706F7A01000A2C0620C00300002A0272611E00706F7A01000A2C0620D60300002A0272691E00706F7A01000A2C0620B10000002A0272771E00706F7A01000A2C0620A30000002A0272831E00706F7A01000A2C0620322000002A02728F1E00706F7A01000A2C06200F2200002A0272991E00706F7A01000A2C06201D2200002A0272A31E00706F7A01000A397604000020C80300002A0272AB1E00706F7A01000A39600400001F222A0272B51E00706F7A01000A2C0620D22100002A0272BF1E00706F7A01000A2C06201A2200002A0272CB1E00706F7A01000A2C06202A2300002A0272D51E00706F7A01000A2C0620BB0000002A0272E11E00706F7A01000A2C0620922100002A0272EB1E00706F7A01000A2C0620092300002A0272F71E00706F7A01000A2C06201D2000002A0272031F00706F7A01000A2C06201C2100002A02720D1F00706F7A01000A2C0620AE0000002A0272151F00706F7A01000A2C06200B2300002A0272231F00706F7A01000A2C0620C10300002A02722B1F00706F7A01000A2C06200F2000002A0272331F00706F7A01000A2C06203A2000002A0272411F00706F7A01000A395603000020192000002A02724D1F00706F7A01000A2C06201A2000002A0272591F00706F7A01000A2C0620610100002A0272671F00706F7A01000A2C0620C52200002A0272711F00706F7A01000A2C0620A70000002A02727B1F00706F7A01000A2C0620AD0000002A0272831F00706F7A01000A2C0620C30300002A02728F1F00706F7A01000A2C0620C20300002A02729D1F00706F7A01000A2C06203C2200002A0272A51F00706F7A01000A2C0620602600002A0272D71000706F7A01000A2C0620822200002A0272B31F00706F7A01000A2C0620862200002A0272BD1F00706F7A01000A2C0620112200002A0272DF1000706F7A01000A2C0620832200002A0272C51F00706F7A01000A2C0620B90000002A0272CF1F00706F7A01000A2C0620B20000002A0272D91F00706F7A01000A2C0620B30000002A0272E31F00706F7A01000A2C0620872200002A0272ED1F00706F7A01000A39FD01000020DF0000002A0272F91F00706F7A01000A2C0620C40300002A0272012000706F7A01000A2C0620342200002A02720F2000706F7A01000A2C0620B80300002A02721B2000706F7A01000A2C0620D10300002A02722D2000706F7A01000A2C0620092000002A02723B2000706F7A01000A2C0620FE0000002A0272472000706F7A01000A2C0620DC0200002A0272532000706F7A01000A2C0620D70000002A02725F2000706F7A01000A394F01000020222100002A02726B2000706F7A01000A2C0620D12100002A0272752000706F7A01000A2C0620FA0000002A0272832000706F7A01000A2C0620912100002A02728D2000706F7A01000A2C0620FB0000002A0272992000706F7A01000A2C0620F90000002A0272A72000706F7A01000A2C0620A80000002A0272AF2000706F7A01000A2C0620D20300002A0272BB2000706F7A01000A2C0620C50300002A0272CB2000706F7A01000A39A100000020FC0000002A0272D52000706F7A01000A398B00000020182100002A0272E32000706F7A01000A2C7820BE0300002A0272E92000706F7A01000A2C0620FD0000002A0272F72000706F7A01000A2C0620A50000002A0272FF2000706F7A01000A2C3F20FF0000002A0272092100706F7A01000A2C0620B60300002A0272132100706F7A01000A2C06200D2000002A02721B2100706F7A01000A2C06200C2000002A152A00000003300200EB00000000000000021F613208021F7A3EDC000000021F413208021F5A3ECF000000021F3A3BC7000000021F5F3BBF0000000220C0000000320B0220D60000003EAC0000000220D8000000320B0220F60000003E990000000220F8000000320B0220FF0200003E86000000022070030000320802207D030000317602207F03000032080220FF1F0000316602200C200000320802200D2000003156022070200000320802208F21000031460220002C000032080220EF2F0000313602200130000032080220FFD700003126022000F9000032080220CFFD000031160220F0FD0000320C0220FDFF0000FE0216FE012A162A172A00033002004C0000000000000002285A0100062D42021F303205021F393138021F2D2E33021F2E2E2E0220B70000002E26022000030000320802206F030000311602203F200000320C022040200000FE0216FE012A162A172A133005001E00000065000011737B01000A0A0206020373EF010006250B7DA400000407284E010006062A0000133005001E00000065000011737B01000A0A0206020373DD010006250B7DA400000407284E010006062A3A02176F5F01000602287500000A2A3E032C0B027BA40000046F1300000A2A760273580200067DA3000004027EDD0000047DA400000402282500000A2A00133003006F0000006600001102282500000A03288500000A2C0B7225210070732600000A7A037EA8000004176F3401000A0A068E690B071759450200000002000000170000002B28027E2D00000A7DA90000040206169A7DAA0000042A0206169A7DA90000040206179A7DAA0000042A7225210070730001000A7A660214287C01000A2C080314287C01000A2A02036F670100062A2E0203286201000616FE012AB6027BA9000004288500000A2C07027BAA0000042A027BA90000041F3A8C62000001027BAA000004288000000A2A00133004004C0000001A00001120264B29360A20295555A5065A280901000A027BAA000004252D06267E2D00000A6F0B01000A580A20295555A5065A280901000A027BA9000004252D06267E2D00000A6F0B01000A580A062A3A0203753A0000021428680100062A2602031428680100062AFA042D07280901000A1002031428620100062C02162A04027BA9000004037BA90000046F7D01000A2C1304027BAA000004037BAA0000046F7D01000A2A162A133003001300000067000011178D620000010A06161F3A9D0680A80000042A1E027BAB0000042A2202037DAB0000042A1E027BAC0000042A2202037DAC0000042A0000001330040058000000680000111B8D010000010A061602286A010006A206171F3D8C62000001A206181F228C62000001A2061902286C01000614286701000A2D077E2D00000A2B0B02286C0100066F5301000AA2061A1F228C62000001A206287901000A2A1E02282500000A2A133003004A00000069000011032D0B728D0E0070732600000A7A03283A00000A0A737B01000A0B2B23077EAE00000428450200066F6501000A0207062872010006077E410100046F6501000A066F3B00000A2CD5072A0000133003005F0000006A000011046F3C00000A0A067B3F00000A0B07175945030000000F0000002100000006000000071C2E142B1B02030428740100062A02030428750100062A02030428730100062A06725B000070067B3F00000A8C20000002284000000A733E00000A7A00133003006E0000006B000011046F4100000A0A067B4700000A0C1202287C02000616FE010B072C36037EB400000428450200066F6501000A037EB500000428470200066F6501000A03067B4700000A8C6300000228480200066F6501000A03061B6F0400002B6F6501000A072C0B037E410100046F6501000A2A000013300300E50000006C000011046F4100000A0A037EAF00000428450200066F6501000A067B4700000A0B1201287C0200063AAF000000037EB500000428470200066F6501000A03067B4700000A8C6300000228480200066F6501000A3884000000046F3C00000A0A067B3F00000A0C0817594506000000150000003A00000015000000020000003A000000150000002B38046F4100000A26037E410100046F6501000A2A037EB000000428450200066F6501000A0203042872010006037E410100046F6501000A2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A046F3B00000A3971FFFFFF2A00000013300300050100006C000011046F4100000A0A037EB100000428450200066F6501000A067B4700000A0B1201287C0200063ACF000000037EB500000428470200066F6501000A03067B4700000A8C6300000228480200066F6501000A38A4000000046F3C00000A0A06\
-7B3F00000A0C08182E06081B2E152B70046F4100000A26037E410100046F6501000A2A046F4100000A26037EB200000428450200066F6501000A03067B4700000A8C6300000228480200066F6501000A037E410100046F6501000A037EB300000428450200066F6501000A0203042872010006037E410100046F6501000A2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A046F3B00000A3951FFFFFF2A0000000330010079000000000000007261110070737902000680AE0000047235120070737902000680AF00000472270F0070737902000680B00000047217120070737902000680B100000472010F0070737902000680B200000472FB0E0070737902000680B300000472DB0F0070737902000680B4000004729B130070737902000680B50000042A1E02282500000A2A4A02282500000A027EB70000047DB80000042A4E02282500000A02038D620000017DB80000042A1E027BB90000042A2202167DB90000042A00000013300400390000001A000011027BB9000004027BB80000048E69300E02027BB90000041758287F010006027BB800000402257BB9000004250A17587DB900000406039D022A000000133004005C0000006D00001103288500000A2C02022A036F6700000A0A027BB9000004027BB80000048E69300E02027BB90000040658287F010006160B2B23027BB800000402257BB9000004250C17587DB90000040803076F6800000A9D0717580B070632D9022A7E027BB9000004172F012A03027BB800000416027BB90000046F7F01000A262A133005004B0000006E000011027BB80000048E690A060332012A1F2006185A288001000A03288001000A0B078D620000010C027BB9000004163114027BB8000004160816027BB9000004288101000A02087DB80000042A4E027BB800000416027BB9000004736E00000A2A32168D6200000180B70000042AA602282500000A032D08168D2F00001B100102738201000A7D8301000A02036F1100000A7D8401000A2A00001B300200450000006F000011160A026F1100000A0D2B22096F9A00000A0B078C2F00001B038C2F00001B288501000A2C04060CDE1A0617580A096F9200000A2DD6DE0A092C06096F1300000ADC152A082A00000001100000020009002E37000A000000001A739900000A7A1A739900000A7A560203288601000A26027B8301000A036F8701000A2A560203288601000A26027B8301000A036F8701000A2A1A738801000A7A1A739900000A7A1A739900000A7A001B3002003F00000070000011026F1100000A0C2B1E086F9A00000A0A068C2F00001B038C2F00001B288501000A2C04170BDE16086F9200000A2DDADE0A082C06086F1300000ADC162A072A0001100000020007002A31000A000000005202288901000A027B8301000A03046F8A01000A2A4A02288901000A027B8301000A6F8B01000A2A0A172A1A739900000A7A1E02738C01000A2A1E02738C01000A2A0000033003006C0000000000000003027B8301000A6F8B01000A2F02172A027B8D01000A2C18162A027B8301000A027B8401000A6F9A00000A6F8E01000A03027B8301000A6F8B01000A320D027B8401000A6F9200000A2DCF0203027B8301000A6F8B01000AFE0416FE017D8D01000A027B8D01000A16FE012AB62B16027B8301000A027B8401000A6F9A00000A6F8E01000A027B8401000A6F9200000A2DDD02177D8D01000A2A5602282500000A02037D8F01000A02157D9001000A2A033002004900000000000000027B9001000A162F0B722F21007073B500000A7A027B9001000A027B8F01000A7B8301000A6F8B01000A320B725D21007073B500000A7A027B8F01000A027B9001000A6F9101000A2A3202289201000A8C2F00001B2A000013300200220000001A000011027B9001000A17580A027B8F01000A066F8601000A2C0902067D9001000A172A162A2202157D9001000A2A062A00000013300300880000007100001102282500000A032D0B7287210070732600000A7A0416320904036F0F00000A320B7299210070738100000A7A0516320B0504036F0F00000A58310B72A5210070738100000A7A03756C00001B0A062C2202067B9301000A7D9301000A02067B9401000A04587D9401000A02057D9501000A2A02037D9301000A02047D9401000A02057D9501000A2A1E02282500000A2A5E038C2F00001B027B9601000A8C2F00001B288501000A2A5E038C2F00001B027B9601000A8C2F00001B288501000A2A13300500CA00000072000011141304141305739701000A13061106037D9601000A027B9301000A756E00001B0A062C2806027B9401000A027B9501000A11042D0F1106FE069801000A739901000A13041104280500002B2A027B9301000A756900001B0B072C2807027B9401000A027B9501000A11052D0F1106FE069B01000A739901000A130511056F9C01000A2A027B9401000A027B9501000A580C027B9401000A0D2B2A027B9301000A096F0900000A8C2F00001B11067B9601000A8C2F00001B288501000A2C02092A0917580D090832D2152A1A739900000A7A1A739900000A7A52027B9301000A027B9401000A03586F0900000A2A52027B9301000A027B9401000A03586F0900000A2A1A739900000A7A1A739900000A7A1A739900000A7A3A0203289D01000A16FE0416FE012A000013300500A400000073000011032D0B72B3210070732600000A7A027B9501000A0458038E69310B72BD210070738100000A7A027B9301000A756E00001B0A062C1506027B9401000A0304027B9501000A288101000A2A027B9301000A756900001B0B072C1507027B9401000A0304027B9501000A6F9E01000A2A040C027B9401000A0D04027B9501000A5813042B1B0308027B9301000A096F0900000AA42F00001B0817580C0917580D08110432E02A1E027B9501000A2A0A172A1A739900000A7A62027B9301000A027B9401000A027B9501000A739F01000A2A62027B9301000A027B9401000A027B9501000A739F01000A2A9E02282500000A02037DA001000A020417597DA101000A02047DA201000A020405587DA301000A2A033002004400000000000000027BA101000A027BA201000A2F0B722F21007073B500000A7A027BA101000A027BA301000A320B725D21007073B500000A7A027BA001000A027BA101000A6F0900000A2A320228A401000A8C2F00001B2AB6027BA101000A027BA301000A2F1D02257BA101000A17587DA101000A027BA101000A027BA301000AFE042A162A3E02027BA201000A17597DA101000A2A062A22021628A501000A2A000013300100290000007400001102751200001B0A062C070673A601000A2A032C0E0273A701000A0A0673A601000A2A0273A801000A2A3A02176FA901000A02287500000A2A321473A601000A80AA01000A2A1E02282500000A2A7A0228AB01000A032D08168D2F00001B100102036F1100000A7DAC01000A2A360228AD01000A027BAE01000A2A360228AD01000A027BAF01000A2A660228AD01000A02027BAE01000A7DB001000A027BAF01000A2A36027BB101000A14FE0116FE012A7E027BB101000A2D0B72D321007073B500000A7A027BB101000A6F8B01000A2A8A027BB101000A2D0E021F1073B201000A7DB101000A2A027BB101000A6FB301000A2A00133002002800000075000011027BB101000A2D0B72D321007073B500000A7A027BB101000A6FB401000A0A02147DB101000A062A033003006400000000000000027BB001000A2C012A02177DB001000A02027BAC01000A6F9200000A16FE017DAE01000A027BAE01000A2C0D027CAF01000AFE152F00001B2A02027BAC01000A6F9A00000A7DAF01000A027BB101000A2C11027BB101000A027BAF01000A6F8E01000A2A3E032C0B027BAC01000A6F1300000A2AAE02157DB501000A02157DB601000A0228AB01000A0203252D0C26168D2F00001B741200001B7DB701000A2A92027BB601000A162F0B72D321007073B500000A7A17027BB501000A58027BB601000A592A36027BB601000A16FE0416FE012A3E02027BB501000A17587DB601000A2A00133004003E00000075000011027BB601000A162F0B72D321007073B500000A7A027BB701000A027BB601000A17027BB501000A58027BB601000A5973B801000A0A02157DB601000A062A360228B901000A027BBA01000A2A360228B901000A027BBB01000A2AC60228B901000A027BBA01000A2C07027BBB01000A2A02167DBC01000A02257BB501000A17587DB501000A027BBB01000A2A133003009500000076000011027BBC01000A2D08027BBA01000A2C012A02177DBC01000A027BB501000A17580A027BB701000A756A00001B0B072C3007066F8601000A2C1302027BB701000A066F0900000A7DBB01000A2A02177DBA01000A027CBB01000AFE152F00001B2A06027BB701000A6F0F00000A2F1302027BB701000A066F0900000A7DBB01000A2A02177DBA01000A027CBB01000AFE152F00001B2A062A9602157DD900000402157DDB00000402282500000A0203252D06267E2D00000A7DDA0000042A1E027BD70000042A1E027BD80000042A22027BD90000046A2A92027BDB000004162F0B72D321007073B500000A7A17027BD900000458027BDB000004592A36027BDB00000416FE0416FE012A3E02027BD900000417587DDB0000042A1E0228E50100062A000000133004003E00000021000011027BDB000004162F0B72D321007073B500000A7A027BDA000004027BDB00000417027BD900000458027BDB000004596F8600000A0A02157DDB000004062AFA027BDB000004162F0B72D321007073B500000A7A03027BDA000004027BDB00000417027BD900000458027BDB000004596FBD01000A2602157DDB0000042A360228EA010006027BD40000042A360228EA010006027BD60000042AA60228EA010006027BD40000042C07027BD60000042A02167DD50000040228EB010006027BD60000042A0013300300500000001A000011027BD50000042C012A02177DD5000004027BD900000417580A06027BDA0000046F6700000A2F1A02167DD400000402027BDA000004066F6800000A7DD60000042A02177DD400000402167DD60000042A133004007D00000077000011027BD9000004162F18020217250A7DD7000004067DD800000402167DD90000042A027BD60000040B071F0A2E07071F0D2E172B2C027BDA000004027BD90000046F6800000A1F0D2E2502257BD800000417587DD800000402167DD70000042B0E02257BD700000417587DD700000402257BD900000417587DD90000042A3A02176FED01000602287500000A2A062A321473DD01000680D30000042A5A02282500000A02037DDE00000402156A7DE50000042A1E027BE30000042A1E027BE40000042A1E027BE50000042A7E027BE60000042D0B72D321007073B500000A7A027BE60000046F7A0100062A36027BE600000414FE0116FE012A8A027BE60000042D0E021F2073790100067DE60000042A027BE60000046F7B0100062A1E0228F70100062A00133002002800000021000011027BE60000042D0B72D321007073B500000A7A027BE60000046F5600000A0A02147DE6000004062A9E027BE60000042D0B72D321007073B500000A7A027BE6000004036F7E01000602147DE60000042A360228FC010006027BE10000042A360228FC010006027BDF0000042A1330030058000000610000110228FC010006027BE10000042C07027BDF0000042A027BE60000042C12027BE6000004027BDF0000046F7C0100062602167DE200000402027BE0000004027BDF00000428FD01000602027BDF000004250A7DE0000004062A13300300470000001A000011027BE20000042D08027BE10000042C012A02177DE2000004027BDE0000046FBE01000A0A020616FE047DE1000004027BE10000042C0802167DDF0000042A0206D17DDF0000042A00133004006B00000077000011027BE5000004166A2F19020217250A7DE3000004067DE400000402166A7DE50000042A040B071F0A2E07071F0D2E072B1C031F0D2E2502257BE400000417587DE400000402167DE30000042B0E02257BE300000417587DE300000402257BE5000004176A587DE50000042A3A02176FFF01000602287500000A2A3E032C0B027BDE0000046FBF01000A2A427EC001000A73EF01000680DD0000042A1E02282500000A2A1E0228C201000A2A1E0228C201000A2A3A0228C201000A020328060200062A1E027BFC0000042A2202037DFC0000042A3202739C02000628080200062A4A02032D07739C0200062B010328A40000062AF602032D07739C0200062B010328A4000006042D0B72190B007073B000000A7A02048E698D4A0000017DFD00000404027BFD000004048E69280C01000A2A000000133002003C00000078000011289700000A6F9800000A027B2D0200043315027B2C0200041FFE330B02167D2C020004020A2B131673060400060A06027B2E0200047D2E020004062A1E0228FF0300062A1B3003001D01000030000011027B2C0200040B07450600000005000000EB00000067000000AA000000C7000000E400000038E600000002157D2C020004027B2E0200047BFD0000042C7B02177D2C02000402027B2E0200047BFD0000047D3002000402167D310200042B4202027B30020004027B310200049A7D2F02000402027B2F0200047D2B02000402187D2C020004170ADD8F00000002177D2C02000402027B3102000417587D31020004027B31020004027B300200048E6932AE0228070400062B570272330B00707D2B02000402197D2C020004170ADE4C02157D2C0200040272550B00707D2B020004021A7D2C020004170ADE2F02157D2C0200040272690B00707D2B020004021B7D2C020004170ADE1202157D2C020004160ADE07022804040006DC062A000000411C00000400000000000000140100001401000007000000000000001E027B2B0200042A1A739900000A7A00133002001F0000001A000011027B2C0200040A061759450200000001000000010000002A0228070400062A1E027B2B0200042A7A02282500000A02037D2C02000402289700000A6F9800000A7D2D0200042A2202157D2C0200042A001330020011000000780000111FFE73060400060A06027D2E020004062A1A731A0200062A32027B050100046FD80100062A32027B050100046FD90100062A32027B050100046FDA0100062A00133002004800000079000011289700000A6F9800000A027B340200043315027B330200041FFE330B02167D33020004020A2B1316730F0400060A06027B350200047D3502000406027B370200047D36020004062A1E0228080400062A13300500C405000077000011027B330200040A0645090000000500000058010000CE01000050020000C60200007E030000AB030000AC04000068050000388C05000002157D33020004027B360200042D0B7203220070732600000A7A027B35020004027B360200047D0501000402167D3802000402167D39020004027B360200042810020006027B360200046F6401000A2C20027B350200047ED30000047D05010004027B360200046F1300000A381B05000002167D3A02000402027B360200046F6201000A7D3B020004027B3B0200040B071F2D3032071F223B51020000071F275945070000002C0200007C0300007C0300007C030000F702000000030000F70200003877030000071F3A3B40030000071F5B5945030000001A0000005A03000090000000071F7B594503000000FD00000045030000730100003840030000027B360200046F6301000A26027B3902000418332C7213220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A027E560000047D3202000402177D33020004172A02157D3302000402257B3802000417587D3802000402167D3902000438C5FEFFFF027B360200046F6301000A26027B3902000417332C7243220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A027E510000047D3202000402187D33020004172A02157D3302000402257B3802000417597D3802000402027B38020004163003162B01187D390200043843FEFFFF027B360200046F6301000A26027B3902000418332C7213220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A027E570000047D3202000402197D33020004172A02157D3302000402257B3802000417587D3802000402167D3902000438CDFDFFFF027B360200046F6301000A26027B3902000417332C7243220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A027E520000047D32020004021A7D33020004172A02157D3302000402257B3802000417597D3802000402027B38020004163003162B01187D39020004384BFDFFFF027B3902000418332C7213220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A02027B3602000428130200067D3C020004027B360200042810020006027B360200046F6201000A1F3A333E027B360200046F6301000A2602027B3C020004737902000628870000067D32020004021B7D33020004172A02157D3302000402167D3902000438ADFCFFFF02027B3C02000428880000067D32020004021C7D33020004172A02157D3302000402187D390200043880FCFFFF02177D3A0200042B7C027B360200046F6301000A26027B39020004182E2C7243220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A02177D39020004382AFCFFFF7279220070027B360200046FDA010006176A58027B360200046FD9010006027B360200046FD801000673C50200067A027B3902000418332C7213220070027B360200046FDA010006027B360200046FD9010006027B360200046FD801000673C50200067A02027B3602000428120200067D3D020004027B3D02000414284800000A2C2802027B3D0200047D32020004021D7D33020004172A02157D3302000402187D39020004387FFBFFFF027B3A0200042D0702167D3B02000402027B360200046FDA010006176A587D3E02000402027B360200046FD90100067D3F02000402027B360200046FD80100067D4002000402027B3602000428150200067D41020004027B41020004288500000A2D5202027B36020004027B41020004027B3B020004027C3902000428140200067D3D020004027B3D02000414284800000A2C2102027B3D0200047D32020004021E7D33020004172A02157D3302000438CAFAFFFF7279220070027B3E020004027B3F020004027B4002000473C50200067A162A1E027B320200042A1A739900000A7A062A1E027B320200042A7A02282500000A02037D3302000402289700000A6F9800000A7D340200042A1330020018000000790000111FFE730F0400060A06027D3502000406037D37020004062A133004002A0100007A000011022811020006026F6401000A2D13026F6201000A72A5220070166F6800000A2E012A026F6301000A26026FDA0100060A026FD80100060B026FD90100060C026F6401000A2C0E72AB22007006080773C50200067A026F6201000A0D0972A5220070176F6800000A33051713042B210972E1220070176F6800000A33051613042B0E72AB22007006080773C50200067A11042C6C026F6301000A26026F6401000A2C0E72AB22007006080773C50200067A026F6201000A72E7220070166F6800000A33D0026F6301000A26026F6401000A2C0E72AB22007006080773C50200067A026F6201000A72E7220070176F6800000A33A0026F6301000A263801FFFFFF026F6301000A26026F6201000A0D026F6401000A3AE8FEFFFF1F0D093BE0FEFFFF1F0A0933DA38D6FEFFFF7E2B07026F6301000A26026F6401000A2D0D026F6201000A284C0300062DE42A00001B300400A20200007B000011026FDA010006176A580A026FD90100060B026FD80100060C026F6101000A026F6201000A0D161304091F2B3316026F6301000A26026F6201000A0D026F6101000A2B16091F2D3311026F6301000A26026F6201000A0D17130409284F0300062D1C091F2E2E17026FDB01000626142A026F6301000A26026F6201000A0D026F6401000A2D0809284F0300062DE2161305026F6401000A2D48091F2E3343026F6301000A26026F6201000A0D2B11026F6301000A26026F6201000A0D171305026F6401000A2D0809284F0300062DDF11052D0E72ED22007006070873C50200067A026FC301000A130611052C0611061759130611042C061106175913061106172F0E72ED22007006070873C50200067A161307026F6401000A2D6D091F652E05091F453363026F6301000A26026F6201000A0D026F6401000A2D05091F2D2E05091F2B3321026F6301000A26026F6201000A0D2B11026F6301000A26026F6201000A0D171307026F6401000A2D0809284F0300062DDF11072D0E72ED22007006070873C50200067A026F6401000A2D1609284E0300062C0E72ED22007006070873C50200067A026FDB010006130811053ABD00000011073AB600000011061F133CAD0000001673C401000A130911081D288700000A28C501000A1309DE0F2672ED22007006070873C50200067A1109200000008073C401000A28C601000A2C25110920FFFFFF7F73C401000A28C701000A2C12110928C801000A8C5000000128880000062A110921000000000000008073C901000A28C601000A2C29110921FFFFFFFFFFFFFF7F73C901000A28C701000A2C12110928CA01000A8C5600000128880000062A11098C2200000128880000062A110820A7000000288700000A28CB01000A130ADE0F2672ED22007006070873C50200067A110A8C5200000128880000062A0000011C00000000CC0111DD010F2A000001000071021586020F2A0000011B300400900200007C000011026FDA010006176A580A026FD90100060B026FD80100060C026F6201000A0D026F6301000A26026F6201000A1304026F6101000A1F2073CC01000A1305026F6401000A2D0F1104284D0300062C1411041F092E0E721523007006070873C50200067A11040933170211056FDC010006026F6301000A2611056F5600000A2A11041F5C2E11026F6301000A26026F6201000A13042BA80211056FDC010006026F6301000A26026F6201000A1304026F6401000A2D0F1104284D0300062C1411041F092E0E721523007006070873C50200067A1104130A110A1F623011110A1F302E36110A1F622E443880010000110A1F662E56110A1F6E2E6E110A1F72594504000000720000005A01000090000000AE0000003855010000026F6301000A26026F6201000A1304385A01000011051E6F7000000A26026F6301000A26026F6201000A1304383D01000011051F0C6F7000000A26026F6301000A26026F6201000A1304381F01000011051F0A6F7000000A26026F6301000A26026F6201000A1304380101000011051F0D6F7000000A26026F6301000A26026F6201000A130438E300000011051F096F7000000A26026F6301000A26026F6201000A130438C5000000026F6301000A26026F6201000A13047E2D00000A13061A13072B25110611048C62000001286901000A1306026F6301000A26026F6201000A1304110717591307026F6401000A2D0E110428500300062C0511071630C516130817130911062000020000288700000A28CD01000A1308DE0626161309DE0011066F6700000A1A331511092C111105110828540300066FCE01000A262B2F11051F756F7000000A26110511066FCE01000A262B19110511046F7000000A26026F6301000A26026F6201000A1304026F6101000A38ADFDFFFF0110000000001C02153102062A00000113300200E60000002100001105185403250A39A200000006720308007028EC00000A2D4306720F08007028EC00000A2D410672F907007028EC00000A2D3F06720F0D007028EC00000A2D3D0672170D007028EC00000A2D3B06724723007028EC00000A2D492B52042C02142A7E540000042A042C02142A7E550000042A042C02142A7E530000042A042C02142A7E580000042A042C05041F2B33067E590000042A041F2D33067E5A0000042A142A042C02142A7E530000042A042C0E04286601000A03285800000A1001022810020006026F6201000A1F3A3316026F6301000A2605165403737902000628870000062A142A000013300200450000007E000011160A026F6101000A026F6201000A0B062C0807284F0300062D1207284E0300062D0A071F5F2E05071F243312170A026F6301000A26026F6201000A0B2BCA026FDB0100062A4A020373EF010006280F02000673CE00000A2A4A020373DD010006280F02000673CE00000A2A3A02176F1902000602287500000A2A3E032C0B027B050100046F1300000A2A4A027EDD0000047D0501000402282500000A2A1E0228C201000A2A3A0228C201000A02037D0A0100042A1E027B0A0100042A2202037D0A0100042A1E02282500000A2A1E027B0E0100042A2202037D0E0100042A000013300200480000007F000011289700000A6F9800000A027B440200043315027B430200041FFE330B02167D43020004020A2B131673170400060A06027B450200047D4502000406027B470200047D46020004062A1E0228100400062A1B3004007607000080000011027B430200040B07451100000005000000C3000000EE0000008D01000000020000AE0200000203000018070000D903000015040000450400007C040000A8040000E8040000620500009F06000003070000381307000002157D43020004027B460200042D0B728D0E0070732600000A7A02027B46020004284701000A7D480200040273580200067D4902000402027B480200046F4801000A7D4A020004387D060000027B4A0200047B4901000A0C08175945050000000500000047040000050000002F060000A4040000382A06000002167D4B02000402027B4A0200047B4901000A19FE017D4C02000402027B4A0200047B4A01000A7D4D020004027E560000047D4202000402177D43020004170ADD6006000002157D4302000402027C4D020004287F02000628880000067D4202000402187D43020004170ADD3506000002157D430200040273650200067D4E02000402027B49020004027B4D0200047B5F010004166F530200067D4F020004280901000A027B4F020004027B4D0200047B5E0100046F0A01000A2D5A027B4D0200047B5F010004288500000A2D48027B4E020004027B4D0200047B5E010004027B4D0200047B5F0100046F5E02000602177D4B020004027E570000047D4202000402197D43020004170ADD9605000002157D43020004027B4E020004027B4D0200046F5C020006027B49020004027B4E0200046F4D020006027B480200046F4B01000A2602027B480200046F4801000A7D4A0200043876010000027B4B0200042D2702177D4B020004027E570000047D42020004021A7D43020004170ADD2305000002157D4302000402027B4A0200047B4A01000A7D5002000402027B49020004027B500200047B5F010004166F530200067D4F020004280901000A027B4F020004027B500200047B5E0100046F0A01000A2D33027B500200047B5F010004288500000A2D21027B4E020004027B500200047B5E010004027B500200047B5F0100046F5E02000602027C50020004287F020006737902000628870000067D42020004021B7D43020004170ADD7504000002157D43020004027B480200046F\
-4B01000A2602027B480200046F4801000A7D4A020004027B4A0200047B4901000A0D091B332902027B4A0200041C6F0600002B7D42020004021C7D43020004170ADD2104000002157D430200042B26027B4A020004725B000070027B4A0200047B4901000A8C5B000002284000000A735401000A7A027B480200046F4B01000A2602027B480200046F4801000A7D4A020004027B480200046F5001000A2D11027B4A0200047B4901000A1A3B6CFEFFFF027B4B020004390C01000002027B4E0200046F630200067D53020004021D7D4302000438B800000002027B530200046F5501000A7D51020004027B5102000413041204285601000A288500000A2C270272A713007028860000067D42020004021E7D43020004170ADD4A030000021D7D430200042B3A02725B230070027B5102000413051205285601000A285800000A28860000067D42020004021F097D43020004170ADD0E030000021D7D4302000402027B5102000413061206285701000A28880000067D42020004021F0A7D43020004170ADDDE020000021D7D43020004027B530200046F9200000A3A38FFFFFF022818040006027E520000047D42020004021F0B7D43020004170ADDA702000002157D43020004027B4C0200043940020000027E510000047D42020004021F0C7D43020004170ADD7B02000002157D43020004027B490200046F4F02000626380E020000027B490200046F4B020006163121027E510000047D42020004021F0D7D43020004170ADD3B02000002157D43020004027B490200046F4F02000626027B480200046F4B01000A2602027B480200046F4801000A7D4A02000438B1010000027B4A0200047B5101000A750D00001B2D12027B4A0200047B5101000A751B00001B2C4A02027B4A0200041C6F0600002B7D42020004021F0E7D43020004170ADDC101000002157D43020004027B480200046F4B01000A2602027B480200046F4801000A7D4A020004384301000002027B4A0200046F5301000A7D52020004027B480200046F4B01000A2602027B480200046F4801000A7D4A0200042B3902027B52020004027B4A0200046F5301000A285800000A7D52020004027B480200046F4B01000A2602027B480200046F4801000A7D4A020004027B480200046F5001000A2D32027B4A0200047B4901000A1B3324027B4A0200047B5101000A750D00001B2D12027B4A0200047B5101000A751B00001B2C88027B450200046F200200061307110745030000001F0000002C000000020000002B2A027E0D010004027B5202000472B30700706FD001000A7D520200042B0D027B52020004284B0300062D4F02027B5202000428880000067D42020004021F0F7D43020004170ADD8400000002157D430200042B26027B4A020004725B000070027B4A0200047B4901000A8C5B000002284000000A735401000A7A027B480200046F5001000A3973F9FFFF2B2A027B490200046F4F02000626027E510000047D42020004021F107D43020004170ADE2002157D43020004027B490200046F4B0200061630C8160ADE07022815040006DC062A0000411C000004000000000000006D0700006D07000007000000000000001E027B420200042A1A739900000A7A001B3002002A0000001A000011027B430200040A061D594504000000010000000100000001000000010000002ADE07022818040006DC2A0000011000000200200002220007000000001E027B420200042A7A02282500000A02037D4302000402289700000A6F9800000A7D440200042A6E02157D43020004027B530200042C0B027B530200046F1300000A2A0013300200180000007F0000111FFE73170400060A06027D4502000406037D47020004062A5672692300702008030000736900000A800D0100042A1E02282500000A2A1E02282500000A2A0000133002004800000081000011289700000A6F9800000A027B560200043315027B550200041FFE330B02167D55020004020A2B131673200400060A06027B5C0200047D5C02000406027B580200047D57020004062A1E0228190400062A133003005603000033000011027B550200040A06450600000005000000270100007C010000CB01000092020000D3020000382A03000002157D55020004027B570200042D0B728D0E0070732600000A7A02027B57020004283A00000A7D5902000402027B590200046F3C00000A7D5A02000438D9020000027B5A0200047B3F00000A0B071959450400000005000000140200008F0200004E020000388A020000027B590200046F4100000A2602027B590200046F3C00000A7D5A020004027B5A0200047B3F00000A1C2E11027B5A0200047271230070733E00000A7A027B5A0200047B4B00000A75630000022C1802027B5A0200047B4B00000AA5630000027D5B0200042B1B027C5B020004027B5A0200046F4E00000A73790200068163000002027B590200046F4100000A2602027B590200046F3C00000A7D5A02000402027B5B02000428450200067D5402000402177D55020004172A02157D55020004027B5A0200047B3F00000A1740E0010000027B590200046F4100000A2602027B590200046F3C00000A7D5A02000438B600000002027B5A0200041A6F0400002B7D5402000402187D55020004172A02157D55020004027B590200046F4100000A2602027B590200046F3C00000A7D5A020004027B5A0200047B3F00000A0C081C332402027B5A0200041B6F0400002B7D5402000402197D55020004172A02157D550200042B26027B5A02000472A1230070027B5A0200047B3F00000A8C20000002284000000A733E00000A7A027B590200046F4100000A2602027B590200046F3C00000A7D5A020004027B5A0200047B3F00000A1B3B39FFFFFF027B5A0200047B3F00000A182E26027B5A02000472E9230070027B5A0200047B3F00000A8C20000002284000000A733E00000A7A027B590200046F4100000A2602027B590200046F3C00000A7D5A02000438A1000000027E410100047D54020004021A7D55020004172A02157D55020004027B590200046F4100000A2602027B590200046F3C00000A7D5A0200042B6702027B5A0200041B6F0400002B7D54020004021B7D55020004172A02157D55020004027B590200046F4100000A2602027B590200046F3C00000A7D5A0200042B26027B5A020004725B000070027B5A0200047B3F00000A8C20000002284000000A733E00000A7A027B590200046F3B00000A3917FDFFFF162A1E027B540200042A1A739900000A7A062A1E027B540200042A7A02282500000A02037D5502000402289700000A6F9800000A7D560200042A00001330020018000000810000111FFE73200400060A06027D5C02000406037D58020004062A1E02282500000A2A133002004500000082000011036FD301000A2D03142B06036FD401000A0A036FD501000A2D03142B06036FD601000A0B062C1C066FD701000A2C14042D0F072C0A076FD701000A16FE012A172A162A172A46036FD801000A2C07036FD901000A2A172A0A142A0A142A0A032A1E02282500000A2A4E020304282D0200062D0703280700002B2A172A4A0203282E0200062D0703280700002B2A172A1E02282500000A2A62168C53000001027B5D020004036F6A000006288501000A2A36027B5E02000404288501000A2AA2027B5E02000404288501000A2D18168C53000001027B5D020004036F6A000006288501000A2A172A0013300300D30000008300001114130414130573210400061306036FDA01000A252D0726036FDB01000A0A03280800002B0B1106147D5D020004072C3E076F1D020006288500000A2D3106076F1D0200061F746FDC01000A0C082C1F086FDD01000AD053000001282B00000A330D11060828910300067D5D02000403280900002B0D092D2111067B5D0200042D02142A11042D0F1106FE06220400067311030006130411042A1106096FDE01000A7D5E02000411067B5D0200042D1611052D0F1106FE06230400067311030006130511052A1106FE062404000673110300062A00133002004800000084000011289700000A6F9800000A027B610200043315027B600200041FFE330B02167D60020004020A2B1316732C0400060A06027B650200047D6502000406027B630200047D62020004062A1E0228250400062A133002006C0000001A000011027B600200040A064502000000020000004E0000002B5302157D6002000402027B62020004280A00002B7D64020004027B640200042C33027B640200046F050200062C2602027B640200046F0502000673790200067D5F02000402177D60020004172A02157D60020004162A1E027B5F0200042A1A739900000A7A062A32027B5F0200048C630000022A7A02282500000A02037D6002000402289700000A6F9800000A7D610200042A0000001330020018000000840000111FFE732C0400060A06027D6502000406037D63020004062A1E0228320200062A1E02282500000A2A7202282500000A0203283B0200060204283D0200060205283F0200062A1E027B170100042A2202037D170100042A1E027B180100042A2202037D180100042A1E027B190100042A2202037D190100042AD6041F3C6F1101000A0402283A0200066F0701000A0402283E0200066F0701000A0402283C0200066F0701000A041F3E6F1101000A2A7202282500000A02037DE001000A02047DE101000A02057DE201000A2A1E027BE001000A2A1E027BE101000A2A1E027BE201000A2A00133002007300000085000011736F00000A0A06722F2400706FCE01000A2606027BE001000A8C2F00001B6FE301000A260672452400706FCE01000A2606027BE101000A8C4B00001B6FE301000A260672572400706FCE01000A2606027BE201000A8C7600001B6FE301000A2606726D2400706FCE01000A26066F5600000A2A0013300300530000008600001103757500001B0A062C4728E401000A027BE001000A067BE001000A6FE501000A2C2F28E601000A027BE101000A067BE101000A6FE701000A2C1728E801000A027BE201000A067BE201000A6FE901000A2A162A0013300300530000001A00001120D589EDF80A20295555A5065A28E401000A027BE001000A6FEA01000A580A20295555A5065A28E601000A027BE101000A6FEB01000A580A20295555A5065A28E801000A027BE201000A6FEC01000A580A062A0013300300550000006800001102283A02000602283C02000602283E02000673ED01000A261B8D010000010A06161F3C8C62000001A2061702283A020006A2061802283E020006A2061902283C020006A2061A1F3E8C62000001A206287901000A2A0000001330030055000000870000110375590000020A062D02162A280901000A02283A020006066F3A0200066F0A01000A2C2F280901000A02283C020006066F3C0200066F0A01000A2C17280901000A02283E020006066F3E0200066F0A01000A2A162A00000013300300510000001A00001120D589EDF80A20295555A5065A280901000A02283A0200066F0B01000A580A20295555A5065A280901000A02283C0200066F0B01000A580A20295555A5065A280901000A02283E0200066F0B01000A582A3E1B020304733902000673EE01000A2A22170273EF01000A2A22190273EF01000A2A221A0273EF01000A2A221B0273EE01000A2A5E1673F001000A80400100041873F001000A80410100042A1E02282500000A2A32027B490100046FF101000A2A3E027B490100046FF101000A16FE022A6E032D0B7273240070732600000A7A027B49010004036FF201000A2A000013300200210000001A000011027B490100046FF101000A17590A06162F02142A027B49010004066FF301000A2A000000133002002F00000088000011027B490100046FF101000A17590A06162F02142A027B49010004066FF301000A0B027B49010004066FF401000A072A1E02282500000A2A3603027B690200046F5F0200062A000000133003002B0000008900001173340400060A06037D69020004027B4901000406FE063504000673F501000A6FF601000A16FE0416FE012A1E02282500000A2A3603027B6A0200046F600200062A000000133003002B0000008A00001173360400060A06037D6A020004027B4901000406FE063704000673F501000A6FF601000A16FE0416FE012A1E02282500000A2A3603027B6B0200046F5F0200062A32027E2D00000A6F5F0200062A000013300300A10000008B00001173380400060C08037D6B020004087B6B0200042D0B087E2D00000A7D6B020004027B4901000408FE063904000673F501000A6FF701000A0A062D4F087B6B020004288500000A2D42042C16727F240070087B6B020004284000000A73B500000A7A027B490100047E4B0100042D1114FE065902000673F501000A804B0100047E4B0100046FF701000A0A062C1206087B6B02000412016F610200062C02072A142A1E02282500000A2A3603027B6C0200046F600200062A32027E2D00000A6F600200062A13300300A10000008C000011733A0400060C08037D6C020004087B6C0200042D0B087E2D00000A7D6C020004027B4901000408FE063B04000673F501000A6FF701000A0A062D4F087B6C020004288500000A2D42042C16727F240070087B6C020004284000000A73B500000A7A027B490100047E4C0100042D1114FE065A02000673F501000A804C0100047E4C0100046FF701000A0A062C1206087B6C02000412016F620200062C02072A142A1E02282500000A2A4A036F5B020006027B6D02000428850200062A133003002D0000008D000011733C0400060B07037D6D020004027B4901000407FE063D04000673F501000A6FF601000A0A0616FE0416FE012A32027B490100046FF801000A2A0000133003002A0000002100001102041628530200060A062D1C04288500000A2D1403288500000A2C0A020428570200060A2B02030A062A0000133004002F0000004500001103287E0200060A06252D23261F718C6200000102257B4A0100041758250B7D4A010004078C50000001286901000A2A4A0273F901000A7D4901000402282500000A2A1E027B4E0100042A2202037D4E0100042A00133003001C00000021000011027B4D0100042C10027B4D0100040312006FFA01000A2D02142A062A9A027B4D0100042D1002280901000A73FB01000A7D4D010004027B4D01000403046FFC01000A2A5E027B4D0100042C0D027B4D010004036FFD01000A2A162A5E027B4D0100042C0D027B4D010004036FFE01000A2A162A6E041451027B4D0100042C0E027B4D01000403046FFA01000A2A162A0013300300350000001A000011041451027B4D0100042D02162A027B4D010004036FFF01000A0A06162F02162A04027B4D0100046F0002000A066F0102000A51172A0000001B3002009D00000030000011027B6F0200040B07450300000002000000770000005D0000002B7502157D6F020004027B700200047B4D0100042C6102027B700200047B4D0100046F0202000A7D7202000402177D6F0200042B2F02027B720200046F5501000A7D7102000402027B710200047D6E02000402187D6F020004170ADE2502177D6F020004027B720200046F9200000A2DC4022844040006160ADE07022841040006DC062A000000011000000400000094940007000000001E027B6E0200042A1A739900000A7A001B300200220000001A000011027B6F0200040A061759450200000001000000010000002ADE07022844040006DC2A00000110000002001800021A00070000000032027B6E0200048C5D00001B2A3A02282500000A02037D6F0200042A6E02157D6F020004027B720200042C0B027B720200046F1300000A2A13300200100000008E0000111673430400060A06027D70020004062A1E0228630200062A1E02282500000A2A13300200480000008F000011289700000A6F9800000A027B750200043315027B740200041FFE330B02167D74020004020A2B0716734C0400060A06027B770200047D7602000406027B790200047D78020004062A1E0228450400062A1B300300F300000030000011027B740200040B07450400000005000000C900000073000000C200000038C400000002157D7402000402027B760200041F2C28680200066F0D01000A7D7C02000402177D740200042B4D02027B7C0200046F0E01000A7D7B02000402027B7B02000428670200067D7A020004027B7A020004288500000A2D1E02027B7A0200047D7302000402187D74020004170ADE6102177D74020004027B7C0200046F9200000A2DA602284D04000602027B7802000428670200067D7A020004027B7A020004288500000A2D1E02027B7A0200047D7302000402197D74020004170ADE1202157D74020004160ADE0702284A040006DC062A000110000004000000EAEA0007000000001E027B730200042A1A739900000A7A001B300200220000001A000011027B740200040A061759450200000001000000010000002ADE0702284D040006DC2A00000110000002001800021A0007000000001E027B730200042A7A02282500000A02037D7402000402289700000A6F9800000A7D750200042A6E02157D74020004027B7C0200042C0B027B7C0200046F1300000A2A0013300200180000008F0000111FFE734C0400060A06027D7702000406037D79020004062A1B3002003700000090000011021F3B28680200066F0D01000A0C2B0B086F0E01000A0A060BDE1A086F9200000A2DEDDE0A082C06086F1300000ADC7E2D00000A2A072A000110000002000E001725000A00000000133002004800000091000011289700000A6F9800000A027B7F0200043315027B7E0200041FFE330B02167D7E020004020A2B071673550400060A06027B810200047D8002000406027B830200047D82020004062A1E02284E0400062A13300500040100001A000011027B7E0200040A06450200000005000000BE00000038E800000002157D7E020004027B80020004288500000A3AD100000002027B800200046F6700000A7D8402000402167D8502000402167D86020004389300000002027B80020004027B82020004027B850200046F0302000A7D86020004027B86020004162F0C02027B840200047D8602000402027B80020004027B85020004027B86020004027B85020004596F8600000A6F0402000A7D87020004027B870200046F6700000A16311C02027B870200047D7D02000402177D7E020004172A02157D7E02000402027B8602000417587D85020004027B85020004027B840200042F0C027B86020004163C53FFFFFF162A1E027B7D0200042A1A739900000A7A062A1E027B7D0200042A7A02282500000A02037D7E02000402289700000A6F9800000A7D7F0200042A1330020018000000910000111FFE73550400060A06027D8102000406037D83020004062A5602288500000A2C067E2D00000A2A02280502000A2A26020314286B0200062A7A0228320200060204252D06267E2D00000A7D5001000402037D510100042A00133002004800000092000011289700000A6F9800000A027B8A0200043315027B890200041FFE330B02167D89020004020A2B1316735D0400060A06027B8B0200047D8B02000406027B8D0200047D8C020004062A1E0228560400062A13300500A901000093000011027B890200041304110445020000000500000089010000388B01000002157D8902000402027B8B020004027B8C0200046F0602000A6F6D0200067D8E020004027B8B0200047B510100043927010000160A027B8E0200048E690B3810010000027B8B0200047B5101000413051105175945040000000500000059000000BA000000D100000038E1000000027B8E020004069A0C086F6700000A173013027B8E02000406086F0702000AA238BC000000027B8E0200040608166F6800000A280802000A8C6200000108176F0902000A6F0A02000A286901000AA2388D000000027B8E020004069A0D062D10027B8E02000406096F0A02000AA22B71096F6700000A173010027B8E02000406096F0702000AA22B58027B8E0200040609166F6800000A280802000A8C6200000109176F0902000A6F0A02000A286901000AA22B2C027B8E02000406027B8E020004069A6F0A02000AA22B15027B8E02000406027B8E020004069A6F0702000AA20617580A06073FE9FEFFFF02027B8B0200047B50010004027B8E020004282601000A73790200067D8802000402177D89020004172A02157D89020004162A1E027B880200042A1A739900000A7A1330000001000000940000112A32027B880200048C630000022A7A02282500000A02037D8902000402289700000A6F9800000A7D8A0200042A0000001330020018000000920000111FFE735D0400060A06027D8B02000406037D8D020004062A13300500E00000009500001103288500000A2C07168D4A0000012A1B730B02000A0A170B160C036F6700000A0D1613042B7F031104280C02000A2D1F1104083111060308110408596F8600000A6F3701000A110417580C170B2B50031104280D02000A1305072C2511052C3908110417592F320603081104085917596F8600000A6F3701000A110417590C2B1811052D14060308110408596F8600000A6F3701000A11040C110516FE010B1104175813041104093F79FFFFFF09085917591306110617330E03086F6800000A280E02000A2D05110617310D0603086F0902000A6F3701000A066F0F02000A2AC602282500000A032D0B727D040070732600000A26042D0B72B5240070732600000A2602037D1002000A02047D1102000A2A32027B1002000A6FC000000A2A32027B1002000A6FBF00000A2A32027B1002000A6FBE00000A2A000000133002001A00000096000011027B1002000A036FB600000A0A027B1102000A066F1202000A2A0000133002001A00000096000011027B1002000A036FBA00000A0A027B1102000A066F1202000A2A1A738801000A7AC602282500000A032D0B7275070070732600000A26042D0B72B5240070732600000A2602037D1302000A02047D1402000A2A00133003001B00000097000011027B1402000A036F1202000A0A027B1302000A06046F1502000A2A00133002001A00000097000011027B1402000A036F1202000A0A027B1302000A066F1602000A2A360203287D02000628790200062A2E0203141416287B0200062A2E0203040516287B0200062A033002006000000000000000032D0B72CD240070732600000A7A042D077E2D00000A100205288500000A2C097E2D00000A10032B190517281702000A2D1072E12400707237250070737E00000A7A02037D5D01000402047D5E01000402057D5F010004020E047D600100042A2A027B5D01000414FE012A00133004005E0100009800001102D001000001282B00000A330314100002285B00000A0D0945130000000200000062000000020000000800000014000000380000000E00000026000000440000002C0000004A00000032000000500000003E000000200000001A0000005C00000062000000560000002B60722F1300702A72630900702A72512500702A726B2500702A72752500702A729F0900702A72910A00702A721B0A00702A72370A00702A72730900702A72E10900702A72852500702A72A12500702A72B92500702A72D32500702A72E12500702AD02E000001282B00000A026F1802000A2D0E027EB4010004166F1902000A2C06722F1300702A026F1A02000A2D12D006000001282B00000A026F1802000A2C0672F32500702A026F1B02000A0A062C1E026F0602000A72FF25007016284500000A6F1C02000A2C06722F1300702A026F0602000A0B062D03152B08071F606F1D02000A0C081632090716086F8600000A0B072A000013300400E90000004500001102250A39DF000000FE137E180200042D6D1E730401000A25722526007016280501000A25726F26007017280501000A2572B126007018280501000A25720527007019280501000A2572412700701A280501000A25727B2700701B280501000A2572B32700701C280501000A2572F52700701D280501000AFE138018020004FE137E18020004061201280601000A2C5807450800000002000000080000000E000000140000001A00000020000000260000002C0000002B3072432800702A724B2800702A72512800702A72A71300702A721D0F00702A72592800702A72632800702A72692800702A142A000000133003004A00000021000011027B5E010004288500000A2C07027B5D0100042A027B5E0100040A06288500000A2C15027B5F010004287E020006252D062672712800700A067279280070027B5D010004280201000A2AC2027B5F010004288500000A2C07027B5D0100042A727D280070027B5F0100047281280070027B5D010004281E02000A2A6E027B5E010004288500000A2C070228800200062A02287F0200062A5E0375630000022D02162A0203A56300000228830200062A00033003004C00000000000000280901000A027B5F0100040F017B5F0100046F0A01000A2C31280901000A027B5E0100040F017B5E0100046F0A01000A2C18280901000A027B5D0100040F017B5D0100046F0A01000A2A162A133004006E0000001A00001120264B29360A20295555A5065A280901000A027B5D010004252D06267E2D00000A6F0B01000A580A20295555A5065A280901000A027B5E010004252D06267E2D00000A6F0B01000A580A20295555A5065A280901000A027B5F010004252D06267E2D00000A6F0B01000A580A062A92028C6300000214287C01000A2C0D038C6300000214287C01000A2A0F000328830200062A2E0203288502000616FE012A0013300300350000001A000011280901000A027B5F0100040F017B5F0100046F1F02000A0A062C02062A280901000A027B5D0100040F017B5D0100046F1F02000A2A327F5C010004FE15630000022A1E02282002000A2A22020328B500000A2A26020304282102000A2A26020304282202000A2A3A02288902000602037D610100042A3E0204288A02000602037D610100042A42020405288B02000602037D610100042A26020304288C0200062A1E027B610100042A8A02282500000A03172F10728528007072C9280070737E00000A7A02037D660100042A8202257B6701000417587D67010004027B67010004027B66010004FE0416FE012A3E02257B6701000417597D670100042A00000013300500A600000099000011032C100375040000012D0803754A0000012C02162A027B6C01000417590A2B16027B6B010004069A03287C01000A2C02172A0617590A06162FE6027B6C010004027B6B0100048E693241027B6B0100048E692C0C18027B6B0100048E695A2B011A8D010000010B027B6C010004163114027B6B010004160716027B6C010004288101000A02077D6B010004027B6B01000402257B6C010004250C17587D6C0100040803A2162A000013300600790000001A000011032C100375040000012D0803754A0000012C012A027B6C01000417590A2B55027B6B010004069A03287C01000A2C41061758027B6C0100043318027B6B0100040614A202257B6C01000417597D6C0100042A027B6B010004061758027B6B01000406027B6C0100040659288101000A2A0617590A06162FA72A32168D01000001806A0100042A4A027E6A0100047D6B01000402282500000A2A000000133005001C0000009A000011027332020006178D3300001B0A061673D8000006A206289F0200062A3602733202000603289F0200062A360273320200060328A00200062A3A0203731D0300060428A10200062A3A0203731D0300060428A20200062A3A020304742A00001B28A20200062A\
-8E02177D6D01000402177D6E01000402282500000A02037D6F01000402047D700100042A1E027B6D0100042A2202037D6D0100042A1E027B6E0100042A2202037D6E0100042A1E027B6F0100042A1E027B700100042A1E027B6F0100042A00133005001C0000009A000011027332020006178D3300001B0A061673D8000006A20628AD0200062A360273320200060328AD0200062A360273320200060328AE0200062A3A0203731D0300060428AF0200062A3A0203731D0300060428B00200062A3A020304742A00001B28B00200062A0000000330020041000000000000000272DB2800707D7301000402282302000A7D750100040272890000707D780100040272890000707D7901000402282500000A02037D7601000402047D770100042A1E027B720100042A2202037D720100042A1E027B740100042A2202037D740100042A1E027B710100042A2202037D710100042A1E027B730100042A2202037D730100042A1E027B750100042A2202037D750100042A1E027B760100042A1E027B770100042A1E027B780100042A2202037D780100042A1E027B790100042A2202037D790100042A1E027B7A0100042A2202037D7A0100042A1E027B760100042A2E020304151528C50200062AD202157D7B01000402157D7C01000402156A7D7D0100040203288A020006020E047D7B01000402057D7C01000402047D7D0100042A3202030415150528C70200062ADA02157D7B01000402157D7C01000402156A7D7D01000402030E05288B020006020E047D7B01000402057D7C01000402047D7D0100042A7E02157D7B01000402157D7C01000402156A7D7D010004020304288C0200062A1E027B7B0100042A1E027B7D0100042A1E027B7C0100042A0000133003004D00000030000011032D06732402000A7A051754041754160A027B7D01000469036F6700000A282502000A0B2B22062D0605254A175854030717596F6800000A1F0A330804254A175854170A0717590B071630DA2A3A02288902000602037D2602000A2A3E0204288A02000602037D2602000A2A42020405288B02000602037D2602000A2A26020304288C0200062A1E027B2602000A2A1E02282702000A2A220203280001000A2A26020304282802000A2A26020304282902000A2A1B3003008A0000009B00001102282A02000A732B02000A7D7F01000402282500000A032C70036F2C02000A0C2B53086F2D02000A0A066F8A0000066F0D01000A0D2B2A096F0E01000A0B07288500000A2D1B027B7F010004076F2E02000A2D0D027B7F01000407066F2F02000A096F9200000A2DCEDE0A092C06096F1300000ADC086F9200000A2DA5DE0A082C06086F1300000ADC2A0000011C000002003500366B000A00000000020020005F7F000A00000000133003001B0000009C0000110328670200060A027B7F0100040612016F3002000A2C02072A142A001B300300140100009D00001102282A02000A733102000A7D8101000402282A02000A733102000A7D8201000402282500000A0339E7000000036F3202000A130438C000000011046F3302000A0A027B800100042D0702067D80010004066FE00000066F0D01000A13052B2B11056F0E01000A0B07288500000A2D1B027B82010004076F3402000A2D0D027B8201000407066F3502000A11056F9200000A2DCCDE0C11052C0711056F1300000ADC066FE10000066F0D01000A13062B3211066F0E01000A0C08288500000A2D22027B81010004086F3402000A2D140828690200060D027B8101000409066F3502000A11066F9200000A2DC5DE0C11062C0711066F1300000ADC11046F9200000A3A34FFFFFFDE0C11042C0711046F1300000ADC2A0128000002005D003895000C000000000200AE003FED000C0000000002003400D307010C000000001E027B800100042A133003001C0000009E0000110328690200061001027B810100040312006F3602000A2C02062A142A1B300300420000009F000011030428660200066F0D01000A0D2B1B096F0E01000A0B027B820100040712006F3602000A2C04060CDE16096F9200000A2DDDDE0A092C06096F1300000ADC142A082A00000110000002000D002734000A000000001E027B830100042A2202037D830100042A1E027B840100042A2202037D840100042A1E027B850100042A2202037D850100042A1E027B860100042A2202037D860100042A1E027B870100042A2202037D870100042A620228E00200062D02162A0228E002000603046FF10200062A5E0228E20200062D02162A0228E2020006036FF50200062A5E0228E40200062D02142A0228E4020006036FF90200062A5E0228E60200062D02142A0228E6020006036FFD0200062A5E0228E80200062D02032A0228E8020006036F010300062A1E02282500000A2A360203748C00001B28050300062A1B3002004E000000A000001102282500000A032D0B72DF280070732600000A7A036F3702000A0A2B15066F3802000A26032D0B72DF280070732600000A7A066F9200000A2DE3DE0A062C06066F1300000ADC02037D880100042A00000110000002001B00213C000A000000001B3003003B000000A1000011027B880100046F3702000A0C2B15086F3802000A0A0603046F280200062C04170BDE16086F9200000A2DE3DE0A082C06086F1300000ADC162A072A000110000002000C00212D000A000000001B3002003A000000A1000011027B880100046F3702000A0C2B14086F3802000A0A06036F290200062C04170BDE16086F9200000A2DE4DE0A082C06086F1300000ADC162A072A00000110000002000C00202C000A000000001E02282500000A2A1B30030041000000A2000011027B8F0200046F3902000A0C2B161202283A02000A0A0603046F120300062C04170BDE1B1202283B02000A2DE1DE0E1202FE168F00001B6F1300000ADC162A072A0000000110000002000C00232F000E000000001B3002008E000000A3000011735E0400060C08733C02000A7D8F020004027B880100046F3702000A13042B1F11046F3802000A0A06036F2A0200060B072C0C087B8F020004076F3D02000A11046F9200000A2DD8DE0C11042C0711046F1300000ADC087B8F0200046F3E02000A172F02142A087B8F0200046F3E02000A17330D087B8F020004166F3F02000A2A08FE065F04000673110300062A00000110000002001E002C4A000C000000001330020048000000A4000011289700000A6F9800000A027B920200043315027B910200041FFE330B02167D91020004020A2B131673670400060A06027B930200047D9302000406027B950200047D94020004062A1E0228600400062A1B300300EB000000A5000011027B910200040B07162E0C07193B9C00000038C700000002157D9102000402027B930200047B880100046F3702000A7D9802000402177D91020004388800000002027B980200046F3802000A7D9602000402027B96020004027B940200046F2B0200066FE700000A7D9902000402187D910200042B3F02027B990200046FE800000A7D97020004027B970200040C1202287C0200062D1E02027B970200047D9002000402197D91020004170ADE3B02187D91020004027B990200046F9200000A2DB4022869040006027B980200046F9200000A3A68FFFFFF022868040006160ADE07022865040006DC062A000110000004000000E2E20007000000001E027B900200042A1A739900000A7A001B30020048000000A6000011027B910200040A06175945030000000100000001000000010000002A027B910200040B071859450200000002000000020000002B09DE07022869040006DCDE07022868040006DC2A011C000002003500023700070000000002001C00244000070000000032027B900200048C630000022A7A02282500000A02037D9102000402289700000A6F9800000A7D920200042A6E02157D91020004027B980200042C0B027B980200046F1300000A2A6E02177D91020004027B990200042C0B027B990200046F1300000A2A1330020018000000A40000111FFE73670400060A06027D9302000406037D95020004062A1B30020039000000A7000011027B880100046F3702000A0B2B15076F3802000A0A06036F2C020006252D0226031001076F9200000A2DE3DE0A072C06076F1300000ADC032A0000000110000002000C00212D000A0000000013300400D9000000A8000011D001000001282B00000A6F3300000A6F2800000A178D6200000113041104161F2C9D11046F0301000A0A061672F5280070A2722F29007006282601000A284002000A0B0772332900706F4102000A808D0100040772992900706F4102000A808E0100040772FB2900706F4102000A808F0100047E8D0100042C3A7E8D01000472692A00701F546FDC01000A0C08289103000680900100047E8D01000472732A00701F546FDC01000A0C08289103000680910100047E8E0100042C1D7E8E01000472692A00701F546FDC01000A0D09289103000680920100042A0000001330030042000000A9000011036FDA01000A252D0726036FDB01000A0A067E8D01000428460300062C1B037E8E01000428460300062C0C037E8F01000428460300062A172A020304282D0200062A00001330020041000000A9000011036FDA01000A252D0726036FDB01000A0A067E8D01000428460300062C1B037E8E01000428460300062C0C037E8F01000428460300062A172A0203282E0200062A0A142A1330020048000000AA000011289700000A6F9800000A027B9C0200043315027B9B0200041FFE330B02167D9B020004020A2B131673710400060A06027BA30200047DA302000406027B9E0200047D9D020004062A1E02286A0400062A133004007A0100001A000011027B9B0200040A06450300000005000000A400000058010000385A01000002157D9B020004027B9D020004751C000001399400000002027B9D0200047E8D01000428480300067DA1020004027BA10200043922010000027E90010004027BA10200046F6A000006744A0000017D9F020004027E91010004027BA10200046F6A000006744A0000017DA0020004027B9F020004288500000A3ADC00000002027B9F02000414027BA0020004737A0200067D9A02000402177D9B020004172A02157D9B02000438AF00000002027B9D0200046FDB01000A7E8D01000428480300067DA1020004027BA10200043989000000027E91010004027BA10200046F6A000006744A0000017DA002000402027B9D0200047E8E01000428480300067DA2020004027BA20200042C50027E92010004027BA20200046F6A000006744A0000017D9F020004027B9F020004288500000A2D2802027B9F02000414027BA0020004737A0200067D9A02000402187D9B020004172A02157D9B020004162A1E027B9A0200042A1A739900000A7A062A32027B9A0200048C630000022A7A02282500000A02037D9B02000402289700000A6F9800000A7D9C0200042A001330020018000000AA0000111FFE73710400060A06027DA302000406037D9E020004062A1E0228320200062A03300200510000000000000002282500000A02037B930100047D9301000402037B960100047D9601000402037B970100047D9701000402037B980100047D9801000402037B990100047D9901000402047D9501000402177D9A0100042A000000033002005A0000000000000002282500000A032D0B72872A0070732600000A7A02047D9501000402037D9301000402036F0602000A7D9401000402036FDD01000A7D96010004020328910300067D97010004020328920300067D9801000402057D990100042A0000033002005A0000000000000002282500000A032D0B72A12A0070732600000A7A02047D9501000402037D9301000402036F0602000A7D9401000402036F4202000A7D96010004020328930300067D97010004020328940300067D9801000402057D990100042A000013300300C6010000AB00001102282500000A032D0B72B52A0070732600000A7A03281B0300062C1672BF2A0070036F4302000A284000000A734402000A7A020328970300067D9D010004D006000001282B00000A036F1802000A2D35027B9D0100042C012A031F546F4502000A0A068E6917331C06169A0B020728990300067D9D01000402076F4602000A7D9E0100042A031F546F4502000A0A02068E69734702000A7D9C01000406130916130A2B661109110A9A0C086F4602000A0D098E6917334D09169A6F4802000A13041104D04A000001282B00000A2E3511047EB2010004166F1902000A2D13D006000001282B00000A11046F1802000A2D13027B9C01000411040828990300066F4902000A110A1758130A110A11098E693292027B9D0100042D0C020328970300067D9D01000403726E2B00706F4A02000A130511052C2C11056F4602000A130611068E6917331C02110528960300067DA1010004021106169A6F4802000A7DA2010004141307037EB3010004166F1902000A130711072C10110772802B00706F4A02000A13052B0D0372802B00706F4A02000A130511052C2C11056F4602000A130811088E6917331C02110528960300067D9F010004021108169A6F4802000A7DA00100042A6A027B9C0100042D067E4B02000A2A027B9C0100046F4C02000A2A000000133003001C000000AC000011027B9C0100042C10027B9C0100040312006F4D02000A2D02142A062A66026F4E02000A2D0F026F4F02000A2D07026F5002000A2A172ABE026F4E02000A2D25026F4F02000A2D1D026F5002000A2D13021F74147E4B02000A146F5102000A14FE012A172A162A000003300200480000000000000002735202000A7DA301000402735302000A7DA401000402735402000A7DA501000402735502000A7DA601000402282500000A032D0B72882B0070732600000A7A02037DA70100042A4A027BA7010004036F2C020006252D0226032A00133003003E000000AD000011032D1B178D630000020D09168F630000020373780200068163000002092A027BA60100040312006F5602000A2C04060CDE0A0203120128240300062A082A00001330030034000000AE000011032C0D03D001000001282B00000A3302142A027BA30100040312006F5702000A2C04060BDE0C02031200282403000626062A072A1B3002004C000000AF00001102036FDB01000A28200300060A066FE400000A6FE500000A0D2B19096FE600000A0B077B9301000403288501000A2C04070CDE16096F9200000A2DDFDE0A092C06096F1300000ADC142A082A0110000002001900253E000A00000000133003002F000000B0000011032C08036FD800000A2D02142A027BA40100040312006F5802000A2C04060BDE0C02031200282503000626062A072AB6027BA60100046F5902000A027BA30100046F5A02000A027BA40100046F5B02000A027BA50100046F5C02000A2A0000001B30050095030000B1000011160A027BA7010004036F2B0200060B072C36076FE700000A13122B1511126FE800000A0C1202287C0200062D04170A2B0911126F9200000A2DE2DE0C11122C0711126F1300000ADC062D1E178D6300000213131113168F63000002037378020006816300000211130B036FD800000A2C0D0402031203282503000651072AD09D00001B282B00000A036F1802000A2D12D02E000001282B00000A036F1802000A2C2D04027BA301000403142513146F5D02000A111451027BA601000403072513156F5E02000A11151311DDC302000004735F02000A5103281C0300061304031F746F6002000A13161613173833010000111611179A130511056F6102000A8E693A18010000027BA7010004110511046F280200063A04010000027BA701000411056F2B0200061306160A11062C3811066FE700000A13182B1611186FE800000A13071207287C0200062D04170A2B0911186F9200000A2DE1DE0C11182C0711186F1300000ADC062D25178D6300000213191119168F6300000211056F0602000A7379020006816300000211191306027BA701000411056F2A020006130814130911066FE700000A131A2B5B111A6FE800000A130A120A287C0200062D490450120A7B5D0100046F6202000A2D3911092D1E0450120A7B5D0100041105110A110873160300062513096F6302000A2B170450120A7B5D0100041109110A73150300066F6302000A111A6F9200000A2D9CDE0C111A2C07111A6F1300000ADC111717581317111711168E693FC2FEFFFF031F746F6402000A131B16131C3823010000111B111C9A130B027BA7010004110B6F290200063A04010000027BA7010004110B6F2B020006130C160A110C2C38110C6FE700000A131D2B16111D6FE800000A130D120D287C0200062D04170A2B09111D6F9200000A2DE1DE0C111D2C07111D6F1300000ADC062D25178D63000002131E111E168F63000002110B6F0602000A73790200068163000002111E130C027BA7010004110B6F2A020006130E14130F110C6FE700000A131F2B5B111F6FE800000A13101210287C0200062D49045012107B5D0100046F6202000A2D39110F2D1E045012107B5D010004110B1110110E731703000625130F6F6302000A2B17045012107B5D010004110F111073150300066F6302000A111F6F9200000A2D9CDE0C111F2C07111F6F1300000ADC111C1758131C111C111B8E693FD2FEFFFF027BA30100040304506F5D02000A027BA601000403072513206F5E02000A11201311DE0011112A0000000140000002001A00223C000C0000000002003701235A010C000000000200A9016811020C0000000002007702239A020C000000000200E9026851030C000000001B300500F5010000B2000011032C08036FD800000A2D05041451142A160A027BA7010004036F2B0200060B072C36076FE700000A130A2B15110A6FE800000A0C1202287C0200062D04170A2B09110A6F9200000A2DE2DE0C110A2C07110A6F1300000ADC062D1E178D63000002130B110B168F630000020373780200068163000002110B0B735F02000A0D04736502000A51031F586F6402000A130C16130D381E010000110C110D9A1304160A027BA701000411046F2B020006130511052C3811056FE700000A130E2B16110E6FE800000A13061206287C0200062D04170A2B09110E6F9200000A2DE1DE0C110E2C07110E6F1300000ADC062D25178D63000002130F110F168F6300000211046F0602000A73790200068163000002110F130514130711056FE700000A13102B7711106FE800000A13081208287C0200062D650912087B5D0100046F6202000A2D5611072D3C0912087B5D010004110411081473170300062513076F6302000A045011077B97010004146F6A000006740200000112087B5D0100046F6602000A2B160912087B5D0100041107110873150300066F6302000A11106F9200000A2D80DE0C11102C0711106F1300000ADC110D1758130D110D110C8E693FD7FEFFFF027BA601000403076F5E02000A027BA40100040304506F6702000A027BA301000403092513116F5D02000A11111309DE0011092A0000000128000002002A00224C000C000000000200BD0023E0000C000000000200200184A4010C000000001330040042000000B3000011032C0D03D001000001282B00000A3302142A027BA50100040312006F6802000A2C04060BDE1A0373180300060A027BA50100040306250C6F6902000A080BDE00072A6602282500000A02037D6A02000A027E5C0100047D6B02000A2A8202282500000A02037D6A02000A02047D6C02000A027E5C0100047D6B02000A2A5602282500000A02037D6A02000A02047D6B02000A2A7202282500000A02037D6A02000A02047D6B02000A02057D6C02000A2A1330020086000000B4000011736F00000A0A06729A2B00706FCE01000A2606027B6A02000A8C2F00001B6FE301000A26027B6B02000A0B1201287C0200062D1E0672A02B00706FCE01000A2606027B6B02000A8C630000026FE301000A26027B6C02000A2C190672A02B00706FCE01000A260602286D02000A6FCE01000A2606726D2400706FCE01000A26066F5600000A2A0000133002001A000000B50000110375A100001B0A0614286E02000A2C02162A0206286F02000A2A00000330030054000000000000000314286E02000A2C02162A28E401000A027B6A02000A037B6A02000A6FE501000A2C2F287002000A027B6B02000A037B6B02000A6F7102000A2C17287202000A027B6C02000A037B6C02000A6F7302000A2A162A13300300530000001A000011207EF4F0430A20295555A5065A28E401000A027B6A02000A6FEA01000A580A20295555A5065A287002000A027B6B02000A6F7402000A580A20295555A5065A287202000A027B6C02000A6F7502000A580A062A660214287C01000A2C080314287C01000A2A02036F6F02000A2A2E0203286E02000A16FE012A32027B6C02000A287602000A2A0000133003002A020000B6000011022C08026F5A00000A2B01140A062C19066FD800000A2C1102740200000172A42B00706F2501000A2A06285B00000A0D094513000000590000006A010000590000000500000038000000E10000001E000000930000001C010000AD00000036010000C700000050010000FB000000790000005F000000440000006A010000150100003865010000171304120402285000000A2D0672030800702A720F0800702A02A55900000113051205728B000070284500000A281301000A2A02A562000001286601000A2A02A5080000011306120672B506007028EE00000A2A7E2D00000A2A02A52200000113071207728B000070284500000A281401000A2A02A55200000113081208728B000070284500000A281601000A2A02A57500000113091209728B000070284500000A281701000A2A02A550000001130A120A728B000070284500000A281801000A2A02A556000001130B120B728B000070284500000A281901000A2A02A576000001130C120C728B000070284500000A281A01000A2A02A56B000001130D120D728B000070284500000A281C01000A2A02744A0000012A02A560000001130E120E728B000070284500000A281D01000A2A02A577000001130F120F728B000070284500000A281E01000A2A02A57800000113101210728B000070284500000A281F01000A2A02758F0000010B072C0C07284500000A6F7702000A2A0275900000010C082C0D0814284500000A6F7802000A2A02754A000001252D0726026F5600000A2A4E03027B6B02000A027B6C02000A737902000A2A3A02036F9B0200060428350300062A8E02282500000A032D0B72A82B0070732600000A7A02037DB601000402047DB50100042A000000133002008C000000B7000011032C2A036F5002000A2D22036F4F02000A2D1A03D001000001282B00000A2E0D03D04A000001282B00000A3306737A02000A2A0328400300061001036F4E02000A2C06737A02000A2A027BB6010004036F260300060A062C1B067B9D0100042C13067B9E0100042C11067B9E0100048E69163106737A02000A2A067B9D010004168D010000016F620000062A1B300600C6010000B80000110328400300061001027BB6010004036F260300060A062C08067B9D0100042D1672C42B0070036F4302000A284000000A73D30200067A067B9E0100042C0B067B9E0100048E69172F12067B9D010004168D010000016F620000062A067B9E0100048E698D010000010B04759D00001B0C08398E000000160D078E6913042B7B067B9E010004099A6F7B02000A1305067B9E010004099A6F4802000A1306086F7C02000A6F0D01000A130E2B33110E6F0E01000A1307282A02000A110711056F0A01000A2C1507090211060811076F7D02000A283A030006A2DE0EDE0326DE00110E6F9200000A2DC4DE0C110E2C07110E6F1300000ADC0917580D091104328038B500000004752E0000011308110839A6000000161309078E69130A3890000000067B9E01000411099A6F7B02000A130B067B9E01000411099A6F4802000A130C11086F7E02000A6F0100000A130F2B3A110F6F1200000A744A000001130D282A02000A110D110B6F0A01000A2C1707110902110C1108110D6F7F02000A283A030006A2DE0EDE0326DE00110F6F9200000A2DBDDE15110F7503000001131011102C0711106F1300000ADC1109175813091109110A3F67FFFFFF067B9D010004076F620000062A0000013400000000B50027DC0003010000010200AA0040EA000C0000000000005E01298701030100000102004E01479501150000000003300500A900000000000000032D012A03759D00001B2C1003749D00001B0E040E056F8002000A2A03752E0000012C1003742E0000010E040E056F8102000A2A042C1F047EB4010004166F1902000A2C1172632C007004284000000A73D30200067A052C4F057B980100042C470E052D29057B9801000403057B960100046F5002000A2D03142B0C057B9601000417288202000A6F6E0000062A057B980100040302057B960100040E05283A0300066F6E0000062A5E02D03500001B282B00000A03283A030006A53500001B2A0000001B300400E3020000B9000011032C0D03D001000001282B00000A3302042A0328440300060A042D2B027BB50100042D21036F5002000A2C19062D16724E2D0070036F4302000A284000000A73D30200067A042A062C12036F8302000A0B078E6917330507169A1001046F5A00000A0C03086F1802000A2C02042A036FD800000A2C6704754A0000012C480304282301000A2D31027BB6010004036F200300060D092C210904744A0000016F6202000A2C130904744A0000016F8402000A7B9401000410020304744A00000116288502000A2A0203288602000A04283A03000610020304288702000A2A04759D00001B2C0E020304749D00001B283B0300062A04752E0000012C0E020304742E000001283C0300062AD006000001282B00000A036F1802000A2C21D006000001282B00000A086F1802000A2C0F020308047406000001283D0300062A04754A000001393601000003D008000001282B00000A335F04744A000001284500000A208F000000288802000A13041204285100000A1833131204285200000A8C080000011307DD5801000011048C080000011307DD4A01000026DE0004744A000001120428DB000006390001000011048C080000012A03D019000001282B00000A331104744A000001737800000A8C190000012A03D062000001282B00000A332304744A0000016F6700000A1740BC00000004744A000001166F6800000A8C620000012A03D06C000001282B00000A331604744A000001161205288902000A398A00000011052A03D013000001282B00000A330C04744A000001738A02000A2A03D054000001282B00000A336104744A000001288B02000A288C02000A8C540000011307DE7D26DE0004744A000001288D02000A8C540000011307DE6626DE2E03D054000001282B00000A332102D056000001282B00000A04283A030006A556000001738E02000A8C540000012A0403284500000A282B01000A1307DE25130672962D0070046F5A00000A6F4302000A036F4302000A288F02000A110673D40200067A11072A000134000000005401429601032A00000100004A02196302032A00000100006602147A02032A0000010000AB0210BB02252A0000011B30040013010000BA00001102030428370300060A027BB6010004036F200300060B073A9800000006759D00001B0C082C3F046F7C02000A6F0D01000A13082B1611086F0E01000A0D080904096F7D02000A6F8002000A11086F9200000A2DE1DDB800000011082C0711086F1300000ADC06752E00000113041104399D000000046F7C0200\
-0A6F0D01000A13092B1A11096F0E01000A1305110411050411056F7D02000A6F8102000A11096F9200000A2DDDDE6911092C0711096F1300000ADC046F7C02000A6F0D01000A130A2B37110A6F0E01000A130607110612076FA800000A2C2211072C1E11077B980100042C1511077B98010004060411066F7D02000A6F6E000006110A6F9200000A2DC0DE0C110A2C07110A6F1300000ADC062A0001280000020033002659000C000000000200810027A8000C000000000200C1004405010C000000001B3004004E010000BB00001102030428370300060A027BB6010004036F200300060B073ABC00000006759D00001B0C082C57046F7E02000A6F0100000A130A2B25110A6F1200000A0D09284500000A289002000A13040811040411046F7F02000A6F8002000A110A6F9200000A2DD2DDE4000000110A7503000001130B110B2C07110B6F1300000ADC06752E0000011305110539C0000000046F7E02000A6F0100000A130C2B1A110C6F1200000A1306110511060411066F7F02000A6F8102000A110C6F9200000A2DDDDD89000000110C7503000001130D110D2C07110D6F1300000ADC046F7E02000A6F0100000A130E2B45110E6F1200000A13071107284500000A289002000A130807110812096FA800000A2C2211092C1E11097B980100042C1511097B98010004060411076F7F02000A6F6E000006110E6F9200000A2DB2DE15110E7503000001130F110F2C07110F6F1300000ADC062A000001280000020033003568001500000000020099002AC30015000000000200E50052370115000000001B300700C8010000BC0000110328400300061001036F1A02000A2C0E02036F9102000A05283F0300062A027BB6010004036F260300060A062D1672C42B0070036F4302000A284000000A73D30200067A066F190300066F9202000A13082B3611086F9302000A0B07046F1802000A2C2506076F1A030006178D01000001130911091605A211096F620000061307DD3F01000026DE0011086F9200000A2DC1DE0C11082C0711086F1300000ADC067B9D0100042D1672C42B0070036F4302000A284000000A73D30200067A067BA10100042C46067BA20100042C3E067BA2010004046F1802000A2C30067B9D010004168D010000016F620000060C067BA101000408178D01000001130A110A1605A2110A6F6600000626082A067B9F0100042C7C067BA00100042C74067B9D010004168D010000016F620000060D067BA00100041304056F0100000A130B2B2E110B6F1200000A1305067B9F01000409178D01000001130C110C160211041105283A030006A2110C6F6600000626110B6F9200000A2DC9DE15110B7503000001130D110D2C07110D6F1300000ADC092A0503284500000A282B01000A1307DE25130672962D0070056F5A00000A6F4302000A036F4302000A288F02000A110673D40200067A11072A01340000000064002286000301000001020051004394000C0000000002003E013B790115000000000000900110A001252A0000011330040044000000BD000011032C1C03D001000001282B00000A2E0F0203056F5A00000A05283D0300062A04252D0B26D001000001282B00000A056F9402000A289502000A0A0506166F9602000A062A1B30040077000000BE00001104752F0000010A062D4873A900000A0B046F0100000A13042B1611046F1200000A0C07020308283A0300066F9702000A11046F9200000A2DE1DE1511047503000001130511052C0711056F1300000ADC070A03252D0B26D001000001282B00000A066F9402000A289502000A0D0609166F9602000A092A000110000002001800233B001500000000133002000F010000BF000011026F4E02000A3902010000026F1B02000A39A9000000026F9802000A0A06D009000001282B00000A2E1A06D005000001282B00000A2E0D06D00A000001282B00000A331E026F8302000A0BD018000001282B00000A076F9902000A100038AB00000006D023000001282B00000A409B000000026F8302000A0C088E6918332C08169AD04A000001282B00000A331D08169AD001000001282B00000A330ED0A500001B282B00000A10002B62D072000001282B00000A086F9902000A10002B4E02D069000001282B00000A2E1A02D006000001282B00000A2E0D02D02F000001282B00000A330ED0A800001B282B00000A10002B1902D02E000001282B00000A330CD0A500001B282B00000A1000022A001330030063000000C0000011022D02142A140A027EB4010004166F1902000A0A062D02142A066F8302000A0B078E6918331407169AD04A000001282B00000A6F1802000A2D25D02E000001282B00000A026F1802000A2C02142A72CE2D007002284000000A730001000A7A07179A2A001330030048000000C0000011022C0D02D04A000001282B00000A3302142A026F9A02000A2C07026F9102000A2A140A027EB2010004166F1902000A0A062D02142A066F8302000A0B078E69172E02142A07169A2A1330020055000000A9000011032D19022C4D026F5002000A2C45D001000001282B00000A10002B37022D0A036F5A00000A10002B2A036F5A00000A0A02066F1802000A2D1A06026F1802000A2C050610002B0CD001000001282B00000A1000022A76026F1B02000A2C13D092000001282B00000A026F9802000AFE012A162A5A022C1102D03500001B282B00000A289B02000A2A162A42022C0B032C080203289B02000A2A162A001330020035000000C1000011022C1202D03500001B282B00000A289B02000A2D0A1200FE153500001B062A02D03500001B282B00000A289C02000AA53500001B2A66022C0C032C090203289B02000A2D02142A0203289C02000A2A1E027BB60100042AF6D005000001282B00000A6F4302000A80B2010004D00A000001282B00000A6F4302000A80B3010004D023000001282B00000A6F4302000A80B40100042A0000001330020028000000A6000011022C23160A026F6700000A0B2B1402066F6800000A284C0300062D02162A0617580A060732E8172A6A021F20FE01021F0AFE01602D0B021F0D2E06021F09FE012A172A6A021F1F3113021F7F320C02209F000000FE0216FE012A162A172A72021F613205021F7A3110021F413209021F5AFE0216FE012A162A172A42021F303209021F39FE0216FE012A162A9A021F303205021F39311A021F413205021F463110021F613209021F66FE0216FE012A162A172A52021F0A2F06021F3058D12A021F0A591F6158D12A133002002B0000002100001172890000700A2B1C021F106A5E6928510300068C6200000106286901000A0A021A64100002166A35DF062A220203289D02000A2A1B300100140000002100001102289E02000A0ADE092672931400700ADE00062A011000000000000009090009610000013202739C02000628560300062A4A02032D07739C0200062B010328A40000062AF602032D07739C0200062B010328A4000006042D0B72190B007073B000000A7A02048E698D4A0000017DB701000404027BB7010004048E69280C01000A2A0000133002003C000000C2000011289700000A6F9800000A027BA60200043315027BA50200041FFE330B02167DA5020004020A2B131673790400060A06027BA70200047DA7020004062A1E0228720400062A1B300300F900000030000011027BA50200040B07450500000005000000CB00000064000000A7000000C400000038C600000002157DA5020004027BA70200047BB70100042C7802177DA502000402027BA70200047BB70100047DA902000402167DAA0200042B3F02027BA9020004027BAA0200049A7DA802000402027BA80200047DA402000402187DA5020004170ADE7202177DA502000402027BAA02000417587DAA020004027BAA020004027BA90200048E6932B102287A0400062B3A0272A52E00707DA402000402197DA5020004170ADE2F02157DA50200040272C52E00707DA4020004021A7DA5020004170ADE1202157DA5020004160ADE07022877040006DC062A0000000110000004000000F0F00007000000001E027BA40200042A1A739900000A7A00133002001F0000001A000011027BA50200040A061759450200000001000000010000002A02287A0400062A1E027BA40200042A7A02282500000A02037DA502000402289700000A6F9800000A7DA60200042A2202157DA50200042A001330020011000000C20000111FFE73790400060A06027DA7020004062A5A73600300060228C400000A735A030006739F02000A2A9E0273580200067DBE01000402282500000A032D0B72C7020070732600000A7A02037DBF0100042A1330020048000000C3000011289700000A6F9800000A027BAD0200043315027BAC0200041FFE330B02167DAC020004020A2B131673820400060A06027BAE0200047DAE02000406027BB00200047DAF020004062A1E02287B0400062A1B300400DD00000030000011027BAC0200040B07450300000005000000B70000009000000038B200000002157DAC020004027BAF0200042D0B728D0E0070732600000A7A027BAE0200047BBE0100046F5502000602027BAF020004284701000A7DB10200042B6802027BAE020004027BB1020004176F5C0300066FC700000A7DB302000402177DAC0200042B2F02027BB30200046FC800000A7DB202000402027BB20200047DAB02000402187DAC020004170ADE3202177DAC020004027BB30200046F9200000A2DC4022883040006027BB10200046F5001000A2C8B160ADE07022880040006DC062A0000000110000004000000D4D40007000000001E027BAB0200042A1A739900000A7A001B300200220000001A000011027BAC0200040A061759450200000001000000010000002ADE07022883040006DC2A00000110000002001800021A0007000000001E027BAB0200042A7A02282500000A02037DAC02000402289700000A6F9800000A7DAD0200042A6E02157DAC020004027BB30200042C0B027BB30200046F1300000A2A001330020018000000C30000111FFE73820400060A06027DAE02000406037DB0020004062A133004006B000000C4000011036F4801000A0A067B4901000A0B07175945050000001C000000250000001C00000025000000020000002B23036F4B01000A26178D2200001B0C0816061C6F0600002BA2082A020304285D0300062A06725B000070067B4901000A8C5B000002284000000A735401000A7A001B3004008E030000C5000011036F4801000A0A02067B4A01000AD001000001282B00000A285E0300060B067B4901000A19FE010C036F4B01000A26140D3841030000036F4801000A0A067B4901000A182E1208399A020000067B4901000A1A3B8E020000082D07036F4B01000A26737400000A1304092C19096FA002000A173110077EBC010004288502000639F10000007E5C0100041305141306092C43096FA102000A130711076F9200000A2C2411076FA202000A130E120E28A302000A130611076FA202000A130F120F28A402000A1305DE0C11072C0711076F1300000ADC11062C0A11066FA502000A17301F11062D0D077EBC01000428850200062D0E11057EBD01000428850200062C7411041201287C0200062D180207D030000001282B00000A285E03000628820000062B057E560000046F6100000A11062C3411066FA602000A13102B1211106FA702000A1308110411086FD700000A11106F9200000A2DE5DE0C11102C0711106F1300000ADC11047E510000046F6100000A11042A042C1D11041201287C0200062D080728840000062B057E570000046F6100000A093929010000096FA102000A1311380201000011116FA202000A1309120928A302000A6FA502000A173354042C3802120928A402000AD001000001282B00000A285E030006130A1104120A287C0200062D09110A28870000062B060728870000066F6100000A1104120928A302000A166FA802000A6FD700000A3896000000120928A402000A13121212287C0200063A810000001104120928A402000A13131213287C0200062D1E02120928A402000AD030000001282B00000A285E03000628820000062B057E560000046F6100000A120928A302000A6FA602000A13142B1211146FA702000A130B1104110B6FD700000A11146F9200000A2DE5DE0C11142C0711146F1300000ADC11047E510000046F6100000A11116F9200000A3AF2FEFFFFDE1B11112C0711116F1300000ADC042D0C11047E530000046F6100000A042C0C11047E520000046F6100000A11042A067B4A01000A130C067B4901000A1A3307036F4B01000A26092D0673A902000A0D09110C6FAA02000A2D0D09110C73AB02000A6FAC02000A02030416FE01285C030006130D110D6FC500000A173333110D166FC600000A7B3F00000A1C3323110D166FC600000A7B4B00000A2C14110D166FC600000A6F4E00000A284B0300062D0F09110C6FAD02000A110D6FAE02000A036F5001000A39B4FCFFFF06727B030070735401000A7A000041640000020000009A0000002F000000C90000000C00000000000000020000003C0100001F0000005B0100000C0000000000000002000000740200001F000000930200000C0000000000000002000000A401000015010000B90200000C000000000000001B3004008B000000C6000011027BBF0100046FA7020006046F1F0300060A062C3A066FE700000A13042B1911046FE800000A0B030728850200062C087E5C0100040DDE5111046F9200000A2DDEDE0C11042C0711046F1300000ADC0F017B5D01000428AF02000A0C0F017B5D0100040828EC00000A2C02032A080F017B5E0100040F017B5F0100040F017B60010004737B0200062A092A000110000002001D002643000C00000000E2D001000001282B00000A737802000680BB010004D030000001282B00000A737802000680BC01000472D72E0070737902000680BD0100042A22021428610300062A0000133003002D000000C700001102282500000A032D1C0273B002000A0A06166FB102000A06166FB202000A067DC00100042A02037DC00100042A0A162A0A162A0E156A2A5A0203252D06267E2D00000A73B302000A28660300062A0000133002003B000000C8000011032D0B725F010070732600000A7A03027BC001000428B402000A0A0675960000010B072C0E07166FB502000A07166FB602000A020628670300062A001330020048000000C9000011289700000A6F9800000A027BB60200043315027BB50200041FFE330B02167DB5020004020A2B1316738B0400060A06027BBD0200047DBD02000406027BB80200047DB7020004062A1E0228840400062A1B30060055050000CA000011027BB50200040D09451100000005000000F7040000E60100000E020000F704000073020000A2020000DA020000260300005203000083030000B4030000E50300003504000070040000A8040000E004000038F204000002157DB5020004027BB70200042D0B725F010070732600000A7A027BB70200046FB702000A2D10027BB70200046F1300000ADDBB040000DE2C0A066FBD00000A066FB802000A6A066FB902000A150673C70200067A0B076FBD00000A156A0773C60200067A027BB70200046FBA02000A13041104451200000026040000050000002002000098020000FA02000059FFFFFF59FFFFFF2B0300007B03000059FFFFFFB603000059FFFFFFEE030000C9020000C9020000FB01000059FFFFFF2B0300003854FFFFFF027CB9020004027BB70200046FBB02000A027BB70200046FBC02000A027BB70200046FBD02000A737A020006816300000202027BB70200046FBE02000A7DBA020004027BB70200046FBF02000A399B0000000273C002000A7DBB0200042B7C027BB70200046FBC02000A288500000A2C17027BB70200046FBB02000A72A713007028EC00000A2D53027BB70200046FBC02000A72A713007028EC00000A2D3C027BBB020004027BB70200046FBB02000A027BB70200046FBC02000A027BB70200046FBD02000A737A020006027BB70200046FC102000A6FC202000A027BB70200046FC302000A3A74FFFFFF2B0702147DBB020004027BBA0200042C2802027BB902000428460200067DB402000402187DB5020004170CDD1C03000002157DB50200042B2602027BB902000428450200067DB402000402197DB5020004170CDDF402000002157DB5020004027BBB02000439FFFDFFFF02027BBB0200046FC402000A7DBE020004021A7DB50200042B6F02027BBE0200046FC502000A7DBC02000402027BBC0200041305120528C602000A28470200067DB4020004021B7DB5020004170CDD8F020000021A7DB502000402027BBC0200041306120628C702000A28480200067DB4020004021C7DB5020004170CDD60020000021A7DB5020004027BBE0200046F9200000A2D8402288C040006385EFDFFFF027E410100047DB4020004021D7DB5020004170CDD2802000002157DB50200043839FDFFFF02027BB70200046FC802000A027BB70200046FBC02000A027BB70200046FBD02000A17737B02000628470200067DB4020004021E7DB5020004170CDDDC01000002157DB502000402027BB70200046FC102000A28480200067DB4020004021F097DB5020004170CDDB001000002157DB502000438C1FCFFFF02027BB70200046FC102000A28480200067DB4020004021F0A7DB5020004170CDD7F01000002157DB50200043890FCFFFF02027BB70200046FC102000A28480200067DB4020004021F0B7DB5020004170CDD4E01000002157DB5020004385FFCFFFF02027BB70200046FC102000A28480200067DB4020004021F0C7DB5020004170CDD1D01000002157DB5020004382EFCFFFF0272931400707293140070027BB70200046FC802000A72B3070070027BB70200046FC102000A280201000A28440200067DB4020004021F0D7DB5020004170CDDCD00000002157DB502000438DEFBFFFF027233140070726D140070027BB70200046FC102000A28440200067DB4020004021F0E7DB5020004170CDD9200000002157DB502000438A3FBFFFF0272E12E00707289000070027BB70200046FC102000A28440200067DB4020004021F0F7DB5020004170CDE5A02157DB5020004386BFBFFFF0272F52E00707289000070027BB70200046FC102000A28440200067DB4020004021F107DB5020004170CDE2202157DB50200043833FBFFFF027BB70200046F1300000A160CDE07022889040006DC082A000000414C000000000000700000001F0000008F0000001C0000009800000100000000700000001F000000AB000000100000002A00000104000000000000004C0500004C05000007000000000000001E027BB40200042A1A739900000A7A001B30020026000000CB000011027BB50200040C081A5945030000000100000001000000010000002ADE0702288C040006DC2A00000110000002001C00021E0007000000001E027BB40200042A7A02282500000A02037DB502000402289700000A6F9800000A7DB60200042A6E02157DB5020004027BBE0200042C0B027BBE0200046F1300000A2A001330020018000000C90000111FFE738B0400060A06027DBD02000406037DB8020004062A3A02176F6903000602287500000A2A0E03262A320273AA02000628EE0000062A4A02032D0773AA0200062B010328EE0000062AF602032D0773AA0200062B010328EE000006042D0B72190B007073B000000A7A02048E698D4A0000017DC101000404027BC1010004048E69280C01000A2A000000133002003C000000CC000011289700000A6F9800000A027BC10200043315027BC00200041FFE330B02167DC0020004020A2B131673940400060A06027BC20200047DC2020004062A1E02288D0400062A1B300300F900000030000011027BC00200040B07450500000005000000CB00000064000000A7000000C400000038C600000002157DC0020004027BC20200047BC10100042C7802177DC002000402027BC20200047BC10100047DC402000402167DC50200042B3F02027BC4020004027BC50200049A7DC302000402027BC30200047DBF02000402187DC0020004170ADE7202177DC002000402027BC502000417587DC5020004027BC5020004027BC40200048E6932B10228950400062B3A0272A52E00707DBF02000402197DC0020004170ADE2F02157DC00200040272C52E00707DBF020004021A7DC0020004170ADE1202157DC0020004160ADE07022892040006DC062A0000000110000004000000F0F00007000000001E027BBF0200042A1A739900000A7A00133002001F0000001A000011027BC00200040A061759450200000001000000010000002A0228950400062A1E027BBF0200042A7A02282500000A02037DC002000402289700000A6F9800000A7DC10200042A2202157DC00200042A001330020011000000CC0000111FFE73940400060A06027DC2020004062A000000133002003C000000CD000011289700000A6F9800000A027BC80200043315027BC70200041FFE330B02167DC7020004020A2B1316739D0400060A06027BC90200047DC9020004062A1E0228960400062A133002003B0000001A000011027BC70200040A064502000000020000001D0000002B2202157DC702000402720B2F00707DC602000402177DC7020004172A02157DC7020004162A1E027BC60200042A1A739900000A7A062A1E027BC60200042A7A02282500000A02037DC702000402289700000A6F9800000A7DC80200042A001330020011000000CD0000111FFE739D0400060A06027DC9020004062A720228FF00000A73780300060228FF00000A737003000673C902000A2A9E0273580200067DC301000402282500000A032D0B72C7020070732600000A7A02037DC40100042A00001330050031010000CE000011032D0B728D0E0070732600000A7A03283A00000A0A737B01000A0B160C7E5C0100040D027BC30100046F55020006066F3C00000A7B3F00000A17336F027BC40100046FC10200062C390207027BC40100046FBD0200067289000070284E01000A2D0772F32500702B0B027BC40100046FBD020006737902000614172875030006170C027BC40100046FBF0200067289000070284E01000A2C121203027BC40100046FBF0200062879020006066F3C00000A7B3F00000A193334027BC40100046FBD0200067289000070284E01000A2C1D1203027BC40100046FBD02000628790200062B09020706092872030006066F3B00000A2CEF082C370207027BC40100046FBD0200067289000070284E01000A2D0772F32500702B0B027BC40100046FBD020006737902000614182875030006072A00000013300500F40000006A000011027BC60100042C29027BC40100046FB50200062C1502257BC501000417587DC50100040203287603000602167DC6010004046F3C00000A0A067B3F00000A0B0717594503000000100000008500000006000000071C2E162B7F0203040528730300062A0203040528740300062A046F4100000A260F03287C0200062C08067B4700000A1003067B4B00000A2D1502051428770300061003020305141928750300062A0205067B4B00000A6F5A00000A287703000610030203051417287503000603061B6F0400002B6F6501000A020305141828750300062A06725B000070067B3F00000A8C20000002284000000A733E00000A7A1330050078010000CF000011046F4100000A0A020F03287C0200062D03052B06067B4700000AD030000001282B00000A287703000610031201027BC40100046FBF0200067289000070284E01000A2D0772D72E00702B0B027BC40100046FBF02000628790200060203051417287503000602177DC6010004160C38F9000000046F3C00000A0A067B3F00000A0D091759450600000051000000AF0000005100000005000000AF0000005100000038AA000000046F4100000A26027BC60100042C0902167DC60100042B22027BC40100046FB50200062C1502257BC501000417597DC5010004020328760300060203051418287503000602177DC60100042A082C16027BC40100046FB50200062C0702032876030006160C027BC60100042C29027BC40100046FB50200062C1502257BC501000417587DC50100040203287603000602167DC601000402030407287203000602167DC6010004170C2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A046F3B00000A39FCFEFFFF2A13300500D1010000D0000011046F4100000A0A020F03287C0200062D03052B06067B4700000AD001000001282B00000A28770300061003170B140C160D388F010000046F3C00000A0A067B3F00000A13051105182E0A11051B2E673855010000046F4100000A26072C13160B0203050817287503000602177DC6010004027BC60100042C0902167DC60100042B22027BC40100046FB50200062C1502257BC501000417597DC5010004020328760300060203051418287503000602177DC60100042A046F4100000A26092C16027BC40100046FB50200062C0702032876030006160D073983000000067B4700000A7B600100042C63082D0673CA02000A0C067B4700000A1304046F3C00000A0A067B3F00000A1C2E0C0672152F0070733E00000A7A046F4100000A261204287C0200062C08067B4700000A13040811046FCB02000A2D09081104066FCC02000A02167DC6010004170D2B79160B0203050817287503000602177DC6010004027BC60100042C29027BC40100046FB50200062C1502257BC501000417587DC50100040203287603000602167DC6010004020304067B4700000A287203000602167DC6010004170D2B1C06725B000070067B3F00000A8C20000002284000000A733E00000A7A046F3B00000A3966FEFFFF2A0000001B30030005010000D1000011027BC60100042C29027BC40100046FB50200062C1502257BC501000417587DC50100040203287603000602167DC601000473650200060A06046F5C020006027BC30100040F027B5F0100046F510200062D14060F027B5E0100040F027B5F0100046F5E020006027BC3010004066F4D0200060E040C08175945030000001D00000010000000020000002B1B030428460200066F6501000A2B19037E410100046F6501000A2B0C030428450200066F6501000A052C4F056FCD02000A0D2B2C096FCE02000A0B03120128CF02000A28470200066F6501000A03120128D002000A1B6F0400002B6F6501000A096F9200000A2DCCDE0A092C06096F1300000ADC056FD102000A2A000000011000000200BC0038F4000A0000000013300300A3000000D2000011027BC40100046FB7020006288500000A0A062C13027BC40100046FB9020006288500000A2C012A027BC40100046FB902000673D202000A0B062D56027BC40100046FB70200066F6700000A17332007027BC40100046FB7020006166F6800000A027BC50100046FD302000A262B23160C2B1607027BC40100046FB70200066FCE01000A260817580C08027BC501000432E103076F5600000A28480200066F6501000A2A001B3004008B000000D30000110F017B5D010004288500000A2C41027BC40100046FBB020006046F1F0300066FE700000A0D2B14096FE800000A0A1200287C0200062D04060CDE4E096F9200000A2DE4DE0A092C06096F1300000ADC0F017B5D01000428D402000A0B0F017B5D0100040728EC00000A2C02032A070F017B5E0100040F017B5F0100040F017B60010004737B0200062A082A0001100000020025002045000A000000007202282500000A032D0B72C7020070732600000A7A02037DC80100042A0000001B3003002800000049000011730F01000A0A020306287A030006066F1001000A6F\
-5600000A0BDE0A062C06066F1300000ADC072A0110000002000600161C000A000000001B300300A3000000D4000011042D0B72692F0070732600000A7A0475890000020A062C0E02066F7E03000603287B0300062A0473D502000A0C08166FD602000A08166FD702000A08283800000A6FD802000A08027BC80100046FB50200066FD902000A08027BC80100046FB70200066FDA02000A08027BC80100046FB90200066FDB02000A08186FDC02000A08176FDD02000A0828DE02000A0B020703287B030006DE0A072C06076F1300000ADC2A000110000002008E000A98000A000000001B300400AC010000D5000011032D0B72692F0070732600000A7A042D0B7213000070732600000A7A160A04284701000A0B076F4801000A0C384B010000087B4901000A130511051759450500000005000000A500000043000000BF000000D000000038050100000617580A03087B4A01000A7B5E010004087B4A01000A7B5D010004087B4A01000A7B5F0100046FDF02000A076F4B01000A26076F4801000A0C38E300000003087B4A01000A7B5E010004087B4A01000A7B5D010004087B4A01000A7B5F0100046FDF02000A076F4B01000A26076F4801000A0C2B0F020307287C030006076F4801000A0C076F5001000A2D09087B4901000A1A2EE0036FE002000A38810000000617590A036FE002000A076F4B01000A26076F4801000A0C2B67020307287C030006076F4801000A0C2B56087B5101000A751B00001B0D092C0F090203737D0300066F5201000A2B0C03086F5301000A6FE102000A076F4B01000A26076F4801000A0C2B1C08725B000070087B4901000A8C5B000002284000000A735401000A7A076F5001000A39AAFEFFFF2B06036FE002000A062517590A1630F2DE1213040811046FBD00000A110473E202000A7A2A411C0000000000002C0000006D01000099010000120000002A0000011330040093000000D6000011046F4801000A0A03067B4A01000A7B5E010004067B4A01000A7B5D010004067B4A01000A7B5F0100046FE302000A046F4B01000A26046F4801000A0A067B4901000A0C081B332C067B5101000A751B00001B0B072C0F070203737D0300066F5201000A2B2003066F5301000A6FE102000A2B1206725B00007006284000000A735401000A7A046F4B01000A26036FE402000A2A3A0228E502000A0203287F0300062A1E027BC90100042A2202037DC90100042A4A02287E03000603286601000A6FE602000A2A52032C1002287E0300060316038E696FE702000A2A4A032C0E02287E0300060304056FE702000A2A3602287E030006036FE602000A2A3202287E0300066FE802000A2A4602287E0300066FE902000A6FEA02000A2A4E020304282D0200062D0703280B00002B2A172A4A0203282E0200062D0703280B00002B2A172A1E02282500000A2A160314FE012A8E042C1E168C53000001027BCB02000403168D010000016F66000006288501000A2A172A76042C18168C53000001027BCA020004036F6A000006288501000A2A172AF2042C37168C53000001027BCB02000403168D010000016F66000006288501000A2D18168C53000001027BCA020004036F6A000006288501000A2A172A4A042C0D027BCC02000404288501000A2A172AC6042C2C027BCC02000404288501000A2D1E168C53000001027BCB02000403168D010000016F66000006288501000A2A172AAE042C26027BCC02000404288501000A2D18168C53000001027BCA020004036F6A000006288501000A2A172A033004004A00000000000000042C45027BCC02000404288501000A2D37168C53000001027BCB02000403168D010000016F66000006288501000A2D18168C53000001027BCA020004036F6A000006288501000A2A172A000013300300B7010000D7000011141304141305141306141307141308141309739E040006130A036FDA01000A252D0726036FDB01000A0A110A147DCA02000406036F0602000A72772F0070285800000A1F746FDC01000A0B072C1F076FDD01000AD053000001282B00000A330D110A0728910300067DCA020004110A147DCB02000406728B2F0070036F0602000A285800000A1F746FEB02000A0C082C29086FEC02000AD053000001282B00000A3317086F4602000A8E692D0D110A0828960300067DCB02000403280900002B0D092D7B110A7BCA0200042D3D110A7BCB0200042D1E7ECC0100042D1114FE068C030006731103000680CC0100047ECC0100042A11042D0F110AFE069F0400067311030006130411042A110A7BCB0200042D1611052D0F110AFE06A00400067311030006130511052A11062D0F110AFE06A10400067311030006130611062A110A096FDE01000A7DCC020004110A7BCA0200042D35110A7BCB0200042D1611072D0F110AFE06A20400067311030006130711072A11082D0F110AFE06A30400067311030006130811082A110A7BCB0200042D1611092D0F110AFE06A40400067311030006130911092A110AFE06A504000673110300062A001330020048000000D8000011289700000A6F9800000A027BCF0200043315027BCE0200041FFE330B02167DCE020004020A2B131673AD0400060A06027BD80200047DD802000406027BD10200047DD0020004062A1E0228A60400062A13300500990200001A000011027BCE0200040A0645070000000500000072000000D50000003701000095010000F201000067020000386902000002157DCE020004027BD0020004751C00000139C500000002027BD0020004280C00002B7DD2020004027BD20200042C44027BD20200046FED02000A288500000A2D3202027BD20200046FED02000A14027BD20200046FEE02000A737A0200067DCD02000402177DCE020004172A02157DCE02000402027BD0020004280D00002B7DD3020004027BD302000439D9010000027BD30200046FEF02000A288500000A3AC401000002027BD30200046FEF02000A14027BD30200046FF002000A737A0200067DCD02000402187DCE020004172A02157DCE020004388D01000002027BD0020004280E00002B7DD4020004027BD40200042C44027BD40200046FF102000A288500000A2D3202027BD40200046FF102000A14027BD40200046FF202000A737A0200067DCD02000402197DCE020004172A02157DCE02000402027BD0020004280F00002B7DD5020004027BD50200042C45027BD50200046FF302000A288500000A2D3302027BD50200046FF302000A14027BD50200046FF402000A17737B0200067DCD020004021A7DCE020004172A02157DCE02000402027BD0020004281000002B7DD6020004027BD60200042C44027BD60200046FF502000A288500000A2D3202027BD60200046FF502000A14027BD60200046FF602000A737A0200067DCD020004021B7DCE020004172A02157DCE020004027BD002000475270000012C68027BD002000474270000016FDB01000A6FD800000A2C5102027BD0020004281100002B7DD7020004027BD70200042C38027BD70200046FF702000A288500000A2D2602027BD70200046FF702000A73790200067DCD020004021C7DCE020004172A02157DCE020004162A1E027BCD0200042A1A739900000A7A062A32027BCD0200048C630000022A7A02282500000A02037DCE02000402289700000A6F9800000A7DCF0200042A00001330020018000000D80000111FFE73AD0400060A06027DD802000406037DD1020004062A1330020048000000D9000011289700000A6F9800000A027BDB0200043315027BDA0200041FFE330B02167DDA020004020A2B131673B50400060A06027BE30200047DE302000406027BDD0200047DDC020004062A1E0228AE0400062A1B300200CD01000030000011027BDA0200040B074507000000050000009701000080000000970100000E010000970100007D010000389201000002157DDA020004027BDC02000475C100001B398300000002027BDC02000474C100001B6FF802000A7DDE020004027BDE02000417306B02027BDC0200046FE500000A7DE402000402177DDA0200042B3202027BE40200046FE600000A7DDF02000402027BDF0200047DD902000402187DDA020004170ADD2201000002177DDA020004027BE40200046F9200000A2DC10228B604000638F8000000021B7DDE02000402027BDE02000473F902000A7DE002000402027BDC0200046FE500000A7DE502000402197DDA0200042B5702027BE50200046FE600000A7DE1020004027BE10200047B950100047B600100042C2302027BE10200047DD9020004021A7DDA020004170ADD9400000002197DDA0200042B11027BE0020004027BE10200046FFA02000A027BE50200046F9200000A2D9C0228B704000602027BE00200046FFB02000A7DE6020004021B7DDA0200042B2F02027CE602000428FC02000A7DE202000402027BE20200047DD9020004021C7DDA020004170ADE25021B7DDA020004027CE602000428FD02000A2DC40228B8040006160ADE070228B3040006DC062A000000411C00000400000000000000C4010000C401000007000000000000001E027BD90200042A1A739900000A7A001B300200660000006D000011027BDA0200040A061759450200000002000000020000002B09DE070228B6040006DC027BDA0200040B071959450200000002000000020000002B09DE070228B7040006DC027BDA0200040C081B59450200000001000000010000002ADE070228B8040006DC2A00000128000002001900021B00070000000002003B00023D00070000000002005C00025E0007000000001E027BD90200042A7A02282500000A02037DDA02000402289700000A6F9800000A7DDB0200042A6E02157DDA020004027BE40200042C0B027BE40200046F1300000A2A6E02157DDA020004027BE50200042C0B027BE50200046F1300000A2A6602157DDA020004027CE6020004FE16C300001B6F1300000A2A0000001330020018000000D90000111FFE73B50400060A06027DE302000406037DDD020004062A1E0228320200062A1E02282500000A2A1E0228C201000A2AAA0275260000012C0C02742600000128910300062A0275270000012C0C02742700000128930300062A142AAA0275260000012C0C02742600000128920300062A0275270000012C0C02742700000128940300062A142A1E02282500000A2A4A027BE7020004037E4B02000A6F0003000A2A0000001330030042000000DA00001173B90400060A022D0B72872A0070732600000A7A026FD301000A2D02142A0602176F0103000A7DE7020004067BE70200042D02142A06FE06BA04000673690000062A1E02282500000A2A0000133005001A00000068000011027BE802000403178D010000010A061604A2066F0003000A262A00001330030042000000DB00001173BB0400060A022D0B72872A0070732600000A7A026FD501000A2D02142A0602176F0203000A7DE8020004067BE80200042D02142A06FE06BC040006736D0000062A1E02282500000A2A36027BE9020004036F0303000A2A133002002D000000DC00001173BD0400060A06027DE9020004067BE90200042D0B72A12A0070732600000A7A06FE06BE04000673690000062A1E02282500000A2A3A027BEA02000403046F0403000A2A1330020049000000DD00001173BF0400060A06027DEA020004067BEA0200042D0B72A12A0070732600000A7A067BEA0200046FD901000A2D0D067BEA0200046F0503000A2C02142A06FE06C0040006736D0000062A000000133006004C000000DE000011022D0B72AB2F0070732600000A7A03288500000A2C0B72C72F0070732600000A7A048E6916310F02031F7C1404146F0603000A0A2B0A02031F7C6FEB02000A0A062D02142A0628960300062A1E02282500000A2A3A027BEB02000403046F0003000A2A00133002002D000000DF00001173C10400060A06027DEB020004067BEB0200042D0B72DD2F0070732600000A7A06FE06C204000673650000062A000000133005002A000000E0000011022D0B72B52A0070732600000A7A021F74147E4B02000A146F5102000A0A062D02142A0628990300062A00001330050026000000E0000011022D0B72B52A0070732600000A7A021F741403146F5102000A0A062D02142A0628990300062A1E02282500000A2A36027BEC020004036F0703000A2A133002002D000000E100001173C30400060A06027DEC020004067BEC0200042D0B72F32F0070732600000A7A06FE06C404000673610000062A00000042534A4201000100000000000C00000076322E302E35303732370000000005006C000000D8B50000237E000044B600007C6A000023537472696E677300000000C02001000030000023555300C0500100100000002347554944000000D0500100E844000023426C6F620000000000000002000001571FA20B091E000000FA25330016000001000000A4000000BC000000EC020000C4040000FD030000D700000007030000D800000058010000E100000058000000CF000000F7000000F2000000C300000001000000030000004600000037000000110000000200000000000A000100000000000600500A490A0600570A490A06005E0A490A06006A0A490A06008F0A740A0600B00A9D0A0600BC0A490A0600E10A490A0600F30A740A0600FB0A740A0600090B740A0600170B9D0A0600230B490A06002D0B740A06003C0B490A06004A0B490A0600640B490A0600800B760B06008E0B490A0600E80BD60B0600870D760B0600950D760B06003A0E760B06005F0E740A0600A90E490A06009210490A06009F10490A06007B10490A06008D13760B060072159D0A0A003C171D1706008217761706000319490A06007B19490A06001B1C740A0600C41E740A06004E2076170600B528D60B0600D428D60B0600ED28D60B0A00282D740A0600C42E490A0600EB2ECE2E0600FD2ECE2E06003937D60B060072399D0A060089399D0A06001B0C490A0E00F43AE93A0E005609E93A0E008909E93A06000F3CD60B0600293CD60B0600DD3CBE3C0600113D490A06004541D60B06005C41D60B06007941D60B06009841D60B0600B141D60B0600CA41D60B0600E541D60B06000042D60B06001942D60B06003242D60B06005F424F420600984285420F01AC4200000600BB42090A0600DB42090A06000543490A06001B43D60B06004143490A06000B0C490A0600CB43490A0600DD43490A0600EA43760B06002444760B0600494434440600890C490A06006A44490A0600040C490A06003B0C490A06009344490A0A00BB441D170600990C490A0600F844490A06006345490A06007845490A0600F024490A06009A45490A0600AE45BE3C0600C445BE3C0600CF45740A0600EE45090A06001A46490A06002146490A06004846490A06004D46490A06007A46344406009D4634440600AA46D60B06001848854206004148304806005A499D0A06006049490A06008D51490A0A009451490A0600AB5134440A00C5511D170A00CB511D170A00DD511D170A00F8511D1706006552740A06008652490A0600CE53760B06000154490A06000754490A06000D54490A06001454490A06001B54490A06002D54490A06007954490A63004304000006005D55490A06006655490A0600AF55490A0600E455C55506000456490A06001C56490A06004659D60B0600235AD60B0A00635A4D5A0600015C854206001C5C854206006B5D740A0600585F760B0A00BE5F490A06003F60490A06001C61490A0600A261D60B0600A961D60B0600F561490A06000262490A06000F62490A06009E62490A0E00EB62E93A0E000A63E93A06003063760B0E003D63E93A0E005D63E93A0E000164E93A0E002E64E93A0E00BA64E93A0E000565E93A0E00AA6591650E00996691650E00BA6691650E00DB6691650E00FF6691650E00256791650E004867916506005C694F42060079694F420000000001000000000001000100010110001A002000050001000100010100002700370009000A00030001010000430037000900200003000100100055003700050027000300A10000006000730000003300050002001000880000000500330007000100100096003700050033001100A1000000A100730000003300120002001000B400000005003300150009011000C200370011003600220001001000CA00370005003700290009011000DC003700110039002E0009011000EF00370011003A00330001001000FA00370005003B003800090110000801370011003D003D00010010001501370005003F004D00A100000020017300000042005F00A10000003501370000004200600001010000460156011D004200610001010000650156011D004200650001010000730156011D004200690001010000820156011D0042006D00A10000009101730000004200710001001000A201B00105004200760081011000BD01B001050050008000A1000000CA01730000005B008A0081001000D601730005005B00950081001000E301B0011A005C00A40001010000EF01B0011D005C00A60081011000F601B00105005C00AA00010100000802B00109005F00BF00A10000001702730000006700BF00010010002702B00105006700C000A10000003302410200006900C800A10000005E02410200006900CA00810010006C02410205006900CC0081001000790287022A006900D100010010009C0287022E006900D20002010000AE02000009006D00D90001001000B80287022E007100D900A1000000C902730000007800DF0081001000D502730005007800E50081001000E202B00132007900EE00A1000000EE02730000007900F100010010000103160305007900F200A10000002803730000007A0000010100100039034403B0007A000201020010005003000005007C000801010010005E031603C4007E001901A10000007203860300008B002401010010009203860305008B002801010100009D03860309008B002C0101001000AA038603050098002C0102010000B803000009009E004001A1000000CB0373000000A200400101001000DC0386030500A200450103001000EA0300000500A800610103001000F00300000500AB006A01A1000000F70373000000AD007001010010000A0486030500AD007101000010001D0428040500B600780100001000320428040500BA00820103011000430400000500BD009401000010004E0428040500BF009A0103011000430400000500C200AA01A10000005C0428040000C600B00181001000660428040500C600B701000010006F0428045E00C700C40100001000820428045E00CD00CE01A10000008F0428040000D300D801010010009B0428040500D300DD0101001000A80428040500DC00EF0100001000B90444030500E700010201011000C50444033500FC00020201001000D90444033500FC00030201001000EB0444037400FD00070202001000F60400000500FE000C020301000004050000090006011B02010010001405440335000A011B02010010003305400505000B011F02020010004E05000005000B012002010010006205400505000F012502020010006F05000005000F012602A10000008405960500001301280201001000B5059605050013012D0201001000CA05DF0558011301330201010000F50504060900130138020100100012060406050017013802000010002006040605001A014402010100002E060406090042014B02000010003E060406050049014B02020010004F06000005004D015B02810110005506690605004F0166020100100088069605580150016A0202010000A3060000090052016E0200001000AE067300050058016E0200001000C306730005005A01750209011000D806730011005C01780201001000E106730041006101890201001000F8060C07900161018D02010100002D070C07090062019202A10000003C070C07000066019202010010004B070C070500660194020100100058070C07050068019702A10000006507960500006D019B02010110007D07730005006D019C02010110009007730005007101AA0201001000A307730090017B01C40201001000BC07730090017E01CD0201001000CD07730045007F01D202A1000000E307690600007F01D60201001000F707690605007F01D702A10000000A08690600008001D902010010001E08690605008001DC02010110003108960505008301E002020100004A0800001D008801F00202010000620800001D008801F40202010000770800001D008801F802020100008F0800001D008801FC02020100009F0800001D008801000301011000B308960505008801040301000000CC089605580189010B0301010000E90896051D009301110301011000FE089605050093011503010110000809960505009B01180301011000130996050500A3011D0301011000210973000500A801270301011000290973000500AC013403810110003D0949090500B7014B0301001000560960097400B7015503020010006B0900000500B8015A03020010007C0900000500C00160030100100089096009B000C1016A0302001000930900000500C201700302001000A50900000500C701780303001000B20900004900C9017D0301001000C309D7095801CA01860301001000EC0900000500CD018D0300011000F609090A3500CD018E0380011000290A56010500CD018F0303011000C14600000500CD019A03030110006E4800000500D601A20303011000834900000500DE01AA0303011000A54900000500DF01AC03030110008D4C00000500E901B40303011000854E00000500F301BC03030110004C4F000005000002C803030110009B4F000005000702D10303011000D34F000005000D02DA03000000002052000005001402E20303011000A652000005001902E20303011000B653000005002002EB03030110001255000005002402F303030110007E55000005002A02FC0303011000A652000005002B02FF03030110002D56000005003202080403011000F156000005004202100403011000F1560000050054021904030110006D59000005005D02210403011000795A000005005F02250400011000925B0000050066022D0403011000335C0000050069023404030110007E55000005006A02360403011000815C000005006B02380403011000EA5C000005006C023A0403011000445D000005006D023C0403011000A75D000005006E023E0403011000B95E0000050073024504030110000D5F000005007D024E04030110006A5F000005008802560403011000335C000005008F025E040301100076600000050090026004030110006A5F000005009A026A0403011000A65200000500A402720403011000A96200000500AB027B0403011000876300000500B402840403011000A65200000500BF028D0403011000B65300000500C602960403011000BD6500000500CA029E04030110008A6600000500CD02A60403011000986700000500D902AE0403011000335C00000500E702B904030110007E5500000500E802BB0403011000C36900000500E902BD0403011000EB6900000500EA02BF04030110002A6A00000500EB02C10403011000526A00000500EC02C30436008B0B130126008E0B17012600960B1B0126009F0B1B012600A40B1B012600B20B1B012600BC0B1B012600C20B1B012600CE0B1B010606F70B24015680FF0B27015680040C270156800B0C27015680120C270156801B0C27015680210C27015680280C27015680320C270156803B0C27015680430C270156804F0C27015680540C270156805B0C27015680650C27015680740C270156807B0C27015680890C270156808F0C27015680990C270156809F0C27015680A60C27010606F70B24015680AD0C55015680B50C55015680BE0C55015680C80C55015680CD0C55015680D10C55015380DD0C1B015180EF0C1B015180040D1B015380220D160253802D0D16025380390D16025380450D16025380520D16025380610D240153806A0D24015380740D240133007D0D2D0251801F0E1B013100470E2D030100580E2D032600AE0E94030100FA0EEB030100100FEF032600270F1B012600270F1B010100620F1B0101007D0F36043600A10F36042100A70F43043600A10F85042100021055012100A70F43045180EF0C1B015180E1101B015180F4101B0151800B111B01518027111B0151803D111B01518054111B01518068111B015180040D1B01518082111B0151809D111B012100D81029082100B5112E082100BE11330836009512C00836009F12C0083600AD12C0083600BC12C0083600C612C0083600D112C0083600DB12C0083600F212C00833000A13C00833001313C00833002913C0082100B21329085180DF131B015180F9131B0131001314200A0606F70B16025680FF0B390B56802F15390B56803B15390B56804515390B56805015390B56804214390B56805915390B2100D810660B2100BE113308518030161B0151803C161B01518047161B01010052161B010606F70B160256809416790D56809C16790D5680A916790D5180AF167E0D5180C4167E0D5180D9161B015180EB161B015180FC161B0131000D172D0231004217F00D2100B213660B2100EC171B015180EF0C1B012100A0189D0E2100D810660B0100AD18B50E5180A1191B015180B5191B015180C9191B015180DC19960F5180EF19960F5180021A1B015180111A1B015180261A1B015180361A1B015180451A1B0131000D172D023100591AB2103100691AB6100606F70B160256801D1B13115680221B13115680291B131156802F1B13115680341B131156803A1B13115680401B13115680461B131156804B1B13115680120C13115680521B13115680591B13115180EF0C1B012100D810660B2100611B3B1101006C1BB50E01007A1B401101008A1BB50E0606F70B16025680A71C40115680AC1C40115680B21C40115180D61C16022100611B3B110100E81CE8110100F01CED110100FD1CB50E01003D1EB50E3100991EB2102600A31E1B0126009F0B1B010100001FFE120100171F03135180EF0C1B0131003E1F371331004A1F37133100571F37133100681F37133100761F371331008F1F37133100AA1F37133100BB1F371351800E20160231001E20B21001002A20B210010031201602210079208E1321007F20961301008820B50E21008D23E3130100190E160221002624091421002C24160221003224160221002624091421002C2416022100372416020100190E160236004F0C26145180AD2416022100430496130100C224B50E0100CA24B50E0100D62450140100DE248E130100CA24B50E0100C224B50E0100D62450142100F02409140100F72416020100FD24160236004F0C5E140100CA24B50E0100C224B50E0100D624960F01000325160201000A2516020100F72416022100F0241B010100FD2416025180D61C160236004F0C6F142100580E74140100D624960F01004325960F0100CA24B50E0100C224B50E01000325160201000A2516020100F7247E0D0100DE247814568048251B01568059251B01568065251B01568072251B0156807E251B01568089251B0156809925960F5680AC25960F5680BD25960F5680D125960F5680E325960F5680F625960F56800826960F56801C26960F5680EF19960F56803326960F56804626960F56805826960F56806D261B01568082261B01568095261B010100A9261B012100A0189D0E5180C0261B015180D7261B015180F0261B01518008271B0151801B271B01518032271B015180D61C16020100E81CE8110606F70B1602568093278A1656809D278A165680AC278A160100B5271B01518005281B015180EF0C1B0131001128F00D01003F28BA165180EF0C1B01518066281B0151807A281B0151\
-8095281B010606F70B16025680FF0BBA1656802429BA1656802D29BA1601005B291B01010072291B010100171F1B0156808D29960F5680A229960F5680B529960F5680E325960F5680F625960F5680CA29960F56800826960F56801C26960F5680DE29960F5680F229960F5680042A960F5680162A960F56802B2A960F56803D2A960F56804D2A960F56806D261B01568082261B015680622A1B015680752A1B015680862A960F5680A42A1B015680BF2A1B015680E22A1B015680032B960F5680102B960F5680262B960F56803D2B960F5680552B960F5680692B960F56807E2B960F5680942B1B015680AB2B1B015680BB2B960F5680C62B960F5680DA2B960F5680EF2B960F5680062C1B0156801B2C1B013600951203133600292C03130606F70B16025680FF0B38185680792C38185680862C38185680912C38185680230B381856805915381821009D2C3D180100A32C16021100BA5C643611001D5D64360100352D70180100732D37135680942D1B012600E02D1B012600EE2DF5180606F70B16025680002EF5185680092EF5185680142EF51856801E2EF5185680282EF5182100322E0F1921003C2E18192100482E561921003C2E18193600A10F37132600522E1B012600A31E1B0126005C2E1B012600692EB50E21002D07AA190606F70B16025680262FAA1956802D2FAA195680372FAA192100372F16020100402F16025180462F16025180522F160231005F2FDA1901006A2FDA190100312016020100822FB50E0100962FB50E21001309EA192100AB2F33080100F330B50E0100FF30AA1901000B311B0101000F311602010018311B0121001309EA192100AB2F3308010020311B01010032311B0101004331B50E21000325160221000A2516022100F7247E0D2100E3329B1A2100FE32E41A21003433131B21004233181B21004F33181B010051356F1B01007435741B01009435791B0100B5357E1B0100CE35831B2100FB35FD1B51800B361B01518024361B01518039361B0151804C361B0131006536851D31007636851D31008536851D31009A36891D3100B136891D3100CD36891D2600ED28971D26009F0B1B012600D806371326007B10851D2600E936891D2600F0369C1D2600F736A01D26000137B50E51800D371B0121002437771E26003437821E26004737861E2600C0218C1E26005037851D260058378C1E26006137851D2100A237B61E2100AE37C81E2100B837D91E2100C237E51E2100CC37F51E518028381B0126003B38501426009F0B371326002E1F661F538065381B01518079381B0151808C381B01518096381B015180B0381B015180C8381B013300E4381B013300FB381B01330012391B0121007C30B50E01001309EA192100A0189D0E5180EF0C1B0151809D111B015180843A1B0131009A3A37133100AC3A37133100BD3A37132100611B3B112100D81029082100D81083232100A0189D0E5180EF0C1B012100611B3B112100D810660B0100402F16020100063BB50E5180EF0C1B012100D810660B0100653B3E245180843B1B015180943B1B011100BA5CA01D01001347661F0100874716020100924716020600A74777280600423C200A0600B147200A0600353D851D0600BD47851D0600CD47EF030100134750140100874716020100924716020600A74777280600423C200A0600B147200A0600F848851D06000949EF030600913D371301001347BF2A0100874716020100924716020600803D200A0600764B200A0600873DEA2A0600824BEA2A0600914BEF0306009E4B16020600AA4BC00801001347200A0100874716020100924716020600803D200A0600764B200A0600873D632B0600824B632B0600D04DEF030600DD4D16020600E94DC00801001347200A0100874716020100924716020600803D200A0600764B200A0600A04EBF2A0600B04E200A0600C24E200A0600CE4E200A0600E04E872B0600FB4EA02B0600164FA02B0600314FA02B01001347200A0100874716020100924716020600803D200A0600764B200A06006E4F200A0600804FA02B01001347200A0100874716020100924716020600803D200A0600764B200A0600B64FEF0301001347C0080100874716020100924716020600493CEF030600C850EF030600D45016020600E150C00813007252232E1300D654232E1300EA54232E1300FE54232E13002360232E010013471B010100874716020100924716020600A7476F2E060042531B01060062539D0E06006D531602010013471B010100874716020100924716020600A7476F2E010013471B010100874716020100924716020600A747273106002955FE12060034552C310600C83E5014010013471B010100874716020100924716020600A7472D34060042531B01060062539D0E06006D53160201001347C0080100874716020100924716020600A74738340600703EE81106003D56E81106004A561602060056568A1606006C56B50E06007D56960F060086561B010600E94DC008060092567E0D06009F5616020600AD5616020600BB561B0101001347C0080100874716020100924716020600A747A8340600703DAD3406000157AD340600CD47BB3406000C573B1106001D57031306002957B50E06003D57B50E06004A57371306005857CA34060064571B0106007157371306008057CF3406008C571B0106009857D7340100134703130100874716020100924716020600703D200A06000157200A0600CD47EF0306008F58C00806009B5837130600A747383506008059891D06009859661F0100134737130100874716020100924716020600033F971D06002D5B971D0600395B8F350600A74794352100D35B50142100E35BAF352100F15BB3350600523D1B010600593D1B010600523D1B010600593D1B0106003A3F371301001347CF340100874716020600A747CA340600355ECF340600E04ED734010013471B010100874716020100924716020600533F1B010600CC5E1B0106005A3F1B010600D85E1B010600E95E1B010600F45E1B0106006253EA36010013471B010100874716020100924716020600803D1B010600764B1B0106009D3E960F06001D5F960F0600255F16020600325F160206003D5F16020600485F1B010100134737130100874716020100924716020600A7470D370600033F971D06002D5B971D0600785F9D0E060065609B380100134737130100874716020100924716020600A747DA380600033F971D06002D5B971D06008460F51E06009360371306009E60DF380600B760E8380100134737130100874716020100924716020600033F971D06002D5B971D0600D5601B010600E5601B010600EE6031390600FD6031390600A7473539010013471B010100874716020100924716020600A747D73D060042531B01060062539D0E06006D53160201001347C0080100874716020100924716020600A747EE3D0600703DAD3406000157AD340600B962BB340600C662C0080600D262F33D0100134703130100874716020100924716020600733C63400600976363400600A36337130600B263B50E0600C36368400600D56373400600A7477D400600E6638240010013471B010100874716020100924716020600A747FB40060042531B01060062539D0E06006D531602010013471B010100874716020100924716020600A747FB4006008059891D0600D0658C1E06009859661F0100134737130100874716020100924716020600033F971D06002D5B971D0600AA66C2420600CB66C7420600EF66CC4206001567D14206003767D64206005967DB420600A747E04201001347194301008747160201009247160206001A3F244306006768244306007468160206008168194306008C682D4306009C6819430600A76819430600A747E0420600B26836430600CD6836430600E8683F43060035417743060035417743060040408F43060040408F4306003541774306004041C643D020000000008618F10B1E010100FE21000000009118E2368D1D02003122000000008618F10B310202001922000000009118E2368D1D0200000000000000C6058E0D35020200000000000000C6058E0D460204003C2200000000E6018E0D560205008C2200000000E6018E0D67020600F822000000008100A20D790208006C24000000008100B00D8C020A001028000000009100BD0DA0020D005428000000009100C90DA80210009C28000000008100D50DB60212001429000000009100E80DBE021400282A000000009100F70DC40215009A2A000000008618F10B31021600A22A000000008618F10B31021600000000000000C60D050ECA021600000000000000C6050F0ECE021600000000000000C6050F0EDE021700AA2A00000000E609050ECA021800BC2A000000009100660E31031800442B000000009100730E31031B00302E0000000091007F0E44031E00E02E0000000091008A0E56032000082F000000009100950E56032100352F00000000E6010F0E5C032200562F00000000E6010F0E6D032300742F0000000084000F0E7E032400D02F00000000E601A10E31022500DF2F00000000C401A10E8F0325000530000000008618F10B31022600EF2F000000009118E2368D1D26001830000000008618F10B980326002630000000008618F10B9D0327003430000000008618F10BA30328003D30000000009608B30EA90329004630000000009608B30EB0032A00503000000000C600BF0EB7032B00713000000000C600C80EBB032B008330000000008608D40EBF032B008B30000000008608DD0EC4032B009430000000008608E60ECA032C009C30000000008608F00EDA032C00A530000000008618F10B31022D00AD30000000008618F10B98032D00B630000000009608B30E13042E00BF30000000009608B30E19042F00C73000000000C600BF0EB7033000CF3000000000C600C80EBB033000E130000000008618F10B98033000EA30000000009608B30E1F043100F330000000009608B30E25043200FB3000000000C600BF0EB7033300033100000000C600C80EBB03330015310000000086082C0FB70333001D310000000086083A0F980333002631000000008608480F2B0434002E31000000008608550F300434003731000000008618F10B310235003F31000000008618F10B9D0335007031000000008618F10B470436001432000000008608AD0F50043A005C32000000008608B60FBB033A007D32000000008608C20FBB033A009232000000008608CA0FBB033A00B632000000009608B30E55043A00C532000000009608B30E5B043B00CD32000000009608B30E61043C00E432000000009608B30E68043D00EC3200000000C600BF0EB7033E004C33000000008600D20F6F043E007433000000009600DE0F5B043E009833000000009600E40F74043F00123400000000C600C80EBB0341002434000000009118E2368D1D41003634000000008618F10B890441005A340000000083080A106F04430062340000000086081310910443006A340000000086081C109604430074340000000086082510BB0344007E34000000009608B30E9B0444008634000000009608B30EA10445008E34000000009608B30EA70446009634000000009608B30EAE044700A03400000000C600BF0EB7034800F434000000008600D20F6F0448001C35000000009600DE0FA10448004035000000009600E40FB5044900AF3500000000C600C80EBB034B00C1350000000091002F10BD044B00D63500000000E6013B10C2044C00E83500000000E1014910CA044C00F535000000009118E2368D1D4C00000000000000C6058E0DDE044C00000000000000C605E80DEA044E000000000003008618F10BEF044E00000000000300C6018B10F5045000000000000300C601AD10FB045100000000000300C601B910050554000000000003008618F10BEF045500000000000300C6018B100B055700000000000300C601AD1012055900000000000300C601B91005055D000000000003008618F10BEF045E00000000000300C6018B101D056000000000000300C601AD1022056100000000000300C601B910050564000000000003008618F10BEF046500000000000300C6018B102B056700000000000300C601AD1031056900000000000300C601B9103B056D00000000000000C60DC31041056E00000000000000C605D01047056E00000000000000C605D01057056F00000000000000C605D01069057100000000000000C605D0107E0572000836000000008618F10B410874009C3600000000E109C61141057500A43600000000E601D01048087500DC3700000000E601D01059087600443900000000E601D0106C087800683900000000E601D01082087900743900000000810014129A087B00043A00000000810021129A087D003C3B0000000081002F129A087F00883C0000000081003C12AD088100F03C0000000096003F13CA088300FE3C0000000096003F13D60884000E3D0000000096003F13E4088700173D0000000096004F13CA088800253D0000000096004F13E4088900303D0000000093006013F2088A00503D0000000096006013CA088B005E3D0000000096006013E4088C00673D0000000096006E13F2088D00703D000000009118E2368D1D8E00000000000000C60D7D13FE088E00000000000000C60DC31041058E00000000000000C605981306098E00000000000000C605981310099000000000000000C605981318099100000000000000C60598131E099200000000000000C605981326099400000000000000C60598132F099600000000000000C605981336099700000000000000C60598133B099800000000000000C6059D1342099A002C3E000000008418F10B41089B00000000000000C60D7D13FE089C00493E00000000E609C31041059C00513E00000000C601981306099C005C3E00000000C601981310099E00933E00000000C601981318099F00A03E00000000C60198131E09A000D13E00000000C60198132609A200DC3E00000000C60198132F09A400133F00000000C60198133609A500203F00000000C60198133B09A600543F00000000E6019D134209A800DC3F000000008100BB135109A900000000000000C405C6136909AC00000000000000C405D3137309AC009840000000008418F10B4108AC00A14000000000C400D3137C09AD000000000003008618F10BEF04AD00000000000300C6018B108609AF00000000000300C601AD108D09B000000000000300C601B9109709B300B04000000000960021142E0AB40034410000000096002D142E0AB500B84100000000960036143E0AB60094420000000096004214560AB80008430000000096004B14740ABA0011430000000096004B149A0ABB006C4500000000910056149A0ABD00904500000000960069142E0ABF0014460000000096007114C80AC0001D460000000096007114E70AC100F0470000000091007C14E70AC30014480000000096008F14C80AC500604C0000000091009B14C80AC6007D4C000000009600AF14C80AC7005C4E000000009100C214C80AC800794E000000009300DD14C80AC9001C50000000009100E914C80ACA00A852000000009100FD140C0BCB00C85200000000910011150C0BCC009C530000000091002115280BCD004D54000000009118E2368D1DCE00000000000000C6050F0E570BCE005C54000000008618F10B6B0BCF00DC5400000000E6010F0E720BD00024550000000081000F0E820BD10018580000000081006315960BD40094580000000081008815AB0BD700E4580000000081008815C30BDB003C590000000081008815E30BDF00305A0000000081009815F90BE300000000000000C605A415000CE400000000000000C605AC15150CE700000000000000C605A415290CEA00000000000000C605AC153F0CED00000000000000C605A415290CF000000000000000C605AC153F0CF300A85A00000000E101B515000CF600C95A00000000E101F215150CF900E65A000000008418F10B3102FC00EE5A000000008418F10B3102FC00F85A00000000860860162B0DFC00405B0000000086086B16310DFC00885B00000000C600A415380DFD00E45B00000000C600AC154F0D00010C5C0000000091007616650D03016C5C00000000810086166D0D05018E5C000000008618F10B31020601A45C00000000C600A415380D0601005D00000000C600AC154F0D0901285D0000000093005217650D0C01CC5D00000000810065176D0D0E01435E000000008618F10B31020F01175E000000009118E2368D1D0F01000000000000C60D8B17F40D0F01000000000000C60D7D13FE080F01000000000000C60D9F17FE080F01000000000000C60DC310FA0D0F01000000000000C605B117000E0F01000000000000C605B117070E11014B5E000000008418F10B6B0B1201000000000000C60D8B17F40D1301000000000000C60D7D13FE081301000000000000C60D9F17FE081301685E00000000E609C310FA0D1301705E00000000C601B117000E1301E45E00000000C601B117070E1501000000000000C405D517180E1601000000000000C405DF17220E16015C5F000000008418F10B6B0B1601655F00000000C6088B17F40D17016C5F00000000C400D5172C0E1701000000000000C6058E0D370E1701795F000000008618F10B31021901825F000000008618F10B98031901A65F000000008608F717B7031A01AE5F0000000096000618440E1A01B85F00000000960006184A0E1C0114600000000096001718510E1F01D8600000000091002918570E21012A65000000009600DE0F5C0E220132650000000096083818630E2301436500000000960838185C0E24014B6500000000E10144186A0E2501726500000000C600BF0EB70327017C6500000000C6008E18780E2701CD6500000000C600C80EBB032801000000000000C6058E0D7D0E2801000000000000C6058E0D8E0E2A01DF65000000008618F10B31022B01EC65000000008618F10B6B0B2B01FF65000000008618F10BA10E2C01446800000000C6087D13FE082E01346900000000C6089F17FE082E01516900000000C400DF17AA0E2E015E69000000008618F10B6B0B2E017B69000000008608BC18B80E2F018369000000008608CF188F032F018C6900000000E6018E0DBC0E3001D06900000000E6018E0DCC0E3101E06C00000000C401E218DE0E3301206D00000000C401F118E50E3501306D00000000C4010C19EC0E3701846F00000000C4011819F60E3A01916F00000000C4012E19F60E3B019E6F00000000C4014419F60E3C01AC6F00000000C401BD0DE50E3D01E4700000000081004D19FC0E3F011F7100000000C4015719070E41013C710000000081006419030F420108720000000091006F19090F4301B87200000000C4018319120F4501F072000000008618F10B6B0B4601FC72000000009600781ABD104701DA7300000000C4004419F60E4B01E77300000000C4001819F60E4C01FC7300000000C4002E19F60E4D01097400000000C400E218DE0E4E013D7400000000C400F118E50E50015874000000009600921ACA1052012775000000009600A61AD21054013475000000009600A61ADA1056013C76000000009118E2368D1D5901000000000000C605BC1AE3105901000000000000C605C61AF0105C01000000000000C605D61AFC105F01000000000000C605E21A06116201D876000000009100F01A570E63012C78000000009100001B570E64018079000000009100111B0C1165018A82000000008618F10B310266019282000000008618F10B6B0B6601BA82000000008608991BB80E6701C282000000008608AB1B8F036701CB82000000008608BD1B45116801D382000000008608D11B4B116801DC82000000008608E51BB80E6901E482000000008608F81B8F036901ED820000000086000B1C31026A01FC8200000000E6018E0D52116A01408300000000E6018E0D62116B010886000000008100291C74116D019C87000000008100321C9311720100880000000081003D1C9B117501D4880000000081004C1CE50E7901948A0000000096005B1CAB117B019F8A0000000096005B1CB2117D01AC8A0000000091005B1CBA118001DB8B000000009600661CAB118401E68B000000009600661CB2118601F48B000000009100661CBA118901000000000000C60DB61CBB038D01000000000000C60DC11CBB038D01000000000000C60D050ECA028D01000000000000C6050F0EC9118D01000000000000C6050F0ED9118E013A8D0000000086080D1DB80E8F01428D000000008608211D8F038F014B8D000000008608351DB80E9001538D000000008608501D8F039001208F0000000086086B1DFE089101408F0000000086087C1DF6119101C08F00000000E609B61CBB039201CD8F00000000E609C11CBB039201DA8F00000000E609050ECA029201E88F0000000081000F0EFF1192011C910000000081008D1D121294011093000000008100951D2A129701B095000000008100A71D38129801B496000000008100B91D2A129B017098000000009100CC1D41129C01F898000000008100D61D4A129D01AC99000000008100E41D55129F01E89C000000008100EC1D7212A301719D000000009100F51D8312A501949D000000008600041E8A12A601449F000000009100111E9112A70190B3000000009100221E9612A80188B4000000009100321E9612A901E0B400000000E6010F0E9B12AA010CB500000000E6010F0EAC12AB0136B500000000E601A10E3102AC0145B500000000C401A10E8F03AC0155B5000000008618F10B3102AD0174B5000000008618F10B9803AD01EFB5000000009608AA1EBC12AE0109B6000000009608B61EBC12B00115B600000000C600BF0EB703B20144B600000000C600C80EBB03B2019CB600000000C6008E18780EB201ABB60000000086008E18C612B301B5B60000000086008E18CD12B401F4B6000000009118E2368D1DB60113B7000000008608D81EDA12B6011BB7000000008608E21EE012B60124B7000000008608EC1EE712B7012CB7000000008608F61EF212B70138B700000000C600BF0EB703B8019CB7000000008618F10B3102B801000000000000C605341F1E13B801A4B700000000E601341F3C13B901FCB7000000008100CD1F5713BA0168B8000000008100DC1F5713BC01E4B8000000008100EF1F5713BE01D8B9000000008100FE1F5713C00171BB000000008618F10B3102C201ECBA000000009118E2368D1DC20179BB000000008618F10B3102C2018CBB000000008618F10B7413C201A0BB0000000086083620BB03C301A8BB00000000860041203102C301B4BB00000000860047207913C301FCBB00000000860047208013C40164BC0000000086005C208713C50184BC00000000810063207413C601DBBC00000000C600BF0EB703C701EFBC000000009118E2368D1DC701FCBC000000008618F10B9E13C70128BD00000000E1019320A813C8018CBD00000000E101C720AE13C90193BD00000000E101F9207413CB019ABD0000000086081C10B513CC01B0BD00000000E1092F21B513CD01C6BD00000000E1095C21AE13CE01CDBD00000000E1019221BB13D001D4BD00000000E101C4213102D101DCBD00000000E101F421C113D10138BE00000000E1013022C713D2014DBE00000000E1096122BB03D40160BE00000000E6099522B80ED40163BE00000000E101A422C113D4016ABE00000000E101DC22CF13D50172BE00000000E1014910CA04D5017CBE0000000086001423D813D501F4BE0000000081001F233102D60122BF000000008618F10BEC13D60138BF00000000E6099623F713D7018DBF00000000E109A223FC13D7019CBF00000000E601CD23B80ED701CABF00000000E601D6233102D701D3BF00000000E101DC233102D701D8BF000000008618F10B1114D701A4C000000000E601BF20A813DA017AC100000000E101C720AE13DB0181C100000000E101F9207413DD0188C10000000086081C10B513DE019DC100000000E1092F21B513DF01B2C100000000E1095C21AE13E001B9C100000000E1019221BB13E201C0C100000000E101C4213102E301C7C100000000E6012722C113E301D8C100000000E6015C20C713E40188C200000000E6092510BB03E60190C200000000E6099522B80EE60193C200000000E101A422C113E6019AC200000000E6013B10CF13E701B3C200000000E1014910CA04E701CCC2000000008618F10B1114E701F4C200000000E6099623F713EA0144C300000000E109A223FC13EA0151C300000000E601CD23B80EEA017FC300000000E601D6233102EA018FC300000000E101DC233102EA01000000000000C60D3B24B80EEA01000000000000C60D4B24B80EEA01000000000000C60D5A24BB03EA01000000000000C6056824F713EA01000000000000C6056D24F713EA01000000000000C60571243102EA01000000000000C6057C241D14EA0191C3000000009600A6242F14EA019CC3000000009600A6243F14EB01000000000000C60D3B24B80EED01000000000000C6056824F713ED01000000000000C6056D24F713ED01000000000000C60D4B24B80EED01000000000000C60D5A24BB03ED01000000000000C60571243102ED01000000000000C6057C241D14ED01D1C300000000E601A10E3102ED01000000000000C405A10E8F03ED01EDC3000000008418F10B3102EE01E0C3000000009118E2368D1DEE01F5C3000000008618F10B9E13EE0114C400000000C6083B24B80EEF0122C400000000C6006824F713EF0130C400000000C6006D24F713EF014AC400000000C6084B24B80EEF0158C400000000C6085A24BB03EF0178C400000000C60071243102EF019CC400000000C6007C241D14EF01D0C4000000008100E4243102EF0140C500000000C400A10E8F03EF0150C5000000008618F10B5414F0017CC500000000C6085A24BB03F101A1C500000000C6084B24B80EF101AFC500000000C60071243102F101C0C500000000C6007C241D14F1010AC600000000C6083B24B80EF10118C600000000C6006824F713F10126C600000000C6006D24F713F10158C6000000008100E4243102F101F9C600000000C400A10E8F03F101000000000000C60DB61CBB03F201000000000000C60DC11CBB03F201000000000000C60D050ECA02F201000000000000C6057C24B703F201000000000000C6057C248713F201FBC6000000008618F10B9803F30121C700000000E609B61CBB03F40129C700000000E609C11CBB03F40131C700000000E609050ECA02F4013AC700000000E6095A24BB03F4015FC700000000E6094B24B80EF4016DC700000000E60171243102F4017DC700000000E1010F256314F40188C700000000E6017C24B703F401D2C700000000E6017C248713F40111C800000000C6093B24B80EF5011FC800000000C60168246B14F5012DC800000000C6016D246B14F50158C8000000008100E4243102F501B4C800000000810037253102F5013DC900000000E601A10E3102F5014CC900000000C401A10E8F03F5014EC9000000009118E2368D1DF6015BC9000000008618F10B7D14F60172C900000000E609B61CBB03F7017AC900000000E609C11CBB03F70182C900000000E609050ECA02F7018AC900000000E6095A24BB03F701AAC900000000E6094B24B80EF701B8C900000000E60171243102F701DBC900000000E1010F256314F701E4C900000000E6017C24B703F70118CA00000000E6017C248713F70140CA00000000C6093B24B80EF8014ECA00000000C60168246B14F8015CCA00000000C6016D246B14F801C0CA000000008100E4243102F80114CB00000000810037258314F8018BCB00000000E601A10E3102FA019ACB00000000C401A10E8F\
-03FA01AACB000000009118E2368D1DFB01BBCB000000008618F10B3102FB01C3CB000000008618F10B3102FB01CBCB000000008618F10B3102FB01D3CB000000008618F10B9803FB01E2CB000000008608AE26B703FC01EACB000000008608B7269803FC01F3CB000000008618F10B3102FD0100CC000000008618F10B4108FD0113CC000000008618F10BFE14FE0158CE00000000C6087D13FE08000275CE00000000C400C613071500027CCE00000000E609B61CBB03000289CE00000000E609C11CBB03000296CE00000000E609050ECA02000208D50000000084000F0E2E1600022CD500000000910047278312010262D6000000009100F51D8312020284D600000000910061274016030250D90000000091006C274E160402FCDB000000009100772755160502F0DC00000000910084274E16090241DD00000000E6010F0E69160A0254DD00000000E6010F0E7A160B0267DD00000000E601A10E31020C0276DD00000000C401A10E8F030C0286DD000000008618F10B31020D0299DD000000008618F10B31020D02A1DD000000008618F10B98030D02B0DD000000008608C727B7030E02B8DD000000008608DD2798030E02C1DD000000008618F10B31020F02C9DD000000008608212892160F02D1DD000000008608302898160F0274E600000000E601341F9F161002AEE6000000008618F10B3102110298E6000000009118E2368D1D1102B6E6000000008618F10B31021102B8EA00000000E601341F3C131102DCEA000000008618F10B31021202000000000000C605C22880171202000000000000C605DE2888171402000000000000C605F8288F171502000000000000C605102998171602000000000000C6051829A5171702E4EA00000000C601C2288017180235EB00000000C601DE2888171A0247EB00000000C601F8288F171B024AEB00000000C601102998171C024DEB00000000C6011829A5171D0250EB000000008618F10B31021E0258EB00000000C600C22880171E026CEB00000000C600DE2888172002D8EB00000000C600F8288F172102CCED00000000C600102998172202F0ED000000008618F10B31022302F8ED000000008618F10B3102230200EE000000008618F10BB61723021DEE0000000086083729B703260225EE0000000086084129980326022EEE0000000086084B29B703270236EE0000000086085329980327023FEE000000008608EC1EB703280247EE000000008608F61E9803280250EE00000000E6018E0DBD172902FCEF00000000C600BF0EB7032B0260F000000000C6008E18780E2B02C4F000000000C600C80EBB032C0221F1000000009600392C10182C0231F1000000009600472C1E182F023AF1000000009600592C1E18300243F10000000096006A2C1E1831024CF10000000096006E132C1832026DF1000000008618F10B3102330255F1000000009118E2368D1D330275F10000000086082510BB03330282F1000000008608AD2CB80E330292F1000000008600BA2C46183302B0F100000000860068244D183402E0F10000000086006D244D18340234F2000000008600BF2C5318340284F2000000008600CE2C53183502E0F2000000008600E02C58183602B0F3000000008600ED2C5818380278F4000000008600F72C5E183A02B1F4000000008600412031023B02C0F4000000008600032D65183B02F8F4000000008600102D6B183D0233F5000000008618F10B31023E02D1F2000000009100A75C5D363E02A3F30000000091000D5D5D363F0246F50000000086083E2D791840024EF50000000086084A2D7F18400258F50000000086081C106B18410280F5000000008608892186184202A7F5000000008600BF2C53184402BFF5000000008600CE2C53184502D7F5000000008600562D8C184602F4F5000000008600662D8C1848027CF700000000E6013B1093184A0298F700000000E1014910CA044A02A0F7000000008618F10B31024A02A8F9000000009600A72DDC184A02CCF9000000009600B42DE6184C02C4FB000000009100C32DEB184D02E8FB000000009600CD2DE6184F02FEFB000000008618F10BFA18500208FC000000008618F10B0119510284FE00000000C600102998175302A8FE000000008100F52D0919540294FF000000008618F10B23195502C6FF00000000E609B61CBB035702D3FF00000000E609C11CBB035702E0FF00000000E609050ECA025702F0FF00000000E6010F0E37195702180001000000E6010F0E471958023E0001000000E601A10E310259024500010000008618F10B5F195902780001000000E6018E0D7D0E5B02A00001000000E6018E0D8E0E5D02C600010000008618F10B73195E02D400010000008618F10B98035F02E000010000008618F10BB6176002EC00010000008618F10B791963025801010000008608752EB80E67026401010000009100981581196702D002010000009300812EE6186802C803010000008600932EB70369021E04010000008600A22EB70369024F0401000000C600BF0EB70369026B0401000000C6008E18780E690284040100000086008E185E186A02DC0401000000C600C80EBB036B025605010000009608AA1E87196B027B05010000009608B61E87196D02880501000000E601B22E91196F02C905010000009118E2368D1D7002D605010000008618F10B31027002DE05010000008618F10B98037002E705010000008618F10B98197102F105010000008618F10BA0197302FB05010000008618F10BAF1975020A06010000008618F10BB61976021A06010000008618F10BBE1978022B06010000008618F10BA0197B0235060100000086080E2FC9197D02000000000000C605C021780E7D02000000000000C605D522D5197E023D06010000008618F10B74137F02600601000000E601C021780E8002810601000000E601D522D5198102940601000000E601C021780E8202480701000000E601D522D5198302DA07010000008618F10B31028402CD07010000009118E2368D1D8402000000000000C60D702FDE198402F007010000008618F10B310284021808010000008618F10BEF1984022608010000008618F10BFC1985023408010000008618F10B0C1A86024308010000008618F10B1C1A88025208010000008618F10B2F1A8A026108010000008618F10B3F1A8C028508010000008608B82FB80E8E028D08010000008608D02F8F038E029608010000008608E82FB80E8F029E0801000000860801308F038F02A7080100000086081A30DE199002AF080100000086082730521A9002B70801000000E1093330DE199002C008010000008618F10B31029002E808010000008618F10BEF199002F608010000008618F10BFC1991020409010000008618F10B0C1A92021309010000008618F10B1C1A94022209010000008618F10B2F1A96023409010000008618F10B3F1A980281090100000086085D31C9199A0289090100000086086D31AF199A0292090100000086087D31BB039B029A090100000086088A3174139B02A3090100000086089731B80E9C02AB09010000008608A7318F039C02B409010000008608B731B7039D02BC09010000008608BF3198039D02C509010000008608C731B7039E02CD09010000008608D33198039E02D6090100000086081A30DE199F02DE090100000086082730521A9F02E609010000008608DF31B7039F02EE09010000008608F53198039F02F7090100000086080B32B703A002FF0901000000860820329803A002080A0100000086083532B80EA102100A01000000860853328F03A102190A01000000E1093330DE19A202210A010000008618F10B701AA2022D0A010000008618F10B761AA402620A010000008618F10B7E1AA8026F0A010000008618F10B871AAB02A60A010000008618F10BA019B002C60A010000008608B61CBB03B202CE0A010000008608050ECA02B202D60A010000008608C11CBB03B202E00A010000008600D232921AB202390B010000008618F10BA41AB502480B010000008618F10BAF1AB602580B010000008618F10BBB1AB802690B010000008618F10BA019BB02730B010000008608E932CA1ABD027B0B010000008618F10B3102BD02830B010000008618F10B9803BD028C0B010000008618F10B9819BE02960B010000008618F10BA019C002000000000000C605F932DE1AC202A00B010000008618F10BEE1AC302540C01000000C601F932DE1AC402000000000000C60D0C33F81AC502000000000000C605F932FE1AC502000000000000C605F932051BC6027C0C010000008618F10B231BC802C40D01000000E6090C33F81AC902CC0D01000000C601F932FE1AC902F40D01000000C601F932051BCA02540E0100000086085D332E1BCC025C0E0100000086087333341BCC02650E01000000860889333B1BCD026D0E0100000086089C33411BCD02760E010000008608AF33481BCE027E0E010000008608C3334E1BCE02870E010000008608D733551BCF028F0E010000008608E3335B1BCF02980E010000008608EF33621BD002A00E010000008608FF33681BD002A90E01000000E1010F348017D102C20E01000000E10152348817D302DA0E01000000E10192348F17D402F20E01000000E101DB349817D5020A0F01000000E1011435A517D602220F010000008618F10B3102D7020000000003008618F10BEF04D702000000000300C6018B108017D902000000000300C601AD10A61BDB02000000000300C601B910B21BDF020000000003008618F10BEF04E002000000000300C6018B108817E202000000000300C601AD10B81BE302000000000300C601B910B21BE6020000000003008618F10BEF04E702000000000300C6018B108F17E902000000000300C601AD10C31BEA02000000000300C601B910CE1BED020000000003008618F10BEF04EE02000000000300C6018B109817F002000000000300C601AD10C31BF102000000000300C601B910D61BF4020000000003008618F10BEF04F502000000000300C6018B10A517F702000000000300C601AD10E21BF802000000000300C601B910F11BFB022A0F010000008618F10B061CFC02380F010000008618F10B0E1CFD02A40F01000000E601C2288017FE02FC0F01000000E601DE2888170003BC1001000000E601F8288F170103B01301000000E601102998170203D41301000000E6011829A51703032C14010000009118E2368D1D0403141501000000C600C22880170403641501000000C600DE2888170603B11501000000C600F8288F170703D41701000000C600102998170803F817010000008618F10B310209030000000003008618F10BEF040903000000000300C6018B10911D0B03000000000300C601AD1031050D03000000000300C601B910B21B11030018010000008618F10BA51D12036018010000008618F10BAF1D1403C818010000008618F10BBC1D17033019010000008618F10B73191A03021B0100000086086E37901E1B03201B0100000086081C10991E1B03481B0100000093007B37A01E1C03621B0100000093008937A01E1D03941B010000008618F10BFA1E1E03E81B0100000086001829A5171F03FC1B010000008600D537011F2003481C010000008600E2370D1F2103881C010000008600EB371B1F2203F01C010000008600F937241F23032B1D0100000086004120310224035C1D0100000081000638311F240340210100000081000F38471F26036C230100000086001C385E1F2803BA23010000008618F10BBB132903D423010000008618F10B691F2A03F523010000008618F10B701F2C030B24010000008618F10B791F2E03282401000000C600BF0EB7033103BC2401000000C6008E18780E3103E4240100000086008E18831F3203442501000000C600C80EBB033303A325010000009608AA1E8E1F3303BD25010000009608B61E8E1F3503C9250100000086004538B7033703D825010000009600BF0EA01F37030E280100000086005338A51F38032228010000008618F10BB32239033128010000008618F10BBB223B0358280100000083002939C3223D03F0280100000083004639C9223E03F82A0100000083005839D0224003AD2B0100000086006739DC224503C82B0100000086006739C9224603EC2E0100000081006739E322480334300100000081006739F0224A03B8310100000081007E39F9224C03C033010000008300953903234F031034010000008100A6390E235203A434010000009100B23918235403C035010000009300C739182355033036010000009300E80D182356038436010000009300DD391F235703E536010000009100EC39A01E59030337010000009300F73927235A031A37010000009300F7392F235B032C37010000009300043A38235D036D37010000009300043A41235E03873701000000E1093330DE1960038F37010000009118E2368D1D6003D037010000009600113A570E60030438010000009600243A961261031F38010000009600313A961262033A380100000096003B3A961263035738010000009600443A9612640368380100000096004C3A961265038F380100000096002F10BD046603A438010000009600573A4B236703DB38010000009600643A50236803E438010000009600733A56236A031439010000008618F10B31026B032139010000008618F10B41086B033439010000008618F10BFE146C03483B01000000C6087D13FE086E03653B01000000C400C61307156E037C3B010000008618F10B41086E03903D01000000E601341F9F166F03B43D010000008100CD1F5B2370032C3E010000008100CD3A5B2372032C42010000008100DE3A78237403D442010000009118E2368D1D76030D43010000008618F10B310276031843010000008618F10B88237603514301000000E609B61CBB037703544301000000E609C11CBB037703574301000000E609050ECA0277035B4301000000E6010F0EAC127703744301000000E6010F0E9B127803604A0100000086000F0E8F237903844A01000000E601A10E31027A03934A01000000C401A10E8F037A03974A010000008618F10B31027B03A44A010000008618F10B6B0B7B03B74A010000008618F10BA10E7C03CC4C01000000C6087D13FE087E03BC4D01000000C6089F17FE087E03D94D01000000C400DF17AA0E7E03F64D010000008618F10B6B0B7E03204E01000000E601341F3C137F03604F010000008100CD1FA12380036050010000008100EF1FA1238303E451010000008100FE1FA1238603C453010000008100E41DC1238903E854010000008100153BE7238D039855010000008100213B78238E034056010000008618F10B6B0B9003605601000000E6018E0D52119103A45601000000E6018E0D6211920364570100000086008E0DF723940338590100000081002C3B0A249603D759010000008618F10B1E249803E6590100000086083C3B25249903EE59010000008108473B1E249903F75901000000C600B1172B249A030A5A01000000C600B11730249B031F5A01000000C600B11736249C03325A01000000C600B11798039F03405A01000000C600523B3102A0034D5A01000000C608583BF40DA0035F5A01000000C600C2288017A003735A01000000C600DE288817A203DC5B01000000C600F8288F17A303E06001000000C60010299817A403806401000000C6001829A517A503A464010000008618F10B3102A6038E5A010000009100A5596432A603AC64010000008618F10B3102A803B464010000008618F10B3102A803BC64010000009600AA3B7B24A803E764010000009600B43B8324A9033065010000009600BE3B8B24AA03B065010000009600D03B9324AB031466010000009600E23B9B24AC036466010000009600F13BA324AD03BC66010000009600003CAB24AE032C67010000009600003CB624B10368670100000096001A3CBE24B203A0670100000096001A3CC524B303E8670100000096001A3CCF24B503B03600000000E101CF466F28B603103700000000E1014910CA04B603183700000000E101CD23B80EB603A43700000000E1092047FC13B603AC3700000000E10162473102B603B33700000000E101DC233102B603B53700000000E109A223FC13B603BD37000000008618F10B7413B603083800000000E1017E48CF13B7035C3800000000E1014910CA04B703643800000000E101CD23B80EB703053900000000E109BC48F713B7030D3900000000E10162473102B703143900000000E101DC233102B703163900000000E109A223FC13B7032339000000008618F10B7413B7037E42000000008618F10B3102B803864200000000860096495E18B803384300000000E101BE49A52AB9038C4300000000E1014910CA04B903944300000000E101CD23B80EB9032C4500000000E1099B4AD42AB903344500000000E10162473102B9033B4500000000E101DC233102B9033D4500000000E109A223FC13B9034A45000000008618F10B7413B903444600000000E101A64C412BBA03984600000000E1014910CA04BA03A04600000000E101CD23B80EBA03B74700000000E1093C4D542BBA03BF4700000000E10162473102BA03C64700000000E101DC233102BA03C84700000000E109A223FC13BA03D047000000008618F10B7413BA033C4800000000E101A64C412BBB03844800000000E1014910CA04BB038C4800000000E101CD23B80EBB03E04A00000000E1093C4D542BBB03E84A00000000E10162473102BB03F04A00000000E101DC233102BB03C84B00000000E109A223FC13BB03D04B000000008618F10B7413BB03EF4B000000008100EC4E3102BC030B4C000000008100074F3102BC03274C000000008100224F3102BC03434C0000000081003D4F3102BC03A44C00000000E101A64C412BBC03EC4C00000000E1014910CA04BC03F44C00000000E101CD23B80EBC03C84D00000000E1093C4D542BBC03D04D00000000E10162473102BC03D84D00000000E101DC233102BC03184E00000000E109A223FC13BC03204E000000008618F10B7413BC033F4E0000000081008C4F3102BD039C4E00000000E101A64C412BBD03E44E00000000E1014910CA04BD03EC4E00000000E101CD23B80EBD03884F00000000E1093C4D542BBD03904F00000000E10162473102BD03984F00000000E101DC233102BD03D84F00000000E109A223FC13BD03E04F000000008618F10B7413BD03FF4F000000008100C44F3102BE033C5000000000E101EE4F3C2CBE03845000000000E1014910CA04BE038C5000000000E101CD23B80EBE036D5200000000E1095C504B2CBE03755200000000E10162473102BE037C5200000000E101DC233102BE037E5200000000E109A223FC13BE038652000000008618F10B7413BE03406600000000E101BC52672EBF03886600000000E1014910CA04BF03906600000000E101CD23B80EBF03D86700000000E1090053B703BF03E06700000000E10162473102BF03E86700000000E101DC233102BF03136800000000E109A223FC13BF031B68000000008618F10B7413BF033A6800000000810054533102C003646800000000E101BC52672EC003AC6800000000E1014910CA04C003B46800000000E101CD23B80EC003FB6800000000E1090053B703C003036900000000E10162473102C0030A6900000000E101DC233102C0030C6900000000E109A223FC13C0031469000000008618F10B7413C0035C8D00000000E101BC52672EC103A48D00000000E1014910CA04C103AC8D00000000E101CD23B80EC1038C8E00000000E1090053B703C103948E00000000E10162473102C1039C8E00000000E101DC233102C103DC8E00000000E109A223FC13C103E48E000000008618F10B7413C103038F0000000081003F553102C2036CC0000000008618F10B3102C20374C00000000086009155C113C2038CC00000000086009F55C113C30354CC00000000E101BC52672EC4039CCC00000000E1014910CA04C403A4CC00000000E101CD23B80EC403ECCD00000000E1090053B703C403F4CD00000000E10162473102C403FCCD00000000E101DC233102C40327CE00000000E109A223FC13C4032FCE000000008618F10B7413C4034ECE00000000810054533102C503A4CE00000000E101EE4F3C2CC503F8CE00000000E1014910CA04C50300CF00000000E101CD23B80EC503D0D400000000E1095C504B2CC503D8D400000000E10162473102C503DFD400000000E101DC233102C503E1D400000000E109A223FC13C503E9D4000000008618F10B7413C503DCDD00000000E101EE4F3C2CC60330DE00000000E1014910CA04C60338DE00000000E101CD23B80EC603D8E500000000E1095C504B2CC603E0E500000000E10162473102C603E8E500000000E101DC233102C60330E600000000E109A223FC13C60338E6000000008618F10B7413C60357E6000000008100A3573102C703C0E600000000E101B1572935C70314E700000000E1014910CA04C7031CE700000000E101CD23B80EC7037EEA00000000E1092158E712C70386EA00000000E10162473102C7038DEA00000000E101DC233102C7038FEA00000000E109A223FC13C70397EA000000008618F10B7413C7037FEB000000008618F10B3102C80387EB000000008600A559911DC803A0EB000000008600C359911DCA03AEEB000000008600E159911DCC03B8EC00000000E101875A8535CE030CED00000000E1014910CA04CE0314ED00000000E101CD23B80ECE038CED00000000E109DB5A7918CE0394ED00000000E10162473102CE039BED00000000E101DC233102CE039DED00000000E109A223FC13CE03AAED000000008618F10B7413CE0386EE000000008618F10BA535CF03A3EE0000000086083729F713D203ABEE0000000086084B294E2AD203B3EE000000008608EC1EB735D203BCEE00000000C600BF0EB703D2033CEF00000000C6008E18780ED2039CEF00000000C600C80EBB03D3031BF2000000008618F10B3102D30323F2000000008600465C3636D3036BF2000000008618F10B3102D40373F2000000008600695C3636D403BBF2000000008618F10B3102D503C3F2000000008600945C3636D5038DF3000000008618F10B3102D60395F3000000008600FD5C3636D6035DF4000000008618F10B3102D70365F4000000008600585D3636D70338F600000000E101CD23B80ED803F4F600000000E109BC5DC336D803FCF600000000E10162473102D80304F700000000E101DC233102D80344F700000000E109A223FC13D80351F7000000008618F10B7413D80360F7000000008100EC4E3102D903A8F700000000E101BC52672ED903FCF700000000E1014910CA04D90304F800000000E101CD23B80ED90314F900000000E1090053B703D9031CF900000000E10162473102D90324F900000000E101DC233102D90364F900000000E109A223FC13D9036CF9000000008618F10B7413D9038BF9000000008100FF5E3102DA0320FA00000000E101BC52672EDA0374FA00000000E1014910CA04DA037CFA00000000E101CD23B80EDA038CFB00000000E1090053B703DA0394FB00000000E10162473102DA039BFB00000000E101DC233102DA039DFB00000000E109A223FC13DA03A5FB000000008618F10B7413DA0328FC00000000E101875A8535DB037CFC00000000E1014910CA04DB0384FC00000000E101CD23B80EDB0339FE00000000E109DB5A7918DB0341FE00000000E10162473102DB0348FE00000000E101DC233102DB0355FE00000000E109A223FC13DB0362FE000000008618F10B7413DB035410010000008618F10B3102DC035C10010000008600A559911DDC03681101000000E101875A8535DE03BC1101000000E1014910CA04DE03C41101000000E101CD23B80EDE03CC1201000000E109DB5A7918DE03D41201000000E10162473102DE03DC1201000000E101DC233102DE034C1301000000E109A223FC13DE035913010000008618F10B7413DE037813010000008100A9603102DF039413010000008100C2603102DF03B41501000000E101875A8535DF03081601000000E1014910CA04DF03101601000000E101CD23B80EDF03961701000000E109DB5A7918DF039E1701000000E10162473102DF03A51701000000E101DC233102DF03A71701000000E109A223FC13DF03B417010000008618F10B7413DF03743901000000E101BC52672EE003BC3901000000E1014910CA04E003C43901000000E101CD23B80EE003DC3A01000000E1090053B703E003E43A01000000E10162473102E003EC3A01000000E101DC233102E003173B01000000E109A223FC13E0031F3B010000008618F10B7413E0033E3B01000000810054533102E103A43B01000000E101EE4F3C2CE103F83B01000000E1014910CA04E103003C01000000E101CD23B80EE103FC3C01000000E1095C504B2CE103043D01000000E10162473102E1030C3D01000000E101DC233102E1034C3D01000000E109A223FC13E103543D010000008618F10B7413E103733D010000008100DD623102E203BC4301000000E101B1572935E203104401000000E1014910CA04E203184401000000E101CD23B80EE203C84901000000E1092158E712E203D04901000000E10162473102E203D84901000000E101DC233102E2031C4A01000000E109A223FC13E203244A010000008618F10B7413E203434A010000008100F2633102E303F84A01000000E101BC52672EE303404B01000000E1014910CA04E303484B01000000E101CD23B80EE303604C01000000E1090053B703E303684C01000000E10162473102E303704C01000000E101DC233102E3039B4C01000000E109A223FC13E303A34C010000008618F10B7413E303C24C01000000810054533102E403EC4C01000000E101BC52672EE403344D01000000E1014910CA04E4033C4D01000000E101CD23B80EE403834D01000000E1090053B703E4038B4D01000000E10162473102E403924D01000000E101DC233102E403944D01000000E109A223FC13E4039C4D010000008618F10B7413E403865A010000008618F10B3102E503945A010000008600C359911DE503B85A010000008600E159911DE703D65A010000008600E565911DE903135B0100000086000366911DEB03265B0100000086002166911DED03585B0100000086003F66911DEF03845B0100000086005D66911DF103A05D01000000E101875A8535F303F45D01000000E1014910CA04F303FC5D01000000E101CD23B80EF303A16001000000E109DB5A7918F303A96001000000E10162473102F303B06001000000E101DC233102F303B26001000000E109A223FC13F303BF60010000008618F10B7413F303046101000000E101AB670F43F403586101000000E1014910CA04F403606101000000E101CD23B80EF403586301000000E1090A681E43F403606301000000E10162473102F403686301000000E101DC233102F403046401000000E109A223FC13F4030C64010000008618F10B7413F4032B64010000008100BE683102F5034764010000008100D9683102F5036364010000008100F4683102F5031265010000008618F10B3102F5031A6501000000860093691D05F5037E65010000008618F10B3102F6038865010000008600AB692B05F603FE65010000008618F10B3102F8030666010000008600D6691D05F8034D66010000008618F10B3102F9035566010000008600FE692B05F9031467010000008618F10B3102FB031C670100000086003D6A0B05FB03D267010000008618F10B3102FD03DA67010000008600666AF504FD0300000100393C00000100423C00000200493C00000100423C00000100423C00000100423C00000200493C00000100503C00000200423C00000100503C00000200423C0000030057\
-3C00000100503C000002005D3C00000300633C00000100503C00000200E33200000100503C000002005D3C000001005D3C000001005D3C00000100493C000001006D3C00000100423C00000200733C000003007A3C00000100423C00000200733C00000300823C00000100423C00000200733C00000100733C00000100733C00000100493C000001006D3C00000100733C000001008E3C00000100983C00000100983C00000100983C000001005D3C000001005D3C000001005D3C000001005D3C000001009D3C000001005D3C000001005D3C000001009D3C000001005D3C000001005D3C000001005D3C000001005D3C000001006D3C00000100A23C00000200A73C00000300AF3C00000400B33C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C02000200B73C00000100EA3C000002006D3C00000100F724000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C02000200B73C00000100F23C00000100F43C00000200503C00000100FE3C00000200053D000001000C3D000001000C3D00000200253D00000300FE3C00000100B73C00000100FE3C00000200053D000001002E3D000002000C3D000001002E3D000002000C3D00000300253D00000400FE3C00000100B73C00000100FE3C00000200053D000001002E3D000001002E3D00000200253D00000300FE3C00000100B73C00000100FE3C00000200053D000001002E3D000002005D3C000001002E3D000002005D3C00000300253D00000400FE3C00000100B73C00000100423C00000100423C00000200353D00000100423C00000100423C00000200403D00000100B21300000100423C00000100423C00000200353D00000100423C00000100423C00000200403D00000100423C00000200353D00000100423C00000200353D00000100423C00000200483D00000100423C02000200B73C00000100A92600000100A92600000200523D00000300593D00000100A92600000100A92600000100A92600000100663D00000100663D00000100A926000001005D3C00000100703D00000200403D00000100703D00000100703D00000100703D00000200353D00000100703D00000200403D00000100703D00000100703D00000100703D00000200353D00000100703D00000100B21300000100703D00000200403D00000100703D00000100703D00000100703D00000200353D00000100703D00000200403D00000100703D00000100703D00000100703D00000200353D00000100703D00000100763D00000200423C00000300353D00000100B21300000100FE3C00000200053D00000100703D00000100703D00000200253D00000300FE3C00000100B73C00000100803D00000100803D00000100803D00000200873D00000100803D00000200913D00000100803D00000100803D00000200873D00000100803D00000200873D00000100803D00000100803D00000100803D00000200873D00000100803D00000200873D00000100803D00000100803D00000100803D00000100803D00000100803D00000100803D00000100493C00000100493C00000100493C000001005D3C00000100B213000001005D3C00000100423C000002009E3D000003005D3C00000100423C000002009E3D000003005D3C00000100423C000002009E3D00000300A73D00000400B03D00000100423C000002009E3D00000300A73D00000400B03D00000100423C000002009E3D00000300BB3D000004005D3C000001005D3C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C000001005D3C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C00000100C03D020002005D3C000001005D3C00000100B21300000200423C020003005D3C00000100B213000002005D3C02000300423C00000100C03D020002005D3C000001005D3C00000100C53D00000200CA3D00000100C53D00000100B21300000100C53D00000200CA3D00000100C53D00000100B21300000100F43C00000200503C00000100D13D00000100D13D00000200D73D00000100D13D00000200D73D00000300DE3D00000100D13D00000200D73D00000100D13D000001005D3C00000100D13D00000100D13D00000100F43C00000200503C00000100EB3D00000100423C00000200503C00000100423C00000100B21300000100B21300000200EF3D00000100B213000001005D3C00000100423C00000100423C00000200503C00000100503C000002005D3C00000100503C00000200913D00000100503C000002005D3C00000300FC3D00000100503C00000100503C00000100503C00000100503C000002005D3C00000100503C00000200402F000001005D3C000001005D3C00000100053E000002005D3C000001005D3C00000100B21300000100503C00000200D13D000003000E3E00000400F33000000100503C00000100503C00000100503C00000100503C000002005D3C00000100503C00000200913D00000100503C000002005D3C00000100503C00000200193E00000100503C00000200193E000003001F3E00000100283E00000200BB3D000003002C3E00000100283E00000200353E000003005D3C00000100283E000002003F3E000003005D3C000001005D3C00000100283E00000100283E00000100283E00000100B213000001005D3C000001005D3C000001005D3C00000100423C00000100423C00000200503C00000100503C00000200BB3D00000300453E000004004D3E00000500583E00000100503C00000200523D00000300593D00000100503C00000200523D00000300663D000004005D3C00000100503C000002005D3C00000100503C000002005D3C00000100503C000002005D3C000003008A1B00000100503C000002005D3C000003008A1B000004006C1B00000100503C000002005D3C00000100503C000002005D3C000003008A1B00000100503C000002005D3C000003008A1B000004006C1B00000100733C000001006B3E000001005D3C000001005D3C000001005D3C00000100423C00000200703E00000100423C00000200703E00000300783E00000100703E00000100703E00000200853E000003008B3E00000100703E00000100703E00000100703E000002008F3E00000100423C000002008F3E00000300973E000004004D3E00000100423C000002005D3C00000100703E00000100703E00000100A926000001009D3E000001009D3E00000100733C000001006B3E000001008E3C00000100A92600000100A03E00000200A23E00000100A03E00000200A23E00000100EB3D00000100A43E00000100A43E00000200A93E000001005D3C000001005D3C00000100703D00000100703D00000100CA3D00000200703D00000100CA3D00000200703D00000100CA3D00000200703D00000100CA3D00000200703D00000100B23E000001005D3C000001005D3C000001002A2000000100BB3E00000100BF3E00000100C83E00000100F72400000200C83E00000100F72400000100F72400000100F72400000100F724000002005D3C00000100C83E00000100C83E000001006A2F00000200CD3E00000100C83E00000100F72400000100BF3E00000100BF3E00000200FD2400000300D83E00000100C83E00000100F72400000200C83E00000100F72400000100F72400000100F72400000100F724000002005D3C00000100C83E00000100C83E00000100DF3E00000200CD3E00000100C83E00000100BF3E00000200FD2400000300D83E00000100BF3E00000100BF3E00000200E43E000001008E3C00000100BF3E000001008E3C000001005D3C000001008E3C000001002A20000001005D3C000001002A20000001008E3C00000100733C000001002A20000001004325000002005D3C000001008E3C00000100A926000001005D3C00000100B21300000100B21300000200EF3D00000100703E00000100703E00000100703E00000100703E00000100703E00000100703E00000200D13D00000300ED3E02000400F33E00000100703E00000100733C000001006B3E000001008E3C00000100913D000001005D3C000001005D3C00000100703D00000100703D00000100033F000002000A3F00000100033F00000100033F00000100033F000001001A3F00000100033F000002000A3F00000100033F00000100033F00000100033F000001001A3F00000100033F000002000A3F00000100033F00000100033F00000100033F00000100853E000002008B3E000003005D3C000001005D3C000001005D3C000001005D3C00000100F43C00000200503C000001005D3C00000100853E000002008B3E000003005D3C00000100A92600000100A92600000100A926000001005D3C00000100223F00000100523D00000100593D00000100523D00000200283F00000100593D00000200283F000001003A3F00000100433F00000200593D00000100593D00000100C83E00000100C83E000001005D3C00000100523D00000100523D000002005D3C00000100523D00000100593D00000100523D02000200593D00000100593D02000200523D00000100533F000002005A3F00000100BB3D00000100803D000002009D3E00000100663F00000100703F00000100703F00000200773F00000100033F00000100853F00000100763D000002008F3F00000100733C000001006B3E00000100F43C000002008F3F00000100423C00000200503C00000100423C00000100BB3D00000100663D00000100663D00000200523D00000300593D00000100663D00000200523D00000300593D000004009B3F00000100BB3D00000100593D00000100EB3D00000100A43E00000100A03E00000200A23E00000100A03E00000200A23E00000100A43E00000100A73F00000100A73F00000200AF3F00000100BE3F00000200C33F00000100CB3F00000100CB3F00000200A73F00000100CB3F00000200A73F00000300AF3F00000100BE3F00000200C33F00000100C83E00000100C83E000001000F3100000100C83E00000100C83E00000100C83E00000100C83E00000100D53F00000100D53F00000100DD3F00000200D53F00000100DD3F00000200D53F00000100E63F00000200D53F00000100E63F00000200D53F000001005D3C000001005D3C00000100D53F00000100D53F00000100DD3F00000200D53F00000100DD3F00000200D53F00000100E63F00000200D53F00000100E63F00000200D53F000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C00000100A73F00000200F72400000100A73F00000200F724000003000A2500000400032500000100A73F00000200F72400000300AF3F00000100A73F00000200F724000003000A2500000400032500000500AF3F00000100BE3F00000200C33F00000100803D020002000A2502000300F43F00000100E33200000100E33200000200A73F00000100E33200000200A73F00000300AF3F00000100BE3F00000200C33F00000100A73F00000100A73F00000200AF3F00000100BE3F00000200C33F00000100F83F000001000A4000000100F83F00000100663F00000100124000000200F83F000001001F4000000100663F00000100124000000200F83F000001005D3C000001005D3C000001005D3C000001005D3C000001005D3C00000100033F000002000A3F00000100033F00000100033F00000100033F000001001A3F00000100FE3C00000200053D00000100274000000200344000000100274000000200344000000300253D00000400FE3C00000100B73C00000100FE3C00000200053D00000100404000000100404000000200253D00000300FE3C00000100B73C00000100FE3C00000200053D000001004A40000001004A4000000200253D00000300FE3C00000100B73C00000100FE3C00000200053D000001004A40000001004A4000000200253D00000300FE3C00000100B73C00000100FE3C00000200053D000001001A3F000001001A3F00000200253D00000300FE3C00000100B73C00000100554000000100554000000100033F000002000A3F00000100033F00000100033F00000100033F000001001A3F00000100033F000002000A3F00000100033F00000100033F00000100033F00000100FE3C00000200053D00000100604000000200694000000100604000000200694000000300253D00000400FE3C00000100B73C00000100754000000200794000000100274000000200794000000300824000000100404000000200794000000300824000000100BB3D000001008C4000000100BB3D00000100BB3D00000100DD3F000001001A3F00000100BB3D00000100BB3D00000100033F00000100BB3D000001009440020002009F4000000100053E02000200A44000000100BB3D00000100AD4000000100AD40000002005D3C00000100AD4000000200A92600000100AD4000000200A926000003005D3C00000100EB3D00000100A43E00000100A03E00000200A23E00000100A03E00000200A23E000001005D3C00000100AD4000000100B74000000200822F00000100E63F00000200822F00000100353D00000100353D000002000C3D000001002E3D00000200353D00000300C64000000400D040000005006940000001005D3C00000100353D000002005D3C00000100353D000002005D3C00000100353D000002005D3C00000100353D00000200DB40000003005D3C00000100353D00000200E540000003005D3C00000100E540000002005D3C00000100353D00000100353D00000100353D00000100E540000002005D3C00000100BB3D00000100BE3F00000100BE3F00000200BB3D00000100BE3F00000100BE3F00000200BB3D000001005D3C000001009D3E000001009D3E000001009D3E000001009D3E000001009D3E00000100F23C00000100F23C000001005D3C00000200F72400000100EE4000000100B21300000100B21300000200EF3D00000100B21300000100703D00000100703D00000200F44000000100703D00000200F44000000100A92600000200BB3D00000100B213000001006B3E00000100733C00000100733C000001008E3C00000100B21300000100B21300000200EF3D00000100B21300000100703D00000100CA3D00000200703D00000300913D00000100CA3D00000200703D00000300913D00000100CA3D00000200703D00000300913D00000100CA3D000002000141000003004D3E000004008F3E00000100CA3D00000100A92600000200BB3D00000100B21300000100423C00000100423C00000200503C00000100503C00000200423C00000100503C00000200493C00000100503C000001005D3C000001005D3C000001002A20000001002A2000000200F724000003000D41000001005D3C00000100033F000002000A3F00000100033F00000100033F00000100033F000001001A3F000001002E3D000002005D3C000001004A40000001004A40000001002740000001002740000001004040000001004040000001001341000002002141000003002C4100000100354100000100BB3D00000100BB3D000002000C3D00000100404100000100874700000100874700000100A92600000100874700000100874700000100874700000100874700000100874700000100874700000100874700000100874700000100874700000100AD5500000100AD55000001008747000001008747000001008747000001008747000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001008747000001008729000002003724000003002E1F000001005D3C00000100C83E00000100C83E00000100C83E00000100C83E00000100C83E000001008747000001008747000001008747000001008747000001006040000002006940000001008747000001008747000001008747000001008747000001008747000001008747000001008747000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001002E3D000002005D3C000001008747000001008747000001006040000001006040000002005D3C000001006040000001006040000002005D3C000001006040000002000C3D000001000C3D0700060009000D000A000A000A000D0011000E001100190013001200190016001C006C0022001E002400220025002600250022002B00A8002E00360031003A0036003E0038000D003900420039000D003D0046003F004A003F004E003F0052003F0019004000560040000D004000310041004A0041004E0041005200410019004200560042000D004200310043000D0044005A0044000D004700620047000D0048001C014800620048000D0049001C014900620049000D004E0066004E000D0052006A00540046005600540159006E005D0072005D0019006100760061000D0062007A0063007E0068009C0169009C016B00A8016C00A8017100C0017300C801740054017A0054018100A80184006A008500420085000D008700460088003E008E00B2008E0019008E00B6008E0031008E000D008F0052008F0019008F0056008F0031008F000D009100F600910019009100FA009100310091000D00920006019200190092000A019200310092000D00930006019300190093000A019300310093000D00940006019400190094000A019400310094000D00950006019500190095000A019500310095000D009600EA00960019009600EE009600310096000D0098003E0198001900980042019800310098000D0099003E0199001900990042019900310099000D009A003E019A0019009A0042019A0031009A000D009C003E019C0019009C0042019C0031009C000D009D00EA009D0019009D00EE009D0031009D000D009E00EA009E0019009E00EE009E0031009E000D009F00CE019F0019009F00D2019F0031009F000D00A1002201A1001900A1002601A1003100A1000D00A8007201A8003100A8000D00A9003E01A9001900A9004201A9003100A9000D00AA003E01AA001900AA004201AA003100AA000D00AB002201AB001900AB002601AB003100AB000D00AD002201AD001900AD002601AD003100AD000D00AE002201AE001900AE002601AE003100AE000D00AF003E01AF001900AF004201AF003100AF000D00B000EA00B0001900B000EE00B0003100B0000D00B100CE01B1001900B100D201B1003100B1000D00B2003E01B2001900B2004201B2003100B2000D00B3003E01B3001900B3004201B3003100B3000D00B5002201B5001900B5002601B5003100B5000D00B6001A01B6001900B6001E01B6003100B6000D0031003B10CA042C00C31041054400A415000C4400AC15150C6C008E0D370E9400BF20A8139400F220AE1394002621741394001C10B51394008921AE139C00C021BB139C00412031029C002722C1139C005C20C7139C002510BB039C00D522C113A4003B10CF1361009623FC131900A10E3102C4007C241D14B101F10B3102B901F10B3102C101F10B9803C901F10B9803D101F10B9803D901F10B9803E101F10B9803E901F10B9803F101F10B9803F901F10B98030102F10B98030902F10B98031102F10B31021902F10BD7242902F10B74133102F10B31020900F10B31023902F10B9803A10010298025A1002843B7034102354386254102AE26B703E10053438B256900654393255102A10F1B01E9017843B703C9018643B703C1019643B703D901A043B703D101AC43B703E100BE43B1255902F10B31024100F10BB6256902F10B31026902F7436F040101FF43CC25B100F10BD2250401A6242F140C013B24B80E0C016824F7131401AA1E8E1F1C01F10BAF1A14013B38501451028E0D1B260C016D24F713B10008442126A9001744CA02B1002F442626790255442E268102BF0E342614019F0B37131401B61E8E1FB100B1173B26B100B117741314012E1F661F24008E0DDE04B100B117512614014538B703B100B1179D0399028E18780E41007A44592641008344500441009C445F26A102A5446726B100B1176B260900BF0EB703F900C84470265102D44476260101DB44A5260900E444BC26E100EC44C126B902F10B9803C900D20F6F04B90008442126B9000E45BB03B9001745BB032C01C021BB13B9002145E726B9002A456726B9003545F026B9003F45CA0241004945F62651023620BB0351025945FC26F900F10B0127C900F10B9D03C10270453327D1027D453A27B900874554275102F10B36242901F10B3102290147206027B90091456B14B900F10BD2256902F10B6E272C01F10B3102D9029D459227A9004F0C9727E102F10B9B27C900F10B98033401E245AF273401C80EA813F902F10B31023C01E245AF273C01C80EA8138900F10B8618A102094667265102D444C0270903F10B980341003D46F6265102F10B30241903F10B980351026246570E51027046E72721038B46ED27C902E40FF3274401E245AF274401C80EA8133103F10B98031C003B10CF1381013B10CA044C01F10B310254013B10CF135C019623F7134C01C021BB136100CD23B80E64013B10CF136C019623F7136100D62331023903F10B3102410348487B2841035A48BB03B902F10B3102AC009623F7137401924716027401874716027401F10B74137401A74777287401B147200A7401423C200A74017E48CF137401F848851D74010949EF037401134750148401F10B74138401A74777288401B147200A8C014E49D0289401F10B31024903C02100299C01A415000C1401F10B701F1401BF0EA01F1401F10B691F1401F10BBB135103F10B9803A401B2132908A40198131009A40198131E09A401C61369098100F10B9803B4010F0EC911A401BB135109A40198132F09A40198133B09B4010F0ED911A401D3137309BC01D010470551017749B703B401050ECA02B401C11CBB03B401B61CBB03BC01D0105705A401C31041053400F10B41083400C3104105CC012510BB03C4011C10B513D4013B10CF13DC019623F713E4018B108609E401F10BEF04EC013B10CF13F4019623F713FC01EC1E4E2A0402F10B9E13FC01F10B102B0C023B10CF1314029623F7131C028B1086095902F10BFB2B0C01712431020C017C241D149C01AC15150C2C0158379E13E1005651B80E91026151982C91026751982C91027A51982C590361519D2C590367519D2C59037A519D2CF1009851FC13F100EC1EFC1324029623F7132C029851F7132C02EC1E4E2A8C01A051F32C34023B10CF133C029623F71344023B10CF134C029623F7135402A415290C5402AC153F0C5400F10B31025102AA1E672D4100BA518A2D4100BF0E6B185C00F10B3102F900C5519B2D7903D151B80E7103ED51A22D81031C10A82D8903EC1EB703B102E40FAF2D410000522D02410009522D026402B213660B6402D517180E6402DF17220E6C020F0E570BF4008E0D7D0EF4008E0D8E0E6400F10B6B0B6400C310FA0D8900F10B98035102125265185102D444052E51021A520C2E7402F10B74137402C021102B74024E49D0289100B117980309008E18780E99039552392E99038E183F2E9903C80E4B2E8101A152502E7C023B10CF1384029623F713A103F10B3102A103DB53802E9100B1172B24A102EC53CA02C902BF0EC22E1101BF0EC22E9102F653982C9102BF0EC22EA903BF0EC22E8102BF0EC22EB102BF0EC22EB103BF0EC22E5903F6539D2C5903BF0EC22E0103BF0EC22EB903BF0EC22EC103BF0EC22EC9032354CA2E8102BF0E6B1841013C54F02E11003C54F72E8C024E49D0281100BF0E6B1851024654072FC9034B54222F11005454272F81013620BB039402F10B7413C9035338362F9402C021BB139402F743402F81015E54462F110067544B2F11017054612F1101B30E682F1101B61E6F2F9C02F10B310251021A527F2F9C022722C113A4022722C1139C02C021BB13510246548F2F9100B117982F9100B1179F2F91004D199F2F91004D19310241008C54BB0341009554BB0341009F54BB034100A754BB034100B054BB034100BB54BB034100C654BB039100B117AD2F9C02F10B9E13D103F10B3102AC02A6242F14B4026824F713BC023B385014BC029F0B3713B4026D24F713C402F10B3102CC02F10B31025102B61E672DD4028921102BB4023B24B80EBC022E1F661FDC008E0D370EBC024538B703DC02F10BAF1AE4029623F713EC029851F713EC02EC1E4E2AF4023B10CF13FC029623F71304039851F7130403EC1E4E2A0C033B10CF1314039623F7131C03F10B31022403C021BB1324032510BB03C40071243102C4006824F713C4006D24F713C4003B24B80E2C03C021BB131103BF0E7E31BC02B61E8E1FBC02F10B791F5102D44483313403F10B31023403C021BB1324032722C1135102D522C03134032510BB0334031C10B513BC02AA1E8E1F34032621741334033B10F4313C039623F7133C03CD23B80E2C032510BB032C031C10B5132C038921AE138102E40F2E325102D4443B3251028E1853182C03F10B310209004D55643244038E18713214015338A51F29014720D932E9036255E3328101A1523A274C03F10B3102540379208E1354037F20961309008E18643254031423D8134C031C10B513F103F10B310254031F2331024C035C20C7134C032510BB035C03F10BEC1354038820B50E4C03C021BB135C038D23E3135C03190E160254031C10B5135C039623F71364032624091464032C2416026403322416026C03C83E50146C03F10B31026C039155C1137C03F10BEF048101BB5546336C039F55C1134C03BB555C336403BF20A8134C035C208C338403F10B11148403262409148403190E160284032C24160284033724160284039623F713BC00A6243F148C03F10B54145403F10B9E139403F10B9E13BC00A10E8F03BC004F0C2614BC00F10B31029403430496139403E42431029403CA24B50E9403D62450149403C224B50E9403DE248E134C03F10B74134C03412031024C03F955C6338C03F72416028C03FD2416028C03F02409146403F10B11148C03E42431028C03CA24B50E8C03D62450148C03C224B50E29014720E433E9009813BB03E900A10E3102E9004F0C74140904F10BF2336900F10B3102C4005A24BB031101F10B74131101DE0F4B341101C8566F2F1101DE566F2F1101B30E58341101F10B6B261101B30E5F349102DE0F66342901F10B74138102DE0F8134290147208C34BC025338A51FF900125265189C033B10CF13A4039623F71331011359B80E31011F59433531012C59B80E31013959433519045159B80E39015159B80E39015E59B80E4101FF59BC264101115ABC26E100305A5E3531013C5ABC262904EC1EFC133104F10BC635AC03D35B5014AC03E35BAF35AC03F15BB33529014720E235BC03E245AF27BC038E187132C403E245AF27C4038E187132CC03E245AF27CC038E187132BC03C80EA813C403C80EA813CC03C80EA813D403F10BA535BC02F10B691FBC02F10B701FBC02F10BBB13DC032510BB03DC03C021BB13DC031C10B513DC0326217413E403F10BEF04DC035B5C4636DC03E15C6E36DC0341203102DC03F10B3102EC034E49D028EC03F10B9D36EC038921102BEC03775DC113EC03835DA836EC03915DAE36EC039E5DB436F4031C10B513EC033B10D53651\
-02BF2007375102535FB70349045D5FE6184101AE26B7035102845FB7031103845F183751027046C0315102955FB7039C02F10B74131103A65F2F371103B65F2F371103A65F96129C02F743402FFC03322E0F19FC033C2E18190404341F1E130C04482E56190C043C2E181914048E0D7D0E14048E0D8E0E6103C65F8537E100DC5F8D37E100ED5F9337E100FA5FB80EE1000660B80E510218609A375102BF20A3375102D444B13799033760B9378100F10B31028100F10B98198100F10BA0195904C731D2373902F10B3102E9034B60E3321C04E3329B1A8900F10B31028900F10B98198900F10BA01999034F60392E2404F10BE7372C043B10CF1334049623F7133C04775DC1133C048921102B3C044E49D0284404F10BE7374C043B10CF1354049623F7135C04775DC1135C048921102B5C044E49D02864043B10CF136C049623F71374043B10F4317C049623F7137C04CD23B80E7404F10B31027404C021BB1374042510BB0374041C10B513A100D0601139A100E444173939010E61BC26E1002843B7036104F10B9803E1002E61403919043E614A398404F10B741369014C61BC268C048921102BE1005E616539E100686191398C049E5D96398C044E49D028E1007361B80EE1008361B80EE1009261B80EE100BB61A4399404F10B31029C04F10B3102A404F10B3102AC04F10B3102B4044E49D028BC044E49D028C4044E49D028CC0441203102D40441203102DC0441203102E40441203102BC048921102BB4048921102BF404F10B3102E100CA61DA3A3101D8614A398C01775DC1138C018921102BE100EB61E43AFC04F10B31028C028921102BC4048921102B04054E49D02804058921102B0C053B3850140C059F0B37130C052E1F661F0C054538B7030C05AA1E8E1F0C058E18831F1405E245AF2714058E1871321C05E245AF271C058E1871321405C80EA8131C05C80EA8130C05BF0EA01F7904BF0E34268104BF0EC22E2405F10B791F2C05F10B31026901AE26B703EC049E5D9639EC041C10860971019E5D663C71011C101D05EC048921102B710189212B0589041962933CE10028629A3C8C011C1086091100DE0FA03C11003C62182311006754A83C4100DE0FAF3C61034E62BB3C9900F10B9803B102DE0FC73CA1025862CC3CA102DE0FD33CA102F10B6B2651028E0DDA3CC903BF0E283DE100E80DBC2634053B10CF133C059623F71379012510BB03810119628A3D79015C20933D9401C021BB13E1006262BC26E1007B62B43DE1008B62B80E69003C542F236900654341231103643A50231103733A56234C05F10B231954052510BB035C053B10CF1364059623F7136C05EC1E4E2A6C059851F71374052510BB037C053B10CF1384059623F7138C051C10B5139405F10B31029C05775DC113A405F10B31029C058921102B9C051C1086097405C021BB139904DE3AE6188901F10B31028901F6628F0389011B633B40A904F10B98039101A6244840B1044B638F03B1047063534091019813B80EC1040E64BB03C1041F64BB0391013A64964091014764B70391015564B70391016064B70391017164B80E91018464B80EAC05F10B31029101EC1EB703B4058921102B91019664B80EBC053B10CF13C4059623F713CC059851F713CC05EC1E4E2A9101AE26B703D405F10B5F19DC05F10B3102E405775DC113E405C021102BEC053B10CF13F4059623F713FC059851F713FC05EC1E4E2A0406412031022901F10B98032901472006429904AA64E618D104F10B3102D104F6628F03D1041B633B40D104CC642742D104D9648F03D104E4649803D104F4649803D10415652E42D10429658F039901A624354299014065B6179901526531029901BD0D9803DC02F10BBB1A99016265B6179901766531029100F10B31029901886598039901886536249901523B31029901C3108942D104583BF40DE1005E619542A1017B66BC26E9046967B703E9042C0FB703F1047967B703F1042C0FB703F9046967B703F9042C0FB70301058667B70301052C0FB70309056967B70309052C0FB7031105AE26B7030C062510BB031406F10B74131406C021BB1314063B10F4311C069623F7131C06CD23B80E1905F10B31022105F10B310219048B100B0531011F597C43310139597C4339015E541D053901136A2B0539011C6AB80EE1005E61A043A9018B10F50405002C002B01050030002D01050034002F0105003800310105003C00330105004000350105004400370105004800390105004C003B01050050003D01050054003F0105005800410105005C00430105006000450105006400470105006800490105006C004B01050070004D01050074004F0105007800510105007C005301050084002B01050088002D0105008C002F010500900031010500940035010500980059010E009C005B010E00A00086010E00A400B3010800A80019020800AC001E020800B00023020800B40023020800B80028020500BC002B010500C0002B010500C4002D010E00CC00F2020E00080186010E000C019B050E001001D0050E00140123060E0018018A060E001C01AF060E002001D4060E0024010B070E00280174070E002C01D3070E00300102080E0070019E090E007401DB09080080013E0B08008401190208008801430B08008C01480B080090011E02080094014D0B08009801520B0E00A401540C0E00A801910C0E00AC01DA0C0800B8013E0B0800BC0119020800C001430B0A00C401810D0A00C8018A0D0E00CC01930D0E00D001DE0D0E00D401EB0D0E00E80186010E00F8011D0F0E00FC01380F0E0000028D0F03000402990F030008029C0F0E000C029F0F0E001002A20F0E001402E10F0E001802F20F0E001C024510080030023E0B08003402190208003802430B08003C021E02080040022302080044021811080048021D1108004C022211080050022711080054022C1108005802311108005C0236110E006002860108007C023E0B08008002190208008402430B080088021D110E00B40286010800D8021D1108001C031811080070031D110E009C0389140E00A0039C140E00A403A5140E00A803B0140E00AC03B9140E00B003C0140300B403D1140300B803D4140300BC03D7140300C003DA140300C403DD140300C803E0140300CC03E3140300D003E6140300D4039C0F0300D803E9140300DC03EC140300E0039F0F0E00E403EF140E00E803F4140E00EC03F9140E00F80312150E00FC033D150E00000472150E000404A3150E000804CA150E000C04F915080010041D1108001C043E0B08002004190208002404430B0E002C048F160E00300486010E003C0486010E004004C5160E004404F4160E0048043B17080050043E0B08005404190208005804430B03006804CB1703006C04CE1703007004990F030074048F1603007804D11703007C04E01403008004E31403008404E61403008804D41703008C04D71703009004DA1703009404DD1703009804E01703009C04E3170300A004E9140E00A404E6170E00A804E6170E00AC04EB170E00B004FA170300B404FF170E00B80402180E00BC04FF170E00C004FF170300C40407180300C8040A180300CC04D1170300D004E3170300D404E0140300D804D7170300DC040D180E00E00407180E00E40407180300E804D7170300EC040A180300F004D1170300F404EC140E00F804D7170E00FC04D71708000C053E0B08001005190208001405430B08001805480B08001C051E02080020054D0B0E003C05AB1808004C053E0B08005005190208005405430B08005805480B08005C051E0208008C053E0B08009005190208009405430B0800A0051E020800A405430B0E002406191C0E002806521C0E002C06B71C0E003006181D0E006C06C91D0E00A006DA0C0E00B006B21F0E00B406D71F0E00B8061E200E00BC06BC200E00C006F3200E00C406DD210E00E00686010E00E40602080E00E806F4160E00080786010E001C0786010E00280749240E002C075C242E000B0119022E001301B4442E001B01BD442E000301A3442E00C300E2432E002301C6442E00721C19022E00BB00D1432E00D300FE432E00CB00F8432E00DB0014442E00E3001E442E00EB00F843E301A30119022102A301190223025B040F28E102A3011902E303721C19026104A30119022005DB0319024005DB0319026005DB0319028005DB031902A306330A1902E106DB0319020007DB0319020107DB0319022007DB0319024007DB0319026007DB0319026107DB0319028107DB031902E3075B040F2823085B040F2863090B0EF93383090B0E1334030A0B0EF933040AB3001902040BB3001902A30B5B040F28C30F5B040F2883110B0E6E43A311FB171902A311F3171902C311DB031902E311DB0319020312DB0319022312DB0319024312DB0319026312DB0319028312DB031902A312DB031902C312DB031902E312DB0319020313DB0319022313DB0319024313DB0319026313DB0319028313DB031902A313DB031902C313DB031902E313DB0319020314DB0319022314DB0319024314DB0319026314DB0319028314DB031902A314DB031902C314DB031902E114DB031902E314DB0319020315DB0319022315DB0319024015721C19024315DB0319026015721C19026115DB0319026315DB0319028015721C19028115DB0319028315DB031902A015721C1902A315DB031902C015721C1902C315DB031902E015721C1902E315DB0319020316DB0319022016721C19022316DB0319024016721C19024316DB0319026016721C19026316DB0319028316DB031902A016721C1902A316DB031902C316DB031902E016721C1902E316DB0319020317DB0319022017721C19022317DB0319024317DB03190260179B06012C6317DB0319028317DB031902C121DB031902E122DB0319020123DB0319022123DB031902A425B3001902E028DB0319020029DB0319026129DB0319028129DB031902C129DB031902402DDB031902602DDB031902802DDB031902A02DDB0319026130DB0319028130DB031902A130DB031902C130DB031902E130DB0319022139DB0319028139DB031902E43FB30019020044DB0319022044DB0319024047DB0319026047DB0319028047DB031902A047DB031902C047DB031902E047DB031902204BDB031902404BDB031902604BDB031902804BDB031902C14CFB0ECD35E14CFB0ECD35014DFB0ECD358450B3001902E450B30019026451B30019020452B30019026452B3001902E452B3001902005CDB031902205CDB031902405CDB031902605CDB031902805CDB031902A05CDB031902C05CDB031902E05CDB031902005DDB031902205DDB031902845FB3001902A46DB3001902A46FB3001902C06FDB031902E06FDB0319028071DB0319024073B30419026073B3041902A073B3041902C073B30419020074B30419022074B30419024074B30419026074B3041902A074B3041902C074B30419020075B30419022075B30419028075B3041902A075B3041902E075B30419020076B30419020476B30019024076B30419026076B30419028076B30419028476B3001902A076B3041902E076B30419020077B30419024077B30419026077B30419028077B3041902A077B3041902E077B30419020078B30419024078B30419026078B30419020079B30419022079B30419026079B30419028079B3041902C079B3041902E079B3041902207AB3041902407AB3041902807AB3041902A07AB3041902E07AB3041902007BB3041902407BB3041902607BB3041902A07BB3041902C07BB3041902007CB3041902207CB3041902407CB3041902607CB3041902A07CB3041902C07CB3041902007DB3041902207DB3041902607DB3041902807DB3041902C07DB3041902E07DB3041902207EB3041902407EB3041902607EB3041902807EB3041902C07EB3041902E07EB3041902207FB3041902407FB3041902E07FB30419020080B30419024080B30419026080B3041902A080B3041902C080B30419020081B30419022081B30419026081B30419028081B3041902C081B3041902E081B30419020082B30419022082B30419026082B30419028082B3041902C082B3041902E082B30419022083B30419024083B30419028083B3041902A083B3041902E083B30419020084B3041902A084B3041902C084B30419020085B30419022085B30419026085B30419028085B3041902A085B30419022086B30419024086B30419026086B3041902E087B30419020088B30419024088B30419026088B3041902A088B3041902C088B30419020089B30419022089B30419026089B30419028089B3041902C089B3041902E089B3041902208AB3041902408AB3041902808AB3041902A08AB3041902C08AB3041902E08AB3041902208BB3041902408BB3041902808BB3041902A08BB3041902008CB3041902208CB3041902608CB3041902808CB3041902C08CB3041902E08CB3041902408DB3041902608DB3041902A08DB3041902C08DB3041902008EB3041902208EB3041902408EB3041902608EB3041902A08EB3041902C08EB3041902008FB3041902208FB3041902608FB3041902808FB3041902C08FB3041902E08FB30419022090B30419024090B30419028090B3041902A090B3041902E090B30419020091B30419024091B30419026091B3041902A091B3041902C091B30419020092B30419022092B30419026092B30419028092B3041902C092B3041902E092B30419022093B30419024093B30419028093B3041902A093B3041902C094B3041902E094B30419022095B30419024095B30419028095B3041902A095B3041902C095B3041902E095B30419022096B30419024096B30419028096B3041902A096B30419029C25C425F72540267C26AB26B126B626C926D126EB26092747275A2767277527A227C727CE27D427DD27E22700284028812887289328A828B728D928052923293B294929572968297D29C129EE29532A0A2B182B7A2BB22BB82BE32BEA2BF02BF52B612C672C712C832CA22CDB2CEA2C0C2D3D2D612D6D2D732D7E2D972DBC2DC52DDC2DF02D132E342E452E742E7A2E862E8D2EBC2ED12EE72E0E2F522FA52FB42FBD2FC92F3130CC30033115311D3135315B3171319131B531C531CE31E531F0310732223241324C325E3279327E3283329F32B332C232D332E932FF320C33283369339633BD33D033D933ED3332343D344334713493341602A334E334EF343D3549356E359935EC350A3621362F36513657367A3684368E36E436F136F736013712371D372837353757377737A837BF37C63709381A3844385E38643883388D38B538C438F138F738FF3804391D392C393A396C399F39013A303A453A6E3AEE3A923BFB3B0F3C183C323C603C6C3CE13CFC3C303D693D9B3DA13DBF3DCA3DD23DDC3D013E073E113F234042405A409040D340F14000410641184138416C41DB410E42164240424C4273429F42E5424F438343894394439A43B443BA43C043CB43090001000A0002000C0003000F0005001000070011000B0018000F00190010001B0011001C001300270015002A0016002B001A002C001E002E001F0030002000310022003600230038002600390029003B002F003E0031003F003200400036004100380042003C0043003E0044004100450044004600470047004A0048004D00490053004C0059004D005A004E005B0050005E0052005F00590060005C0063005D0065006100670063006A0065006B006A006C006B006D006C0072006D007D006E0080007200810073008200740083007E00880081008A0083008B0085008C0086008F00890091008E0093008F009500910097009200990093009B0094009D0095009F009600A1009800A3009900A5009A00A7009C00A9009D00AB009E00AD009F00AF00A100B100A200B300A800B600A900B800AA00BA00AB00BC00AD00BE00AE00C000AF00C200B000C400B100C600B200C800B300CA00B500CC00B600CE000000190EEE020000190EEE020000270FFE0300004F0603040000970F3A040000320C3E040000ED0F7C040000F20F81040000FA0F81040000FE0F810400007610CF0400007B10D40400008010D9040000851081040000D810950500004B1295050000A61349090000D81095050000A61349090000D810950500008E0D730D0000B7170C0E0000A61349090000C71749090000D810120E0000B7170C0E0000A61349090000C71749090000D810120E0000B7170C0E000095183A040000A61349090000C717490900009219190F00007A1C190F0000881CC3110000981C190F0000CA1C81040000D11C81040000190EEE020000651E190F0000751E190F00008C1E49090000CA1C81040000D11C81040000190EEE020000EA030D1300002E1F131300007220810400008010DD1300002923DD1300005223810400008223190F0000F72300140000FF23051400008010DD1300002923DD1300008510810400008223190F0000F72300140000FF23051400008524190F00009124190F00009C24810400008524190F00009124190F00009C24810400008524190F00009124190F00009C24810400009C24810400009124190F00008524190F0000CA1C81040000D11C81040000190EEE020000CA1C81040000D11C81040000190EEE0200009C24810400009124190F00008524190F0000CA1C81040000D11C81040000190EEE0200009C24810400009124190F00008524190F00009F0B3A040000A61349090000CA1C81040000D11C81040000190EEE020000F3273A0400005B28BF16000087293A04000037243A0400002E1F3A0400008510810400001F2D190F00008C2DA01800008010A6180000CA1C81040000D11C81040000190EEE020000BC2E190F00001C2FCF1900001309E41900007C30190F00009030190F0000A530E4190000BE11611A0000AE30E41900007132CF190000372F810400007D32190F000089323A0400008D323A040000A530E4190000BE11611A000095323A040000A7323A040000B832190F0000AE30E4190000CA1C81040000190EEE020000D11C81040000F332D41A000022330D1B000022330D1B0000C228881B0000DE288E1B0000EB35941B000010299A1B00001829A01B00009937A61E00008010AF1E0000AE30E4190000A61349090000CA1C81040000D11C81040000190EEE020000A61349090000C717490900007D3B4324000082170C0E0000DA4705140000FF2305140000164900140000FF2305140000B64BF42A0000FF2305140000F54D6B2B0000FF2305140000F54D6B2B0000FF2305140000F54D6B2B0000FF2305140000F54D6B2B0000FF2305140000EE50562C0000FF230514000078533A040000FF230514000078533A040000FF230514000078533A040000FF230514000078533A040000FF2305140000EE50562C0000FF2305140000EE50562C0000FF2305140000A95813130000FF2305140000445BA0180000FF23051400008729001400003724BC3500002E1FC1350000445ECC360000FF230514000078533A040000FF230514000078533A040000FF2305140000445BA0180000FF2305140000445BA0180000FF2305140000445BA0180000FF230514000078533A040000FF2305140000EE50562C0000FF2305140000A95813130000FF230514000078533A040000FF230514000078533A040000FF2305140000445BA0180000FF2305140000036949430000FF23051402001200030002001500050002002900070001002A00070002002B00090001002C000900020038000B00010039000B0002003A000D0001003B000D0002003F000F0002004000110002004100130002004200150002004E00170002004F001900020050001B00020051001D00020071001F0002007700210002008A00230002008B0025000200960027000200970029000100D3002B000200D2002B000200DF002D000200E0002F000200E10031000200E20033000200E60035000200E70037000200E80039000200E9003B000200EF003D000200F4003F0002000501410002000601430002000901450001000A01450002002D01470001002E01470002002F014900010030014900020031014B00010032014B00020040014D00020041014F0002004201510002004501530001004601530001004801550002004701550002004901570001004A01570002004B01590002004C015B0002004D015D0002006A015F0001006B015F0002006C01610001006D01610002007A01630002008601650002008701670001008801670002008D01690002008E016B00020095016D00020096016F0002009E01710002009F0173000100A00173000200A50175000200A60177000200AB0179000200AC017B000200B0017D000200B1017F000200B20181000200B90183000200BC0185000200BD0187000200C50189000200C8018B000200C9018D000200CF018F000200D00191000200D30193000200D80195000200D90197000200DA0199000200DE019B000200DF019D000200E0019F000200E101A1000200E201A3000200E701A5000200F001A7000200F101A9000200F201AB000200F301AD000200F401AF000200F901B10002000502B30001000602B30002000A02B50002000C02B70002000D02B90002000E02BB0002001D02BD0001001E02BD0002002002BF0001002102BF0002003A02C10001003B02C10002003C02C30001003D02C30002003E02C50001003F02C50002004B02C70002004C02C90001005C02CB0002005B02CB0001005E02CD0002005D02CD0002006F02CF0002007002D10002007102D30002007C02D50002009102D70002009B02D9000200A302DB000100A402DB000200A502DD000100A602DD000200A702DF000200A802E1000200A902E3000200B102E5000100B202E5000200B302E7000100B402E7000200B502E9000100B602E9000200B702EB000100B802EB000200B902ED000100BA02ED000200BB02EF000200BC02F1000100BE02F3000200BD02F3000100C002F5000200BF02F5000200C102F7000100C202F7000200C302F9000200C902FB000200CA02FD000200CB02FF000200D10201010200D90203010200DD0205010200E00207010100E10207010100E30209010200E20209010200E4020B010100E5020B010200E6020D010100E7020D010200E8020F010100E9020F0102001903110102001A031301020049031501020058031701020062031901020063031B01020064031D0102006D031F0102006E03210101007F03230102007E03230102008503250102009D0327010200A00329010200A5032B010200A8032D010200AF032F010200B20331010200B70333010200BA0335010200BF0337010200C20339010200CB033B010200CE033D010200D4033F010200D70341010200DD0343010200E00345010200E50347010200E80349010200EE034B010200F1034D010200F6034F010200F903510102000204530102000504550102000B04570102000E045901020013045B01020016045D0102001C045F0102001F04610102002804630102002B04650102002E04670102002F046901020030046B0102003F046D01020042046F0102004804710102004B04730102005104750102005404770102005904790102005C047B01020063047D01020066047F0102006D04810102007004830102007504850102007804870102007E048901020081048B01020087048D0102008A048F0102009004910102009304930102009904950102009C0497010200A90499010200AC049B010200B1049D010200B4049F011100BA0003001900EE00050025009C01070025009E0109002E00F8010B003F00100315003F0008030F003F000A0311003F000E0313003F0006030D003F00120317003F00140319003F0016031B003F0018031D003F001A031F003F001E0321003F00200323003F002203030040002C03250040003203270041005203030041003A03110041003E03130041004003150041004203170041004403190041004E032100410038030F0042005803250042005E0327004800C80329004900EC0329005D00C80403006B00520536056C00860536057400D80554047400D60552047400D40550047400DA0556047400DC0558048100920636058E003C072B018E00360703008E00380725018E003A0729018E00340727018E003E0727008E00400725008F00440723008F00460703008F00480725018F004A0735018F004C072B018F004E0727008F005007250091005E07990191005A07030091005C072501910058079701910060072B0191006207270091006407250092006807A10192006A07030092006C07250192006E07A301920070072B0192007207270092007407250093007807A10193007A07030093007C07250193007E07A301930080072B0193008207270093008407250094009007A10194009207030094009407250194009607A301940098072B0194009A07270094009C0725009500A807A3019500A40703009500A60725019500A207A1019500AA072B019500AC0727009500AE0725009600B4078F019600B60703009600B80725019600BA0791019600BC072B019600BE0727009600C00725009800CA071D029800C60703009800C80725019800C4071B029800CC072B019800CE0727009800D00725009900DC071D029900D80703009900DA0725019900D6071B029900DE072B019900E00727009900E20725009A00E6071B029A00E80703009A00EA0725019A00EC071D029A00EE072B019A00F00727009A00F20725009C00020825019C00000803009C00FE071B029C0004081D029C0006082B019C00080827009C000A0825009D0010088F019D00120803009D00140825019D00160891019D0018082B019D001A0827009D001C0825009E0020088F019E00220803009E00240825019E00260891019E0028082B019E002A0827009E002C0825009F003208A3039F00340803009F00360825019F003808A5039F003A082B019F003C0827009F003E082500A1004E082501A1004C080300A1004A08CF01A1005008D101A10052082B01A10054082700A10056082500A8007C082501A8007E08AB02A80080082B01A80082082700A80084082500A90092082B01A9008C080300A9008E082501A90090081D02A9008A081B02A90094082700A90096082500AA00A2081D02AA009E080300AA00A0082501AA009C081B02AA00A4082B01AA00A6082700AA00A8082500AB00AC08CF01AB00AE080300AB00B0082501AB00B208D101AB00B4082B01AB00B6082700AB00B8082500AD00C2080300AD00C008CF01AD00C4082501AD00C608D101AD00C8082B01AD00CA082700AD00CC082500AE00D408CF01AE00D6080300AE00D8082501AE00DA08D101AE00DC082B01AE00DE082700AE00E0082500AF00E4081B02AF00E6080300AF00E8082501AF00EA081D02AF00EC082B01AF00EE082700AF00F0082500B000F6088F01B000F8080300B000FA082501B000FC089101B000FE082B01B00000092700B00002092500B1000E09A503B1000A090300B1000C092501B1000809A303B10010092B01B10012092700B10014092500B2001A091B02B2001C090300B2001E092501B20020091D02B20022092B01B20024092700B20026092500B30032091D02B3002E090300B30030092501B3002C091B02B30034092B01B30036092700B30038092500B5005209D101B5004E090300B50050092501B5004C09CF01B50054092B01B50056092700B50058092500B6005C09CB01B6005E090300B60060092501B6006209CD01B60064092B01B60066092700B600680925000A0012001A0020002800300038004100490053005E0066006F00780081008A0093009F00A600AD00B400BB00C300CB00D200DB00E700F000FB0003010B01DB25E925092612265626DA26A727B9270728192826283328632869288B289D28A028C6\
-28FA281A293F2946294F2961298D299A29A729B429E5290A2A222A3A2A972A1F2B302B802BD02CE32CFC2C042D2D2D352D542D5E2DCC2DD42D2C2E5B2E612EFE2E2F2F792F892FD02FDE2FEC2FF52F06301730283082308D309430A830BC303B3143314B31533164318931FE316A32F032F7321833203332333A333E33A533AD33B5330F351C35D635E935F235FA350236183627363D369536BD3643374D3765376F37D637DE37F237F937003820382A3832383A3873387B38A438AC3851395B39B739C839D839E339F2391F3A5E3A813A933AA73ABA3AC83AD03A893BF03B073C223C2B3C503C583C5B3D623DBC3DE23D1E3E3A3E563E723E8A3E9B3EAC3EBD3ECE3EE73E003F9C40A640B040BD40CA400C414A415B418F41A341B741C74155435D43654304800000030003005300000001000000DE24F94200000200000000000000000000000100400A000000000200000000000000000000000100490A000000000200000000000000000000000100E93A00000000070005000A0008002800270031003000370036003A0039003B00390040003F00420041004E004D004F004E0052005100540053005D005C0060005F00750074007600740077007400780074007900740084008300850083008700860088008600890088008E0019008F00190090001F0091001F0092001F0093001F0094001F0095001F0096001F0098003000990030009A0039009B0041009C004D009D004E009E0052009F005400A0005700A1005700A3005C00A4005C00A5005C00A6005C00A7005C00A8005D00A9005E00AA005E00AB005F00AC007A00AD007A00AE007B00AF008300B0008400B1008500B2008600B3008600B4008A00B5008A00B6008A00B7008D00B8008D00B9008D00BA008D00BB008D00BC008D00000000000C005C0A0000000012005C0A0000000024005C0A0000000030005C0A0000000038005C0A000000003C005C0A010000003C00CE0A0000000042005C0A000000004600D60A000000004800D60A010000004800CE0A000000004A00D60A010000004A00CE0A000000004C005C0A0000000056005C0A000000005A005C0A000000005E005C0A0000000070005C0A000000007800EA0A010000007800EE0A000000007E005C0A0000000080005C0A0000000082005C0A0000000084005C0A0000000086005C0A0000000088005C0A000000008A005C0A000000008C005C0A00000000C200EA0A01000000C200EE0A00000000C400EA0A01000000C400EE0A00000000DC005C0A00000000E900CE0A00000000EB00CE0A00000000F500CE0A00000000F700CE0A0000000000015C0A000000001901CE0A000000001B01CE0A000000001E01CE0A000000002101CE0A000000002301CE0A000000003101CE0A000000003301CE0A0000000036015C0A000000003901CE0A000000003B01CE0A000000004401A85B010000004401B75B020000004401C45B0000000067065E380000000073065C0A000000008B065C0A000000008F065C0AF400B2286501B2287101B228FD02AD32350357339F03E9348A0652358E0658358E0668358E069F358A068F428E06EB428E06F1428E06F7428E06FD428E0603438E060943360035003700350000000000003C4D6F64756C653E0053514C232E4A736F6E46782E646C6C0041626F7574004A736F6E46780042736F6E456C656D656E7454797065004A736F6E46782E42736F6E0042736F6E42696E617279537562747970650042736F6E577269746572004942696E617279466F726D61747465726031004A736F6E46782E53657269616C697A6174696F6E0042736F6E466F726D61747465720042736F6E526561646572004942696E617279546F6B656E697A657260310042736F6E546F6B656E697A65720042736F6E4D44350042736F6E436F64655769746853636F70650042736F6E4A617661536372697074436F64650042736F6E53796D626F6C0042736F6E4442506F696E7465720042736F6E4F626A65637449440042736F6E42696E617279004942696E617279466F726D61747461626C656031004942736F6E466F726D61747461626C6500466163746F727944656C6567617465004A736F6E46782E436F646547656E0050726F787944656C65676174650047657474657244656C65676174650053657474657244656C65676174650049546F6B656E416E616C797A65726031004D6F64656C416E616C797A6572004A736F6E46782E4D6F64656C004D6F64656C4772616D6D617200494461746152656164657200446174615265616465726031004D6F64656C5265616465720046756E636032004D6F64656C53756273657175656E636572004D6F64656C546F6B656E5479706500494F626A65637457616C6B65726031004D6F64656C57616C6B657200494461746146696C7465726031004A736F6E46782E53657269616C697A6174696F6E2E46696C7465727300494461746146696C7465726032004461746146696C7465726032004D6F64656C46696C7465726031004A736F6E46782E4D6F64656C2E46696C746572730049736F383630314461746546696C74657200507265636973696F6E004D53416A61784461746546696C74657200494461746157726974657200446174615772697465726031004D6F64656C577269746572004954657874466F726D61747461626C6560310045636D615363726970744964656E746966696572004A736F6E46782E45636D61536372697074004954657874466F726D61747465726031004A736F6E577269746572004A736F6E46782E4A736F6E004A736F6E466F726D61747465720045636D61536372697074466F726D6174746572004948746D6C46696C7465725374726174656779004A736F6E46782E48746D6C0048746D6C46696C7465720048746D6C5461786F6E6F6D790048746D6C466F726D617474657200456D70747941747472696275746554797065004954657874546F6B656E697A657260310048746D6C546F6B656E697A657200514E616D65004174747269620049446174615472616E73666F726D657260320048746D6C4F75745472616E73666F726D65720043686172427566666572004A736F6E46782E494F0053657175656E6365427566666572603100456E756D657261746F720053756273657175656E63656031004953747265616D60310053747265616D603100456E756D657261626C6553747265616D6031004C69737453747265616D603100495465787453747265616D00537472696E6753747265616D005465787452656164657253747265616D004A736F6E4772616D6D6172004A736F6E49676E6F7265417474726962757465004A736F6E4E616D65417474726962757465004A736F6E526561646572004A736F6E546F6B656E697A6572004E6565647356616C756544656C696D004A736F6E53706563696669656450726F7065727479417474726962757465004A736F6E4D4C526561646572004A736F6E46782E4A736F6E4D4C004A736F6E4D4C496E5472616E73666F726D6572004A736F6E4D4C577269746572004A736F6E4D4C4F75745472616E73666F726D657200495265736F6C7665725374726174656779004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C7665727300506F636F5265736F6C7665725374726174656779004A736F6E5265736F6C7665725374726174656779004A736F6E46782E4A736F6E2E5265736F6C76657273005768697465737061636554797065004A736F6E46782E4D61726B757000556E706172736564426C6F636B004D61726B75704772616D6D6172004D61726B7570546F6B656E547970650050726566697853636F7065436861696E0053636F7065004461746150726F76696465725574696C697479004A736F6E46782E53657269616C697A6174696F6E2E50726F76696465727300436F6E76656E74696F6E5265736F6C766572537472617465677900576F7264436173696E67005472616E73666F726D546F6B656E697A65726032005472616E73666F726D466F726D6174746572603200446174614E616D650053657269616C697A6174696F6E457863657074696F6E0047726170684379636C65457863657074696F6E004A736F6E46782E53657269616C697A6174696F6E2E47726170684379636C65730047726170684379636C655479706500494379636C654465746563746F72004465707468436F756E746572005265666572656E636553657400495265736F6C7665724361636865436F6E7461696E6572004461746152656164657253657474696E6773004461746157726974657253657474696E677300446573657269616C697A6174696F6E457863657074696F6E00546F6B656E457863657074696F6E60310054797065436F657263696F6E457863657074696F6E00494461746152656164657250726F7669646572004461746152656164657250726F766964657200494461746157726974657250726F7669646572004461746157726974657250726F76696465720043616C6C6261636B5265736F6C76657253747261746567790050726F706572747949676E6F72656444656C6567617465004669656C6449676E6F72656444656C65676174650047657456616C756549676E6F72656444656C6567617465004765744E616D6544656C656761746500536F72744D656D6265727344656C656761746500436F6D62696E65645265736F6C76657253747261746567790044617461436F6E74726163745265736F6C76657253747261746567790056616C756549676E6F72656444656C6567617465004D656D6265724D617000466163746F72794D6170005265736F6C766572436163686500546F6B656E60310054797065436F657263696F6E5574696C69747900436861725574696C697479004A736F6E46782E5574696C7300586D6C526561646572004A736F6E46782E586D6C00586D6C496E5472616E73666F726D657200586D6C546F6B656E697A657200586D6C57726974657200586D6C4F75745472616E73666F726D657200586D6C466F726D617474657200586D6C5772697465724164617074657200586D6C5265736F6C7665725374726174656779004A736F6E46782E586D6C2E5265736F6C76657273004A534F4E5574696C7300457874656E73696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C657253657276696365730044796E616D69634D6574686F6447656E657261746F72006D73636F726C69620053797374656D004F626A65637400456E756D00540049446973706F7361626C650056616C7565547970650053797374656D2E436F6C6C656374696F6E732E47656E657269630049456E756D657261626C6560310053797374656D2E436F6C6C656374696F6E730049456E756D657261626C65004D756C74696361737444656C65676174650054526573756C740054546F6B656E54797065004461746554696D650054496E00544F757400494C69737460310049436F6C6C656374696F6E60310049456E756D657261746F7260310049456E756D657261746F7200417474726962757465004B657956616C75655061697260320049436F6D70617261626C65603100496E76616C69644F7065726174696F6E457863657074696F6E00417267756D656E74457863657074696F6E0053797374656D2E494F00546578745772697465720046780056657273696F6E0046756C6C4E616D65004E616D6500436F6E66696775726174696F6E00436F70797269676874005469746C65004465736372697074696F6E00436F6D70616E790053797374656D2E5265666C656374696F6E00417373656D626C79002E63746F720076616C75655F5F004E6F6E6500446F75626C6500537472696E6700446F63756D656E740041727261790042696E61727900556E646566696E6564004F626A656374494400426F6F6C65616E004461746554696D65557463004E756C6C00526567457870004442506F696E746572004A617661536372697074436F64650053796D626F6C00436F64655769746853636F706500496E7433320054696D655374616D7000496E743634004D696E4B6579004D61784B65790047656E657269630046756E6374696F6E0042696E6172794F6C640055554944004D44350055736572446566696E6564004572726F72556E7465726D696E61746564004572726F72556E6578706563746564546F6B656E004572726F7245787065637465644F626A65637456616C756544656C696D0053697A654F66427974650053697A654F66496E7433320053697A654F66496E7436340053697A654F66446F75626C650053697A654F664F626A6563744944004E756C6C427974650046616C73654279746500547275654279746500556E697845706F63680053747265616D00466F726D61740042696E617279577269746572005772697465446F63756D656E74005772697465456C656D656E74005772697465537472696E6700577269746542696E617279005772697465436F64655769746853636F706500476574456C656D656E74547970650047657442736F6E42696E617279006765745F496E64657800476574546F6B656E7300496E646578004572726F72556E6578706563746564456C656D656E74547970650042696E617279526561646572004E756C6C42696E61727952656164657200526561646572004C69737460310052656164446F63756D656E740052656164456C656D656E74005265616442696E6172790052656164537472696E67005265616443537472696E6700446973706F736500477569640048617368006F705F4578706C6963697400546F537472696E670047657448617368436F6465006765745F436F6465007365745F436F6465006765745F53636F7065007365745F53636F7065003C436F64653E6B5F5F4261636B696E674669656C64003C53636F70653E6B5F5F4261636B696E674669656C6400436F6465006765745F4E616D657370616365007365745F4E616D657370616365006765745F4F626A6563744944007365745F4F626A6563744944003C4E616D6573706163653E6B5F5F4261636B696E674669656C64003C4F626A65637449443E6B5F5F4261636B696E674669656C64004E616D65737061636500456D707479004279746573006765745F54696D65006765745F4D616368696E65006765745F506964006765745F496E6300546F4279746541727261790050617273650054727950617273650054696D65004D616368696E650050696400496E630053756274797065006765745F44617461006765745F54797065006765745F4974656D006765745F436F756E7400476574486578446967697400476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E49456E756D657261626C652E476574456E756D657261746F7200446174610054797065004974656D00436F756E7400496E766F6B6500494173796E63526573756C74004173796E6343616C6C6261636B00426567696E496E766F6B6500456E64496E766F6B65006765745F53657474696E677300416E616C797A650053657474696E6773004572726F7245787065637465644172726179004572726F72457870656374656441727261794974656D004572726F72457870656374656441727261794974656D44656C696D004572726F724D697373696E6741727261794974656D004572726F72556E7465726D696E617465644172726179004572726F7245787065637465644F626A656374004572726F72457870656374656450726F70657274794E616D65004572726F724D697373696E674F626A65637450726F7065727479004572726F72556E7465726D696E617465644F626A65637400436F657263696F6E0046696C74657273004A736F6E46782E53657269616C697A6174696F6E2E49546F6B656E416E616C797A65723C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E2E6765745F53657474696E677300436F6E73756D6556616C756500436F6E73756D654F626A65637400436F6E73756D654172726179005472795265616446696C74657273004A736F6E46782E53657269616C697A6174696F6E2E49546F6B656E416E616C797A65723C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E2E53657474696E677300546F6B656E4E6F6E6500546F6B656E4172726179456E6400546F6B656E4F626A656374456E6400546F6B656E4E756C6C00546F6B656E46616C736500546F6B656E5472756500546F6B656E4172726179426567696E556E6E616D656400546F6B656E4F626A656374426567696E556E6E616D656400546F6B656E4E614E00546F6B656E506F736974697665496E66696E69747900546F6B656E4E65676174697665496E66696E69747900546F6B656E4172726179426567696E00546F6B656E4F626A656374426567696E00546F6B656E50726F706572747900546F6B656E5072696D6974697665006765745F436F6E74656E74547970650054657874526561646572005265616400526561644D616E7900436F6E74656E74547970650073657474696E6773005265616453696E676C6500476574546F6B656E697A657200476574416E616C797A6572004572726F72556E6578706563746564456E644F66496E707574004572726F72496E76616C696450726F706572747956616C756500456D70747953657175656E63650049735072696D69746976650049734F626A6563740048617350726F70657274790050726F70657274790050726F706572746965730050726F706572746965734974657261746F7200497341727261790041727261794974656D730041727261794974656D734974657261746F720044657363656E64616E74730044657363656E64616E74734974657261746F720044657363656E64616E7473416E6453656C660044657363656E64616E7473416E6453656C664974657261746F720053706C697456616C7565730053706C697456616C7565734974657261746F720053706C6963654E65787456616C75654C617A790053706C6963654E65787456616C756500536B69704E65787456616C7565004F626A656374426567696E004F626A656374456E64004172726179426567696E004172726179456E64005072696D6974697665004765744172726179546F6B656E73004944696374696F6E617279456E756D657261746F72004765744F626A656374546F6B656E7300476574547970654E616D650054727952656164005472795772697465004A736F6E46782E53657269616C697A6174696F6E2E46696C746572732E494461746146696C7465723C54546F6B656E547970653E2E54727952656164004A736F6E46782E53657269616C697A6174696F6E2E46696C746572732E494461746146696C7465723C54546F6B656E547970653E2E54727957726974650053686F7274466F726D6174004C6F6E67466F726D61740046756C6C466F726D61740069736F38363031466F726D6174006765745F466F726D6174007365745F466F726D617400547279506172736549736F3836303100466F726D617449736F38363031005365636F6E6473004D696C6C697365636F6E6473005469636B73004D696E56616C75654D696C6C697365636F6E6473004D617856616C75654D696C6C697365636F6E6473004D53416A6178446174655061747465726E004D53416A617844617465507265666978004D53416A6178446174655375666669780045636D6153637269707445706F63680053797374656D2E546578742E526567756C617245787072657373696F6E73005265676578004D53416A61784461746552656765780054727950617273654D53416A61784461746500466F726D61744D53416A6178446174650053797374656D2E5465787400456E636F64696E67006765745F436F6E74656E74456E636F64696E67006765745F46696C65457874656E73696F6E00577269746500436F6E74656E74456E636F64696E670046696C65457874656E73696F6E0047657457616C6B657200476574466F726D6174746572006964656E746966696572006765745F4964656E746966696572005665726966794964656E74696669657200497356616C69644964656E7469666965720049735265736572766564576F7264006F705F496D706C69636974004A736F6E46782E53657269616C697A6174696F6E2E4954657874466F726D61747461626C653C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E2E466F726D617400457175616C73004964656E74696669657200436F6E74656E74547970657300656E636F64654C6573735468616E006765745F456E636F64654C6573735468616E007365745F456E636F64654C6573735468616E0057726974655072696D697469766500577269746550726F70657274794E616D650054797065436F64650057726974654E756D6265720057726974654E65676174697665496E66696E697479005772697465506F736974697665496E66696E6974790057726974654E614E0057726974654C696E6500466F726D6174537472696E6700466F726D6174456E756D00476574466C61674C69737400446563696D616C00496E76616C69644945454537353400456E636F64654C6573735468616E0045636D615363726970744461746543746F72310045636D615363726970744461746543746F723700456D7074795265674578704C69746572616C005265674578704C69746572616C44656C696D004F70657261746F7243686172457363617065004E616D65737061636544656C696D00526F6F744465636C61726174696F6E446562756700526F6F744465636C61726174696F6E004E616D657370616365436865636B004E616D657370616365436865636B4465627567004E616D65737061636544656C696D730042726F777365724F626A656374730057726974654E616D6573706163654465636C61726174696F6E00577269746545636D615363726970744461746500577269746545636D615363726970745265674578700046696C7465725461670046696C7465724174747269627574650046696C7465725374796C650046696C7465724C69746572616C00566F6964546167526571756972656400436C6F73655461674F7074696F6E616C004765745461786F6E6F6D79005465787400496E6C696E65005374796C65004C69737400426C6F636B004D65646961005461626C6500466F726D0053637269707400506C7567696E00556E6B6E6F776E0053636F7065436861696E0063616E6F6E6963616C466F726D00656D7074794174747269627574657300656E636F64654E6F6E4173636969006765745F43616E6F6E6963616C466F726D007365745F43616E6F6E6963616C466F726D006765745F456D70747941747472696275746573007365745F456D70747941747472696275746573006765745F456E636F64654E6F6E4173636969007365745F456E636F64654E6F6E417363696900526573657453636F7065436861696E004944696374696F6E6172796032005772697465546167005772697465586D6C6E730057726974654174747269627574650057726974654C6F63616C4E616D650048746D6C456E636F64650048746D6C417474726962757465456E636F64650043616E6F6E6963616C466F726D00456D7074794174747269627574657300456E636F64654E6F6E41736369690048746D6C005868746D6C00586D6C006765745F436F6C756D6E006765745F4C696E6500436F6C756D6E004C696E650044656661756C7442756666657253697A65005363616E6E657200756E70617273656454616773006175746F42616C616E636554616773006765745F4175746F42616C616E636554616773007365745F4175746F42616C616E636554616773006765745F556E77726170556E706172736564436F6D6D656E7473007365745F556E77726170556E706172736564436F6D6D656E7473006765745F556E70617273656454616773007365745F556E70617273656454616773005363616E546167005363616E556E706172736564426C6F636B005363616E556E70617273656456616C7565005363616E41747472696275746556616C7565005363616E514E616D65004973546167436F6D706C65746500456D697454616700456D69745465787400536B697057686974657370616365004465636F6465456E74697479004465636F6465456E746974794E616D650049734E616D655374617274436861720049734E616D6543686172003C556E77726170556E706172736564436F6D6D656E74733E6B5F5F4261636B696E674669656C64004175746F42616C616E63655461677300556E77726170556E706172736564436F6D6D656E747300556E70617273656454616773004E616D6544656C696D00507265666978006F705F457175616C697479006F705F496E657175616C6974790049457175616C697479436F6D70617265726031006765745F514E616D65007365745F514E616D65006765745F56616C7565007365745F56616C7565003C514E616D653E6B5F5F4261636B696E674669656C64003C56616C75653E6B5F5F4261636B696E674669656C640056616C7565005472616E73666F726D00526F6F745461674E616D650041727261795461674E616D650041727261794974656D5461674E616D65004F626A6563745461674E616D65004F626A65637450726F70657274794B65795461674E616D65004F626A65637450726F706572747956616C75655461674E616D65005072696D69746976655461674E616D650048696E744174747269627574654E616D65005472616E73666F726D56616C7565005472616E73666F726D5072696D6974697665005472616E73666F726D4172726179005472616E73666F726D4F626A6563740044656661756C74436170616369747900456D707479427566666572006275666665720073697A65006765745F4C656E67746800436C65617200417070656E6400537472696E674275696C64657200436F7079546F00456E737572654361706163697479004C656E677468004361636865004974657261746F72006973436F6D706C6574650053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E496E6465784F6600496E6465784F660053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E496E7365727400496E736572740053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E52656D6F766541740052656D6F766541740053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E6765745F4974656D0053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E7365745F4974656D007365745F4974656D0053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E416464004164640053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E436C6561720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E436F6E7461696E7300436F6E7461696E730053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E436F7079546F0053797374656D2E436F6C6C656374696F6E732E47656E6572\
-69632E49436F6C6C656374696F6E3C543E2E6765745F436F756E74006765745F4973526561644F6E6C790053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E52656D6F76650052656D6F76650053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C543E2E476574456E756D657261746F7200547279416476616E6365005365656B546F456E640053797374656D2E436F6C6C656374696F6E732E47656E657269632E494C6973743C543E2E4974656D0053797374656D2E436F6C6C656374696F6E732E47656E657269632E49436F6C6C656374696F6E3C543E2E436F756E74004973526561644F6E6C790053657175656E6365006765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E6765745F43757272656E74004D6F76654E6578740052657365740053797374656D2E49446973706F7361626C652E446973706F73650043757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E43757272656E74004974656D730053746172740053697A6500456E64006765745F4973436F6D706C65746564006765745F49734368756E6B696E67006765745F4368756E6B53697A65005065656B00506F7000426567696E4368756E6B00456E644368756E6B004973436F6D706C657465640049734368756E6B696E67004368756E6B53697A650043726561746500496E697469616C4368756E6B43617061636974790069735265616479006973436F6D706C657465640063757272656E74006368756E6B00456E7375726552656164790042756666657200696E64657800737461727400636F6C756D6E006C696E65004A736F6E46782E494F2E4953747265616D3C53797374656D2E436861723E2E456E644368756E6B0055706461746553746174730070726576004B6579776F7264556E646566696E6564004B6579776F72644E756C6C004B6579776F726446616C7365004B6579776F726454727565004B6579776F72644E614E004B6579776F7264496E66696E697479004F70657261746F724172726179426567696E004F70657261746F724172726179456E64004F70657261746F724F626A656374426567696E004F70657261746F724F626A656374456E64004F70657261746F7256616C756544656C696D004F70657261746F725061697244656C696D004F70657261746F72537472696E6744656C696D004F70657261746F72537472696E6744656C696D416C74004F70657261746F72556E6172794D696E7573004F70657261746F72556E617279506C7573004F70657261746F72446563696D616C506F696E74004F70657261746F72436F6D6D656E74426567696E004F70657261746F72436F6D6D656E74456E64004F70657261746F72436F6D6D656E744C696E65006E616D65006765745F4E616D65007365745F4E616D65004572726F72556E7265636F676E697A6564546F6B656E004572726F72556E7465726D696E61746564436F6D6D656E74004572726F72556E7465726D696E61746564537472696E67004572726F72496C6C6567616C4E756D626572004572726F724D697373696E6756616C756544656C696D004572726F72457874726156616C756544656C696D00536B6970436F6D6D656E7473416E6457686974657370616365005363616E4E756D626572005363616E537472696E67005363616E4B6579776F726473005363616E4964656E74696669657200466F7262696464656E0043757272656E74497344656C696D0052657175697265640073706563696669656450726F7065727479006765745F53706563696669656450726F7065727479007365745F53706563696669656450726F70657274790053706563696669656450726F70657274790053696E676C65537061636500526567657857686974657370616365006765745F57686974657370616365007365745F57686974657370616365003C576869746573706163653E6B5F5F4261636B696E674669656C640057686974657370616365004572726F724D697373696E675461674E616D65004572726F72496E76616C696441747472696275746556616C7565004572726F72556E7465726D696E61746564417474726962757465426C6F636B0050726F7065727479496E666F00497350726F706572747949676E6F726564004669656C64496E666F0049734669656C6449676E6F726564004D656D626572496E666F0047657456616C756549676E6F72656443616C6C6261636B004765744E616D6500536F72744D656D62657273005072657365727665004E6F726D616C697A65006765745F426567696E007365745F426567696E006765745F456E64007365745F456E64003C426567696E3E6B5F5F4261636B696E674669656C64003C456E643E6B5F5F4261636B696E674669656C6400426567696E004F70657261746F72456C656D656E74426567696E004F70657261746F72456C656D656E74456E64004F70657261746F72456C656D656E74436C6F7365004F70657261746F7250726566697844656C696D004F70657261746F72456E74697479426567696E004F70657261746F72456E746974794E756D004F70657261746F72456E74697479486578004F70657261746F72456E74697479486578416C74004F70657261746F72456E74697479456E64004F70657261746F72436F6D6D656E74004F70657261746F72436F6D6D656E7444656C696D004F70657261746F724344617461426567696E004F70657261746F724344617461456E64004F70657261746F7250726F63657373696E67496E737472756374696F6E004F70657261746F7250687045787072657373696F6E426567696E004F70657261746F7250726F63657373696E67496E737472756374696F6E426567696E004F70657261746F7250726F63657373696E67496E737472756374696F6E456E64004F70657261746F72436F6465004F70657261746F72436F6465446972656374697665004F70657261746F72436F646545787072657373696F6E004F70657261746F72436F64654465636C61726174696F6E004F70657261746F72436F6465456E636F646564004F70657261746F72436F64654461746142696E64004F70657261746F72436F6465457874656E73696F6E004F70657261746F72436F6465426C6F636B426567696E004F70657261746F72436F6465456E64004F70657261746F725434004F70657261746F725434446972656374697665004F70657261746F72543445787072657373696F6E004F70657261746F725434436C61737346656174757265004F70657261746F725434426C6F636B426567696E004F70657261746F725434456E6400546F6B656E456C656D656E74456E6400546F6B656E556E70617273656400546F6B656E456C656D656E74426567696E00546F6B656E456C656D656E74566F696400546F6B656E41747472696275746500456C656D656E74426567696E00456C656D656E74456E6400456C656D656E74566F696400436861696E006E73436F756E746572006765745F48617353636F7065005075736800436F6E7461696E7350726566697800436F6E7461696E734E616D657370616365004765744E616D6573706163650047657450726566697800436F6E7461696E7354616700456E737572655072656669780047656E65726174655072656669780048617353636F706500536F727465644C6973746032007072656669786573006765745F5461674E616D65007365745F5461674E616D65005472794765744E616D65737061636500547279476574507265666978003C5461674E616D653E6B5F5F4261636B696E674669656C64005461674E616D650044656661756C74436F6E74656E7454797065005061727365486561646572730050617273654D65646961547970650053706C69745472696D004E6F726D616C697A65457874656E73696F6E00576F7264536570617261746F7200436173696E670053706C6974576F726473004E6F4368616E67650050617363616C436173650043616D656C43617365004C6F776572636173650055707065726361736500546F6B656E697A6572005472616E73666F726D657200466F726D6174746572004C6F63616C4E616D65004E616D657370616365557269004973417474726962757465006765745F4973456D707479004765745374616E6461726450726566697800546F50726566697865644E616D6500546F5175616C69666965644E616D6500436F6D70617265546F004973456D70747900457863657074696F6E0053797374656D2E52756E74696D652E53657269616C697A6174696F6E0053657269616C697A6174696F6E496E666F0053747265616D696E67436F6E74657874006765745F4379636C6554797065004379636C65547970650049676E6F7265005265666572656E6365004D6178446570746800646570746800496E697469616C53697A650047726F777468466163746F7200456D7074794172726179006172726179006765745F5265736F6C766572436163686500616C6C6F774E756C6C56616C7565547970657300616C6C6F77547261696C696E67436F6E74656E74004D6F64656C46696C74657273006765745F416C6C6F774E756C6C56616C75655479706573007365745F416C6C6F774E756C6C56616C75655479706573006765745F416C6C6F77547261696C696E67436F6E74656E74007365745F416C6C6F77547261696C696E67436F6E74656E74006765745F5265736F6C766572006765745F46696C74657273004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C7665724361636865436F6E7461696E65722E6765745F5265736F6C766572436163686500416C6C6F774E756C6C56616C7565547970657300416C6C6F77547261696C696E67436F6E74656E74005265736F6C766572004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C7665724361636865436F6E7461696E65722E5265736F6C7665724361636865007072657474795072696E740067726170684379636C657300746162006D61784465707468006E65774C696E650061727261794E616D654F76657272696465006974656D4E616D654F7665727269646500696E636C75646541727261794E616D65466F724F626A656374006765745F47726170684379636C6573007365745F47726170684379636C6573006765745F4D61784465707468007365745F4D61784465707468006765745F5072657474795072696E74007365745F5072657474795072696E74006765745F546162007365745F546162006765745F4E65774C696E65007365745F4E65774C696E65006765745F41727261794E616D654F76657272696465007365745F41727261794E616D654F76657272696465006765745F4974656D4E616D654F76657272696465007365745F4974656D4E616D654F76657272696465006765745F496E636C75646541727261794E616D65466F724F626A656374007365745F496E636C75646541727261794E616D65466F724F626A6563740047726170684379636C6573005072657474795072696E7400546162004E65774C696E650041727261794E616D654F76657272696465004974656D4E616D654F7665727269646500496E636C75646541727261794E616D65466F724F626A656374004765744C696E65416E64436F6C756D6E00746F6B656E006765745F546F6B656E00546F6B656E0046696E64005265616465727342794D696D65006765745F44656661756C74446174615772697465720044656661756C74446174615772697465720044656661756C7457726974657200577269746572734279457874005772697465727342794D696D65006765745F497350726F706572747949676E6F726564007365745F497350726F706572747949676E6F726564006765745F49734669656C6449676E6F726564007365745F49734669656C6449676E6F726564006765745F47657456616C756549676E6F726564007365745F47657456616C756549676E6F726564006765745F4765744E616D65007365745F4765744E616D65006765745F536F72744D656D62657273007365745F536F72744D656D62657273004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C76657253747261746567792E497350726F706572747949676E6F726564004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C76657253747261746567792E49734669656C6449676E6F726564004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C76657253747261746567792E47657456616C756549676E6F72656443616C6C6261636B004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C76657253747261746567792E4765744E616D65004A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E495265736F6C76657253747261746567792E536F72744D656D62657273003C497350726F706572747949676E6F7265643E6B5F5F4261636B696E674669656C64003C49734669656C6449676E6F7265643E6B5F5F4261636B696E674669656C64003C47657456616C756549676E6F7265643E6B5F5F4261636B696E674669656C64003C4765744E616D653E6B5F5F4261636B696E674669656C64003C536F72744D656D626572733E6B5F5F4261636B696E674669656C640047657456616C756549676E6F72656400496E6E6572537472617465676965730044617461436F6E7472616374417373656D626C794E616D650044617461436F6E7472616374547970654E616D6500446174614D656D626572547970654E616D650049676E6F7265446174614D656D626572547970654E616D650044617461436F6E74726163745479706500446174614D656D626572547970650049676E6F7265446174614D656D626572547970650044617461436F6E74726163744E616D654765747465720044617461436F6E74726163744E616D65737061636547657474657200446174614D656D6265724E616D65476574746572002E6363746F72004765747465720053657474657200497349676E6F726564004973416C7465726E617465004572726F7243616E6E6F74496E7374616E746961746500436F6C6C656374696F6E43746F72730043746F7200506172616D65746572496E666F0043746F724172677300416464547970650041646452616E67650041646452616E676554797065006765745F4172675479706573004973496E76616C696454797065004973496D6D757461626C6554797065004172675479706573004D656D626572436163686500456E756D436163686500466163746F72696573004E616D654361636865005374726174656779004C6F6164547970654E616D65004C6F61644D617073004C6F61644D656D6265724D6170004C6F6164456E756D4D617073004275696C644D6170004275696C64456E756D4D6170004C6F6164466163746F72790046756C6C4461746554696D65466F726D617400546F6B656E547970650056616C75654173537472696E67004368616E67655479706500544F7468657200416E6F6E796D6F757354797065507265666978004572726F724E756C6C56616C756554797065004572726F7243746F72004572726F7243616E6E6F74496E7374616E7469617465417354004572726F7247656E657269634944696374696F6E617279004572726F7247656E657269634944696374696F6E6172794B657973005479706547656E6572696349456E756D657261626C65005479706547656E6572696349436F6C6C656374696F6E005479706547656E657269634944696374696F6E61727900496E7374616E74696174654F626A65637444656661756C7443746F7200496E7374616E74696174654F626A656374005365744D656D62657256616C756500436F6572636554797065004944696374696F6E61727900436F657263654C6973740049436F6C6C656374696F6E00436F65726365436F6C6C656374696F6E00436F657263654172726179005265736F6C7665496E74657266616365547970650047657444696374696F6E6172794974656D547970650046696E64436F6D6D6F6E547970650049734E756C6C61626C6500486173417474726962757465004765744174747269627574650049734E756C6C4F725768697465537061636500497357686974655370616365004973436F6E74726F6C0049734C65747465720049734469676974004973486578446967697400476574486578537472696E6700436F6E76657274546F557466333200436F6E7665727446726F6D5574663332004572726F72496E76616C69644174747269627574650044656661756C744F626A6563744E616D650044656661756C7441727261794E616D650044656661756C744974656D4E616D65005472616E73666F726D456C656D656E74004465636F64654E616D650053797374656D2E586D6C00586D6C52656164657253657474696E67730070656E64696E674E65774C696E6500456D69744E65774C696E6500456E636F64654E616D6500466F726D6174417474726962757465006765745F577269746572007365745F57726974657200466C757368006765745F456E636F64696E67003C5772697465723E6B5F5F4261636B696E674669656C6400577269746572005370656369666965645375666669780053686F756C6453657269616C697A6550726566697800476574476574746572004765745365747465720047657450726F70657274794765747465720047657450726F7065727479536574746572004765744669656C64476574746572004765744669656C64536574746572004765744D6574686F6450726F7879004D6574686F64496E666F0047657454797065466163746F727900436F6E7374727563746F72496E666F00617373656D626C7900746F6B656E730073747265616D0077726974657200656E616D650076616C756500617343537472696E6700627974657300726561646572006973417272617900697341727261794974656D00646973706F73696E67006861736800636F64650074696D65006D616368696E650070696400696E6300726573756C740053797374656D2E52756E74696D652E496E7465726F705365727669636573004F75744174747269627574650073756274797065006900666F726D6174746572006F626A656374006D6574686F64006172677300506172616D41727261794174747269627574650063616C6C6261636B0074617267657400746172676574547970650069676E6F7265640061727261795479706500707265666978006E616D657370616365557269006C6F63616C4E616D6500696E70757400746F6B656E697A657200736F75726365007072656469636174650070726F70657274794E616D65006465746563746F7200747970654E616D6500656E756D657261746F72007479706500646174650064617461006F7574707574006964656E74006E6573746564007468726F774F6E456D707479006F626A00636F6E74656E7454797065730074797065436F646500656E756D54797065006E616D65737061636573007265676578006973476C6F62616C00746167007461786F6E6F6D7900617474726962757465007374796C65007461674E616D650061747472696275746573007072656669784465636C61726174696F6E730074657874007363616E6E657200756E7061727365644E616D6500626567696E00656E64007461675479706500714E616D6500636800610062007468617400636F6D7061726572006361706163697479006D696E0073657175656E6365006974656D006172726179496E646578006C656E677468006465737400627566666572656400756E617279006E6565647356616C756544656C696D006D656D626572006973496D6D757461626C6554797065006D656D626572730073636F7065007468726F774F6E556E6465636C6172656400636C6F7365546167007072656665727265645072656669780061636365707400636F6E74656E745479706500657874656E73696F6E00636173696E6700776F7264536570617261746F72006D756C7469776F7264007472616E73666F726D6572006973417474726962757465006D65737361676500696E6E6572457863657074696F6E00696E666F00636F6E74657874006379636C65547970650066696C74657273007374726174656779007265736F6C766572436163686500636F6C00636F6E74656E745479706548656164657200726561646572730061636365707448656164657200777269746572730070726F7065727479496E666F006973416E6F6E796D6F7573006669656C64496E666F006D656D626572496E666F007374726174656769657300696E7374616E6365006D656D62657256616C7565006D617000646174614E616D6500697349676E6F7265640061726754797065006F626A65637454797065006D61707300656E756D4D61707300746F6B656E54797065006361636865436F6E7461696E6572006D656D6265724D6170006D656D6265724E616D650076616C756554797065006974656D547970650075746633320069735374616E64416C6F6E6500656C656D656E744E616D6500636F756E74006465636C6172696E6754797065006D6574686F644E616D65006172675479706573006D6574686F64496E666F0063746F7200417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E536563757269747900416C6C6F775061727469616C6C795472757374656443616C6C6572734174747269627574650053797374656D2E446961676E6F73746963730044656275676761626C6541747472696275746500446562756767696E674D6F64657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E4A736F6E467800417267756D656E744E756C6C457863657074696F6E00417373656D626C794E616D65006765745F46756C6C4E616D65006765745F56657273696F6E0052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500476574437573746F6D417474726962757465006765745F436F70797269676874006765745F4465736372697074696F6E006765745F5469746C65006765745F436F6D70616E79006765745F436F6E66696775726174696F6E006765745F417373656D626C79004F62736F6C657465417474726962757465004461746554696D654B696E64004D656D6F727953747265616D00546F4172726179006765745F55544638006765745F4261736553747265616D006765745F506F736974696F6E005365656B4F726967696E005365656B0053797374656D2E476C6F62616C697A6174696F6E0043756C74757265496E666F006765745F496E76617269616E7443756C747572650049466F726D617450726F7669646572006765745F4B696E6400546F556E6976657273616C54696D650054696D655370616E005375627472616374006765745F546F74616C4D696C6C697365636F6E64730052656765784F7074696F6E73006765745F4F7074696F6E7300436F6E63617400476574427974657300476574547970650047657454797065436F6465004E6F74537570706F72746564457863657074696F6E005065656B436861720052656164496E7433320052656164427974650052656164446F75626C65005265616442797465730052656164496E743634004164644D696C6C697365636F6E6473006765745F436861727300426974436F6E76657274657200546F496E743332004279746500426C6F636B436F70790052656164436861727300526561644368617200474300537570707265737346696E616C697A65005374727563744C61796F7574417474726962757465004C61796F75744B696E6400457175616C697479436F6D70617265726031006765745F44656661756C7400436F6D70696C657247656E657261746564417474726962757465006765745F546F74616C5365636F6E64730055496E74313600417267756D656E744F75744F6652616E6765457863657074696F6E004164645365636F6E6473004368617200496E76616C696443617374457863657074696F6E0049734E756C6C4F72456D70747900537562737472696E67004E756D626572466F726D6174496E666F006765745F496E76617269616E74496E666F004E756D6265725374796C65730044656661756C744D656D626572417474726962757465003C416E616C797A653E645F5F300053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E4F626A6563743E2E476574456E756D657261746F72003C3E325F5F63757272656E740053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E6765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E5265736574003C3E315F5F7374617465003C3E6C5F5F696E697469616C5468726561644964003C3E345F5F74686973003C3E335F5F746F6B656E73003C3E335F5F74617267657454797065003C73747265616D3E355F5F310053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E43757272656E7400446562756767657248696464656E4174747269627574650053797374656D2E546872656164696E6700546872656164006765745F43757272656E74546872656164006765745F4D616E616765645468726561644964003C416E616C797A653E645F5F3460310053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C54526573756C743E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C54526573756C743E2E6765745F43757272656E74003C726573756C74547970653E355F5F35003C73747265616D3E355F5F360053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C54526573756C743E2E43757272656E740054727947657456616C756500494C697374004E756C6C5265666572656E6365457863657074696F6E006765745F4D657373616765003C3E635F5F44\
-6973706C6179436C61737332003C50726F70657274793E625F5F30003C50726F706572746965734974657261746F723E645F5F340053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E436F6C6C656374696F6E732E47656E657269632E4B657956616C7565506169723C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D652C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E3E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E4B657956616C7565506169723C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D652C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E3E2E6765745F43757272656E74003C3E335F5F736F75726365003C3E335F5F707265646963617465003C73747265616D3E355F5F35003C64657074683E355F5F36003C746F6B656E3E355F5F370053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E4B657956616C7565506169723C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D652C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E3E2E43757272656E74003C41727261794974656D734974657261746F723E645F5F610053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E2E6765745F43757272656E74003C73747265616D3E355F5F62003C696E6465783E355F5F63003C746F6B656E3E355F5F640053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E3E2E43757272656E74003C44657363656E64616E74734974657261746F723E645F5F3130003C70726F70657274793E355F5F3131003C64657363656E64616E743E355F5F3132003C6974656D3E355F5F3133003C64657363656E64616E743E355F5F3134003C3E375F5F777261703135003C3E6D5F5F46696E616C6C793136003C3E375F5F777261703137003C3E6D5F5F46696E616C6C793138003C3E375F5F777261703139003C3E6D5F5F46696E616C6C793161003C3E375F5F777261703162003C3E6D5F5F46696E616C6C793163003C44657363656E64616E7473416E6453656C664974657261746F723E645F5F3166003C64657363656E64616E743E355F5F3230003C3E375F5F777261703231003C3E6D5F5F46696E616C6C793232003C53706C697456616C7565734974657261746F723E645F5F3235003C73747265616D3E355F5F3236003C3E6D5F5F46696E616C6C793237003C53706C6963654E65787456616C75654C617A793E645F5F32610053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E2E6765745F43757272656E74003C3E335F5F73747265616D003C64657074683E355F5F3262003C746F6B656E3E355F5F32630053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D6F64656C2E4D6F64656C546F6B656E547970653E3E2E43757272656E74006765745F4973456E756D0049734E614E004973506F736974697665496E66696E6974790049734E65676174697665496E66696E6974790053696E676C6500557269006765745F4B6579006765745F56616C756573004461746554696D655374796C65730050617273654578616374004D617463680047726F7570006765745F537563636573730047726F7570436F6C6C656374696F6E006765745F47726F7570730043617074757265004D696E56616C7565004D617856616C7565005265706C6163650053706C6974003C50726976617465496D706C656D656E746174696F6E44657461696C733E7B46354146393346302D364239462D343746322D413737362D3730393644423544363845387D0044696374696F6E61727960320024246D6574686F643078363030303066302D3100537472696E67436F6D7061726572006765745F4F7264696E616C00436F7079003C6765745F436F6E74656E74547970653E645F5F300053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E537472696E673E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E537472696E673E2E6765745F43757272656E74003C636F6E74656E74547970653E355F5F31003C3E6D5F5F46696E616C6C7932003C3E375F5F7772617033003C3E375F5F77726170340053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E537472696E673E2E43757272656E74003C6765745F46696C65457874656E73696F6E3E645F5F3700537472696E6757726974657200476574537472696E674275696C646572006765745F5469636B73004973496E66696E69747900496E7431360053427974650055496E7433320055496E74363400436F6E7665727400546F446563696D616C00466C616773417474726962757465004973446566696E6564004A6F696E00546F55496E7436340047657456616C7565730047657456616C756500546F4F626A65637400546F446F75626C6500537472696E6753706C69744F7074696F6E73006765745F59656172006765745F4D6F6E7468006765745F446179006765745F486F7572006765745F4D696E757465006765745F5365636F6E64006765745F4D696C6C697365636F6E640024246D6574686F643078363030303131662D310024246D6574686F643078363030303132302D310024246D6574686F643078363030303132312D31003C6765745F556E706172736564546167733E645F5F30003C6E616D653E355F5F31003C3E375F5F7772617032003C3E6D5F5F46696E616C6C7933005265666572656E6365457175616C73004D617468004D6178004E6F74496D706C656D656E746564457863657074696F6E003C3E635F5F446973706C6179436C61737334003C496E6465784F663E625F5F30003C496E6465784F663E625F5F31006E0050726564696361746560310046696E64496E6465780053797374656D2E436F6C6C656374696F6E732E4F626A6563744D6F64656C00526561644F6E6C79436F6C6C656374696F6E6031004173526561644F6E6C790041747472696275746555736167654174747269627574650041747472696275746554617267657473003C476574546F6B656E733E645F5F37003C3E335F5F7363616E6E6572003C64657074683E355F5F38003C6E6565647356616C756544656C696D3E355F5F39003C686173556E6172794F703E355F5F61003C63683E355F5F62003C76616C75653E355F5F63003C737472506F733E355F5F65003C7374724C696E653E355F5F66003C737472436F6C3E355F5F3130003C6964656E743E355F5F3131006F705F477265617465725468616E4F72457175616C006F705F4C6573735468616E4F72457175616C003C5472616E73666F726D3E645F5F30003C3E335F5F696E707574003C73636F7065436861696E3E355F5F32003C746F6B656E3E355F5F33003C68617350726F706572746965733E355F5F34003C6973566F69643E355F5F35003C7461674E616D653E355F5F36003C73636F70653E355F5F37003C7072656669783E355F5F38003C617474724E616D653E355F5F39003C786D6C6E733E355F5F61003C76616C75653E355F5F62003C3E375F5F7772617063003C3E6D5F5F46696E616C6C79640053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D61726B75702E4D61726B7570546F6B656E547970653E3E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D61726B75702E4D61726B7570546F6B656E547970653E3E2E6765745F43757272656E74003C746F6B656E3E355F5F32003C7461674E616D653E355F5F330053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E546F6B656E3C4A736F6E46782E4D61726B75702E4D61726B7570546F6B656E547970653E3E2E43757272656E74006765745F43616E52656164004765744765744D6574686F64006765745F43616E5772697465004765745365744D6574686F64004D6574686F6442617365006765745F49735075626C6963006765745F4973496E69744F6E6C79003C3E635F5F446973706C6179436C617373350073706563696669656450726F70657274794765747465720064656661756C7456616C7565003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F30003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F31003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F32006765745F5265666C656374656454797065006765745F4465636C6172696E67547970650042696E64696E67466C6167730047657450726F7065727479006765745F50726F7065727479547970650053797374656D2E436F6D706F6E656E744D6F64656C0044656661756C7456616C7565417474726962757465003C4765744E616D653E645F5F370053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D653E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D653E2E6765745F43757272656E74003C3E335F5F6D656D626572003C617474723E355F5F380053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E446174614E616D653E2E43757272656E74003C3E665F5F416E6F6E796D6F757354797065306033003C426567696E3E6A5F5F54506172003C456E643E6A5F5F54506172003C56616C75653E6A5F5F54506172003C426567696E3E695F5F4669656C64003C456E643E695F5F4669656C64003C56616C75653E695F5F4669656C6400446562756767657242726F777361626C6541747472696275746500446562756767657242726F777361626C655374617465003C3E635F5F446973706C6179436C61737331003C436F6E7461696E735072656669783E625F5F300046696E644C617374496E646578003C436F6E7461696E734E616D6573706163653E625F5F33003C3E635F5F446973706C6179436C61737339003C4765744E616D6573706163653E625F5F36003C4765744E616D6573706163653E625F5F37004353243C3E395F5F436163686564416E6F6E796D6F75734D6574686F6444656C6567617465380046696E644C617374003C3E635F5F446973706C6179436C61737365003C4765745072656669783E625F5F62003C4765745072656669783E625F5F63004353243C3E395F5F436163686564416E6F6E796D6F75734D6574686F6444656C656761746564003C3E635F5F446973706C6179436C6173733131003C436F6E7461696E735461673E625F5F31300049436F6D7061726572603100436F6E7461696E734B657900436F6E7461696E7356616C756500496E6465784F6656616C7565006765745F4B657973003C476574456E756D657261746F723E645F5F31330053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E4B657956616C7565506169723C53797374656D2E537472696E672C53797374656D2E537472696E673E3E2E6765745F43757272656E74003C6D617070696E673E355F5F31340053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E436F6C6C656374696F6E732E47656E657269632E4B657956616C7565506169723C53797374656D2E537472696E672C53797374656D2E537472696E673E3E2E43757272656E74003C5061727365486561646572733E645F5F30003C3E335F5F616363657074003C3E335F5F636F6E74656E7454797065003C6D696D653E355F5F31003C747970653E355F5F32003C3E6D5F5F46696E616C6C7934003C53706C69745472696D3E645F5F37003C3E335F5F6368003C6C656E6774683E355F5F38003C707265763E355F5F39003C6E6578743E355F5F61003C706172743E355F5F62005472696D005061746800476574457874656E73696F6E003C4765744E616D653E645F5F30003C776F7264733E355F5F3100546F5570706572496E76617269616E7400546F4C6F776572496E76617269616E740049734C65747465724F7244696769740049734C6F776572005572694B696E6400497357656C6C466F726D6564557269537472696E6700497341737369676E61626C6546726F6D00476574496E74657266616365006765745F49734172726179006765745F497347656E657269635479706500537461727473576974680024246D6574686F643078363030303236622D3100436F6D7061726500456E7669726F6E6D656E74004D696E006765745F4F7264696E616C49676E6F7265436173650069676E6F72656444656C656761746573003C4765744E616D653E645F5F33003C73747261746567793E355F5F34003C6E616D653E355F5F35003C3E375F5F7772617036003C3E6D5F5F46696E616C6C7937003C3E375F5F7772617038003C3E6D5F5F46696E616C6C7939004C6F6164003C6C6F63616C4E616D653E355F5F31003C6E733E355F5F32003C74797065417474723E355F5F33003C6D656D626572417474723E355F5F34006765745F4669656C645479706500547970654C6F6164457863657074696F6E00476574436F6E7374727563746F727300476574506172616D6574657273006765745F506172616D6574657254797065004765744D6574686F6400456D7074795479706573006765745F4973496E74657266616365006765745F49734162737472616374006765745F497356616C7565547970650042696E64657200506172616D657465724D6F64696669657200476574436F6E7374727563746F720047657450726F7065727469657300476574496E646578506172616D6574657273004765744669656C64730049436F6E7665727469626C650049466F726D61747461626C6500416374697661746F7200437265617465496E7374616E63650047657447656E65726963417267756D656E747300476574556E6465726C79696E6754797065005472794372656174650046726F6D5469636B730047657447656E6572696354797065446566696E6974696F6E004D616B6547656E6572696354797065006765745F486173456C656D656E7454797065004E756C6C61626C656031003C5472616E73666F726D3E645F5F37003C73747265616D3E355F5F38003C746F6B656E3E355F5F39003C3E375F5F7772617061003C3E6D5F5F46696E616C6C796200586D6C436F6E76657274007365745F436865636B4368617261637465727300436F6E666F726D616E63654C6576656C007365745F436F6E666F726D616E63654C6576656C00537472696E6752656164657200586D6C54657874526561646572007365745F4E6F726D616C697A6174696F6E005768697465737061636548616E646C696E67007365745F5768697465737061636548616E646C696E67003C476574546F6B656E733E645F5F66003C3E335F5F726561646572003C7461674E616D653E355F5F3130003C6973566F69645461673E355F5F3131003C617474726962757465733E355F5F3132003C6174747269627574653E355F5F3133003C3E375F5F777261703134003C3E6D5F5F46696E616C6C79313500586D6C457863657074696F6E006765745F4C696E65506F736974696F6E006765745F4C696E654E756D62657200586D6C4E6F646554797065006765745F4E6F646554797065006765745F4C6F63616C4E616D65006765745F507265666978006765745F4E616D657370616365555249006765745F4973456D707479456C656D656E74006765745F48617341747472696275746573004D6F7665546F4E65787441747472696275746500456E636F64654C6F63616C4E616D6500586D6C57726974657253657474696E6773007365745F456E636F64696E67007365745F496E64656E74007365745F496E64656E744368617273007365745F4E65774C696E654368617273004E65774C696E6548616E646C696E67007365745F4E65774C696E6548616E646C696E67007365745F4F6D6974586D6C4465636C61726174696F6E0057726974655374617274456C656D656E74005772697465456E64456C656D656E740057726974655374617274417474726962757465005772697465456E644174747269627574650057726974655261770053797374656D2E586D6C2E53657269616C697A6174696F6E00586D6C49676E6F7265417474726962757465003C3E635F5F446973706C6179436C617373660073686F756C6453657269616C697A6550726F7879003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F33003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F34003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F35003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F36003C47657456616C756549676E6F72656443616C6C6261636B3E625F5F37006765745F52657475726E54797065003C4765744E616D653E645F5F313100586D6C526F6F74417474726962757465003C726F6F74417474723E355F5F313200586D6C54797065417474726962757465003C74797065417474723E355F5F313300586D6C456C656D656E74417474726962757465003C656C656D417474723E355F5F313400586D6C417474726962757465417474726962757465003C61747472417474723E355F5F313500586D6C4172726179417474726962757465003C6172726179417474723E355F5F313600586D6C456E756D417474726962757465003C656E756D417474723E355F5F3137006765745F456C656D656E744E616D65006765745F547970654E616D65006765745F4174747269627574654E616D65003C536F72744D656D626572733E645F5F31610053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C4A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E4D656D6265724D61703E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E4D656D6265724D61703E2E6765745F43757272656E74003C3E335F5F6D656D62657273003C636F756E743E355F5F3162003C6D61703E355F5F3163003C656C656D656E74733E355F5F3164003C6D61703E355F5F3165003C6D61703E355F5F3166003C3E375F5F777261703230003C3E6D5F5F46696E616C6C793231003C3E375F5F777261703232003C3E6D5F5F46696E616C6C793233003C3E375F5F777261703234003C3E6D5F5F46696E616C6C7932350053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C4A736F6E46782E53657269616C697A6174696F6E2E5265736F6C766572732E4D656D6265724D61703E2E43757272656E740053656375726974795472656174417353616665417474726962757465005365637572697479437269746963616C417474726962757465003C47657450726F70657274794765747465723E625F5F30003C47657450726F70657274795365747465723E625F5F33003C3E635F5F446973706C6179436C61737337003C4765744669656C644765747465723E625F5F36003C3E635F5F446973706C6179436C61737361003C4765744669656C645365747465723E625F5F390053657456616C7565006765745F49734C69746572616C003C3E635F5F446973706C6179436C61737364003C4765744D6574686F6450726F78793E625F5F63003C3E635F5F446973706C6179436C6173733130003C47657454797065466163746F72793E625F5F660000001161007300730065006D0062006C007900000D74006F006B0065006E007300000D730074007200650061006D00002B55006E007400650072006D0069006E006100740065006400200064006F00630075006D0065006E007400002D55006E0065007800700065006300740065006400200074006F006B0065006E00200028007B0030007D0029000001000367000003690000036D00000569006D00003D55006E006B006E006F0077006E002000420053004F004E00200065006C0065006D0065006E0074002000640061007400610020007400790070006500003B55006E006B006E006F0077006E002000420053004F004E002000620069006E006100720079002000640061007400610020007400790070006500003B55006E0065007800700065006300740065006400200065006C0065006D0065006E00740020007400790070006500200028007B0030007D002900000B62007900740065007300000D72006500610064006500720000354F0062006A006500630074004900440020006900730020006500780061006300740020003100320020006200790074006500730000634F0062006A006500630074004900440020006F006E006C007900200073007500700070006F007200740073002000610020006C0069006D0069007400650064002000720061006E006700650020006F00660020006400610074006500730020002800003720007300650063006F006E00640073002000730069006E0063006500200055006E00690078002000650070006F006300680029002E00004953007400720069006E00670020006D007500730074002000620065002000650078006100630074006C00790020003200340020006800650078002000640069006700690074007300003D53007400720069006E00670020006D0075007300740020006200650020006F006E006C007900200068006500780020006400690067006900740073000011730065007400740069006E006700730000374500780070006500630074006500640020006F0062006A00650063007400200073007400610072007400200028007B0030007D00290000694500780070006500630074006500640020006F0062006A006500630074002000700072006F007000650072007400790020006E0061006D00650020006F007200200065006E00640020006F00660020006F0062006A00650063007400200028007B0030007D002900002755006E007400650072006D0069006E00610074006500640020006F0062006A00650063007400003545007800700065006300740065006400200061007200720061007900200073007400610072007400200028007B0030007D00290000534500780070006500630074006500640020006100720072006100790020006900740065006D0020006F007200200065006E00640020006F006600200061007200720061007900200028007B0030007D002900002555006E007400650072006D0069006E006100740065006400200061007200720061007900002954006F006B0065006E0069007A0065007200200069007300200069006E00760061006C0069006400001374006F006B0065006E0069007A0065007200001161006E0061006C0079007A0065007200003149006E00760061006C0069006400200074007200610069006C0069006E006700200063006F006E00740065006E007400000D73006F007500720063006500003D55006E0065007800700065006300740065006400200065006E00640020006F006600200074006F006B0065006E002000730074007200650061006D00004549006E00760061006C00690064002000700072006F00700065007200740079002000760061006C0075006500200074006F006B0065006E00200028007B0030007D00290000534700720061007000680020006300790063006C0065002000640065007400650063007400650064003A0020007200650070006500610074006500640020007200650066006500720065006E0063006500730000714700720061007000680020006300790063006C006500200070006F00740065006E007400690061006C006C0079002000640065007400650063007400650064003A0020006D006100780069006D0075006D00200064006500700074006800200065\
-007800630065006500640065006400003D790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A002700730073004B000149790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A0027007300730027002E0027006600660066004B000151790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A0027007300730027002E00270046004600460046004600460046004B00010D2F0044006100740065002800000529002F00004B5E002F0044006100740065005C00280028005B002B005C002D005D003F005C0064002B003F00290028005B002B005C002D005D005C0064007B0034007D0029003F005C0029002F002400010D770061006C006B0065007200001366006F0072006D006100740074006500720000294900640065006E00740069006600690065007200200069007300200065006D007000740079002E000003200000194900640065006E00740069006600690065007200200022000027220020006900730020006E006F007400200073007500700070006F0072007400650064002E0000096E0075006C006C00000B660061006C007300650000097400720075006500000B62007200650061006B0000096300610073006500000B63006100740063006800001163006F006E00740069006E0075006500001164006500620075006700670065007200000F640065006600610075006C007400000D640065006C00650074006500000564006F00000965006C0073006500000F660069006E0061006C006C007900000766006F0072000011660075006E006300740069006F006E00000569006600000569006E00001569006E007300740061006E00630065006F00660000076E0065007700000D720065007400750072006E00000D73007700690074006300680000097400680069007300000B7400680072006F0077000007740072007900000D74007900700065006F0066000007760061007200000976006F0069006400000B7700680069006C00650000097700690074006800001161006200730074007200610063007400000F62006F006F006C00650061006E000009620079007400650000096300680061007200000B63006C00610073007300000B63006F006E0073007400000D64006F00750062006C006500000965006E0075006D00000D6500780070006F0072007400000F65007800740065006E0064007300000B660069006E0061006C00000B66006C006F0061007400000967006F0074006F00001569006D0070006C0065006D0065006E0074007300000D69006D0070006F0072007400000769006E007400001369006E00740065007200660061006300650000096C006F006E006700000D6E0061007400690076006500000F7000610063006B00610067006500000F70007200690076006100740065000013700072006F00740065006300740065006400000D7000750062006C0069006300000B730068006F0072007400000D730074006100740069006300000B730075007000650072000019730079006E006300680072006F006E0069007A0065006400000D7400680072006F007700730000137400720061006E007300690065006E007400001176006F006C006100740069006C00650000076C0065007400000B7900690065006C006400001963006F006E00740065006E0074005400790070006500730000216100700070006C00690063006100740069006F006E002F006A0073006F006E00001374006500780074002F006A0073006F006E00001774006500780074002F0078002D006A0073006F006E00010B2E006A0073006F006E00000330000003310000037200002949006E00760061006C006900640020006E0075006D00620065007200200074006F006B0065006E0000055C00620000055C00660000055C006E0000055C00720000055C00740000055C0075000005580034000003660000052C00200000032E00003F0D000A002F002A0020006E0061006D0065007300700061006300650020007B0031007D0020002A002F000D000A0076006100720020007B0030007D003B00001176006100720020007B0030007D003B00006D0D000A006900660020002800220075006E0064006500660069006E0065006400220020003D003D003D00200074007900700065006F00660020007B0030007D00290020007B007B000D000A0009007B0030007D0020003D0020007B007B007D007D003B000D000A007D007D000053690066002800220075006E0064006500660069006E006500640022003D003D003D0074007900700065006F00660020007B0030007D0029007B007B007B0030007D003D007B007B007D007D003B007D007D0000074E0061004E00001149006E00660069006E0069007400790000556E00650077002000440061007400650028007B0030003A0030003000300030007D002C007B0031007D002C007B0032007D002C007B0033007D002C007B0034007D002C007B0035007D002C007B0036007D002900001B6E00650077002000440061007400650028007B0030007D002900000928003F003A002900000F63006F006E0073006F006C006500001164006F00630075006D0065006E007400000B6500760065006E007400000D6600720061006D0065007300000F68006900730074006F007200790000116C006F0063006100740069006F006E0000136E006100760069006700610074006F007200000B6F007000650072006100000D730063007200650065006E00000D770069006E0064006F00770000096100720065006100000962006100730065000011620061007300650066006F006E007400000562007200000763006F006C00000B6600720061006D006500000568007200000769006D006700000B69006E00700075007400000F6900730069006E00640065007800000D6B0065007900670065006E0000096C0069006E006B0000096D00650074006100000B70006100720061006D000007770062007200000962006F0064007900001163006F006C00670072006F0075007000000564006400000564007400000B65006D00620065006400000968006500610064000009680074006D006C0000056C006900000D6F007000740069006F006E0000037000000B740062006F0064007900000574006400000B740066006F006F007400000574006800000B740068006500610064000005740072000003610000096100620062007200000F6100630072006F006E0079006D000007620064006F0000096300690074006500000963006F00640065000007640066006E00000565006D0000076B006200640000076D0061007000000371000009730061006D00700000097300700061006E00000D7300740072006F006E0067000009740069006D006500000B61007500640069006F00000F6200670073006F0075006E006400000B73006F0075006E006400000D630061006E0076006100730000096D006100740068000007730076006700000B76006900640065006F00000362000007620069006700000B62006C0069006E006B000015660069006700630061007000740069006F006E00000966006F006E007400000F6D0061007200710075006500650000096D00610072006B000005720070000005720074000009720075006200790000037300000B73006D0061006C006C00000D73007400720069006B0065000007730075006200000773007500700000057400740000037500000F6100640064007200650073007300000F610072007400690063006C006500000D610073007300690064006500001562006C006F0063006B00710075006F0074006500000562007100000D630065006E007400650072000007640065006C00000F640065007400610069006C0073000007640069007600000D660069006700750072006500000D66006F006F00740065007200000568003100000568003200000568003300000568003400000568003500000568003600000D680065006100640065007200000D6800670072006F0075007000000769006E00730000076E006100760000096E006F00620072000007700072006500000F730065006300740069006F006E00000F730075006D006D00610072007900000F63006F006D006D0061006E006400000564006C00000764006900720000056C00680000096D0065006E00750000056F006C00000575006C00000F630061007000740069006F006E00000B7400610062006C006500000D62007500740074006F006E00001164006100740061006C0069007300740000116600690065006C006400730065007400000966006F0072006D00000B6C006100620065006C00000D6C006500670065006E006400000B6D00650074006500720000116F0070007400670072006F0075007000000D6F00750074007000750074000011700072006F0067007200650073007300000D730065006C00650063007400001174006500780074006100720065006100000D6100700070006C0065007400000F6E006F0065006D00620065006400000D6F0062006A00650063007400000B7300740079006C00650000116E006F00730063007200690070007400000D73006300720069007000740000116600720061006D006500730065007400000D69006600720061006D00650000116E006F006600720061006D0065007300000B7400690074006C006500000B78006D006C006E00730000055F00780000035F00000926006C0074003B0000092600670074003B00000B260061006D0070003B00000726002300780000035800000D2600710075006F0074003B00000D2600610070006F0073003B00002D49006E00760061006C0069006400200074006100670020007300740061007200740020006300680061007200000721002D002D0001314D0061006C0066006F0072006D0065006400200061007400740072006900620075007400650020006E0061006D00650000052D002D00010F5B00430044004100540041005B0000055D005D000003210000053F003D0000033F00000725002D002D0001072D002D00250001032500000723002D002D0001072D002D00230001032300003355006E007200650063006F0067006E0069007A0065006400200075006E007000610072007300650064002000740061006700002D55006E0065007800700065006300740065006400200065006E00640020006F0066002000660069006C00650000534D0069007300730069006E00670020006100740074007200690062007500740065002000760061006C0075006500200063006C006F00730069006E0067002000640065006C0069006D006900740065007200003549006E00760061006C0069006400200065006C0065006D0065006E00740020006E0061006D006500200028007B0030007D002900002B4D0061006C0066006F0072006D0065006400200065006C0065006D0065006E0074002000740061006700002978006D006C006E0073002000760061006C0075006500200077006100730020006E0075006C006C0000214D0061006C0066006F0072006D0065006400200065006E007400690074007900000B410045006C0069006700000D410061006300750074006500000B41006300690072006300000D410067007200610076006500000B41006C00700068006100000B4100720069006E006700000D4100740069006C00640065000009410075006D006C0000094200650074006100000D430063006500640069006C000007430068006900000D440061006700670065007200000B440065006C00740061000007450054004800000D450061006300750074006500000B45006300690072006300000D450067007200610076006500000F45007000730069006C006F006E0000074500740061000009450075006D006C00000B470061006D006D006100000D490061006300750074006500000B49006300690072006300000D490067007200610076006500000949006F00740061000009490075006D006C00000B4B006100700070006100000D4C0061006D0062006400610000054D007500000D4E00740069006C006400650000054E007500000B4F0045006C0069006700000D4F0061006300750074006500000B4F006300690072006300000D4F0067007200610076006500000B4F006D00650067006100000F4F006D006900630072006F006E00000D4F0073006C00610073006800000D4F00740069006C006400650000094F0075006D006C000007500068006900000550006900000B5000720069006D00650000075000730069000007520068006F00000D53006300610072006F006E00000B5300690067006D006100000B540048004F0052004E000007540061007500000B54006800650074006100000D550061006300750074006500000B55006300690072006300000D550067007200610076006500000F55007000730069006C006F006E000009550075006D006C00000558006900000D5900610063007500740065000009590075006D006C0000095A00650074006100000D610061006300750074006500000B61006300690072006300000B61006300750074006500000B610065006C0069006700000D610067007200610076006500000F61006C0065006600730079006D00000B61006C00700068006100000761006D007000000761006E006400000761006E0067000009610070006F007300000B6100720069006E006700000B6100730079006D007000000D6100740069006C00640065000009610075006D006C00000B62006400710075006F0000096200650074006100000D6200720076006200610072000009620075006C006C000007630061007000000D630063006500640069006C00000B63006500640069006C000009630065006E007400000763006800690000096300690072006300000B63006C00750062007300000963006F006E006700000963006F0070007900000B630072006100720072000007630075007000000D630075007200720065006E0000096400410072007200000D640061006700670065007200000964006100720072000007640065006700000B640065006C0074006100000B6400690061006D007300000D640069007600690064006500000D650061006300750074006500000B65006300690072006300000D650067007200610076006500000B65006D00700074007900000965006D0073007000000965006E0073007000000F65007000730069006C006F006E00000B65007100750069007600000765007400610000076500740068000009650075006D006C0000096500750072006F00000B65007800690073007400000966006E006F006600000D66006F00720061006C006C00000D660072006100630031003200000D660072006100630031003400000D660072006100630033003400000B66007200610073006C00000B670061006D006D0061000005670065000005670074000009680041007200720000096800610072007200000D680065006100720074007300000D680065006C006C0069007000000D690061006300750074006500000B69006300690072006300000B69006500780063006C00000D690067007200610076006500000B69006D00610067006500000B69006E00660069006E00000969006F0074006100000D69007100750065007300740000096900730069006E000009690075006D006C00000B6B00610070007000610000096C00410072007200000D6C0061006D0062006400610000096C0061006E006700000B6C006100710075006F0000096C00610072007200000B6C006300650069006C00000B6C006400710075006F0000056C006500000D6C0066006C006F006F007200000D6C006F00770061007300740000076C006F007A0000076C0072006D00000D6C0073006100710075006F00000B6C007300710075006F0000056C00740000096D00610063007200000B6D006400610073006800000B6D006900630072006F00000D6D006900640064006F007400000B6D0069006E007500730000056D007500000B6E00610062006C00610000096E00620073007000000B6E00640061007300680000056E00650000056E00690000076E006F007400000B6E006F00740069006E0000096E00730075006200000D6E00740069006C006400650000056E007500000D6F0061006300750074006500000B6F006300690072006300000B6F0065006C0069006700000D6F0067007200610076006500000B6F006C0069006E006500000B6F006D00650067006100000F6F006D006900630072006F006E00000B6F0070006C007500730000056F00720000096F0072006400660000096F00720064006D00000D6F0073006C00610073006800000D6F00740069006C0064006500000D6F00740069006D006500730000096F0075006D006C000009700061007200610000097000610072007400000D7000650072006D0069006C000009700065007200700000077000680069000005700069000007700069007600000D70006C00750073006D006E00000B70006F0075006E006400000B7000720069006D0065000009700072006F0064000009700072006F00700000077000730069000009710075006F00740000097200410072007200000B720061006400690063000009720061006E006700000B72006100710075006F0000097200610072007200000B72006300650069006C00000B72006400710075006F0000097200650061006C000007720065006700000D720066006C006F006F0072000007720068006F00000772006C006D00000D720073006100710075006F00000B72007300710075006F00000B73006200710075006F00000D73006300610072006F006E000009730064006F007400000973006500630074000007730068007900000B7300690067006D006100000D7300690067006D00610066000007730069006D00000D730070006100640065007300000973007500620065000007730075006D0000097300750070003100000973007500700032000009730075007000330000097300750070006500000B73007A006C00690067000007740061007500000D740068006500720065003400000B74006800650074006100001174006800650074006100730079006D00000D7400680069006E0073007000000B740068006F0072006E00000B740069006C0064006500000B740069006D0065007300000B7400720061006400650000097500410072007200000D75006100630075007400650000097500610072007200000B75006300690072006300000D750067007200610076006500000775006D006C00000B75007000730069006800000F75007000730069006C006F006E000009750075006D006C00000D770065006900650072007000000578006900000D7900610063007500740065000007790065006E000009790075006D006C0000097A0065007400610000077A0077006A0000097A0077006E006A0000096E0061006D006500002D45006E0075006D0065007200610074006F00720020006E006F00740020007300740061007200740065006400002945006E0075006D0065007200610074006F0072002000680061007300200065006E006400650064000011730065007100750065006E0063006500000B73007400610072007400000D6C0065006E006700740068000009640065007300740000156100720072006100790049006E00640065007800002F4E006F0074002000630075007200720065006E0074006C00790020006300680075006E006B0069006E0067002E00000F7300630061006E006E0065007200002F4D0069007300730069006E0067002000760061006C00750065002000640065006C0069006D0069007400650072000035450078007400720061006E0065006F00750073002000760061006C00750065002000640065006C0069006D006900740065007200002B49006C006C006500670061006C0020004A0053004F004E002000730065007100750065006E006300650000052F002A00003555006E007400650072006D0069006E006100740065006400200063006F006D006D0065006E007400200062006C006F0063006B0000052F002F0000052A002F00002749006C006C006500670061006C0020004A0053004F004E0020006E0075006D00620065007200003155006E007400650072006D0069006E00610074006500640020004A0053004F004E00200073007400720069006E006700001375006E0064006500660069006E0065006400000D78006D006C006E0073003A0000075C0073002B00002F4D0069007300730069006E00670020004A0073006F006E004D004C00200074006100670020006E0061006D006500004749006E00760061006C006900640020006100740074007200690062007500740065002000760061006C0075006500200074006F006B0065006E00200028007B0030007D002900004555006E007400650072006D0069006E0061007400650064002000610074007400720069006200750074006500200062006C006F0063006B00200028007B0030007D00290000157B00200042006500670069006E0020003D00200000112C00200045006E00640020003D00200000152C002000560061006C007500650020003D002000000520007D00000B730063006F0070006500003555006E006B006E006F0077006E002000730063006F00700065002000700072006500660069007800200028007B0030007D00290000177400720061006E00730066006F0072006D006500720000136C006F00630061006C004E0061006D00650000554E0061006D0065007300700061006300650020006D00750073007400200062006500200061006E0020006100620073006F006C00750074006500200055005200490020006F007200200065006D0070007400790000196E0061006D00650073007000610063006500550072006900001975006E007300690067006E0065006400420079007400650000094300680061007200000F64006500630069006D0061006C00001B75006E007300690067006E0065006400530068006F0072007400001775006E007300690067006E006500640049006E007400001975006E007300690067006E00650064004C006F006E006700000D73007400720069006E00670000116400610074006500540069006D006500000B6100720072006100790000253C003E0066005F005F0041006E006F006E0079006D006F00750073005400790070006500004968007400740070003A002F002F007700770077002E00770033002E006F00720067002F0058004D004C002F0031003900390038002F006E0061006D00650073007000610063006500004168007400740070003A002F002F007700770077002E00770033002E006F00720067002F0032003000300031002F0058004D004C0053006300680065006D006100005368007400740070003A002F002F007700770077002E00770033002E006F00720067002F0032003000300031002F0058004D004C0053006300680065006D0061002D0069006E007300740061006E0063006500013B68007400740070003A002F002F007700770077002E00770033002E006F00720067002F0032003000300030002F0078006D006C006E0073002F00003968007400740070003A002F002F007700770077002E00770033002E006F00720067002F0031003900390039002F007800680074006D006C00003768007400740070003A002F002F007700770077002E00770033002E006F00720067002F0032003000300035002F00410074006F006D00004168007400740070003A002F002F007000750072006C002E006F00720067002F00640063002F0065006C0065006D0065006E00740073002F0031002E0031002F00004D68007400740070003A002F002F007000750072006C002E006F00720067002F00730079006E006400690063006100740069006F006E002F007400680072006500610064002F0031002E003000000778006D006C0000057800730000077800730069000009610074006F006D000005640063000007740068007200000770006600780000033A0000037B0000037D0000434D00610078004400650070007400680020006D0075007300740020006200650020006100200070006F007300690074006900760065002000760061006C007500650000116D00610078004400650070007400680000030900001573007400720061007400650067006900650073000039530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E0000032C000065530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E00440061007400610043006F006E00740072006100630074004100740074007200690062007500740065000061530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E0044006100740061004D0065006D00620065007200410074007400720069006200750074006500006D530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E00490067006E006F007200650044006100740061004D0065006D0062006500720041007400740072006900620075007400650000094E0061006D00650000134E0061006D006500730070006100630065000019700072006F007000650072007400790049006E0066006F0000136600690065006C00640049006E0066006F00000974007900700065000080AD49006E00740065007200660061006300650073002C00200041006200730074007200610063007400200063006C00610073007300650073002C00200061006E006400200075006E0073007500700070006F0072007400650064002000560061006C0075006500540079007000650073002000630061006E006E006F007400200062006500200069006E007300740061006E007400690061007400650064002E00200028007B0030007D0029000011410064006400520061006E0067006500000741006400640000117300740072006100740065006700790000057B00200000033D0000034600001B7200650073006F006C007600650072004300610063006800650000809D55006E00610062006C006500200074006F002000660069006E0064002000610020007300750069007400610062006C006500200063006F006E007300740072007500630074006F007200200066006F007200200069006E007300740061006E00740069006100740069006E00670020007400680065002000740061007200670065007400200054007900700065002E00200028007B0030007D0029000080E954007900700065007300200077006800690063006800200069006D0070006C0065006D0065006E0074002000470065006E00650072006900630020004900440069006300740069006F006E006100720079003C0054004B00650079002C0020005400560061006C00750065003E00200061006C0073006F0020006E00650065006400200074006F00200069006D0070006C0065006D0065006E00740020004900440069006300740069006F006E00610072007900200074006F002000620065002000640065007300\
-65007200690061006C0069007A00650064002E00200028007B0030007D00290000477B0030007D00200064006F006500730020006E006F007400200061006300630065007000740020006E0075006C006C00200061007300200061002000760061006C007500650000374500720072006F007200200063006F006E00760065007200740069006E00670020007B0030007D00200074006F0020007B0031007D000080D554007900700065007300200077006800690063006800200069006D0070006C0065006D0065006E0074002000470065006E00650072006900630020004900440069006300740069006F006E006100720079003C0054004B00650079002C0020005400560061006C00750065003E0020006E00650065006400200074006F0020006800610076006500200073007400720069006E00670020006B00650079007300200074006F00200062006500200064006500730065007200690061006C0069007A00650064002E00200028007B0030007D002900001F6100700070006C00690063006100740069006F006E002F0078006D006C00001174006500780074002F0078006D006C0000096900740065006D000013210044004F00430054005900500045002000001521004E004F0054004100540049004F004E00200000092E0078006D006C0000534100740074007200690062007500740065002000760061006C0075006500730020006D0075007300740020006200650020007000720069006D0069007400690076006500200069006E007000750074002E00000D7700720069007400650072000013530070006500630069006600690065006400001F530068006F0075006C006400530065007200690061006C0069007A006500001B6400650063006C006100720069006E006700540079007000650000156D006500740068006F0064004E0061006D00650000156D006500740068006F00640049006E0066006F000009630074006F00720000000000F093AFF59F6BF247A7767096DB5D68E80008B77A5C561934E08907151218011180800715122401118080051512150105071512480111808007151260011180800715127001118080081512808401118080071512808C011300091512809002130013010A15128094021180801300071512809801112108151280AC0111808008151280B40111808008151280BC0111808008151280BC0111816C08151280E00111816C0B151280F00211808011816C0615122501130006151229011300061512150113000615122D011300071512810C0113000715128110011300061512810C010308151280E0011180800B151280F00211816C11808008151280B40111816C0A15121501151139020E0E07151280E001130107151280BC0113000715123D0111818C030612080306124D02060E0520010112510206050306110C0100010101020103010401050106010701080109010A010B010C010D010E010F01100111011201FF017F0306111001802A55006E007400650072006D0069006E006100740065006400200064006F00630075006D0065006E0074002C55006E0065007800700065006300740065006400200074006F006B0065006E00200028007B0030007D00290062450078007000650063007400650064002000760061006C00750065002000640065006C0069006D00690074006500720020006F007200200065006E00640020006F006600200064006F00630075006D0065006E007400200028007B0030007D002900020608040100000004040000000408000000040C000000030611210320000110200201151215011512820001130012550F20011D0515121501151282000113001020011D051512150115128200011180801120020115121501151282000111808012551220020812591512810C0115128200011180801320030812591512810C0115128200011180800E0700030812590E020D000208125915128200011180800720020812591230050001110C1C05000112441C0320000A0F2001151215011512820001130012550F200115121501151282000113001D050328000A3A55006E0065007800700065006300740065006400200065006C0065006D0065006E00740020007400790070006500200028007B0030007D0029000306125D12000301151261011512820001118080125D0211000201151261011512820001118080125D0500010E125D10200115121501151282000111808012551020011512150115128200011180801D05102001151215011512820001118080125D042001010203061165042001010E052001011D050520010111650600011165112C060001112C11650320000E0320000804200011340520010111340F20001512810C011512820001118080102001011512810C011512820001118080030611340E061512810C01151282000111808004280011340F28001512810C0115128200011180800500010E113405000111340E0500010E113805000111380E0420001140052001011140030611400328000E042800114003061D0508200401112108080804200011210500010E114005000111400E0600011D05114006000111401D050420001D05070002020E101140042800112103280008030612440720020111101D05042000111004200105080500010E124405000112440E0600011D05124406000112441D05070002020E101244040001030807200015122D010504200012310428001D05042800111004280105080B2002081512180113001259042000110C052002011C180520011C1D1C09200312691D1C126D1C0520011C12690620021C1C1D1C0A200412691C1D1C126D1C0420011C1C08200312691C126D1C052002011C1C09200412691C1C126D1C0520010112690520001281AC0F20011219151215011512820001130011200212191512150115128200011300127114300101151215011E00151215011512820001130016300102151215011E0015121501151282000113001E000528001281AC3445007800700065006300740065006400200061007200720061007900200073007400610072007400200028007B0030007D002900524500780070006500630074006500640020006100720072006100790020006900740065006D0020006F007200200065006E00640020006F006600200061007200720061007900200028007B0030007D002900664500780070006500630074006500640020006100720072006100790020006900740065006D002000640065006C0069006D00690074006500720020006F007200200065006E00640020006F006600200061007200720061007900200028007B0030007D002900244D0069007300730069006E00670020006100720072006100790020006900740065006D002455006E007400650072006D0069006E006100740065006400200061007200720061007900364500780070006500630074006500640020006F0062006A00650063007400200073007400610072007400200028007B0030007D002900684500780070006500630074006500640020006F0062006A006500630074002000700072006F007000650072007400790020006E0061006D00650020006F007200200065006E00640020006F00660020006F0062006A00650063007400200028007B0030007D0029005E450078007000650063007400650064002000760061006C00750065002000640065006C0069006D00690074006500720020006F007200200065006E00640020006F00660020006F0062006A00650063007400200028007B0030007D0029002E4D0069007300730069006E00670020006F0062006A006500630074002000700072006F00700065007200740079002655006E007400650072006D0069006E00610074006500640020006F0062006A0065006300740004061281AC04061282040D06151215011512808C01118080062001011281AC10200112191512150115128200011180801220021219151215011512820001118080127115300101151215011E0015121501151282000111808017300102151215011E001512150115128200011180801E001220021C1512810C0115128200011180801271122002021512810C011512820001118080101C090615128200011180800B000115128200011180800E0D000315128200011180800E0E0E0D0001151282000111808011818C0B000115128200011180801C072000151215010E093001021E0012751E00073001011E0012750520011C12750720021C12751271083001021E000E1E00063001011E000E0420011C0E0620021C0E127106200112191275072800151215010E1720031C151280E001130015121501151282000113001271092000151280E0011300082000151260011300092000151260011180800620011301130009200312691300126D1C062001130112693C55006E0065007800700065006300740065006400200065006E00640020006F006600200074006F006B0065006E002000730074007200650061006D004449006E00760061006C00690064002000700072006F00700065007200740079002000760061006C0075006500200074006F006B0065006E00200028007B0030007D0029000D061512150115128200011180800F000102151215011512820001118080170002021512150115128200011180801512780211818C021D000215121501151282000111808015121501151282000111808011818C250001151215011511390211818C1512150115128200011180801512150115128200011180802D0002151215011511390211818C1512150115128200011180801512150115128200011180801512780211818C021E000115121501151215011512820001118080151215011512820001118080240002151215011512150115128200011180801512150115128200011180801512780208021B00011512150115128200011180801512810C011512820001118080100001011512810C0115128200011180800406118080040000000004020000000403000000040500000004060000000E200115121501151282000113001C04061281B0062001011281B00F20011512150115128200011180801C1320030115126101151282000111808012819C1C1420030115126101151282000111808012819C12191720040115126101151282000111808012819C11818C12791F20040115126101151282000111808012819C11818C15122D01151139020E1C1520040115126101151282000111808012819C12711C06200111818C1C142003021281AC1512810C0115128200011300101C132003021281B01C101512150115128200011300152003021281AC1512810C0115128200011300101301142003021281B013011015121501151282000113003C790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A002700730073004B0048790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A0027007300730027002E0027006600660066004B0050790079007900790027002D0027004D004D0027002D002700640064002700540027004800480027003A0027006D006D0027003A0027007300730027002E00270046004600460046004600460046004B000520001180A0062001011180A0162003021281AC1512810C011512820001118080101121152003021281B0112110151215011512820001118080070002020E1011210520010E11210528001180A004061180A002060A080028D3ED7CC7FFFF0800DC1FD277E600004A5E002F0044006100740065005C00280028005B002B005C002D005D003F005C0064002B003F00290028005B002B005C002D005D005C0064007B0034007D0029003F005C0029002F0024000C2F00440061007400650028000429002F000306127D0520001280810520001281B0062002011C12490420010E1C0528001280810528001281B009200015128084011300092000151280BC0113000A200015128084011180800C200201151280BC01130012490500020E0E020600030E0E0202050002020E02040001020E0600011280B80E0600010E1280B80D200201151280BC011180801249042001021C10200201151215011512820001130012490E20010E151215011512820001130003061D0E082002011281B01D0E0A2000151280BC01118080020602032000020F20010E1512150115128200011180801120020115121501151282000111808012490620020112491C0620020112490E0920030112491C118085052001011249062002011249080520010E12090800021D120912711C06200102118089032800021A6E00650077002000440061007400650028007B0030007D002900546E00650077002000440061007400650028007B0030003A0030003000300030007D002C007B0031007D002C007B0032007D002C007B0033007D002C007B0034007D002C007B0035007D002C007B0036007D0029000828003F003A002900020603022F00025C00022E003E0D000A002F002A0020006E0061006D0065007300700061006300650020007B0031007D0020002A002F000D000A0076006100720020007B0030007D003B001076006100720020007B0030007D003B0052690066002800220075006E0064006500660069006E006500640022003D003D003D0074007900700065006F00660020007B0030007D0029007B007B007B0030007D003D007B007B007D007D003B007D007D006C0D000A006900660020002800220075006E0064006500660069006E0065006400220020003D003D003D00200074007900700065006F00660020007B0030007D00290020007B007B000D000A0009007B0030007D0020003D0020007B007B007D007D003B000D000A007D007D0003061D030606151225010E0C00040212490E151261010E020700020112491121070002011249127D080003011249127D020C20030211818C11816C1180D40B20030211818C11818C101C0920030211818C0E101C05200102101C0600011180D40E04061180D40410000000042000000004400000000480000000040001000004000200000400800000040612817004061180DC0520001180DC062001011180DC0F20010E15121501151282000111816C1120020115121501151282000111816C12491E200501124911816C11818C1512808D0211818C151282000111816C1281740720030112490E0E0F20040112490E0E151282000111816C0600020112490E0700030112490E020800040112490E02020528001180DC0F2001151215011512820001130012750E200115121501151282000113000E040612811C0806151225011280E808200101151215010E1220020115126101151282000111816C12811C1720031280E815126101151282000111816C12811C1280E80D2001151282000111816C12811C0820030E12811C0E0E0800011280E812811C0A20020212811C1011816C1C20040115126101151282000111816C11816C1280E8151261011280EC1020020115126101151282000111816C0E0600010112811C0620010E12811C040001080E040001020310200115121501151282000111816C12750F200115121501151282000111816C0E090002021280E81280E8062001021280E80C2002021280E815128091010E0520001280E8062001011280E80A2000151282000111816C0B200101151282000111816C04061280E80906151282000111816C0528001280E80A2800151282000111816C18200115121501151282000113011512150115128200011300040611818C1A200115121501151282000111816C1512150115128200011180801C20020115126101151282000111816C1512810C01151282000111808004200101080620011280F8030620011280F80E062001011280950706151261011300070615122D0113000920010115121501130005200108130006200201081300052001130008052001011300052001021300072002011D13000808200015122D01130004200102080528011300080806151280FC0113000A200101151280FC01130004200013000320001C04280013000328001C07061512250113000B20030115122501130008080820001512150113000806151281100113000F00011512810C0113001512150113001000021512810C011300151215011300020306130009200101151225011300040612812007200015121501030320000304061281240306127504061280F80520010112750520020103031275006E0064006500660069006E0065006400086E0075006C006C000A660061006C0073006500087400720075006500064E0061004E001049006E00660069006E00690074007900025B00025D00027B00027D00022C00023A00022200022700022D00022B00042F002A00042A002F00042F002F00082002011281AC1D0E0A2000151280E0011180802A49006C006C006500670061006C0020004A0053004F004E002000730065007100750065006E00630065003455006E007400650072006D0069006E006100740065006400200063006F006D006D0065006E007400200062006C006F0063006B003055006E007400650072006D0069006E00610074006500640020004A0053004F004E00200073007400720069006E0067002649006C006C006500670061006C0020004A0053004F004E0020006E0075006D006200650072002E4D0069007300730069006E0067002000760061006C00750065002000640065006C0069006D00690074006500720034450078007400720061006E0065006F00750073002000760061006C00750065002000640065006C0069006D00690074006500720011200115121501151282000111808012811C0D0001151282000111808012811C0600010E12811C130004151282000111808012811C0E031011813C10200115121501151282000111808012750F20011512150115128200011180800E040611813C022000052000118160062001011181601A200115121501151282000111808015121501151282000111816C04061181600528001181602E4D0069007300730069006E00670020004A0073006F006E004D004C00200074006100670020006E0061006D0065004649006E00760061006C006900640020006100740074007200690062007500740065002000760061006C0075006500200074006F006B0065006E00200028007B0030007D0029004455006E007400650072006D0069006E0061007400650064002000610074007400720069006200750074006500200062006C006F0063006B00200028007B0030007D00290007200202128099020620010212809D0820011281F01280A10C20011512150111818C1280A1102001151215011281F4151215011281F4062003010E0E0E0D200201151280BC0111816C1249023C00023E00023D00022600022300027800025800023B00022100042D002D000E5B00430044004100540041005B00045D005D00023F00043F003D000225000240000224000D0003151282000111816C0E0E0E0D0001151282000111816C11818C0B0001151282000111816C1C040611816C08061512610112817406200101128174052000128174042001020E0520020E0E020620010211818C0520020E0E0E0420010E0E0806151280A5020E0E05200011818C0620010111818C052002010E0E062002020E100E0C200015122D01151139020E0E05280011818C0428010E0E306100700070006C00690063006100740069006F006E002F006F0063007400650074002D00730074007200650061006D00090002151215010E0E0E0400010E0E090002151215010E0E03040611818006200101118180072002011181800E0520011D0E0E0806151280E00113000A06151280F0021300130113200201151280E0011300151280F002130013010F2001151215011512820001130112750E200115121501151282000113010E0806151280BC01130113200201151280BC011301151280F00213001301052001011271072004010E0E0E020500010E12710900020211818C11818C0620010811818C072002010E1280A9092002011280AD1180B1040611819806200101118198072002011181980E0A2003011181980E1280A9052000118198052800118198042001011C03061D1C0520001281FC0528001281FC04061281FC0C2001011D1512808C011180800F200101151215011512808C011180800F2002011281541D1512808C0111808012200201128154151215011512808C011180800F2002011281FC1D1512808C01118080122002011281FC151215011512808C011180800E2000151215011512808C011180800E2800151215011512808C01118080052002010E0A072004010E0A0808082003010E0A1280A90A2005010E0A08081280A9082003010E100810080806151282000113000A200101151282000113000B200201151282000113000E0E200301151282000113000E1280A90920001512820001130009280015128200011300052001126C0E09061512808D020E126C0920010115121501126C0520001280A80620011280A80E0720021280A80E0E0528001280A804061280A80A061512808D020E1280A80A200101151215011280A80520001281D4062001011281D40520001281D8062001011281D80520001281DC062001011281DC0520001281E0062001011281E00520001281E4062001011281E404061281D404061281D804061281DC04061281E004061281E40528001281D40528001281D80528001281DC0528001281E00528001281E40B2004126912809902126D1C0520010212690A2003126912809D126D1C0A200312691280A1126D1C0720011281F012690B20011512150111818C12690E20031269151215011281F4126D1C0B2001151215011281F41269080615121501128154072001011D1281540A2001011512150112815438530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E0064530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E00440061007400610043006F006E007400720061006300740041007400740072006900620075007400650060530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E0044006100740061004D0065006D006200650072004100740074007200690062007500740065006C530079007300740065006D002E00520075006E00740069006D0065002E00530065007200690061006C0069007A006100740069006F006E002E00490067006E006F007200650044006100740061004D0065006D00620065007200410074007400720069006200750074006500030612710306125803000001052002021C1C04061280A10306125C04061281F0092002011281F411818C0C20030112809911818C1281F00C20030112809D11818C1281F080AC49006E00740065007200660061006300650073002C00200041006200730074007200610063007400200063006C00610073007300650073002C00200061006E006400200075006E0073007500700070006F0072007400650064002000560061006C0075006500540079007000650073002000630061006E006E006F007400200062006500200069006E007300740061006E007400690061007400650064002E00200028007B0030007D0029000A061512808D02127112500306125005061D1280B503061254082000151215011271062001125012710500010212710828001512150112710628011250127111061512808D0212711512808D020E1281F410061512808D0212711512808D0212090E0B061512808D0212711281F80F061512808D0212711512150111818C0406128154062001011281540B20011512150111818C12710D20011512808D020E1281F412710820011281F41280A10C20011512808D0212090E12711520021512150111818C1271101512808D020E1281F41620021512808D020E1281F41271101512808D0212090E0720011281F8127102061C0620020113001C08200201130011818C09200301130011818C1C0A200102151282000113001100020215128200011300151282000113000400010E1C0C30010115128200011E001E00243C003E0066005F005F0041006E006F006E0079006D006F00750073005400790070006500467B0030007D00200064006F006500730020006E006F007400200061006300630065007000740020006E0075006C006C00200061007300200061002000760061006C0075006500809C55006E00610062006C006500200074006F002000660069006E0064002000610020007300750069007400610062006C006500200063006F006E007300740072007500630074006F007200200066006F007200200069006E007300740061006E00740069006100740069006E00670020007400680065002000740061007200670065007400200054007900700065002E00200028007B0030007D00290036540079007000650020007B0030007D0020006900730020006E006F00740020006F0066002000540079007000650020007B0031007D0080E854007900700065007300200077006800690063006800200069006D0070006C0065006D0065006E0074002000470065006E00650072006900630020004900440069006300740069006F006E006100720079003C0054004B00650079002C0020005400560061006C00750065003E00200061006C0073006F0020006E00650065006400200074006F00200069006D0070006C0065006D0065006E00740020004900440069006300740069006F006E00610072007900200074006F00200062006500200064006500730065007200690061006C0069007A00650064002E00200028007B0030007D00290080D454007900700065007300200077006800690063006800200069006D0070006C0065006D0065006E0074002000470065006E00650072006900630020004900440069006300740069006F006E006100720079003C0054004B00650079002C0020005400560061006C00750065003E0020006E00650065006400200074006F0020006800610076006500200073007400720069006E00670020006B00650079007300200074006F00200062006500200064006500730065007200690061006C0069007A00650064002E00200028007B0030007D002900072002011281A802072002011281FC020520011C12710620021C12711C0B2005011C12711281F40E1C063001011E001C0C20021C12711512808D020E1C0820021C12711280B90920031C1271127112190A20031C127112711280BD0920021280C11271121906000112711271070002127112711C07100101021280A1080002021280A11271081001011E001280A109000212351280A112710400010E0B050002080E080400010E081C20021512250115128200011180801512810C01151282000111816C020A200211818C11818C127104061280C5062001011280C511200115121501151282000111816C1280C91F20030115126101151282000111816C1512810C01151282000111808011818C2520040115126101151282000111816C11818C1512808D0211818C151282000111808011816C0F20010115126101151282000111816C122002011280CD15121501151282000111816C132002011280CD1512810C01151282000111816C062001011280CD0520001280CD0420\
-010103052001011D03072003011D03080804061280CD0528001280CD125300700065006300690066006900650064001E530068006F0075006C006400530065007200690061006C0069007A00650007000112581280A1070001125C1280A10700011258128099070001125C128099070001125812809D070001125C12809D0A0003125412710E1D127107000112541280D106000112501271090002125012711D127107000112501280D50620010111811180A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC6052000128121042000124D07000112711181250800021235125112711407061281211280F51280E51280E11280ED1280E904200012510D200801080808080808081181310707021281351D050500001280810820020112551280810D151281100115128200011180800D1512810C01151282000111808011070212591512810C01151282000111808008151282000111808008151281B8011180800500020E0E1C04200012550720020A0811813905000012813D0620010E12814504200101051007071512820001118080020A08080E0A042001010D021D0505200011813107200111815111210320000D042001010A0520001181550500020E0E0E2807121512820001118080110C08124C0211211181510A127D0E020E123C1230118080110C021181550520011D050E050702081D0504070112440507030A080A0420001271070001118085127107070212711180850807031244116511650C151261011512820001118080032000050407020A080520011D050805200111210D0420010308072002010E11815529071A110C0E0D0E113411381D050211210E0E1181550803127D0E1D05123C123C0E080A0A110C112103060002081D05080C0005011280C1081280C108080C07060811101D051C1D0511100520011D0308050702081D030620011280950306070212809503062002011D05021C0703151261011512820001118080151215011512820001118080125D040001011C030612550620010111817504070111650715128179011165090000151281790113000615128179010E0600030E1C1C1C060702081181510507020811210807041D051D0308080407011D0504070111400520020E08080500001281910C0004020E11819512814510050607031D0508050715128179011D05090100044974656D00000C151261011512808C011180800C151215011512808C011180800C15122D011512808C01118080220703151261011512808C011180801512808C0111808015122D011512808C0111808005151215011C0515122D011C07200015122D011C030612640500001281A105070112823803070108071512823C0113000907011512823C011300021300071512823C011E000907011512823C011E00040A011E000E07031C1512820001118080118080091512808D020E1281F408200202130010130120070915128200011180801512808D020E1281F412711C0E1281F412711C11808005151261011C042001081C14070615128200011180801271021281A51C118080081512808C011180801707031512808C011180800215122D011512808C011180800307010E06151270011300021E000507021C1E0007151280E0011300090701151280E001130006151260011300140704151280E00113001512600113001280A912190F070515126001130012311C1280A91C0C1512250115128200011180800C1512290115128200011180800C1512150115128200011180800C15122D01151282000111808023070415122501151282000111808015128200011180800215122D011512820001118080081512780211818C021B07041512810C01151282000111808008151282000111808011808017151215011511390211818C1512150115128200011180801715122D011511390211818C151215011512820001118080131511390211818C151215011512820001118080042000130143070515122D011511390211818C1512150115128200011180801512780211818C021282401512150115128200011180801511390211818C1512150115128200011180800D151280FC01151282000111808019200015122D011511390211818C15121501151282000111808014061511390211818C1512150115128200011180801520001511390211818C15121501151282000111808009061512780211818C021528001511390211818C15121501151282000111808005070112824407200201130013010607020811808010151215011512150115128200011180801015122D0115121501151282000111808012200015122D011512150115128200011180800E200015121501151282000111808007061512780208020E280015121501151282000111808005070112824806151278020802180615122D011511390211818C151215011512820001118080110615122D0115121501151282000111808005070112824C2A070402081511390211818C1512150115128200011180801511390211818C151215011512820001118080060704080808080507011282500407020208050701128254052002010E023A010034544F444F3A204C617A7920646F6573206E6F74206D69782077656C6C207769746820736861726564204953747265616D3C543E2E0100000E200015122D0115128200011180800A200015128200011180800A280015128200011180800507011282580907030811808011808011070408151282000111808011808011808014070312819C151261011512820001118080118198040001020D040001020C2D07091512808C0111808015121501151282000111808012710D0C11819815122D011512808C01118080118085020A15122D01151139020E1C07070211818C123106151139020E1C080701151139020E1C08200015122901130107151215011281F40715122D011281F420070611818C1512808D020E1281F4151215011281F41281F41C15122D011281F4071512150111818C0715122D0111818C1607041512150111818C11818C11818C15122D0111818C09151280940213001301021301050702130102050002020E0E0507011180A00A070115128200011180800B07011D15128200011180800C000411210E0E1281451181B5030701020620011281B90E0520001281C10620011281BD080C0004020E118195128145100A0807031281B90A11210607021181510A07151280AC011300071512808401130013070315128084011300151280BC0113001280A914070415128084011300151280BC0113001280A90E0600030E0E0E0E0620011D0E1D030F070A1D0E0E02080803021D031D0E080806151281C9020E0807151281C9020E080407020E080500001281CD052002020E0E0507011280B8042001080E0A0003011280C11280C10805151215010E0515122D010E07200015122D010E04061280C00507011282600507011282640520001280950607021281D10E2E070C0202020815128200011180801271118085151280B40111808015122D011512820001118080118080118085020507011181510720020E0E1281450600011180891C15070F020E0D0C118085050211808906080A0407090B080706080808030308062002021271020600020212711C081512808D0212090E0600020E0E1D0E13070612711512808D0212090E0E1D12091D0E080400010B1C0700011280C11271061512610112090900031C1C12711281450520001D13000420011C080600021C12710B0E07050B1280C1151261011209080B0600010D1180890600011180890D0900020211808911808905151261010E0920021D0E1D031181ED05151229010E0800040E0E1D0E0808062003010E1C1C052002010E1C0707041D0E0E0208062002010E1D1C0807031181510A1D1C0B07070E0E080808118155030607021D031D0E0D1512811001151282000111816C0D1512810C01151282000111816C08151282000111816C10151281C90211818C151282000111816C10151280A50211818C151282000111816C101512808D0211818C151282000111816C08151281B80111816C50070C1512810C01151282000111816C128174151282000111816C11818C11816C0E1512808D0211818C151282000111816C11818C0E151280B40111816C11816C1512808D0211818C151282000111816C0A15122D01151139020E0E06151139020E0E13151215011511390211818C151282000111816C1315122D011511390211818C151282000111816C0F1511390211818C151282000111816C3607060E151139020E0E1511390211818C151282000111816C0E15122D01151139020E0E15122D011511390211818C151282000111816C110704151280B40111816C0E1180DC11816C0707050808080308090707080808030E080304061280E4080615122D011280E805070112826807151215011280E80715122D011280E807151261011280E807151229011280E80807020E15122D010E0C15126101151282000111816C0C07041280E81280E81280A9030400010E030500020E1C1C07151261011280EC23070A151282000111816C1281640311816C1280E80E0E151261011280EC1280EC1280EC0A0708030E0E03030303030420010E0808070603080808080E1607060303151282000111816C0E151282000111816C030A0704030E1280A91280E803070103092000151181F101130008151181F1011280EC1A070712817411818C081280EC1280EC11818C151181F1011280EC0B070208151282000111816C0C0004020E11819512814510080500010E1D1C0A07070E0E030208081D1C11070215126101151282000111816C12811C0507021D0E08050002021C1C0615128091010E07200202130013000407011D030407011D1C1B07021512810C01151282000111808015126101151282000111816C0D07021512820001118080118080050A0111816C0E070315128200011180800211818C100703151282000111808011818C1180800507030808080920031280951D03080805000208080806070308081D030615126101130007151280FC0113000C07040813000815122D0113000B070313000215122D0113000715128100011300071512810401130009070115128104011300071512826C011300031D130007151281FD01130010100104081D1E000808151281FD011E00040A0113000C2003080808151281FD0113002207071D13001512610113000808151281FD011300151281FD0113001512826C01130009200401081D130008080E07051D1300151261011300080808071512810801130007151281180113000715128114011300080701151225011300092000151282010113000807011512150113000A070208151280FC0113000820031280950E080804070208030620010111820919010080010000010054020D416C6C6F774D756C7469706C65001901009C010000010054020D416C6C6F774D756C7469706C6500040612813405070112827004061281380507011282740707050A080803020C00031180890E118195128145060001081180890600010A1180890A00030D0E1181951281450F070B0A080803020208020E1180890D0A0003080E1181951281450620011280950E0F070B0A080803031280950E08080203040702020304061281480D0615121501151282000111816C0E061512810C01151282000111816C04061281740706151139020E0E0B0615122D01151139020E0E050701128278050A011180801F0708020811816C11816C151139020E0E151139020E0E151139020E0E1181600C15121501151282000111816C0C15122D01151282000111816C0E200015122D01151282000111816C040612815005070112827C0520001280D10807021280D11280D1050A0112812C050A011281400920021280990E118211050A0112821516070712711281401280991282151281F01281F012828009200015122D0111818C0406128130040612815C050701128284050A011281300920030113001301130203061301030613020420001302042800130104280013020620010111821D0801000000000000000B15128288031300130113020620011280951C0213020507011280950715128179011300071512817901130107151281790113020D070115128288031300130113020815128288030E0E0E0507011281640715126101128174060702081281740620010212817408151281FD011281740A200108151281FD01130005070112828C050701128290060001021281740906151281FD011281740B20011300151281FD0113000907031281740E1282940907031281740E1282980607020812829C07151280A5020E0E0A2001011512822101130005200102130105200108130108200015122501130005151225010E082000151139020E0E082800151139020E0E0E200015122D0115113902130013010507011282A0060615122D010E0507011282A40907030E0E15122D010E0507011282A8052002080308040612817C0507011282AC04000103030A070608080E0E0811818006070408080E0E050002020E080D0707151261010E0208080802080915128184021300130109151280F002130013010D070115121501151282000113000915128188021300130107151280BC0113010D07011512150115128200011301070002020E11822905200102127106200212710E02082003020E0212813D0420010803080704020E081180850700040E0E0E0E0E052002080E0E060703081D1C080B07011D1512808C011180800300000E07151281B801130008151281C9020E126C0A200101151280910113000615121501126C0615122D01126C081512808D020E126C100704126C0E15122D01126C15122D010E0507020E126C09151281C9020E1280A807151215011280A80715122D011280A8091512808D020E1280A81907071280A80E0E0E15122D011280A815122D010E15122D010E0507011280A80E07041280A80E1280A815122D010E07151215011281540715122D0112815409070115122D011281540D07031281540215122D011281540806151261011281F007151261011281F008151181F1011281F00E07031281F002151181F1011281F01507051281541281F01282B01281F015122D0112815404061281E8080615122D01128154080615122D0111818C0507011282B4070703020811818C04070208080C070212815415122D0112815405000112510E05200112710E0E07051D0E12511280991280991D0304070112710306123504061281EC0507011282B80920011D1280D51182110620001D1280B509151281C90212711250091512808D02127112500620011280D10E24070B1D1280D51280D51280D51D1280B512711280D11D1280B512711D1280B51D1280D50804061D127108200015122901130004070112501220041280D51182111282351D12711D11823910151281C90212711512808D020E1281F40F151281C90212711512808D0212090E0A151281C90212711281F80E151281C90212711512150111818C0E1512808D0212711512150111818C1D07041512150111818C1512808D020E1281F41512150111818C1D11818C101512808D0212711512808D020E1281F41407021512808D020E1281F41512808D020E1281F41807041512808D020E1281F41281F41281F415122D011281F40F1512808D0212711512808D0212090E1207021512808D0212090E1512808D0212090E11151229011511390212711512150111818C13151229011511390212711512808D020E1281F412151229011511390212711512808D0212090E0D151229011511390212711281F8071512808D020E1C09151281C9020E1281F40920011D1280991182110920011D12809D11821180990721021512150111818C11818C1512808D0212090E021280991512150111818C11818C1281F01281F411818C12809D1512150111818C11818C1281F01281F411818C1512150111818C15122D0111818C1D11818C1512808D020E1281F41512150111818C1D1280990815122D0111818C1D11818C15122D0111818C1D12809D0815122D0111818C1D11818C15122D0111818C1512150111818C08151281C90212090E5D0712021512150111818C11818C1512808D020E1281F412809D1512150111818C11818C1281F411818C1512808D020E1281F415122D0111818C1D11818C1D12809D0815122D0111818C1D11818C15122D0111818C1512808D020E1281F40A1512808D0212711281F80B07031281F81281F81281F8071512820001130008070212809511818C0907011512820001130008151281790111818C0615128179011C1D0711127112823D128241118085020511211180890D06080A040C07090B0715128200011E0007151281C9020E1C0507011281F80520001280BD2607111281F81D1C1512808D020E1C08080E12710E1280B908080E12710E15122D010E1231120D0600021C1271020520001D12710700031C12710E020600021C12711C0B000311210E1281451181B50B0003020E118229101281B10400010A0E0600011181510A0600011181510E0600030E0E1C1C1A0708021D127112711512808D020E1281F411211281B11280A91C2B070B1C1512808D020E1281F41512808D020E1C0E1280B90E0E1281F415122D010E15122D010E15122D010E0700020E1C1281452A07101C1512808D020E1281F41512808D020E1C1C0E1280B91C1C0E1281F41231120D1231120D1231120D061512150112710615122D01127120070E1281F812711C1C12711C1280A91C15122D0112711D1C1D1C12311D1C120D0800021280C1127108072002011280C1080507011280C11207061280BD151261011C1C1280C11231120D07200112711D1271021D1C0A070312711D12711D127107070212711D12710407011E00040612820C0507011282BC0B151281840211816C11808004061282100D0615122D0115128200011180800507011282C0160703151282000111816C11816C1D15128200011180801B151229011511390211818C151225011512250115128200011180801B151215011511390211818C151225011512250115128200011180801B15122D011511390211818C15122501151225011512820001118080171511390211818C15122501151225011512820001118080101512290115122501151282000111808010151215011512250115128200011180801015122D01151225011512820001118080101512250115122501151282000111808018151281C90211818C15122501151225011512820001118080181512808D0211818C15122501151225011512820001118080101512610115122501151282000111808081100715151282000111816C11818C021512808D0211818C1512250115122501151282000111808015126101151282000111808011818C1512250115122501151282000111808015122D011511390211818C151225011512250115128200011180801512250115128200011180801511390211818C1512250115122501151282000111808011818C15122501151282000111808011818C1512250115128200011180801511390211818C151225011512250115128200011180801511390211818C1512250115122501151282000111808015122D0115122501151282000111808015122D011511390211818C1512250115122501151282000111808011818C11818C15122D011512250115128200011180801707051512150111818C11818C0E11818C15122D0111818C062001011182510507011280C50A00021280C912751280C50620010111825D0807021280C912825904061280C90A061512808D0211818C0E09061511390211818C0E04061282140D0615122D011511390211818C0E0507011282C405200011826509151280A50211818C0E091512808D0211818C0E0C151215011511390211818C0E0C15122D011511390211818C0E081511390211818C0E1D07071282611280A902081182651511390211818C0E1511390211818C0E0907031282611280A90804061282180507011282C80507011282CC0B151281880211808011816C1F07041512810C01151282000111808015126101151282000111816C0211818C110704151282000111808011818C0211808010151280A50211818C1512820001118080101512808D0211818C15128200011180802207061512820001118080021512808D0211818C15128200011180800211818C11808013151215011511390211818C15128200011180801315122D011511390211818C15128200011180800F1511390211818C151282000111808013151229011511390211818C15128200011180802A07041281741511390211818C151282000111808011816C15122D011511390211818C15128200011180800720021280950308070703021280950810070411818C0E11818C15122D0111818C062001011280810620010111826D0A00021280CD12491282690B07031282241280CD128269260706081512810C01151282000111816C151282000111816C151280B40111816C1280A911816C150703151282000111816C151280B40111816C11816C052000128269050A011282710920021280D10E11821122070B12711280991280D11282151281F01281F01281F01281F01281F01281F01282D004061282750406128279040612827D04061282810406128285040612828904061282280507011282D4050A01128275050A01128279050A0112827D050A01128281050A01128285050A0112828909200015122D011281F404061281F40520001281F40806151215011281F40806151261011281F4080615122D011281F40906151181F1011281F40528001281F40507011282D807151229011281F407151261011281F408151181F1011281F408010045000000000004061280D10620011280D1020507011282DC0507011282E0040612809D0507011282E40507011282E81320051280D10E1182111282351D12711D1182390507011280D10507011282EC0507011280D504061280D50507011282F01001000B53514C232E4A736F6E46780000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C230000808301007E436F7079726967687420C2A920323031332D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E3B20436F7079726967687420C2A920323030362D32303130205374657068656E204D2E204D634B616D65792E20416C6C207269676874732072657365727665642E00001001000B332E332E38332E3238303200000801000200000000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301000000000000007C21685400000000020000001C010000F8FD0200F8DF0200525344533BC8E4ABA2CF17408A5381DE72D52A610E000000633A5C53514C5175616E74756D4C6561705C50726F6A656374735C53514C73686172705C417070436F64655C7472756E6B5C53514C73686172702E4A736F6E46785C6F626A5C467265655C53514C232E4A736F6E46782E70646200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003CFF020000000000000000005EFF020000200000000000000000000000000000000000000000000050FF02000000000000000000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058000300200400000000000000000000200434000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE0000010003000300F20A530003000300F20A53003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00480030000010053007400720069006E006700460069006C00650049006E0066006F0000005C03000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C006500610070000000000040000C000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E004A0073006F006E0046007800000038000C000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033002E003200380030003200000040001000010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E004A0073006F006E00460078002E0064006C006C00000020017D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000310033002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E003B00200043006F0070007900720069006700680074002000A900200032003000300036002D00320030003100300020005300740065007000680065006E0020004D002E0020004D0063004B0061006D00650079002E00200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000000004800100001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E004A0073006F006E00460078002E0064006C006C0000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C002300000000003C000C000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E00380033002E\
-00320038003000320000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F002000C000000703F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = ' + @IsSQLServer2005 + N'SAFE;
- ');
- PRINT 'SQL#.JsonFx Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.JsonFx Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#Network = 1 OR @InstallSQL#DB = 1)
- BEGIN
- PRINT 'Creating SQL#.Network Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.Network]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010300802168540000000000000000E00002210B010B00003C000000060000000000006E5A000000200000006000000000001000200000000200000400000000000000040000000000000000A000000002000047E300000300408500001000001000000000100000100000000000001000000000000000000000001C5A00004F00000000600000F803000000000000000000000000000000000000008000000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000743A000000200000003C000000020000000000000000000000000000200000602E72737263000000F80300000060000000040000003E0000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000004200000000000000000000000000004000004200000000000000000000000000000000505A000000000000480000000200050044350000D8240000090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000052CFC3AA5636B52178FE9C85CB4B5996CE9ACE0483268C9BF73569770EFF8B740E410E68FAE2BAD63D5591E26524164998872F12D70477A6603B2F5A3E129FA319211C1EA0E979ECFDAF343E66406D63C93AFF4D42FBBE524DB6B69F44EED010E3B1EA5314BDF4861DDAF14EA874E7B9C42145D17AE6C9E8DAF319CFA23A703C1B300400BE000000010000110F00281200000A2C0716281300000A2A0F00281400000A6F1500000A6F1600000A1F0F310716281300000A2A0F00281400000A6F1500000A720100007072050000706F1700000A281800000A26DE0A2616281300000A0DDE630F00281400000A6F1500000A178D1D00000113041104161F2E9D11046F1900000A0A068E691A2E0716281300000A2A166A0B160C2B2206089A281800000A0B07166A32090720FF0000006A310716281300000A2A0817580C081A32DA17281300000A2A092A00000110000000002C00234F000A010000011B300400BB000000020000110F00281200000A2D290F00281400000A6F1500000A7E1A00000A281B00000A2D1102280100000613041204281C00000A2C067E1D00000A2A0F00281400000A6F1500000A178D1D00000113051105161F2E9D11056F1900000A0A166A0B166A0C06169A281800000A0B0720000000016A5A0C06179A281800000A0B080720000001006A5A580C06189A281800000A0B080720000100006A5A580C06199A281800000A0B0807580CDE09267E1D00000A0DDE0708281E00000A2A092A00011000000000600049A90009010000011B300300D4000000030000110F00281F00000A2C067E2000000A2A0F00282100000A166A320B0F00282100000A156E31067E2000000A2A72050000700A166A0B0F00282100000A0C0820000000016A5B0B080720000000016A5A590C1201282200000A7201000070282300000A0A0820000001006A5B0B080720000001006A5A590C061201282200000A7201000070282400000A0A0820000100006A5B0B080720000100006A5A590C061201282200000A7201000070282400000A0A080B061201282200000A282300000A0ADE09267E2000000A0DDE0706282500000A2A092A0110000000003C0086C2000901000001860F00281200000A2C067E2000000A2A0F00281400000A282600000A282500000A2A860F00281200000A2C067E2000000A2A0F00281400000A282700000A282500000A2AAA0F00281200000A2C067E2000000A2A0F00281400000A1F2B1F206F2800000A282900000A282500000A2A00133002000409000004000011732A00000A0A7207000070720B00007073100000060B06076F2B00000A7213000070721700007073100000060B06076F2B00000A721D000070722100007073100000060B06076F2B00000A7227000070722B00007073100000060B06076F2B00000A7235000070723900007073100000060B06076F2B00000A7243000070724700007073100000060B06076F2B00000A7253000070725700007073100000060B06076F2B00000A7261000070726500007073100000060B06076F2B00000A7271000070727500007073100000060B06076F2B00000A7283000070728700007073100000060B06076F2B00000A728F000070729300007073100000060B06076F2B00000A72A100007072A500007073100000060B06076F2B00000A72AF00007072B300007073100000060B06076F2B00000A72BB00007072BF00007073100000060B06076F2B00000A72C900007072CD00007073100000060B06076F2B00000A72D700007072DB00007073100000060B06076F2B00000A72E700007072EB00007073100000060B06076F2B00000A72F300007072F700007073100000060B06076F2B00000A72FF000070720301007073100000060B06076F2B00000A720B010070720F01007073100000060B06076F2B00000A7219010070721D01007073100000060B06076F2B00000A7225010070722901007073100000060B06076F2B00000A7237010070723B01007073100000060B06076F2B00000A7245010070724901007073100000060B06076F2B00000A7253010070725701007073100000060B06076F2B00000A7263010070726701007073100000060B06076F2B00000A7273010070727701007073100000060B06076F2B00000A7281010070728501007073100000060B06076F2B00000A7293010070729701007073100000060B06076F2B00000A72A301007072A701007073100000060B06076F2B00000A72B101007072B501007073100000060B06076F2B00000A72BF01007072C301007073100000060B06076F2B00000A72CF01007072D301007073100000060B06076F2B00000A72E101007072E501007073100000060B06076F2B00000A72F301007072F701007073100000060B06076F2B00000A7205020070720902007073100000060B06076F2B00000A7217020070721B02007073100000060B06076F2B00000A7227020070722B02007073100000060B06076F2B00000A7239020070723D02007073100000060B06076F2B00000A724B020070724F02007073100000060B06076F2B00000A725D020070726102007073100000060B06076F2B00000A726D020070727102007073100000060B06076F2B00000A727F020070728302007073100000060B06076F2B00000A728D020070729102007073100000060B06076F2B00000A729D02007072A102007073100000060B06076F2B00000A72AD02007072B102007073100000060B06076F2B00000A72BF02007072C302007073100000060B06076F2B00000A72D102007072D502007073100000060B06076F2B00000A72E302007072E702007073100000060B06076F2B00000A72F302007072F702007073100000060B06076F2B00000A7201030070720503007073100000060B06076F2B00000A7213030070721703007073100000060B06076F2B00000A7225030070722903007073100000060B06076F2B00000A7235030070723903007073100000060B06076F2B00000A7243030070724703007073100000060B06076F2B00000A724F030070725303007073100000060B06076F2B00000A7261030070726503007073100000060B06076F2B00000A7273030070727703007073100000060B06076F2B00000A7285030070728903007073100000060B06076F2B00000A7295030070729903007073100000060B06076F2B00000A72A703007072AB03007073100000060B06076F2B00000A72B503007072B903007073100000060B06076F2B00000A72C703007072CB03007073100000060B06076F2B00000A72D903007072DD03007073100000060B06076F2B00000A72EB03007072EF03007073100000060B06076F2B00000A72FB03007072FF03007073100000060B06076F2B00000A7209040070720D04007073100000060B06076F2B00000A721B040070721F04007073100000060B06076F2B00000A722B040070722F04007073100000060B06076F2B00000A723B040070723F04007073100000060B06076F2B00000A724D040070725104007073100000060B06076F2B00000A725F040070726304007073100000060B06076F2B00000A726F040070727304007073100000060B06076F2B00000A7281040070728504007073100000060B06076F2B00000A728F040070729304007073100000060B06076F2B00000A729F04007072A304007073100000060B06076F2B00000A72AF04007072B304007073100000060B06076F2B00000A72C104007072C504007073100000060B06076F2B00000A72D304007072D704007073100000060B06076F2B00000A72E504007072E904007073100000060B06076F2B00000A72F504007072F904007073100000060B06076F2B00000A7203050070720705007073100000060B06076F2B00000A7215050070721905007073100000060B06076F2B00000A7227050070722B05007073100000060B06076F2B00000A7237050070723B05007073100000060B06076F2B00000A7245050070724905007073100000060B06076F2B00000A7251050070725505007073100000060B06076F2B00000A7263050070726705007073100000060B06076F2B00000A7275050070727905007073100000060B06076F2B00000A7287050070728B05007073100000060B06076F2B00000A7297050070729B05007073100000060B06076F2B00000A72A905007072AD05007073100000060B06076F2B00000A72B705007072BB05007073100000060B06076F2B00000A72C905007072CD05007073100000060B06076F2B00000A72DB05007072DF05007073100000060B06076F2B00000A72ED05007072F105007073100000060B06076F2B00000A72FD050070720106007073100000060B06076F2B00000A720B060070720F06007073100000060B06076F2B00000A721D060070722106007073100000060B06076F2B00000A722D060070723106007073100000060B06076F2B00000A062A1B3004006101000005000011042D6728070000066F2C00000A0D2B1C1203282D00000A0A02067B03000004723B06007017282E00000A10001203282F00000A2DDBDE0E1203FE160200001B6F3000000ADC027275060070723B06007017282E00000A1000027287060070723B060070283100000A100028070000066F2C00000A13042B1C1204282D00000A0B02077B01000004077B020000046F1700000A10001204282F00000A2DDBDE0E1204FE160200001B6F3000000ADC036F1500000A7E1A00000A283200000A3988000000036F1500000A6F3300000A0C0872BF0600706F3400000A2D0D0872C90600706F3400000A2C120272D706007072DB0600706F1700000A10000872BF0600706F3400000A2D0D0872E90600706F3400000A2C360272F906007072FF0600706F1700000A100002720D07007072FF0600706F1700000A100002721107007072FF0600706F1700000A1000042D1202721507007072070000706F1700000A1000022A000000011C000002000E002937000E0000000002007600299F000E00000000DE026F3500000A2C06283600000A2A026F3700000A733800000A0F01281400000A0F02283900000A28080000066F3A00000A733B00000A2A1B3004006800000006000011026F3500000A2C06283600000A2A026F3700000A733800000A0A28070000066F2C00000A0C2B1C1202282D00000A0B06077B02000004077B0100000417282E00000A0A1202282F00000A2DDBDE0E1202FE160200001B6F3000000ADC066F3A00000A733B00000A2A0110000002002500294E000E0000000013300300AD000000070000110F00281200000A2C067E2000000A2A0F01281200000A2C0B724B070070733C00000A7A0F01281400000A6F3300000A250B2C46077283070070281B00000A2D29077297070070281B00000A2D200772A1070070281B00000A2D170772AD070070281B00000A2D0E2B10170A2B28180A2B24190A2B20160A2B1C72BB0700700F01281400000A72FB070070282400000A733C00000A7A0F00281400000A733D00000A06283E00000A282500000A2A00000013300200940100000800001102A5040000020A0312007B04000004282500000A81040000010412007B05000004282500000A81040000010512007B06000004282500000A81040000010E0412007B07000004282500000A81040000010E0512007B08000004282500000A81040000010E0612007B09000004283F00000A81080000010E0712007B0A000004282500000A81040000010E0812007B0B000004282500000A81040000010E0912007B0C000004281300000A81030000010E0A12007B0D000004281300000A81030000010E0B12007B0E000004281300000A81030000010E0C12007B0F000004281300000A81030000010E0D12007B10000004281300000A81030000010E0E12007B11000004281300000A81030000010E0F12007B12000004282500000A81040000010E1012007B13000004282500000A81040000010E1112007B14000004283F00000A81080000010E1212007B15000004282500000A81040000010E1312007B16000004282500000A81040000010E1412007B17000004281300000A81030000010E1512007B18000004282500000A81040000012A133002003C00000009000011284700000A6F4800000A027B1B0000043315027B1A0000041FFE330B02167D1A000004020A2B071673180000060A06027B1D0000047D1C000004062A1E0228110000062A13300200AE0200000A000011027B1A0000040A0645020000000500000090020000389202000002157D1A000004027C1C000004281200000A3A7B02000002027C1C000004281400000A733D00000A7D1E000004027C1F000004FE1504000002027C1F000004027B1E0000046F4900000A7D04000004027C1F000004027B1E0000046F4A00000A7D05000004027C1F000004027B1E0000046F4B00000A7D06000004027C1F000004027B1E0000046F4C00000A7D07000004027C1F000004027B1E0000046F4D00000A7D08000004027C1F000004027B1E0000046F4E00000A7D09000004027C1F000004027B1E0000046F4F00000A7D0A000004027B1E0000046F5000000A0B0745050000004A000000020000001400000026000000380000002B58027C1F00000472750800707D0B0000042B46027C1F00000472810800707D0B0000042B34027C1F00000472890800707D0B0000042B22027C1F00000472930800707D0B0000042B10027C1F000004729D0800707D0B000004027C1F000004027B1E0000046F5100000A7D0C000004027C1F000004027B1E0000046F5200000A7D0D000004027C1F000004027B1E0000046F5300000A7D0E000004027C1F000004027B1E0000046F5400000A7D0F000004027C1F000004027B1E0000046F5500000A7D10000004027C1F000004027B1E0000046F5600000A7D11000004027C1F000004027B1E0000046F5700000A7D12000004027C1F000004027B1E0000046F5800000A7D13000004027C1F000004027B1E0000046F5900000A7D14000004027C1F000004027B1E0000046F5A00000A7D15000004027C1F000004027B1E0000046F5B00000A7D16000004027C1F000004027B1E0000046F5C00000A7D17000004027C1F000004027B1E0000046F5D00000A7D1800000402027B1F0000048C040000027D1900000402177D1A000004172A02157D1A000004162A1E027B190000042A1A735E00000A7A062A1E027B190000042A7A02285F00000A02037D1A00000402284700000A6F4800000A7D1B0000042A00001330020011000000090000111FFE73180000060A06027D1D000004062A1E02285F00000A2A1E02285F00000A2AEA02285F00000A02037D010000040272070000700472AD080070282400000A7D020000040272B10800700472B7080070282400000A7D030000042A42534A4201000100000000000C00000076322E302E35303732370000000005006C0000009C080000237E000008090000F40A000023537472696E677300000000FC130000C008000023555300BC1C0000100000002347554944000000CC1C00000C08000023426C6F6200000000000000020000015717A20B0902000000FA253300160000010000002F000000050000001F000000180000002900000005000000610000001E0000000A000000010000000200000002000000070000000400000001000000030000000300000000000A0001000000000006004700400006004E0040000A00790064000A00840064000A009F00640006000501EA000A00270164000A0052016400060081016E010A0044032903060079035A030600980386030600AF0386030600CC0386030600EB03860306000404860306001D04860306003804860306005304860306006C045A030600800486030600990486030600C604B60406000C05EC0406002C05EC040A005705290306008D0540000600AC0540000600BC0540000600EA0540000E00000640001B003C0600000E00800661060E008606610606009C0640000600E20640000E00F406400006001007EA0006001E07EA0006002C076E0106002509120906004E093D090E00DC09400006009F0A40000600B50A5A030600CB0A5A030600D60AEC040000000001000000000001000100010010001B0000000500010001000300100020000000050001000F000B0110002B00000009000400110003011000FF06000005001900110006009E01A0000600A801A0000600B301A0000600C301A0000600D001A0000600DC01A0000600E601A0000600F201A0000600FB01A90006000402A00006000902A00006001602AC0006002402AC0006003202AC0006003902AC0006004402AC0006004A02AC0006006502A00006006F02A00006007C02A90006008102A00006008702A00006008E02AC0006009A02A0000100A9070E0701003E08A90001004908A90006001903830206008908830206009208150706009E081907D0200000000096008E000A000100AC21000000009600A800110002008422000000009600B800180003007423000000009600C8001F0004009623000000009600D2001F000500B823000000009600E0001F000600E4230000000091000C0126000700F42C0000000096001C012F000700802E000000009600300136000A00B82E0000000096003B0141000D003C2F000000009600460148000E00F82F0000000091005B0151001000DC340000000096008D0195002600F93400000000861898019C002700013500000000861898019C00270009350000000086189801A3002700983100000000E1013807F5062900E03100000000E1017C0708072900E83100000000E1019306B5012900A23400000000E109B60711072900AA3400000000E101F8079C002900B13400000000E10123089C002900B33400000000E1095E0811072900BB340000000086189801CC00290000000100A30200000100A30200000100AD0200000100B60200000100C10200000100D00200000100DB0200000200E70200000300FA0200000100DB0200000200E70200000300FA02000001000D03000001001903000002001D0300000100560302000200C30102000300D00102000400DC0102000500E60102000600F20102000700FB0102000800040202000900090202000A00160202000B00240202000C00320202000D00390202000E00440202000F004A02020010006502020011006F02020012007C02020013008102020014008702020015008E02020016009A02000001001903000001009E0100000200A801000001003E0805000E0005002500050012000500A10005008D00510098019C00590098019C0061009801C20069009801C20071009801C20079009801C20081009801C20089009801C20091009801C20099009801C200A1009801C700A9009801C200B1009801C200B90098019C00C1009801CC00C90098019C00D10098019C0021006C05B50119007705B90121008305BF01D9009405BF01D9009905C301D900A405C701E100B405CD01D900C105D201D900C705A000D900CD0525021900D905B5012900E5052B02290077052F0229006C05B5012100E5058302290083058702F100F005BF01D900F9058B02D900F9059102210077059802F9000406E102F9001406E102D900A4056003F9002506E1020C0098019C000C0038066D030C0047067E031400550690030901A405950314009306B5011901A8069C000901A4059102D900B0062502D900BE06BF01D900C6069F0339006C05B5013900CD06F60339008305FB03D9009801000419008305B501D900D606FB0339009801000421019801C200F9009801C200F90046018F04410077059D041C004706FE0649004706080741019306B50124005506900341011D089C00410155061107490198019C0051015509260751016709C301F9007B09BF01F9008C09BF01F9009C09BF01F900AA09BF01F900BA09BF010900C709C301F900D309BF01F900EC093107F900FD09B501F9000F0AB501F900210AB501F9002C0AB501F9003B0AB501F9004A02B501F900450ABF01F900530ABF01F900640AC301F9006D0ABF01F900770ABF01F900820AB501F900920ABF01610198019C00090098019C00690198013E07790198019C0020008B0073012E00730021072E008300EB072E006B00D6072E007B00E2072E001B0045072E00230057072E002B006D072E00330073072E003B0089072E00430093072E004B006D072E005B006D0740008B00E40160008B00420280008B00A602A0008B00E602A3000B032107C0008B00250320018B00BA0340018B00060460018B004F04A0018B00A804E4010B00AF00200233022107400233022107800233022107A00233022107E00233022107000333022107D90135029E027303A40342049604A3042C073707050001000000AD081D070000EB081D0702001400030002001700050005002200810005002400830005002600850005002800870005002A00890005002C00610005002E008B0066038803E706EE0604800000030003005300000001000000D1004A05000002000000000000000000000001003700000000000200000000000000000000000100580000000000020000000000000000000000010040000000000003000200040002000500020000000000003C4D6F64756C653E0053514C232E4E6574776F726B2E646C6C00494E45540048544D4C456E7469747900494E4554555249496E666F006D73636F726C69620053797374656D004F626A6563740056616C7565547970650053797374656D2E446174610053797374656D2E446174612E53716C54797065730053716C426F6F6C65616E0053716C537472696E6700497356616C69644950416464726573730053716C496E7436340041646472657373546F4E756D626572004E756D626572546F4164647265737300555249456E636F646500555249456E636F646544617461005552494465636F64650053797374656D2E436F6C6C656374696F6E732E47656E65726963004C69737460310047657448544D4C456E74697469657300456E636F646548544D4C0053716C43686172730048544D4C456E636F64650048544D4C4465636F6465004765744C656674506172740053716C496E74333200494E4554555249496E666F46696C6C526F770053797374656D2E436F6C6C656374696F6E730049456E756D657261626C6500555249476574496E666F002E63746F7200456E7469747952617700456E7469747948544D4C00456E7469747948544D4C5265674578004162736F6C75746550617468004162736F6C75746555726900417574686F7269747900446E7353616665486F737400467261676D656E740048617368436F646500486F737400486F73744E616D65547970650049734162736F6C75746555726900497344656661756C74506F727400497346696C650049734C6F6F706261636B004973556E6300497357656C6C466F726D65644F726967696E616C537472696E67004C6F63616C506174680050617468416E64517565727900506F727400517565727900536368656D650055736572457363617065640055736572496E666F004950416464726573730049504E756D626572004465636F646564555249004465636F6465645552494461746100456E636F646564555249004465636F64656448544D4C005768697465537061636548616E646C696E6700436F6E74696E756F7573456E636F64696E6700456E636F64656448544D4C00555249005061727469616C54797065004D6963726F736F66742E53716C5365727665722E5365727665720053716C4661636574417474726962757465006F626A0053797374656D2E52756E74696D652E496E7465726F705365727669636573004F75744174747269627574650053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E536563757269747900416C6C6F775061727469616C6C795472757374656443616C6C6572734174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E4E6574776F726B0053716C46756E6374696F6E417474726962757465006765745F49734E756C6C006F705F496D706C69636974006765745F56616C756500537472696E67005472696D006765745F4C656E677468005265706C61636500436F6E7665727400546F496E74363400436861720053706C697400456D707479006F705F457175616C697479006765745F497346616C7365004E756C6C00496E74363400546F537472696E6700436F6E6361740055726900457363617065557269537472696E670045736361706544617461537472696E6700556E65736361706544617461537472696E670041646400456E756D657261746F7200476574456E756D657261746F72006765745F43757272656E740053797374656D2E546578742E526567756C617245787072657373696F6E730052656765780052656765784F7074696F6E73004D6F76654E6578740049446973706F7361626C6500446973706F7365006F705F496E657175616C69747900546F4C6F776572\
-00457175616C73006765745F4E756C6C00546F43686172417272617900417267756D656E74457863657074696F6E005572695061727469616C003C555249476574496E666F3E645F5F300049456E756D657261626C6560310049456E756D657261746F7260310049456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E4F626A6563743E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E49456E756D657261626C652E476574456E756D657261746F72003C3E325F5F63757272656E740053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E6765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E52657365740052657365740053797374656D2E49446973706F7361626C652E446973706F7365003C3E315F5F7374617465003C3E6C5F5F696E697469616C54687265616449640053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E6765745F43757272656E74003C3E335F5F555249003C5F5F5552493E355F5F31003C5F5F526573756C743E355F5F320053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E43757272656E740053797374656D2E446961676E6F737469637300446562756767657248696464656E4174747269627574650053797374656D2E546872656164696E6700546872656164006765745F43757272656E74546872656164006765745F4D616E616765645468726561644964006765745F4162736F6C75746550617468006765745F4162736F6C757465557269006765745F417574686F72697479006765745F446E7353616665486F7374006765745F467261676D656E740047657448617368436F6465006765745F486F737400557269486F73744E616D6554797065006765745F486F73744E616D6554797065006765745F49734162736F6C757465557269006765745F497344656661756C74506F7274006765745F497346696C65006765745F49734C6F6F706261636B006765745F4973556E63006765745F4C6F63616C50617468006765745F50617468416E645175657279006765745F506F7274006765745F5175657279006765745F536368656D65006765745F5573657245736361706564006765745F55736572496E666F004E6F74537570706F72746564457863657074696F6E005374727563744C61796F7574417474726962757465004C61796F75744B696E6400436F6D70696C657247656E6572617465644174747269627574650000000000032E00000100032600000761006D00700000033C0000056C00740000033E00000567007400000322000009710075006F00740000032700010923003000330039000003A100010B69006500780063006C000003A2000109630065006E0074000003A300010B70006F0075006E0064000003A400010D630075007200720065006E000003A5000107790065006E000003A600010D6200720076006200610072000003A700010973006500630074000003A800010775006D006C000003A900010963006F00700079000003AA0001096F007200640066000003AB00010B6C006100710075006F000003AC0001076E006F0074000003AD0001077300680079000003AE0001077200650067000003AF0001096D006100630072000003B00001076400650067000003B100010D70006C00750073006D006E000003B200010973007500700032000003B300010973007500700033000003B400010B610063007500740065000003B500010B6D006900630072006F000003B600010970006100720061000003B700010D6D006900640064006F0074000003B800010B63006500640069006C000003B900010973007500700031000003BA0001096F00720064006D000003BB00010B72006100710075006F000003BC00010D6600720061006300310034000003BD00010D6600720061006300310032000003BE00010D6600720061006300330034000003BF00010D6900710075006500730074000003D700010B740069006D00650073000003F700010D6400690076006900640065000003C000010D4100670072006100760065000003C100010D4100610063007500740065000003C200010B410063006900720063000003C300010D4100740069006C00640065000003C4000109410075006D006C000003C500010B4100720069006E0067000003C600010B410045006C00690067000003C700010D430063006500640069006C000003C800010D4500670072006100760065000003C900010D4500610063007500740065000003CA00010B450063006900720063000003CB000109450075006D006C000003CC00010D4900670072006100760065000003CD00010D4900610063007500740065000003CE00010B490063006900720063000003CF000109490075006D006C000003D00001074500540048000003D100010D4E00740069006C00640065000003D200010D4F00670072006100760065000003D300010D4F00610063007500740065000003D400010B4F0063006900720063000003D500010D4F00740069006C00640065000003D60001094F0075006D006C000003D800010D4F0073006C006100730068000003D900010D5500670072006100760065000003DA00010D5500610063007500740065000003DB00010B550063006900720063000003DC000109550075006D006C000003DD00010D5900610063007500740065000003DE00010B540048004F0052004E000003DF00010B73007A006C00690067000003E000010D6100670072006100760065000003E100010D6100610063007500740065000003E200010B610063006900720063000003E300010D6100740069006C00640065000003E4000109610075006D006C000003E500010B6100720069006E0067000003E600010B610065006C00690067000003E700010D630063006500640069006C000003E800010D6500670072006100760065000003E900010D6500610063007500740065000003EA00010B650063006900720063000003EB000109650075006D006C000003EC00010D6900670072006100760065000003ED00010D6900610063007500740065000003EE00010B690063006900720063000003EF000109690075006D006C000003F00001076500740068000003F100010D6E00740069006C00640065000003F200010D6F00670072006100760065000003F300010D6F00610063007500740065000003F400010B6F0063006900720063000003F500010D6F00740069006C00640065000003F60001096F0075006D006C000003F800010D6F0073006C006100730068000003F900010D7500670072006100760065000003FA00010D7500610063007500740065000003FB00010B750063006900720063000003FC000109750075006D006C000003FD00010D7900610063007500740065000003FE00010B740068006F0072006E000003FF000109790075006D006C0000397B00530051004C00230041006D00700065007200730061006E0064005200650070006C006100630065006D0065006E0074007D00240031000011260028006E006200730070003B002900003726002800280023005B005C0064005D002B003B0029007C002800230078005B0030002D00390061002D0066005D002B003B0029002900010962006F0074006800000D73007000610063006500730000032000000D26006E006200730070003B00000F720065007400750072006E00730000050D000A00000D3C006200720020002F003E0000030D0000030A0000357B00530051004C00230041006D00700065007200730061006E0064005200650070006C006100630065006D0065006E0074007D0000375000610072007400690061006C0054007900700065002000630061006E006E006F00740020006200650020004E0055004C004C002100001361007500740068006F00720069007400790000097000610074006800000B71007500650072007900000D73006300680065006D006500003F49006E00760061006C00690064002000760061006C0075006500200066006F00720020005000610072007400690061006C0054007900700065003A00200000792E000A005000610072007400690061006C00540079007000650020006D0075007300740020006200650020006F006E00650020006F0066003A00200041007500740068006F0072006900740079002C00200050006100740068002C002000510075006500720079002C00200053006300680065006D006500000B42006100730069006300000744004E0053000009490050007600340000094900500076003600000F55006E006B006E006F0077006E0000033B0000052600280000053B002900000000009186F88A30D69947A2D4C1FF2621CA370008B77A5C561934E089060001110D111106000111151111060001111111150600011111111108000015121901120C0600030E0E0E020A0003121D121D1111110D060001121D121D080002111111111111430016011C10111110111110111110111110111110112110111110111110110D10110D10110D10110D10110D10110D10111110111110112110111110111110110D101111060001122511110320000102060E052002010E0E02060802060212010001005408074D617853697A6532000000042001010E0420010102042001010880A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC64101000300540E044E616D6515494E45545F497356616C696449504164647265737354020F497344657465726D696E6973746963015402094973507265636973650103200002050001110D020320000E032000080520020E0E0E0400010A0E0620011D0E1D030A07051D0E0A08110D1D034001000300540E044E616D6514494E45545F41646472657373546F4E756D62657254020F497344657465726D696E69737469630154020949735072656369736501050002020E0E0306111505000111150A0C07061D0E0A0A1115110D1D034001000300540E044E616D6514494E45545F4E756D626572546F4164647265737354020F497344657465726D696E69737469630154020949735072656369736501030611110320000A0500020E0E0E0600030E0E0E0E05000111110E0707040E0A0A11113A01000300540E044E616D650E494E45545F555249456E636F646554020F497344657465726D696E697374696301540209497350726563697365010400010E0E3E01000300540E044E616D6512494E45545F555249456E636F64654461746154020F497344657465726D696E697374696301540209497350726563697365013A01000300540E044E616D650E494E45545F5552494465636F646554020F497344657465726D696E697374696301540209497350726563697365010520020E03030615121901120C0520010113000A070215121901120C120C09200015118081011300071511808101120C04200013000900040E0E0E0E118089042001020E150705120C120C0E1511808101120C1511808101120C3B01000300540E044E616D650F494E45545F48544D4C456E636F646554020F497344657465726D696E69737469630154020949735072656369736501040000121D0420001D03052001011D033B01000300540E044E616D650F494E45545F48544D4C4465636F646554020F497344657465726D696E697374696301540209497350726563697365010C07030E120C1511808101120C3F01000300540E044E616D6513494E45545F5552494765744C6566745061727454020F497344657465726D696E697374696301540209497350726563697365010620010E1180950607021180950E0500011121080407011110823D01000500540E044E616D650F494E45545F555249476574496E666F540E1146696C6C526F774D6574686F644E616D6512494E4554555249496E666F46696C6C526F77540E0F5461626C65446566696E6974696F6E81C74162736F6C75746550617468204E564152434841522834303030292C204162736F6C757465557269204E564152434841522834303030292C20417574686F72697479204E564152434841522834303030292C20446E7353616665486F7374204E564152434841522834303030292C20467261676D656E74204E564152434841522834303030292C2048617368436F646520494E542C20486F7374204E564152434841522834303030292C20486F73744E616D6554797065204E56415243484152283530292C2049734162736F6C757465557269204249542C20497344656661756C74506F7274204249542C20497346696C65204249542C2049734C6F6F706261636B204249542C204973556E63204249542C20497357656C6C466F726D65644F726967696E616C537472696E67204249542C204C6F63616C50617468204E564152434841522834303030292C2050617468416E645175657279204E564152434841522834303030292C20506F727420494E542C205175657279204E564152434841522834303030292C20536368656D65204E56415243484152283530292C205573657245736361706564204249542C2055736572496E666F204E5641524348415228343030302954020F497344657465726D696E697374696301540209497350726563697365010615128099011C061512809D011C0820001512809D011C0920001512809D0113000520001280A102061C0320001C0306127D030611100328001C04010000000500001280A904070112140520001180AD060702081180AD062001011180B91101000C53514C232E4E6574776F726B0000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300004201003D436F7079726967687420C2A920323030362D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00000B010006332E332E383300000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000445A000000000000000000005E5A0000002000000000000000000000000000000000000000000000505A0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000018000080000000000000000000000000000001000100000030000080000000000000000000000000000001000000000048000000586000009C03000000000000000000009C0334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004FC020000010053007400720069006E006700460069006C00650049006E0066006F000000D802000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C006500610070000000000044000D000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E004E006500740077006F0072006B0000000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033000000000044001100010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E004E006500740077006F0072006B002E0064006C006C0000000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E00000000004C00110001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E004E006500740077006F0072006B002E0064006C006C00000000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E00300000000000000000000000000000000000005000000C000000703A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL#.Network Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.Network Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#DB = 1)
- BEGIN
- PRINT 'Creating SQL#.DB Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.DB]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C010300802168540000000000000000E00002210B010B00002A00000006000000000000AE49000000200000006000000000001000200000000200000400000000000000040000000000000000A0000000020000BF6F00000300408500001000001000000000100000100000000000001000000000000000000000005C4900004F00000000600000D003000000000000000000000000000000000000008000000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000B429000000200000002A000000020000000000000000000000000000200000602E72737263000000D00300000060000000040000002C0000000000000000000000000000400000402E72656C6F6300000C000000008000000002000000300000000000000000000000000000400000420000000000000000000000000000000090490000000000004800000002000500802C0000DC1C0000090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000039FBF9A6759CFE17769B4BF17449B390377C3638081B65AD88181D698459FCC76CEF4BB9AC0D03F122EE05D69FEA5884E4C9AA9F59B70B545A4D211C7E8FE15B42CEF33ADAC320A012C7572D2E663942532445309B23F7F7A2E290664DE64CEC70AFFC4D22CCF456C3BA4A233E69EFCB59CBBC33A37FF35F77EB73F097B04128133004006F01000001000011026F0F00000A7E1000000A281100000A2C02162A160A02178D1A00000113091109161F7C9D11096F1200000A0B160C160D16130416130516130616130707130A16130B381A010000110A110B9A130811086F0F00000A6F1300000A25130C39DD000000FE137E050000042D551C731500000A25720100007016281600000A25722300007017281600000A25723D00007018281600000A25725700007019281600000A25726B0000701A281600000A25727F0000701B281600000AFE138005000004FE137E05000004110C120D281700000A2C6D110D4506000000020000000D000000190000002600000033000000400000002B4C082D650618600A170C2B5D092D5A061F10600A170D2B5111042D4D0617600A1713042B4411052D40061E600A1713052B3711062D33061A600A1713062B2A11072D26061F20600A1713072B1C72AD00007011086F0F00000A72D7000070281800000A731900000A7A110B1758130B110B110A8E693FDBFEFFFF062A00133005008200000002000011281A00000A1E8D190000010A0616281B00000A0B1201281C00000AA2061772F3000070A20618281B00000A0C1202281D00000AA2061972F7000070A2061A036F1E00000A0D1203281F00000AA2061B72FF000070A2061C036F1E00000A176A330772090100702B05720B010070A2061D720F010070A206282000000A6F2100000A2A1E02282300000A2A000013300500A30000000200001102046F1E00000A7D07000004027B07000004027B060000046A5D166A4081000000281A00000A1E8D190000010A0616281B00000A0B1201281C00000AA2061772F3000070A20618281B00000A0C1202281D00000AA2061972F7000070A2061A046F1E00000A0D1203281F00000AA2061B72FF000070A2061C046F1E00000A176A330772090100702B05720B010070A2061D720F010070A206282000000A6F2100000A2A3602046F1E00000A7D070000042A0000001B300500FF0500000300001114131A14131B7311000006131C0F02282400000A2D180F02282500000A6F0F00000A7E1000000A281100000A2C0B721F010070731900000A7A0F02282500000A6F0F00000A13040F04282400000A2D180F04282500000A6F0F00000A7E1000000A281100000A2C0B727B010070731900000A7A0F04282500000A6F0F00000A13060F05282600000A2C04160B2B1F0F05282700000A16320A0F05282700000A0B2B0B72D3010070731900000A7A0F06282600000A2C0A111C167D060000042B250F06282700000A163210111C0F06282700000A7D060000042B0B7237020070731900000A7A0F07282600000A2C0B72A7020070731900000A7A0F07282700000A16310A0F07282700000A0C2B0B72D7020070731900000A7A0F00282400000A2C09720103007013072B3A0F00282500000A6F0F00000A6F1300000A130711077201030070282800000A2C191107720D030070282800000A2C0B721B030070731900000A7A0F01282400000A2D180F01282500000A6F0F00000A7E1000000A281100000A2C0872A20300700D2B0D0F01282500000A6F0F00000A0D0F03282400000A2D180F03282500000A6F0F00000A7E1000000A281100000A2C0972D603007013052B0E0F03282500000A6F0F00000A13050F09282400000A2C04160A2B0D0F09282500000A28010000060A14130814130914130A111C166A7D0700000411077201030070281100000A39E301000009732900000A251309131D11096F2A00000A11041109732B00000A130B110B6F2C00000A130C110506732D00000A251308131E1108076F2E00000A1108086F2F00000A110811066F3000000A0E0A283100000A2D380E0A283200000A156A332D111C7B0600000416316F1108111C7B060000046F3300000A110814FE0602000006733400000A6F3500000A2B4C1108176F3300000A111C7B0600000416311E1108111A2D0F111CFE0612000006733400000A131A111A6F3500000A2B1C1108111B2D0F111CFE0613000006733400000A131B111B6F3500000A0F08282400000A3ACF0000000F08282500000A6F0F00000A7E1000000A282800000A39B40000000F08282500000A178D1A000001131F111F161F7C9D111F6F1200000A130D16130F3883000000733600000A130E110D110F9A178D1A00000113201120161F2C9D11206F1200000A13101110169A1211283700000A2C0D110E111117586F3800000A2B0B110E1110169A6F3900000A1110179A1211283700000A2C0D110E111117586F3A00000A2B0B110E1110179A6F3B00000A11086F3C00000A110E6F3D00000A26110F175868130F110F110D8E693F72FFFFFF1108110C6F3E00000ADE0C111E2C07111E6F3F00000ADC110C6F4000000ADD94010000111D2C07111D6F3F00000ADC09734100000A25130A1321110A6F4200000A172E07110A6F2A00000A1104110A734300000A131211126F4400000A1313110506732D00000A25130813221108076F2E00000A1108086F2F00000A110811066F3000000A111C7B060000041631211108111C7B060000046F3300000A110814FE0602000006733400000A6F3500000A0F08282400000A3ACF0000000F08282500000A6F0F00000A7E1000000A282800000A39B40000000F08282500000A178D1A00000113231123161F7C9D11236F1200000A13141613163883000000733600000A1315111411169A178D1A00000113241124161F2C9D11246F1200000A13171117169A1218283700000A2C0D1115111817586F3800000A2B0B11151117169A6F3900000A1117179A1218283700000A2C0D1115111817586F3A00000A2B0B11151117179A6F3B00000A11086F3C00000A11156F3D00000A2611161758681316111611148E693F72FFFFFF110811136F3E00000ADE0C11222C0711226F3F00000ADC11136F4000000ADE0C11212C0711216F3F00000ADCDE3D1319281A00000A726504007011196F4500000A727D04007072810400706F4600000A7287040070281800000A734700000A6F4800000ADE0326DE00DE00DE4311086F4900000A11092C1011096F4200000A2C0711096F4A00000A110A2C10110A6F4200000A2C07110A6F4A00000A0E0A111C7B07000004284B00000A8106000001DC2A0041AC000002000000420200008C010000CE0300000C00000000000000020000001A020000CC010000E60300000C00000000000000020000002F0400002A010000590500000C0000000000000002000000FD030000710100006E0500000C00000000000000000000007E05000036000000B4050000030000000100000100000000FE0100007E0300007C0500003D0000001D00000102000000FE010000BD030000BB0500004300000000000000DE0F00284D00000A2D090F01284D00000A2C0716284E00000A2A0F00284F00000A0F01284F00000A330716284E00000A2A17284E00000A2A1330050052000000040000110F01282700000A185B6A0A0F02282700000A185B6A0B166A0C0F02282700000A15330B026F5000000A06590C2B040706590C08176A580C08D48D1A0000010D0206091608696F5100000A2609735200000A2A1E02282300000A2A1E02282300000A2A1E02282300000A2A1E02282300000A2A1E027B030000042A1E027B040000042A32027B020000046F5300000A2A0003300400450000000000000002282300000A0F01282400000A2D180F01282500000A6F0F00000A7E1000000A281100000A2C0E027E1000000A0405280E0000062A020F01282500000A0405280E0000062A00000003300200C000000000000000037E1000000A281100000A2C4702735400000A7D02000004042D03052C21027B02000004176F5500000A027B02000004166F5600000A02177D030000042B66027B02000004176F5700000A02177D040000042B510203735800000A7D02000004027B020000046F5900000A2C24042C1A027B02000004176F5500000A027B02000004166F5600000A2B0702177D04000004027B020000046F5A00000A2C0702177D03000004027B030000042C12285B00000A2D0B729B040070731900000A7A2A66027B030000042C1002285B00000A6F5C00000A7D010000042A52027B010000042C0B027B010000046F5D00000A2A0042534A4201000100000000000C00000076322E302E35303732370000000005006C00000018070000237E000084070000C40A000023537472696E677300000000481200008405000023555300CC170000100000002347554944000000DC1700000005000023426C6F6200000000000000020000015715A2090902000000FA25330016000001000000340000000800000007000000130000001E0000005D00000012000000040000000100000003000000030000000100000001000000030000000100000000000A00010000000000060065005E000A008E0078000A00B40078000A00F500E0000A00FF00E0000A000801E0000A001A01E0000A002901E000060066014C010A009A0178000A008E03730306001804060406002F04060406004C04060406006B04060406008404060406009D0406040600B80406040600D304060406000B05EC0406001F0506040600380506040600750555050600950555050600BB055E000600D9055E00060031065505060067064C0606009F065E000A00A90673030A00B40673030600C5065E00060008075E000A001C0773030A00A50778000A00C607B3070A00D80778000A00E30778000A00FF0778000A00560878000A008208780006009B085E000A00FA0878000A0030096C0006004A095E000A005E09B3070E008A0971090A009B096C000E00B50971090E00C30971090A00030A730306008D0A4C01000000000100000000000100010001001000160000000500010001000100100019000000050001000700010010002300000005000100080001001000330000000500010009000100100044000000050001000A0000000000EC0500000500050011000301100032070000050006001100010082014A000100B5014E000100C80152000100DD015200130074064D0106004507C20106005707C501D020000000009100A1000A0001004C22000000009100CB0010000200A4230000000096001101170004005C2A000000009600250132000F00942A00000000960032013B001100F22A000000008618460146001500FA2A000000008618460146001500022B0000000086184601460015000A2B000000008618460146001500122B000000008608F601550015001A2B0000000086080D0255001500222B000000008608280259001500302B00000000861846015D001500842B0000000081003D0265001800502C000000008600430246001B006A2C000000008600590246001B00DA22000000008618460146001B00E4220000000086006407C8011B0093230000000086007307C8011D0000000100A60200000100B20200000200B90200000100BE0200000200C90200000300DA0200000400E60200000500FC02000006001103000007001B03000008002B0300000900330300000A00420300000B005603000001006103000002006A0300000000000000000100A00300000200A80300000300BD0300000100950200000200D00300000300EA0300000100950200000200D00300000300EA0300000100B20200000200B90200000100B20200000200B902590046014600610046018700690046018700710046018700790046018700810046018700890046018700910046018700990046018700A10046018C00A90046018700B10046018700B90046019100C10046014600C900C2055900C900C7053801C900CD053B01C900DE054101C900E4055900D900460146000C00460191000C0088065C010C008C066401C90098066D01E90046018700F100BC0689010101CE068E010101D60659000101E80659001900F906940109010E075900C90098069801F9001707870011014601460009004601460021008207550021008D07590029008207550029008D07CF01C90097073B011901460187002101D307460029014601D3012901F107DB0139014601E10139010B08910039011908910039012D08870031008207550031008D07940139014608910041014601E80139017008EE014901460146005101A108F5014901AA0891004901BC0887004901CD0891004901E408870039011D09FC0159018806020239013C090B0269015609460071016B0946007901460187002101AB0912028901460118028901F1072002E900D4095900C900E0092602290146018700F900E8092C0239016B09460021016B0946003100F70933029901460146003900820755003900F709490339008D0755004100180A94014100230A1E0441004601270409000E0759005100460146005100280A8C0051003F0A8C0051004A0A8C005100460187005100600A55005100760A5500F1009D0A3504A101B10A3B044900BD0A46002E001B004D042E00230063042E006B00D8042E002B0069042E006300CC042E00130040042E007300E1042E0033007F042E003B0089042E00430063042E005300630460001301AA01800063028A02A00063024F03E300A30048010301A300480124020B00740044020B00740074019E0139022D040600010000006B026C0000007E026C0000009502700002000A00030002000B00050002000C0007005501048000000300030053000000010000009600B3050000020000000000000000000000010055000000000002000000000000000000000001006C000000000002000000000000000000000001007109000000000800020000000000003C4D6F64756C653E0053514C232E44422E646C6C004442005175657279496E666F0046756E6374696F6E48656C7065727300526573756C7453657448656C7065727300436F6E6E656374696F6E48656C706572006D73636F726C69620053797374656D004F626A6563740053797374656D2E446174610053797374656D2E446174612E53716C436C69656E740053716C42756C6B436F70794F7074696F6E730047657442756C6B436F70794F7074696F6E730053716C526F7773436F706965644576656E74417267730053716C526F7773436F706965645F4F75747075740053797374656D2E446174612E53716C54797065730053716C537472696E670053716C496E7433320053716C496E7436340042756C6B436F70790053716C426F6F6C65616E00584F520053716C43686172730043757272656E7453514C53746174656D656E74002E63746F720053797374656D2E53656375726974792E5072696E636970616C0057696E646F7773496D706572736F6E6174696F6E436F6E74657874005F5F496D706572736F6E6174696F6E4964656E746974790053716C436F6E6E656374696F6E537472696E674275696C646572005F5F436F6E6E656374696F6E537472696E67005F5F5573696E67496D706572736F6E6174696F6E005F5F5573696E67436F6E74657874436F6E6E656374696F6E006765745F5573696E67496D706572736F6E6174696F6E006765745F5573696E67436F6E74657874436F6E6E656374696F6E006765745F436F6E6E656374696F6E537472696E6700536574757000496D706572736F6E617465496645787465726E616C00556E646F496D706572736F6E6174696F6E005573696E67496D706572736F6E6174696F6E005573696E67436F6E74657874436F6E6E656374696F6E00436F6E6E656374696F6E537472696E67004F7074696F6E734C6973740073656E646572006172677300536F757263655479706500536F75726365436F6E6E656374696F6E00536F7572636551756572790044657374696E6174696F6E436F6E6E656374696F6E0044657374696E6174696F6E5461626C654E616D6500426174636853697A65004E6F746966794166746572526F77730054696D654F757400436F6C756D6E4D617070696E67730042756C6B436F70794F7074696F6E734C69737400526F7773436F706965640056616C75654F6E650056616C756554776F004D6963726F736F66742E53716C5365727665722E5365727665720053716C46616365744174747269627574650053514C546578740053746174656D656E7453746172744F66667365740053746174656D656E74456E644F666673657400446973616C6C6F77436F6E74657874436F6E6E656374696F6E0044656661756C74546F45787465726E616C436F6E6E656374696F6E0053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C747572654174747269627574650053797374656D2E52756E74696D652E496E7465726F70536572766963657300436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E444200537472696E67005472696D00456D707479006F705F457175616C69747900436861720053706C697400546F4C6F776572003C50726976617465496D706C656D656E746174696F6E44657461696C733E7B41344136423239462D463933382D344435352D393443342D3543453244354239343237377D00436F6D70696C657247656E6572617465644174747269627574650053797374656D2E436F6C6C656374696F6E732E47656E657269630044696374696F6E61727960320024246D6574686F643078363030303030312D31004164640054727947657456616C756500436F6E63617400457863657074696F6E0053716C436F6E746578740053716C50697065006765745F50697065004461746554696D65006765745F4E6F7700546F53686F727444617465537472696E6700546F4C6F6E6754696D65537472696E67006765745F526F7773436F7069656400496E74363400546F537472696E670053656E640053716C50726F636564757265417474726962757465003C3E635F5F446973706C6179436C61737334005F5F4E6F746966794166746572526F7773005F5F526F7773436F70696564003C42756C6B436F70793E625F5F30003C42756C6B436F70793E625F5F31006765745F49734E756C6C006765745F56616C7565006F705F496E657175616C6974790053716C436F6E6E656374696F6E0053797374656D2E446174612E436F6D6D6F6E004462436F6E6E656374696F6E004F70656E0053716C436F6D6D616E640053716C4461746152656164657200457865637574655265616465720053716C42756C6B436F7079007365745F426174636853697A65007365745F42756C6B436F707954696D656F7574007365745F44657374696E6174696F6E5461626C654E616D65007365745F4E6F7469667941667465720053716C526F7773436F706965644576656E7448616E646C6572006164645F53716C526F7773436F706965640053716C42756C6B436F7079436F6C756D6E4D617070696E6700496E743332005472795061727365007365745F536F757263654F7264696E616C007365745F536F75726365436F6C756D6E007365745F44657374696E6174696F6E4F7264696E616C007365745F44657374696E6174696F6E436F6C756D6E0053716C42756C6B436F7079436F6C756D6E4D617070696E67436F6C6C656374696F6E006765745F436F6C756D6E4D617070696E6773004944617461526561646572005772697465546F5365727665720049446973706F7361626C6500446973706F73650044624461746152656164657200436C6F73650053797374656D2E446174612E4F7261636C65436C69656E74004F7261636C65436F6E6E656374696F6E00436F6E6E656374696F6E5374617465006765745F5374617465004F7261636C65436F6D6D616E64004F7261636C6544617461526561646572006765745F4D657373616765005265706C6163650045786563757465416E6453656E64006F705F496D706C696369740053716C46756E6374696F6E417474726962757465006765745F4C656E6774680052656164007365745F496E74656772617465645365637572697479007365745F456E6C697374007365745F436F6E74657874436F6E6E656374696F6E006765745F436F6E74657874436F6E6E656374696F6E006765745F496E746567726174656453656375726974790057696E646F77734964656E74697479006765745F57696E646F77734964656E7469747900496D706572736F6E61746500556E646F000000002163006800650063006B0063006F006E00730074007200610069006E0074007300001966006900720065007400720069006700670065007200730000196B006500650070006900640065006E00740069007400790000136B006500650070006E0075006C006C00730000137400610062006C0065006C006F0063006B00002D75007300650069006E007400650072006E0061006C007400720061006E00730061006300740069006F006E000029420075006C006B0043006F007000790020006F007000740069006F006E0020006F00660020002700011B2700200069007300200069006E00760061006C0069006400210001032000000720002D0020000109200072006F007700000100037300000F200063006F007000690065006400005B53006F007500720063006500510075006500720079002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E00670020002700270001575400610062006C0065004E0061006D0065002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E006700200027002700016342006100740063006800530069007A00650020006D0075007300740020006200650020003E003D0020003000200028006F00720020004E0055004C004C002000770069006C006C002000650071007500610074006500200074006F00200030002900006F4E006F0074006900660079004100660074006500720052006F007700730020006D0075007300740020006200650020003E003D0020003000200028006F00720020004E0055004C004C002000770069006C006C002000650071007500610074006500200074006F00200030002900002F540069006D0065004F00750074002000630061006E006E006F00740020006200650020004E0055004C004C0021000029540069006D0065004F007500740020006D0075007300740020006200650020003E00200030002100000B6D007300730071006C00000D6F007200610063006C00650000808553006F00750072006300650054007900700065002000630061006E0020006F006E006C00790020006200650020004E0055004C004C002C00200027004D005300530051004C0027002C0020006F007200200027004F007200610063006C0065002700200028004E0055004C004C0020003D00200027004D005300530051004C0027002900013363006F006E007400650078007400200063006F006E006E0065006300740069006F006E0020003D002000740072007500650000808D4400610074006100200053006F0075007200630065003D0028006C006F00630061006C0029003B00200049006E00740065006700720061007400650064002000530065006300750072006900740079003D0074007200750065003B00200049006E0069007400690061006C00200043006100740061006C006F0067003D00740065006D007000640062003B00001752004100490053004500520052004F0052002800270001032700010527002700011327002C002000310036002C002000310029000180E70A000A0020002000430061006E006E006F0074002000750073006500200054007200750073007400650064005F0043006F006E006E0065006300740069006F006E0020002F00200049006E007400650067007200610074006500640020005300650063007500720069007400790020007700680065006E002000630075007200720065006E0074002000750073006500720020006900730020006E006F00740020006100730073006F0063006900610074006500640020007700690074006800200061002000570069006E0064006F007700730020004C006F00670069006E002E000A000A00009FB2A6A438F9554D94C45CE2D5B942770008B77A5C561934E08905000111090E060002011C120D1A000B011111111111111111111111151115111511111111101119080002111D111D111D0A00031221122111151115032000010306122503061229020602032000020320000E0720030111110202062003010E0202032800020328000E12010001005408074D617853697A65FFFFFFFF042001010E0420010102042001010880A00024000004800000940000000602000000240000525341310004000001\
-00010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC602060E050002020E0E0620011D0E1D0304010000000706151271020E0806151271020E0807200201130013010820020213001013010600030E0E0E0E14070E11091D0E0202020202020E1D031D0E080E08040000127D0500001180810320000A0500010E1D0E0B07041D0E1180811180810A1701000100540E044E616D650B44425F42756C6B436F707902060802060A062002011C120D03200008072002010E12808D052000128099062002010E1109052002011C18062001011280A1060002020E10080520001280AD0820011280A51280A5062001011280B10520001180C1072002010E1280BD0520001280C90520020E0E0E0620010112809505000111190A500725110908080E0E0E0E0E12809D12808D1280BD1280951280991D0E1280A5061D0E081280C51280C91D0E1280A5061D0E0812751280A11280A1122012808D12809D1D031D031280BD12809D1D031D0380BD01000400540E044E616D650644425F584F525455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630154020949735072656369736501050001111D0280CD01000400540E044E616D651644425F43757272656E7453514C53746174656D656E745455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E697374696301540209497350726563697365010820040A0A1D030808052001011D030707040A0A0A1D030500001280D104200012250C01000753514C232E44420000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300004201003D436F7079726967687420C2A920323030362D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00000B010006332E332E383300000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773018449000000000000000000009E49000000200000000000000000000000000000000000000000000090490000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000780300000000000000000000780334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004D8020000010053007400720069006E006700460069006C00650049006E0066006F000000B402000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C0065006100700000000000380008000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E00440042000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033000000000038000C00010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E00440042002E0064006C006C000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E000000000040000C0001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E00440042002E0064006C006C0000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000C000000B03900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL#.DB Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.DB Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#OS = 1)
- BEGIN
- PRINT 'Creating SQL#.OS Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.OS]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007D2168540000000000000000E00002210B010B00002A00000006000000000000BE48000000200000006000000000001000200000000200000400000000000000040000000000000000A0000000020000BB890000030040850000100000100000000010000010000000000000100000000000000000000000684800005300000000600000D003000000000000000000000000000000000000008000000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000C428000000200000002A000000020000000000000000000000000000200000602E72737263000000D00300000060000000040000002C0000000000000000000000000000400000402E72656C6F6300000C0000000080000000020000003000000000000000000000000000004000004200000000000000000000000000000000A0480000000000004800000002000500602C0000081C0000090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000002D79EC9D122596F82B900F2B976A42FFBEB88C19112D9819DBECD6C00D6F9FAC2126BF688AC475B693390A419F11045E54698A694C84627EB80B329F738A687C22D8BE2F60355FBA92F00117E8F98329ECAB05167E62BA78001694BEB690E13F696463B020A9C1713E54532E5F04FA78BAE57112167B57FC23D4CD337848D5FEE0F00281100000A2D090F01281100000A2C0B7201000070731200000A7A0F00281300000A0F01281300000A281400000A7257000070281500000A2A2E281600000A281500000A2A2E281700000A281800000A2A13300200BF0000000100001102A5030000020A0312007B01000004281800000A81040000010412007B02000004281500000A81030000010512007B03000004281500000A81030000010E0412007B04000004281900000A81050000010E0512007B05000004281500000A81030000010E0612007B06000004281A00000A81060000010E0712007B07000004281A00000A81060000010E0812007B08000004281500000A81030000010E0912007B09000004281500000A81030000010E0A12007B0A000004731B00000A512A0013300200CC00000002000011282400000A6F2500000A027B0D0000043315027B0C0000041FFE330B02167D0C000004020A2B0716730F0000060A06027B0F0000047D0E00000406027B110000047D1000000406027B130000047D1200000406027B150000047D1400000406027B170000047D1600000406027B190000047D1800000406027B1B0000047D1A00000406027B1D0000047D1C00000406027B1F0000047D1E00000406027B210000047D2000000406027B230000047D2200000406027B250000047D2400000406027B270000047D26000004062A1E0228080000062A1B300300FC05000003000011027B0C0000040C08162E0C08193BAD05000038D805000002157D0C0000040272570000707D2E0000040272570000707D2F000004027C0E000004282600000A2D1C027C0E000004282700000A6F2800000A7E2900000A282A00000A2C0D0272570000707D280000042B1602027C0E000004282700000A6F2800000A7D28000004027C10000004282600000A2D1C027C10000004282700000A6F2800000A7E2900000A282A00000A2C0D0272570000707D290000042B1602027C10000004282700000A6F2800000A7D29000004027C26000004282600000A2C0902167D2A0000042B1602027C26000004282700000A282B00000A7D2A000004027C18000004282600000A2D1C027C18000004282700000A6F2800000A7E2900000A282A00000A2C0D0272570000707D2B0000042B1102027C18000004282700000A7D2B000004027C14000004282600000A2D1C027C14000004282700000A6F2800000A7E2900000A282A00000A2C0D0272570000707D2D0000042B1102027C14000004282700000A7D2D00000402147D30000004027C31000004FE1503000002027B290000047E2900000A282A00000A2C1302027B28000004732C00000A7D300000042B1702027B28000004027B29000004732D00000A7D30000004DE200A027B300000042C0B027B300000046F2E00000A066F2F00000A731200000A7A02027B300000046F3000000A6F3100000A7D3300000402187D0C00000438AD03000002027B330000046F2200000A74250000017D32000004027B320000046F3200000A2D0D0272570000707D2C0000042B1102027B320000046F3200000A7D2C000004027B320000046F3300000A0D09175945040000000B0000003F0000004C00000025000000091E2E2E091F102E0F2B410272590000707D2E0000042B3F0272650000707D2E0000042B320272810000707D2E0000042B250272990000707D2E0000042B180272B50000707D2E0000042B0B0272570000707D2E000004027B320000046F3400000A2D0D0272570000707D2F0000042B1102027B320000046F3400000A7D2F000004027B2C000004027B2B000004027B2A000004283500000A39AA020000027B2E000004027B2D000004027B2A000004283500000A398E020000027C22000004281100000A2D28027C22000004281300000A2C1B027B320000046F3600000A027C22000004281300000A3F59020000027C24000004281100000A2D28027C24000004281300000A2C1B027B320000046F3600000A027C24000004281300000A3D24020000027C1E000004283700000A2D25027B320000046F3800000A13041204027C1E000004283900000A283A00000A163FF2010000027C20000004283700000A2D25027B320000046F3800000A13051205027C20000004283900000A283A00000A163DC0010000027C16000004282600000A2D2F027B320000046F3B00000A13061206283C00000A027C16000004282700000A027B2A000004283500000A3984010000027C12000004282600000A2D26027B320000046F3D00000A027C12000004282700000A027B2A000004283500000A3951010000027C1A000004282600000A2D21027B2F000004027C1A000004282700000A027B2A000004283500000A3923010000027C1C000004282600000A2D26027B320000046F3E00000A027C1C000004282700000A027B2A000004283500000A39F0000000027C31000004027B2C0000047D02000004027C31000004027B320000046F3F00000A7D0A000004027C31000004027B2E0000047D03000004027C31000004027B320000046F3600000A7D01000004027C31000004027B320000046F3B00000A7D04000004027C31000004027B320000046F3E00000A7D09000004027C31000004027B320000046F3D00000A7D05000004027C31000004027B320000046F3800000A7D06000004027C31000004027B320000046F4000000A7D07000004027C31000004027B2F0000047D0800000402027B310000048C030000027D0B00000402197D0C000004170BDE3B02187D0C000004027B330000046F1E00000A3A43FCFFFF022810000006027B300000042C0B027B300000046F2E00000A160BDE0702280D000006DC072A4134000000000000990100003E000000D7010000200000001C0000010400000000000000F3050000F305000007000000000000001E027B0B0000042A1A734100000A7A001B3002002200000004000011027B0C0000040B071859450200000001000000010000002ADE07022810000006DC2A00000110000002001800021A0007000000001E027B0B0000042A7A02284200000A02037D0C00000402282400000A6F2500000A7D0D0000042AB202157D0C00000402027B3300000475220000017D34000004027B340000042C0B027B340000046F2100000A2A133002006E000000020000111FFE730F0000060A06027D0F00000406037D1100000406047D1300000406057D15000004060E047D17000004060E057D19000004060E067D1B000004060E077D1D000004060E087D1F000004060E097D21000004060E0A7D23000004060E0B7D25000004060E0C7D27000004062A00001B30060004020000050000110F00282600000A2C0B72C5000070731200000A7A0F00282700000A6F2800000A7E2900000A282A00000A2C0B72F5000070731200000A7A0F01282600000A2D180F01282700000A6F2800000A7E2900000A282A00000A2C0872570000700A2B0D0F01282700000A6F2800000A0A0F03282600000A2C0B723B010070731200000A7A0F03282700000A6F2800000A7E2900000A282A00000A2C0B726F010070731200000A7A0F05284300000A2C0B723B010070731200000A7A0F04281100000A2C0B723B010070731200000A7A0F03282700000A6F4400000A6F2800000A2513042C5D110472B9010070282A00000A2D3A110472C5010070282A00000A2D30110472E1010070282A00000A2D27110472F9010070282A00000A2D1D11047215020070282A00000A2D132B15170B2B281F100B2B231A0B2B1F1E0B2B1B180B2B1772250200700F03282700000A284500000A731200000A7A140C067E2900000A282A00000A2C0F0F00282700000A732C00000A0C2B0E0F00282700000A06732D00000A0C080F02282700000A6F2800000A6F4600000A0F07284700000A2C1E080F06282700000A070F04281300000A0F05284800000A6F4900000A2B23080F06282700000A070F04281300000A0F05284800000A0F07284A00000A6F4B00000ADE0D0D096F2F00000A731200000A7ADE0A082C06086F2E00000ADC7257000070281500000A2A011C00000000580188E0010D1C0000010200580197EF010A000000001E02284200000A2A42534A4201000100000000000C00000076322E302E35303732370000000005006C000000E8070000237E000054080000AC0A000023537472696E6773000000000013000050020000235553005015000010000000234755494400000060150000A806000023426C6F6200000000000000020000015717A20B0902000000FA253300160000010000003100000004000000340000001000000023000000050000004D0000001800000005000000010000000200000002000000070000000200000001000000040000000200000000000A00010000000000060033002C0006003A002C000A00650050000A006F0050000A00980050000A00A10050000A00AD0050000600DA00C7000A00F30050000A00FC005000060045012C000600B40195010A0038021D0206006702550206007E02550206009B0255020600BA0255020600D30255020600EC02550206000703550206002203550206003B03950106004F0355020600680355020600A50385030600C50385030A00EB031D0206000B042C0006001F042C00060038042C0006009004750406009E0475040600AC04C7000600B8042C000E00570738070E00EF07DC070E001708DC070600BF08DC070600E808D708060015092C001200380900000E006009DC070E009109DC070E00BE0938070600010A2C000600340A2C0006006F0A95010600850A95010600900A8503000000000100000000000100010001001000160000000500010001000B01100019000000090001000800030110006204000005000B00080006001A017800060020017B00060029017B00060033017E0006003E017B0006004E01810006005C018100060068017B00060071017B0006007901850001004C05CE040100F50578000100000678000600C101DA0406004006DA0406008500DA0406004D06DA0406003E01DA0406005E06DA0406002901DA0406006A06DA040600C901DA0406007906DA0406002001DA0406008906DA0406006801DA0406009706DA0406007101DA040600A506DA040600D401DE040600B206DE040600E701DE040600CA06DE040600F801E2040600E006E20406000302E2040600F006E20406000C02DA040600FE06DA04060014077B00060024077B0006006407E604060079077B0006008A077B0006009F077B000600B1077B000600C7077B000600F807EB0406000908F00406002508F40406003608F90406004108FE04D02000000000960078000A0001000C2100000000960085001300030018210000000096009100180003002421000000009100B6001D000300B029000000009600E60040000E002C2A00000000960006015F001B00582C000000008618140174002300F02100000000E101C404B5042300C82200000000E1011605C8042300D02200000000E1014305890123000C2900000000E1095905D1042300142900000000E101A705740023001C2900000000E101D205740023005C2900000000E1091506D104230064290000000086181401A600230083290000000081004C0874002400000001007E01000002008801000001009101020002001A01020003002001020004002901020005003301020006003E01020007004E01020008005C0102000900680102000A00710102000B00790100000100C101000002008500000003003E0100000400290100000500C90100000600200100000700680100000800710100000900D40100000A00E70100000B00F80100000C00030200000D000C0200000100C101000002008500000003003E0100000400290100000500C901000006002001000007007101000008004A0200000100F505040006000400210004000A000400850004008900610014017400690014017400710014019C00790014019C00810014019C00890014019C00910014019C00990014019C00A10014019C00A90014019C00B1001401A100B90014019C00C10014019C00C9001401A600D10014017400D90014017400210000048901E10014019C00210015048D01E9002704910119002C049701F1004404D801F1005404120221002C04160229002C041C0231002C0422023900140129020C000805BE0441000805C80409014305890114009B05D5040901CC0574001101ED05740009019B05D1043101140174003901EF080C05390101098D0119000004890119001504170541011C091705410121097B00410127091B0549013E092A05210114019C0021011401310521014E097400E1005409170521017809370551010805C8042901840917052901A3093D052901B10917056101C40943052901CC098D013100000489012901D6094C05310015044C055900E80951052901F20957056901070A17052901100A170529015409170529011B0A5B052901240A4C0571011401740009001401740049000004890141014A0A17054101520AB2052101590A9C0051000004890149001504B8052101640ABC05510015045B052101640AC60579011401DF05890114017400200083004D012E007B0087062E002B0009062E0033000F062E0073007E062E001B00E6052E002300F3052E0043002F062E003B0025062E004B0009062E005B0009062E006B007206400083009D0160008300DC0183006B020705A00083003402C0008300750500011B01070520011B01070560011B01070580011B010705C0011B010705E0011B0107052404130089002F02120560056F05D2050400010000005A08030500009808030502000B00030002000E000500040010003900040012003B00040014003D00040016003F0004001800410004001A00430004001C004500A804AE0404800000030003005300000001000000AB00E30300000200000000000000000000000100230000000000020000000000000000000000010044000000000002000000000000000000000001002C0000000000030003005300000000000000210533090000000003000200040002000000003C4D6F64756C653E0053514C232E4F532E646C6C004F53004576656E7444617461006D73636F726C69620053797374656D004F626A6563740056616C7565547970650053797374656D2E446174610053797374656D2E446174612E53716C54797065730053716C537472696E670053716C496E7433320047656E6572617465546F6E65004D616368696E654E616D6500557074696D650053716C496E7436340053716C4461746554696D650053716C4279746573004576656E744461746146696C6C526F770053797374656D2E436F6C6C656374696F6E730049456E756D657261626C65004576656E744C6F67526561640053716C496E7431360053716C42696E617279004576656E744C6F675772697465002E63746F7200496E6465780043617465676F727900456E7472795479706500496E7374616E6365496400536F75726365004461746554696D650054696D6547656E6572617465640054696D655772697474656E00557365724E616D65004D6573736167650044617461004672657175656E6379004475726174696F6E006F626A0053797374656D2E52756E74696D652E496E7465726F705365727669636573004F7574417474726962757465004C6F674E616D6500496E7374616E636549440054696D6547656E657261746564426567696E0054696D6547656E657261746564456E6400496E646578426567696E00496E646578456E640052656745784F7074696F6E734C697374004D6963726F736F66742E53716C5365727665722E5365727665720053716C46616365744174747269627574650042696E617279446174610053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500436F6D56697369626C6541747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E4F530053716C46756E6374696F6E417474726962757465006765745F49734E756C6C00457863657074696F6E006765745F56616C756500436F6E736F6C650042656570006F705F496D706C6963697400456E7669726F6E6D656E74006765745F4D616368696E654E616D65006765745F5469636B436F756E74003C4576656E744C6F67526561643E645F5F300053797374656D2E436F6C6C656374696F6E732E47656E657269630049456E756D657261626C6560310049456E756D657261746F7260310049456E756D657261746F720049446973706F7361626C650053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E4F626A6563743E2E476574456E756D657261746F7200476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E49456E756D657261626C652E476574456E756D657261746F72004D6F76654E657874003C3E325F5F63757272656E740053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E6765745F43757272656E74006765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E52657365740052657365740053797374656D2E49446973706F7361626C652E446973706F736500446973706F7365003C3E315F5F7374617465003C3E6C5F5F696E697469616C54687265616449640053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E6765745F43757272656E74003C3E335F5F4C6F674E616D65003C3E335F5F4D616368696E654E616D65003C3E335F5F536F75726365003C3E335F5F456E74727954797065003C3E335F5F496E7374616E63654944003C3E335F5F43617465676F7279003C3E335F5F557365724E616D65003C3E335F5F4D657373616765003C3E335F5F54696D6547656E657261746564426567696E003C3E335F5F54696D6547656E657261746564456E64003C3E335F5F496E646578426567696E003C3E335F5F496E646578456E64003C3E335F5F52656745784F7074696F6E734C697374003C5F5F4C6F674E616D653E355F5F31003C5F5F4D616368696E654E616D653E355F5F320053797374656D2E546578742E526567756C617245787072657373696F6E730052656765784F7074696F6E73003C5F5F52656745784F7074696F6E733E355F5F33003C5F5F43617465676F72793E355F5F34003C5F5F54656D7043617465676F72793E355F5F35003C5F5F456E747279547970653E355F5F36003C5F5F54656D70456E747279547970653E355F5F37003C5F5F54656D70557365724E616D653E355F5F380053797374656D2E446961676E6F7374696373004576656E744C6F67003C5F5F4576656E744C6F673E355F5F39003C5F5F4576656E743E355F5F61004576656E744C6F67456E747279003C5F5F4C6F67456E7472793E355F5F62003C3E375F5F7772617063003C3E375F5F7772617064003C3E6D5F5F46696E616C6C79650053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E43757272656E7400446562756767657248696464656E4174747269627574650053797374656D2E546872656164696E6700546872656164006765745F43757272656E74546872656164006765745F4D616E61676564546872656164496400537472696E67005472696D00456D707479006F705F457175616C6974790053514C230052454745580047657452656745784F7074696F6E7300436C6F7365006765745F4D657373616765004576656E744C6F67456E747279436F6C6C656374696F6E006765745F456E7472696573006765745F43617465676F7279004576656E744C6F67456E74727954797065006765745F456E74727954797065006765745F557365724E616D650052656765780049734D61746368006765745F496E646578006765745F54696D6547656E65726174656400436F6D70617265546F006765745F496E7374616E6365496400496E74363400546F537472696E67006765745F536F75726365006765745F44617461006765745F54696D655772697474656E004E6F74537570706F72746564457863657074696F6E00546F4C6F77657200436F6E636174007365745F536F75726365005772697465456E747279005374727563744C61796F7574417474726962757465004C61796F75744B696E6400436F6D70696C657247656E657261746564417474726962757465000000554E0065006900740068006500720020004600720065007100750065006E006300790020006E006F00720020004400750072006100740069006F006E002000630061006E0020006200650020004E0055004C004C000001000B4500720072006F007200001B4600610069006C00750072006500200041007500640069007400001749006E0066006F0072006D006100740069006F006E00001B5300750063006300650073007300200041007500640069007400000F5700610072006E0069006E006700002F4C006F0067004E0061006D0065002000630061006E006E006F00740020006200650020004E0055004C004C00210000454C006F0067004E0061006D0065002000630061006E006E006F007400200062006500200061006E00200065006D00700074007900200073007400720069006E0067002100003345006E0074007200790054007900700065002000630061006E006E006F00740020006200650020004E0055004C004C002100004945006E0074007200790054007900700065002000630061006E006E006F007400200062006500200061006E00200065006D00700074007900200073007400720069006E0067002100000B6500720072006F007200001B6600610069006C00750072006500200061007500640069007400001769006E0066006F0072006D006100740069006F006E00001B7300750063006300650073007300200061007500640069007400000F7700610072006E0069006E006700002749006E00760061006C0069006400200045006E0074007200790054007900700065003A00200000000000B5A2E34A7D6BCA48B33F06F9936CF0070008B77A5C561934E089080002110D11111111040000110D040000111122000B011C10111110110D10110D10111510110D10111910111910110D10110D10121D1E000D1221110D110D110D110D110D110D110D110D1119111911111111110D140008110D110D110D110D110D11111125110D11290320000102060802060E02060A0306112D03061D0512010001005408074D617853697A65FFFFFFFF042001010E0420010102042001010880A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC63B01000300540E044E616D650F4F535F47656E6572617465546F6E6554020F497344657465726D696E697374696301540209497350726563697365010320000203200008050002010808050001110D0E3A01000300540E044E616D650E4F535F4D616368696E654E616D6554020F497344657465726D696E697374696301540209497350726563697365010300000E3501000300540E044E616D65094F535F557074696D6554020F497344657465726D696E697374696300540209497350726563697365010300000805000111110805000111150A0600011119112D052001011D05040701110C827201000700540E044E616D650F4F535F4576656E744C6F675265616454020F497344657465726D696E697374696300540209497350726563697365015455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C\
-747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E1146696C6C526F774D6574686F644E616D65104576656E744461746146696C6C526F77540E0F5461626C65446566696E6974696F6E80DC5B496E6465785D20494E542C2043617465676F7279204E5641524348415228353030292C20456E74727954797065204E56415243484152283530292C20496E7374616E6365496420424947494E542C205B536F757263655D204E5641524348415228353030292C2054696D6547656E657261746564204441544554494D452C2054696D655772697474656E204441544554494D452C20557365724E616D65204E5641524348415228313030292C205B4D6573736167655D204E56415243484152284D4158292C205B446174615D2056415242494E415259284D4158290515127D011C0615128081011C08200015128081011C0920001512808101130005200012808502061C0320001C04200013000306110D0306111903061111040611808D04061280910306110C0406128095040612808504061280890328001C040100000005000012809D04070112100320000E050002020E0E08F0A9879D7B87F04806000111808D0E052002010E0E0520001280A90520001180AD080003020E0E11808D042000112D05200108112D0320000A0420001D050E0707127102081180AD112D112D0A0507021271083C01000300540E044E616D65104F535F4576656E744C6F67577269746554020F497344657465726D696E697374696301540209497350726563697365010500020E0E0E03200006092004010E1180AD08060B2005010E1180AD08061D050C07050E1180AD12809112710E062001011180C10C01000753514C232E4F530000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300004201003D436F7079726967687420C2A920323030362D323031342053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00000B010006332E332E383300000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000904800000000000000000000AE480000002000000000000000000000000000000000000000000000A048000000000000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058600000780300000000000000000000780334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B004D8020000010053007400720069006E006700460069006C00650049006E0066006F000000B402000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C0065006100700000000000380008000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E004F0053000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E00380033000000000038000C00010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E004F0053002E0064006C006C000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E000000000040000C0001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E004F0053002E0064006C006C0000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000C000000C03800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL#.OS Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.OS Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#Twitterizer = 1)
- BEGIN
- PRINT 'Creating SQL#.Twitterizer Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.Twitterizer]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007E2168540000000000000000E00002210B010B0000D4010000080000000000009EF3010000200000000002000000001000200000000200000400000000000000040000000000000000400200000200004588020003004085000010000010000000001000001000000000000010000000000000000000000048F3010053000000000002001004000000000000000000000000000000000000002002000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000A4D301000020000000D4010000020000000000000000000000000000200000602E7273726300000010040000000002000006000000D60100000000000000000000000000400000402E72656C6F6300000C000000002002000002000000DC0100000000000000000000000000400000420000000000000000000000000000000080F30100000000004800000002000500BCDE00008C140100090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000015C2B3826ACED9FC93D68B3BF243BA88E6949027BD93D415FE8824B314F61B7B59FC302632D704A3C62C99C4B77DE83B047BB7F9AC36128EB8D558AF0F6286353FA46F49E8250EA158F6816A0F4D1837B44CA138F1B8EAEC65E4104586E99B062F82E99D48FAF40910B00948F2F9108CE56095751F77004C760BFF587D9000721E027B050000042A2202037D050000042A1E027B060000042A2202037D060000042A5602281200000A02032802000006020428040000062A1B300500550100000100001102281400000A2D02032A7E1500000A0A02281600000A6F1700000A0C38FA0000001202281800000A0B070D0945090000005F000000050000001D00000074000000350000004A000000890000009E000000B300000038C10000007201000070060207281900000A281A00000A0A38A9000000721D000070060207281900000A281A00000A0A3891000000723F000070060207281900000A281A00000A0A2B7C725B000070060207281900000A281A00000A0A2B677275000070060207281900000A281A00000A0A2B52728B000070060207281900000A281A00000A0A2B3D72A9000070060207281900000A281A00000A0A2B2872C9000070060207281900000A281A00000A0A2B1372F1000070060207281900000A281A00000A0A1202281B00000A3AFAFEFFFFDE0E1202FE160300001B6F1C00000ADC06281D00000A2C02032A720F010070030616176F1E00000A281A00000A2A000000411C0000020000001C0000000D010000290100000E00000000000000133004004200000002000011030B0717332E04750A0000012D0B721F010070731F00000A7A04A50A0000010A02031200726B010070282000000A282100000A2A0203046F2200000A282100000A2A1E02282300000A2A1E027B180000042A2202037D180000042A1E027B190000042A2202037D190000042A1E027B1A0000042A2202037D1A0000042A1E027B1B0000042A2202037D1B0000042A1E027B1C0000042A2202037D1C0000042A1E027B1D0000042A2202037D1D0000042A1E027B1E0000042A2202037D1E0000042A1E027B1F0000042A2202037D1F0000042A1E027B200000042A2202037D200000042A1E027B210000042A2202037D210000042A1E027B220000042A2202037D220000042A1E027B230000042A2202037D230000042A1E027B240000042A2202037D240000042A1E027B250000042A2202037D250000042A1E027B260000042A2202037D260000042A1E02282400000A2A1E027B270000042A2202037D270000042A1E027B280000042A2202037D280000042A1E027B290000042A2202037D290000042A1E027B2A0000042A2202037D2A0000042A1E027B2B0000042A2202037D2B0000042A1E027B2C0000042A2202037D2C0000042A1E027B2D0000042A2202037D2D0000042A1E027B2E0000042A2202037D2E0000042A1E027B2F0000042A2202037D2F0000042A1E027B300000042A2202037D300000042A1E027B310000042A2202037D310000042A1E027B320000042A2202037D320000042A1E027B330000042A2202037D330000042A1E027B340000042A2202037D340000042A1E027B350000042A2202037D350000042A1E027B360000042A2202037D360000042A1E027B370000042A2202037D370000042A1E027B380000042A2202037D380000042A1E027B390000042A2202037D390000042A1E027B3A0000042A2202037D3A0000042A1E027B3B0000042A2202037D3B0000042A1E027B3C0000042A2202037D3C0000042A1E02282400000A2A1E027B3D0000042A2202037D3D0000042A1E027B3E0000042A2202037D3E0000042A1E027B3F0000042A2202037D3F0000042A4A02282600000A036F2700000A74080000022A3A02282600000A03046F2800000A2A3602282600000A036F2900000A2A3602282600000A036F2A00000A2A3A02282600000A03046F2B00000A2A3602282600000A036F2C00000A2A3602282600000A036F2D00000A2A1E02282E00000A2A1E027B400000042A2202037D400000042A1E027B410000042A2202037D410000042A1E027B420000042A2202037D420000042A1E027B430000042A2202037D430000042A1E027B440000042A2202037D440000042A1E027B450000042A2202037D450000042A1E027B460000042A2202037D460000042A1E027B470000042A2202037D470000042A1E027B480000042A2202037D480000042A1E027B490000042A2202037D490000042A1E027B4A0000042A2202037D4A0000042A1E027B4B0000042A2202037D4B0000042A1E027B4C0000042A2202037D4C0000042A1E027B4D0000042A2202037D4D0000042A1E027B4E0000042A2202037D4E0000042A1E027B4F0000042A2202037D4F0000042A1E027B500000042A2202037D500000042A1E027B510000042A2202037D510000042A1E027B520000042A2202037D520000042A1E027B530000042A2202037D530000042A1E027B540000042A2202037D540000042A1E027B550000042A2202037D550000042A1E027B560000042A2202037D560000042A1E027B570000042A2202037D570000042A1E027B580000042A2202037D580000042A1E027B590000042A2202037D590000042A1E027B5A0000042A2202037D5A0000042A6E022865000006281D00000A2D070228650000062A0228670000062A1E02282400000A2A1E027B5B0000042A2202037D5B0000042A1E027B5C0000042A2202037D5C0000042A1E027B5D0000042A2202037D5D0000042A1E027B5E0000042A2202037D5E0000042A1E027B5F0000042A2202037D5F0000042A4A02282600000A036F2700000A740A0000022A3A02282600000A03046F2800000A2A3602282600000A036F2900000A2A3602282600000A036F2A00000A2A3A02282600000A03046F2B00000A2A3602282600000A036F2C00000A2A3602282600000A036F2D00000A2A1E02282E00000A2A9202282400000A02037D6000000402047D6100000402057D62000004020E047D630000042A0000001B300400C900000003000011731E0100060A73270000060B07027B600000046F0C00000607027B610000046F0E00000607027B620000046F1000000607027B630000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC07726F0100706F1600000607196F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F0014000000001B300400C900000003000011731E0100060A73270000060B07027B600000046F0C00000607027B610000046F0E00000607027B620000046F1000000607027B630000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772A10100706F1600000607196F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F001400000000133003009000000004000011731E0100060A73270000060B07027B600000046F0C00000607027B610000046F0E00000607027B620000046F1000000607027B630000046F120000060772D50100706F1600000607196F0A00000607733000000A6F1A000006076F190000067207020070036F3500000A076F19000006721F020070046F3500000A06076F1F0100060B076F1D000006166F5B0000062A133003008A00000004000011731E0100060A73270000060B07027B600000046F0C00000607027B610000046F0E00000607027B620000046F1000000607027B630000046F1200000607733000000A6F1A000006076F1900000672290200700F01283700000A6F3500000A07722F0200706F1600000607196F0A000006060772690200706F200100060B076F1D000006166F5B0000062A9202282400000A02037D6400000402047D6500000402057D66000004020E047D670000042A001B300400C900000003000011731E0100060A73270000060B032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F120000060772730200706F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002002F00305F0014000000001B300400C900000003000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772AB0200706F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F0014000000001B300400C900000003000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772E30200706F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F00140000000013300300F100000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F120000060772230300706F1600000607166F0A00000607733000000A6F1A000006076F19000006724D030070036F3500000A0F02283800000A2C1D076F19000006725B0300700F02FE160500001B6F2200000A6F3500000A0F03283900000A2C430F04283900000A2C3A076F1900000672870300700F03FE160600001B6F2200000A6F3500000A076F19000006728F0300700F04FE160600001B6F2200000A6F3500000A06076F1F0100060B076F1D000006166F5B0000062A000000133003007400000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F120000060772990300700F01283700000A283A00000A6F1600000607166F0A000006060772690200706F200100060B076F1D000006166F5B0000062A133003008A00000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F1200000607733000000A6F1A000006076F1900000672290200700F01283700000A6F3500000A0772CD0300706F1600000607166F0A000006060772990100706F200100060B076F1D000006166F5B0000062A00001B300400C900000003000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772F30300706F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F001400000000133003008A00000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F1200000607733000000A6F1A000006076F1900000672290200700F01283700000A6F3500000A07721B0400706F1600000607166F0A000006060772690200706F200100060B076F1D000006166F5B0000062A0000133003008A00000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F1200000607733000000A6F1A000006076F1900000672290200700F01283700000A6F3500000A0772470400706F1600000607166F0A000006060772690200706F200100060B076F1D000006166F5B0000062A00001B300400C900000003000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F12000006032C64036F2F00000A16315B07733000000A6F1A000006036F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060803086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772750400706F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F0014000000001B300400D900000003000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F12000006042C64046F2F00000A16315B07733000000A6F1A000006046F3100000A6F3200000A0D2B24096F3300000A742C0000010C076F190000060804086F3400000A742C0000016F3500000A096F3600000A2DD4DE1409752F000001130411042C0711046F1C00000ADC0772AF040070038C3500000172D5040070283B00000A6F1600000607166F0A000006060772990100706F200100060B076F1D0000062A0000000110000002005F00308F001400000000133004007800000004000011731E0100060A73270000060B07027B640000046F0C00000607027B650000046F0E00000607027B660000046F1000000607027B670000046F120000060772E1040070038C3500000172D5040070283B00000A6F1600000607166F0A000006060772690200706F200100060B076F1D000006166F5B0000062A9202282400000A02037D6800000402047D6900000402057D6A000004020E047D6B0000042A000000133003008900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067205050070036F2200000A6F3500000A0772150500706F1600000607176F0A000006060772990100706F200100060B076F1F000006166FA50000062A000000133004007200000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F120000060772AF040070038C3500000172D5040070283B00000A6F16000006071A6F0A000006060772990100706F200100060B076F1F0000062A0000133003006200000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F120000060772350500706F1600000607186F0A000006060772990100706F200100060B076F1F0000062A0000133003006200000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607725D0500706F1600000607186F0A000006060772990100706F200100060B076F1F0000062A0000133003007E00000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F670000066F3500000A0772810500706F1600000607176F0A00000606076F1F0100060B076F1F0000062A0000133003007900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F3500000A0772B10500706F1600000607176F0A00000606076F1F0100060B076F1F0000062A000000133003007F00000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F1900000672050500700F01283700000A6F3500000A0772B10500706F1600000607176F0A00000606076F1F0100060B076F1F0000062A00133003006200000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F120000060772E30500706F1600000607186F0A000006060772990100706F200100060B076F1F0000062A0000133003007900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F3500000A0772050600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A000000133003007900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F3500000A07722B0600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A000000133003007900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F3500000A0772530600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A000000133003007F00000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F1900000672050500700F01283700000A6F3500000A0772530600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A00133003007900000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F190000067207020070036F3500000A0772830600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A000000133003007F00000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F1200000607733000000A6F1A000006076F1900000672050500700F01283700000A6F3500000A0772830600706F1600000607176F0A00000606076F1F0100060B076F1F0000062A00133003006200000004000011731E0100060A73270000060B07027B680000046F0C00000607027B690000046F0E00000607027B6A0000046F1000000607027B6B0000046F120000060772B50600706F1600000607186F0A000006060772990100706F200100060B076F1F0000062A1E027B6C0000042A2202037D6C0000042A1E027B6D0000042A2202037D6D0000042A1E027B6E0000042A2202037D6E0000042A1E027B6F0000042A2202037D6F0000042A1E027B700000042A2202037D700000042A1E02282400000A2A1E027B710000042A2202037D710000042A1E027B720000042A2202037D720000042A1E027B730000042A2202037D730000042A1E027B740000042A2202037D740000042A1E02282400000A2A3602037E1500000A28E40000062A0000001B300700E50000000500001102281D00000A2C0B72E1060070733C00000A7A03281D00000A2C0B72F9060070733C00000A7A73D90000060A733000000A0B04281D00000A2D0C077217070070046F3500000A72350700700772690200700203141428E90000060C086F3D00000A733E00000A6F3F00000A0D09728D070070284000000A13040611046F4100000A72520800706F4200000A6F4300000A6FD00000060611046F4100000A725E0800706F4200000A6F4300000A6FD20000060611046F4100000A726C0800706F4200000A6F4300000A6FD8000006DE14130511056F4400000A7327000006731B0100067A062A000000011000000000460089CF0014080000011B3007002E0100000600001102281D00000A2C0B72E1060070733C00000A7A03281D00000A2C0B72F9060070733C00000A7A04281D00000A2C0B727E080070733C00000A7A73D90000060A733000000A0B05281D00000A2D0C077298080070056F3500000A72B60800700772690200700203047E1500000A28E90000060C086F3D00000A733E00000A6F3F00000A0D0609720C090070284000000A6F4100000A176F4500000A6F4300000A6FD000000606097234090070284000000A6F4100000A176F4500000A6F4300000A6FD20000060609726A090070284000000A6F4100000A176F4500000A6F4300000A284600000A284700000A284800000A6FD40000060609728A090070284000000A6F4100000A176F4500000A6F4300000A6FD6000006DE14130411046F4400000A7327000006731B0100067A062A00000110000000003F00D91801140800000113300300A20000000700001102281D00000A2C067E1500000A2A02284900000A100014FE06EA000006734A00000A0A0272B209007006284B00000A10000272DA09007072DE0900706F4C00000A72E609007072EA0900706F4C00000A72F209007072F60900706F4C00000A72FE09007072020A00706F4C00000A720A0A0070720E0A00706F4C00000A72160A0070721A0A00706F4C00000A10000272220A0070722A0A00706F4C00000A1000022A22021628E80000062A00133003004100000008000011722E0A0070734D00000A0A032C0E0672640A00706F4E00000A262B0C06727E0A00706F4E00000A260672920A0070026F4F00000A26066F2200000A735000000A2A0000001B3006006402000009000011733000000A0A032C3F036F5100000A13082B1C1208285200000A0B061201285300000A1201285400000A6F3500000A1208285500000A2DDBDE0E1208FE160700001B6F1C00000ADC0672B40A007072D00A00706F3500000A0672D80A007028EE0000066F3500000A0672F00A007028ED0000066F3500000A0672100B0070723E0B00706F3500000A0672520B0070056F3500000A0672780B00700E046F3500000A0E05281D00000A2D0D0672A40B00700E056F3500000A0E06281D00000A2D0D0672BC0B00700E066F3500000A02735000000A06040E040E0628EF000006735600000A0C081F4072E20B00706F5700000A081F4072120C00706F5700000A081F40724A0C00706F5700000A086F5800000A047269020070285900000A39A6000000735A00000A1304066F5100000A13092B661209285200000A13051205285300000A72880C00706F5B00000A2C131205285300000A7298080070285900000A2C3711046F5C00000A16310D110472960C00706F4E00000A261104729A0C00701205285300000A1205285400000A28E60000066F5D00000A261209285500000A2D91DE0E1209FE160700001B6F1C00000ADC0272AA0C007011046F2200000A285E00000A10002B200628EB00000613061106281D00000A2D0F0272AA0C00701106285E00000A100002285F00000A744900000113071107046F6000000A1107286100000A72AE0C0070178D04000001130A110A1628F5000006A2110A286200000A6F6300000A11076F6400000A72C80C00700628EC0000066F6500000A047269020070285900000A2C0C110772E40C00706F6600000A11076F6700000A740E0000010D092A011C000002001100293A000E000000000200300173A3010E0000000032026F4300000A6F6800000A2A0000001B300400850000000A000011735A00000A0A02736900000A0B076F6A00000A0D2B4F1203286B00000A0C1202285300000A72880C00706F5B00000A2D34066F5C00000A16310C0672960C00706F4E00000A2606729A0C00701202285300000A1202285400000A28E60000066F5D00000A261203286C00000A2DA8DE0E1203FE160A00001B6F1C00000ADC066F2200000A2A00000001100000020014005C70000E000000001B300400E70000000B00001172280D0070734D00000A0A02736900000A0B076F6A00000A130438870000001204286B00000A0C1202285300000A72880C00706F6D00000A2C6C1202285300000A725C0D00701B6F6E00000A2D581202285300000A726C0D0070286F00000A2C451202285300000A7298080070286F00000A2C321202285400000A281D00000A2D2406728C\
-0D00701202285300000A28E60000061202285400000A28E60000066F5D00000A261204286C00000A3A6DFFFFFFDE0E1204FE160A00001B6F1C00000ADC0672A20D007002726C0D00706F7000000A28E60000066F4F00000A26066F2200000A0D092A000110000002001A009AB4000E00000000133008003F0000000C000011287100000A20B2070000171716161616737200000A287300000A0A1200287400000A8C51000001284600000A287500000A0B1201284600000A287600000A2A0013300300270000000D000011737700000A2008E2010020FFFFFF7F6F7800000A0A120072D00D0070286100000A287900000A2A001B3006003F0100000E0000110228F00000060A733000000A0B03736900000A0C086F6A00000A13082B581208286B00000A0D1203285300000A725C0D00701B6F6E00000A2C281203285300000A72880C00701B6F7A00000A2C141203285300000A72D40D00701B6F6E00000A2C14071203285300000A1203285400000A6F3500000A1208286C00000A2D9FDE0E1208FE160A00001B6F1C00000ADC286100000A72E80D0070198D04000001130911091604286100000A6F7B00000AA21109170628E6000006A21109180728F1000006A21109286200000A1304737C00000A1305286100000A72000E0070188D04000001130A110A160528E6000006A2110A170E0428E6000006A2110A286200000A13061105287D00000A11066F7E00000A6F7F00000A1105287D00000A11046F7E00000A6F8000000A288100000A130703726C0D007011076F3500000A2A000110000002001C006581000E00000000133005008B0000000F000011286100000A72100E0070188D040000010B0716026F8200000AA20717026F8300000AA207286200000A0A026F8200000A72240E0070285900000A2C0A026F8400000A1F502E36026F8200000A722E0E0070285900000A2C0D026F8400000A20BB0100002E1706723A0E0070026F8400000A8C54000001283B00000A0A06026F8500000A288600000A0A062A001B3006009800000010000011735A00000A0A02736900000A0B076F6A00000A0D2B5D1203286B00000A0C066F5C00000A16310C0672960C00706F4E00000A2606286100000A729A0C0070188D0400000113041104161202285300000A28E6000006A21104171202285400000A28E6000006A21104286200000A6F4E00000A261203286C00000A2D9ADE0E1203FE160A00001B6F1C00000ADC066F2200000A28E60000062A01100000020014006A7E000E000000001B300700590100000600001102281D00000A2C0B72E1060070733C00000A7A03281D00000A2C0B72F9060070733C00000A7A04281D00000A2C0B723E0E0070733C00000A7A05281D00000A2C0B72500E0070733C00000A7A73D90000060A733000000A0B0772620E0070046F3500000A0772820E0070056F3500000A0772A20E007072BA0E00706F3500000A72B608007007726902007002037E1500000A7E1500000A28E90000060C086F3D00000A733E00000A6F3F00000A0D0609720C090070284000000A6F4100000A176F4500000A6F4300000A6FD000000606097234090070284000000A6F4100000A176F4500000A6F4300000A6FD20000060609726A090070284000000A6F4100000A176F4500000A6F4300000A284600000A284700000A284800000A6FD40000060609728A090070284000000A6F4100000A176F4500000A6F4300000A6FD6000006DE14130411046F4400000A7327000006731B0100067A062A0000000110000000008000C343011408000001033001004C00000000000000288800000A6F8900000A6F8A00000A6F8B00000A8076000004288800000A6F8900000A6F8A00000A6F8C00000A8077000004288800000A6F8900000A6F8A00000A6F8D00000A80780000042ADE02282400000A020304050E0473AD0000067D79000004020304050E0473BF0000067D7B000004020304050E0473B20000067D7A0000042A133003004E000000110000111B8D2C0000010A06167E760000040B1201288E00000AA2061772D20E0070A206187E770000040C1202288E00000AA2061972D20E0070A2061A7E780000040D1203288E00000AA206288F00000A2A00001330050052010000120000110F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A73F40000060B1202FE150500001B1203FE150600001B1204FE150600001B0F05289500000A2D0E12020F05289600000A289700000A0F06289800000A2D0E12030F06289900000A289A00000A0F07289800000A2D0E12040F07289900000A289A00000A077B7A0000040F04289200000A080911046FB60000060A066F2A000006289B00000A2A00001330040004010000130000110F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F04289500000A2C0B7260100070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A73F40000060A067B7A0000040F04289600000A6FB7000006267292100070289C00000A2A1330040024010000140000110F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F05289100000A2D180F05289200000A6F9300000A7E1500000A285900000A2C0B7294100070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A73F40000060B077B790000040F05289200000A0F04289200000A6FB00000060A066F2A000006289B00000A2A1330040004010000130000110F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F04289500000A2C0B7260100070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A73F40000060A067B790000040F04289600000A6FB1000006267292100070289C00000A2A13300400680200001500001102A5160000020A0312007B7C000004289B00000A81100000010412007B7D000004289D00000A81130000010512007B7E000004289B00000A81100000010E0412007B7F000004289B00000A81100000010E0512007B80000004289E00000A81140000010E0612007B81000004289E00000A81140000010E0712007B82000004289C00000A81110000010E0812007B83000004289C00000A81110000010E0912007B84000004289B00000A81100000010E0A12007B85000004289C00000A81110000010E0B12007B86000004289C00000A81110000010E0C12007B87000004289C00000A81110000010E0D12007B88000004289B00000A81100000010E0E12007B89000004289C00000A81110000010E0F12007B8A000004289C00000A81110000010E1012007B8B000004289C00000A81110000010E1112007B8C000004289C00000A81110000010E1212007B8D000004289C00000A81110000010E1312007B8E000004289C00000A811100000112007C8F000004283900000A2C1B0E1412007C8F000004289F00000A6C28A000000A81120000012B0C0E147EA100000A811200000112007C90000004283900000A2C1B0E1512007C90000004289F00000A6C28A000000A81120000012B0C0E157EA100000A811200000112007B9100000415330E0E167EA200000A81150000012B130E1612007B9100000428A300000A811500000112007B9200000415330E0E177EA200000A81150000012B130E1712007B9200000428A300000A811500000112007B93000004206C070000171773A400000A28A500000A2C0D0E187EA600000A81130000012A0E1812007B93000004289D00000A81130000012A13300200780000001600001128AB00000A6FAC00000A027BB50000043315027BB40000041FFE330B02167DB4000004020A2B0716733A0100060A06027BB70000047DB600000406027BB90000047DB800000406027BBB0000047DBA00000406027BBD0000047DBC00000406027BBF0000047DBE00000406027BC10000047DC0000004062A1E0228330100062A1B3005001705000017000011027BB40000040B07450300000005000000F1040000D404000038EC04000002157DB400000402147DC300000402027BB6000004027BB8000004027BBA000004027BBC00000473F40000067DC4000004027BBE000004250C397B010000FE137EC80000042D611D73AD00000A2572EE1000701628AE00000A2572141100701728AE00000A2572321100701828AE00000A25724C1100701928AE00000A25725E1100701A28AE00000A2572721100701B28AE00000A25728C1100701C28AE00000AFE1380C8000004FE137EC800000408120328AF00000A39FD0000000945070000000500000026000000470000006500000083000000A1000000BF00000038D600000002027BC40000047B79000004027BC00000046FAF0000067DC300000438B500000002027BC40000047B79000004027BC00000046FAE0000067DC3000004389400000002027BC40000047B7A000004027BC00000046FB30000067DC30000042B7602027BC40000047B7A000004027BC00000046FB50000067DC30000042B5802027BC40000047B7A000004027BC00000046FB90000067DC30000042B3A02027BC40000047B7A000004027BC00000046FB40000067DC30000042B1C02027BC40000047B7A000004027BC00000046FBC0000067DC300000402027BC30000046FB000000A7DC600000402177DB4000004380003000002027BC60000046F3300000A74080000027DC5000004027CC2000004FE1516000002027CC2000004027BC50000046F2A0000067D7C000004027CC2000004027BC50000046F280000067D7D000004027CC2000004027BC50000046F360000067D7E000004027CC2000004027BC50000046F380000067D7F000004027CC2000004027BC50000046F340000067D80000004027CC2000004027BC50000046F320000067D81000004027CC2000004027BC50000046F2E0000067D82000004027CC2000004027BC50000046F2C0000067D83000004027CC2000004027BC50000046F300000067D84000004027CC2000004027BC50000046F3A0000066F670000067D86000004027CC2000004027BC50000046F3A0000066F650000067D87000004027CC2000004027BC50000046F3A0000066F630000067D88000004027CC2000004027BC50000046F3A0000066F870000067D85000004027CC2000004027BC50000046F3A0000066F690000067D89000004027CC2000004027BC50000046F400000067D8A000004027CC2000004027BC50000046F420000067D8B000004027CC2000004027BC50000046F440000067D8C000004027CC2000004027BC50000046F460000067D8D000004027CC2000004027BC50000046F480000067D8E000004027CC2000004027BC50000046F4A0000067D8F000004027CC2000004027BC50000046F4C0000067D90000004027BC50000046F4E0000061304120428B100000A2D0E027CC2000004157D910000042B1F027CC2000004027BC50000046F4E0000061305120528B200000A7D91000004027BC50000046F500000061306120628B100000A2D0E027CC2000004157D920000042B1F027CC2000004027BC50000046F500000061307120728B200000A7D92000004027BC50000046F520000061308120828B300000A2D19027CC2000004206C070000171773A400000A7D930000042B1F027CC2000004027BC50000046F520000061309120928B400000A7D9300000402027BC20000048C160000027DB300000402187DB4000004170ADE2802177DB4000004027BC60000046F3600000A3AF0FCFFFF02283B010006160ADE07022838010006DC062A00411C000004000000000000000E0500000E05000007000000000000001E027BB30000042A1A73B500000A7A001B300200220000000D000011027BB40000040A061759450200000001000000010000002ADE0702283B010006DC2A00000110000002001800021A0007000000001E027BB30000042A7A02282400000A02037DB40000040228AB00000A6FAC00000A7DB50000042AB202157DB400000402027BC6000004752F0000017DC7000004027BC70000042C0B027BC70000046F1C00000A2A1330020036000000160000111FFE733A0100060A06027DB700000406037DB900000406047DBB00000406057DBD000004060E047DBF000004060E057DC1000004062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A72EE1000700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A72141100700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A72321100700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A724C1100700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A725E1100700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A72721100700F0428B600000A28FB0000062A000003300600DE000000000000000F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A0F00289200000A0F01289200000A0F02289200000A0F03289200000A728C1100700F0428B600000A28FB0000062A000013300200780000001800001128AB00000A6FAC00000A027BCB0000043315027BCA0000041FFE330B02167DCA000004020A2B071673430100060A06027BCD0000047DCC00000406027BCF0000047DCE00000406027BD10000047DD000000406027BD30000047DD200000406027BD50000047DD400000406027BD70000047DD6000004062A1E02283C0100062A1B3005009D04000019000011027BCA0000040B07450300000005000000770400005A040000387204000002157DCA000004027CCC000004289100000A2D1C027CCC000004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CCE000004289100000A2D1C027CCE000004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CD0000004289100000A2D1C027CD0000004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CD2000004289100000A2D1C027CD2000004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02147DD900000402027CCC000004289200000A027CCE000004289200000A027CD0000004289200000A027CD2000004289200000A73F40000067DDA00000402027BDA0000047B7A000004027CD4000004289600000A027CD600000428B600000A6FBD0000067DD900000402027BD90000046FB000000A7DDC00000402177DCA00000438FE02000002027BDC0000046F3300000A74080000027DDB000004027CD8000004FE1516000002027CD8000004027BDB0000046F2A0000067D7C000004027CD8000004027BDB0000046F280000067D7D000004027CD8000004027BDB0000046F360000067D7E000004027CD8000004027BDB0000046F380000067D7F000004027CD8000004027BDB0000046F340000067D80000004027CD8000004027BDB0000046F320000067D81000004027CD8000004027BDB0000046F2E0000067D82000004027CD8000004027BDB0000046F2C0000067D83000004027CD8000004027BDB0000046F300000067D84000004027CD8000004027BDB0000046F3A0000066F670000067D86000004027CD8000004027BDB0000046F3A0000066F650000067D87000004027CD8000004027BDB0000046F3A0000066F630000067D88000004027CD8000004027BDB0000046F3A0000066F870000067D85000004027CD8000004027BDB0000046F3A0000066F690000067D89000004027CD8000004027BDB0000046F400000067D8A000004027CD8000004027BDB0000046F420000067D8B000004027CD8000004027BDB0000046F440000067D8C000004027CD8000004027BDB0000046F460000067D8D000004027CD8000004027BDB0000046F480000067D8E000004027CD8000004027BDB0000046F4A0000067D8F000004027CD8000004027BDB0000046F4C0000067D90000004027BDB0000046F4E0000060C120228B100000A2D0E027CD8000004157D910000042B1E027CD8000004027BDB0000046F4E0000060D120328B200000A7D91000004027BDB0000046F500000061304120428B100000A2D0E027CD8000004157D920000042B1F027CD8000004027BDB0000046F500000061305120528B200000A7D92000004027BDB0000046F520000061306120628B300000A2D19027CD8000004206C070000171773A400000A7D930000042B1F027CD8000004027BDB0000046F520000061307120728B400000A7D9300000402027BD80000048C160000027DC900000402187DCA000004170ADE2802177DCA000004027BDC0000046F3600000A3AF2FCFFFF022844010006160ADE07022841010006DC062A000000411C00000400000000000000940400009404000007000000000000001E027BC90000042A1A73B500000A7A001B300200220000000D000011027BCA0000040A061759450200000001000000010000002ADE07022844010006DC2A00000110000002001800021A0007000000001E027BC90000042A7A02282400000A02037DCA0000040228AB00000A6FAC00000A7DCB0000042AB202157DCA00000402027BDC000004752F0000017DDD000004027BDD0000042C0B027BDD0000046F1C00000A2A1330020036000000180000111FFE73430100060A06027DCD00000406037DCF00000406047DD100000406057DD3000004060E047DD5000004060E057DD7000004062A0000133002006C0000001A00001128AB00000A6FAC00000A027BE00000043315027BDF0000041FFE330B02167DDF000004020A2B0716734C0100060A06027BE20000047DE100000406027BE40000047DE300000406027BE60000047DE500000406027BE80000047DE700000406027BEA0000047DE9000004062A1E0228450100062A13300500240400001B000011027BDF0000040A0645020000000500000006040000380804000002157DDF000004027CE1000004289100000A2D1C027CE1000004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CE3000004289100000A2D1C027CE3000004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CE5000004289100000A2D1C027CE5000004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CE7000004289100000A2D1C027CE7000004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027CE1000004289200000A027CE3000004289200000A027CE5000004289200000A027CE7000004289200000A73F40000067DED00000402027BED0000047B7A000004027CE9000004289600000A6FB80000067DEC000004027CEB000004027BEC0000046F2A0000067D7C000004027CEB000004027BEC0000046F280000067D7D000004027CEB000004027BEC0000046F360000067D7E000004027CEB000004027BEC0000046F380000067D7F000004027CEB000004027BEC0000046F340000067D80000004027CEB000004027BEC0000046F320000067D81000004027CEB000004027BEC0000046F2E0000067D82000004027CEB000004027BEC0000046F2C0000067D83000004027CEB000004027BEC0000046F300000067D84000004027CEB000004027BEC0000046F3A0000066F670000067D86000004027CEB000004027BEC0000046F3A0000066F650000067D87000004027CEB000004027BEC0000046F3A0000066F630000067D88000004027CEB000004027BEC0000046F3A0000066F870000067D85000004027CEB000004027BEC0000046F3A0000066F690000067D89000004027CEB000004027BEC0000046F400000067D8A000004027CEB000004027BEC0000046F420000067D8B000004027CEB000004027BEC0000046F440000067D8C000004027CEB000004027BEC0000046F460000067D8D000004027CEB000004027BEC0000046F480000067D8E000004027CEB000004027BEC0000046F4A0000067D8F000004027CEB000004027BEC0000046F4C0000067D90000004027BEC0000046F4E0000060B120128B100000A2D0E027CEB000004157D910000042B1E027CEB000004027BEC0000046F4E0000060C120228B200000A7D91000004027BEC0000046F500000060D120328B100000A2D0E027CEB000004157D920000042B1F027CEB000004027BEC0000046F500000061304120428B200000A7D92000004027BEC0000046F520000061305120528B300000A2D19027CEB000004206C070000171773A400000A7D930000042B1F027CEB000004027BEC0000046F520000061306120628B400000A7D9300000402027BEB0000048C160000027DDE00000402177DDF000004172A02157DDF000004162A1E027BDE0000042A1A73B500000A7A062A1E027BDE0000042A7A02282400000A02037DDF0000040228AB00000A6FAC00000A7DE00000042A133002002E0000001A0000111FFE734C0100060A06027DE200000406037DE400000406047DE600000406057DE8000004060E047DEA000004062A0000133002006C0000001C00001128AB00000A6FAC00000A027BF00000043315027BEF0000041FFE330B02167DEF000004020A2B071673540100060A06027BF20000047DF100000406027BF40000047DF300000406027BF60000047DF500000406027BF80000047DF700000406027BFA0000047DF9000004062A1E02284D0100062A13300500240400001B000011027BEF0000040A0645020000000500000006040000380804000002157DEF000004027CF1000004289100000A2D1C027CF1000004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CF3000004289100000A2D1C027CF3000004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CF5000004289100000A2D1C027CF5000004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CF7000004289100000A2D1C027CF7000004289200000A6F930000\
-0A7E1500000A285900000A2C0B72F60F0070739400000A7A02027CF1000004289200000A027CF3000004289200000A027CF5000004289200000A027CF7000004289200000A73F40000067DFD00000402027BFD0000047B7A000004027CF9000004289600000A6FBA0000067DFC000004027CFB000004027BFC0000046F2A0000067D7C000004027CFB000004027BFC0000046F280000067D7D000004027CFB000004027BFC0000046F360000067D7E000004027CFB000004027BFC0000046F380000067D7F000004027CFB000004027BFC0000046F340000067D80000004027CFB000004027BFC0000046F320000067D81000004027CFB000004027BFC0000046F2E0000067D82000004027CFB000004027BFC0000046F2C0000067D83000004027CFB000004027BFC0000046F300000067D84000004027CFB000004027BFC0000046F3A0000066F670000067D86000004027CFB000004027BFC0000046F3A0000066F650000067D87000004027CFB000004027BFC0000046F3A0000066F630000067D88000004027CFB000004027BFC0000046F3A0000066F870000067D85000004027CFB000004027BFC0000046F3A0000066F690000067D89000004027CFB000004027BFC0000046F400000067D8A000004027CFB000004027BFC0000046F420000067D8B000004027CFB000004027BFC0000046F440000067D8C000004027CFB000004027BFC0000046F460000067D8D000004027CFB000004027BFC0000046F480000067D8E000004027CFB000004027BFC0000046F4A0000067D8F000004027CFB000004027BFC0000046F4C0000067D90000004027BFC0000046F4E0000060B120128B100000A2D0E027CFB000004157D910000042B1E027CFB000004027BFC0000046F4E0000060C120228B200000A7D91000004027BFC0000046F500000060D120328B100000A2D0E027CFB000004157D920000042B1F027CFB000004027BFC0000046F500000061304120428B200000A7D92000004027BFC0000046F520000061305120528B300000A2D19027CFB000004206C070000171773A400000A7D930000042B1F027CFB000004027BFC0000046F520000061306120628B400000A7D9300000402027BFB0000048C160000027DEE00000402177DEF000004172A02157DEF000004162A1E027BEE0000042A1A73B500000A7A062A1E027BEE0000042A7A02282400000A02037DEF0000040228AB00000A6FAC00000A7DF00000042A133002002E0000001C0000111FFE73540100060A06027DF200000406037DF400000406047DF600000406057DF8000004060E047DFA000004062A0000133002006C0000001D00001128AB00000A6FAC00000A027B000100043315027BFF0000041FFE330B02167DFF000004020A2B0716735C0100060A06027B020100047D0101000406027B040100047D0301000406027B060100047D0501000406027B080100047D0701000406027B0A0100047D09010004062A1E0228550100062A13300500240400001B000011027BFF0000040A0645020000000500000006040000380804000002157DFF000004027C01010004289100000A2D1C027C01010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C03010004289100000A2D1C027C03010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C05010004289100000A2D1C027C05010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C07010004289100000A2D1C027C07010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C01010004289200000A027C03010004289200000A027C05010004289200000A027C07010004289200000A73F40000067D0D01000402027B0D0100047B7A000004027C09010004289600000A6FBB0000067D0C010004027C0B010004027B0C0100046F2A0000067D7C000004027C0B010004027B0C0100046F280000067D7D000004027C0B010004027B0C0100046F360000067D7E000004027C0B010004027B0C0100046F380000067D7F000004027C0B010004027B0C0100046F340000067D80000004027C0B010004027B0C0100046F320000067D81000004027C0B010004027B0C0100046F2E0000067D82000004027C0B010004027B0C0100046F2C0000067D83000004027C0B010004027B0C0100046F300000067D84000004027C0B010004027B0C0100046F3A0000066F670000067D86000004027C0B010004027B0C0100046F3A0000066F650000067D87000004027C0B010004027B0C0100046F3A0000066F630000067D88000004027C0B010004027B0C0100046F3A0000066F870000067D85000004027C0B010004027B0C0100046F3A0000066F690000067D89000004027C0B010004027B0C0100046F400000067D8A000004027C0B010004027B0C0100046F420000067D8B000004027C0B010004027B0C0100046F440000067D8C000004027C0B010004027B0C0100046F460000067D8D000004027C0B010004027B0C0100046F480000067D8E000004027C0B010004027B0C0100046F4A0000067D8F000004027C0B010004027B0C0100046F4C0000067D90000004027B0C0100046F4E0000060B120128B100000A2D0E027C0B010004157D910000042B1E027C0B010004027B0C0100046F4E0000060C120228B200000A7D91000004027B0C0100046F500000060D120328B100000A2D0E027C0B010004157D920000042B1F027C0B010004027B0C0100046F500000061304120428B200000A7D92000004027B0C0100046F520000061305120528B300000A2D19027C0B010004206C070000171773A400000A7D930000042B1F027C0B010004027B0C0100046F520000061306120628B400000A7D9300000402027B0B0100048C160000027DFE00000402177DFF000004172A02157DFF000004162A1E027BFE0000042A1A73B500000A7A062A1E027BFE0000042A7A02282400000A02037DFF0000040228AB00000A6FAC00000A7D000100042A133002002E0000001D0000111FFE735C0100060A06027D0201000406037D0401000406047D0601000406057D08010004060E047D0A010004062A0000133002006C0000001E00001128AB00000A6FAC00000A027B100100043315027B0F0100041FFE330B02167D0F010004020A2B071673640100060A06027B120100047D1101000406027B140100047D1301000406027B160100047D1501000406027B180100047D1701000406027B1A0100047D19010004062A1E02285D0100062A13300500240400001B000011027B0F0100040A0645020000000500000006040000380804000002157D0F010004027C11010004289100000A2D1C027C11010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C13010004289100000A2D1C027C13010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C15010004289100000A2D1C027C15010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C17010004289100000A2D1C027C17010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C11010004289200000A027C13010004289200000A027C15010004289200000A027C17010004289200000A73F40000067D1D01000402027B1D0100047B7A000004027C19010004289600000A6FBE0000067D1C010004027C1B010004027B1C0100046F2A0000067D7C000004027C1B010004027B1C0100046F280000067D7D000004027C1B010004027B1C0100046F360000067D7E000004027C1B010004027B1C0100046F380000067D7F000004027C1B010004027B1C0100046F340000067D80000004027C1B010004027B1C0100046F320000067D81000004027C1B010004027B1C0100046F2E0000067D82000004027C1B010004027B1C0100046F2C0000067D83000004027C1B010004027B1C0100046F300000067D84000004027C1B010004027B1C0100046F3A0000066F670000067D86000004027C1B010004027B1C0100046F3A0000066F650000067D87000004027C1B010004027B1C0100046F3A0000066F630000067D88000004027C1B010004027B1C0100046F3A0000066F870000067D85000004027C1B010004027B1C0100046F3A0000066F690000067D89000004027C1B010004027B1C0100046F400000067D8A000004027C1B010004027B1C0100046F420000067D8B000004027C1B010004027B1C0100046F440000067D8C000004027C1B010004027B1C0100046F460000067D8D000004027C1B010004027B1C0100046F480000067D8E000004027C1B010004027B1C0100046F4A0000067D8F000004027C1B010004027B1C0100046F4C0000067D90000004027B1C0100046F4E0000060B120128B100000A2D0E027C1B010004157D910000042B1E027C1B010004027B1C0100046F4E0000060C120228B200000A7D91000004027B1C0100046F500000060D120328B100000A2D0E027C1B010004157D920000042B1F027C1B010004027B1C0100046F500000061304120428B200000A7D92000004027B1C0100046F520000061305120528B300000A2D19027C1B010004206C070000171773A400000A7D930000042B1F027C1B010004027B1C0100046F520000061306120628B400000A7D9300000402027B1B0100048C160000027D0E01000402177D0F010004172A02157D0F010004162A1E027B0E0100042A1A73B500000A7A062A1E027B0E0100042A7A02282400000A02037D0F0100040228AB00000A6FAC00000A7D100100042A133002002E0000001E0000111FFE73640100060A06027D1201000406037D1401000406047D1601000406057D18010004060E047D1A010004062A0000133004006E0200001F00001102A5170000020A0312007B94000004289B00000A81100000010512007B95000004289C00000A81110000010412007B96000004289C00000A81110000010E0412007B97000004289E00000A81140000010E0512007B98000004289E00000A81140000010E0612007B99000004289C00000A811100000112007B9A000004206C070000171773A400000A28A500000A2C0E0E077EA600000A81130000012B130E0712007B9A000004289D00000A81130000010E0812007B9B000004289C00000A81110000010E0912007B9C000004289C00000A811100000112007C9D00000428B100000A2C1A0E0A12007C9D00000428B200000A28A300000A81150000012B0C0E0A7EA200000A81150000010E0B12007BA0000004289C00000A81110000010E0C12007BA1000004289C00000A81110000010E0D12007BA200000428A300000A81150000010E0E12007BA300000428A300000A81150000010E0F12007BA400000428A300000A81150000010E1012007BA6000004289C00000A811100000112007BA900000415330E0E117EA200000A81150000012B130E1112007BA900000428A300000A811500000112007BAA00000415330E0E127EA200000A81150000012B130E1212007BAA00000428A300000A811500000112007BAB000004206C070000171773A400000A28A500000A2C0E0E137EA600000A81130000012B130E1312007BAB000004289D00000A81130000010E1412007B9F000004289C00000A81110000010E1512007BA500000428A300000A81150000010E1612007B9E000004289E00000A81140000010E1712007BA7000004289E00000A81140000010E1812007BA8000004289E00000A81140000012A000013300200600000002000001128AB00000A6FAC00000A027B200100043315027B1F0100041FFE330B02167D1F010004020A2B0716736C0100060A06027B220100047D2101000406027B240100047D2301000406027B260100047D2501000406027B280100047D27010004062A1E0228650100062A1B300500C304000021000011027B1F0100040B074503000000050000009D04000080040000389804000002157D1F010004027C21010004289100000A2D1C027C21010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C23010004289100000A2D1C027C23010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C25010004289100000A2D1C027C25010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C27010004289100000A2D1C027C27010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C21010004289200000A027C23010004289200000A027C25010004289200000A027C27010004289200000A73F40000067D290100040273AC0000067D2A01000402027B290100047B7B0000046FC20000067D2A010004027C2B010004FE151700000202027B2A0100046FB000000A7D2D01000402177D1F010004382A03000002027B2D0100046F3300000A740A0000027D2C010004027C2B010004027B2C0100046F630000067D94000004027C2B010004027B2C0100046F650000067D95000004027C2B010004027B2C0100046F670000067D96000004027C2B010004027B2C0100046F830000067D97000004027C2B010004027B2C0100046F790000067D98000004027C2B010004027B2C0100046F6B0000067D99000004027C2B010004027B2C0100046F710000067DA2000004027C2B010004027B2C0100046F6F0000067DA3000004027C2B010004027B2C0100046F730000067DA4000004027C2B010004027B2C0100046F7B0000067DA0000004027C2B010004027B2C0100046F7D0000067DA1000004027C2B010004027B2C0100046F690000067D9B000004027C2B010004027B2C0100046F870000067D9C000004027C2B010004027B2C0100046F850000067D9D000004027B2C0100046F6D0000060C120228B300000A2D19027C2B010004206C070000171773A400000A7D9A0000042B1E027C2B010004027B2C0100046F6D0000060D120328B400000A7D9A000004027C2B010004027B2C0100046F770000062D0772921000702B10027B2C0100046F770000066F2C0000067DA6000004027C2B010004027B2C0100046F8F0000067DA7000004027C2B010004027B2C0100046F8B0000067D9F000004027C2B010004027B2C0100046F750000067DA5000004027C2B010004027B2C0100046F890000067D9E000004027C2B010004027B2C0100046F910000067DA8000004027B2C0100046F930000061304120428B100000A2D0E027C2B010004157DA90000042B1F027C2B010004027B2C0100046F930000061305120528B200000A7DA9000004027B2C0100046F950000061306120628B100000A2D0E027C2B010004157DAA0000042B1F027C2B010004027B2C0100046F950000061307120728B200000A7DAA000004027B2C0100046F970000061308120828B300000A2D19027C2B010004206C070000171773A400000A7DAB0000042B1F027C2B010004027B2C0100046F970000061309120928B400000A7DAB00000402027B2B0100048C170000027D1E01000402187D1F010004170ADE2802177D1F010004027B2D0100046F3600000A3AC6FCFFFF02286D010006160ADE0702286A010006DC062A00411C00000400000000000000BA040000BA04000007000000000000001E027B1E0100042A1A73B500000A7A001B300200220000000D000011027B1F0100040A061759450200000001000000010000002ADE0702286D010006DC2A00000110000002001800021A0007000000001E027B1E0100042A7A02282400000A02037D1F0100040228AB00000A6FAC00000A7D200100042AB202157D1F01000402027B2D010004752F0000017D2E010004027B2E0100042C0B027B2E0100046F1C00000A2A1330020026000000200000111FFE736C0100060A06027D2201000406037D2401000406047D2601000406057D28010004062A000013300200600000002200001128AB00000A6FAC00000A027B310100043315027B300100041FFE330B02167D30010004020A2B071673750100060A06027B330100047D3201000406027B350100047D3401000406027B370100047D3601000406027B390100047D38010004062A1E02286E0100062A1B300500C304000021000011027B300100040B074503000000050000009D04000080040000389804000002157D30010004027C32010004289100000A2D1C027C32010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C34010004289100000A2D1C027C34010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C36010004289100000A2D1C027C36010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C38010004289100000A2D1C027C38010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C32010004289200000A027C34010004289200000A027C36010004289200000A027C38010004289200000A73F40000067D3A0100040273AC0000067D3B01000402027B3A0100047B7B0000046FC30000067D3B010004027C3C010004FE151700000202027B3B0100046FB000000A7D3E01000402177D30010004382A03000002027B3E0100046F3300000A740A0000027D3D010004027C3C010004027B3D0100046F630000067D94000004027C3C010004027B3D0100046F650000067D95000004027C3C010004027B3D0100046F670000067D96000004027C3C010004027B3D0100046F830000067D97000004027C3C010004027B3D0100046F790000067D98000004027C3C010004027B3D0100046F6B0000067D99000004027C3C010004027B3D0100046F710000067DA2000004027C3C010004027B3D0100046F6F0000067DA3000004027C3C010004027B3D0100046F730000067DA4000004027C3C010004027B3D0100046F7B0000067DA0000004027C3C010004027B3D0100046F7D0000067DA1000004027C3C010004027B3D0100046F690000067D9B000004027C3C010004027B3D0100046F870000067D9C000004027C3C010004027B3D0100046F850000067D9D000004027B3D0100046F6D0000060C120228B300000A2D19027C3C010004206C070000171773A400000A7D9A0000042B1E027C3C010004027B3D0100046F6D0000060D120328B400000A7D9A000004027C3C010004027B3D0100046F770000062D0772921000702B10027B3D0100046F770000066F2C0000067DA6000004027C3C010004027B3D0100046F8F0000067DA7000004027C3C010004027B3D0100046F8B0000067D9F000004027C3C010004027B3D0100046F750000067DA5000004027C3C010004027B3D0100046F890000067D9E000004027C3C010004027B3D0100046F910000067DA8000004027B3D0100046F930000061304120428B100000A2D0E027C3C010004157DA90000042B1F027C3C010004027B3D0100046F930000061305120528B200000A7DA9000004027B3D0100046F950000061306120628B100000A2D0E027C3C010004157DAA0000042B1F027C3C010004027B3D0100046F950000061307120728B200000A7DAA000004027B3D0100046F970000061308120828B300000A2D19027C3C010004206C070000171773A400000A7DAB0000042B1F027C3C010004027B3D0100046F970000061309120928B400000A7DAB00000402027B3C0100048C170000027D2F01000402187D30010004170ADE2802177D30010004027B3E0100046F3600000A3AC6FCFFFF022876010006160ADE07022873010006DC062A00411C00000400000000000000BA040000BA04000007000000000000001E027B2F0100042A1A73B500000A7A001B300200220000000D000011027B300100040A061759450200000001000000010000002ADE07022876010006DC2A00000110000002001800021A0007000000001E027B2F0100042A7A02282400000A02037D300100040228AB00000A6FAC00000A7D310100042AB202157D3001000402027B3E010004752F0000017D3F010004027B3F0100042C0B027B3F0100046F1C00000A2A1330020026000000220000111FFE73750100060A06027D3301000406037D3501000406047D3701000406057D39010004062A0000133002006C0000002300001128AB00000A6FAC00000A027B420100043315027B410100041FFE330B02167D41010004020A2B0716737E0100060A06027B440100047D4301000406027B460100047D4501000406027B480100047D4701000406027B4A0100047D4901000406027B4C0100047D4B010004062A1E0228770100062A133005006804000024000011027B410100040A064502000000050000004A040000384C04000002157D41010004027C43010004289100000A2D1C027C43010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C45010004289100000A2D1C027C45010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C47010004289100000A2D1C027C47010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C49010004289100000A2D1C027C49010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C43010004289200000A027C45010004289200000A027C47010004289200000A027C49010004289200000A73F40000067D4D010004027C4F010004FE151700000202027B4D0100047B7B000004027C4B010004289200000A6FC00000067D4E010004027C4F010004027B4E0100046F630000067D94000004027C4F010004027B4E0100046F650000067D95000004027C4F010004027B4E0100046F670000067D96000004027C4F010004027B4E0100046F830000067D97000004027C4F010004027B4E0100046F790000067D98000004027C4F010004027B4E0100046F6B0000067D99000004027C4F010004027B4E0100046F710000067DA2000004027C4F010004027B4E0100046F6F0000067DA3000004027C4F010004027B4E0100046F730000067DA4000004027C4F010004027B4E0100046F7B0000067DA0000004027C4F010004027B4E0100046F7D0000067DA1000004027C4F010004027B4E0100046F690000067D9B000004027C4F010004027B4E0100046F870000067D9C000004027C4F010004027B4E0100046F850000067D9D000004027B4E0100046F6D0000060B120128B300000A2D19027C4F010004206C070000171773A400000A7D9A0000042B1E027C4F010004027B4E0100046F6D0000060C120228B400000A7D9A000004027C4F010004027B4E0100046F770000062D0772921000702B10027B4E0100046F770000066F2C0000067DA6000004027C4F010004027B4E0100046F8F0000067DA7000004027C4F010004027B4E0100046F8B0000067D9F000004027C4F010004027B4E0100046F750000067DA5000004027C4F010004027B4E0100046F890000067D9E000004027C4F010004027B4E0100046F910000067DA8000004027B4E0100046F930000060D120328B100000A2D0E027C4F010004157DA90000042B1F027C4F010004027B4E0100046F930000061304120428B200000A7DA9000004027B4E0100046F950000061305120528B100000A2D0E027C4F010004157DAA0000042B1F027C4F010004027B4E0100046F950000061306120628B200000A7DAA000004027B4E0100046F970000061307120728B300000A2D19027C4F010004206C070000171773A400000A7DAB0000042B1F027C4F010004027B4E0100046F970000061308120828B400000A7DAB00000402027B4F0100048C170000027D4001000402177D41010004172A02157D41010004162A1E027B400100042A1A73B500000A7A062A1E027B400100042A7A02282400000A02037D410100040228AB00000A6FAC00000A7D420100042A133002002E000000230000111FFE737E0100060A06027D4401000406037D4601000406047D4801000406057D4A010004060E047D4C010004062A0000133002006C0000002500001128AB00000A6FAC00000A027B520100043315027B510100041FFE330B02167D51010004020A2B071673860100060A06027B540100047D5301000406027B560100047D5501000406027B580100047D5701000406027B5A0100047D5901000406027B5C0100047D5B010004062A1E02287F0100062A1B3005001E05000021000011027B510100040B07450300000005000000F8040000DB04000038F304000002157D51010004027C53010004289100000A2D1C027C53010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C55010004289100000A2D1C027C55010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C57010004289100000A2D1C027C57010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C59010004289100000A2D1C027C59010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027C5B010004289100000A2D1C027C5B010004289200000A6F9300000A7E1500000A285900000A2C0B72A6110070739400000A7A02027C53010004289200000A027C55010004289200000A027C57010004289200000A027C59010004289200000A73F40000067D5D01000402739A0000067D5E010004027B5E010004027C5B010004289200000A6F680000060273AC0000067D5F01000402027B5D0100047B7B000004027B5E0100046FC40000067D5F010004027C60010004FE151700000202027B5F0100046FB000000A7D6201000402177D51010004382A03000002027B620100046F3300000A740A0000027D61010004027C60010004027B610100046F630000067D94000004027C60010004027B610100046F650000067D95000004027C60010004027B610100046F670000067D96000004027C60010004027B610100046F830000067D97000004027C60010004027B610100046F790000067D98000004027C60010004027B610100046F6B0000067D99000004027C60010004027B610100046F710000067DA2000004027C60010004027B610100046F6F0000067DA3000004027C60010004027B610100046F730000067DA4000004027C60010004027B610100046F7B0000067DA0000004027C60010004027B610100046F7D0000067DA1000004027C60010004027B610100046F690000067D9B000004027C60010004027B610100046F870000067D9C000004027C60010004027B610100046F850000067D9D000004027B610100046F6D0000060C120228B300000A2D19027C60010004206C070000171773A400000A7D9A0000042B1E027C60010004027B610100046F6D0000060D120328B400000A7D9A000004027C60010004027B610100046F770000062D0772921000702B10027B610100046F770000066F2C0000067DA6000004027C60010004027B610100046F8F0000067DA7000004027C60010004027B610100046F8B0000067D9F000004027C60010004027B610100046F750000067DA5000004027C60010004027B610100046F890000067D9E000004027C60010004027B610100046F910000067DA8000004027B610100046F930000061304120428B100000A2D0E027C60010004157DA90000042B1F02\
-7C60010004027B610100046F930000061305120528B200000A7DA9000004027B610100046F950000061306120628B100000A2D0E027C60010004157DAA0000042B1F027C60010004027B610100046F950000061307120728B200000A7DAA000004027B610100046F970000061308120828B300000A2D19027C60010004206C070000171773A400000A7DAB0000042B1F027C60010004027B610100046F970000061309120928B400000A7DAB00000402027B600100048C170000027D5001000402187D51010004170ADE2802177D51010004027B620100046F3600000A3AC6FCFFFF022887010006160ADE07022884010006DC062A0000411C00000400000000000000150500001505000007000000000000001E027B500100042A1A73B500000A7A001B300200220000000D000011027B510100040A061759450200000001000000010000002ADE07022887010006DC2A00000110000002001800021A0007000000001E027B500100042A7A02282400000A02037D510100040228AB00000A6FAC00000A7D520100042AB202157D5101000402027B62010004752F0000017D63010004027B630100042C0B027B630100046F1C00000A2A133002002E000000250000111FFE73860100060A06027D5401000406037D5601000406047D5801000406057D5A010004060E047D5C010004062A000013300200780000002600001128AB00000A6FAC00000A027B660100043315027B650100041FFE330B02167D65010004020A2B0716738F0100060A06027B680100047D6701000406027B6A0100047D6901000406027B6C0100047D6B01000406027B6E0100047D6D01000406027B700100047D6F01000406027B720100047D71010004062A1E0228880100062A1B3005006A05000021000011027B650100040B074503000000050000004405000027050000383F05000002157D65010004027C67010004289100000A2D1C027C67010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C69010004289100000A2D1C027C69010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C6B010004289100000A2D1C027C6B010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C6D010004289100000A2D1C027C6D010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027C6F010004289100000A2D1C027C6F010004289200000A6F9300000A7E1500000A285900000A2C27027C71010004289500000A2D0F027C71010004289600000A166A330B7202120070739400000A7A02027C67010004289200000A027C69010004289200000A027C6B010004289200000A027C6D010004289200000A73F40000067D730100040273AC0000067D74010004027C6F010004289100000A2D3F027C6F010004289200000A6F9300000A7E1500000A286F00000A2C2302027B730100047B7B000004027C6F010004289200000A6FC50000067D740100042B2102027B730100047B7B000004027C71010004289600000A6FC60000067D74010004027C75010004FE151700000202027B740100046FB000000A7D7701000402177D65010004382A03000002027B770100046F3300000A740A0000027D76010004027C75010004027B760100046F630000067D94000004027C75010004027B760100046F650000067D95000004027C75010004027B760100046F670000067D96000004027C75010004027B760100046F830000067D97000004027C75010004027B760100046F790000067D98000004027C75010004027B760100046F6B0000067D99000004027C75010004027B760100046F710000067DA2000004027C75010004027B760100046F6F0000067DA3000004027C75010004027B760100046F730000067DA4000004027C75010004027B760100046F7B0000067DA0000004027C75010004027B760100046F7D0000067DA1000004027C75010004027B760100046F690000067D9B000004027C75010004027B760100046F870000067D9C000004027C75010004027B760100046F850000067D9D000004027B760100046F6D0000060C120228B300000A2D19027C75010004206C070000171773A400000A7D9A0000042B1E027C75010004027B760100046F6D0000060D120328B400000A7D9A000004027C75010004027B760100046F770000062D0772921000702B10027B760100046F770000066F2C0000067DA6000004027C75010004027B760100046F8F0000067DA7000004027C75010004027B760100046F8B0000067D9F000004027C75010004027B760100046F750000067DA5000004027C75010004027B760100046F890000067D9E000004027C75010004027B760100046F910000067DA8000004027B760100046F930000061304120428B100000A2D0E027C75010004157DA90000042B1F027C75010004027B760100046F930000061305120528B200000A7DA9000004027B760100046F950000061306120628B100000A2D0E027C75010004157DAA0000042B1F027C75010004027B760100046F950000061307120728B200000A7DAA000004027B760100046F970000061308120828B300000A2D19027C75010004206C070000171773A400000A7DAB0000042B1F027C75010004027B760100046F970000061309120928B400000A7DAB00000402027B750100048C170000027D6401000402187D65010004170ADE2802177D65010004027B770100046F3600000A3AC6FCFFFF022890010006160ADE0702288D010006DC062A0000411C00000400000000000000610500006105000007000000000000001E027B640100042A1A73B500000A7A001B300200220000000D000011027B650100040A061759450200000001000000010000002ADE07022890010006DC2A00000110000002001800021A0007000000001E027B640100042A7A02282400000A02037D650100040228AB00000A6FAC00000A7D660100042AB202157D6501000402027B77010004752F0000017D78010004027B780100042C0B027B780100046F1C00000A2A1330020036000000260000111FFE738F0100060A06027D6801000406037D6A01000406047D6C01000406057D6E010004060E047D70010004060E057D72010004062A000013300200600000002700001128AB00000A6FAC00000A027B7B0100043315027B7A0100041FFE330B02167D7A010004020A2B071673980100060A06027B7D0100047D7C01000406027B7F0100047D7E01000406027B810100047D8001000406027B830100047D82010004062A1E0228910100062A1B300500C304000021000011027B7A0100040B074503000000050000009D04000080040000389804000002157D7A010004027C7C010004289100000A2D1C027C7C010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C7E010004289100000A2D1C027C7E010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C80010004289100000A2D1C027C80010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C82010004289100000A2D1C027C82010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027C7C010004289200000A027C7E010004289200000A027C80010004289200000A027C82010004289200000A73F40000067D840100040273AC0000067D8501000402027B840100047B7B0000046FC70000067D85010004027C86010004FE151700000202027B850100046FB000000A7D8801000402177D7A010004382A03000002027B880100046F3300000A740A0000027D87010004027C86010004027B870100046F630000067D94000004027C86010004027B870100046F650000067D95000004027C86010004027B870100046F670000067D96000004027C86010004027B870100046F830000067D97000004027C86010004027B870100046F790000067D98000004027C86010004027B870100046F6B0000067D99000004027C86010004027B870100046F710000067DA2000004027C86010004027B870100046F6F0000067DA3000004027C86010004027B870100046F730000067DA4000004027C86010004027B870100046F7B0000067DA0000004027C86010004027B870100046F7D0000067DA1000004027C86010004027B870100046F690000067D9B000004027C86010004027B870100046F870000067D9C000004027C86010004027B870100046F850000067D9D000004027B870100046F6D0000060C120228B300000A2D19027C86010004206C070000171773A400000A7D9A0000042B1E027C86010004027B870100046F6D0000060D120328B400000A7D9A000004027C86010004027B870100046F770000062D0772921000702B10027B870100046F770000066F2C0000067DA6000004027C86010004027B870100046F8F0000067DA7000004027C86010004027B870100046F8B0000067D9F000004027C86010004027B870100046F750000067DA5000004027C86010004027B870100046F890000067D9E000004027C86010004027B870100046F910000067DA8000004027B870100046F930000061304120428B100000A2D0E027C86010004157DA90000042B1F027C86010004027B870100046F930000061305120528B200000A7DA9000004027B870100046F950000061306120628B100000A2D0E027C86010004157DAA0000042B1F027C86010004027B870100046F950000061307120728B200000A7DAA000004027B870100046F970000061308120828B300000A2D19027C86010004206C070000171773A400000A7DAB0000042B1F027C86010004027B870100046F970000061309120928B400000A7DAB00000402027B860100048C170000027D7901000402187D7A010004170ADE2802177D7A010004027B880100046F3600000A3AC6FCFFFF022899010006160ADE07022896010006DC062A00411C00000400000000000000BA040000BA04000007000000000000001E027B790100042A1A73B500000A7A001B300200220000000D000011027B7A0100040A061759450200000001000000010000002ADE07022899010006DC2A00000110000002001800021A0007000000001E027B790100042A7A02282400000A02037D7A0100040228AB00000A6FAC00000A7D7B0100042AB202157D7A01000402027B88010004752F0000017D89010004027B890100042C0B027B890100046F1C00000A2A1330020026000000270000111FFE73980100060A06027D7D01000406037D7F01000406047D8101000406057D83010004062A0000133002006C0000002800001128AB00000A6FAC00000A027B8C0100043315027B8B0100041FFE330B02167D8B010004020A2B071673A10100060A06027B8E0100047D8D01000406027B900100047D8F01000406027B920100047D9101000406027B940100047D9301000406027B960100047D95010004062A1E02289A0100062A1B3005000205000021000011027B8B0100040B07450300000005000000DC040000BF04000038D704000002157D8B010004027C8D010004289100000A2D1C027C8D010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027C8F010004289100000A2D1C027C8F010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027C91010004289100000A2D1C027C91010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027C93010004289100000A2D1C027C93010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027C95010004289100000A2D1C027C95010004289200000A6F9300000A7E1500000A285900000A2C0B72A6110070739400000A7A02027C8D010004289200000A027C8F010004289200000A027C91010004289200000A027C93010004289200000A73F40000067D970100040273AC0000067D9801000402027B970100047B7B000004027C95010004289200000A6FC80000067D98010004027C99010004FE151700000202027B980100046FB000000A7D9B01000402177D8B010004382A03000002027B9B0100046F3300000A740A0000027D9A010004027C99010004027B9A0100046F630000067D94000004027C99010004027B9A0100046F650000067D95000004027C99010004027B9A0100046F670000067D96000004027C99010004027B9A0100046F830000067D97000004027C99010004027B9A0100046F790000067D98000004027C99010004027B9A0100046F6B0000067D99000004027C99010004027B9A0100046F710000067DA2000004027C99010004027B9A0100046F6F0000067DA3000004027C99010004027B9A0100046F730000067DA4000004027C99010004027B9A0100046F7B0000067DA0000004027C99010004027B9A0100046F7D0000067DA1000004027C99010004027B9A0100046F690000067D9B000004027C99010004027B9A0100046F870000067D9C000004027C99010004027B9A0100046F850000067D9D000004027B9A0100046F6D0000060C120228B300000A2D19027C99010004206C070000171773A400000A7D9A0000042B1E027C99010004027B9A0100046F6D0000060D120328B400000A7D9A000004027C99010004027B9A0100046F770000062D0772921000702B10027B9A0100046F770000066F2C0000067DA6000004027C99010004027B9A0100046F8F0000067DA7000004027C99010004027B9A0100046F8B0000067D9F000004027C99010004027B9A0100046F750000067DA5000004027C99010004027B9A0100046F890000067D9E000004027C99010004027B9A0100046F910000067DA8000004027B9A0100046F930000061304120428B100000A2D0E027C99010004157DA90000042B1F027C99010004027B9A0100046F930000061305120528B200000A7DA9000004027B9A0100046F950000061306120628B100000A2D0E027C99010004157DAA0000042B1F027C99010004027B9A0100046F950000061307120728B200000A7DAA000004027B9A0100046F970000061308120828B300000A2D19027C99010004206C070000171773A400000A7DAB0000042B1F027C99010004027B9A0100046F970000061309120928B400000A7DAB00000402027B990100048C170000027D8A01000402187D8B010004170ADE2802177D8B010004027B9B0100046F3600000A3AC6FCFFFF0228A2010006160ADE0702289F010006DC062A0000411C00000400000000000000F9040000F904000007000000000000001E027B8A0100042A1A73B500000A7A001B300200220000000D000011027B8B0100040A061759450200000001000000010000002ADE070228A2010006DC2A00000110000002001800021A0007000000001E027B8A0100042A7A02282400000A02037D8B0100040228AB00000A6FAC00000A7D8C0100042AB202157D8B01000402027B9B010004752F0000017D9C010004027B9C0100042C0B027B9C0100046F1C00000A2A133002002E000000280000111FFE73A10100060A06027D8E01000406037D9001000406047D9201000406057D94010004060E047D96010004062A0000133002006C0000002900001128AB00000A6FAC00000A027B9F0100043315027B9E0100041FFE330B02167D9E010004020A2B071673AA0100060A06027BA10100047DA001000406027BA30100047DA201000406027BA50100047DA401000406027BA70100047DA601000406027BA90100047DA8010004062A1E0228A30100062A1B3005000205000021000011027B9E0100040B07450300000005000000DC040000BF04000038D704000002157D9E010004027CA0010004289100000A2D1C027CA0010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CA2010004289100000A2D1C027CA2010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CA4010004289100000A2D1C027CA4010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CA6010004289100000A2D1C027CA6010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027CA8010004289100000A2D1C027CA8010004289200000A6F9300000A7E1500000A285900000A2C0B72A6110070739400000A7A02027CA0010004289200000A027CA2010004289200000A027CA4010004289200000A027CA6010004289200000A73F40000067DAA0100040273AC0000067DAB01000402027BAA0100047B7B000004027CA8010004289200000A6FC90000067DAB010004027CAC010004FE151700000202027BAB0100046FB000000A7DAE01000402177D9E010004382A03000002027BAE0100046F3300000A740A0000027DAD010004027CAC010004027BAD0100046F630000067D94000004027CAC010004027BAD0100046F650000067D95000004027CAC010004027BAD0100046F670000067D96000004027CAC010004027BAD0100046F830000067D97000004027CAC010004027BAD0100046F790000067D98000004027CAC010004027BAD0100046F6B0000067D99000004027CAC010004027BAD0100046F710000067DA2000004027CAC010004027BAD0100046F6F0000067DA3000004027CAC010004027BAD0100046F730000067DA4000004027CAC010004027BAD0100046F7B0000067DA0000004027CAC010004027BAD0100046F7D0000067DA1000004027CAC010004027BAD0100046F690000067D9B000004027CAC010004027BAD0100046F870000067D9C000004027CAC010004027BAD0100046F850000067D9D000004027BAD0100046F6D0000060C120228B300000A2D19027CAC010004206C070000171773A400000A7D9A0000042B1E027CAC010004027BAD0100046F6D0000060D120328B400000A7D9A000004027CAC010004027BAD0100046F770000062D0772921000702B10027BAD0100046F770000066F2C0000067DA6000004027CAC010004027BAD0100046F8F0000067DA7000004027CAC010004027BAD0100046F8B0000067D9F000004027CAC010004027BAD0100046F750000067DA5000004027CAC010004027BAD0100046F890000067D9E000004027CAC010004027BAD0100046F910000067DA8000004027BAD0100046F930000061304120428B100000A2D0E027CAC010004157DA90000042B1F027CAC010004027BAD0100046F930000061305120528B200000A7DA9000004027BAD0100046F950000061306120628B100000A2D0E027CAC010004157DAA0000042B1F027CAC010004027BAD0100046F950000061307120728B200000A7DAA000004027BAD0100046F970000061308120828B300000A2D19027CAC010004206C070000171773A400000A7DAB0000042B1F027CAC010004027BAD0100046F970000061309120928B400000A7DAB00000402027BAC0100048C170000027D9D01000402187D9E010004170ADE2802177D9E010004027BAE0100046F3600000A3AC6FCFFFF0228AB010006160ADE070228A8010006DC062A0000411C00000400000000000000F9040000F904000007000000000000001E027B9D0100042A1A73B500000A7A001B300200220000000D000011027B9E0100040A061759450200000001000000010000002ADE070228AB010006DC2A00000110000002001800021A0007000000001E027B9D0100042A7A02282400000A02037D9E0100040228AB00000A6FAC00000A7D9F0100042AB202157D9E01000402027BAE010004752F0000017DAF010004027BAF0100042C0B027BAF0100046F1C00000A2A133002002E000000290000111FFE73AA0100060A06027DA101000406037DA301000406047DA501000406057DA7010004060E047DA9010004062A0000133002006C0000002A00001128AB00000A6FAC00000A027BB20100043315027BB10100041FFE330B02167DB1010004020A2B071673B30100060A06027BB40100047DB301000406027BB60100047DB501000406027BB80100047DB701000406027BBA0100047DB901000406027BBC0100047DBB010004062A1E0228AC0100062A1B300500CE04000021000011027BB10100040B07450300000005000000A80400008B04000038A304000002157DB1010004027CB3010004289100000A2D1C027CB3010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CB5010004289100000A2D1C027CB5010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CB7010004289100000A2D1C027CB7010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CB9010004289100000A2D1C027CB9010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027CB3010004289200000A027CB5010004289200000A027CB7010004289200000A027CB9010004289200000A73F40000067DBD0100040273AC0000067DBE01000402027BBD0100047B7B000004027CBB010004289600000A6FC10000067DBE010004027CBF010004FE151700000202027BBE0100046FB000000A7DC101000402177DB1010004382A03000002027BC10100046F3300000A740A0000027DC0010004027CBF010004027BC00100046F630000067D94000004027CBF010004027BC00100046F650000067D95000004027CBF010004027BC00100046F670000067D96000004027CBF010004027BC00100046F830000067D97000004027CBF010004027BC00100046F790000067D98000004027CBF010004027BC00100046F6B0000067D99000004027CBF010004027BC00100046F710000067DA2000004027CBF010004027BC00100046F6F0000067DA3000004027CBF010004027BC00100046F730000067DA4000004027CBF010004027BC00100046F7B0000067DA0000004027CBF010004027BC00100046F7D0000067DA1000004027CBF010004027BC00100046F690000067D9B000004027CBF010004027BC00100046F870000067D9C000004027CBF010004027BC00100046F850000067D9D000004027BC00100046F6D0000060C120228B300000A2D19027CBF010004206C070000171773A400000A7D9A0000042B1E027CBF010004027BC00100046F6D0000060D120328B400000A7D9A000004027CBF010004027BC00100046F770000062D0772921000702B10027BC00100046F770000066F2C0000067DA6000004027CBF010004027BC00100046F8F0000067DA7000004027CBF010004027BC00100046F8B0000067D9F000004027CBF010004027BC00100046F750000067DA5000004027CBF010004027BC00100046F890000067D9E000004027CBF010004027BC00100046F910000067DA8000004027BC00100046F930000061304120428B100000A2D0E027CBF010004157DA90000042B1F027CBF010004027BC00100046F930000061305120528B200000A7DA9000004027BC00100046F950000061306120628B100000A2D0E027CBF010004157DAA0000042B1F027CBF010004027BC00100046F950000061307120728B200000A7DAA000004027BC00100046F970000061308120828B300000A2D19027CBF010004206C070000171773A400000A7DAB0000042B1F027CBF010004027BC00100046F970000061309120928B400000A7DAB00000402027BBF0100048C170000027DB001000402187DB1010004170ADE2802177DB1010004027BC10100046F3600000A3AC6FCFFFF0228B4010006160ADE070228B1010006DC062A0000411C00000400000000000000C5040000C504000007000000000000001E027BB00100042A1A73B500000A7A001B300200220000000D000011027BB10100040A061759450200000001000000010000002ADE070228B4010006DC2A00000110000002001800021A0007000000001E027BB00100042A7A02282400000A02037DB10100040228AB00000A6FAC00000A7DB20100042AB202157DB101000402027BC1010004752F0000017DC2010004027BC20100042C0B027BC20100046F1C00000A2A133002002E0000002A0000111FFE73B30100060A06027DB401000406037DB601000406047DB801000406057DBA010004060E047DBC010004062A000013300200780000002B00001128AB00000A6FAC00000A027BC50100043315027BC40100041FFE330B02167DC4010004020A2B071673BC0100060A06027BC70100047DC601000406027BC90100047DC801000406027BCB0100047DCA01000406027BCD0100047DCC01000406027BCF0100047DCE01000406027BD10100047DD0010004062A1E0228B50100062A1B3005006A05000021000011027BC40100040B074503000000050000004405000027050000383F05000002157DC4010004027CC6010004289100000A2D1C027CC6010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CC8010004289100000A2D1C027CC8010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CCA010004289100000A2D1C027CCA010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CCC010004289100000A2D1C027CCC010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027CCE010004289100000A2D1C027CCE010004289200000A6F9300000A7E1500000A285900000A2C27027CD0010004289500000A2D0F027CD0010004289600000A166A330B7202120070739400000A7A02027CC6010004289200000A027CC8010004289200000A027CCA010004289200000A027CCC010004289200000A73F40000067DD20100040273AC0000067DD3010004027CCE010004289100000A2D3F027CCE010004289200000A6F9300000A7E1500000A286F00000A2C2302027BD20100047B7B000004027CCE010004289200000A6FCA0000067DD30100042B2102027BD20100047B7B000004027CD0010004289600000A6FCB0000067DD3010004027CD4010004FE151700000202027BD30100046FB000000A7DD601000402177DC4010004382A03000002027BD60100046F3300000A740A0000027DD5010004027CD4010004027BD50100046F630000067D94000004027CD4010004027BD50100046F650000067D95000004027CD4010004027BD50100046F670000067D96000004027CD4010004027BD50100046F830000067D97000004027CD4010004027BD50100046F790000067D98000004027CD4010004027BD50100046F6B0000067D99000004027CD4010004027BD50100046F710000067DA2000004027CD4010004027BD50100046F6F0000067DA3000004027CD4010004027BD50100046F730000067DA4000004027CD4010004027BD50100046F7B0000067DA0000004027CD4010004027BD50100046F7D0000067DA1000004027CD4010004027BD50100046F690000067D9B000004027CD4010004027BD50100046F870000067D9C000004027CD4010004027BD50100046F850000067D9D000004027BD50100046F6D0000060C120228B300000A2D19027CD4010004206C070000171773A400000A7D9A0000042B1E027CD4010004027BD50100046F6D0000060D120328B400000A7D9A000004027CD4010004027BD50100046F770000062D0772921000702B10027BD50100046F77\
-0000066F2C0000067DA6000004027CD4010004027BD50100046F8F0000067DA7000004027CD4010004027BD50100046F8B0000067D9F000004027CD4010004027BD50100046F750000067DA5000004027CD4010004027BD50100046F890000067D9E000004027CD4010004027BD50100046F910000067DA8000004027BD50100046F930000061304120428B100000A2D0E027CD4010004157DA90000042B1F027CD4010004027BD50100046F930000061305120528B200000A7DA9000004027BD50100046F950000061306120628B100000A2D0E027CD4010004157DAA0000042B1F027CD4010004027BD50100046F950000061307120728B200000A7DAA000004027BD50100046F970000061308120828B300000A2D19027CD4010004206C070000171773A400000A7DAB0000042B1F027CD4010004027BD50100046F970000061309120928B400000A7DAB00000402027BD40100048C170000027DC301000402187DC4010004170ADE2802177DC4010004027BD60100046F3600000A3AC6FCFFFF0228BD010006160ADE070228BA010006DC062A0000411C00000400000000000000610500006105000007000000000000001E027BC30100042A1A73B500000A7A001B300200220000000D000011027BC40100040A061759450200000001000000010000002ADE070228BD010006DC2A00000110000002001800021A0007000000001E027BC30100042A7A02282400000A02037DC40100040228AB00000A6FAC00000A7DC50100042AB202157DC401000402027BD6010004752F0000017DD7010004027BD70100042C0B027BD70100046F1C00000A2A13300200360000002B0000111FFE73BC0100060A06027DC701000406037DC901000406047DCB01000406057DCD010004060E047DCF010004060E057DD1010004062A000013300200780000002C00001128AB00000A6FAC00000A027BDA0100043315027BD90100041FFE330B02167DD9010004020A2B071673C50100060A06027BDC0100047DDB01000406027BDE0100047DDD01000406027BE00100047DDF01000406027BE20100047DE101000406027BE40100047DE301000406027BE60100047DE5010004062A1E0228BE0100062A1B3005006A05000021000011027BD90100040B074503000000050000004405000027050000383F05000002157DD9010004027CDB010004289100000A2D1C027CDB010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CDD010004289100000A2D1C027CDD010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CDF010004289100000A2D1C027CDF010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CE1010004289100000A2D1C027CE1010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A027CE3010004289100000A2D1C027CE3010004289200000A6F9300000A7E1500000A285900000A2C27027CE5010004289500000A2D0F027CE5010004289600000A166A330B7202120070739400000A7A02027CDB010004289200000A027CDD010004289200000A027CDF010004289200000A027CE1010004289200000A73F40000067DE70100040273AC0000067DE8010004027CE3010004289100000A2D3F027CE3010004289200000A6F9300000A7E1500000A286F00000A2C2302027BE70100047B7B000004027CE3010004289200000A6FCC0000067DE80100042B2102027BE70100047B7B000004027CE5010004289600000A6FCD0000067DE8010004027CE9010004FE151700000202027BE80100046FB000000A7DEB01000402177DD9010004382A03000002027BEB0100046F3300000A740A0000027DEA010004027CE9010004027BEA0100046F630000067D94000004027CE9010004027BEA0100046F650000067D95000004027CE9010004027BEA0100046F670000067D96000004027CE9010004027BEA0100046F830000067D97000004027CE9010004027BEA0100046F790000067D98000004027CE9010004027BEA0100046F6B0000067D99000004027CE9010004027BEA0100046F710000067DA2000004027CE9010004027BEA0100046F6F0000067DA3000004027CE9010004027BEA0100046F730000067DA4000004027CE9010004027BEA0100046F7B0000067DA0000004027CE9010004027BEA0100046F7D0000067DA1000004027CE9010004027BEA0100046F690000067D9B000004027CE9010004027BEA0100046F870000067D9C000004027CE9010004027BEA0100046F850000067D9D000004027BEA0100046F6D0000060C120228B300000A2D19027CE9010004206C070000171773A400000A7D9A0000042B1E027CE9010004027BEA0100046F6D0000060D120328B400000A7D9A000004027CE9010004027BEA0100046F770000062D0772921000702B10027BEA0100046F770000066F2C0000067DA6000004027CE9010004027BEA0100046F8F0000067DA7000004027CE9010004027BEA0100046F8B0000067D9F000004027CE9010004027BEA0100046F750000067DA5000004027CE9010004027BEA0100046F890000067D9E000004027CE9010004027BEA0100046F910000067DA8000004027BEA0100046F930000061304120428B100000A2D0E027CE9010004157DA90000042B1F027CE9010004027BEA0100046F930000061305120528B200000A7DA9000004027BEA0100046F950000061306120628B100000A2D0E027CE9010004157DAA0000042B1F027CE9010004027BEA0100046F950000061307120728B200000A7DAA000004027BEA0100046F970000061308120828B300000A2D19027CE9010004206C070000171773A400000A7DAB0000042B1F027CE9010004027BEA0100046F970000061309120928B400000A7DAB00000402027BE90100048C170000027DD801000402187DD9010004170ADE2802177DD9010004027BEB0100046F3600000A3AC6FCFFFF0228C6010006160ADE070228C3010006DC062A0000411C00000400000000000000610500006105000007000000000000001E027BD80100042A1A73B500000A7A001B300200220000000D000011027BD90100040A061759450200000001000000010000002ADE070228C6010006DC2A00000110000002001800021A0007000000001E027BD80100042A7A02282400000A02037DD90100040228AB00000A6FAC00000A7DDA0100042AB202157DD901000402027BEB010004752F0000017DEC010004027BEC0100042C0B027BEC0100046F1C00000A2A13300200360000002C0000111FFE73C50100060A06027DDC01000406037DDE01000406047DE001000406057DE2010004060E047DE4010004060E057DE6010004062A000013300200600000002D00001128AB00000A6FAC00000A027BEF0100043315027BEE0100041FFE330B02167DEE010004020A2B071673CE0100060A06027BF10100047DF001000406027BF30100047DF201000406027BF50100047DF401000406027BF70100047DF6010004062A1E0228C70100062A1B300500C304000021000011027BEE0100040B074503000000050000009D04000080040000389804000002157DEE010004027CF0010004289100000A2D1C027CF0010004289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A027CF2010004289100000A2D1C027CF2010004289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A027CF4010004289100000A2D1C027CF4010004289200000A6F9300000A7E1500000A285900000A2C0B72980F0070739400000A7A027CF6010004289100000A2D1C027CF6010004289200000A6F9300000A7E1500000A285900000A2C0B72F60F0070739400000A7A02027CF0010004289200000A027CF2010004289200000A027CF4010004289200000A027CF6010004289200000A73F40000067DF80100040273AC0000067DF901000402027BF80100047B7B0000046FCE0000067DF9010004027CFA010004FE151700000202027BF90100046FB000000A7DFC01000402177DEE010004382A03000002027BFC0100046F3300000A740A0000027DFB010004027CFA010004027BFB0100046F630000067D94000004027CFA010004027BFB0100046F650000067D95000004027CFA010004027BFB0100046F670000067D96000004027CFA010004027BFB0100046F830000067D97000004027CFA010004027BFB0100046F790000067D98000004027CFA010004027BFB0100046F6B0000067D99000004027CFA010004027BFB0100046F710000067DA2000004027CFA010004027BFB0100046F6F0000067DA3000004027CFA010004027BFB0100046F730000067DA4000004027CFA010004027BFB0100046F7B0000067DA0000004027CFA010004027BFB0100046F7D0000067DA1000004027CFA010004027BFB0100046F690000067D9B000004027CFA010004027BFB0100046F870000067D9C000004027CFA010004027BFB0100046F850000067D9D000004027BFB0100046F6D0000060C120228B300000A2D19027CFA010004206C070000171773A400000A7D9A0000042B1E027CFA010004027BFB0100046F6D0000060D120328B400000A7D9A000004027CFA010004027BFB0100046F770000062D0772921000702B10027BFB0100046F770000066F2C0000067DA6000004027CFA010004027BFB0100046F8F0000067DA7000004027CFA010004027BFB0100046F8B0000067D9F000004027CFA010004027BFB0100046F750000067DA5000004027CFA010004027BFB0100046F890000067D9E000004027CFA010004027BFB0100046F910000067DA8000004027BFB0100046F930000061304120428B100000A2D0E027CFA010004157DA90000042B1F027CFA010004027BFB0100046F930000061305120528B200000A7DA9000004027BFB0100046F950000061306120628B100000A2D0E027CFA010004157DAA0000042B1F027CFA010004027BFB0100046F950000061307120728B200000A7DAA000004027BFB0100046F970000061308120828B300000A2D19027CFA010004206C070000171773A400000A7DAB0000042B1F027CFA010004027BFB0100046F970000061309120928B400000A7DAB00000402027BFA0100048C170000027DED01000402187DEE010004170ADE2802177DEE010004027BFC0100046F3600000A3AC6FCFFFF0228CF010006160ADE070228CC010006DC062A00411C00000400000000000000BA040000BA04000007000000000000001E027BED0100042A1A73B500000A7A001B300200220000000D000011027BEE0100040A061759450200000001000000010000002ADE070228CF010006DC2A00000110000002001800021A0007000000001E027BED0100042A7A02282400000A02037DEE0100040228AB00000A6FAC00000A7DEF0100042AB202157DEE01000402027BFC010004752F0000017DFD010004027BFD0100042C0B027BFD0100046F1C00000A2A13300200260000002D0000111FFE73CE0100060A06027DF101000406037DF301000406047DF501000406057DF7010004062A0000133002002C0000002E00001102A5180000020A0312007BAC000004289C00000A81110000010412007BAD000004289C00000A81110000012A1B300400180100002F0000110F00289100000A2D180F00289200000A6F9300000A7E1500000A285900000A2C0B72D60E0070739400000A7A0F01289100000A2D180F01289200000A6F9300000A7E1500000A285900000A2C0B72340F0070739400000A7A0F02289100000A2D180F02289200000A6F9300000A7E1500000A285900000A2C0B727A120070739400000A7A0F03289100000A2D180F03289200000A6F9300000A7E1500000A285900000A2C0B72D2120070739400000A7A73D90000060A0F00289200000A0F01289200000A0F02289200000A0F03289200000A28F20000060ADE0D0B076F4400000A739400000A7A1202FE15180000021202066FCF0000067DAC0000041202066FD10000067DAD00000473B700000A0D09086FB800000A092A011000000000B60024DA000D070000011E02282400000A2A1E027BAE0000042A2202037DAE0000042A6A0228180100062C0C0228180100066F170000062A7E1500000A2A3E0203289400000A020428190100062A4202030528B900000A020428190100062AD202281D00000A2C067E1500000A2A02722A1300701728BA00000A2D067E1500000A2A02724E1300701728BB00000A6F4300000A2A1E02282400000A2A3E02037269020070282001000626032A00001B3008000902000030000011140B7282130070036F15000006288600000A036F1900000604036F0B000006036F0D000006036F0F000006036F1100000628E90000060BDE690C086FBC00000A6FBD00000A72BC130070285900000A2C0B72D813007073BE00000A7A086F4400000A0308731C0100067A0D030928210100060373AC0000066F200000060373620000066F1E00000603130BDD76010000130411046F4400000A031104731C0100067A076FBF00000A72DB1400706FC000000A281D00000A2D2003076FBF00000A72DB1400706FC000000A28C100000A73C200000A6F22000006076FBF00000A72011500706FC000000A281D00000A2D2003076FBF00000A72011500706FC000000A28C100000A73C200000A6F24000006076FBF00000A722F1500706FC000000A281D00000A2D390320B2070000171716161616737200000A130C120C076FBF00000A722F1500706FC000000A28C300000A28C400000A73C500000A6F26000006076F3D00000A130572921000701306110528C600000A73C700000A0A066F3F00000A1306066FC800000A110672551500706F5B00000A2D13725515007011067259150070285E00000A130673C900000A130773CA00000A1308110773CB00000A1309110873CC00000A130A03110A110911066FCD00000A6FCE00000A6F18000006DE0C11052C0711056F1C00000ADC020328220100061001DE0A072C06076FCF00000ADC032A110B2A000000417C00000000000002000000370000003900000031000000660000010000000002000000370000006A000000260000000800000100000000020000003700000090000000120000000700000102000000680100007B000000E30100000C0000000000000002000000A200000058010000FA0100000A00000000000000133003002501000031000011036FD000000A1D330F036FD100000A6FD200000A166A330E036F4400000A0203731C0100067A036FD100000A740E0000010A066FD200000A166A311D066F3D00000A28C600000A73C700000A0B02076F3F00000A6F1800000602036F1C000006026F1700000673320100060C086F310100062C1B086F2F010006201001000033012A086F3001000602731B0100067A066FD300000A0D0920300100003B830000000920900100005945050000001E00000031000000550000001E000000630000000920F40100005945040000002100000039000000210000002D0000002B37026F17000006281D0100060203731C0100067A725D15007002731B0100067A728715007002731B0100067A72CB15007002731B0100067A036F4400000A0203731C0100067A2A00000013300300EA00000032000011032C12036F170000067E1500000A285900000A2C02142A73D400000A0A06036F170000066FD500000A066FD600000A39AE000000036F090000060B07450600000002000000150000003B00000028000000580000006B0000002B7C03066FD600000A28240100066F1E0000062B7403066FD600000A28290100066F200000062B6103066FD600000A28270100066F1E0000062B4E03066FD600000A72351600706FD700000A282A0100066F200000062B3103066FD600000A282B0100066F200000062B1E03066FD600000A28250100066F1E0000062B0B7259160070739400000A7A032823010006032A00001B3002006F01000033000011026F210000060C120228B100000A2D22026F230000060D120328B100000A2D12026F250000061304120428B300000A2D012A026F1D0000063993000000026F1D000006026F210000066F56000006026F1D000006026F230000066F58000006026F1D000006026F250000066F5A000006026F1D0000066FB000000A13052B3111056F3300000A74080000020A06026F210000066F4F00000606026F230000066F5100000606026F250000066F5300000611056F3600000A2DC6DE151105752F000001130611062C0711066F1C00000ADC026F1F0000063993000000026F1F000006026F210000066F9C000006026F1F000006026F230000066F9E000006026F1F000006026F250000066FA0000006026F1F0000066FB000000A13072B3111076F3300000A740A0000020B07026F210000066F9400000607026F230000066F9600000607026F250000066F9800000611076F3600000A2DC6DE151107752F000001130811082C0711086F1C00000ADC2A00011C000002007D003EBB00150000000002001B013E590115000000001B300400760000003400001173620000060A0272951600706FD800000A6FD900000A0D2B3D096F3300000A74180000010B060728260100066F5D00000626DE220C72AD160070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A0000011C0000000025000F340022070000010200170049600014000000001B300400760000003400001173620000060A0272D31600706FD800000A6FD900000A0D2B3D096F3300000A74180000010B060728260100066F5D00000626DE220C7207170070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A0000011C0000000025000F340022070000010200170049600014000000001B300400DD0200003500001173540000060A06166F3F000006022D02142A060272290200706FDC00000A6FDD00000A28DE00000A6F2B0000060602723B1700706FDC00000A6FDD00000A282D0100066F290000060602721F0200706FDC00000A6FDD00000A6F2D000006060272511700706FDC00000A6FDD00000A6F2F00000602725F1700706FDC00000A6FDD00000A120128DF00000A2C0906076F330000062B0706166F3300000602725B0300706FDC00000A6FDD00000A7E1500000A286F00000A2C1B0602725B0300706FDC00000A6FDD00000A28DE00000A6F370000060272731700706FDC00000A6FDD00000A7E1500000A286F00000A2C1B060272731700706FDC00000A6FDD00000A28DE00000A6F3900000602729B1700706FDC00000A6FDD00000A120228DF00000A2606086F35000006060272AF1700706FDC00000A282C0100066F3B0000060272B91700706FDC00000A2C16060272B91700706FDC00000A282C0100066F3B0000060272C71700706FDC00000A2C16060272C71700706FDC00000A282C0100066F3D0000060272DB1700706FDC00000A6FDD00000A7E1500000A286F00000A2C7A0272DB1700706FDC00000A0D060972290200706FDC00000A6FDD00000A6F41000006060972E71700706FDC00000A6FDD00000A6F43000006060972F11700706FDC00000A6FDD00000A6F45000006060972051800706FDC00000A6FDD00000A6F470000060609721B1800706FDC00000A6FDD00000A6F4900000602722B1800706FDC00000A39AF00000002722B1800706FDC00000A6FDD00000A7E1500000A286F00000A3990000000161304188D2C000001130502722B1800706FDC00000A72431800706FE000000A6FD900000A13072B1F11076F3300000A7419000001130611051104251758130411066FDD00000AA211076F3600000A2DD8DE151107752F000001130811082C0711086F1C00000ADC061105169A28C300000A739A00000A6F4D000006061105179A28C300000A739A00000A6F4B000006062A00000001100000020072022C9E0215000000001B300400760000003400001173620000060A0272951600706FD800000A6FD900000A0D2B3D096F3300000A74180000010B060728280100066F5D00000626DE220C724D180070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A0000011C0000000025000F3400220700000102001700496000140000000013300300EC00000036000011022D02142A73540000060A06176F3F000006060272290200706FDC00000A6FDD00000A28DE00000A6F2B0000060602723B1700706FDC00000A6FDD00000A282D0100066F290000060602721F0200706FDC00000A6FDD00000A6F2D00000602729B1700706FDC00000A2C3702725B0300706FDC00000A6FDD00000A7E1500000A286F00000A2C1B0602729B1700706FDC00000A6FDD00000A28E100000A6F35000006060272B91700706FDC00000A282C0100066F3B000006060272791800706FDC00000A6FDD00000A28C100000A6A6F31000006060272C71700706FDC00000A282C0100066F3D000006062A1B3004007B00000037000011022D02142A73AC0000060A0272951600706FD800000A6FD900000A0D2B3D096F3300000A74180000010B0607282C0100066FA700000626DE220C7293180070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A00011C000000002A000F3900220700000102001C0049650014000000001B3004007B00000037000011022D02142A73AC0000060A0272AD1800706FD800000A6FD900000A0D2B3D096F3300000A74180000010B0607282C0100066FA700000626DE220C72BB180070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A00011C000000002A000F3900220700000102001C0049650014000000001B3004007B00000037000011022D02142A73AC0000060A0272DD1800706FD800000A6FD900000A0D2B3D096F3300000A74180000010B0607282C0100066FA700000626DE220C72FF180070086F4400000A72CD160070076FDA00000A28DB00000A739400000A7A096F3600000A2DBBDE1409752F000001130411042C0711046F1C00000ADC062A00011C000000002A000F3900220700000102001C004965001400000000133003001203000038000011022D02142A739A0000060A060272290200706FDC00000A6FDD00000A28DE00000A6F64000006060272E71700706FDC00000A6FDD00000A6F66000006060272070200706FDC00000A6FDD00000A6F68000006060272271900706FDC00000A6FDD00000A6F6A000006060272391900706FDC00000A6FDD00000A6F6C0000060602723B1700706FDC00000A6FDD00000A282D01000673C500000A6F6E000006060272511900706FDC00000A6FDD00000A28E100000A6F7A000006060272631900706FDC00000A6FDD00000A6F7C000006060272871900706FDC00000A6FDD00000A6F7E0000060602728F1900706FDC00000A6FDD00000A6F80000006060272C91900706FDC00000A6FDD00000A28E100000A6F82000006060272F91900706FDC00000A6FDD00000A28E100000A6F8400000602720D1A00706FDC00000A6FDD00000A120128E200000A2C0C060773C200000A6F86000006060272231A00706FDC00000A6FDD00000A6F88000006060272371A00706FDC00000A6FDD00000A28E100000A6F8A0000060602724F1A00706FDC00000A6FDD00000A6F8C0000060272591A00706FDC00000A6FDD00000A281D00000A2D1B060272591A00706FDC00000A6FDD00000A28E100000A6F8E0000060272751A00706FDC00000A6FDD00000A281D00000A2D1B060272751A00706FDC00000A6FDD00000A28E100000A6F900000060272891A00706FDC00000A2C1B060272891A00706FDC00000A6FDD00000A28E100000A6F920000060272971A00706FDC00000A2C1D060272971A00706FDC00000A6FDD00000A28C100000A6F700000062B0706156F700000060272B71A00706FDC00000A2C1D060272B71A00706FDC00000A6FDD00000A28C100000A6F720000062B0706156F720000060272D31A00706FDC00000A2C1D060272D31A00706FDC00000A6FDD00000A28C100000A6F740000062B0706156F740000060272F11A00706FDC00000A2C1D060272F11A00706FDC00000A6FDD00000A28C100000A6F760000062B0706156F7600000602724D0300706FDC00000A2C160602724D0300706FDC00000A28260100066F78000006062A000013300500BD00000039000011720B1B007073E300000A0A06026FE400000A0B72541C00701C8D040000010D0916076F4100000A72841C00706F4200000A6F4300000AA20917076F4100000A72981C00706F4200000A6F4300000AA20918076F4100000A72A01C00706F4200000A6F4300000AA20919076F4100000A72AA1C00706F4200000A6F4300000AA2091A076F4100000A72B41C00706F4200000A6F4300000AA2091B076F4100000A72C21C00706F4200000A6F4300000AA20928E500000A28E600000A0C082A92026FE700000A2C0902036FDC00000A2D067E1500000A2A02036FDC00000A6FE800000A2A1E027BB00000042A1E027BB10000042A1E027BB20000042A000003300400430000000000000002282400000A0372D01C00701728BB00000A6F4300000A027CB000000428E200000A2C1E02177DB2000004020372081D00701728BB00000A6F4300000A7DB10000042A0042534A4201000100000000000C00000076322E302E35303732370000000005006C00000038560000237E0000A45600005035000023537472696E677300000000F48B0000481D0000235553003CA900001000000023475549440000004CA90000406B000023426C6F620000000000000002000001579FA20B0902000000FA25330016000001000000740000002E000000FD010000CF010000B80100005A000000E8000000140000002402000001000000390000001C0000007E000000D40000007E0000001200000001000000060000001500000000000A00010000000000060013020C02060018020C02060045022A02060052020C0206006C02590206007B020C02060085020C020A0031052605060098050C020600ED050C020600B41559020600FC160C020A001E180C020A00381826050A00871868180E00761961190E007F1961190E00891961190E00C81961190E00D41961190E00DF1961190600FD1959021200341A00001600341C291C1600651C291C0E00631E481E0600981E791E06003F1F2D1F0600561F2D1F0600731F2D1F0600921F2D1F0600AB1F2D1F0600C41F2D1F0600DF1F2D1F0600FA1F2D1F06001320791E06002720791E060035202D1F06004E202D1F06008B206B200600AB206B200600DA206B200600F5200C02060015210C020F0022210000B7003921000006006E210C02060090210C020600A5212D1F0600BC2159020600CB2159020600D72159020600E3210C020600FD210C020A0013222605060029221F22060042221F2206004F221F220A00642268180A006A2268180A00852268180A008B2268180600B2229D220600D1220C020A0004236818060027231B230F0039210000060049232A020A00602326050A006E23260506009A238A230A00D82326050A00EA2326050A\
-00272426050A00662447240A009E242A020600B1242A023301392100000600BF240C020600F2240C0206001B250C02060022250C02060032250C0206003E250C0206006125442506006A251B230600862544250600A12544250600F825791E06000E26791E060020262D1F06003E262D1F060053260C020E008526481E0600C8262A020600D6262A0206009C2989290600C529B4290600572A0C0206003D332A020A0044336818060059338A2306006B330C02060083332D1F1A00D633C1331A00E933C1331A000834FC331A001E3413341A002834C1331A00423435341A005634C1330A00693426050A008E3426051600AC34291C1600E534291C060018350C020000000001000000000001000100010100001F003D000500010001000100100053003D000900050001000101000074003D00050007000600012010008A003D00060011000600010100009C003D0005001100090001201000BB003D0011001800090001201000CE003D0011002700280001201000DC003D0015003D00550001201000F4003D001100400063000120100000013D0015005B009B000100100016013D0011006000AD000100100032013D0011006400B2000100100047013D0011006800BF00010010005A013D0011006C00CF00012010006D013D0011007100DA008101100079013D0011007500E3008101100086013D0011007600F2000801100093013D0019007600F300010010009D013D0011007900F40001001000A501000011007C00F6000B011000AD01000019007C0018010B011000BB0100001900940018010B011000C80100001900AC00180101001000D2013D001D00AE00180100001000E7013D001100AF001E0100001000F6013D001100B0002F0103011000AF2600001100B300330100000000F22900001100C8003C0103011000812A00001100C9003C01030110001C2B00001100DE00450103011000652B00001100EE004D0103011000B32B00001100FE00550103011000022C000011000E015D0103011000492C000011001E01650103011000DF2C000011002F016E0103011000732D000011004001770103011000D62D0000110050017F0103011000902E000011006401880103011000322F000011007901910103011000C52F000011008A019A01030110005830000011009D01A30103011000ED3000001100B001AC0103011000853100001100C301B50103011000173200001100D801BE0103011000AB3200001100ED01C70106068F0212005680970215005680B00215005680C002150001000E03460001002903150006068F02120056805203460056805503460056805B03460056806303460056806903460056806F03460056807403460056807B03460056808603460006068F0212005680A00382005680A70382005680AD0382005680B70382005680C60382005680D303820001001C06820001004B06F20001006806F20001008806F2000100A506F2000100C806F2000100E006F2000100FB06F20001001507F50001003107FD0001005407010101006E0705010100850709010100A00709010100C40710010100D70A83010100F00A87010100040BF2000100C806F20001001A0B87010100370B8A010100540B8A010100710B87010100940B87010100B50B8D010100D20B8D010100ED0B8A0101000E0CF2000100270CF2000100420CF2000100610CF20001007C0CF20001009A0C91010100B90C91010100850709010100A00709010100C40710010100850709010100A00709010100C40710010100F00A87010100FB10F20001001511F20001003111F20001004B11F2000100681110010100831112000100A61112000100C71112000100E911120001001812E501010030128A0101004C12F20001006D12F20001008912F2000100B4128A010100DB128A010100F812090101001313F20001002D138A0101004B13F200010065138A01010084138A0101009F138A010100850709010100A00709010100C40710010100850709010100A00709010100C407100101002515870101004115870121007B15F20021008715F20021009615F2002100A215F20021007B15F20021008715F20021009615F2002100A215F20021007B15F20021008715F20021009615F2002100A215F20001004817F20001005F17F20001007C176E0201001511F20001009417F20001008806F2000100A506F20001004B06F20001006806F2005180E417F20036003319120036003919120036003F1912000600B703EE0206003014F20206004519F6020600520387010600D90C830106000A0D870106001C0D87010600FE0C8A010600F20C8A0106003B08F2000600E10CF2000600E60C87010600A314F20006007B03F2000600B713F2000600740387010600C013F2000600460DF20006004E0DF2000600580DF2000600660DF2000600700DF20006007D0D910106008B0D910106007B0812000600850812000600980883010600520387010600B713F20006007B03F20006008D148A01060037148A010600C913F20006002E1B83010600C013F2000600A314F2000600991409010600AC148A010600B914F20006004214F20006005214F2000600381B12000600DF1312000600011412000600121412000600451BF2000600501B8A010600DA148A0106007B08120006008508120006009808830106001D08F20006002908F2000100991B60045180C91BF2000100071D120001000E1DF2000100181D8A0101005527F40C0100EA2712000100F527120006000208F20006003528F20006000E08F20006004628F20006001D08F20006005A28F20006002908F20006006B28F2000600A51EF20006008228F2000600831DF70C06009328F70C0600AB28FB0C0600BA2801010600DA28FF0C0600EA28E50106000029030D06000B29080D1300372A1C0D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B0600831D362B06009328362B0600A12AFB0C0600B02A01010600D02AFF0C0600E02AE5010600F62A030D0600012B080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B06002D2BFB0C06003D2BE5010600542BFF0C01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B06007B2BFB0C06008B2BE5010600A22BFF0C01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B0600CA2BFB0C0600DA2BE5010600F12BFF0C01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B0600112CFB0C0600212CE5010600382CFF0C01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06005D2CFF0C06006E2C050106008D2C273E0600A32C8D010600B82C030D0600C42C080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600F12CFF0C0600022D05010600212D273E0600372D8D0106004C2D030D0600582D080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B11E2E2B0600822D2E2B06009A2DFF0C0600AB2D8D010600C02D273E01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B0600F82DFF0C0600092E8D0106001F2E050106003E2E273E0600542E8D010600692E030D0600752E080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B06007403322B0600A42E322B0600B02EFF0C0600C12E05010600E02E273E0600F62E8D0106000B2F030D0600172F080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600432FFF0C0600542F05010600732F273E0600892F8D0106009E2F030D0600AA2F080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B0600D62FFF0C0600E72F050106000630273E06001C308D0106003130030D06003D30080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B06006B30FF0C06007C30050106009B30273E0600B1308D010600C630030D0600D230080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600B61D322B0600932A322B06000331FF0C06001431050106003331273E060049318D0106005E31030D06006A31080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B06007403322B0600A42E322B06009531FF0C0600A63105010600C531273E0600DB318D010600F031030D0600FC31080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B06007B032E2B0600E82D2E2B06007403322B0600A42E322B06002932FF0C06003A32050106005932273E06006F328D0106008432030D06009032080D01005527F40C0100EA2712000100F5271200060002082E2B060035282E2B06000E082E2B060046282E2B06001D082E2B06005A282E2B060029082E2B06006B282E2B0600BB32FF0C0600CC3205010600EB32273E060001338D0106001633030D06002233080DD020000000008608D60228000100D820000000008608E4022D000100E120000000008608F20233000200E920000000008608FD0238000200F22000000000861808033E00030008210000000086008D037200050088220000000086009C0377000600D62200000000861808037E000800DE22000000008308E60386000800E62200000000830808048B000800EF220000000086082A0491000900F7220000000086083A049500090000230000000086084A0491000A0008230000000086085D0495000A001123000000008608700491000B001923000000008608800495000B002223000000008608900491000C002A23000000008608A60495000C003323000000008608BC0491000D003B23000000008608C70495000D004423000000008608D20491000E004C23000000008608E00495000E005523000000008608EE0491000F005D23000000008608FB0495000F00662300000000860808059A0010006E230000000086081705A300100077230000000086083E05AD0011007F230000000086085405B200110088230000000086086A05B800120090230000000086087705BD00120099230000000086088405C3001300A1230000000086088E05C8001300AA23000000008608A305CE001400B223000000008608B105D6001400BB23000000008608BF05CE001500C323000000008608D605D6001500CC23000000008608F605DF001600D4230000000086080906E8001600DD2300000000861808037E001700E523000000008608A7084A011700ED23000000008608B3084F011700F623000000008608BF0855011800FE23000000008608C608590118000724000000008608CD08910019000F24000000008608D608950019001824000000008608BC0491001A002024000000008608C70495001A002924000000008608DF0855011B003124000000008608EF0859011B003A24000000008608FF085E011C0042240000000086080F0962011C004B240000000086081F095E011D0053240000000086082F0962011D005C240000000086083F0955011E006424000000008608550959011E006D240000000086086B0955011F0075240000000086087F0959011F007E240000000086089309670120008624000000008608A3096C0120008F24000000008608B309670121009724000000008608C1096C012100A024000000008608CF095E012200A824000000008608E30962012200B124000000008608F70991002300B924000000008608030A95002300C2240000000086080F0A91002400CA240000000086081D0A95002400D3240000000086082B0A91002500DB240000000086083D0A95002500E4240000000086084F0A91002600EC240000000086085D0A95002600F5240000000086086B0A91002700FD240000000086087C0A9500270006250000000086088D0A720128000E250000000086089F0A7A0128001725000000008608B10A720129001F25000000008608C40A7A0129002825000000008608A305CE002A003025000000008608B105D6002A003925000000008608BF05CE002B004125000000008608D605D6002B004A25000000008608F605DF002C0052250000000086080906E8002C005B2500000000861808037E002D006325000000008608A305CE002D006B25000000008608B105D6002D007425000000008608BF05CE002E007C25000000008608D605D6002E008525000000008608F605DF002F008D250000000086080906E8002F0096250000000086089A0DB2013000A925000000008608A30DB8013100B8250000000086009C03BF013300C625000000008600AC0DBF013400D425000000008600B40DB8013500E325000000008600BB0DC5013700F125000000008600C20DCB013800FF2500000000861808037E0039000726000000008608BF08550139000F26000000008608C608590139001826000000008608D00D91003A002026000000008608DD0D95003A002926000000008608EA0D91003B003126000000008608F90D95003B003A26000000008608080E91003C004226000000008608150E95003C004B26000000008608220E91003D005326000000008608320E95003D005C26000000008608420EDF003E006426000000008608500EE8003E006D260000000086085E0ED7013F007526000000008608740EDB013F007E260000000086088A0ED701400086260000000086089E0EDB0140008F26000000008608B20ED70141009726000000008608C70EDB014100A026000000008608DC0ED7014200A826000000008608FE0EDB014200B126000000008608200FE0014300B9260000000086082B0FC5014300C226000000008608360F5E014400CA26000000008608450F62014400D326000000008608540F91004500DB26000000008608680F95004500E4260000000086087C0F91004600EC260000000086088B0F95004600F5260000000086089A0F91004700FD26000000008608B80F950047000627000000008608D60F5E0148000E27000000008608F00F6201480017270000000086080A105E0149001F270000000086081A106201490028270000000086082A10CE004A0030270000000086083810D6004A003927000000008608461091004B004127000000008608531095004B004A2700000000860860105E014C005227000000008608711062014C005B27000000008608821091004D0063270000000086088F1095004D006C270000000086089C105E014E007427000000008608AE1062014E007D27000000008608C0105E014F008527000000008608CE1062014F008E27000000008608DC105E0150009627000000008608E710620150009F27000000008608A305CE005100A727000000008608B105D6005100B027000000008608BF05CE005200B827000000008608D605D6005200C127000000008608F605DF005300C9270000000086080906E8005300D22700000000C600F21091005400EE2700000000861808037E005400F627000000008608A305CE005400FE27000000008608B105D60054000728000000008608BF05CE0055000F28000000008608D605D60055001828000000008608F605DF00560020280000000086080906E80056002928000000008608E114550157003128000000008608F014590157003A28000000008608FF145501580042280000000086081215590158004B280000000086089A0DF20159005E28000000008608A30DF8015A006D280000000086009C03FF015C007B28000000008600AC0DFF015D008928000000008600B40DF8015E009828000000008600BB0D6C016000A628000000008600C20D05026100B42800000000861808037E006200BC28000000008618080311026200E428000000008600B70319026600CC29000000008600BE1519026700B42A000000008600D11520026800502B000000008600D51527026A00E62B000000008618080311026B000C2C000000008600DD1519026F00F42C000000008600EA1519027000DC2D000000008600F71519027100C42E00000000860000162D027200C42F000000008600D515270276004430000000008600071627027700DC300000000086000C1619027800C4310000000086001E16270279005C320000000086002D1627027A00F4320000000086003D1619027B00DC330000000086004A1642027C00D434000000008600531627027E005835000000008618080311027F00803500000000860007164A02830018360000000086005B165002840098360000000086006716C300850008370000000086007116C30085007837000000008600791656028500043800000000860084165D0286008C3800000000860084165002870018390000000086009116C3008800883900000000860098165D028800103A000000008600A2165D028900983A000000008600AE165D028A00203B000000008600AE1650028B00AC3B000000008600B7165D028C00343C000000008600B71650028D00C03C000000008600C216C3008E002E3D000000008608C81691008E00363D000000008608D21695008E003F3D000000008608DC1691008F00473D000000008608EC1695008F00503D000000008608041763029000583D0000000086080F1768029000613D000000008608EA0D91009100693D000000008608F90D95009100723D0000000086081A17910092007A3D000000008608311795009200833D00000000861808037E0093008B3D000000008608700491009300933D0000000086088004950093009C3D000000008608900491009400A43D000000008608A60495009400AD3D0000000086082A0491009500B53D0000000086083A0495009500BE3D0000000086084A0491009600C63D0000000086085D0495009600CF3D00000000861808037E009700D73D000000009600F2178A029700E83D000000009600F21791029900EC3E000000009600021899029C0038400000000096001118A202A000E6400000000096002218A702A100F0400000000096002218AD02A20040410000000093004818B402A400CC430000000091008D18C502AB00DC43000000009100A018CB02AC008044000000009100B718CB02AD008445000000009100D318D502AE00D045000000009100E518D502AE000446000000009100F318D902AE0060470000000091000C19E802B300F8470000000091001919CB02B400AC4800000000960023199902B500244A00000000911819260609B9007C4A00000000861808031102B900B44A0000000093004A19D502BD00104B0000000096000016FA02BD00704C00000000960093190F03C500804D000000009600A1191E03CA00B04E000000009600B3190F03D000C04F000000009100E8192F03D500A458000000009100091A7C03EE00E858000000009600431A9103F400D459000000009600531A9103F900C05A0000000096005F1A9103FE00AC5B0000000096006F1A91030301985C0000000096007B1A91030801845D000000009600881A91030D01705E000000009600981A910312015465000000009600A81AA0031701806A000000009600B41AB1031D01A46F0000000096001E16B1032201C8740000000096002D16B1032701EC790000000096005316B1032C01287A000000009100BE1AC0033101A882000000009600D21A0D044A01E088000000009600DF1A0D044E01408E000000009600EA1A1A045201E89400000000960079161A045701E89B000000009600841629045C0130A2000000009600F21A0D046201B4A800000000960098161A04660140AF000000009600A2161A046B0198B5000000009600FC1AB103700198BC000000009600AE1629047501A0C3000000009600B71629047B01E8C90000000096000B1B0D0481011CCA000000009100141B3A04850154CA000000009600281B0D04880188CB00000000861808037E008C0190CB0000000086085C1B45048C0198CB0000000086086C1B4A048C01A1CB0000000086087C1B91008D01BCCB000000008618080350048D01CCCB000000008618080357048F01DDCB000000009600871BA202920112CC00000000861808037E0093011ACC000000008600D81BA20493012CCC000000008600D81BA9049401C0CE000000009100EA1BB1049601F4CF000000008100FD1BA2049801ECD00000000091000F1CB904990184D20000000091003F1CBF049A0124D30000000091004D1CBF049B01C4D30000000091006D1CC6049C01C0D60000000091007D1CBF049D0160D7000000009100911CC6049E0158D8000000009100A81CCD049F01FCD8000000009100B31CD404A001A0D9000000009100C21CCD04A10144DA000000009100D41CDB04A20164DD000000009100E21CE204A3012DDE000000009100F21CE804A40152DE000000008608291DD701A6015ADE000000008608321D9100A60162DE0000000086083E1D5E01A6016CDE00000000861808039500A601345200000000E101E426E10CA701B85200000000E10128276806A701C05200000000E10165215E01A701005800000000E10962276E06A701085800000000E101A4277E00A701105800000000E101CF277E00A701505800000000E1090A286E06A70158580000000086180803DB01A701775800000000810016297E00A8015C5F00000000E101E426E10CA801E05F00000000E10128276806A801E85F00000000E10165215E01A801B06400000000E10962276E06A801B86400000000E101A4277E00A801C06400000000E101CF277E00A801006500000000E1090A286E06A80108650000000086180803DB01A80127650000000081000D2B7E00A901986500000000E101E426E10CA901106600000000E10128276806A901186600000000E10165215E01A901486A00000000E10962276E06A901506A00000000E101A4277E00A901576A00000000E101CF277E00A901596A00000000E1090A286E06A901616A0000000086180803DB01A901BC6A00000000E101E426E10CAA01346B00000000E10128276806AA013C6B00000000E10165215E01AA016C6F00000000E10962276E06AA01746F00000000E101A4277E00AA017B6F00000000E101CF277E00AA017D6F00000000E1090A286E06AA01856F0000000086180803DB01AA01E06F00000000E101E426E10CAB01587000000000E10128276806AB01607000000000E10165215E01AB01907400000000E10962276E06AB01987400000000E101A4277E00AB019F7400000000E101CF277E00AB01A17400000000E1090A286E06AB01A9740000000086180803DB01AB01047500000000E101E426E10CAC017C7500000000E10128276806AC01847500000000E10165215E01AC01B47900000000E10962276E06AC01BC7900000000E101A4277E00AC01C37900000000E101CF277E00AC01C57900000000E1090A286E06AC01CD790000000086180803DB01AC01A47C00000000E101E426E10CAD01107D00000000E10128276806AD01187D00000000E10165215E01AD01048200000000E10962276E06AD010C8200000000E101A4277E00AD01148200000000E101CF277E00AD01548200000000E1090A286E06AD015C820000000086180803DB01AD017B82000000008100D02C7E00AE01DC8200000000E101E426E10CAE01488300000000E10128276806AE01508300000000E10165215E01AE013C8800000000E10962276E06AE01448800000000E101A4277E00AE014C8800000000E101CF277E00AE018C8800000000E1090A286E06AE0194880000000086180803DB01AE01B388000000008100642D7E00AF01148900000000E101E426E10CAF018C8900000000E10128276806AF01948900000000E10165215E01AF01088E00000000E10962276E06AF01108E00000000E101A4277E00AF01178E00000000E101CF277E00AF01198E00000000E1090A286E06AF01218E0000000086180803DB01AF017C8E00000000E101E426E10CB001F48E00000000E10128276806B001FC8E00000000E10165215E01B001449400000000E10962276E06B0014C9400000000E101A4277E00B001549400000000E101CF277E00B001949400000000E1090A286E06B0019C940000000086180803DB01B001BB94000000008100812E7E00B101249500000000E101E426E10CB101A89500000000E10128276806B101B09500000000E10165215E01B101449B00000000E10962276E06B1014C9B00000000E101A4277E00B101549B00000000E101CF277E00B101949B00000000E1090A286E06B1019C9B0000000086180803DB01B101BB9B000000008100232F7E00B2012C9C00000000E101E426E10CB201989C00000000E10128276806B201A09C00000000E10165215E01B2018CA100000000E10962276E06B20194A100000000E101A4277E00B2019CA100000000E101CF277E00B201DCA100000000E1090A286E06B201E4A10000000086180803DB01B20103A2000000008100B62F7E00B30164A200000000E101E426E10CB301DCA200000000E10128276806B301E4A200000000E10165215E01B30110A800000000E10962276E06B30118A800000000E101A4277E00B30120A800000000E101CF277E00B30160A800000000E1090A286E06B30168A80000000086180803DB01B30187A800000000810049307E00B401F0A800000000E101E426E10CB40168A900000000E10128276806B40170A900000000E10165215E01B4019CAE00000000E10962276E06B401A4AE00000000E101A4277E00B401ACAE00000000E101CF277E00B401ECAE00000000E1090A286E06B401F4AE0000000086180803DB01B40113AF000000008100DE307E00B5017CAF00000000E101E426E10CB501F4AF00000000E10128276806B501FCAF00000000E10165215E01B501F4B400000000E10962276E06B501FCB400000000E101A4277E\
-00B50104B500000000E101CF277E00B50144B500000000E1090A286E06B5014CB50000000086180803DB01B5016BB500000000810076317E00B601D4B500000000E101E426E10CB60158B600000000E10128276806B60160B600000000E10165215E01B601F4BB00000000E10962276E06B601FCBB00000000E101A4277E00B60104BC00000000E101CF277E00B60144BC00000000E1090A286E06B6014CBC0000000086180803DB01B6016BBC00000000810008327E00B701DCBC00000000E101E426E10CB70160BD00000000E10128276806B70168BD00000000E10165215E01B701FCC200000000E10962276E06B70104C300000000E101A4277E00B7010CC300000000E101CF277E00B7014CC300000000E1090A286E06B70154C30000000086180803DB01B70173C30000000081009C327E00B801E4C300000000E101E426E10CB80150C400000000E10128276806B80158C400000000E10165215E01B80144C900000000E10962276E06B8014CC900000000E101A4277E00B80154C900000000E101CF277E00B80194C900000000E1090A286E06B8019CC90000000086180803DB01B801BBC90000000081002E337E00B901000001006D1D000001006D1D000001004103000002004B03000001001E1800000100731D00000200771D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001007D1D000001007D1D000002006D1D000001006D1D000001006D1D000001007D1D000002006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001007D1D000001007D1D000002006D1D000001006D1D000001006D1D000001007D1D000002006D1D000001006D1D000001006D1D000001000208000002000E08000003001D0800000400290800000100831D00000100831D00000100961D000002009B1D000001005203000001000208000002000E08000003001D0800000400290800000100831D00000100831D00000100831D000001003014000002000A0D00000300A31D00000400AC1D00000100520300000100520300000100831D00000100B61D00000100B61D00000100831D00000100B61D00000200831D00000100B61D000001000208000002000E08000003001D0800000400290800000100520300000100B61D000001004519000001007B03000001007403000001007B03000001007B03000001007B03000001007403000001007B03000001007403000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001006D1D000001007B15000002008715000001007B1500000200871500000300BF1D000001007B1500000200871500000300CF1D00000400DC1D000001006D1D00000100CF1D00000100CF1D00000200E51D00000100F21D00000200550800000300FA1D000004007B1500000500871500000600051E000007000B1E00000100171E00000100550800000100241E00000100321E00000200550800000300FA1D000004008715000005000B1E00000100321E000001005508000001007B1500000200871500000300361E000004003F1E000001000208000002000E08000003001D08000004002908000001000208000002000E08000003001D0800000400290800000500561D000006000A0D00000700A31D00000800AC1D000001000208000002000E08000003001D0800000400290800000500B61D000001000208000002000E08000003001D0800000400290800000500561D000006002C0D000001000208000002000E08000003001D0800000400290800000500B61D00000100751E02000200520302000300D90C020004000A0D020005001C0D02000600FE0C02000700F20C020008003B0802000900E10C02000A00E60C02000B00A31402000C007B0302000D00B71302000E00740302000F00C01302001000460D020011004E0D02001200580D02001300660D02001400700D020015007D0D020016008B0D020017007B08020018008508020019009808000001000208000002000E08000003001D0800000400290800000500A51E00000600831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500831D000001000208000002000E08000003001D0800000400290800000500B61D00000600831D000001000208000002000E08000003001D0800000400290800000500B61D000001000208000002000E08000003001D0800000400290800000500B61D000001000208000002000E08000003001D0800000400290800000500B61D000001000208000002000E08000003001D0800000400290800000500B61D00000100751E020002005203020003007B0302000400B713020005008D1402000600371402000700C913020008002E1B02000900C01302000A00A31402000B00991402000C00421402000D00521402000E00381B02000F00DF1302001000011402001100451B020012007B0802001300850802001400980802001500B91402001600121402001700AC1402001800D01402001900DA14000001000208000002000E08000003001D08000004002908000001000208000002000E08000003001D08000004002908000001000208000002000E08000003001D0800000400290800000500B11E000001000208000002000E08000003001D08000004002908000005007B03000001000208000002000E08000003001D08000004002908000005007B03000006007403000001000208000002000E08000003001D08000004002908000001000208000002000E08000003001D08000004002908000005007B03000001000208000002000E08000003001D08000004002908000005007B03000001000208000002000E08000003001D0800000400290800000500B61D000001000208000002000E08000003001D08000004002908000005007B03000006007403000001000208000002000E08000003001D08000004002908000005007B03000006007403000001000208000002000E08000003001D0800000400290800000100751E020002001D08020003002908000001000208000002000E0800000300B71300000400C41E000001006D1D00000100561D00000200B61B00000100561D00000200B61B00000300CD1E00000100DC1E00000100E01E00000100E01E00000200E51E00000100E01E00000200F01E00000100E01E00000100E01E00000100F41E00000100F41E00000100F41E00000100F41E00000100F41E00000100F41E00000100F41E00000100F41E00000100F41E00000100FC1E00000100071F000002000C1F00000100181F00000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA2700000100EA271C002E001C0059001C0032001C00D1001C00BD001E002E001E0059001E0032001E00D1001E00BD001F002E001F0059001F0032001F00D1001F00BD0020002E0020005900200032002000D1002000BD0021002E0021005900210032002100D1002100BD0022002E0022005900220032002200D1002200BD0023002E0023005900230032002300D1002300BD0024002E0024005900240032002400D1002400BD0025002E0025005900250032002500D1002500BD0026002E0026005900260032002600D1002600BD0027002E0027005900270032002700D1002700BD0028002E0028005900280032002800D1002800BD0029002E0029005900290032002900D1002900BD002A002E002A0059002A0032002A00D1002A00BD002B002E002B0059002B0032002B00D1002B00BD002C002E002C0059002C0032002C00D1002C00BD002D002E002D0059002D0032002D00D1002D00BD002E002E002E0059002E0032002E00D1002E00BD00D10008037E00D90008037E00E10008039500E90008039500F10008039500F9000803950001010803950009010803950011010803950019010803950021010803620129010803950031010803950039010803950041010803DB01490108037E00510108037E00110008037E00590108037E000C000B21D70161011C21F2000C003021CA0514004421DF051C005221F4050C009A0DF90561015E2100061C0065215E0179017A217E006101822107066101BB0D0C068101080395005100F21072000C009C0322062100F21091000C0008037E00210008037E008901080395002900C2213B0691019A0D41069101A30D460691019C034C069101AC0D4C069101B40D46069101BB0D51069101C20D5606290008037E0059000B21D701240008037E00590030216206B10044216806A10152216E0659009A0D720624009C032206A10165215E01A901F21091002C00E9215E013400E9215E0161015E2198066101F6219E06B10108039500B9013022A506C9010803AB06D1015A229100D9018718B20679007A22B906E1019A0DBF06F101932291003900321D9100E1019A0DD806F901BE22DF06A901E122E5066100E722ED066900F322A202090208030307D90113230907610113231207110208039500110235231E0711023C2325076900080395002400442133073C005221470744005823F405440093225B073C0065215E01290208037E0029027C2360073902AF237E006101B6236807110208037E006101C2236E071102CD23D70111023C2373076101F6217C074102E32383074102F9239500F9010424DF0661015E218A0749021924950041023B24940759029C039A0741027A24950041028A24A0076101962491004C000803E1074C004421EE07540052214707540065215E016101C20D6E076101D0241D086101D924680724009A0DF9055100E72441085100080346085100FB24510881020A255B0891022A255F08A901F2106708990208037E00990239257508A102F2107B086101C2231D08610196248708A90208037E00B10273258E08B1027D259408B90299259A08C102AF25A0089102BB25A7086900CA2591006900D52591006900DE25D7016900E72591006101F621D608C9020803FF08D90229260A09D9024B261009E1025B261609E9026726D701E9027126D701E9027B26D701A102F21091006101F6211C09F10208037E0089009A265E018900932291006101A526910039000803950081009A265E018100932255012C000803F10991009A265E01910093225B0834000803F1098100E722F7098900E722E10A9900E7229A0CA100E722A10C34009322F4059100E722A70C9100AA26AD0CA900AA26B10CA900E722B50C51000803BB0C5100B623C20C9900AA26CA0C5C004421EA0C64005221F405A101C9277E00090308037E001103CC29110D1103DE29D7016C000803DB016C009C0322066C004B2A2B0D2900442168067400E9215E0174009322F4057C00E9215E017C009322F405190308037E00B9006D2A2211840008037E0084009C03F10939000803F968D90151330069D9018718096931037033136941038E339100310308039500B9013B249407590297337200A102E122196974000803F1098902E1221E6951009B3323697C000803F109B102A6338E08C90108032969D101AF337E00490308037E00510308037E00590308033369610308033A698C0051344A69940063345869B901AF337E004100200F80694100EE04A007B9017C34550171009D348669910308037E009103B83495009103C0349969C900D4349E69C900F134CF69990344216806C900FD3491006101F621D669C9009A0DED69C9000A359100A901E122F369A1032035F869C1002935CF69A103E1220706A1022035276AD90108039500D9018718346A61015E213A6A5100E122E204C9003E355E01C9009322910008000800190008000C001E00080010002300080020001900080024001E0008002800230008002C005400080030005900080034005E0008003800630008003C006800080040006D0008004800190008004C001E0008005000230008005400540008005800590008005C005E000E00D40177020E00BC02690420008B001E002E0033007F6A2E0043009F6A2E002B00796A2E003B00956A2E004B00796A2E005B00796A2E006300E26A2E0073000C6B2E007B00186B2E008300216B2E001B004D6A2E002300636A40008B001E0060008B001E0080008B001E00A1008B001E00C1008B001E0020018B001E0023012B01310640018B001E0060018B001E0063012B01310680018B001E00A0018B001E00C0018B001E00E0018B001E0000028B001E0020028B001E0040028B001E0060028B001E0080028B001E00A0028B001E00C0028B001E00E0028B001E0000038B001E0001038B001E0020038B001E0021038B001E0040038B001E0041038B001E0060038B001E0061038B001E0080038B001E0081038B001E0083038B001E00A0038B001E00A1038B001E00A3038B001E00C0038B001E00C1038B001E00C3038B001E00E0038B001E00E1038B001E00E3038B001E0000048B001E0001048B001E0003048B001E0020048B001E0021048B001E0023048B001E0040048B001E0041048B001E0043048B001E0060048B001E0061048B001E0063048B001E0080048B001E0081048B001E0083048B001E00A0048B001E00A1048B001E00A3048B001E00C0048B001E00C1048B001E00C3048B001E00E1048B001E00E3048B001E0000058B001E0001058B001E0003058B001E0020058B001E0021058B001E0023058B001E0040058B001E0041058B001E0043058B001E0060058B001E0061058B001E0063058B001E0080058B001E0081058B001E0083058B001E00A0058B001E00A1058B001E00A3058B001E00C0058B001E00C1058B001E00C3058B001E00E0058B001E00E1058B001E0000068B001E0001068B001E0020068B001E0021068B001E0040068B001E0041068B001E0060068B001E0061068B001E0080068B001E0081068B001E00A0068B001E00A1068B001E00C0068B001E00C1068B001E00E0068B001E00E1068B001E0000078B001E0001078B001E0020078B001E0021078B001E0040078B001E0041078B001E0060078B001E0061078B001E0080078B001E0081078B001E00A0078B001E00A1078B001E00C0078B001E00C1078B001E00E0078B001E00E1078B001E0000088B001E0001088B001E0020088B001E0021088B001E0040088B001E0041088B001E0060088B001E0061088B001E0080088B001E0081088B001E00A0088B001E00A1088B001E00C0088B001E00C1088B001E00E0088B001E00E1088B001E0000098B001E0001098B001E0020098B001E0021098B001E0040098B001E0041098B001E0060098B001E0061098B001E0080098B001E0081098B001E00A0098B001E00A1098B001E00C0098B001E00C1098B001E00E0098B001E00E1098B001E00000A8B001E00010A8B001E00200A8B001E00210A8B001E00400A8B001E00410A8B001E00600A8B001E00610A8B001E00810A8B001E00A00A8B001E00A10A8B001E00C00A8B001E00C10A8B001E00E00A8B001E00E10A8B001E00000B8B001E00010B8B001E00200B8B001E00210B8B001E00400B8B001E00410B8B001E00610B8B001E00810B8B001E00A10B8B001E00C10B8B001E00E10B8B001E00600C8B001E00800C8B001E00A00C8B001E00C00C8B001E00E00C8B001E00000D8B001E00200D8B001E00400D8B001E00600D8B001E00800D8B001E00810D8B001E00A00D8B001E00A10D8B001E00C00D8B001E00C10D8B001E00E00D8B001E00E10D8B001E00000E8B001E00010E8B001E00200E8B001E00210E8B001E00400E8B001E00410E8B001E00600E8B001E00610E8B001E00800E8B001E00810E8B001E00A00E8B001E00C00E8B001E00E00E8B001E00000F8B001E00200F8B001E00400F8B001E00600F8B001E00800F8B001E00A00F8B001E00C00F8B001E00E00F8B001E0000108B001E0020108B001E0040108B001E0060108B001E0080108B001E00A0108B001E00C0108B001E00E0108B001E0000118B001E0020118B001E0040118B001E0060118B001E0080118B001E00A0118B001E00C0118B001E00E0118B001E0000128B001E0020128B001E0040128B001E0060128B001E0080128B001E00A0128B001E00C0128B001E00E0128B001E0000138B001E0060138B001E0080138B001E00A0138B001E00C0138B001E00E0138B001E0000148B001E0020148B001E0040148B001E0060148B001E0080148B001E00C1158B001E00A4170B00EF04C4170B00EF04E4170B00EF0404180B00EF0424180B000205A4180B00EF04C4180B00EF04E4180B00EF0404190B00EF0444190B00EF0464190B00EF0484190B00EF04A4190B00EF04C4190B000205E0198B001E00E4190B001505001A8B001E00041A0B00EF04201A8B001E00241A0B00EF04401A8B001E00441A0B00EF04601A8B001E00641A0B00EF04801A8B001E00A01A8B001E00C01A8B001E00E01A8B001E00001B8B001E00401B8B001E00601B8B001E00801B8B001E00A01B8B001E00C01B8B001E00E01B8B001E00001C8B001E00201C8B001E00841E0B00EF04A41E0B00EF04C01E83042A09C41E0B00EF04E01E8304130AE41E0B00EF04001F8304EC0A201F8304C50B241F0B00EF04441F0B00EF04641F0B00EF04801F8304680D841F0B00EF04A01F83042711C01F8304DD14C41F0B00EF04E01F83049718E41F0B00EF04002083044D1C04200B00EF0420208304042024200B00EF0440208304BE2360208304782764200B00EF0480208304642B84200B00EF04A0208304412FA4200B00EF04C02083040033C4200B00EF04E0208304C03604210B00EF04202183047D3A24210B00EF0440218304623E44210B00EF0460218304104264210B00EF0480218304EB45A02183049949A4210B00EF04C0218304494DC4210B00EF04E0218304F650E4210B00EF0400228304A35404220B00EF0420228304525840228304045C44220B00EF0460228304B05F64220B00EF04802283045E6384220B00EF04A4220B00EF04C02283040F67E4220B00EF0400238B001E0004230B00EF0420238B001E0024230B00EF0444230B00EF04A4230B00EF04C4230B00EF04E4230B00EF0404240B00EF0444240B00EF0464240B00EF0484240B00EF04A4240B00EF04E4240B00EF0404250B00EF0424250B00EF0444250B00EF0484250B00EF04A4250B00EF04C4250B00EF04E4250B00EF04602653051E00802653051E00C02653051E00E02653051E00202753051E00402753051E00802753051E00A02753051E00E02753051E00002853051E00402853051E00602853051E00A02853051E00C02853051E00002953051E00202953051E0044290B00EF04602953051E0064290B00EF04802953051E0084290B00EF04A02953051E00A4290B00EF04C02953051E00C4290B00EF04E4290B00EF04002A53051E00042A0B00EF04202A53051E00242A0B00EF04442A0B00EF04602A53051E00642A0B00EF04802A53051E00842A0B00EF04A02A53051E00A42A0B00EF04C02A53051E00C42A0B001505E42A0B00EF04002B53051E00042B0B00EF04202B53051E00242B0B00EF04442B0B00EF04602B53051E00642B0B001505802B53051E00842B0B00EF04A02B53051E00A42B0B00EF04C02B53051E00C42B0B00EF04E42B0B00EF04002C53051E00042C0B001505202C53051E00442C0B00EF04602C53051E00642C0B00EF04802C53051E00842C0B00EF04A02C53051E00A42C0B00EF04C02C53051E00C42C0B00EF04E42C0B00EF04002D53051E00042D0B00EF04202D53051E00242D0B00EF04442D0B001505602D53051E00642D0B00EF04802D53051E00842D0B00EF04A42D0B00EF04C02D53051E00C42D0B00EF04E02D53051E00E42D0B001505042E0B00EF04202E53051E00242E0B00EF04402E53051E00442E0B00EF04642E0B00EF04802E53051E00A02E53051E00A42E0B00EF04C42E0B00EF04E02E53051E00E42E0B00EF04002F53051E00042F0B00EF04242F0B001505402F53051E00602F53051E00642F0B00EF04842F0B00EF04A02F53051E00A42F0B00EF04C02F53051E00C42F0B00EF04E02F53051E00E42F0B001505003053051E0024300B00EF04403053051E0044300B00EF04603053051E0064300B00EF0484300B00EF04A03053051E00C03053051E00003153051E0004310B00EF04203153051E0024310B00EF0444310B00EF04603153051E0064310B00EF04803153051E00C03153051E00E03153051E00203253051E00403253051E00803253051E00A03253051E00E03253051E00003353051E00403353051E00603353051E00A03353051E00C03353051E00003453051E00203453051E00603453051E00803453051E00C03453051E00E03453051E00203553051E00403553051E00803553051E00A03553051E00E03553051E00003653051E00403653051E00603653051E00A03653051E00C03653051E00003753051E00203753051E00603753051E00803753051E00C03753051E00E03753051E00203853051E00403853051E00803853051E00A03853051E00E03853051E00003953051E00403953051E00603953051E00A03953051E00C03953051E00000001000000130012062A0677068506C606F30618072D07A607020825086E088308AD08DC08E2082209FD09E70ABE0BCE0C170D410D3A2B3F2B182F1D2FFA32BA36723A783A2B3E313E0A42B545BB459349434DF0509D544C58FE5BAA5F586304670A67E9685D698C69A469AC69DE69FF69136A186A2E6A416A030001000700030008001200090028000A002C000B0047000F004D0010005200190056001B0058001C005B001E005D001F005F00200061002100630022006500230067002400690025006B0026006D0027006F0028007100290073002A0075002B0077002C0079002D007B002E007D00000041034A0000004B034F000000E4071801000002081D0100000E081D0100001D081D01000029081D0100003B081D01000042081D0100004C081D01000055082101000060082A01000072082F010000A703340100007B0839010000850839010000980841010000D90C9801000052039D010000E10C1D0100003B081D010000E60C9D010000F20CA1010000FE0CA10100000A0D9D0100001C0D9D010000F400A50100002C0DA5010000360DA1010000460D1D0100004E0D1D010000580D1D010000660D1D010000700D1D0100007D0DAA0100008B0DAA0100007B08390100008508390100009808410100007B0839010000850839010000980841010000CB0DD101000052039D010000B7131D0100007B031D010000C0131D010000C9131D010000D51341010000DF13E9010000F113E90100000114E90100001214E90100003014ED0100003714A101000042141D01000052141D0100005D141D0100007714A10100008D14A1010000991439010000A3141D010000AC14A1010000B9141D010000C214A1010000D014A1010000DA14A10100007B08390100008508390100009808410100007B083901000085083901000098084101000061159D0100006C159D010000CB0D0B020000B8171D010000BE171D010000CA17720200007B031D010000D1171D0100001D081D01000029081D01000002081D0100000E081D010000B61B64040000C21B1D010000511DE9010000561D1D0100005E1DA101000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D000024290D0D000062290D0D02000100030001000200030002000300050001000400050002000900070001000A00070001000C00090002000B00090002000D000B0001000E000B00010010000D0002000F000D00010012000F00020011000F0002001300110001001400110001001600130002001500130002001700150001001800150002001900170001001A00170002001B00190001001C00190002001D001B0001001E001B00010020001D0002001F001D00020021001F00010022001F0002002300210001002400210001002600230002002500230002002800250001002900250001002B00270002002A00270001002D00290002002C00290002002E002B0001002F002B00010031002D00020030002D00020032002F00010033002F0002003400310001003500310002003600330001003700330001003900350002003800350001003B00370002003A00370002003C00390001003D00390002003E003B0001003F003B00010041003D00020040003D00020042003F00010043003F0001004500410002004400410001004700430002004600430002004800450001004900450001004B00470002004A00470002004C00490001004D00490002004E004B0001004F004B00020050004D00010051004D00010053004F00020052004F0001005600510002005500510002005700530001005800530001005A00550002005900550002005B00570001005C005700020063005900010064005900020065005B00010066005B00020067005D00010068005D0001006A005F00020069005F0002006B00610001006C00610001006E00630002006D00630002006F006500010070006500020071006700010072006700020073006900010074006900010076006B00020075006B00010078006D00020077006D00020079006F0001007A006F0002007B00710001007C00710001007E00730002007D00730002007F007500010080007500010082007700020081007700010084007900020083007900020085007B00010086007B00010088007D00020087007D00020089007F0001008A007F0002008B00810001008C00810002008D0083\
-0001008E00830001009000850002008F008500010092008700020091008700020093008900010094008900010096008B00020095008B00020097008D00010098008D0002009B008F0001009C008F0002009D00910001009E00910002009F0093000100A00093000100A20095000200A10095000200A30097000100A40097000100A60099000200A50099000200CF009B000100D0009B000200D1009D000100D2009D000200D3009F000100D4009F000200D500A1000100D600A1000100D800A3000200D700A3000200DA00A5000100DB00A5000200DC00A7000100DD00A7000100DF00A9000200DE00A9000200E000AB000100E100AB0001001901AD0002001801AD0002001A01AF0002002F01B10002003001B30002003101B50002003601B70002003901B90002003F01BB0002004201BD0002004801BF0002004B01C10002005001C30002005301C50002005801C70002005B01C90002006001CB0002006301CD0002006801CF0002006B01D10002007101D30002007401D50002007A01D70002007D01D90002008201DB0002008501DD0002008B01DF0002008E01E10002009401E30002009701E50002009D01E7000200A001E9000200A601EB000200A901ED000200AF01EF000200B201F1000200B801F3000200BB01F5000200C101F7000200C401F9000200CA01FB000200CD01FD001C0066024F011C00680265001C006A026D001C006C0251011C006E0253011C00700239001C00720267001E007E0251011E007A0265001E007C026D001E0078024F011E00800253011E00820239001E00840267001F008A024F011F008C0265001F008E026D001F00900251011F00920253011F00940239001F00960267002000A602670020009C02650020009E026D002000A00251012000A20253012000A402390020009A024F012100AA024F012100AC0265002100AE026D002100B00251012100B20253012100B40239002100B60267002200C00251012200BC0265002200BE026D002200BA024F012200C20253012200C40239002200C60267002300D00251012300CC0265002300CE026D002300CA024F012300D20253012300D40239002300D60267002400DC024F012400DE0265002400E0026D002400E20251012400E40253012400E60239002400E80267002500FA0267002500F00265002500F2026D002500F40251012500F60253012500F80239002500EE024F012600FE024F01260000036500260002036D0026000403510126000603530126000803390026000A036700270016035101270012036500270014036D00270010034F0127001803530127001A03390027001C036700280028035101280024036500280026036D00280022034F0128002A03530128002C03390028002E036700290034034F01290036036500290038036D0029003A03510129003C03530129003E0339002900400367002A0046034F012A00480365002A004A036D002A004C0351012A004E0353012A00500339002A00520367002B0058034F012B005A0365002B005C036D002B005E0351012B00600353012B00620339002B00640367002C00700351012C006C0365002C006E036D002C006A034F012C00720353012C00740339002C00760367002D00820351012D007E0365002D0080036D002D007C034F012D00840353012D00860339002D00880367002E008E034F012E00900365002E0092036D002E00940351012E00960353012E00980339002E009A0367000A00D605EB055B068C0692063F075307D907FA07D30CDA0C240D340D3A0DE16841694F69048000000300030053000000010000002805C9200000020000000000000000000000010003020000000002000000000000000000000001000C0200000000020000000000000000000000010055190000000003000300530000000000000088031C1A000000000200000000000000000000000100291C000000000300030053000000000000008803B533000000001600150017001500180015001C0015001E0015001F001500200015002100150022001500230015002400150025001500260015002700150028001500290015002A0015002B0015002C0015002D0015002E0015000000003C4D6F64756C653E0053514C232E54776974746572697A65722E646C6C00496E76616C696454776974746572506172616D65746572526561736F6E0054776974746572697A65722E4672616D65776F726B00496E76616C696454776974746572506172616D65746572457863657074696F6E0054776974746572506172616D657465724E616D65730054776974746572506172616D657465727300547769747465724578706563746564526573706F6E73654F626A656374730054776974746572526571756573744461746100547769747465725374617475730054776974746572537461747573436F6C6C656374696F6E005477697474657255736572005477697474657255736572436F6C6C656374696F6E00547769747465724469726563744D6573736167654D6574686F647300547769747465725374617475734D6574686F64730054776974746572557365724D6574686F6473004F41757468546F6B656E526573706F6E7365004F41757468546F6B656E73004F417574685574696C6974790058417574685574696C697479005F5F56657273696F6E00547769747465720054574954544552005477697474657253746174696900547769747465725573657273005841757468496E666F0054776974746572697A6572457863657074696F6E00547769747465725265717565737400547769747465724572726F72006D73636F726C69620053797374656D00456E756D00417267756D656E74457863657074696F6E0053797374656D2E436F6C6C656374696F6E732E47656E657269630044696374696F6E6172796032004F626A6563740053797374656D2E436F6C6C656374696F6E7300436F6C6C656374696F6E426173650056616C75655479706500457863657074696F6E0076616C75655F5F004D697373696E675265717569726564506172616D657465720056616C75654F75744F6652616E676500506172616D657465724E6F74537570706F72746564006765745F506172616D65746572007365745F506172616D65746572006765745F526561736F6E007365745F526561736F6E002E63746F72003C506172616D657465723E6B5F5F4261636B696E674669656C64003C526561736F6E3E6B5F5F4261636B696E674669656C6400506172616D6574657200526561736F6E0049440053696E63650053696E63654944004D6178494400436F756E740050616765005573657249440053637265656E4E616D6500437572736F72004275696C64416374696F6E55726900416464005477656574730055736572730055736572734C697374004469726563744D6573736167657300526574776565745573657273005477656574536561726368526573756C7473006765745F547769747465724578706563746564526573706F6E73654F626A656374007365745F547769747465724578706563746564526573706F6E73654F626A656374006765745F436F6E73756D65724B6579007365745F436F6E73756D65724B6579006765745F436F6E73756D6572536563726574007365745F436F6E73756D6572536563726574006765745F416363657373546F6B656E007365745F416363657373546F6B656E006765745F416363657373546F6B656E536563726574007365745F416363657373546F6B656E536563726574006765745F536F75726365007365745F536F75726365006765745F416374696F6E557269007365745F416374696F6E557269006765745F526573706F6E7365007365745F526573706F6E7365006765745F706172616D6574657273007365745F706172616D65746572730053797374656D2E4E657400576562457863657074696F6E006765745F526573706F6E7365457863657074696F6E007365745F526573706F6E7365457863657074696F6E006765745F5374617475736573007365745F5374617475736573006765745F5573657273007365745F5573657273004E756C6C61626C656031006765745F526174654C696D6974007365745F526174654C696D6974006765745F526174654C696D697452656D61696E696E67007365745F526174654C696D697452656D61696E696E67004461746554696D65006765745F526174654C696D69745265736574007365745F526174654C696D69745265736574003C547769747465724578706563746564526573706F6E73654F626A6563743E6B5F5F4261636B696E674669656C64003C436F6E73756D65724B65793E6B5F5F4261636B696E674669656C64003C436F6E73756D65725365637265743E6B5F5F4261636B696E674669656C64003C416363657373546F6B656E3E6B5F5F4261636B696E674669656C64003C416363657373546F6B656E5365637265743E6B5F5F4261636B696E674669656C64003C536F757263653E6B5F5F4261636B696E674669656C64003C416374696F6E5572693E6B5F5F4261636B696E674669656C64003C526573706F6E73653E6B5F5F4261636B696E674669656C64003C706172616D65746572733E6B5F5F4261636B696E674669656C64003C526573706F6E7365457863657074696F6E3E6B5F5F4261636B696E674669656C64003C53746174757365733E6B5F5F4261636B696E674669656C64003C55736572733E6B5F5F4261636B696E674669656C64003C526174654C696D69743E6B5F5F4261636B696E674669656C64003C526174654C696D697452656D61696E696E673E6B5F5F4261636B696E674669656C64003C526174654C696D697452657365743E6B5F5F4261636B696E674669656C6400547769747465724578706563746564526573706F6E73654F626A65637400436F6E73756D65724B657900436F6E73756D657253656372657400416363657373546F6B656E00416363657373546F6B656E53656372657400536F7572636500416374696F6E55726900526573706F6E736500706172616D657465727300526573706F6E7365457863657074696F6E00537461747573657300526174654C696D697400526174654C696D697452656D61696E696E6700526174654C696D69745265736574006765745F43726561746564007365745F43726561746564006765745F4944007365745F4944006765745F54657874007365745F54657874006765745F526563697069656E744944007365745F526563697069656E744944006765745F49735472756E6361746564007365745F49735472756E6361746564006765745F49734661766F7269746564007365745F49734661766F7269746564006765745F496E5265706C79546F5374617475734944007365745F496E5265706C79546F5374617475734944006765745F496E5265706C79546F557365724944007365745F496E5265706C79546F557365724944006765745F5477697474657255736572007365745F5477697474657255736572006765745F526563697069656E74007365745F526563697069656E74006765745F49734469726563744D657373616765007365745F49734469726563744D657373616765006765745F506C6163654944007365745F506C6163654944006765745F506C6163654E616D65007365745F506C6163654E616D65006765745F506C61636546756C6C4E616D65007365745F506C61636546756C6C4E616D65006765745F506C61636554797065007365745F506C61636554797065006765745F506C616365436F756E747279007365745F506C616365436F756E747279006765745F506C6163654C61746974756465007365745F506C6163654C61746974756465006765745F506C6163654C6F6E676974756465007365745F506C6163654C6F6E676974756465003C437265617465643E6B5F5F4261636B696E674669656C64003C49443E6B5F5F4261636B696E674669656C64003C546578743E6B5F5F4261636B696E674669656C64003C526563697069656E7449443E6B5F5F4261636B696E674669656C64003C49735472756E63617465643E6B5F5F4261636B696E674669656C64003C49734661766F72697465643E6B5F5F4261636B696E674669656C64003C496E5265706C79546F53746174757349443E6B5F5F4261636B696E674669656C64003C496E5265706C79546F5573657249443E6B5F5F4261636B696E674669656C64003C54776974746572557365723E6B5F5F4261636B696E674669656C64003C526563697069656E743E6B5F5F4261636B696E674669656C64003C49734469726563744D6573736167653E6B5F5F4261636B696E674669656C64003C506C61636549443E6B5F5F4261636B696E674669656C64003C506C6163654E616D653E6B5F5F4261636B696E674669656C64003C506C61636546756C6C4E616D653E6B5F5F4261636B696E674669656C64003C506C616365547970653E6B5F5F4261636B696E674669656C64003C506C616365436F756E7472793E6B5F5F4261636B696E674669656C64003C506C6163654C617469747564653E6B5F5F4261636B696E674669656C64003C506C6163654C6F6E6769747564653E6B5F5F4261636B696E674669656C640043726561746564005465787400526563697069656E7449440049735472756E63617465640049734661766F726974656400496E5265706C79546F537461747573494400496E5265706C79546F55736572494400526563697069656E740049734469726563744D65737361676500506C616365494400506C6163654E616D6500506C61636546756C6C4E616D6500506C6163655479706500506C616365436F756E74727900506C6163654C6174697475646500506C6163654C6F6E676974756465006765745F4974656D007365745F4974656D00496E6465784F6600496E736572740052656D6F766500436F6E7461696E73004974656D006765745F557365724E616D65007365745F557365724E616D65006765745F53637265656E4E616D65007365745F53637265656E4E616D65006765745F4C6F636174696F6E007365745F4C6F636174696F6E006765745F4465736372697074696F6E007365745F4465736372697074696F6E006765745F437265617465644174007365745F437265617465644174006765745F4E756D6265724F66466F6C6C6F77657273007365745F4E756D6265724F66466F6C6C6F77657273006765745F4E756D6265724F66467269656E6473007365745F4E756D6265724F66467269656E6473006765745F4E756D6265724F665374617475736573007365745F4E756D6265724F665374617475736573006765745F4E756D6265724F665075626C69634C6973744D656D6265727368697073007365745F4E756D6265724F665075626C69634C6973744D656D6265727368697073006765745F537461747573007365745F537461747573006765745F49735665726966696564007365745F49735665726966696564006765745F50726F66696C65496D616765557269007365745F50726F66696C65496D616765557269006765745F50726F66696C65557269007365745F50726F66696C65557269006765745F50726F66696C654261636B67726F756E64496D616765557269007365745F50726F66696C654261636B67726F756E64496D616765557269006765745F50726F66696C654261636B67726F756E6454696C65007365745F50726F66696C654261636B67726F756E6454696C65006765745F497350726F746563746564007365745F497350726F746563746564006765745F5554434F6666736574007365745F5554434F6666736574006765745F54696D655A6F6E65007365745F54696D655A6F6E65006765745F497347656F456E61626C6564007365745F497347656F456E61626C6564006765745F4C616E6775616765007365745F4C616E6775616765006765745F4E6F74696669636174696F6E73007365745F4E6F74696669636174696F6E73006765745F466F6C6C6F77696E67007365745F466F6C6C6F77696E67006765745F4D7574696E67007365745F4D7574696E6700546F537472696E67003C557365724E616D653E6B5F5F4261636B696E674669656C64003C53637265656E4E616D653E6B5F5F4261636B696E674669656C64003C4C6F636174696F6E3E6B5F5F4261636B696E674669656C64003C4465736372697074696F6E3E6B5F5F4261636B696E674669656C64003C4372656174656441743E6B5F5F4261636B696E674669656C64003C4E756D6265724F66466F6C6C6F776572733E6B5F5F4261636B696E674669656C64003C4E756D6265724F66467269656E64733E6B5F5F4261636B696E674669656C64003C4E756D6265724F6653746174757365733E6B5F5F4261636B696E674669656C64003C4E756D6265724F665075626C69634C6973744D656D62657273686970733E6B5F5F4261636B696E674669656C64003C5374617475733E6B5F5F4261636B696E674669656C64003C497356657269666965643E6B5F5F4261636B696E674669656C64003C50726F66696C65496D6167655572693E6B5F5F4261636B696E674669656C64003C50726F66696C655572693E6B5F5F4261636B696E674669656C64003C50726F66696C654261636B67726F756E64496D6167655572693E6B5F5F4261636B696E674669656C64003C50726F66696C654261636B67726F756E6454696C653E6B5F5F4261636B696E674669656C64003C497350726F7465637465643E6B5F5F4261636B696E674669656C64003C5554434F66667365743E6B5F5F4261636B696E674669656C64003C54696D655A6F6E653E6B5F5F4261636B696E674669656C64003C497347656F456E61626C65643E6B5F5F4261636B696E674669656C64003C4C616E67756167653E6B5F5F4261636B696E674669656C64003C4E6F74696669636174696F6E733E6B5F5F4261636B696E674669656C64003C466F6C6C6F77696E673E6B5F5F4261636B696E674669656C64003C4D7574696E673E6B5F5F4261636B696E674669656C6400557365724E616D65004C6F636174696F6E004465736372697074696F6E00437265617465644174004E756D6265724F66466F6C6C6F77657273004E756D6265724F66467269656E6473004E756D6265724F665374617475736573004E756D6265724F665075626C69634C6973744D656D62657273686970730053746174757300497356657269666965640050726F66696C65496D6167655572690050726F66696C655572690050726F66696C654261636B67726F756E64496D6167655572690050726F66696C654261636B67726F756E6454696C6500497350726F746563746564005554434F66667365740054696D655A6F6E6500497347656F456E61626C6564004C616E6775616765004E6F74696669636174696F6E7300466F6C6C6F77696E67004D7574696E67006765745F4E657874437572736F72007365745F4E657874437572736F72006765745F50726576696F7573437572736F72007365745F50726576696F7573437572736F72003C4E657874437572736F723E6B5F5F4261636B696E674669656C64003C50726576696F7573437572736F723E6B5F5F4261636B696E674669656C64004E657874437572736F720050726576696F7573437572736F7200636F6E73756D65724B657900636F6E73756D657253656372657400616363657373546F6B656E00616363657373546F6B656E53656372657400486173687461626C65004469726563744D6573736167657353656E74004E65770044657374726F79005573657254696D656C696E6500486F6D6554696D656C696E65004D656E74696F6E73005570646174650053686F77004661766F726974657354696D656C696E65004372656174654661766F726974650044657374726F794661766F726974650052657477656574734F664D65005265747765657473005265747765657400526574776565746564427900466F6C6C6F7765727300467269656E647300466F6C6C6F775573657200556E466F6C6C6F775573657200426C6F636B7300426C6F636B5573657200556E426C6F636B55736572004D7574655573657200556E4D75746555736572004D75746573006765745F546F6B656E007365745F546F6B656E006765745F546F6B656E536563726574007365745F546F6B656E53656372657400446563696D616C006765745F557365724964007365745F557365724964006765745F566572696669636174696F6E537472696E67007365745F566572696669636174696F6E537472696E67003C546F6B656E3E6B5F5F4261636B696E674669656C64003C546F6B656E5365637265743E6B5F5F4261636B696E674669656C64003C5573657249643E6B5F5F4261636B696E674669656C64003C566572696669636174696F6E537472696E673E6B5F5F4261636B696E674669656C6400546F6B656E00546F6B656E5365637265740055736572496400566572696669636174696F6E537472696E67005369676E6174757265547970650047657452657175657374546F6B656E00476574416363657373546F6B656E00456E636F6465466F7255726C00557269004275696C64417574686F72697A6174696F6E5572690048747470576562526573706F6E7365004275696C644F4175746852657175657374416E64476574526573706F6E73650053797374656D2E546578742E526567756C617245787072657373696F6E73004D6174636800557070657243617365456E636F64696E67730047656E65726174654765745175657279537472696E670047656E6572617465417574686F72697A6174696F6E4865616465720047656E657261746554696D655374616D700047656E65726174654E6F6E6365004164645369676E6174757265546F506172616D6574657273004E6F726D616C697A6555726C0055726C456E636F646500476574416363657373546F6B656E73004D616A6F72004D696E6F72004275696C6400557365720047657456657273696F6E0053797374656D2E446174610053797374656D2E446174612E53716C54797065730053716C496E7436340053716C537472696E670053716C446F75626C650044657374726F795374617475730053656E644469726563744D6573736167650044657374726F794469726563744D6573736167650053716C4461746554696D650053716C426F6F6C65616E0053716C496E743332005477697474657253746174696946696C6C526F770049456E756D657261626C6500476574547769747465724D657373616765730053514C232E5479706573416E644167677265676174657300547970655F486173685461626C650047657453656E744D65737361676573004765744D65737361676573004765745573657254696D656C696E65004765744D656E74696F6E73004765744661766F726974657300476574486F6D6554696D656C696E650047657452657477656574734F664D65004765745265747765657473004765745374617475730054776974746572557365727346696C6C526F7700476574466F6C6C6F7765727300476574467269656E6473004765745573657200476574426C6F636B73004765745265747765657465644279004765744D757465730054776974746572584175746846696C6C526F7700784175746800437265617465644F6E00467269656E6473436F756E740053746174757354657874004973466F6C6C6F77696E67006765745F5265717565737444617461007365745F5265717565737444617461006765745F526177584D4C0050617273654572726F724D657373616765003C52657175657374446174613E6B5F5F4261636B696E674669656C6400526571756573744461746100526177584D4C00626173655477697474657255726900506572666F726D576562526571756573740048616E646C65576562457863657074696F6E005061727365526573706F6E7365446174610050726F706167617465526174654C696D697444657461696C730053797374656D2E586D6C00586D6C456C656D656E7400506172736553746174757365730050617273655477656574536561726368526573756C747300586D6C4E6F64650050617273655374617475734E6F64650050617273654469726563744D657373616765730050617273654469726563744D6573736167654E6F6465005061727365557365727300506172736555736572734C697374005061727365526574776565745573657273005061727365557365724E6F646500506172736544617465537472696E6700456C656D656E7456616C75654966457869737473005F5F436F6465005F5F4D657373616765005F5F4973547769747465724572726F72006765745F436F6465006765745F4D657373616765006765745F4973547769747465724572726F7200436F6465004D657373616765004973547769747465724572726F720076616C7565004B65790056616C756500696E646578004F7074696F6E616C506172616D65746572730075736572006D657373616765004C61746974756465004C6F6E6769747564650053746174757349440063616C6C6261636B416464726573730072657175657374546F6B656E0076657269666965720061757468656E746963617465006261736555726C00687474704D6574686F6400746F6B656E00746F6B656E53656372657400456E636F64656456616C7565006E6577506172616D65746572730075726C00757365726E616D650070617373776F7264004D6963726F736F66742E53716C5365727665722E5365727665720053716C4661636574417474726962757465006F626A0053797374656D2E52756E74696D652E496E7465726F705365727669636573004F7574417474726962757465004D65737361676554797065005573657249446F7253637265656E4E616D650050617373776F726400496E6E6572457863657074696F6E00584D4C004461746100485454504D6574686F640077657800456C656D656E740044617465537472696E67004E6F646500456C656D656E744E616D6500547769747465724572726F72526573706F6E73650053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500436F6D56697369626C65417474726962757465004775696441747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E54776974746572697A657200436F6D70696C657247656E6572617465644174747269627574650053657269616C697A61626C65417474726962757465006765745F436F756E7400537472696E6700456D707479\
-004B6579436F6C6C656374696F6E006765745F4B65797300456E756D657261746F7200476574456E756D657261746F72006765745F43757272656E7400466F726D6174004D6F76654E6578740049446973706F7361626C6500446973706F73650049734E756C6C4F72456D707479004170706C69636174696F6E457863657074696F6E0044656661756C744D656D62657241747472696275746500494C697374006765745F4C6973740049436F6C6C656374696F6E0049456E756D657261746F7200496E743634006765745F48617356616C756500436F6E63617400417267756D656E744E756C6C457863657074696F6E00576562526573706F6E73650053797374656D2E494F0053747265616D00476574526573706F6E736553747265616D0053747265616D52656164657200546578745265616465720052656164546F456E640052656765780047726F7570436F6C6C656374696F6E006765745F47726F7570730047726F75700043617074757265006765745F56616C75650053797374656D2E476C6F62616C697A6174696F6E0043756C74757265496E666F006765745F43757272656E7443756C747572650049466F726D617450726F7669646572005061727365006F705F496D706C696369740045736361706544617461537472696E67004D617463684576616C7561746F72005265706C6163650053797374656D2E5465787400537472696E674275696C64657200417070656E6400417070656E64466F726D6174004B657956616C7565506169726032006765745F4B6579005765625065726D697373696F6E004E6574776F726B416363657373004164645065726D697373696F6E0053797374656D2E536563757269747900436F64654163636573735065726D697373696F6E0044656D616E64006F705F457175616C6974790053746172747357697468006765745F4C656E677468005765625265717565737400437265617465004874747057656252657175657374007365745F4D6574686F64006765745F496E76617269616E7443756C74757265007365745F557365724167656E7400576562486561646572436F6C6C656374696F6E006765745F486561646572730053797374656D2E436F6C6C656374696F6E732E5370656369616C697A6564004E616D6556616C7565436F6C6C656374696F6E007365745F436F6E74656E745479706500476574526573706F6E736500546F557070657200536F7274656444696374696F6E6172796032004944696374696F6E617279603200537472696E67436F6D70617269736F6E00456E647357697468006F705F496E657175616C697479006765745F5574634E6F770054696D655370616E006F705F5375627472616374696F6E006765745F546F74616C5365636F6E647300446F75626C6500436F6E7665727400546F496E7436340052616E646F6D004E65787400496E7433320053797374656D2E53656375726974792E43727970746F67726170687900484D41435348413100456E636F64696E67006765745F4153434949004765744279746573004B6579656448617368416C676F726974686D007365745F4B65790048617368416C676F726974686D00436F6D707574654861736800546F426173653634537472696E67006765745F536368656D65006765745F486F7374006765745F506F7274006765745F4162736F6C75746550617468005374727563744C61796F7574417474726962757465004C61796F75744B696E64002E6363746F7200417373656D626C7900476574457865637574696E67417373656D626C7900417373656D626C794E616D65004765744E616D650056657273696F6E006765745F56657273696F6E006765745F4D616A6F72006765745F4D696E6F72006765745F4275696C640053716C46756E6374696F6E417474726962757465006765745F49734E756C6C005472696D004E756C6C003C476574547769747465724D657373616765733E645F5F300049456E756D657261626C6560310049456E756D657261746F7260310053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261626C653C53797374656D2E4F626A6563743E2E476574456E756D657261746F720053797374656D2E436F6C6C656374696F6E732E49456E756D657261626C652E476574456E756D657261746F72003C3E325F5F63757272656E740053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E6765745F43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E52657365740052657365740053797374656D2E49446973706F7361626C652E446973706F7365003C3E315F5F7374617465003C3E6C5F5F696E697469616C54687265616449640053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E6765745F43757272656E74003C3E335F5F436F6E73756D65724B6579003C3E335F5F436F6E73756D6572536563726574003C3E335F5F416363657373546F6B656E003C3E335F5F416363657373546F6B656E536563726574003C3E335F5F4D65737361676554797065003C3E335F5F4F7074696F6E616C506172616D6574657273003C5F5F5374617475733E355F5F31003C5F5F54776974746572537461747573436F6C6C656374696F6E3E355F5F32003C5F5F547769747465723E355F5F33003C5F5F547769747465725374617475733E355F5F34003C3E375F5F7772617035003C3E375F5F7772617036003C3E6D5F5F46696E616C6C79370053797374656D2E436F6C6C656374696F6E732E47656E657269632E49456E756D657261746F723C53797374656D2E4F626A6563743E2E43757272656E740053797374656D2E436F6C6C656374696F6E732E49456E756D657261746F722E43757272656E740053797374656D2E446961676E6F737469637300446562756767657248696464656E4174747269627574650053797374656D2E546872656164696E6700546872656164006765745F43757272656E74546872656164006765745F4D616E616765645468726561644964003C50726976617465496D706C656D656E746174696F6E44657461696C733E7B44383141423634432D324643382D344630342D384346442D3733464334343531394632437D0024246D6574686F643078363030303133352D310054727947657456616C7565004E6F74537570706F72746564457863657074696F6E006765745F4E6174697665486173687461626C65003C47657452657477656574733E645F5F61003C3E335F5F5374617475734944003C5F5F5374617475733E355F5F62003C5F5F54776974746572537461747573436F6C6C656374696F6E3E355F5F63003C5F5F547769747465723E355F5F64003C5F5F547769747465725374617475733E355F5F65003C3E375F5F7772617066003C3E375F5F777261703130003C3E6D5F5F46696E616C6C793131003C4765745374617475733E645F5F3134003C5F5F5374617475733E355F5F3135003C5F5F547769747465725374617475733E355F5F3136003C5F5F547769747465723E355F5F3137003C4372656174654661766F726974653E645F5F3161003C5F5F5374617475733E355F5F3162003C5F5F547769747465725374617475733E355F5F3163003C5F5F547769747465723E355F5F3164003C44657374726F794661766F726974653E645F5F3230003C5F5F5374617475733E355F5F3231003C5F5F547769747465725374617475733E355F5F3232003C5F5F547769747465723E355F5F3233003C526574776565743E645F5F3236003C5F5F5374617475733E355F5F3237003C5F5F547769747465725374617475733E355F5F3238003C5F5F547769747465723E355F5F3239003C476574466F6C6C6F776572733E645F5F3263003C5F5F547769747465723E355F5F3264003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3265003C5F5F5477697474657255736572733E355F5F3266003C5F5F54776974746572557365723E355F5F3330003C3E375F5F777261703331003C3E375F5F777261703332003C3E6D5F5F46696E616C6C793333003C476574467269656E64733E645F5F3336003C5F5F547769747465723E355F5F3337003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3338003C5F5F5477697474657255736572733E355F5F3339003C5F5F54776974746572557365723E355F5F3361003C3E375F5F777261703362003C3E375F5F777261703363003C3E6D5F5F46696E616C6C793364003C476574557365723E645F5F3430003C3E335F5F5573657249446F7253637265656E4E616D65003C5F5F547769747465723E355F5F3431003C5F5F54776974746572557365723E355F5F3432003C5F5F5477697474657255736572733E355F5F3433003C466F6C6C6F77557365723E645F5F3436003C3E335F5F53637265656E4E616D65003C5F5F547769747465723E355F5F3437003C5F5F55736572546F466F6C6C6F773E355F5F3438003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3439003C5F5F5477697474657255736572733E355F5F3461003C5F5F54776974746572557365723E355F5F3462003C3E375F5F777261703463003C3E375F5F777261703464003C3E6D5F5F46696E616C6C793465003C556E466F6C6C6F77557365723E645F5F3531003C3E335F5F557365724944003C5F5F547769747465723E355F5F3532003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3533003C5F5F5477697474657255736572733E355F5F3534003C5F5F54776974746572557365723E355F5F3535003C3E375F5F777261703536003C3E375F5F777261703537003C3E6D5F5F46696E616C6C793538003C476574426C6F636B733E645F5F3562003C5F5F547769747465723E355F5F3563003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3564003C5F5F5477697474657255736572733E355F5F3565003C5F5F54776974746572557365723E355F5F3566003C3E375F5F777261703630003C3E375F5F777261703631003C3E6D5F5F46696E616C6C793632003C426C6F636B557365723E645F5F3635003C5F5F547769747465723E355F5F3636003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3637003C5F5F5477697474657255736572733E355F5F3638003C5F5F54776974746572557365723E355F5F3639003C3E375F5F777261703661003C3E375F5F777261703662003C3E6D5F5F46696E616C6C793663003C556E426C6F636B557365723E645F5F3666003C5F5F547769747465723E355F5F3730003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3731003C5F5F5477697474657255736572733E355F5F3732003C5F5F54776974746572557365723E355F5F3733003C3E375F5F777261703734003C3E375F5F777261703735003C3E6D5F5F46696E616C6C793736003C47657452657477656574656442793E645F5F3739003C5F5F547769747465723E355F5F3761003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3762003C5F5F5477697474657255736572733E355F5F3763003C5F5F54776974746572557365723E355F5F3764003C3E375F5F777261703765003C3E375F5F777261703766003C3E6D5F5F46696E616C6C793830003C4D757465557365723E645F5F3833003C5F5F547769747465723E355F5F3834003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3835003C5F5F5477697474657255736572733E355F5F3836003C5F5F54776974746572557365723E355F5F3837003C3E375F5F777261703838003C3E375F5F777261703839003C3E6D5F5F46696E616C6C793861003C556E4D757465557365723E645F5F3864003C5F5F547769747465723E355F5F3865003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3866003C5F5F5477697474657255736572733E355F5F3930003C5F5F54776974746572557365723E355F5F3931003C3E375F5F777261703932003C3E375F5F777261703933003C3E6D5F5F46696E616C6C793934003C4765744D757465733E645F5F3937003C5F5F547769747465723E355F5F3938003C5F5F5477697474657255736572436F6C6C656374696F6E3E355F5F3939003C5F5F5477697474657255736572733E355F5F3961003C5F5F54776974746572557365723E355F5F3962003C3E375F5F777261703963003C3E375F5F777261703964003C3E6D5F5F46696E616C6C793965004C69737460310052656765784F7074696F6E730049734D61746368005365637572697479457863657074696F6E0054797065006765745F5065726D697373696F6E54797065004D656D626572496E666F006765745F4E616D6500476574004164645365636F6E6473006765745F5554463800436C6F73650053514C232E4A736F6E4678004A736F6E46782E53657269616C697A6174696F6E004461746152656164657253657474696E6773004461746157726974657253657474696E6773004A736F6E46782E4A736F6E004A736F6E526561646572004A736F6E46782E586D6C00586D6C57726974657200446174615265616465726031004A736F6E46782E4D6F64656C004D6F64656C546F6B656E5479706500526561640044617461577269746572603100577269746500576562457863657074696F6E537461747573006765745F436F6E74656E744C656E6774680048747470537461747573436F6465006765745F537461747573436F646500586D6C446F63756D656E74004C6F6164586D6C006765745F446F63756D656E74456C656D656E740053656C65637453696E676C654E6F646500586D6C4E6F64654C6973740053656C6563744E6F646573006765745F4F75746572586D6C006765745F496E6E65725465787400426F6F6C65616E00547279506172736500476574456C656D656E747342795461674E616D65006765745F4861734368696C644E6F64657300001B7B0030007D002600730069006E00630065003D007B0031007D0000217B0030007D002600730069006E00630065005F00690064003D007B0031007D00001B7B0030007D00260063006F0075006E0074003D007B0031007D0000197B0030007D00260070006100670065003D007B0031007D0000157B0030007D002600690064003D007B0031007D00001D7B0030007D0026006D00610078005F00690064003D007B0031007D00001F7B0030007D00260075007300650072005F00690064003D007B0031007D0000277B0030007D002600730063007200650065006E005F006E0061006D0065003D007B0031007D00001D7B0030007D00260063007500720073006F0072003D007B0031007D00000F7B0030007D003F007B0031007D00004B560061006C0075006500200067006900760065006E00200066006F0072002000730069006E0063006500200077006100730020006E006F00740020006100200044006100740065002E000003720000296400690072006500630074005F006D0065007300730061006700650073002E006A0073006F006E00000747004500540000336400690072006500630074005F006D0065007300730061006700650073002F00730065006E0074002E006A0073006F006E0000316400690072006500630074005F006D0065007300730061006700650073002F006E00650077002E006A0073006F006E000017730063007200650065006E005F006E0061006D0065000009740065007800740000056900640000396400690072006500630074005F006D0065007300730061006700650073002F00640065007300740072006F0079002E006A0073006F006E00000950004F00530054000037730074006100740075007300650073002F0075007300650072005F00740069006D0065006C0069006E0065002E006A0073006F006E000037730074006100740075007300650073002F0068006F006D0065005F00740069006D0065006C0069006E0065002E006A0073006F006E00003F730074006100740075007300650073002F006D0065006E00740069006F006E0073005F00740069006D0065006C0069006E0065002E006A0073006F006E000029730074006100740075007300650073002F007500700064006100740065002E006A0073006F006E00000D730074006100740075007300002B69006E005F007200650070006C0079005F0074006F005F007300740061007400750073005F006900640000076C006100740000096C006F006E0067000033730074006100740075007300650073002F00640065007300740072006F0079002F007B0030007D002E006A0073006F006E000025730074006100740075007300650073002F00730068006F0077002E006A0073006F006E0000276600610076006F00720069007400650073002F006C006900730074002E006A0073006F006E00002B6600610076006F00720069007400650073002F006300720065006100740065002E006A0073006F006E00002D6600610076006F00720069007400650073002F00640065007300740072006F0079002E006A0073006F006E000039730074006100740075007300650073002F00720065007400770065006500740073005F006F0066005F006D0065002E006A0073006F006E000025730074006100740075007300650073002F00720065007400770065006500740073002F00000B2E006A0073006F006E000023730074006100740075007300650073002F0072006500740077006500650074002F00000F75007300650072005F0069006400001F750073006500720073002F00730068006F0077002E006A0073006F006E00002766006F006C006C006F0077006500720073002F006C006900730074002E006A0073006F006E00002366007200690065006E00640073002F006C006900730074002E006A0073006F006E00002F66007200690065006E006400730068006900700073002F006300720065006100740065002E006A0073006F006E00003166007200690065006E006400730068006900700073002F00640065007300740072006F0079002E006A0073006F006E00002162006C006F0063006B0073002F006C006900730074002E006A0073006F006E00002562006C006F0063006B0073002F006300720065006100740065002E006A0073006F006E00002762006C006F0063006B0073002F00640065007300740072006F0079002E006A0073006F006E00002F6D0075007400650073002F00750073006500720073002F006300720065006100740065002E006A0073006F006E0000316D0075007400650073002F00750073006500720073002F00640065007300740072006F0079002E006A0073006F006E00002B6D0075007400650073002F00750073006500720073002F006C006900730074002E006A0073006F006E00001763006F006E00730075006D00650072004B0065007900001D63006F006E00730075006D0065007200530065006300720065007400001D6F0061007500740068005F00630061006C006C006200610063006B000057680074007400700073003A002F002F006100700069002E0074007700690074007400650072002E0063006F006D002F006F0061007500740068002F0072006500710075006500730074005F0074006F006B0065006E000080C36F0061007500740068005F0074006F006B0065006E003D0028003F003C0074006F006B0065006E003E005B005E0026005D002B0029007C006F0061007500740068005F0074006F006B0065006E005F007300650063007200650074003D0028003F003C007300650063007200650074003E005B005E0026005D002B0029007C006F0061007500740068005F00760065007200690066006900650072003D0028003F003C00760065007200690066006900650072003E005B005E0026005D002B002900000B74006F006B0065006E00000D7300650063007200650074000011760065007200690066006900650072000019720065007100750065007300740054006F006B0065006E00001D6F0061007500740068005F00760065007200690066006900650072000055680074007400700073003A002F002F006100700069002E0074007700690074007400650072002E0063006F006D002F006F0061007500740068002F006100630063006500730073005F0074006F006B0065006E0000276F0061007500740068005F0074006F006B0065006E003D0028005B005E0026005D002B00290000356F0061007500740068005F0074006F006B0065006E005F007300650063007200650074003D0028005B005E0026005D002B002900001F75007300650072005F00690064003D0028005B005E0026005D002B0029000027730063007200650065006E005F006E0061006D0065003D0028005B005E0026005D002B0029000027280025005B0030002D00390061002D0066005D005B0030002D00390061002D0066005D00290001032800000725003200380000032900000725003200390000032400000725003200340000032100000725003200310000032A000007250032004100000327000107250032003700000725003700450000037E000035680074007400700073003A002F002F0074007700690074007400650072002E0063006F006D002F006F0061007500740068002F000019610075007400680065006E00740069006300610074006500001361007500740068006F00720069007A00650000213F006F0061007500740068005F0074006F006B0065006E003D007B0030007D00001B6F0061007500740068005F00760065007200730069006F006E00000731002E00300000176F0061007500740068005F006E006F006E0063006500001F6F0061007500740068005F00740069006D0065007300740061006D007000002D6F0061007500740068005F007300690067006E00610074007500720065005F006D006500740068006F006400001348004D00410043002D00530048004100310001256F0061007500740068005F0063006F006E00730075006D00650072005F006B0065007900002B6F0061007500740068005F0063006F006E00730075006D00650072005F0073006500630072006500740000176F0061007500740068005F0074006F006B0065006E0000256F0061007500740068005F0074006F006B0065006E005F00730065006300720065007400002F680074007400700073003F003A002F002F0074007700690074007400650072002E0063006F006D002F002E002A000037680074007400700073003F003A002F002F006100700069002E0074007700690074007400650072002E0063006F006D002F002E002A00003D680074007400700073003F003A002F002F007300650061007200630068002E0074007700690074007400650072002E0063006F006D002F002E002A00000D6F0061007500740068005F0000032600000F7B0030007D003D007B0031007D0000033F000019530051004C00730068006100720070002F007B0030007D00001B41007500740068006F00720069007A006100740069006F006E0000436100700070006C00690063006100740069006F006E002F0078002D007700770077002D0066006F0072006D002D00750072006C0065006E0063006F0064006500640001334F00410075007400680020007200650061006C006D003D002200540077006900740074006500720020004100500049002200000F5F00730065006300720065007400001F6F0061007500740068005F007300690067006E006100740075007200650000152C007B0030007D003D0022007B0031007D002200002D2C006F0061007500740068005F007300690067006E00610074007500720065003D0022007B0030007D0022000003580000135F007600650072006900660069006500720000177B0030007D0026007B0031007D0026007B0032007D00000F7B0030007D0026007B0031007D0000137B0030007D003A002F002F007B0031007D0000096800740074007000000B6800740074007000730000033A00001175007300650072006E0061006D0065000011700061007300730077006F0072006400001F78005F0061007500740068005F0075007300650072006E0061006D006500001F78005F0061007500740068005F00700061007300730077006F0072006400001778005F0061007500740068005F006D006F0064006500001763006C00690065006E0074005F00610075007400680000032E00005D43006F006E00730075006D00650072004B00650079002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E0067002000270027002100016343006F006E00730075006D00650072005300650063007200650074002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E0067002000270027002100015D41006300630065007300730054006F006B0065006E002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E0067002000270027002100016941006300630065007300730054006F006B0065006E005300650063007200650074002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E00670020002700270021000131530074006100740075007300490044002000630061006E006E006F00740020006200650020004E0055004C004C0021000001005952006500630069007000690065006E0074002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E006700200027002700210001254400690072006500630074004D006500730073006100670065007300530065006E007400001D4400690072006500630074004D00650073007300610067006500730000195500730065007200540069006D0065006C0069006E00650000114D0065006E00740069006F006E00730000134600610076006F0072006900740065007300001948006F006D006500540069006D0065006C0069006E0065000019520065007400770065006500740073004F0066004D006500005B530063007200650065006E004E0061006D0065002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E0067002000270027002100017759006F00750020006D007500730074002000730070006500630069006600790020006500690074006800650072002000530063007200650065006E004E0061006D00650020006F00720020005500730065007200490044002C00200062007500740020006E006F007400200062006F00740068002100005755007300650072004E0061006D0065002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E00670020002700270021000157500061007300730077006F007200\
-64002000630061006E006E006F00740020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E006700200027002700210001233C006500720072006F0072003E002E002B003C002F006500720072006F0072003E00003328003F003A003C006500720072006F0072003E0029002E002B0028003F003A003C002F006500720072006F0072003E0029000039680074007400700073003A002F002F006100700069002E0074007700690074007400650072002E0063006F006D002F0031002E0031002F00001B5700650062005000650072006D0069007300730069006F006E000081010A000A005700650062005000650072006D0069007300730069006F006E00200065007800630065007000740069006F006E002E000A000A0059006F00750020006D006F007300740020006C0069006B0065006C00790020006E00650065006400200074006F002000720075006E002000740068006500200066006F006C006C006F00770069006E0067003A000A000A00090045005800450043002000530051004C0023002E00530051004C00730068006100720070005F0053006500740053006500630075007200690074007900200032002C0020004E002700530051004C0023002E00540077006900740074006500720069007A006500720027000A000A00012558002D0052006100740065002D004C0069006D00690074002D004C0069006D0069007400012D58002D0052006100740065002D004C0069006D00690074002D00520065006D00610069006E0069006E006700012558002D0052006100740065002D004C0069006D00690074002D005200650073006500740001035B0000035D00002941007500740068006F00720069007A006100740069006F006E0020004600610069006C0065006400004354007700690074007400650072002000690073002000630075007200720065006E0074006C007900200075006E0061007600610069006C00610062006C0065002E000069540077006900740074006500720020006900730020006F007600650072006C006F00610064006500640020006F007200200079006F007500200061007200650020006200650069006E0067002000720061007400650020006C0069006D0069007400650064002E0000232F00610072007200610079002F006900740065006D002F0075007300650072007300003B49006E00760061006C0069006400200072006500730070006F006E00730065002000660072006F006D002000540077006900740074006500720000172F00610072007200610079002F006900740065006D00001F50006100720073006500530074006100740075007300650073000A000A0000050A000A0000332F00610072007200610079002F006900740065006D002F00730074006100740075007300650073002F006900740065006D000033500061007200730065005400770065006500740053006500610072006300680052006500730075006C00740073000A000A00001563007200650061007400650064005F0061007400000D73006F00750072006300650000137400720075006E0063006100740065006400002769006E005F007200650070006C0079005F0074006F005F0075007300650072005F006900640000136600610076006F007200690074006500640000097500730065007200000D730065006E00640065007200001372006500630069007000690065006E007400000B70006C0061006300650000096E0061006D0065000013660075006C006C005F006E0061006D006500001570006C006100630065005F007400790070006500000F63006F0075006E00740072007900001763006F006F007200640069006E00610074006500730000096900740065006D00002B500061007200730065004400690072006500630074004D0065007300730061006700650073000A000A00001972006500630069007000690065006E0074005F0069006400001950006100720073006500550073006500720073000A000A00000D2E002F006900740065006D00002150006100720073006500550073006500720073004C006900730074000A000A0000212F00610072007200610079002F006900740065006D002F0075007300650072000027500061007200730065005200650074007700650065007400550073006500720073000A000A0000116C006F0063006100740069006F006E0000176400650073006300720069007000740069006F006E000011760065007200690066006900650064000023700072006F00660069006C0065005F0069006D006100670065005F00750072006C000007750072006C000039700072006F00660069006C0065005F006200610063006B00670072006F0075006E0064005F0069006D006100670065005F00750072006C00002F700072006F00660069006C0065005F006200610063006B00670072006F0075006E0064005F00740069006C0065000013700072006F0074006500630074006500640000157500740063005F006F00660066007300650074000013740069006D0065005F007A006F006E0065000017670065006F005F0065006E00610062006C006500640000096C0061006E006700001B6E006F00740069006600690063006100740069006F006E007300001366006F006C006C006F00770069006E006700000D6D007500740069006E006700001F66006F006C006C006F0077006500720073005F0063006F0075006E007400001B66007200690065006E00640073005F0063006F0075006E007400001D730074006100740075007300650073005F0063006F0075006E00740000196C00690073007400650064005F0063006F0075006E00740000814728003F003C004400610079004E0061006D0065003E005B005E0020005D002B002900200028003F003C004D006F006E00740068004E0061006D0065003E005B005E0020005D002B002900200028003F003C004400610079003E005B005E0020005D007B0031002C0032007D002900200028003F003C0048006F00750072003E005B0030002D0039005D007B0031002C0032007D0029003A0028003F003C004D0069006E007500740065003E005B0030002D0039005D007B0031002C0032007D0029003A0028003F003C005300650063006F006E0064003E005B0030002D0039005D007B0031002C0032007D002900200028003F003C00540069006D0065005A006F006E0065003E005B002B002D005D005B0030002D0039005D007B0034007D002900200028003F003C0059006500610072003E005B0030002D0039005D007B0034007D002900012F7B0030007D0020007B0031007D0020007B0032007D0020007B0033007D003A007B0034007D003A007B0035007D0000134D006F006E00740068004E0061006D006500000744006100790000095900650061007200000948006F0075007200000D4D0069006E00750074006500000D5300650063006F006E006400003728003F003C003D005B002C007B005D00220063006F006400650022003A0029005C0064002B0028003F003D005B002C007D005D002900003F28003F003C003D005B002C007B005D0022006D0065007300730061006700650022003A00220029002E002B0028003F003D0022005B002C007D005D002900004CB61AD8C82F044F8CFD73FC44519F2C0008B77A5C561934E0890715120D0211101C0206080306110804000000000401000000040200000004200011100520010111100420001108052001011108072002011110110803061110042800111004280011080403000000040400000004050000000406000000040700000004080000000420010E0E0620020111101C032000010306111804200011180520010111180320000E042001010E08200015120D020E0E0920010115120D020E0E04200012210520010112210420001224052001011224042000122C05200101122C07200015112501080820010115112501080820001511250111290920010115112501112902060E070615120D020E0E03061221030612240306122C06061511250108070615112501112904280011180328000E08280015120D020E0E04280012210428001224042800122C072800151125010808280015112501112904200011290520010111290320000A042001010A0320000204200101020420001228052001011228072000151125010D08200101151125010D0306112902060A020602030612280606151125010D04280011290328000A032800020428001228072800151125010D0520011220080620020108122005200108122005200101122005200102122005280112200803200008042001010804200012200306122003280008042800122005200112280806200201081228052001081228052001021228052801122808072004010E0E0E0E0620011224122D06200212200E0E05200112200A14200412200E151125010A151125010D151125010D07200212240A122D05200112280E052001122C0A062001122C1228052001122C0E04200011310520010111310306113104280011311248004D00410043002D005300480041003100060002123C0E0E070003123C0E0E0E080004123C0E0E0E0E0400010E0E05000112350E06000212350E0210000712390E15120D020E0E0E0E0E0E0E0500010E123D0900010E15120D020E0E0300000E0E000501123515120D020E0E0E0E0E0500010E12350306123003061234030612381400081141114511451145114511451141114911490E000511451145114511451145114110000611411145114511451145114511454C0019011C10114110114D10114110114110115110115110114510114510114110114510114510114510114110114510114510114510114510114510114510114910114910115510115510114D0B000612590E0E0E0E0E122D08F0A9879D7B87F0480E000512591145114511451145115D100006125911451145114511451141115D0E00051259114511451145114511414C0019011C10114110114510114510115110115110114510114D10114510114510115510114510114510115510115510115510114510115510115510114D1011451011551011511011511011510C0004125911451145114511450E000512591145114511451145114510000612591145114511451145114511410A0003011C101145101145042000121C05200101121C062002010E121C082003010E121C121D0306121C042800121C38680074007400700073003A002F002F006100700069002E0074007700690074007400650072002E0063006F006D002F0031002E0031002F00062001121C121C072002121C121C0E07000201121C122105000101121C0600011224126106000112201265060001122C1261060001122C12650600011228126505000111290E0600020E12650E12010001005408074D617853697A656400000012010001005408074D617853697A658C00000012010001005408074D617853697A651400000080A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC60B2000151280B5021300130108151280B50211101C0B2000151180B9021300130108151180B90211101C0420001300062001130113000600030E0E1C1C040001020E0520020E08080F07040E1110151180B90211101C1110072002011300130106070211291110090100044974656D00000520001280C90420011C0805200201081C042001081C042001011C042001021C0615120D020E0E0520001280CD0520001280D10320001C0420011C1C0D07051268121C0E1280D11280BD0607021268121C05151125010A05151125010D0500020E0E1C0600030E1C1C1C0520001280E1062001011280E1060002123D0E0E0520001280F10620011280F50E110706123C15120D020E0E12390E123D12210620011280F5080500001280FD0700020A0E12810105000111310A0F0705123C15120D020E0E12390E1221052002011C180800030E0E0E1281050520020E0E0E0507011281050620011281090E0720021281090E1C0507011281090B20001511810D0213001301071511810D020E0E0B20001511811102130013010715118111020E0E0420001301072002011181190E050002020E0E042001020E0820031281090E1C1C0600030E0E0E0E0600011281210E0900030E1281010E1D1C052000128129052002010E0E0520001280DD32070B15120D020E0E15118111020E0E128115123912810915118111020E0E0E1281251511810D020E0E1511810D020E0E1D1C0715128131020E0E0C2001011512813502130013010B20001511813902130013010715118139020E0E1A070412810915128131020E0E15118111020E0E15118139020E0E072002020E11813D1B070512810915128131020E0E15118111020E0E0E15118139020E0E04000011290A20070108080808080808090002118141112911290320000D0700020A1C1281010620010E1281010607021181410A0520020808080720020E0E128101030701080620010E1280FD0500001281590520011D050E052001011D050620011D051D050500010E1D0528070B0E15120D020E0E15128131020E0E15118111020E0E0E1281550E0E15118139020E0E1D1C1D1C0500020E0E0E0507020E1D1C1C070512810915128131020E0E15118111020E0E15118139020E0E1D1C062001011181690300000105000012816D0520001281710520001281750500010E1D0E0707041D0E08080880C501000400540E044E616D650E547769747465725F5570646174655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E6973746963005402094973507265636973650105200101130005000111410A15070512201250151125010A151125010D151125010D80CC01000400540E044E616D6515547769747465725F44657374726F795374617475735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E6973746963005402094973507265636973650105000111450E040701125080D001000400540E044E616D6519547769747465725F53656E644469726563744D6573736167655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E697374696300540209497350726563697365010607021220125080D301000400540E044E616D651C547769747465725F44657374726F794469726563744D6573736167655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501060001114D112905000111510205000111490D03061149030611550500011155080620030108080807000202112911290306114D0407011158061512817D011C0615128181011C08200015128181011C0920001512818101130002061C0306122D030611580306125004061280D104061280BD0328001C0500001281890407011270070615120D020E080615120D020E080820020213001013010515112501080615112501112926070A02080E08151125010815112501081511250108151125010815112501112915112501112983B801000700540E044E616D6517547769747465725F47657453656E744D657373616765735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D45042000122D83B401000700540E044E616D6513547769747465725F4765744D657373616765735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B801000700540E044E616D6517547769747465725F4765745573657254696D656C696E655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B401000700540E044E616D6513547769747465725F4765744D656E74696F6E735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B501000700540E044E616D6514547769747465725F4765744661766F72697465735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B69\
-6E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B801000700540E044E616D6517547769747465725F476574486F6D6554696D656C696E655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B801000700540E044E616D6517547769747465725F47657452657477656574734F664D655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4583B401000700540E044E616D6513547769747465725F47657452657477656574735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4503061145030611410306115D04070112782407080208151125010815112501081511250108151125010815112501112915112501112983B201000700540E044E616D6511547769747465725F4765745374617475735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D45040701127C23070708151125010815112501081511250108151125010815112501112915112501112983B701000700540E044E616D6516547769747465725F4372656174654661766F726974655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4505070112808083B801000700540E044E616D6517547769747465725F44657374726F794661766F726974655455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D4505070112808483B001000700540E044E616D650F547769747465725F526574776565745455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D65145477697474657253746174696946696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E8216537461747573494420424947494E542C2043726561746564204441544554494D452C20496E5265706C79546F537461747573494420424947494E542C20496E5265706C79546F55736572494420424947494E542C2049734661766F7269746564204249542C2049735472756E6361746564204249542C20536F75726365204E5641524348415228323030292C2053746174757354657874204E5641524348415228333030292C20526563697069656E74494420424947494E542C2054696D655A6F6E65204E5641524348415228313030292C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C2055736572494420424947494E542C204C6F636174696F6E204E5641524348415228313030292C20506C6163654944204E56415243484152283530292C20506C6163654E616D65204E5641524348415228353030292C20506C61636546756C6C4E616D65204E5641524348415228353030292C20506C61636554797065204E5641524348415228353030292C20506C616365436F756E747279204E5641524348415228353030292C20506C6163654C6174697475646520464C4F41542C20506C6163654C6F6E67697475646520464C4F41542C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D45050701128088040701115C83A801000700540E044E616D6514547769747465725F476574466F6C6C6F776572735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540306115C05070112808C30070A0208151125011129151125011129151125010815112501081511250108151125010815112501112915112501112983A601000700540E044E616D6512547769747465725F476574467269656E64735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E672042495405070112809083A301000700540E044E616D650F547769747465725F476574557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E\
-820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280942F070908151125011129151125011129151125010815112501081511250108151125010815112501112915112501112983A601000700540E044E616D6512547769747465725F466F6C6C6F77557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E672042495405070112809883A801000700540E044E616D6514547769747465725F556E466F6C6C6F77557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E672042495405070112809C83A501000700540E044E616D6511547769747465725F476574426C6F636B735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280A083A501000700540E044E616D6511547769747465725F426C6F636B557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280A483A701000700540E044E616D6513547769747465725F556E426C6F636B557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280A883AA01000700540E044E616D6516547769747465725F47657452657477656574656442795455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280AC83A401000700540E044E616D6510547769747465725F4D757465557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280B083A601000700540E044E616D6512547769747465725F556E4D757465557365725455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280B483A401000700540E044E616D6510547769747465725F4765744D757465735455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572557365727346696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E820A55736572494420424947494E542C2053637265656E4E616D65204E5641524348415228313030292C20557365724E616D65204E5641524348415228313030292C20497350726F746563746564204249542C2049735665726966696564204249542C204465736372697074696F6E204E564152434841522834303030292C20437265617465644F6E204441544554494D452C204C6F636174696F6E204E5641524348415228353030292C2054696D655A6F6E65204E5641524348415228313030292C205554434F666673657420494E542C2050726F66696C65496D616765557269204E564152434841522832303438292C2050726F66696C65557269204E564152434841522832303438292C20467269656E6473436F756E7420494E542C204E756D6265724F66466F6C6C6F7765727320494E542C204E756D6265724F66537461747573657320494E542C2053746174757354657874204E5641524348415228333030292C20526174654C696D697420494E542C20526174654C696D697452656D61696E696E6720494E542C20526174654C696D69745265736574204441544554494D452C204C616E6775616765204E56415243484152283530292C204E756D6265724F665075626C69634C6973744D656D626572736869707320494E542C20497347656F456E61626C6564204249542C20466F6C6C6F77696E67204249542C204D7574696E67204249540507011280B8040701116081D001000700540E044E616D650D547769747465725F78417574685455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E69737469630054020949735072656369736501540E1146696C6C526F774D6574686F644E616D651354776974746572584175746846696C6C526F7754557F4D6963726F736F66742E53716C5365727665722E5365727665722E53797374656D446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391053797374656D4461746141636365737300000000540E0F5461626C65446566696E6974696F6E3A416363657373546F6B656E204E5641524348415228313030292C20416363657373546F6B656E536563726574204E56415243484152283130302907151281910111600F0704123C121D116015128191011160062002010E121D080003020E0E118195090003123D0E0E11819505200012819D040001080E0400010D0E05200111290D092002011280E1128159062001011281A5062001011281A908151281B5011181B90420011C0E08151281BD011181B90420010E1C22070D1280E512391281991221121D1280E10E1281A51281A91281AD1281B1121C11290520001181C10520001181C50C070412391280E5126C1181C5042000126105200112650E0707021281C9111822070912201228151125010815112501081511250111291280D11280BD1280D11280BD0620011281CD0E0700040E0E0E0E0E0E070512241261121D1280D11280BD05200112610E0400010A0E060002020E1002130709122002021265081D0E12651280D11280BD04070112200E0705122C1261121D1280D11280BD060002020E1008050702122808052001123D0E0600020E0E1D1C0B07041280ED123D11291D1C1501001053514C232E54776974746572697A65720000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300004201003D436F7079726967687420C2A920323030362D32303134\
-2053716C205175616E74756D204C6561702E20416C6C205269676874732052657365727665642E00002901002437313761636437332D316364632D343539352D626134632D34336434616539613838346200000B010006332E332E383300000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F77730170F3010000000000000000008EF3010000200000000000000000000000000000000000000000000080F3010000000000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF2500200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058000200B40300000000000000000000B40334000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100030003000000530003000300000053003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00414030000010053007400720069006E006700460069006C00650049006E0066006F000000F002000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C00650061007000000000004C0011000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E00540077006900740074006500720069007A006500720000000000300007000100460069006C006500560065007200730069006F006E000000000033002E0033002E0038003300000000004C001500010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E00540077006900740074006500720069007A00650072002E0064006C006C0000000000A0003D0001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A900200032003000300036002D0032003000310034002000530071006C0020005100750061006E00740075006D0020004C006500610070002E00200041006C006C0020005200690067006800740073002000520065007300650072007600650064002E00000000005400150001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E00540077006900740074006500720069007A00650072002E0064006C006C00000000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340007000100500072006F006400750063007400560065007200730069006F006E00000033002E0033002E0038003300000000003C000900010041007300730065006D0062006C0079002000560065007200730069006F006E00000033002E0033002E00380033002E00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F001000C000000A03300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = ' + @IsSQLServer2005 + N'SAFE;
- ')
- PRINT 'SQL#.Twitterizer Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.Twitterizer Assembly.';
- END;
- PRINT '';
-
-
- IF (@InstallSQL#SgmlReader = 1)
- BEGIN
- PRINT 'Creating SQL#.SgmlReader Assembly ...';
- EXEC(N'
- CREATE ASSEMBLY [SQL#.SgmlReader]
- AUTHORIZATION [' + @SQLsharpLogin + N']
-FROM 0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0103007F2168540000000000000000E00002210B010B0000D200000008000000000000EEF00000002000000000010000000010002000000002000004000000000000000400000000000000004001000002000003AB010003004085000010000010000000001000001000000000000010000000000000000000000094F0000057000000000001007804000000000000000000000000000000000000002001000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000F4D000000020000000D2000000020000000000000000000000000000200000602E7273726300000078040000000001000006000000D40000000000000000000000000000400000402E72656C6F6300000C000000002001000002000000DA00000000000000000000000000004000004200000000000000000000000000000000D0F0000000000000480000000200050074810000206F0000090000000000000000000000000000005020000080000000000000000000000000000000000000000000000000000000000000000000000032CDAB84FF6BB0E39A3831143E68BC29C98F8E34FADA1FDAC53F9F4433BA5BA964BA69750892FDA4BD6387F85372696E9686C0E2359E62D727CD85848756BE49BE91EDF19FFA0E855891EE2DB18C0A8FFB48FF114A466E9E850E628282F88BEFA20D81DEE36079B20A5E8C75FA42AB05CC3D88437A010D70D72407EE33D8A59E1E02281200000A2A220203281300000A2A5E0203281300000A042C0C02046F270000067D010000042A26020304281400000A2A76020304281500000A032C11020372010000706F1600000A7D010000042A1E027B010000042AA2032D0B721D000070731800000A7A037201000070027B010000046F1900000A020304281A00000A2AEE02281B00000A02037D0800000402047D0A00000402057D0B000004020E047D0700000402032C0D03722700007028950000062B01167D0F0000042A7202281B00000A02037D0800000402047D0C00000402177D090000042A0003300500450000000000000002281B00000A02037D0800000402177D0900000402057D1500000402047D14000004020E047D070000040203722700007017281C00000A281D00000A16FE017D0F0000042A1E027B080000042A1E027B0F0000042A2202037D0F0000042A1E027B0A0000042A1E027B0B0000042AAE027B1400000414281E00000A2C07027B140000042A027B0E0000042C0C027B0E0000046F100000062A142A1E027B0E0000042A1E027B110000042A1E027B100000042A42027B18000004027B170000045917582A1E027B090000042A1E027B0C0000042A1E027B0D0000042A1E027B120000042A1E027B070000042A0013300300C400000001000011027B150000046F1F00000AD10A062D031F200A02257B1800000417587D18000004061F0A332502177D1200000402027B1800000417587D1700000402257B1000000417587D100000042B70061F202E05061F09332D02177D12000004027B110000041F0D335502027B180000047D1700000402257B1000000417587D100000042B39061F0D330902177D120000042B2B02167D12000004027B110000041F0D331A02257B1000000417587D1000000402027B180000047D1700000402067D11000004062A1B3004003E0200000200001102037D0E000004032C0C02036F0C0000067D0F00000402177D10000004027B090000042C1D027B0C000004390D02000002027B0C000004732000000A7D150000042A027B0B0000042D12027231000070027B0800000428260000062A0414281E00000A2C140204027B0B000004732100000A7D140000042B1102027B0B000004732200000A7D14000004140A282300000A0B027B140000046F2400000A25130D2C28110D7265000070282500000A2C1A027B140000046F2600000A0C081917732700000A0A384E010000022810000006282800000A74330000010D09726F0000706F2900000A0920102700006F2A00000A027B070000042C1109027B07000004732B00000A6F2C00000A09166F2D00000A09282E00000A6F2F00000A096F3000000A130411046F3100000A130511056F3200000A027B140000046F3200000A17281C00000A281D00000A2C080211057D1400000411046F3300000A281C00000A6F3400000A13061106130711061F3B6F3500000A1308110816320C11061611086F3600000A1307110772A500007028950000062C0702177D0F000004110672B90000706F3700000A1308282300000A0B110816325B110672C900007011086F3800000A1309110672CD00007011096F3800000A130A110A162F0911066F3900000A130A110916312811091758130911061109110A1109596F3600000A6F3A00000A130B110B283B00000A0BDE0326DE0011046F3C00000A0A02177D160000040607732D000006130C02110C6F2E0000067D1300000402110C7D150000042A000001100000000003020A0D0203390000011E027B130000042A52027B160000042C0B027B150000046F3D00000A2A000000133002002E00000001000011027B110000040A2B0702281A0000060A0620FFFF00002E14061F202EEC061F0D2EE7061F0A2EE2061F092EDD062A000013300500D500000003000011032D0B72D1000070731800000A7A042D0B72D7000070731800000A7A03166F3E00000A027B110000040A05398C000000061F5F3B8400000006283F00000A2D7C284000000A72E1000070178D030000010B0716068C3A000001A207284100000A73020000067A052C1C061F5F2E17061F2E2E12061F2D2E0D061F3A2E0806284200000A2C0A03066F4300000A262B26284000000A7227010070178D030000010C0816068C3A000001A208284100000A73020000067A02281A0000060A0620FFFF00002E0A04066F3500000A163298036F4400000A2A000000133002008A00000004000011032D0B72D1000070731800000A7A03166F3E00000A02281A0000060A2B52061F26333E02281A0000060A061F2333180228220000060B03076F4500000A26027B110000040A2B29031F266F4300000A2603066F4300000A2602281A0000060A2B0F03066F4300000A2602281A0000060A0620FFFF00002E04060433A202281A00000626036F4400000A2A0000133004005001000005000011052D0B7261010070731800000A7A032C0703166F3E00000A027B100000040A02281A0000060B160C05086F4600000A0D38E40000000709331D0817580C08056F3900000A3CDB00000005086F4600000A0D38BC00000008163EAA00000008175913041613052B490511046F4600000A0733381713062B1D0511041106596F4600000A05081106596F4600000A330E1106175813061104110659162FDB11061104310E1104175813052B06110417591304110416320411052CAE032C3D1104163203162B011713041613072B15030511076F4600000A6F4300000A2611071758130711070811055911045931E0110416310803076F4300000A2611050C0511056F4600000A0D2B0B032C0803076F4300000A2602281A0000060B0720FFFF00004011FFFFFF072D1202047279010070284700000A06282500000602281A00000626032C07036F4400000A2A7E4800000A2A133003000B0100000600001102281A0000060A160B061F78337A02281A0000060A2B47160C061F30320C061F393007061F30590C2B26061F61320F061F66300A061F61591F0A580C2B12061F413252061F46304D061F41591F0A580C071F105A08580B02281A0000060A0620FFFF00002E2F061F3B33AC2B28061F303223061F39301E071F0A5A061F3059580B02281A0000060A0620FFFF00002E05061F3B33D8062D0E0272C70100700628240000062B0C061F3B330702281A00000626027B0F0000042C41072080000000FE0416FE0107209F000000FE0216FE015F2C287E1900000426072080000000590D7E19000004099413041104284900000A13051205284A00000A2A07284900000A13061206284A00000A2A22030273030000067A1330050034000000070000110420FFFF00002E0804284B00000A2B0572150200700A284000000A03178D030000010B071606A207284100000A0273030000067A133005002300000008000011284000000A03178D030000010A0616048C3D000001A206284100000A0273030000067A00133005001E00000008000011284000000A03178D030000010A061604A206284100000A0273030000067A000013300500C100000009000011020A734C00000A0B38A7000000067B090000042C3F281C00000A721D020070198D030000010D0916067B100000048C3D000001A20917066F140000068C3D000001A20918067B08000004A209284100000A0C2B51281C00000A729B0200701A8D030000011304110416067B100000048C3D000001A2110417066F140000068C3D000001A2110418067B08000004A2110419066F100000066F4D00000AA21104284100000A0C07086F4500000A26066F110000060A063A53FFFFFF076F4400000A2AF602721903007017281C00000A281D00000A2C2802722503007017281C00000A281D00000A2C1502723103007017281C00000A281D00000A16FE012A172A0013300200450000000A00001103250A2C3F067219030070282500000A2D1B067225030070282500000A2D16067231030070282500000A2D112A02167D0D0000042A02177D0D0000042A02187D0D0000042A3A02176F2B00000602284E00000A2A7A032C1A027B150000042C12027B150000046F4F00000A02147D150000042A0000000000AC200000810000001A200000920100001E200000262000002020000021200000C6020000302000006001000039200000520100008D0000007D0100008F0000009000000018200000192000001C2000001D200000222000001320000014200000DC02000022210000610100003A200000530100009D0000007E01000078010000621F208D3D00000125D0B7000004285100000A80190000042A000000133006000C0100000B00001102285200000A042D07285300000A1002036F5400000A2D0803282F000006100102037D1C0000040220004000008D440000017D1D0000040203027B1D000004161A6F5500000A7D1F0000040220004000008D3A0000017D2200000402027B1D000004027C1E000004027B1F00000428310000067D21000004027B1E0000040A027B210000042D4202046F5600000A7D2100000402257B1F00000403027B1D0000041A20FC3F00006F5500000A587D1F00000402283000000602283A0000060B072C0702077D21000004027B1C000004166A166F5700000A26020216250C7D23000004087D240000040616310F03027B1D00000416066F5500000A26020216250D7D1F000004097D1E0000042A1E027B200000042A133004003E0000000C00001120A08601000A068D440000010B735800000A0D2B09090716086F5900000A020716066F5500000A250C1630E909166A166F5700000A26026F5A00000A092A000013300800100100000D000011027B2400000416314D027B24000004027B230000042F25027B22000004027B24000004027B2200000416027B23000004027B2400000459285B00000A02257B23000004027B24000004597D2300000402167D24000004027B21000004027B1D000004027B1E000004027B1F000004027B1E000004596F5C00000A0A027B220000048E69027B23000004590B07062F37027B220000048E6906588D3A0000010C027B22000004027B240000040816027B23000004027B2400000459285B00000A02087D2200000402027B24000004027B21000004027B1D000004027B1E000004027B1F000004027B1E00000459027B22000004027B240000046F5D00000A587D2300000402027B1F0000047D1E0000042A13300400E10000000E0000111A04034A593DD500000002034A911F186202034A1758911F10626002034A1858911E626002034A195891600A060B07200000003C350F071F3C2E2807200000003C2E142B2A0720FFFEFFFE2E0A0720FEFFFEFF2E0E2B1803254A1A5854734D0000062A03254A1A5854734F0000062A061E640A0620BFBBEF00331103254A195854285300000A6F5600000A2A061E640A060C0820003C0000350F081F3C2E2D0820003C00002E142B360820FFFE00002E0A0820FEFF00002E132B2403254A185854285E00000A6F5600000A2A03254A1858541616735F00000A6F5600000A2A142A00000013300400290000000F000011027B24000004027B230000042F19027B2200000402257B24000004250A17587D2400000406932A152A000000133003001B0000000F0000110228320000060A06152E0E02257B2400000417597D24000004062A001330030041000000100000110228330000060A0603166F4600000A2E02162A160B036F3900000A0C2B190228320000060A03076F4600000A0D06092E02162A0717580B06152E04070832DF172A000000133002004900000011000011022833000006D10A2B2A027B240000040B022832000006D10A061F202E16061F092E11061F0D2E0C061F0A2E0702077D24000004061F202ED1061F092ECC061F0D2EC7061F0A2EC22A000000133004005F000000120000110228330000060A061F272E05061F22334C02283200000626027B240000040B0228320000060C2B070228320000060C08152E04080633F1027B2400000407300672370300702A027B2200000407027B2400000407591759736000000A2A142A00133004003E0000000A00001102283500000602283C0000060A030617281C00000A281D00000A2D200228350000060272C900007028340000062C0D0228350000060228360000062A142AD20228350000060302283C0000065103502C200228350000060272C900007028340000062C0D0228350000060228360000062A142A001330020037000000120000110228320000060A160B036F3900000A0C2B1C03076F4600000A0633090717580B070833032A160B0228320000060A07082F04061533DC2A001B3002006700000013000011140A02723903007028340000062C4902724503007028370000060B072C3A02725503007028370000060C082C2008283B00000A0D092C1102097D20000004096F5600000A1304DE1CDE0326DE000272670300702839000006062D0702283B0000062A142A11042A000110000000002D001D4A0003390000011B3004001B010000140000110228320000060A380301000006D10B071F3C40F100000002283C0000060C0839E400000008726B030070289500000639D4000000140D14130402120228380000061305082C2508727503007028950000062C0511050D2BE108728B03007028950000062CD4110513042BCE09399700000009729B0300702895000006398700000011043980000000110472B90000706F3700000A1306110616326D110472C900007011066F3800000A13061106163258110617581306110472CD00007011066F3800000A13071107162F0911046F3900000A13071104110611071106596F3600000A6F3A00000A13081108283B00000A13090211097D2000000411096F5600000A130ADE1326DE000228320000060A061540F6FEFFFF142A110A2A00011000000000E9001C050103390000011330040079000000150000110228330000060A06153302142A06D10B027B240000040C2B19027B2200000402257B240000041758250D7D2400000409930B027B24000004027B2300000417592F1707284200000A2DCF071F2D2ECA071F5F2EC5071F3A2EC008027B240000043302142A027B2200000408027B240000040859736000000A2A000000133004004300000011000011022833000006D10A2B19027B2200000402257B240000041758250B7D2400000407930A027B24000004027B2300000417592F0F061F202ED2061F0D2ECD061F0A2EC82A00133004003800000011000011022833000006D10A2B19027B2200000402257B240000041758250B7D2400000407930A027B24000004027B2300000417592F04060333D32A133004009700000016000011021F3D283E000006027B24000004027B230000042F7F02257B2400000417587D2400000402283D000006027B24000004027B230000042F5D027B22000004027B24000004930A02257B2400000417587D24000004027B240000040B0206283E000006027B24000004027B230000042F25027B2200000407027B240000040759736000000A0C02257B2400000417587D24000004082A142A00133003001B0000000F000011026F1F00000A0A06152E0E02257B2400000417597D24000004062A00133005006E0000000F000011027B24000004027B23000004333702027B1C000004027B1D00000416027B1D0000048E696F5500000A7D1F00000402167D1E000004027B1F0000042D02152A022830000006027B24000004027B230000042F19027B2200000402257B24000004250A17587D2400000406932A152A0000033005008E00000000000000027B24000004027B23000004333702027B1C000004027B1D00000416027B1D0000048E696F5500000A7D1F00000402167D1E000004027B1F0000042D02152A022830000006027B24000004027B230000042F39027B23000004027B240000045905286100000A1003027B22000004027B24000004030405285B00000A02257B2400000405587D24000004052A162A2A020304056F6200000A2A000000133003005100000017000011160A0228320000060B2B400306045807D19D0617580A060458052E33071F0D331E0228330000061F0A33240228320000060B0306045807D19D0617580A2B10071F0A2E0B0228320000060B071533BC062A00000013300400360000001800001120A08601008D3A0000010A160B734C00000A0C2B0A080616076F6300000A26020616068E696F6200000A250B1630E6086F4400000A2A32027B1C0000046F5A00000A2A2E05027B26000004581A5B2A0013300600A900000017000011027B260000040A027B2600000416313C2B19027B25000004060304919C041758100205175910030617580A061A32E3170A02027B25000004161A0E040E056F48000006260E05175810052B02160A020304050E040E056F4800000606580A027B2600000405581A5D0B0504581003050759100202167D26000004041632292B23027B25000004027B260000040304919C02257B2600000417587D260000040417581002040532D9062A00000013300300220000001900001120C0D70000021F0A6458D20A2000DC00000220FF0300005F60D20B071E620660D12A4E021A8D440000017D2500000402286400000A2A000013300500C80000001A0000110504581003040B0E050C38AB00000003071958911F186203071858911F10626003071758911E6260030791600A0620FFFF10003626284000000A72B5030070178D030000010D0916068C49000001A209284100000A73020000067A0620FFFF000036100E040806284A0000069D0817580C2B3F062000D8000037310620FFDF00003529284000000A72B5030070178D030000011304110416068C49000001A21104284100000A73020000067A0E040806D19D0817580C071A580B071958053F4CFFFFFF080E05592A1E02284B0000062A13300500C80000001A0000110504581003040B0E050C38AB0000000307911F186203071758911F10626003071858911E62600307195891600A0620FFFF10003626284000000A72B5030070178D030000010D0916068C49000001A209284100000A73020000067A0620FFFF000036100E040806284A0000069D0817580C2B3F062000D8000037310620FFDF00003529284000000A72B5030070178D030000011304110416068C49000001A21104284100000A73020000067A0E040806D19D0817580C071A580B071958053F4CFFFFFF080E05592A1E02284B0000062AD202281B00000A02037D2700000402047D2800000402057D29000004020E047D2A000004020E057D2B000004020E067D2C0000042A1E027B270000042A1E027B2A0000042A1E027B290000042A1E027B280000042A000000133003002E0000001B000011027B2D0000042D0B7201040070736500000A7A027B2D00000403281C00000A6F6600000A12006F6700000A26062A00001B300300730000001C000011032D0B7294040070731800000A7A027B2D0000042D0802037D2D0000042A036F6800000A6F6900000A0B2B2D1201286A00000A0A027B2D000004066F6C0000066F6B00000A2D12027B2D000004066F6C000006066F6C00000A1201286D00000A2DCADE0E1201FE160300001B6F6E00000ADC2A000110000002002A003A64000E00000000133003007B0000001D000011027B2C0000042C2C027B2C0000040D1613042B190911049A0A060319286F00000A2D04160CDE521104175813041104098E6932E0027B2B0000042C2F027B2B00000413051613062B1A110511069A0B070319286F00000A2D04170CDE1C110617581306110611058E6932DE027B2A00000403046F610000062A082A4E02281B00000A021473650000067D350000042A1E027B340000042A1E027B330000042A8202027B3500000473650000067D3500000402257B3400000417587D340000042A033003004600000000000000027B340000042D02152A02257B3400000417597D34000004027B350000046F64000006027B350000046F6600000602027B350000046F640000067D35000004027B340000042A36027B35000004036F670000062A36027B35000004036F680000062A36027B35000004036F690000062A13300500670000000700001103250A2C4106729E040070282500000A2D1C0672AA040070282500000A2D17067219030070282500000A2D122B1802197D330000042A02187D330000042A02177D330000042A284000000A72B8040070178D030000010B071603A207284100000A73020000067A62027B330000042C02162A027B3500000403046F6A0000062A1E027B430000042A66027B440000042C0F027B410000046F7000000A16FE012A162A1E027B400000042A9E02281B00000A02037D4000000402737100000A7D4100000402167D4200000402167D430000042A3A027B41000004036F7200000A262AA603721205007017281C00000A281D00000A2D0802177D440000042A027B41000004036F7200000A262A0013300500AC0000001E000011027B440000042D33027B410000046F7000000A2D26284000000A7222050070178D030000010B0716038C3A000001A207284100000A73020000067A160A030C081F262E14081F2C2E07081F7C2E062B0A190A2B06180A2B02170A027B420000042C42027B42000004062E39284000000A726E050070188D030000010D0916038C3A000001A20917027B420000048C0C0000026F4400000AA209284100000A73020000067A02067D420000042A133002002C0000001F000011160A030B071F2A5945020000000D00000009000000071F3F330A170A2B06190A2B02180A02067D430000042A1B300300E400000020000011042D0B72CE050070731800000A7A027B410000046F7300000A13062B2711066F7400000A0A06752D0000012C1706742D0000010319286F00000A2D08171305DD9D00000011066F7500000A2DD0DE1511067504000001130711072C0711076F6E00000ADC027B410000046F7300000A13082B4C11086F7400000A0B07752D0000010C082C2204086F7B0000060D092C2F096F540000062C270903046F570000062C1D171305DE3A07740E0000021304110403046F6A0000062C05171305DE2211086F7500000A2DABDE1511087504000001130911092C0711096F6E00000ADC162A11052A011C000002001B00344F0015000000000200710059CA0015000000003A02281B00000A02037D5C0000042A1E027B5C0000042A1E027B5F0000042A2202037D5F0000042A1E027B600000042A1E027B5E0000042A133005003F00000008000011041F102E2B041F0F2E26284000000A72D6050070178D030000010A0616048C0F000002A206284100000A737600000A7A02037D5E00000402047D5D0000042A1E027B5D0000042A0013300500BA0100002100001103250A3991010000FE137EB80000043ABB0000001F0E737700000A25721903007016287800000A25728106007017287800000A25728F06007018287800000A2572A106007019287800000A2572A70600701A287800000A2572B30600701B287800000A2572C10600701C287800000A2572CB0600701D287800000A2572D70600701E287800000A2572E70600701F09287800000A2572F90600701F0A287800000A2572070700701F0B287800000A2572170700701F0C287800000A2572270700701F0D287800000AFE1380B8000004FE137EB8000004061201287900000A39B600000007450E000000020000000A000000120000001A000000220000002A000000320000003A000000420000004B000000540000005D000000660000006F0000002B7602177D5D0000042A02187D5D0000042A02197D5D0000042A021A7D5D0000042A021B7D5D0000042A021C7D5D0000042A021D7D5D0000042A021E7D5D0000042A021F097D5D0000042A021F0A7D5D0000042A021F0B7D5D0000042A021F0C7D5D0000042A021F0D7D5D0000042A021F0E7D5D0000042A284000000A7239070070178D030000010C081603A208284100000A73020000067A0000133005007D00000022000011170A03728507007017281C00000A281D00000A2D0902177D600000042B5D03729107007017281C00000A281D00000A2D0B02187D60000004160A2B3F0372A307007017281C00000A281D00000A2D0B02197D60000004160A2B21284000000A72B3070070178D030000010B071603A207284100000A73020000067A062AEA02281B00000A02037D6200000402737A00000A7D6300000402737B00000A7D6400000402737B00000A7D6500000402734C00000A7D660000042A1E027B620000042A0A142A001B3006006600000023000011030E0673750000060A05287C00000A2D160602066F7600000604050E0573080000066F7C0000060E04287C00000A2D0F0602030E0473090000066F7C000006066F7E000006DE1D0B076F7D00000A067B670000046F27000006284700000A73020000067A062A00000110000000003F000847001D4F0000011B3006005C00000023000011030E0573750000060A0602066F7600000602040E04730A0000066F7C00000605287C00000A2D0E0602030573090000066F7C000006066F7E000006DE1D0B076F7D00000A067B670000046F27000006284700000A73020000067A062A0110000000003500083D001D4F000001133003001100000024000011027B650000040312006F7E00000A26062A000000133003001B00000025000011027B6300000403281C00000A6F6600000A12006F7F00000A26062A8604027B67000004036F1B00000602047D67000004027B670000046F1A000006262AEA027B670000042C0B027B670000046F1D000006027B670000046F110000062C1202027B670000046F110000067D670000042A02\
-147D670000042A1B300300D500000026000011027B670000046F120000060A060C081F203027081F0959450500000039000000390000008F0000008F00000039000000081F202E343885000000081F252E4C081F3C2E330820FFFF0000337302287D000006027B670000042D012A027B670000046F120000060A2BA3027B670000046F1A0000060A2B9502287F000006027B670000046F1A0000060A2B810272FB07007028860000060B02027B670000046F1000000607287C000006DE0326DE00027B670000046F120000060A384DFFFFFF027B670000047205080070066F240000063837FFFFFF000000011000000000970014AB00030100000113300400EB00000027000011027B670000046F1A0000060A061F212E11027B67000004723B0800706F230000062A027B670000046F1A0000060A061F2D333F027B670000046F1A0000060A061F2D2E11027B6700000472AD080070066F24000006027B67000004027B6600000472FB080070720B0900706F21000006262A061F5B33070228820000062A027B67000004027B6600000472FB070070176F1F0000060B07250C2C3E087281060070282500000A2D1C087213090070282500000A2D16087223090070282500000A2D102B150228890000062A02288A0000062A02288F0000062A027B670000047233090070076F260000062A00133002001D00000001000011027B670000046F120000060A2B08021728810000060A061F2D2EF3062A000000133004005900000001000011027B670000046F1300000626027B670000046F1A0000060A032C16061F2D2E11027B6700000472C8090070066F24000006027B67000004027B6600000472260A007072440A00706F2100000626027B670000046F1E0000062A000000133004005E0000000A000011027B670000046F1A0000062602724A0A007028850000060A06724E0A007017281C00000A281D00000A2D070228830000062A06725E0A007017281C00000A281D00000A2D070228840000062A027B67000004726C0A0070066F260000062A2E72B80A0070738000000A7A0000133004004B00000001000011027B670000046F1300000626027B670000046F1E0000060A061F5B2E11027B6700000472D80A0070066F24000006027B67000004027B6600000472100B007072380B00706F21000006262A00133004005800000028000011027B670000046F1E0000060A061F253333020328860000060B027B670000046F120000060A076F150000062D0B72400B0070738100000A7A076F160000066F3A00000A2A027B67000004027B6600000403176F1F0000062A133004004F00000029000011027B670000046F1A00000626027B67000004027B6600000472CD00007003284700000A166F1F0000060A027B670000046F120000061F3B330C027B670000046F1A00000626020628870000060B072A00133003002700000024000011140A027B640000040312006F7E00000A26062D11027B67000004728A0B0070036F26000006062A001B300300490000002A000011737B00000A0A027B650000046F8200000A6F8300000A0C2B151202288400000A0B06076F16000006076F8500000A1202288600000A2DE2DE0E1202FE160800001B6F6E00000ADC062A00000001100000020017002239000E00000000133004000C0200002B000011027B670000046F1E0000060A061F25FE010B072C18027B670000046F1A00000626027B670000046F1E0000060A027B67000004027B6600000472FB070070176F1F0000060C027B670000046F1E0000060A140D061F222E05061F273322027B67000004027B66000004066F20000006130408110473090000060D3836010000141305141306027B67000004027B6600000472FB070070176F1F0000061307110728280000062C36027B670000046F1E0000060A027B67000004027B66000004066F20000006130808110873090000060D0911076F2900000638D800000011071306110672E60B007017281C00000A281D00000A2D3F027B670000046F1E0000060A061F222E05061F273316027B67000004027B66000004066F2000000613052B39027B6700000472F40B0070066F240000062B261106725C0C007017281C00000A281D00000A2C12027B67000004726A0C007011066F26000006141309027B670000046F1E0000060A061F222E05061F273316027B67000004027B66000004066F2000000613092B16061F3E2E11027B6700000472F10C0070066F240000060811051109027B670000046F1900000673080000060D027B670000046F1E0000060A061F2D33070228800000060A061F3E2E11027B6700000472590D0070066F24000006072C13027B64000004096F0B000006096F8700000A2A027B65000004096F0B000006096F8700000A2A13300800A50100002C000011027B670000046F1E0000060A020617288B0000060B027B670000046F1E000006281C00000A288800000A0A160C160D061F4F2E05061F2D3344061F4FFE010C027B670000046F1A00000626027B670000046F1E000006281C00000A288800000A0A061F4F2E05061F2D3312061F4FFE010D027B670000046F1A0000060A027B670000046F1E0000060A0206288D0000061304027B670000046F1E0000060A141305141306061F2D3349027B670000046F1A0000060A061F283318020617288B0000061305027B670000046F1E0000060A2B20061F2D330A021628810000060A2B11027B6700000472C90D0070066F24000006061F2D33070228800000060A061F2B3338027B670000046F1A0000060A061F282E11027B6700000472F90D0070066F24000006020617288B0000061306027B670000046F1E0000060A061F2D33070228800000060A061F3E2E11027B6700000472390E0070066F2400000607130916130A2B371109110A9A13071107281C00000A6F6600000A1308027B6300000411081108080911041106110573500000066F8900000A110A1758130A110A11098E6932C12A00000013300400220100002D000011737100000A0A031F2840D2000000027B670000046F1A0000061001027B670000046F1E0000061001389D000000027B670000046F1E0000061001031F25333B027E6800000428860000060B02027B670000046F1000000607287C000006020604288C00000602287D000006027B670000046F1200000610012B2C027B67000004027B660000047E68000004046F1F0000060C08281C00000A6F6600000A0C06086F7200000A26027B670000046F1E0000061001031F7C2E05031F2C330D027B670000046F1A0000061001031F29405BFFFFFF027B670000046F1A000006262B2C027B67000004027B6600000472FB070070046F1F0000060D09281C00000A6F6600000A0D06096F7200000A2606D02D000001288A00000A6F8B00000A740900001B2A000013300400BD0000002E000011027B670000046F120000060A027B670000046F1E0000060A3894000000061F25333A027E6800000428860000060C02027B670000046F1000000608287C000006020304288C00000602287D000006027B670000046F120000060A2B2C027B67000004027B660000047E68000004176F1F0000060B07281C00000A6F6600000A0B03076F7200000A26027B670000046F1E0000060A061F7C3318027B670000046F1A0000060A027B670000046F1E0000060A0620FFFF00004061FFFFFF2A00000013300300A30000002F00001173580000060A031F283346027B670000046F1A00000626021F2906288E000006027B670000046F1A0000061001031F3F2E0A031F2B2E05031F2A336506036F5F000006027B670000046F1A000006262B50031F253338027E6900000428860000060B02027B670000046F1000000607287C00000602027B670000046F12000006288D0000060A02287D0000062B13027E6900000428850000060C06086F60000006062A00133005000A02000030000011046F590000060A027B670000046F120000060B027B670000046F1E0000060B38D20100000720FFFF00003310027B6700000472AB0E00706F23000006071F253341027E6A00000428860000060C02027B670000046F1000000608287C0000060220FFFF000004288E00000602287D000006027B670000046F1E0000060B3874010000071F283323046F5B000006027B670000046F1A00000626027B670000046F1E0000060B384C010000071F293358027B670000046F1A0000060B071F2A2E0A071F2B2E05071F3F331304076F5F000006027B670000046F1A0000060B046F5C000006062F10027B6700000472E50E00706F23000006027B670000046F1E0000060B38EF000000071F2C2E0A071F7C2E05071F26332404076F5E000006027B670000046F1A00000626027B670000046F1E0000060B38BC000000071F233330027B670000046F1A0000060B725F0F0070027B67000004027B660000047E6A000004176F1F000006284700000A0D2B18027B67000004027B660000047E6A000004176F1F0000060D09281C00000A6F6600000A0D027B670000046F120000060B071F3F2E0A071F2B2E05071F2A3335046F5B00000604096F5D00000604076F5F000006046F5C00000626027B670000046F1A00000626027B670000046F1E0000060B2B1304096F5D000006027B670000046F1E0000060B07034027FEFFFF046F59000006063D1BFEFFFF2A0000133003006A00000031000011027B670000046F1E0000060A020617288B0000060B738C00000A0C02081F3E28900000060713051613062B35110511069A0D027B630000040912046F7F00000A2D11027B6700000472630F0070096F260000061104086F56000006110617581306110611058E6932C32A0000133003008500000032000011027B670000046F1E0000060A2B72061F25333E027E6B00000428860000060B02027B670000046F1000000607287C000006020320FFFF0000289000000602287D000006027B670000046F1E0000060A2B23061F2D33090228800000060A2B15020628910000060C03086F6C000006086F6C00000A027B670000046F1E0000060A0604338A2A000000133003008C00000033000011027B670000046F1E00000610010272FB07007028850000060A06281C00000A6F6600000A0A06736B0000060B027B670000046F1E0000061001031F2D330802288000000610010203072892000006027B670000046F1E0000061001031F2D330802288000000610010203072893000006027B670000046F1E0000061001031F2D33080228800000061001072A13300400BA00000034000011031F2533440272FB07007028860000060A02027B670000046F1000000606287C00000602027B670000046F1200000604289200000602287D000006027B670000046F1200000610012A031F28331104020316288B0000061F106F710000062A0272FB07007028850000060B0772B50F007017281C00000A281D00000A2D34027B670000046F1E0000061001031F282E11027B6700000472C70F0070036F2400000604020317288B0000061F0F6F710000062A04076F730000062A000013300400FB00000035000011031F2533440272FB07007028860000060A02027B670000046F1000000606287C00000602027B670000046F1200000604289300000602287D000006027B670000046F1200000610012A170B031F233339027B670000046F1A00000626027B67000004027B6600000472FB070070176F1F0000060C04086F740000060B027B670000046F1E0000061001072C6E031F272E05031F223328027B67000004027B66000004036F200000060D04096F6E000006027B670000046F1E00000610012A027B67000004027B6600000472FB070070166F1F00000613041104281C00000A6F6600000A13040411046F6E000006027B670000046F1E00000610012AA6721B1000708068000004722B10007080690000047237100070806A0000047251100070806B0000042A46020317281C00000A281D00000A16FE012A3A02281B00000A02037D730000042A1E027B720000042A2202037D720000042A1E027B710000042A620316320903027B710000043202142A027B70000004039A2A2A027B700000040304A22AA602257B7200000417597D72000004027B72000004163110027B70000004027B7200000417599A2A142A000000133004006400000036000011027B72000004027B71000004333D027B71000004027B73000004580A068D030000010B027B700000042C12027B7000000407027B71000004288E00000A02067D7100000402077D70000004027B7000000402257B72000004250C17587D72000004089A2ADE027B700000040314A2027B70000004031758027B7000000403027B7200000403591759285B00000A02257B7200000417597D720000042A7602037D7400000402047D7700000402057D7600000402147D750000042A96027B770000042C07027B770000042A027B750000042C0C027B750000046F6D0000062A142A2A027B7700000414FE012A1E02281B00000A2AFA02057D7900000402037D7D00000402047D7800000402167D7A00000402147D7B00000402177D7C000004027B81000004166F9800000602147D7E0000042A0000133004007F00000037000011160B027B810000046F970000060C2B2D027B81000004076F9A00000674160000020A067B74000004030E04281C00000A281D00000A2D02142A0717580B070832CF027B810000046F9D00000674160000020A062D1F73A20000060A027B81000004027B810000046F970000061759066F9B000006060304056F9F000006062A00133004004C00000038000011160A027B810000046F970000060B2B37027B81000004066F9A00000674160000020C087B740000040317281C00000A281D00000A2D0D027B81000004066F9E0000062A0617580A060732C52A133005005100000039000011160A037B810000046F970000060B2B3C037B81000004066F9A00000674160000020C02087B74000004086FA0000006087B760000041628A40000060D09087B750000047D750000040617580A060732C02A32027B810000046F970000062A0000133004004200000038000011160A027B810000046F970000060B2B2C027B81000004066F9A00000674160000020C087B740000040317281C00000A281D00000A2D02062A0617580A060732D0152A000013300200280000003A0000110316322203027B810000046F970000062F14027B81000004036F9A00000674160000020A062A142A52021F0A73960000067D8100000402281B00000A2A7E02177DB500000402738F00000A7DB600000402289000000A0228CA0000062A7E02177DB500000402738F00000A7DB600000402289000000A0228CA0000062A6E027B970000042D0C02027BA000000428AF000006027B970000042A2202037D970000042A000013300800CC0100003B000011027B970000043A24010000027BAF000004287C00000A398C000000027BB20000043909010000027BB20000047227000070289500000639F4000000D019000002288A00000A6F9100000A0A066F9200000A178D3A00000113041104161F2C9D11046F9300000A169A725D100070284700000A0B06076F9400000A0C0839AE00000008739500000A0D020372711000700914027BAD0000041428790000067D9700000438880000000314281E00000A2C1003027BAF000004732100000A10012B44027BA000000414281E00000A2C15027BA0000004027BAF000004732100000A10012B21289600000A727B100070284700000A732200000A027BAF000004732100000A10010203027BB2000004027BB0000004036F3200000A027BB1000004027BAD0000041428780000067D97000004027B970000043991000000027B970000046F7600000639810000000228C20000061305110517594502000000020000001F0000002B3A02027B970000046F76000006281C00000A6F6600000A7DA90000042B2E02027B970000046F76000006281C00000A6F3400000A7DA90000042B1102027B970000046F760000067DA900000402027B970000046F76000006722700007028950000067DA80000042A1E027BB20000042A2202037DB20000042A1E027BA90000042A1E027BB00000042A2202037DB00000042A1E027BAF0000042A2202037DAF0000042A1E027BB10000042A2202037DB10000042A1E027BAE0000042A3A02037DAE0000040228CA0000062A1E027BAD0000042A2202037DAD0000042A360203732200000A7DA00000042A1E027BAA0000042A000003300400600000000000000002037DAA0000040228CA000006027BA000000414289700000A2C44027BAA000004727F1000706F3700000A16311202027BAA000004732200000A7DA00000042A027287100070289600000A7299100070289800000A732200000A7DA00000042A1E027BB50000042A2202037DB50000042A1E027BB40000042A2202037DB40000042A1E027BA30000042A2202037DA30000042A1E027BAB0000042A5202037DAB0000040203739900000A7DA30000042A13300500DF0000003C0000110228C400000639D3000000284000000A0304284100000A0A027BAC000004027B980000042E3A06729F100070027B980000046F27000006289800000A0A02027B980000047DAC0000040228C400000672A910007006284700000A6F9A00000A2A72370300700B027B980000046F1000000614281E00000A2C11027B980000046F100000066F4D00000A0B0228C400000672BF1000701B8D030000010C081607A20817027B980000046F0B000006A20818027B980000046F130000068C3D000001A20819027B980000046F140000068C3D000001A2081A06A2086F9B00000A2A00133005001A0000003D0000110203178D2D0000010A06160F02284A00000AA20628C80000062A000003300500910000000000000002167D99000004021F0A73960000067D9C0000040202141F091428CB0000067D9D000004027B9D000004167D7C00000402734C00000A7DA100000402734C00000A7DA200000402167DA600000402147D9800000402167D9A00000402147D9B00000402147D9E00000402167D9F00000402147DA500000402167DA700000402167DA4000004027BB60000046F9C00000A2A00000013300400450000003E000011027B9C0000046F9D00000674170000020A062D1F73AA0000060A027B9C000004027B9C0000046F970000061759066F9B000006060304056FA300000602067D9D000004062A000000133004004E0000003F000011027B9C0000046F9700000617590A0616313B027B9C0000040617596F9A00000674170000020B027B9C000004061759027B9C000004066F9A0000066F9B000006027B9C00000406076F9B0000062A000013300400650000003E00001102037B7D000004037B78000004037B7900000428CB0000060A06037B7E0000047D7E00000406037B7C0000047D7C00000406037B7A0000047D7A00000406037B7B0000047D7B00000406037B7F0000047D7F00000406036FA600000602067D9D000004062A96027B9C0000046F9700000617311602027B9C0000046F9C00000674170000027D9D0000042A0013300200260000000F000011027B9C0000046F9700000617590A06163112027B9C000004066F9A00000674170000022A142ADE027B99000004193302182A027B990000041A3302192A027B99000004182E09027B990000041D33031F0F2A027B9D0000047B780000042A000013300200350000000A000011140A027B99000004193313027B9E0000047B74000004289D00000A0A2B15027B990000041A2E0C027B9D0000047B7D0000040A062A000000133003002300000040000011026F9E00000A0A062C17061F3A6F3500000A0B07152E0A060717586F9F00000A0A062A0013300400CE01000041000011027B99000004193323027B9E0000047B74000004722311007017281C00000A281D00000A2D06722F1100702A026FA000000A0A026FA000000A25130A2C3B110A7223110070282500000A2D21110A726B110070282500000A2D19110A7237030070282500000A2D113885000000722F1100702A72731100702A026FA100000A1833067E4800000A2A026FA100000A17335B027B9C0000046F9700000617590B2B47027B9C000004076F9A00000675170000020C082C2E087B780000041733250872231100706FA80000060D0916321508096FA90000066FA0000006130411042C0311042A0717590B071630B57E4800000A2A026FA100000A182E09026FA100000A17337272BD11007006284700000A1306027B9C0000046F97000006175913072B4F027B9C00000411076F9A0000067517000002130811082C3111087B78000004173327110811066FA800000613091109163217110811096FA90000066FA0000006130511052C0311052A11071759130711071630AC027BB60000040612056FA200000A2D45027BB60000046FA300000A16312272CB110070027BB60000046FA300000A130B120B28A400000A284700000A13052B0772CB1100701305027BB60000040611056FA500000A11052A0000133003003300000040000011026F9E00000A0A062C1E061F3A6F3500000A0B07152E0B0616076F3600000A0A2B067E4800000A0A06252D06267E4800000A2A9A027B99000004192E09027B990000041A3302172A027B9D0000047B7900000414FE0116FE012AAA027B99000004192E09027B990000041A330C027B9E0000046FA00000062A027B9D0000047B790000042AEA027B9900000419330C027B9C0000046F970000062A027B990000041A330E027B9C0000046F9700000617582A027B9C0000046F9700000617592A82027BA000000414289700000A2D0C027BA00000046F3200000A2A72370300702AA6027B99000004172E12027B99000004192E09027B990000041A330C027B9D0000047B7C0000042A162A82027B99000004192E09027B990000041A330C027B9E0000046FA10000062A162A5A027B9E0000042C0C027B9E0000047B760000042A162A00133002003800000042000011027B9C0000046F9700000617590A2B22027B9C000004066F9A00000674170000020B077B7A0000040C082C02082A0617590A061730DA162A133002003C00000043000011027B9C0000046F9700000617590A2B22027B9C000004066F9A00000674170000020B077B7B0000040C082C02082A0617590A061730DA7E4800000A2A1E027BB30000042A2202037DB30000042AFE027B99000004192E09027B990000041A3302162A027B9D0000047B78000004172E0F027B9D0000047B780000041F0A330C027B9D0000046FA70000062A162A000000133002002D0000000F000011027B99000004192E22027B990000041A2E19027B9D000004036FA80000060A0616320802066FA600000A2A142A2202036FA700000A2A000013300200340000003A000011027B99000004192E20027B990000041A2E17027B9D000004036FA90000060A062C07066FA00000062A72DD11007073A800000A7A2202036FA600000A2A2202036FA700000A2A260203046FA900000A2A133002001C0000000F000011027B9D000004036FA80000060A0616320902066FAA00000A172A162A2202036FAB00000A2A000000133002004B0000003A000011027B9D000004036FA90000060A062C3002037D9F00000402067D9E000004027B99000004192E11027B9D000004027B990000047D7F00000402197D990000042A72DD11007073A800000A7A66027B9D0000046FA700000616310902166FAA00000A172A162A000000033003004000000000000000027B99000004192E10027B990000041A2E07026FAC00000A2A027B9F000004027B9D0000046FA700000617592F1002027B9F00000417586FAA00000A172A162AEE027B99000004192E09027B990000041A331A02027B9D0000047B7F0000047D9900000402147D9E000004172A027B9D0000047B7800000417FE012A1E027BA80000042A6A027B980000042D060228EF000006027B980000046F1C0000062A0003300500D90000000000000002027BA000000428AF0000060228BE0000062C1F0272E111007014027BAA000004027BAD00000473080000067D980000042B32027BAE0000042C1F0272E111007014027BAE000004027BAD000004730A0000067D980000042B0B72F5110070736500000A7A027B980000040228ED0000066F0D000006027B9800000414027BA00000046F1B000006027B980000046F1000000614281E00000A2C1102027B980000046F100000067DA0000004027B980000046F0C0000062C1F027B970000042D170272711000707DB200000402027BA000000428AF0000062A00000013300400F702000044000011027B980000042D060228EF000006027B9D0000047B800000042C2B027B9D000004167D80000004020228CF0000067D9D00000402027B9D0000047B7F0000047D99000004172A160A3809020000027B990000040C08450C00000005000000840000004A0000003E0100003E0100004A010000A3000000D00000003501000055010000C20000001A000000387301000002177D99000004027B980000046F1A000006262B6A027B980000046F110000062C21027B980000046F1D00000602027B980000046F110000067D980000043830010000162A027B9B000004027B9D0000047B7D00000417281C00000A281D00000A2D0F0228CE00000602177D990000042B0D0228CE000006170A38F4000000027B9D0000047B7C0000042C060228CE0000060228F10000060A38D50000000228CE00000602177D9900000402027B9A00000428F20000060A38B6000000021F3C28F50000060A38A80000000228CE000006027B9C0000046F97000006027BA6000004304802177D99000004027BA50000042C1D02027BA500000428CD0000062602147DA500000402177D990000042B1C027B9D0000047B780000041F09330D021F0B7D9900000438E9FEFFFF170A2B430228FE0000060A2B3A02177D99000004383AFFFFFF0228CE000006382FFFFFFF02027B980000046F120000061628FC0000062C0D027B9D0000041F0D7D78000004170A062C1A027B9D0000047B780000041F0D330B027BB3000004183302160A062D34027B990000041F0B332A027B9C0000046F9700000617311C02177DA6000004021D7D99000004020228CF0000067D9D000004172A0639F1FDFFFF027BA40000043A8E000000026FA100000A172E12026FA100000A192E09026FA100000A1A337302177DA40000040228ED0000062C62026FA100000A173318026FAD00000A722700007017281C00000A281D00000A2C41027B9D000004027B990000047D7F000004027227000070171428CB0000060B0228CC00000602077D9D00000407177D8000000407167D7C00000402177D99000004172A172A00133003008500000001000011027B980000046F120000060A061F3C3314027B980000046F1A0000060A020628F20000062A0620FFFF00002E4E027B9D0000047B7E0000042C28027B9D0000047B7E0000046F520000066F5A00000617331002167D9A000004021E7D99000004162A02061728FC0000062C0D027B9D0000041F0D7D78000004172A021F0B7D99000004162A000000133006006101000045000011031F2533070228F70000062A031F214021010000027B980000046F1A0000061001031F2D33070228F80000062A031F5B33070228F90000062A031F5F2E4203283F00000A2D3A027B98000004027BA1000004727812007072670300706F210000060A02728E120070067267030070289800000A168D2D00000128C8000006162A027B98000004027BA100000472\
-C6120070166F1F0000060B0772D412007017281C00000A281D00000A2D5A0228FA00000602725C0C00706FA700000A2D2E0272E60B00706FA700000A2C21027B9D000004725C0C007072370300701F22027BB400000416FE016FA400000626027BB50000042C02162A027B9D0000041F0A7D78000004172A0272E4120070178D2D0000010C081607A20828C8000006027B9800000414727812007072670300706F2100000626162A031F3F3313027B980000046F1A000006260228FB0000062A031F2F33070228F60000062A020328F50000062A000000133004004900000046000011027B98000004027BA100000403166F1F0000060A027BB40000040B071759450200000002000000100000002B1A06281C00000A6F6600000A0A2B0C06281C00000A6F3400000A0A062A0000001B30010012000000470000110228AE00000A26170ADE0526160ADE00062A000001100000000000000B0B00055B000001133006008902000048000011140A027B990000041F0A2E40725E130070036F3500000A163224027BA1000004166F3E00000A027BA10000041F3C6F4300000A26021F097D99000004162A02725E13007028F30000060A2B0702177D990000040206171428CB0000060B07167D7C0000040207280A010006027B980000046F1E0000061001389D010000031F2F334107177D7C000004027B980000046F1A0000061001031F3E3B8C0100000272701300700328C9000006027B9800000414727812007072670300706F2100000626162A031F3C331F0272E0130070178D2D000001130711071606A2110728C8000006384301000002721E14007028F30000060C027B980000046F1E000006100108723214007017281C00000A281D00000A39040100000872C900007017281C00000A281D00000A39EE00000008723614007017281C00000A281D00000A39D80000000872CD00007017281C00000A281D00000A39C2000000140D161304031F3D2E0A031F222E05031F27335C031F3D3319027B980000046F1A00000626027B980000046F1E0000061001031F272E05031F22331303130402027BA10000040328FD0000060D2B21031F3E2E1C72511000701305027B98000004027BA10000041105166F1F0000060D08280C0100062C3D0708091104027BB400000416FE016FA4000006130611062D1C02723A140070178D2D000001130811081608A2110828C80000062B08071106280B010006027B980000046F1E00000610010320FFFF00002E08031F3E4053FEFFFF0320FFFF00003313027B98000004727E140070066F260000062B11031F3E330C027B980000046F1A00000626026FAF00000A173321027BA700000417330A021F0B7D99000004162A02257BA700000417587DA70000040207280D010006172A00000013300500050100004900001102187D99000004027B980000046F1A0000062602725E13007028F30000060A027B980000046F1E0000060B071F3E2E230272701300700728C9000006027B9800000414727812007072670300706F2100000626027B980000046F1A0000062602067D9B000004027BB400000416FE010C02027B9C000004027B9C0000046F9700000617596F9A00000674170000027D9D000004027B9C0000046F9700000617590D2B3B027B9C000004096F9A0000067417000002130411047B7D0000040608281C00000A281D00000A2D0F0211047B7D0000047D9B000004172A0917590D091630C10272CC140070178D2D000001130511051606A2110528C800000602177D99000004162A00000013300500370000000A0000117212150070027B98000004027BA1000004721815007072261500706F210000067226150070289800000A0A02141A0628CB00000626172A0013300400F50000004A000011027B980000046F1A0000060A061F2D2E250272AD0800700628C9000006027B980000041472FB08007072670300706F2100000626162A027B98000004027BA100000472FB080070720B0900706F210000060B0772440A00706F3700000A0C2B5E0818580D2B040917580D09076F3900000A2F0B07096F4600000A1F2D2EE80816311E07160817596F3600000A722C15007007096F9F00000A289800000A0B2B12722C15007007096F9F00000A284700000A0B0772440A00706F3700000A0C08162F9E076F3900000A16311E07076F3900000A17596F4600000A1F2D330C077230150070284700000A0B02141E0728CB00000626172A00000013300500F70000004B000011027B980000046F1A0000060A027B980000046F1E0000060A027B98000004027BA10000047234150070166F1F0000060B0772441500706FB000000A2C19027B9800000414721903007072670300706F2100000626162A07721903007017281C00000A281D00000A2C3002724C150070178D2D0000010D091607A20928C8000006027B9800000414721903007072670300706F2100000626162A027B980000046F1E0000060A061F5B2E2502728C1500700628C9000006027B9800000414721903007072670300706F2100000626162A027B98000004027BA1000004721903007072380B00706F210000060C02141A0828CB00000626172A0013300600280200004C000011027B980000046F1E0000060A02725110007028F30000060B02071F0A1428CB00000626027B980000046F1E0000060A061F3E3BE401000072370300700C72370300700D72370300701304061F5B3B0E010000027B98000004027BA10000047251100070166F1F0000061305110572E60B007017281C00000A281D00000A2D44027B980000046F1E0000060A061F222E05061F273374027B98000004027BA1000004066F200000060D027B9D00000411050906027BB400000416FE016FA4000006262B461105725C0C007017281C00000A281D00000A2C320272C8150070178D2D00000113061106161105A2110628C8000006027B980000041472D412007072670300706F2100000626027B980000046F1E0000060A061F222E05061F273335725C0C00701305027B98000004027BA1000004066F200000061304027B9D0000041105110406027BB400000416FE016FA400000626027B980000046F1E0000060A061F5B3328027B98000004027BA1000004720C160070722C1600706F210000060C027B9D000004087D79000004027B980000046F1E0000060A061F3E2E230272301600700628C9000006027B980000041472D412007072670300706F2100000626027B970000042C24027B970000046F760000060717281C00000A281D00000A2C0B728C160070736500000A7A02077DB200000402097DB00000040211047DAF00000402087DB100000402027B980000046F1000000628AF000006027B980000046F1A000006262A13300400AF0000004D000011027B98000004027BA100000472CE160070166F1F0000060A140B027B980000046F120000061F3F2E32027B98000004027BA100000472DA16007072670300706F210000060B07178D3A0000010D09161F2F9D096FB100000A0B2B1C027B98000004027BA100000472DA16007072670300706F210000060B061F3A6F3500000A0C0816310A060817586F9F00000A0A06726B11007017281C00000A281D00000A2C0C02061D0728CB00000626172A162A0013300400050100004E000011042C0D027B980000046F180000062B01170A042C0C027BA1000004166F3E00000A021B7D9900000438B5000000031F3C3363027B980000046F1A0000061001031F2F2E12031F212E0D031F3F2E0803283F00000A2C13021C7D9900000402037D9A0000043884000000027BA10000041F3C6F4300000A26027BA1000004036F4300000A26160A027B980000046F1A00000610012B4D031F26331F02027BA10000041F3C28FF000006160A027B980000046F1200000610012B29027B980000046F180000062D02160A027BA1000004036F4300000A26027B980000046F1A00000610010320FFFF00004040FFFFFF027BA10000046F4400000A0B0214190728CB00000626062A000000133003006C0000000100001103166F3E00000A027B980000046F1A0000060A2B2F061F26331602030428FF000006027B980000046F120000060A2B1403066F4300000A26027B980000046F1A0000060A0620FFFF00002E0906042E05061F3E33C00604330C027B980000046F1A00000626036F4400000A2A13300400B00200004F000011027B980000046F180000060A027BA1000004166F3E00000A027B980000046F120000060B027B9A00000439090200000228CE000006027B9A000004130411041F20594502000000E90100001100000011041F2F2E2911041F3F2E1438D8010000021F207D9A0000040228F80000062A021F207D9A0000040228FB0000062A02187D99000004172A071F3C407E010000027B980000046F1A0000060B071F213360027B980000046F1A0000060B071F2D331F062C0F021F207D9A0000040228F80000062A021F217D9A0000043873010000027BA10000041F3C6F4300000A26027BA10000041F216F4300000A26027BA1000004076F4300000A26160A382C010000071F3F332B027B980000046F1A00000626062C0F021F207D9A0000040228FB0000062A021F3F7D9A0000043813010000071F2F40B6000000027BA10000046F4400000A0C0228F60000062C58027B9B000004027B9D0000047B7D00000417281C00000A281D00000A2D3A062D0808287C00000A2C02172A021F2F7D9A000004027BA1000004166F3E00000A027BA1000004086F4500000A26021E7D99000004389F000000027BA1000004166F3E00000A027BA1000004086F4500000A26027BA10000047208170070027B9B0000047267030070289800000A6F4500000A26160A027B980000046F120000060B2B4A027BA10000041F3C6F4300000A26027BA1000004076F4300000A26160A2B1F027B980000046F180000062D05062C02160A027BA1000004076F4300000A26027B980000046F1A0000060B0720FFFF00004044FEFFFF0720FFFF0000330A021F0B7D99000004162A027BA10000046F4400000A0D09720E1700707E4800000A6FB200000A0D0972380B00707E4800000A6FB200000A0D0972221700707E4800000A6FB200000A0D02141A0928CB00000626027B9A0000042D08021F207D9A000004172A133005007301000050000011027B980000046F1A0000060A061F233321027B980000046F220000060B03076F4500000A26027B980000046F120000060A2A027BA2000004166F3E00000A2B19027BA2000004066F4300000A26027B980000046F1A0000060A0620FFFF00002E1206283F00000A2DD7061F5F2ED2061F2D2ECD027BA20000046FB300000A1631080628B400000A2DB7027BA20000046F4400000A0C027B9700000439A600000008287C00000A3A9B000000027B97000004086F7A0000060D092C71096F150000062C1E03096F160000066F4500000A2606042E0C027B980000046F1A0000060A2A08096F0E000006096F0F000006027B980000046F190000067308000006130409027B98000004096F0F000006732200000A6F1B0000060211047D98000004027B980000046F1A000006262A02722C170070178D2D000001130511051608A2110528C800000603725A1700706F4500000A2603086F4500000A2606042E1403066F4300000A26027B980000046F1A0000060A2A2E027B990000041F0BFE012AD6027B980000042C12027B980000046F1D00000602147D98000004027BA30000042C12027BA30000046FB500000A02147DA30000042A62027B990000042D02162A027B990000041F0B3302192A172A0000133002008B00000051000011027B9D0000047B78000004173371027BA1000004166F3E00000A2B4F026FA100000A0A06195945020000001300000013000000061F0D59450200000002000000020000002B19027BA1000004027B9D0000047B790000046F4500000A262B0C027BA10000046F4400000A2A026FB600000A2DA9027BA10000046F4400000A2A027B9D0000047B790000042A00133003007700000052000011281C00000A73B700000A0A0673B800000A0B07176FB900000A026FA100000A0C0817594502000000020000002E0000002B38026FB600000A262B080702176FBA00000A026FBB00000A2D0A026FA100000A1F0F33E6026FB600000A262B0C06026FBC00000A6FBD00000A076FBE00000A066F4400000A2A00133003002E00000053000011281C00000A73B700000A0A0673B800000A0B07176FB900000A0702176FBA00000A076FBE00000A066F4400000A2A0A142A0A142A2E725E170070736500000A7AA2027B99000004193309021A7D99000004172A027B990000041A3302162A7296170070736500000A7A000000133002003A00000025000011027B970000042C31027B97000004037B7D0000046F7B0000060A062C1C03067D7E000004066F520000066F5A00000619330703177D7C0000042A0000133002002200000054000011027B7E0000040A062C1706037B740000046F550000060B072C0703077D750000042A00001B30030033000000550000110228BF00000A26021F3A6F3500000A0A0616320F020617586F9F00000A28C000000A26170BDE0A26160BDE0526160BDE00072A00011C000000000000272700055B00000100000000272C00052B000001133006004F01000056000011037B78000004173332037B7D00000428F40000062D250228CE00000602141972C0170070037B7D0000047267030070289800000A28CB000006262A027B970000043908010000037B7D000004281C00000A6F6600000A0A160B027B9C0000046F9700000618590C037B7E000004398A000000080B2B7F027B9C000004076F9A00000674170000020D097B7C0000042D61097B7E000004130411042C600718331911046F5100000672C417007017281C00000A281D00000A2C4311046F51000006027B970000046F7600000617281C00000A281D00000A2C24110406027B970000046F570000062D1411046F530000062C0B0717590B07163D7AFFFFFF072D012A07082F4A027B9C000004086F9A000006741700000213050708175933140611057B7D00000417281C00000A281D00000A26021D7D9900000402037DA50000040228CE000006020717587DA60000042A00133002001001000057000011026FC200000A2D0A026FC300000A166A332C0F0128C400000A2D180F0128C500000A6F3A00000A7E4800000A282500000A2C0B72CE170070731300000A7A140A0F0228C500000A6FC600000A2513042C2611047251180070282500000A2D1011047261180070282500000A2D062B08180B2B06170B2B02160B73AB0000060C0872711000706FB100000608166FDF00000608076FC30000060F0128C400000A2D130F0128C500000A7E4800000A282500000A2C1A026FC700000A73C800000A732000000A0A08066FBA0000062B0D080F0128C500000A6FBF00000673C900000A0D09176FCA00000A09146FCB00000A09086FCC00000A062C06066F3D00000A096FCD00000A28CE00000A73CF00000A2A1E02281B00000A2A42534A4201000100000000000C00000076322E302E35303732370000000005006C000000E0280000237E00004C2900003820000023537472696E677300000000844900007418000023555300F861000010000000234755494400000008620000180D000023426C6F62000000000000000200000157DFA2290902000000FA25330016000001000000630000001C000000B80000000F010000E300000001000000CF0000003F000000110000000100000001000000570000000C0000004B0000005C0000000A0000000100000001000000040000000100000000000A0001000000000006005F01580106006901580106006E01580106007501580106008B0181010600A20196010A00B501AA010600F201D50106000402D5010600D60296010E00EA0258010600190496010600040581010600D006B50606006E085B080A002D0AAA010A00C50CAA010A00DA0CAA010600690E81010A000F0FAA010A00C812AA01120060144B14120069144B1406007D155E150600701658011200E316C81606000717F51606001E17F51606003B17F51606005A17F51606007317F51606008C17F5160600A717F5160600C217F5160600DB1758010600F117F51606000A18F5160600471827180600671827180600951858010600D118B5180600ED18B5180600FC185801060030191B1906005119580106006E1981010600A01981010600AB1981010600B41981010E00CA19BF190E00DC19BF190E00CA13BF190E00051ABF190E002D1ABF190E003D1ABF190E00711ABF190600ED1A580106000A1B580106002D1B580106007B1B580106008A1B58010600A11B58010600011C271806001C1C58010600581C27180600671C580106006D1C58010600A51C58010600B51C81010600C51C81010600F21C96010600021D580106000B1D58010600121D58013B00381D00002F01531D00000600911D58010600A21D5B080600DC1D58010600F11D58010600091E58010600EC09580106001F1E580106004B1EF5160600621EF5160600A51E81010600B21E81010600D01E81010A00ED1EAA010600031F58010A001F1FAA0106004F1F81010A005C1FAA010A006A1FAA010A00841FAA011200B31FC8160A00D31FAA010A00F61FAA010A001720AA010000000001000000000001000100012010001E003100050001000100010100003600310009000200080001001000420031000D0006000800000010004900310015001A002D0080001000540031001900250047000000100060003100180027004C000000100075003100180027004E00010010008D0031000D0027005000010100009900310009002E00580001001000A90031000D003300580001010000B600310009003600620001010000C000310009003B00620001001000CB0031000D004000620001010000D1003100090045006B0001010000DF003100090057006B0001001000F10031000D005C006B0001001000F80031000D006100750080011000000131000D006C009500010100001001310009006C009600000010001C0131000D007000960000001000240131000D0074009F00000010002E0131000D007800A300000100003301310009008200AB0001001000390131001D008F00AB0001001000440100000D00B7000E0100000000BC1B00000D00B700100113010000261C00000101B90010010100BF010A0006064302340056804B02370056805102370056805702370056805A024A0001005E020A00010066020A0001006D02500001007A020A00010085020A0001008B020A000100950237000100A30253000100AC0250000100B50234000100BC024A000100C70250000100DF0257000100EE025B000100FC025F0001000203500001001303340001001F03340031005804BF005180FC04340051805A02340001000B05FE0001000F0502010100190534000100200534000100DF025700010028050601010032050A0101003B05340001004005340003002706020103002C063400010066020A0001006806500001007B06500001008C06610101009B0665010100A80665010100DD06690106064302340056806407A10156804B02A10156806C07A10156807307A10101007907A10101008B07340001009A07AA0106064302340056801F08B80156802408B80156802808B80156802B08B80106064302340056803408BC0156803D08BC0156804608BC0156805108BC010100A302AA0101007808C00101008008B80101008C08BC0101009908500006064302340056806407DE0156804B02DE015680CD08DE015680D408DE015680DD08DE015680E008DE015680E608DE015680ED08DE015680F208DE015680F808DE0156800009DE0156800909DE0156801009DE0156801809DE0156802009DE0156802909DE0156803209DE0106064302340056806407230256803E092302568034082302568044092302010066020A0001004C09DE01010053096501010060090A0001006A0923025180F1090A00010066020A000100FC0956020100070A5F020100130A5F0201001E0A68020100230A530031004E0B0A003100720B0A0031008B0B0A003100AA0B0A0006064302340056801F08F6025680F50BF6025680FD0BF6020100050CFA0201000D0C34000100140C340001001C0C3400030093040A000300760C170303007E0C4A000100880C0A000300D10C22030300B50C0A000300E30C26030300E90C0A000300F10C5000030093040A000300760C2A030300F90C2E030300060D50000100100D32030606430234005680760D2E0356807E0D2E035680850D2E0356808C0D2E035680910D2E0356809B0D2E035680A00D2E035680AB0D2E035680B50D2E035680BB0D2E035680C70D2E035680D60D2E035680DA0D0A005180EE0D0A005180F70D0A005180FF0D0A005180050E0A0051800C0E0A005180160E0A0051801D0E0A000100240EBF030100230A530001002A0E2E030100320E4A0001003C0E0A000100450E320301004D0EC3030100540EC7030100580E340001005F0E5B0001001E0A68020100660268020100740ECB0301007A0E50000100860EC3030100900E340001009D0E34000100AC0250000100A90E0A000100BB0E0A000100C20E0A000100D10E530001005E020A000100DD0E5F000100EB0E0A000100F40E0A000100FC0E0A000100050F0A000100220FCF030100370FF6020100410F50000100500FD3031301441C26071300AE1D8C08D020000000008618CF010D000100D820000000008618CF0111000100E120000000008618CF0116000200F920000000008618CF011D0004000321000000008418CF0124000600212100000000860815022C000800292100000000C6402702240008005221000000008618CF0163000A008E21000000008618CF016B000E00AC21000000008618CF0171001000FD210000000086082D032C001400052200000000860836037B0014000D2200000000860841037F00140016220000000086084C032C0015001E2200000000860859032C001500262200000000860861038400150052220000000086087103890015005A220000000086087C038E00150062220000000086088903920015006A220000000086089203920015007B22000000008608A3037B0015008322000000008608B2032C0015008B22000000008608BE03960015009322000000008608CE037B0015009B22000000008608DF032C001500A422000000008600E9038E0015007423000000008600F2039B001500D025000000008608F703A3001700D82500000000860004040D001700F0250000000086000A048E0017002C260000000086002704A800170010270000000086003104B0001A00A8270000000086003D04B7001C00042900000000860047042C001F001B2A000000008600600411001F00242A0000000086006004C3002000642A0000000086006004C9002200942A00000000860060046B002400C02A00000000860066042C0026008D2B0000000096006E04CF002600CC2B0000000086007C04110027001D2C00000000E6018B040D0028002C2C00000000C4018B047F002800D02C000000009118B51B22072900EC2C000000008618CF010E012900042E000000008608F703A3002B000C2E000000009100440516012B00582E00000000830057050D002C00742F00000000930063051D012C006430000000008100E90392002F009C30000000008100760592002F00C4300000000081007F0527012F0014310000000081008C050D0030006C310000000081009C052C003000D831000000008100A9052C0130002232000000008100A905310131005832000000008100B805110032009C32000000008300C805370133002033000000008300D605370133005834000000008300E0052C003300E0340000000083000A040D0033003035000000008300EA053C0133007435000000008300F1052C003400183600000000C600000692003400403600000000C600050692003400BC3600000000C600050641013400563700000000C6000A06410137006437000000008600140641013A00C43700000000C6001D062C003D00063800000000C60004040D003D00133800000000C600360649013D00000000000000C307430651014000203800000000C600500651014500D83800000000930059065C014A000639000000008418CF010D004B001C3900000000C302430651014B00F039000000008618CF010D005000F83900000000C302430651015000CC3A000000008618CF010D005500D43A000000008618CF0172015500093B0000000086082D032C005B00113B000000008608E7067F015B00193B000000008608F8067B005B00213B0000000086080B077B005B002C3B000000008600200784015B00683B0000000086002E078A015C00F83B000000008600390795015D007F3C000000008618CF010D005F00933C000000008608A20792005F009B3C000000008608B307AE015F00A33C000000008600C7070D005F00C43C000000008600D10792005F00163D000000008600DA0711005F00243D000000008600E4073C016000323D000000008600F1073C016100403D000000008600FF0711006200B33D000000008600390795016300CC3D0000000086089F08C4016500D43D000000008608AE087B006500EE3D0000000086087103C9016500F63D000000008618CF01CE0165001E3E000000008600BB08CE0166002D3E000000008600DA0711006700583E000000008600E4073C016800103F000000008600F1073C016900483F000000008600390795016A005440000000008618CF0111006C0063400000000086082D032C006D006B4000000000860875092C006D007340000000008608810911006D007C400000000086088D0927026E008440000000008608A3092C026E008C40000000008600B20931026E00D740000000008608C40939027000E040000000008600CD0911007000A842000000008600D509270171003143000000008618CF016C0272006C430000000086082D032C00740074430000000086083A0A730274007843000000009600480A78027400FC43000000009600480A86027B0074440000000086004E0A940281009444000000008600590A9A028200BB44000000008100650AA0028300DD44000000008100700A0D0085001845000000008100480A0D0085000C460000000081007A0A0D0085000447000000008100860A8E0085003047000000008100980AA80285009847000000008100A90A0D0086000248000000008100BC0A0D0086001048000000008100D00A0D0086006848000000008100E30A2C018600CC48000000008100EC0A940287002849000000008100010B940288005C49000000008600140BAD028900C449000000008100310B0D008900DC4B0000000081003D0B0D008900904D000000008100550BB7028900C04E000000008100640BBE028B008C4F000000008100790BC5028D003C50000000008100920BCB028E0054520000000081009D0B0D009000CC520000000081009D0BD20290006053000000008100B10BDE029200F853000000008100BD0BE4029300C054000000008100CA0BE4029500C755000000009118B51B22079700F155000000009600E40BF00297000356000000008618CF01FE0299001256000000008608250C92009A001A560000000086082F0CFE029A002356000000008608390C92009B002B56000000008608420C03039B0044560000000086084B0C08039C004F56000000008600540C0E039E007C56000000008600580C0E039E00EC560000000086005D0CFE029E002457000000008600970C1B039F\
-0042570000000086089D0C2C00A2006857000000008608A70C7B00A2007357000000008618CF010D00A2007B57000000008600970C3603A200BC570000000086001B0D3E03A5004858000000008600280D1100A900A058000000008600380D4703AA00FD58000000008608470D9200AB000C590000000086005A0D4D03AB005C590000000086005A0D5203AC009059000000008618CF010D00AD00A559000000008618CF010D00AD00C559000000008618CF01DB03AD00E559000000008608620FE103AE00015A0000000086086A0FE603AE000C5A000000008100720FEC03AF00E45B0000000086087E0F2C00B000EC5B0000000086088A0F1100B000F55B000000008608960F2C00B100FD5B000000008608AA0F2C00B100055C000000008608BF0F1100B1000E5C000000008608D40F2C00B200165C000000008608E60F1100B2001F5C000000008608F80F2C00B300275C0000000086080B101100B300305C0000000086081E10F203B400385C0000000086082E10F703B400475C0000000086083E102C00B5004F5C0000000086084B101100B500585C00000000860058101100B600665C00000000860863102C00B700705C0000000086086C101100B700DC5C00000000860875107B00B800E45C00000000860886107F00B800ED5C0000000086089710FD03B900F55C000000008608A7100204B900FE5C000000008608B7100804BA00065D000000008608C4100D04BA000F5D000000008608D1102C00BB00175D000000008608E2101100BB002C5D000000008100F3101304BC00185E000000008100F310C300BE00405E000000008100F7100D00C000E05E000000008100580C1A04C000345F000000008100FC100D00C300905F000000008100580C2304C3000160000000008100540C0D00C400286000000000810009112A04C4005A6000000000C6080D112F04C400946000000000C6082D032C00C400D86000000000C6081A112C00C400086100000000C60828112C00C400E46200000000C60839112C00C400236300000000C60844117B00C4004A6300000000C6089D0C2C00C400756300000000C60851119200C400B06300000000C6085B112C00C400D16300000000C60867117B00C400FB6300000000C608A70C7B00C4001C6400000000C6087A118E00C400346400000000C60888113404C400786400000000C60895112C00C400C064000000008608A1113904C400C864000000008608B8113E04C400D16400000000C608470D9200C500146500000000C6005A0D2C01C5004D6500000000C6005A0D4404C600586500000000C6005A0D4A04C800986500000000C608420C4A04C900A16500000000C608420C2C01CA00AA6500000000C608420C4404CB00B46500000000C600CF112701CD00DC6500000000C600CF114F04CE00E86500000000C600CF11FE02D0003F6600000000C600DF117B00D1005C6600000000C600F4117B00D100A86600000000C60008127B00D100E46600000000860836037B00D100EC660000000086001612A300D100086700000000810022120D00D100F06700000000C60005067B00D100F46A0000000081007A0A7B00D100886B0000000081002C125504D100F86C000000008100E30A2C01D200506D0000000091003512CF00D300806D00000000810040125504D40018700000000081004E127B00D5002C710000000081005A127B00D500707100000000810066127B00D500747200000000810073127B00D500787300000000810089120D00D500AC7500000000810096127B00D50068760000000081009E125A04D5007C770000000081003104B000D700F477000000008100A8127B00D900B07A000000008100B3126004D9002F7C00000000C608C0127B00DB003B7C00000000C60004040D00DB00717C00000000C608D2126704DB008C7C00000000C600E0122C00DB00247D00000000C600EB122C00DB00A87D00000000C600F8122C00DB00E27D00000000C6083A0A7302DB00E57D00000000C60005132C01DB00E87D00000000C60015130D00DC00F47D00000000C60023137B00DC00207E00000000810036134703DC00687E0000000091003F136C04DD00987E0000000091005113CF00DF00F47E00000000810064134703E00050800000000096007314AC04E1006C81000000008618CF010D00E400000001007D14000001007D14000002008514000001007D1400000200871400000100961400000200A11400000100AB1400000200B01400000100B81400000200BD1400000300C31400000400C71400000100B81400000200CD1400000100B81400000200D514000003000B0500000400C71400000100DD1400000100E31400000200D51400000100EA1400000200ED1400000300F21400000100EA1400000200FA1400000100EA14000002000015000003000515000001001115000001001115000002001515000001001115000002001815000001001115000002001A15000001001E15000001001E15000001002415000001000B05000002003015000001004015000001004215000002004915000003004F1500000100561500000100B81402000100B81400000100ED14000001008A15000001004215000002008F15000003004F15000001009515000002004915000003009A15000001004215000002008F15000003004F1500000100A015000002004915000003009A1500000100A01500000200A61500000300B01500000400BA1500000500C01500000100A01500000200A61500000300B01500000400BA1500000500C01500000100CA1500000100A01500000200A61500000300B01500000400BA1500000500C01500000100A01500000200A61500000300B01500000400BA1500000500C01500000100B81400000200CF1500000300D31500000400D71500000500DA1500000600E51500000100B81400000100F01500000100B81400000200F51500000100F91500000100FD1500000100FD1500000100FF1500000100B81400000200F51500000100E31400000100021600000100F91500000100FD1500000100FD1500000100B81400000200F51500000100B81400000100DD14000001000416000002000015000001000015000001001E1500000100B814000002000F1600000100D51400000200B81400000300BD1400000400121600000500161600000600C714000007000F1600000100D51400000200B814000003001D1600000400161600000500C714000006000F1600000100B81400000100B81400000100D51400000200851400000100231600000100ED1400000100ED1400000100B81400000100151500000200281600000100311600000200281600000100151500000100371600000200D71500000100F01500000200ED14000001001515000001001515000002003B16000001001515000002003B1600000100421600000200441600000100461600000100DD14000001004D16000001004D1600000200DD14000001004D1600000100B81400000200DD1400000300FA1400000100B814000002000F1600000300DD1400000100B81400000200DD14000003004F1600000400591600000100B81400000100691600000100B814000001004D16000001000F1600000100DD1400000100D51400000100DD1400000100DD1400000100DD1400000100DD1400000100DD1400000100DD1400000100C31400000100DD1400000100DD1400000100DD1400000100DD1400000100DD14000001001115000002006B1600000100111500000200151500000100B814000002000F1600000300DD1400000100691600000100DD1400000100B81400000100B814000002008416000001004D16000001004D1600000100B81400000100B81400000200841600000100B81400000100B814000002009116000001004D1600000100151500000100051500000100B81400000100151500000100151500000200941600000100EA1400000200FA1400000100EA14000002009C1600000100A71600000100AE1600000100AE1600000200421600000100B81400000100AE1600000100B31600000200BC1600000300100104001100C100CF010D00C900CF010D00D100CF010D00D900CF011100E100CF011100E900CF011100F100CF011100F900CF0111000101CF0111000901CF0111001101CF0111001901CF017F002101CF0111002901CF0111003101CF01FE023901CF010D004101CF010D000900CF010D000900CF0111000900CF011D000900CF0124004100AB182C014901CF016C055901CF0111004100121919060900270224001900CF010D0061013C191F06690158192506590060192F062900050692007101CF0111005900CF013B065900CF01110051007509420659007B192C0069018619F002590092192C007901CF0147069101D51952069901EB1911009101F919FE02A101CF01110091010F1A5A069101191A7F00B1014A1A61069101611A670691017D1A6E06C101891A84005900991A2C00C101A91A2C006901FD0B74066901B91A7B066901C11A80066901B91A4D036901B91A86066901CB1A92006901D61A2C00510016128C06C101DB1A9206290004040D006100FF1AFE02D1010F1BB0066101181B1F0669013D1BB506D101441BB0066100541BBF0619005B1B2C006100541BCD066901641BD80669016E1BDD066901751B0A00E101831BEE06D1015B1B2C00D1015B1BFD066100CF010D005900901B2C00F101A41B1D0729008B040D00F901CF010D000902801C2A072900CF010D005100901C42066900991C7B006900050649015100AA1C37016900C01C34073102CF010D006900D21C4407690004040D001102D81C56073100360649013100500651015100DD1C42063902CF016A076901CF0186074102071DBC072900050641016100541BC7073100CF010D005102CF0111006901F50B74060C002C1DEF070C00481DFD0714005E1D12081C006C1D27080C00781D2C080C00841D32081C00881D7B0021008B040D006901581947087900250C92007900CF010D007900841D5C0879005E1D710871026C1D0E037102881D7B00C901CF0111002400CF01FE022400841D320824002C1DEF072C00CF010D003400CF010D006901C21DCF000900D01D2C0034002C1DEF072C002C1DEF078102CF0111008902CF0111003400481DFD073C005E1D120844006C1D270834004B0C32084400881D7B003400841D3208D101F50B17092C00841D32089102311E32097900431E3B090C00CF010D00A102CF0111001102D81CA1095400CF010D003900CF010D0091026B1ED609A902781E2C006901851EDC09A9028B1EE309B102CF01E909B902BC1EEF09590086192F0669016E1B030AC102CF0111009900DD1E11009900DD1E0A0A5400E71E0D00C902F81E280A39002D032C006901C11A4A04390039112C0039000D112F0454002C1DEF075400250C9200E9015B1B2C0054004B0C320839005A0D4A0439005A0D2C01D102CF01110039005A0D44043900CF11FE023900CF1127013900DF117B0039001A112C00C9023512280A39005111920069012C1F27016901371FA00A69013F1F44046100CB1A9200D101471FB006990004040D00390005067B00E102CF01CC0AE902CF010D04E902751FD30AF9028E1FDA0A3900C0127B0039009D0C2C009900D21C1100F90204040D00C902981F280AC902A61F280A0103CF010D00B100C81F7B00B100CB1AD70BB900C81F7B00B9009D0C2C006901FD0B2C00B1009D0CDB0B6901CF01E00B0903CF010D000903DF1F7F0009030220E60B09031220ED0B19031F202C00B9002C20F30BB100CF01F90B08000C003B00080010004000080014004500030018004D0008006800F40008006C00F9000800BC003B000800C00040000800C40045000800C800A5010800DC003B000800E00040000800E40045000800E800A5010800F0003B000800F40040000800F80045000800FC00A501080018013B0008001C01400008002001450008002401A50108002801E20108002C01E70108003001EC0108003401F10108003801F60108003C01FB01080040010002080044010502080048010A0208004C010F02080050011402080054011902080058011E02080060013B0008006401400008006801450008006C01A5010E0084014D020800B4013B000800B80140000800BC01450008000C023B0008001002400008001402450008001802A50108001C02E20108002002E70108002402EC0108002802F10108002C02F60108003002FB010800340200020800380205020E003C0258030E00400269030E00440276030E00480287030E004C029A030E005002A5030E0054029A030E005802B4032E003300380C2E008300F70C2E003B003E0C2E004300540C2E007B00EE0C2E0023000D0C2E002B00220C2E004B005E0C2E005300380C2E006300DB0C2E007300E10CA3026B04970923036B049709630383024000A41713004000641C1B00B704C0210B060D0B02001D0073050100800000001C0037069706C506D306E306F306020708070D0719073C074C076307700776077A0781078E0794079F07AF07B607C207D007D807DD07F8073A08500861086B0877089B08A208B808C008C508CA08D108D708DD08F50809091F094709500957095F0967097A09820988098E09AC09B309BA09C109CA09F309110A180A1D0A220A2D0A320A430A4B0A520A5A0A610A670A6B0A7B0A860A8D0A950AA60AAE0AB30ABB0AC70AE10AEC0AF50AFC0A010BFF0B020001000400020005001100090012000B0016000E00180011001B00120020001500220016002500170027001900280000003502300000009304300000009804D40000009F0430000000EA0230000000A804D8000000B404DD000000BB04E2000000C404E6000000C904E6000000D604D4000000E104300000003600EA000000E904D4000000F60430000000D602EF000000D602EF000000930430000000A9009C0100004407D40000005307D40000001208E60000009900B3010000C000D4010000C408D4000000B404D9010000930430000000640730000000DF003E020000E10943020000EC0948020000930430000000DA0BEB020000660CE60000006C0CE6000000710C12030000B50C30000000BB0CD4000000670DE6000000741374040000781330000000801330000000901330000000A11330000000AF1330000000BE1379040000CA1330000000D31330000000D813D400000010017E040000E51383040000EE1330000000D10C88040000930430000000FB13300000000514300000001214300000001914D4000000B50C300000002214E60000002814300000003014D4000000BB0CD40000007E0CE2000000DA0C8D040000E90C300000000F0F92040000670DE6000000710C97040000710C9C040000710CA10400009804D40000005A02D4000000C812A7040000DA0BEB0202000600030002000B00050002000C00070001000D00070002000E00090002000F000B00020010000D00020011000F00020012001100020013001300020014001500020015001700020016001900020017001B00020018001D00020019001F0002001C00210002002E002300020051002500020052002700020053002900020054002B00020059002D0002005A002F0002006200310002006300330002006400350002006C00370002006D00390001006E00390002006F003B00020070003D00020072003F0002007600410002007700430002009700450001009800450002009900470001009B00490002009A0049000200A0004B000200A1004D000200A7004F000200AD0051000100AE0051000200B00053000100B10053000200B20055000200B30057000100B40057000200B50059000100B60059000100B8005B000200B7005B000200B9005D000100BA005D000200BB005F000100BC005F000100BF0061000200BE0061000200C00063000100C10063000200C20065000100C30065000100C50067000200C40067000200C60069000100C70069000200D0006B000200D1006D000200D2006F000200D30071000200D40073000200D50075000200D60077000200D70079000200D8007B000200D9007D000200DA007F000200DB0081000200DC0083000200DD0085000100DF0087000200DE0087000200E00089000200E4008B000200E5008D000200E6008F000200ED009100020000019300020002019500020006019700E70709081E089408A808B008E308EC084409CF09502C0000B70004800000010008000400C13501000000CA048518000002000000000000000000000001004F01000000000200000000000000000000000100AA0100000000020000000000000000000000010058010000000002000000000000000000000001003F14000000001C001B0000000000003C4D6F64756C653E0053514C232E53676D6C5265616465722E646C6C0053676D6C5061727365457863657074696F6E0053676D6C004C69746572616C5479706500456E746974790048746D6C53747265616D00556373344465636F64657200556373344465636F646572426967456E6769616E00556373344465636F6465724C6974746C65456E6469616E00456C656D656E744465636C004465636C61726564436F6E74656E7400436F6E74656E744D6F64656C0047726F757054797065004F6363757272656E63650047726F757000417474726962757465547970650041747472696275746550726573656E6365004174744465660053676D6C44746400537472696E675574696C69746965730043617365466F6C64696E67004857537461636B00417474726962757465004E6F64650053746174650053676D6C5265616465720053474D4C526561646572006D73636F726C69620053797374656D00457863657074696F6E00456E756D004F626A6563740049446973706F7361626C650053797374656D2E494F00546578745265616465720053797374656D2E54657874004465636F6465720053797374656D2E586D6C00586D6C526561646572006D5F656E74697479436F6E74657874002E63746F720053797374656D2E52756E74696D652E53657269616C697A6174696F6E0053657269616C697A6174696F6E496E666F0053747265616D696E67436F6E74657874006765745F456E74697479436F6E74657874004765744F626A6563744461746100456E74697479436F6E746578740076616C75655F5F00434441544100534441544100504900454F46006D5F70726F7879006D5F6E616D65006D5F6973496E7465726E616C006D5F7075626C69634964006D5F757269006D5F6C69746572616C006D5F6C69746572616C54797065006D5F706172656E74006D5F697348746D6C006D5F6C696E65006D5F6C61737463686172006D5F69735768697465737061636500456E636F64696E67006D5F656E636F64696E6700557269006D5F7265736F6C766564557269006D5F73746D006D5F77654F776E54686553747265616D006D5F6C696E655374617274006D5F6162736F6C757465506F73006765745F4E616D65006765745F497348746D6C007365745F497348746D6C006765745F5075626C69634964006765745F557269006765745F5265736F6C766564557269006765745F506172656E74006765745F4C61737463686172006765745F4C696E65006765745F4C696E65506F736974696F6E006765745F4973496E7465726E616C006765745F4C69746572616C006765745F4C69746572616C54797065006765745F497357686974657370616365006765745F50726F7879005265616443686172004F70656E006765745F456E636F64696E6700436C6F736500536B69705768697465737061636500537472696E674275696C646572005363616E546F6B656E005363616E4C69746572616C005363616E546F456E6400457870616E6443686172456E74697479004374726C4D6170004572726F7200436F6E746578740049734C69746572616C54797065005365744C69746572616C5479706500446973706F7365004E616D6500497348746D6C005075626C69634964005265736F6C76656455726900506172656E74004C61737463686172004C696E65004C696E65506F736974696F6E004973496E7465726E616C004C69746572616C004973576869746573706163650050726F78790042554653495A450053747265616D0073746D0072617742756666657200726177506F730072617755736564006D5F6465636F646572006D5F627566666572007573656400706F7300436F7079546F4D656D6F727953747265616D004465636F6465426C6F636B004175746F446574656374456E636F64696E67005065656B4368617200536E6966665061747465726E00536E6966665768697465737061636500536E6966664C69746572616C00536E69666641747472696275746500536E6966665465726D696E61746F7200536E696666456E636F64696E6700536E6966664D65746100536E6966664E616D6500536B6970546F005061727365417474726962757465005065656B00526561640052656164426C6F636B00526561644C696E650052656164546F456E640074656D700074656D7042797465730047657443686172436F756E740047657446756C6C436861727300476574436861727300556E69636F6465546F5554463136006D5F73746172745461674F7074696F6E616C006D5F656E645461674F7074696F6E616C006D5F636F6E74656E744D6F64656C006D5F696E636C7573696F6E73006D5F6578636C7573696F6E730053797374656D2E436F6C6C656374696F6E732E47656E657269630044696374696F6E6172796032006D5F6174744C697374006765745F436F6E74656E744D6F64656C006765745F456E645461674F7074696F6E616C006765745F53746172745461674F7074696F6E616C0046696E6441747472696275746500416464417474446566730043616E436F6E7461696E00456E645461674F7074696F6E616C0053746172745461674F7074696F6E616C0044656661756C740052434441544100454D505459006D5F6465636C61726564436F6E74656E74006D5F63757272656E744465707468006D5F6D6F64656C006765745F43757272656E744465707468006765745F4465636C61726564436F6E74656E74005075736847726F757000506F7047726F75700041646453796D626F6C00416464436F6E6E6563746F72004164644F6363757272656E6365005365744465636C61726564436F6E74656E740043757272656E744465707468004E6F6E6500416E64004F720053657175656E6365005265717569726564004F7074696F6E616C005A65726F4F724D6F7265004F6E654F724D6F72650053797374656D2E436F6C6C656374696F6E730041727261794C697374004D656D62657273006D5F67726F757054797065006D5F6F6363757272656E6365004D69786564006765745F4F6363757272656E6365006765745F546578744F6E6C790041646447726F757000546578744F6E6C7900454E5449545900454E54495449455300494400494452454600494452454653004E414D45004E414D4553004E4D544F4B454E004E4D544F4B454E53004E554D424552004E554D42455253004E55544F4B454E004E55544F4B454E53004E4F544154494F4E00454E554D45524154494F4E00466978656400496D706C696564006D5F74797065006D5F656E756D56616C756573006D5F64656661756C74006D5F70726573656E6365006765745F44656661756C74007365745F44656661756C74006765745F41747472696275746550726573656E6365006765745F456E756D56616C75657300536574456E756D65726174656454797065006765745F5479706500536574547970650053657450726573656E636500456E756D56616C75657300547970650057686974655370616365006D5F656C656D656E7473006D5F70656E746974696573006D5F656E746974696573006D5F7362006D5F63757272656E7400586D6C4E616D655461626C65006765745F4E616D655461626C650050617273650046696E64456E746974790046696E64456C656D656E740050757368456E7469747900506F70456E746974790050617273654D61726B75700050617273654465636C436F6D6D656E74730050617273654465636C436F6D6D656E740050617273654D61726B656453656374696F6E005061727365496E636C75646553656374696F6E00506172736549676E6F726553656374696F6E005363616E4E616D65005061727365506172616D65746572456E7469747900476574506172616D65746572456E7469747900476574456E7469746965734C69746572616C4E616D654C6F6F6B7570005061727365456E74697479005061727365456C656D656E744465636C006E677465726D0050617273654E616D6547726F75700050617273654E616D654C6973740064637465726D005061727365436F6E74656E744D6F64656C00636D7465726D0050617273654D6F64656C0050617273654174744C6973740070657465726D0050617273654174744465660050617273654174745479706500506172736541747444656661756C74004E616D655461626C6500457175616C7349676E6F72654361736500546F557070657200546F4C6F776572006D5F6974656D73006D5F73697A65006D5F636F756E74006D5F67726F777468006765745F436F756E74007365745F436F756E74006765745F53697A65006765745F4974656D007365745F4974656D00506F7000507573680052656D6F7665417400436F756E740053697A65004974656D00447464547970650051756F746543686172006D5F6C69746572616C56616C7565005265736574006765745F56616C7565006765745F497344656661756C740056616C756500497344656661756C7400586D6C4E6F646554797065004E6F64655479706500586D6C537061636500537061636500586D6C4C616E67004973456D7074790043757272656E7453746174650053696D756C617465640061747472696275746573004164644174747269627574650052656D6F766541747472696275746500436F707941747472696275746573006765745F417474726962757465436F756E740047657441747472696275746500417474726962757465436F756E7400496E697469616C004D61726B757000456E645461670041747472004174747256616C75650054657874005061727469616C546167004175746F436C6F7365004344617461005061727469616C546578740050736575646F537461727454616700456F6600554E444546494E45445F4E414D455350414345006465636C7465726D007461677465726D00617465726D0061767465726D0063646174617465726D0064747465726D0070697465726D006D5F647464006D5F7374617465006D5F7061727469616C006D5F656E64546167006D5F737461636B006D5F6E6F6465006D5F61006D5F61706F73006D5F626173655572690054657874577269746572006D5F6C6F67006D5F666F756E64526F6F74006D5F6E65776E6F6465006D5F706F70746F6465707468006D5F726F6F74436F756E74006D5F726F6F74456C656D656E744E616D65006D5F68726566006D5F6572726F724C6F6746696C65006D5F6C6173744572726F72006D5F696E70757453747265616D006D5F7379736C6974006D5F7075626964006D5F737562736574006D5F646F6354797065005768697465737061636548616E646C696E67006D5F7768697465737061636548616E646C696E67006D5F666F6C64696E67006D5F7374726970446F635479706500756E6B6E6F776E4E616D65737061636573006765745F447464007365745F447464004C617A794C6F616444746400676574\
-5F446F6354797065007365745F446F6354797065006765745F526F6F74456C656D656E744E616D65006765745F5075626C69634964656E746966696572007365745F5075626C69634964656E746966696572006765745F53797374656D4C69746572616C007365745F53797374656D4C69746572616C006765745F496E7465726E616C537562736574007365745F496E7465726E616C537562736574006765745F496E70757453747265616D007365745F496E70757453747265616D006765745F57656250726F7879007365745F57656250726F78790053657442617365557269006765745F48726566007365745F48726566006765745F5374726970446F6354797065007365745F5374726970446F6354797065006765745F43617365466F6C64696E67007365745F43617365466F6C64696E67006765745F4572726F724C6F67007365745F4572726F724C6F67006765745F4572726F724C6F6746696C65007365745F4572726F724C6F6746696C65004C6F6700496E69740053776170546F704E6F64657300546F70006765745F4E6F646554797065006765745F4C6F63616C4E616D65006765745F4E616D657370616365555249006765745F507265666978006765745F48617356616C7565006765745F4465707468006765745F42617365555249006765745F4973456D707479456C656D656E74006765745F51756F746543686172006765745F586D6C5370616365006765745F586D6C4C616E67006765745F5768697465737061636548616E646C696E67007365745F5768697465737061636548616E646C696E67004D6F7665546F417474726962757465004D6F7665546F4669727374417474726962757465004D6F7665546F4E657874417474726962757465004D6F7665546F456C656D656E7400476574456E636F64696E67004F70656E496E707574005061727365546167005665726966794E616D650050617273655374617274546167005061727365456E645461670050617273654173704E6574005061727365436F6D6D656E74005061727365436F6E646974696F6E616C426C6F636B005061727365446F6354797065005061727365504900506172736554657874005061727365434461746100457870616E64456E74697479006765745F454F4600526561645374617465006765745F5265616453746174650052656164537472696E670052656164496E6E6572586D6C00526561644F75746572586D6C004C6F6F6B75704E616D657370616365005265736F6C7665456E74697479005265616441747472696275746556616C75650056616C69646174650056616C69646174654174747269627574650056616C69644174747269627574654E616D650056616C6964617465436F6E74656E740044746400446F635479706500526F6F74456C656D656E744E616D65005075626C69634964656E7469666965720053797374656D4C69746572616C00496E7465726E616C53756273657400496E70757453747265616D0057656250726F78790048726566005374726970446F6354797065004572726F724C6F67004572726F724C6F6746696C65004C6F63616C4E616D65004E616D657370616365555249005072656669780048617356616C75650044657074680042617365555249004973456D707479456C656D656E740053797374656D2E446174610053797374656D2E446174612E53716C54797065730053716C43686172730053716C537472696E670048746D6C546F586D6C006D657373616765006500696E6E6572457863657074696F6E0073747265616D496E666F0073747265616D43747800696E666F00636F6E74657874006E616D65007075626964007572690070726F7879006C69746572616C00626173655572690076616C756500706172656E74007362007465726D006E6D746F6B656E0071756F74650074797065007465726D696E61746F7273006D736700636800780061726700746F6B656E006973446973706F73696E670064656661756C74456E636F64696E6700730062756666657200696E646578006C656E677468007061747465726E0053797374656D2E52756E74696D652E496E7465726F705365727669636573004F75744174747269627574650077686174007374617274006461746100636F756E740062797465730062797465496E6465780062797465436F756E740063686172730063686172496E64657800636F64650073746F0065746F00636D00696E636C7573696F6E73006578636C7573696F6E73006C697374006474640073796D0063006463006700656E756D56616C756573006E740075726C0073756273657400696E7075740066756C6C006E6D746F6B656E73006E616D657300636D7400617474646566006100620067726F77746800690071756F7465636861720063617365496E73656E736974697665006E006172677300506172616D4172726179417474726962757465006E616D657370616365555249006E73006E657774657874007465726D696E61746F7200707265666978006E6F646500446F63756D656E7400446F63756D656E74557269004D6963726F736F66742E53716C5365727665722E5365727665720053716C46616365744174747269627574650053797374656D2E5265666C656374696F6E00417373656D626C795469746C6541747472696275746500417373656D626C794465736372697074696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500417373656D626C79436F6D70616E7941747472696275746500417373656D626C7950726F6475637441747472696275746500417373656D626C79436F7079726967687441747472696275746500417373656D626C7954726164656D61726B41747472696275746500417373656D626C7943756C7475726541747472696275746500434C53436F6D706C69616E7441747472696275746500417373656D626C7956657273696F6E41747472696275746500417373656D626C7946696C6556657273696F6E4174747269627574650053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300436F6D70696C6174696F6E52656C61786174696F6E734174747269627574650052756E74696D65436F6D7061746962696C6974794174747269627574650053514C232E53676D6C5265616465720053657269616C697A61626C6541747472696275746500476574537472696E670053797374656D2E53656375726974792E5065726D697373696F6E730053656375726974795065726D697373696F6E417474726962757465005365637572697479416374696F6E00417267756D656E744E756C6C457863657074696F6E0041646456616C75650053797374656D2E476C6F62616C697A6174696F6E0043756C74757265496E666F006765745F496E76617269616E7443756C7475726500537472696E6700436F6D70617265006F705F496E657175616C69747900537472696E67526561646572006765745F536368656D65006F705F457175616C697479006765745F4C6F63616C506174680046696C6553747265616D0046696C654D6F64650046696C654163636573730053797374656D2E4E6574005765625265717565737400437265617465004874747057656252657175657374007365745F557365724167656E74007365745F54696D656F7574004957656250726F7879007365745F50726F7879007365745F50726541757468656E7469636174650043726564656E7469616C4361636865004943726564656E7469616C73006765745F44656661756C7443726564656E7469616C73007365745F43726564656E7469616C7300576562526573706F6E736500476574526573706F6E7365006765745F526573706F6E7365557269006765745F4162736F6C757465557269006765745F436F6E74656E745479706500496E6465784F6600537562737472696E67006765745F4C656E677468005472696D00476574526573706F6E736553747265616D00417267756D656E74457863657074696F6E007365745F4C656E67746800436861720049734C6574746572006765745F43757272656E74554943756C747572650049466F726D617450726F766964657200466F726D61740049734C65747465724F72446967697400417070656E6400546F537472696E67006765745F436861727300436F6E63617400456D70747900436F6E7665727400546F4368617200496E743332006765745F4162736F6C7574655061746800474300537570707265737346696E616C697A65002E6363746F72003C50726976617465496D706C656D656E746174696F6E44657461696C733E7B41434246453538422D413946312D344243362D423435462D3241313542324431423641387D00436F6D70696C657247656E6572617465644174747269627574650056616C756554797065005F5F5374617469634172726179496E69745479706553697A653D3132380024246D6574686F643078363030303130652D310052756E74696D6548656C706572730041727261790052756E74696D654669656C6448616E646C6500496E697469616C697A654172726179006765745F55544638006765745F43616E5365656B0042797465004765744465636F646572005365656B4F726967696E005365656B004D656D6F727953747265616D00577269746500436F7079006765745F426967456E6469616E556E69636F646500556E69636F6465456E636F64696E67004D617468004D696E0055496E74333200496E76616C69644F7065726174696F6E457863657074696F6E0054727947657456616C75650056616C7565436F6C6C656374696F6E006765745F56616C75657300456E756D657261746F7200476574456E756D657261746F72006765745F43757272656E7400436F6E7461696E734B657900416464004D6F76654E65787400537472696E67436F6D70617269736F6E0049456E756D657261746F720024246D6574686F643078363030303037322D310049734E756C6C4F72456D707479006765745F4D657373616765004170706C69636174696F6E457863657074696F6E004E6F74496D706C656D656E746564457863657074696F6E004E6F74537570706F72746564457863657074696F6E0052756E74696D655479706548616E646C65004765745479706546726F6D48616E646C6500546F41727261790044656661756C744D656D62657241747472696275746500417373656D626C79006765745F417373656D626C79006765745F46756C6C4E616D650053706C6974004765744D616E69666573745265736F7572636553747265616D0053747265616D526561646572004469726563746F72790047657443757272656E744469726563746F72790053747265616D5772697465720057726974654C696E6500436C65617200586D6C436F6E7665727400456E636F64654E616D6500417267756D656E744F75744F6652616E6765457863657074696F6E00586D6C457863657074696F6E0053746172747357697468005472696D456E64005265706C616365004973446967697400537472696E6757726974657200586D6C5465787457726974657200466F726D617474696E67007365745F466F726D617474696E6700586D6C5772697465720057726974654E6F6465005665726966794E4D544F4B454E005665726966794E434E616D650053716C46756E6374696F6E417474726962757465006765745F49734E756C6C00586D6C446F63756D656E74007365745F50726573657276655768697465737061636500586D6C5265736F6C766572007365745F586D6C5265736F6C766572004C6F616400586D6C4E6F6465006765745F4F75746572586D6C006F705F496D706C6963697400001B65006E00740069007400790043006F006E007400650078007400000969006E0066006F000009680074006D006C00003355006E007200650073006F006C007600610062006C006500200065006E007400690074007900200027007B0030007D0027000109660069006C00650000354D006F007A0069006C006C0061002F0034002E0030002000280063006F006D00700061007400690062006C0065003B0029003B00001374006500780074002F00680074006D006C00000F630068006100720073006500740000033D0000033B0000057300620000097400650072006D00004549006E00760061006C006900640020006E0061006D0065002000730074006100720074002000630068006100720061006300740065007200200027007B0030007D002700013949006E00760061006C006900640020006E0061006D0065002000630068006100720061006300740065007200200027007B0030007D00270001177400650072006D0069006E00610074006F0072007300004D20007300740061007200740069006E00670020006F006E0020006C0069006E00650020007B0030007D00200077006100730020006E006500760065007200200063006C006F00730065006400004D5000720065006D006100740075007200650020007B0030007D002000700061007200730069006E006700200065006E00740069007400790020007200650066006500720065006E0063006500000745004F004600007D0A005200650066006500720065006E0063006500640020006F006E0020006C0069006E00650020007B0030007D002C00200070006F0073006900740069006F006E0020007B0031007D0020006F006600200069006E007400650072006E0061006C00200065006E007400690074007900200027007B0032007D002700017D0A005200650066006500720065006E0063006500640020006F006E0020006C0069006E00650020007B0030007D002C00200070006F0073006900740069006F006E0020007B0031007D0020006F006600200027007B0032007D002700200065006E00740069007400790020006100740020005B007B0033007D005D00010B43004400410054004100000B530044004100540041000005500049000001000B3C003F0078006D006C00000F760065007200730069006F006E00001165006E0063006F00640069006E00670000033E0000096D00650074006100001568007400740070002D0065007100750069007600010F63006F006E00740065006E007400001963006F006E00740065006E0074002D007400790070006500014B49006E00760061006C006900640020006300680061007200610063007400650072002000300078007B0030003A0078007D00200069006E00200065006E0063006F00640069006E006700008091540068006500200061007400740072006900620075007400650020006C00690073007400200066006F0072002000740068006500200065006C0065006D0065006E00740020006400650063006C00610072006100740069006F006E00200068006100730020006E006F00740020006200650065006E00200069006E0069007400690061006C0069007300650064002E0000096C00690073007400000B45004D00500054005900000D52004300440041005400410000594400650063006C006100720065006400200063006F006E00740065006E00740020007400790070006500200027007B0030007D00270020006900730020006E006F007400200073007500700070006F007200740065006400010F2300500043004400410054004100004B4D0069007300730069006E006700200074006F006B0065006E0020006200650066006F0072006500200063006F006E006E006500630074006F007200200027007B0030007D0027002E00015F43006F006E006E006500630074006F007200200027007B0030007D002700200069007300200069006E0063006F006E00730069007300740065006E0074002000770069007400680020007B0031007D002000670072006F00750070002E0001076400740064000080A9410074007400720069006200750074006500540079007000650020007B0030007D0020006900730020006E006F0074002000760061006C0069006400200066006F007200200061006E002000610074007400720069006200750074006500200064006500660069006E006900740069006F006E0020007700690074006800200061006E00200065006E0075006D006500720061007400650064002000760061006C00750065002E00000D45004E005400490054005900001145004E00540049005400490045005300000549004400000B49004400520045004600000D49004400520045004600530000094E0041004D004500000B4E0041004D0045005300000F4E004D0054004F004B0045004E0000114E004D0054004F004B0045004E005300000D4E0055004D00420045005200000F4E0055004D004200450052005300000F4E00550054004F004B0045004E0000114E00550054004F004B0045004E005300004B41007400740072006900620075007400650020007400790070006500200027007B0030007D00270020006900730020006E006F007400200073007500700070006F007200740065006400010B46004900580045004400001152004500510055004900520045004400000F49004D0050004C0049004500440000474100740074007200690062007500740065002000760061006C0075006500200027007B0030007D00270020006E006F007400200073007500700070006F007200740065006400010920000D000A000900003555006E00650078007000650063007400650064002000630068006100720061006300740065007200200027007B0030007D002700017146006F0075006E006400200027007B0030007D0027002C00200062007500740020006500780070006500630069006E00670020006400650063006C00610072006100740069006F006E0020007300740061007200740069006E00670020007700690074006800200027003C0021002700014D45007800700065006300740069006E006700200063006F006D006D0065006E007400200027003C0021002D002D0027002000620075007400200066006F0075006E00640020007B0030007D00010F43006F006D006D0065006E00740000072D002D003E00010F45004C0045004D0045004E005400000F4100540054004C0049005300540000809349006E00760061006C006900640020006400650063006C00610072006100740069006F006E00200027003C0021007B0030007D0027002E002000200045007800700065006300740069006E0067002000270045004E00540049005400590027002C002000270045004C0045004D0045004E005400270020006F007200200027004100540054004C0049005300540027002E00015D45007800700065006300740069006E006700200063006F006D006D0065006E0074002000640065006C0069006D006900740065007200200027002D002D0027002000620075007400200066006F0075006E00640020007B0030007D00011D4D00610072006B0075007000200043006F006D006D0065006E00740000052D002D0001035B00000F49004E0043004C00550044004500000D490047004E004F0052004500004B55006E0073007500700070006F00720074006500640020006D00610072006B00650064002000730065006300740069006F006E0020007400790070006500200027007B0030007D002700011F49006E0063006C007500640065002000530065006300740069006F006E00003745007800700065006300740069006E006700200027005B0027002000620075007400200066006F0075006E00640020007B0030007D00012743006F006E0064006900740069006F006E0061006C002000530065006300740069006F006E0000075D005D003E000049450078007400650072006E0061006C00200070006100720061006D006500740065007200200065006E00740069007400790020007200650073006F006C007500740069006F006E00005B5200650066006500720065006E0063006500200074006F00200075006E0064006500660069006E0065006400200070006100720061006D006500740065007200200065006E007400690074007900200027007B0030007D002700010D5000550042004C0049004300006745007800700065006300740069006E00670020007000750062006C006900630020006900640065006E0074006900660069006500720020006C00690074006500720061006C002000620075007400200066006F0075006E006400200027007B0030007D002700010D530059005300540045004D0000808549006E00760061006C00690064002000650078007400650072006E0061006C0020006900640065006E00740069006600690065007200200027007B0030007D0027002E00200020004500780070006500630069006E006700200027005000550042004C0049004300270020006F00720020002700530059005300540045004D0027002E00016745007800700065006300740069006E0067002000730079007300740065006D0020006900640065006E0074006900660069006500720020006C00690074006500720061006C002000620075007400200066006F0075006E006400200027007B0030007D002700016F45007800700065006300740069006E006700200065006E00640020006F006600200065006E00740069007400790020006400650063006C00610072006100740069006F006E00200027003E0027002000620075007400200066006F0075006E006400200027007B0030007D002700012F49006E00760061006C00690064002000730079006E00740061007800200061007400200027007B0030007D002700013F45007800700065006300740069006E006700200069006E0063006C007500730069006F006E00730020006E0061006D0065002000670072006F0075007000007145007800700065006300740069006E006700200065006E00640020006F006600200045004C0045004D0045004E00540020006400650063006C00610072006100740069006F006E00200027003E0027002000620075007400200066006F0075006E006400200027007B0030007D002700013943006F006E00740065006E00740020004D006F00640065006C00200077006100730020006E006F007400200063006C006F00730065006400007950006100720061006D006500740065007200200065006E0074006900740079002000630061006E006E006F007400200063006C006F007300650020006100200070006100720065006E0020006F007500740073006900640065002000690074002700730020006F0077006E002000730063006F00700065000103230000514100540054004C0049005300540020007200650066006500720065006E00630065007300200075006E0064006500660069006E0065006400200045004C0045004D0045004E00540020007B0030007D0000114E004F0054004100540049004F004E00005345007800700065006300740069006E00670020006E0061006D0065002000670072006F007500700020002700280027002C002000620075007400200066006F0075006E006400200027007B0030007D002700010F20000D000A0009007C002C002900000B20000D000A0009003E00001920000D000A0009002C0026007C00280029003F002B002A00000B200009000D000A003E0000132E00480074006D006C002E006400740064000009480054004D004C0000035C0000073A002F002F000011660069006C0065003A002F002F002F0000052F002F0000092000200020002000001523002300230020004500720072006F0072003A00006323002300230020004500720072006F007200200069006E0020007B0030007D0023007B0031007D002C0020006C0069006E00650020007B0032007D002C00200070006F0073006900740069006F006E0020007B0033007D003A0020007B0034007D00000B78006D006C006E007300003B68007400740070003A002F002F007700770077002E00770033002E006F00720067002F0032003000300030002F0078006D006C006E0073002F00000778006D006C00004968007400740070003A002F002F007700770077002E00770033002E006F00720067002F0058004D004C002F0031003900390038002F006E0061006D00650073007000610063006500000D78006D006C006E0073003A000011230075006E006B006E006F0077006E00000369000013230064006F00630075006D0065006E00740000808159006F00750020006D0075007300740020007300700065006300690066007900200069006E00700075007400200065006900740068006500720020007600690061002000480072006500660020006F007200200049006E00700075007400530074007200650061006D002000700072006F00700065007200740069006500730000155200650063006F0076006500720069006E0067000037490067006E006F00720069006E006700200069006E00760061006C006900640020006D00610072006B0075007000200027003C002100010D200009000D000A003E003C00000F44004F0043005400590050004500007949006E00760061006C006900640020006400650063006C00610072006100740069006F006E00200027003C0021007B0030007D002E002E002E0027002E002000200045007800700065006300740069006E006700200027003C00210044004F0043005400590050004500270020006F006E006C0079002E000111200009000D000A003D002F003E003C00006F45007800700065006300740065006400200065006D007000740079002000730074006100720074002000740061006700200027002F003E0027002000730065007100750065006E0063006500200069006E007300740065006100640020006F006600200027007B0030007D002700013D530074006100720074002000740061006700200027007B0030007D00270020006900730020006D0069007300730069006E006700200027003E0027000113200009000D000A003D00270022002F003E0001032C0000033A0000434400750070006C00690063006100740065002000610074007400720069006200750074006500200027007B0030007D0027002000690067006E006F00720065006400014D55006E0065007800700065006300740065006400200045004F0046002000700061007200730069006E0067002000730074006100720074002000740061006700200027007B0030007D00270001454E006F0020006D00610074006300680069006E0067002000730074006100720074002000740061006700200066006F007200200027003C002F007B0030007D003E00270001053C002500000D4100730070004E0065007400000525003E0000032D0001032000000F09000D000A005B005D003C003E000007690066002000003F45007800700065006300740069006E0067002000430044004100540041002000620075007400200066006F0075006E006400200027007B0030007D002700013B45007800700065006300740069006E006700200027005B0027002000620075007400200066006F0075006E006400200027007B0030007D002700014355006E0065007800700065006300740065006400200074006F006B0065006E00200069006E00200044004F0043005400590050004500200027007B0030007D002700011F49006E007400650072006E0061006C00200053007500620073006500740000035D00005B45007800700065006300740069006E006700200065006E00640020006F006600200044004F004300\
-540059005000450020007400610067002C002000620075007400200066006F0075006E006400200027007B0030007D0027000141440054004400200064006F006500730020006E006F00740020006D006100740063006800200064006F00630075006D0065006E00740020007400790070006500000B200009000D000A003F00002D500072006F00630065007300730069006E006700200049006E0073007400720075006300740069006F006E0000053C002F0000133C0021005B00430044004100540041005B0000092F002A002A002F00002D55006E0064006500660069006E0065006400200065006E007400690074007900200027007B0030007D0027000103260000374E006F00740020006F006E00200061006E00200065006E00740069007400790020007200650066006500720065006E00630065002E0000294E006F00740020006F006E00200061006E0020006100740074007200690062007500740065002E0000033C00000942004F004400590000808144006F00630075006D0065006E007400200041004E004400200044006F00630075006D0065006E0074005500720069002000630061006E006E006F007400200062006F007400680020006200650020004E0055004C004C0020006F007200200065006D00700074007900200073007400720069006E0067002000270027002100010F74006F006C006F00770065007200000F74006F0075007000700065007200000000008BE5BFACF1A9C64BB45F2A15B2D1B6A80008B77A5C561934E08902060E03200001042001010E062002010E1210062002010E120507200201122111250320000E0328000E0206080306110C04000000000401000000040200000002060302FFFF02060203061210030612290306122D03061215072004010E0E0E0E052002010E0E092004010E122D12150E032000020420010102042000122D04200012100320000303200008042000110C072002011210122D04200012290720030E12310E020620020E1231030720030E12310E0E03061D08052002010E03052002010E08040001020E03280002042800122D04280012100328000303280008042800110C0428001229040040000004FFFFFFFF0306123503061D050306121903061D0307200201123512290600011235123509000312191D05100808042001020E0420010E0E0520010E100E04200012190420010103072003081D030808072003081D0508080A2005081D0508081D030804000103090306122C03061D0E0806151239020E12440C2006010E0202122C1D0E1D0E042000122C05200112440E0A200101151239020E1244062002020E1248042800122C030611280403000000030612380420001128042800112803061130030611340306123D04200011340420001238052001011238042800113404280012380306113C040400000004050000000406000000040700000004080000000409000000040A000000040B000000040C000000040D000000040E000000040F00000004100000000306114004200011400420001D0E072002011D0E113C042000113C04280011400428001D0E042800113C0820000D000A0009000806151239020E12240806151239020E121003061231062002010E124104200012410D00071248122D0E0E0E0E0E12410D00061248122D0E12150E0E124105200112100E05200112240E07200201122D12100420010302092000151239020E12100620021D0E030206200201123D02052001122C030620020103122C0B200201151239020E124403052001124403062002010312440428001241050002020E0E0306115003061D1C04200101080420011C0805200201081C0320001C0428011C0803061244062003010E0E030306114503061149030612240306116003061254072003010E11450E08200412580E0E030205200101125C042001080E05200112580810230075006E006B006E006F0077006E000C200009000D000A003E003C0010200009000D000A003D002F003E003C0012200009000D000A003D00270022002F003E000A200009000D000A003E000E09000D000A005B005D003C003E000A200009000D000A003F00030612480306125C030612580306124D030611510706151239020E0E052001011241042000124805200101124805200101122D04200012150520010112150420001150052001011150042000124D05200101124D062002010E1D0E082003125C0E11450E062001125C125C042000125C0420001145042000114904200011510520010111510520020E0E0E0420010E08052002020E0E042001020305200202030206200201123103042000115507000201125C1258042800124804280012150428001150042800124D0428001145042800114904280011510428010E080428010E0E0528020E0E0E04280011550A000312591259115D115D12010001005408074D617853697A653200000080A0002400000480000094000000060200000024000052534131000400000100010033237E60D1AF2429EE4E6DABE42A2C8A8893EBD630506BA491C63FBFC5D6D0416C540D47A1244C1689482BC752CBAA4E0B95552751626957D1C0BD356D2C5E728A3EA0244C7AC9CC3D4CFB363802B0401245A79C4C7038E7E3901F3C727EC901AF72DAC23D4C6E2CAF8802EDDC1388C628430979DAC9AF0D307CD9527F1FDDC6062001011180A980A42E01808453797374656D2E53656375726974792E5065726D697373696F6E732E53656375726974795065726D697373696F6E4174747269627574652C206D73636F726C69622C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038391B0154021653657269616C697A6174696F6E466F726D617474657201052002010E1C0500001280B1090004080E0E021280B107000202122D122D0307010306200201122D0E04000012290A2003010E1180C11180C50700011280C9122D062001011280D50500001280DD062001011280DD0520001280E10620010E1280B104200108030520020E0808052002080E0805000112290E042000123518070E123512290E1280CD1280E1122D0E0E0808080E12140E04000102030900030E1280ED0E1D1C052001123103070703031D1C1D1C05200112310E040702030E04200103080500020E0E0E0A070808030803080808080400010308090707030808080803030400010E030507020E1D1C0407011D1C0B0705121012310E1D1C1D1C0307010E040001011C03000001030611700900020112810911810D0720020A0A1181150707040812190808072003011D050808090704081D05081281190C00050112810908128109080806070308081D0305200201020205070309090903070108060704080808030407020308072003011D0308080507030808080A070512190E0E122912190F070B08030E0E0E0E08080E122912190607040803080805070303080E050002080808040702080808200312311D0308080707031D0308123104070205050907050908081D1C1D1C07151239020E124408200202130010130104070112440B20001512812D0213001301081512812D020E12440B20001511813102130013010815118131020E1244042000130105200102130007200201130013010C0702124415118131020E1244080003080E0E1181350B07070E0E021D0E081D0E08042001081C09070411301D1C031D1C05070211340305200012813914070A1C1C0E1224123802128139121112813912110706151239020E0806151239020E080607030E081D1C050702021D1C07151239020E122407151239020E1210070702124812813D0407011210040701122406070303121003050703030E0E0507020312100507020E1210081512812D020E12100815118131020E1210130703151239020E1210121015118131020E12100D070A03020E12100E0E0E0E0E0E07000203031280B112070B031D0E0202122C1D0E1D0E0E0E1D0E0808000112814911814D082001128109128149021D0E080704123D12100E0E060703030E1210070703122C12100E070704080312100E120707031D0E151239020E12440E12241D0E0807070303121012440507020E124405070212100E0807051210020E0E0E090100044974656D00000A00030112810912810908060703081D1C080607031258080806070308081258080704080812581258040701125806151239020E0E0520001281550620011D0E1D0305200112350E0520010112350300000E0F07061281550E12351281591D0311500600030E0E0E0E062002010E1D1C0607030E0E1D1C0407011D0E040701125C05070208125C0400010E0E0407020E0810070C0E08125C080E0E0E08125C080E0807070308125C114906070308125C0E07070302125C11600607030E0E1D0E0507020E1150030701020F07090E125C0E0E030E12581D0E1D0E0A07060E030208125C1D0E060704030E0808070704030E0E1D0E0A0707030E0E0E0E0E1D0E0520010E1D030707040E0E081D03040702020E07070502030E0E030B0706030E0E121012101D0E0407011145062001011280ED0620010111817906200201121D020A070312817112817511450807021281711281750607021224124404070208020B07060E0808125C1224125C80C801000400540E044E616D6511436F6E766572745F48746D6C546F586D6C5455794D6963726F736F66742E53716C5365727665722E5365727665722E446174614163636573734B696E642C2053797374656D2E446174612C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D623737613563353631393334653038390A446174614163636573730000000054020F497344657465726D696E697374696301540209497350726563697365010320000A0420001D03052001011D030620010112818905200101121D050001115D0E05200101115D0D07051280B9115012641281850E1401000F53514C232E53676D6C5265616465720000150100107777772E53514C73686172702E636F6D00000501000000001501001053716C205175616E74756D204C65617000000901000453514C2300007C010077436F7079726967687420C2A92032303032204D6963726F736F667420436F72706F726174696F6E2E20416C6C207269676874732072657365727665642E20284368726973204C6F76657474293B20323030372D32303038204D696E64546F7563682E20416C6C207269676874732072657365727665642E00000501000100000C010007312E382E302E3000000801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010000BCF000000000000000000000DEF00000002000000000000000000000000000000000000000000000D0F000000000000000000000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058000100200400000000000000000000200434000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE00000100080001000000000008000100000000003F000000000000000400000002000000000000000000000000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E0073006C006100740069006F006E00000000000000B00480030000010053007400720069006E006700460069006C00650049006E0066006F0000005C03000001003000300030003000300034006200300000003C001100010043006F006D006D0065006E007400730000007700770077002E00530051004C00730068006100720070002E0063006F006D000000000044001100010043006F006D00700061006E0079004E0061006D00650000000000530071006C0020005100750061006E00740075006D0020004C0065006100700000000000480010000100460069006C0065004400650073006300720069007000740069006F006E0000000000530051004C0023002E00530067006D006C005200650061006400650072000000300008000100460069006C006500560065007200730069006F006E000000000031002E0038002E0030002E003000000048001400010049006E007400650072006E0061006C004E0061006D0065000000530051004C0023002E00530067006D006C005200650061006400650072002E0064006C006C0000001401770001004C006500670061006C0043006F007000790072006900670068007400000043006F0070007900720069006700680074002000A9002000320030003000320020004D006900630072006F0073006F0066007400200043006F00720070006F0072006100740069006F006E002E00200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00200028004300680072006900730020004C006F00760065007400740029003B00200032003000300037002D00320030003000380020004D0069006E00640054006F007500630068002E00200041006C006C0020007200690067006800740073002000720065007300650072007600650064002E00000000005000140001004F0072006900670069006E0061006C00460069006C0065006E0061006D0065000000530051004C0023002E00530067006D006C005200650061006400650072002E0064006C006C0000002C0005000100500072006F0064007500630074004E0061006D00650000000000530051004C00230000000000340008000100500072006F006400750063007400560065007200730069006F006E00000031002E0038002E0030002E003000000040000C00010041007300730065006D0062006C0079002000560065007200730069006F006E00000031002E0038002E0034002E00310033003700360031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F000000C000000F03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
- WITH PERMISSION_SET = SAFE;
- ');
- PRINT 'SQL#.SgmlReader Assembly Created.';
- END;
- ELSE
- BEGIN
- PRINT 'Skipping install of SQL#.SgmlReader Assembly.';
- END;
- PRINT '';
-
-
- IF NOT EXISTS (
- SELECT 1
- FROM sys.module_assembly_usages mau
- INNER JOIN sys.assemblies asmbly
- ON asmbly.assembly_id = mau.assembly_id
- AND asmbly.name = N'SQL#'
- INNER JOIN sys.objects so
- ON so.[object_id] = mau.[object_id]
- WHERE so.name = N'SQLsharp_Setup'
- )
- BEGIN
- PRINT 'Creating Setup Procedure ...';
- PRINT '';
- EXEC(N'CREATE PROCEDURE [' + @SQLsharpSchema + N'].[SQLsharp_Setup] @SQLsharpSchema sysname = ''' + @SQLsharpSchema + N''', @SQLsharpAssembly sysname = NULL, @JustPrintSQL BIT = 0 WITH EXECUTE AS CALLER AS EXTERNAL NAME [SQL#].[SQLsharp].[Setup];');
- PRINT 'Setup Procedure Created';
- PRINT '';
- END;
- ELSE
- BEGIN
- PRINT 'Setup Procedure already exists; skipping ...';
- PRINT '';
- END;
-
-
- PRINT 'Running Setup Procedure ...';
- EXEC (N'EXEC [' + @SQLsharpSchema + N'].[SQLsharp_Setup]');
-
-
- PRINT '';
- PRINT 'Setup Procedure Completed';
- PRINT '';
-
------------------------------------
- IF (EXISTS(SELECT * FROM #SQLsharpOptions sso WHERE sso.[Option] LIKE N'SQL#%'))
- BEGIN
-
- -- account for pre-Version 3.0.x where INET, FileSystem, and DB groups were in main SQL# Assembly
- IF (EXISTS(
- SELECT *
- FROM #SQLsharpOptions
- WHERE [Option] = N'PriorVersion'
- AND LEFT([Value], 2) IN ('1.', '2.')
- )
- AND EXISTS(
- SELECT *
- FROM #SQLsharpOptions
- WHERE [Option] = N'SQL#'
- AND [Value] = 'EXTERNAL_ACCESS'
- )
- )
- BEGIN
- EXEC(N'
- INSERT INTO #SQLsharpOptions ([Option], [Value])
- SELECT module.SplitVal AS [Option], ''EXTERNAL_ACCESS'' AS [Value]
- FROM [' + @CurrentSQLsharpSchema + N'].String_Split(N''SQL#.Network,SQL#.FileSystem,SQL#.DB'', N'','', 1) module
- LEFT JOIN #SQLsharpOptions tmp
- ON tmp.[Option] = module.SplitVal
- WHERE tmp.[Option] IS NULL;
-
- ');
- END;
-
-
- DECLARE @Option NVARCHAR(50),
- @Value VARCHAR(50);
-
- DECLARE opt_cur CURSOR STATIC LOCAL FOR
- SELECT sso.[Option], sso.[Value]
- FROM #SQLsharpOptions sso
- INNER JOIN sys.assemblies sa
- ON sa.[name] = sso.[Option] --COLLATE database_default
- WHERE sso.[Option] LIKE N'SQL#%'
- AND sso.[Value] <> 'SAFE'
- ORDER BY sa.[name];
-
- OPEN opt_cur;
-
- FETCH NEXT
- FROM opt_cur
- INTO @Option, @Value;
-
- WHILE (@@FETCH_STATUS = 0)
- BEGIN
- RAISERROR(N'Resetting [%s] permissions to be: %s ...', 0, 0, @Option, @Value) WITH NOWAIT;
- EXEC (N'ALTER ASSEMBLY [' + @Option + N'] WITH PERMISSION_SET = ' + @Value);
-
- FETCH NEXT
- FROM opt_cur
- INTO @Option, @Value;
- END;
-
- CLOSE opt_cur;
- DEALLOCATE opt_cur;
- END;
------------------------------------
-
-
- PRINT '';
- PRINT 'SQL# Installed!!';
- PRINT '';
-
- COMMIT TRAN;
-
-
-END TRY
-BEGIN CATCH
-
- IF (@@TRANCOUNT > 0)
- BEGIN
- PRINT 'Rolling back the TRANSACTION...';
- ROLLBACK TRAN;
- PRINT 'Done.';
- END;
-
- IF (CURSOR_STATUS('local', 'opt_cur') >= 0)
- BEGIN
- PRINT 'Closing / Deallocating the CURSOR...';
- CLOSE opt_cur;
- DEALLOCATE opt_cur;
- PRINT 'Done.';
- END;
-
- DECLARE @ErrorMessage NVARCHAR(MAX);
- SET @ErrorMessage = N'Line ' + CONVERT(NVARCHAR(20), ERROR_LINE())
- + N', Msg ' + CONVERT(NVARCHAR(20), ERROR_NUMBER())
- + N': ' + ERROR_MESSAGE();
- RAISERROR(@ErrorMessage, 16, 1);
- PRINT '';
- PRINT '';
- RAISERROR(N'SQL# did NOT install successfully. Please see error messages above.', 16, 1);
- RETURN;
-
-END CATCH;
-
-
--- If this is a BETA copy, display the Expiration Date.
-IF (OBJECT_ID('SQL#.SQLsharp_ExpirationDate') IS NOT NULL)
-BEGIN
- PRINT '';
- EXEC (N'PRINT N''This BETA of SQL# version '' + [' + @SQLsharpSchema + N'].[SQLsharp_Version]() + N'' expires on: '' + CONVERT(NVARCHAR(30), [' + @SQLsharpSchema + N'].[SQLsharp_ExpirationDate](), 121);');
- PRINT '';
- PRINT '';
-END
-GO
-
--- Make sure that the transaction is cleaned up, just in case an error aborts the batch
-IF (@@TRANCOUNT > 0)
-BEGIN;
- PRINT 'For some reason the CATCH block was skipped but the TRANSACTION is still open; rolling back...';
- ROLLBACK TRAN;
- PRINT 'Done.';
-END;
-GO
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..4db847e1
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,111 @@
+# Contributing to the SQL Server Kit
+Please take a moment to review this document in order to make the contribution
+process easy and effective for everyone involved.
+
+Following these guidelines will help us get back to you more quickly, and will
+show that you care about making MySQLTuner better just like we do. In return, we'll
+do our best to respond to your issue or pull request as soon as possible with
+the same respect.
+
+_**Please Note:** These guidelines are adapted from [@necolas](https://github.com/necolas)'s
+[issue-guidelines](https://github.com/necolas/issue-guidelines) and serve as
+an excellent starting point for contributing to any open source project._
+
+
+## Feature requests
+
+
+Feature requests are welcome. But take a moment to find out whether your idea
+fits with the scope and aims of the project. It's up to *you* to make a strong
+case to convince the project's developers of the merits of this feature. Please
+provide as much detail and context as possible.
+
+Building something great means choosing features carefully especially because it
+is much, much easier to add features than it is to take them away. Additions
+ will be evaluated on a combination of scope (how well it fits into the
+project), maintenance burden and general usefulness.
+
+Creating something great often means saying no to seemingly good ideas. Don't
+despair if your feature request isn't accepted, take action! Fork the
+repository, build your idea and share it with others. We released this project under
+the [LICENSE] for this purpose precisely. Open source works best when smart
+and dedicated people riff off of each others' ideas to make even greater things.
+
+
+## Pull requests
+
+
+Good pull requests — patches, improvements, new features — are a fantastic help.
+They should remain focused in scope and avoid containing unrelated commits.
+
+**Please ask first** before embarking on any significant pull request (e.g.
+implementing features, refactoring code, porting to a different language),
+otherwise you risk spending a lot of time working on something that the
+project's developers might not want to merge into the project. You can solicit
+feedback and opinions in an open feature request thread or create a new one.
+
+Please use the [git flow for pull requests](#git-flow) and follow SQL Server KIT
+[code conventions](#code-conventions) before submitting your work.
+
+
+## Git Flow for pull requests
+
+
+1. [Fork] the project, clone your fork, and configure the remotes:
+
+ ```bash
+ # Clone your fork of the repo into the current directory
+ git clone git@github.com:/sqlserver-kit.git
+ # Navigate to the newly cloned directory
+ cd sqlserver-kit
+ # Assign the original repo to a remote called "upstream"
+ git remote add upstream https://github.com/ktaranov/sqlserver-kit
+ ```
+
+2. If you cloned a while ago, get the latest changes from upstream:
+
+ ```bash
+ git checkout master
+ git pull upstream master
+ ```
+
+3. Create a new topic branch (off the main project development branch) to
+ contain your feature, change, or fix:
+
+ ```bash
+ git checkout -b
+ ```
+
+4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines]
+ or your code is unlikely be merged into the main project. Use Git's [interactive rebase]
+ feature to tidy up your commits before making them public.
+
+5. Locally merge (or rebase) the upstream development branch into your topic branch:
+
+ ```bash
+ git pull [--rebase] upstream master
+ ```
+
+6. Push your topic branch up to your fork:
+
+ ```bash
+ git push origin
+ ```
+
+7. [Open a Pull Request] with a clear title and description.
+
+**IMPORTANT**: By submitting a patch, you agree to allow the project owner to license your work under the MIT [LICENSE]
+
+
+## SQL Server KIT Code Conventions
+
+
+Check [code convention]
+
+
+[Fork]:https://help.github.com/articles/fork-a-repo/
+[git commit message guidelines]:http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
+[interactive rebase]:https://help.github.com/articles/about-git-rebase/
+[Open a Pull Request]:https://help.github.com/articles/about-pull-requests/
+[LICENSE]:https://github.com/ktaranov/sqlserver-kit/blob/master/LICENSE.md
+[code convention]:https://github.com/ktaranov/sqlserver-kit/blob/master/SQL%20Server%20Name%20Convention%20and%20T-SQL%20Programming%20Style.md
diff --git a/Errors/Backup/Be aware of 701 error if you use memory optimized table variable in a loop.maff b/Errors/Backup/Be aware of 701 error if you use memory optimized table variable in a loop.maff
new file mode 100644
index 00000000..2a3d673a
Binary files /dev/null and b/Errors/Backup/Be aware of 701 error if you use memory optimized table variable in a loop.maff differ
diff --git "a/Errors/Backup/CREATE DATABASE \342\200\223 I\342\200\231ve not seen that before..maff" "b/Errors/Backup/CREATE DATABASE \342\200\223 I\342\200\231ve not seen that before..maff"
new file mode 100644
index 00000000..57e6dc77
Binary files /dev/null and "b/Errors/Backup/CREATE DATABASE \342\200\223 I\342\200\231ve not seen that before..maff" differ
diff --git a/Errors/Backup/Case study Troubleshooting Doomed Transactions.maff b/Errors/Backup/Case study Troubleshooting Doomed Transactions.maff
new file mode 100644
index 00000000..9fdfd481
Binary files /dev/null and b/Errors/Backup/Case study Troubleshooting Doomed Transactions.maff differ
diff --git a/Errors/Backup/Compressed backup errors and TF 3042.maff b/Errors/Backup/Compressed backup errors and TF 3042.maff
new file mode 100644
index 00000000..b4048a77
Binary files /dev/null and b/Errors/Backup/Compressed backup errors and TF 3042.maff differ
diff --git a/Errors/Backup/Nuance of datetime data type in SQL Server.maff b/Errors/Backup/Nuance of datetime data type in SQL Server.maff
new file mode 100644
index 00000000..c845e20a
Binary files /dev/null and b/Errors/Backup/Nuance of datetime data type in SQL Server.maff differ
diff --git a/Errors/Backup/SQL SERVER - Disabling 15000 Partitions (15k).maff b/Errors/Backup/SQL SERVER - Disabling 15000 Partitions (15k).maff
new file mode 100644
index 00000000..acad7d3a
Binary files /dev/null and b/Errors/Backup/SQL SERVER - Disabling 15000 Partitions (15k).maff differ
diff --git a/Errors/Backup/SQL SERVER - FIX Error Msg 8672 - The MERGE Statement Attempted to UPDATE or DELETE the Same Row More Than Once.maff b/Errors/Backup/SQL SERVER - FIX Error Msg 8672 - The MERGE Statement Attempted to UPDATE or DELETE the Same Row More Than Once.maff
new file mode 100644
index 00000000..8d22d2e7
Binary files /dev/null and b/Errors/Backup/SQL SERVER - FIX Error Msg 8672 - The MERGE Statement Attempted to UPDATE or DELETE the Same Row More Than Once.maff differ
diff --git a/Errors/Backup/SQL SERVER - FIX Error 913, Severity 16 - Could Not Find Database ID 3. Database May Not be Activated Yet or May be in Transition.maff b/Errors/Backup/SQL SERVER - FIX Error 913, Severity 16 - Could Not Find Database ID 3. Database May Not be Activated Yet or May be in Transition.maff
new file mode 100644
index 00000000..cd77e956
Binary files /dev/null and b/Errors/Backup/SQL SERVER - FIX Error 913, Severity 16 - Could Not Find Database ID 3. Database May Not be Activated Yet or May be in Transition.maff differ
diff --git a/Errors/Backup/SQL SERVER - Logon Failure The User has not Been Granted the Requested Logon Type at This Computer.maff b/Errors/Backup/SQL SERVER - Logon Failure The User has not Been Granted the Requested Logon Type at This Computer.maff
new file mode 100644
index 00000000..942d63f0
Binary files /dev/null and b/Errors/Backup/SQL SERVER - Logon Failure The User has not Been Granted the Requested Logon Type at This Computer.maff differ
diff --git a/Errors/Backup/SQL Server 2016 Online ALTER COLUMN Operation.maff b/Errors/Backup/SQL Server 2016 Online ALTER COLUMN Operation.maff
new file mode 100644
index 00000000..cfb42900
Binary files /dev/null and b/Errors/Backup/SQL Server 2016 Online ALTER COLUMN Operation.maff differ
diff --git "a/Errors/Backup/Unable to restore a backup \342\200\223 Msg 3241.maff" "b/Errors/Backup/Unable to restore a backup \342\200\223 Msg 3241.maff"
new file mode 100644
index 00000000..293d82cf
Binary files /dev/null and "b/Errors/Backup/Unable to restore a backup \342\200\223 Msg 3241.maff" differ
diff --git a/Errors/Backup/Who owns your availability groups.maff b/Errors/Backup/Who owns your availability groups.maff
new file mode 100644
index 00000000..68ffb564
Binary files /dev/null and b/Errors/Backup/Who owns your availability groups.maff differ
diff --git a/Errors/Identity_gap_sql_server_2012.sql b/Errors/Identity_gap_sql_server_2012.sql
index eb90ddae..3465f56e 100644
--- a/Errors/Identity_gap_sql_server_2012.sql
+++ b/Errors/Identity_gap_sql_server_2012.sql
@@ -3,12 +3,12 @@ DROP TABLE t1;
GO
CREATE TABLE t1 (
- col1 INTEGER IDENTITY(1,1),
+ col1 INTEGER IDENTITY(1,1),
col2 VARCHAR(10),
- col3 CHAR(10),
- col4 NCHAR(10),
- col5 TINYINT,
- col6 BIGINT
+ col3 CHAR(10),
+ col4 NCHAR(10),
+ col5 TINYINT,
+ col6 BIGINT
);
GO
@@ -34,15 +34,15 @@ SELECT *,
LEN(col1) AS integer_len,
LEN(col2) AS varchar_len,
LEN(col3) AS char_len,
- LEN(col4) AS nchar_len,
- LEN(col5) AS tinyint_len,
- LEN(col6) AS bigint_len,
- DATALENGTH(col1) AS integer_datalength,
- DATALENGTH(col2) AS varchar_datalength,
- DATALENGTH(col3) AS char_datalength,
- DATALENGTH(col4) AS nchar_datalength,
- DATALENGTH(col5) AS tinyint_datalength,
- DATALENGTH(col6) AS bigint_datalength
+ LEN(col4) AS nchar_len,
+ LEN(col5) AS tinyint_len,
+ LEN(col6) AS bigint_len,
+ DATALENGTH(col1) AS integer_datalength,
+ DATALENGTH(col2) AS varchar_datalength,
+ DATALENGTH(col3) AS char_datalength,
+ DATALENGTH(col4) AS nchar_datalength,
+ DATALENGTH(col5) AS tinyint_datalength,
+ DATALENGTH(col6) AS bigint_datalength
FROM t1;
-- DBCC CHECKIDENT('t1', 'RESEED', 5);
@@ -55,14 +55,14 @@ GO
BEGIN TRY
SELECT --/*
CAST(-1 AS tinyint),
- 1/0
+ 1/0
--*/ * FROM t1;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ERROR_NUMBER,
ERROR_SEVERITY() AS ERROR_SEVERITY,
- ERROR_STATE() AS ERROR_STATE,
- ERROR_PROCEDURE() AS ERROR_PROCEDURE,
+ ERROR_STATE() AS ERROR_STATE,
+ ERROR_PROCEDURE() AS ERROR_PROCEDURE,
ERROR_MESSAGE() AS ERROR_MESSAGE,
- ERROR_LINE() AS ERROR_LINE;
-END CATCH;
\ No newline at end of file
+ ERROR_LINE() AS ERROR_LINE;
+END CATCH;
diff --git a/Errors/PDB/README.md b/Errors/PDB/README.md
new file mode 100644
index 00000000..52624419
--- /dev/null
+++ b/Errors/PDB/README.md
@@ -0,0 +1,22 @@
+# SQL Server Debugging
+
+- [Obtaining symbol files (.PDB) for SQL Server Releases](https://github.com/arvindshmicrosoft/SQLCallStackResolver/wiki/Scripts-to-download-symbols-for-SQL-Server-2019)
+- [What is the SOS_WORK_DISPATCHER Wait Type?](https://orderbyselectnull.com/2018/09/27/what-is-the-sos_work_dispatcher-wait-type/)
+- [An XEvent a Day (24 of 31) – What is the callstack?](https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-24-of-31-what-is-the-callstack/)
+
+This section contains PowerShell scripts which automate the download and extraction of `.PDB` files corresponding to major releases of SQL Server.
+
+For running any of these scripts, please note the following:
+- You must run them within PowerShell, preferably within Windows
+- You must have Internet access from the machine running the PowerShell script
+- You might want to replace the $outputFolder placeholder with a different folder path (for example, `N:\sqlsymbols\SQL2016SP1`)
+- The script will automatically create the folder where the downloaded PDB files are stored.
+
+Please click on one of the links below depending on the major version of SQL Server that you are looking at:
+- [SQL Server 2019](SQL-Server-2019.md)
+- [SQL Server 2017](SQL-Server-2017.md)
+- [SQL Server 2016](SQL-Server-2016.md)
+- [SQL Server 2014](SQL-Server-2014.md)
+- [SQL Server 2012](SQL-Server-2012.md)
+- [SQL Server 2008 R2](SQL-Server-2008-R2.md)
+- [SQL Server 2008](SQL-Server-2008.md)
diff --git a/Errors/PDB/SQL-Server-2008-R2.md b/Errors/PDB/SQL-Server-2008-R2.md
new file mode 100644
index 00000000..c3fce980
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2008-R2.md
@@ -0,0 +1,100 @@
+# SQL Server 2008 R2 SP3 Security update January 6, 2018 - 10.50.6560.0 - x64 (4057113)
+``` powershell
+# SQL Server 2008 R2 SP3 Security update January 6, 2018 - 10.50.6560.0 - x64 (4057113)
+$outputFolder = 'c:\sqlsyms\10.50.6560.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/b981ac9f18d144989cdc934947f492811/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1456 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9e7a839d91dd474a8631dfef6abca4501/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1456 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/cc4bfc0743fc46b392fa0fdb7c7826452/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1456 )
+```
+
+# SQL Server 2008 R2 SP3 Security update January 6, 2018 - 10.50.6560.0 - x86 (4057113)
+``` powershell
+# SQL Server 2008 R2 SP3 Security update January 6, 2018 - 10.50.6560.0 - x86 (4057113)
+$outputFolder = 'c:\sqlsyms\10.50.6560.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/ef09e694a6c54677a0e350aa61328a851/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1537 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a0dd581a069a4f46892922b421e679d41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1537 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/31933e3ce06745e1a57659e51088a0082/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6560.00 ((KJ_SP3_QFE-OD).171228-1537 )
+```
+
+# SQL Server 2008 R2 SP3 Hotfix KB 3146034 - 10.50.6542.0 - x64 (3146034)
+``` powershell
+# SQL Server 2008 R2 SP3 Hotfix KB 3146034 - 10.50.6542.0 - x64 (3146034)
+$outputFolder = 'c:\sqlsyms\10.50.6542.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/4f088282518843b79e0478994de908221/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1803 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ded28d8ceae641748aec32fb45cb2b451/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1803 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1efb80e5273747c397f6185ab6670c9d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1803 )
+```
+
+# SQL Server 2008 R2 SP3 Hotfix KB 3146034 - 10.50.6542.0 - x86 (3146034)
+``` powershell
+# SQL Server 2008 R2 SP3 Hotfix KB 3146034 - 10.50.6542.0 - x86 (3146034)
+$outputFolder = 'c:\sqlsyms\10.50.6542.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/989ad268055f459aa1fd4d1eea34c6ae1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1804 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/569d9d76538b4106a8c414bf7dcdbe511/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1804 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/33f28fb385a04fd5afdc44264428efcb2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6542.00 ((KJ_SP3_QFE-OD).160222-1804 )
+```
+
+# SQL Server 2008 R2 SP3 MS15-058: Security update QFE: July 14, 2015 - 10.50.6529.0 - x64 (3045314)
+``` powershell
+# SQL Server 2008 R2 SP3 MS15-058: Security update QFE: July 14, 2015 - 10.50.6529.0 - x64 (3045314)
+$outputFolder = 'c:\sqlsyms\10.50.6529.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/6fd8bc7e6da241f9acfef95aa7529e671/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1313 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/afa19b0c44e54bef8028f5aae687c1751/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1313 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/282885315f3e4925a0753fdd1e2eae612/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1313 )
+```
+
+# SQL Server 2008 R2 SP3 MS15-058: Security update QFE: July 14, 2015 - 10.50.6529.0 - x86 (3045314)
+``` powershell
+# SQL Server 2008 R2 SP3 MS15-058: Security update QFE: July 14, 2015 - 10.50.6529.0 - x86 (3045314)
+$outputFolder = 'c:\sqlsyms\10.50.6529.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/57832ff449b14214bfbb5b3976147d2c1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1314 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/bb45c06675b04636aeaa71423c08c0bd1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1314 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/37b52eaf08284c23bdfda05c7b5bd0f52/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6529.00 ((KJ_SP3_QFE-OD).150319-1314 )
+```
+
+# SQL Server 2008 R2 SP3 Hotfix KB3033860 - 10.50.6525.0 - x64 (3033860)
+``` powershell
+# SQL Server 2008 R2 SP3 Hotfix KB3033860 - 10.50.6525.0 - x64 (3033860)
+$outputFolder = 'c:\sqlsyms\10.50.6525.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/fd1e350610034849822cdb74a90e3f4a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1315 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8e5d923c1e744b2395d0faebb7b27aed1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1315 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/a80a08b5910a4b7c81bca4f7ea5737cb2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1315 )
+```
+
+# SQL Server 2008 R2 SP3 Hotfix KB3033860 - 10.50.6525.0 - x86 (3033860)
+``` powershell
+# SQL Server 2008 R2 SP3 Hotfix KB3033860 - 10.50.6525.0 - x86 (3033860)
+$outputFolder = 'c:\sqlsyms\10.50.6525.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/5705adbab9074c1a8aa3f8086b0b9e351/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1339 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/24b6b9fb3e3248459032337981a515701/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1339 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/41239188b6494cedb627d7bb0a7bd2a12/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6525.00 ((KJ_SP3_QFE-OD).150123-1339 )
+```
+
+# SQL Server 2008 R2 SP3 SP3 - 10.50.6000.34 - x64 (2979597)
+``` powershell
+# SQL Server 2008 R2 SP3 SP3 - 10.50.6000.34 - x64 (2979597)
+$outputFolder = 'c:\sqlsyms\10.50.6000.34\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/bf37a41b8a974a9a90ac6aaef464011a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1214 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/21cf8932b0184570858de406b79475031/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1214 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/293c90c8918b4aaaa39ea16237b39eff2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1214 )
+```
+
+# SQL Server 2008 R2 SP3 SP3 - 10.50.6000.34 - x86 (2979597)
+``` powershell
+# SQL Server 2008 R2 SP3 SP3 - 10.50.6000.34 - x86 (2979597)
+$outputFolder = 'c:\sqlsyms\10.50.6000.34\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/2a05437dc1204cff970a2275d6335ada1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1213 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/682d729f9e6e43f3a47a9c158e905e171/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1213 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5b7a3d00503e4924bd365f20b6ea87642/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2009.0100.6000.034 ((KJ_SP3).140819-1213 )
+```
+
diff --git a/Errors/PDB/SQL-Server-2008.md b/Errors/PDB/SQL-Server-2008.md
new file mode 100644
index 00000000..2a10815a
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2008.md
@@ -0,0 +1,120 @@
+# SQL Server 2008 SP4 Security update January 6, 2018 - 10.0.6556.0 - x64 (4057114)
+``` powershell
+# SQL Server 2008 SP4 Security update January 6, 2018 - 10.0.6556.0 - x64 (4057114)
+$outputFolder = 'c:\sqlsyms\10.0.6556.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/eaa1a756484a4f95bc6896b8529c11701/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2155ad0fe0a045e38b33e3f36bdb6a211/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/48e9083d8d21441fb77939286bcc001d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+```
+
+# SQL Server 2008 SP4 Security update January 6, 2018 - 10.0.6556.0 - x86 (4057114)
+``` powershell
+# SQL Server 2008 SP4 Security update January 6, 2018 - 10.0.6556.0 - x86 (4057114)
+$outputFolder = 'c:\sqlsyms\10.0.6556.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/1401bf04646b4e409d7b7a4fc0644fa81/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/dacb0afbc1334010a573e48736ba72ad1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bd167760b8344d3f90608a2c18cf40092/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6556.00 ((Katmai_SP4_QFE-OD).171228-1515 )
+```
+
+# SQL Server 2008 SP4 Hotfix KB3146034 - 10.0.6547.0 - x64 (3146034)
+``` powershell
+# SQL Server 2008 SP4 Hotfix KB3146034 - 10.0.6547.0 - x64 (3146034)
+$outputFolder = 'c:\sqlsyms\10.0.6547.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/e5191b6b180941edb5a20276f9a0384e1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1900 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8fc01c8d34354aa088a13f9c071ebb611/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1900 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3b1145daf61646efbfb3d93ef8948e612/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1900 )
+```
+
+# SQL Server 2008 SP4 Hotfix KB3146034 - 10.0.6547.0 - x86 (3146034)
+``` powershell
+# SQL Server 2008 SP4 Hotfix KB3146034 - 10.0.6547.0 - x86 (3146034)
+$outputFolder = 'c:\sqlsyms\10.0.6547.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/b37439c8c52c4952845b150ffd7732af1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1901 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d1c5577343cb4ed8bbc36832eb826afc1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1901 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5bd7009e0fcf4b74b69a23467963dfb42/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6547.00 ((Katmai_SP4_QFE-OD).160222-1901 )
+```
+
+# SQL Server 2008 SP4 QFE for MS15-058 - 10.0.6535.0 - x64 (3045308)
+``` powershell
+# SQL Server 2008 SP4 QFE for MS15-058 - 10.0.6535.0 - x64 (3045308)
+$outputFolder = 'c:\sqlsyms\10.0.6535.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/2e97b3df36eb4e7fb0ec16f0ba82bd031/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-1943 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9bea90cfba544af19a1cf11d034abc001/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-1943 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/b579d44345e44607a12a9d0d448b7ab42/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-1943 )
+```
+
+# SQL Server 2008 SP4 QFE for MS15-058 - 10.0.6535.0 - x86 (3045308)
+``` powershell
+# SQL Server 2008 SP4 QFE for MS15-058 - 10.0.6535.0 - x86 (3045308)
+$outputFolder = 'c:\sqlsyms\10.0.6535.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/33fe9f06c7b944668d174d77d64fd2051/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-2008 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/688c68ac33c5460894783989531e65431/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-2008 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/7b8f66e87c4c4afd995254a5b2e5083a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6535.00 ((Katmai_SP4_QFE-OD).150417-2008 )
+```
+
+# SQL Server 2008 SP4 Hotfix KB3034373 - 10.0.6526.0 - x64 (3034373)
+``` powershell
+# SQL Server 2008 SP4 Hotfix KB3034373 - 10.0.6526.0 - x64 (3034373)
+$outputFolder = 'c:\sqlsyms\10.0.6526.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/85dd188f10df47c0a6b57c70ead0b5c01/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1208 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7c4f51489d884394b902225c7f2b80891/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1208 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/422c51381bc04a7fa2b9bd7fe9b04ca32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1208 )
+```
+
+# SQL Server 2008 SP4 Hotfix KB3034373 - 10.0.6526.0 - x86 (3034373)
+``` powershell
+# SQL Server 2008 SP4 Hotfix KB3034373 - 10.0.6526.0 - x86 (3034373)
+$outputFolder = 'c:\sqlsyms\10.0.6526.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/913da3830d16455eadff72481f3179401/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1211 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/901456d096344ca5bd6a117025a412461/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1211 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3b31c12ff4134cc3afb773e8a830896b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6526.00 ((Katmai_SP4_QFE-OD).150123-1211 )
+```
+
+# SQL Server 2008 SP4 Security Update MS15-058 July 14, 2015 - 10.0.6241.0 - x64 (3045311)
+``` powershell
+# SQL Server 2008 SP4 Security Update MS15-058 July 14, 2015 - 10.0.6241.0 - x64 (3045311)
+$outputFolder = 'c:\sqlsyms\10.0.6241.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/f667598776444a32942ee049bcb442241/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1051 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/de19a5bdf857430d9c4a6650dd7667401/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1051 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8d79f55153d444be9a35cc7969cd4c702/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1051 )
+```
+
+# SQL Server 2008 SP4 Security Update MS15-058 July 14, 2015 - 10.0.6241.0 - x86 (3045311)
+``` powershell
+# SQL Server 2008 SP4 Security Update MS15-058 July 14, 2015 - 10.0.6241.0 - x86 (3045311)
+$outputFolder = 'c:\sqlsyms\10.0.6241.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7ad87780f3a54788a6fd32f946f1e4751/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1052 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/257c88a2ab974c1abcb621bd9f7854ad1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1052 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/20ee497f35de471ab067178d8fcfb3572/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6241.00 ((Katmai_SP4_GDR).150417-1052 )
+```
+
+# SQL Server 2008 SP4 SP4 - 10.0.6000.29 - x64 (2979597)
+``` powershell
+# SQL Server 2008 SP4 SP4 - 10.0.6000.29 - x64 (2979597)
+$outputFolder = 'c:\sqlsyms\10.0.6000.29\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/fc69079383a34f3b9338254f34b07e531/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140903-0405)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/116e643b4d7d48dd9c987a2570bf124b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140902-2248 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d7f4aeaf89544a098f18dbaa4405a1802/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140903-0405)
+```
+
+# SQL Server 2008 SP4 SP4 - 10.0.6000.29 - x86 (2979597)
+``` powershell
+# SQL Server 2008 SP4 SP4 - 10.0.6000.29 - x86 (2979597)
+$outputFolder = 'c:\sqlsyms\10.0.6000.29\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/220547919ebf4ea4a9dc6ad770f2a97b1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140902-2247 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8967aa50a6e147858de6bdf0ca51712b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140902-2247 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1c4ac2e980b444129c6512bc9c9377802/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2007.0100.6000.029 ((Katmai_SP4).140902-2247 )
+```
+
diff --git a/Errors/PDB/SQL-Server-2012.md b/Errors/PDB/SQL-Server-2012.md
new file mode 100644
index 00000000..15af7196
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2012.md
@@ -0,0 +1,1020 @@
+# SQL Server 2012 SP4 Security update - 11.0.7493.4 - x64 (4532098)
+``` powershell
+# SQL Server 2012 SP4 Security update - 11.0.7493.4 - x64 (4532098)
+$outputFolder = 'c:\sqlsyms\11.0.7493.4\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/480435d60ca54ce381ec0e8a0a0d76a02/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e6c9aa0810194fa6b574b7215b217af72/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7a4a97665c58401780368d29ee631ccd2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/43b4e82b3c66419e8b35da8d9257b3ff2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/295ba2e5d3194ca5b61b7b31d7c079c11/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ae89899ab121405083d262de6e8846961/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d20221dff4c941c087921649121052281/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b08ffbd94e4b4e17bb1e39045f524abb1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/da346c631b6e46e7b56825f235d89c561/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/50c405e5402b43e7a5ef91788f6ef43f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-1917 )
+```
+
+# SQL Server 2012 SP4 Security update - 11.0.7493.4 - x86 (4532098)
+``` powershell
+# SQL Server 2012 SP4 Security update - 11.0.7493.4 - x86 (4532098)
+$outputFolder = 'c:\sqlsyms\11.0.7493.4\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ba8f818630714eb7b381ec0649b061302/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/7e0415dd919840948ef712d61810daec2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/68d681fcf4c64f9b883f8512ccdfd05e2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/30dd863e703c4fa8b9cafd898a9495cf2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/de5513fd8b1c4fb6b91efe477704b14a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/96552da4ca10465c9c33b981bde24ccb1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1b99718314a84b3fa7f5d532b463f1701/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e5470f778c574450bcdfff21a91b739f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ade3c305ff2c46cd845c19b14deb5aff1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/339831825ec24abcb2fc18813066d2e82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7493.04 ((SQL11_SP4_QFE-OD).191224-2006 )
+```
+
+# SQL Server 2012 SP4 Hotfix 4091266 - 11.0.7469.6 - x64 (4091266)
+``` powershell
+# SQL Server 2012 SP4 Hotfix 4091266 - 11.0.7469.6 - x64 (4091266)
+$outputFolder = 'c:\sqlsyms\11.0.7469.6\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0f91402cd2414afc9a2e81c7af9af9f32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/514d1b21c758466fa5812d26da1b58de2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/398932bbfb424772b785fed83bae34442/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c7875e26c11e47b2809ce5aa66cbb7662/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/9b08807bc3514172b8d1a18707f257ca1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/57a1333981da48e5be28cd275e871d811/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2b1e43f05e0547cfb3217e369e0ed18d1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d244e857cc9e4109b38ae22f6fb04fe71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/94e0b5323ed6420ba2baef29da5dba1e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/64a2e4d6a3b64ea28cca819f9e247d7c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+```
+
+# SQL Server 2012 SP4 Hotfix 4091266 - 11.0.7469.6 - x86 (4091266)
+``` powershell
+# SQL Server 2012 SP4 Hotfix 4091266 - 11.0.7469.6 - x86 (4091266)
+$outputFolder = 'c:\sqlsyms\11.0.7469.6\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a95e440af92540b7a0216cca28c2e8b62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/db6f725509df4ae384ffdca7d0b9eae32/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ef46921b8c7b447a8c115beb669e311c2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/f0fe075e9ebd4c29af2de0a8e1b1158e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/d888cccc0fc440eeab4c46a2501cd7521/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/0715c52891824ecb88d15cb3786666211/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2f26128d326c4a6cbb38596802231c491/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/398336b2642b40a4bf1c2b5cc2a7b6bf1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/10d83224d37e4629908ef64a9724085b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/b423cb4eaac6424a9c4006d044788cc82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7469.06 ((SQL11_PCU_Main).180228-1732 )
+```
+
+# SQL Server 2012 SP4 Security update - 11.0.7462.6 - x64 (4057116)
+``` powershell
+# SQL Server 2012 SP4 Security update - 11.0.7462.6 - x64 (4057116)
+$outputFolder = 'c:\sqlsyms\11.0.7462.6\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/97bc282def8043728f8e03d389c56c852/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/91c7c41bb798485595f5be3f1b3125e92/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c31145b788cb4a25b9afbc0907f55d722/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/93e6f4ad739547b786cfddf1ead5f54f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/d33e11ce15dc404d815419cc6dcae2ec1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9bccf357c8564d61bebfd5cdaeddf9231/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a2f77318440043c2a75db65201a507911/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/169fdc950daa4b918c5f998625fe01861/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/73dab384b2554d8792c8540ff7a066cb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9f5d751b247a4d8884a6c9a5e582dffa2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2156 )
+```
+
+# SQL Server 2012 SP4 Security update - 11.0.7462.6 - x86 (4057116)
+``` powershell
+# SQL Server 2012 SP4 Security update - 11.0.7462.6 - x86 (4057116)
+$outputFolder = 'c:\sqlsyms\11.0.7462.6\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/31d8d73fc89d494481d3ea3bc23d664c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dc4b8738e9c040dca6bda5c19fa15d782/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9148265be6de4d2f9cbc17085dfd2d252/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3e0a1ca4d3c343bfbb273258041819952/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/cdf3c5fdc15b43f98eb1a8da3c73c7e31/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1ebe506aeb6b47b38cc5e514fff18f821/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/47e45abe752b453b833d5bed81c4ce231/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/837fc489e2924037a2c108fd7bf90ffa1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f6e02bcf4295487995a04701333076431/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ede3587ca5ea4080a4bf758895d0fdb82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7462.06 ((SQL11_PCU_Main).180105-2153 )
+```
+
+# SQL Server 2012 SP4 SP4 - 11.0.7001.0 - x64 (4018073)
+``` powershell
+# SQL Server 2012 SP4 SP4 - 11.0.7001.0 - x64 (4018073)
+$outputFolder = 'c:\sqlsyms\11.0.7001.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d037a5a441e9428386cb7b6ccda51df82/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/61a529bd489946bf98c89d9f471a16032/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0a1268b6e5ad41e6948f59c193c952d52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/ab769d65e88c454f9cf7bfb804bc3be12/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/cc41b4cad8244f08ab3662e2572863e61/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b55075b250fe4c2190f26dd98b740c091/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f360c904a13349cab685811cc7eb5f1b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/90455f51040c4fccb89a9664c3cba4191/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c87b18fbc7da4990a51487628770c54e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2d2b68a253924aeea6931cd5801d56b52/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1011 )
+```
+
+# SQL Server 2012 SP4 SP4 - 11.0.7001.0 - x86 (4018073)
+``` powershell
+# SQL Server 2012 SP4 SP4 - 11.0.7001.0 - x86 (4018073)
+$outputFolder = 'c:\sqlsyms\11.0.7001.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/1f36dddd3d7d43eb9626cc5adbaa603c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f82f4ae4a2e74ae59338143499fdfd7a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/11692631f68842a3b597ba39bef3c2432/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/ab9f6918064040508165482354a196de2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/52059b5d64564a1b935825899d6a09511/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7fbd676ecf644930ab812a23884186861/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/79bd0035ebe24240b8b71405d0e9fc3f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/82c1e0b607b547f4a81d2dfe719c4cba1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/039700e384e2462d9a74eeae3864859d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/fbc3c51cbd1149ecbd8fcfb23aeee3b62/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.7001.00 ((SQL11_PCU_Main).170815-1005 )
+```
+
+# SQL Server 2012 SP3 CU9 - 11.0.6598.0 - x64 (4016762)
+``` powershell
+# SQL Server 2012 SP3 CU9 - 11.0.6598.0 - x64 (4016762)
+$outputFolder = 'c:\sqlsyms\11.0.6598.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/109c9b322c6c41aaad2d6361ed344ad02/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e734e7142f47477eac0a02a531dffe772/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5c5a450a77764195a5f87d2aeffd8bd12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7e4bfbdc22c1487cb147642e9d46f8c02/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/bb02986cda794e5ca7cb081fc9bad8c21/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d3eeb1dd8e65453a91ac3ca57199fa231/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fd9f36440ccb405aa49a1d713b1f46431/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1e76ae5f488f4e249247bcc0a7c951c01/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c11a2afc0ae9480db528fc501f88f73a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d82c7ee189224510a7b11cbab2acc87a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1648 )
+```
+
+# SQL Server 2012 SP3 CU9 - 11.0.6598.0 - x86 (4016762)
+``` powershell
+# SQL Server 2012 SP3 CU9 - 11.0.6598.0 - x86 (4016762)
+$outputFolder = 'c:\sqlsyms\11.0.6598.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/708b17ec74154260be962ee64c2c9f7e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/45fca01235c64d0f91cf52c1b2c7b6682/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6e4b601d5f804d759f96a435d76a062b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b3795d33240a4a27a70c2221f1f5b91f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/f4140814836d4d5284231a6d242860381/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b3254f3a7f6f4d548b7a2587b420fb681/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d3ec35abc942485580a9d1673071e1b31/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/85152ea7467b4c35971b9799e7f030831/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/347f6b20b1a5478781c229edc12b2cf41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4b8824881bc7405588c795aa867da2472/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6598.00 ((SQL11_SP3_QFE-CU).170418-1707 )
+```
+
+# SQL Server 2012 SP3 CU7 - 11.0.6579.0 - x64 (3205051)
+``` powershell
+# SQL Server 2012 SP3 CU7 - 11.0.6579.0 - x64 (3205051)
+$outputFolder = 'c:\sqlsyms\11.0.6579.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/28783150f1ee4dbf92e0499225b7590c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b35286f6930c49498baee55c30e567e12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a4af12434c9a45f4af825680e48e5bc22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/2202396e27904e5db4fcd4d60aebdd772/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/32a77bfd1d1b4845883d79c8419052921/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/100c11aaf13440b680b44057155c2ef21/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/cb2b6dce02bd40c996cd811ce13ea91a1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5c5db77e2d364209a0f61fda02088cf21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/fa9e7bd3ef9343f5b5fcca1334992d431/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c5b83c833f6a4c7281841b945028f8782/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1109 )
+```
+
+# SQL Server 2012 SP3 CU7 - 11.0.6579.0 - x86 (3205051)
+``` powershell
+# SQL Server 2012 SP3 CU7 - 11.0.6579.0 - x86 (3205051)
+$outputFolder = 'c:\sqlsyms\11.0.6579.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8a904b0b2b754631a46c28eb44dd2efe2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/661d636bc116485dbf546433cff31f072/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a2bbab93772a4b8b8a4000861e06f5b12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c8e36c6acc1d4447a68859546378d0dd2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/33976bc0acee45e6a5e6d085068c93f31/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/18c8de6253374d52aad36a38b127f8661/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ae64e50371214599be4a3415deb52fbf1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ff1efd45c7b64eed9b641ac980799e6b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5d6dcb597aec4881b9ee9a7a6bf96ba71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/b2a6eff3ff774b2e82486d092883df462/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6579.00 ((SQL11_SP3_QFE-CU).161222-1119 )
+```
+
+# SQL Server 2012 SP3 CU6 - 11.0.6567.0 - x64 (3194992)
+``` powershell
+# SQL Server 2012 SP3 CU6 - 11.0.6567.0 - x64 (3194992)
+$outputFolder = 'c:\sqlsyms\11.0.6567.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/bb6184470be14d70a6171a0abf7ff4142/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/59c4ce23af154338a104308ac0cce6232/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/add423f0ae3d49d195ce1edd7942d3ed2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e618e626a6594d009564091cabd9bc262/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/ac3e5d1c334f413080dd816bf9d1467e1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/8b09e558e267408eaeaf87a3a2ee37e71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/4f2f41869ac54e899e7ff39319663a651/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5c78860cf3644c0d89d0699bf3773bf11/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/db583d5603bc474b8651922e71e401dc1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/307d6d9eed7c4d5a953f485db595d2de2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1832 )
+```
+
+# SQL Server 2012 SP3 CU6 - 11.0.6567.0 - x86 (3194992)
+``` powershell
+# SQL Server 2012 SP3 CU6 - 11.0.6567.0 - x86 (3194992)
+$outputFolder = 'c:\sqlsyms\11.0.6567.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/6830ed55a6d6494b80e8f5b71fd30d8d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/913bea3e2f604ac6b5f2fb46bca63fd22/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6bedeb07e9c449cdb0018a92727ced2e2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/faf3de3ef8714e8a89b7e385a57510412/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/c266fee436644990b265e7e9151c488f1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/55260b1f426c40c997183184a77c768e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/69f53ff9d9e14a0fbb07e0e80678e3181/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/4223e10e9d3546a795480e990cc148f31/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a813fa0504b6441e81a3be6f20c0bc541/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6bef5361c8b84cdfa2cdb9731708a2cb2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6567.00 ((SQL11_SP3_QFE-CU).161010-1959 )
+```
+
+# SQL Server 2012 SP3 CU5 - 11.0.6544.0 - x64 (3180915)
+``` powershell
+# SQL Server 2012 SP3 CU5 - 11.0.6544.0 - x64 (3180915)
+$outputFolder = 'c:\sqlsyms\11.0.6544.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/b3a2c45b9cd04194ad768faff2dd480e1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e8b5df585c394779a2ff88a39458ebfa1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/54542e47b335481cbedba3ad6aca9e9c1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/02526e38efd34a22892561485c3e93331/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/25eee25e365c452fafba7d762dcb5e211/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/75c6111e1cc1449bad2112e15cd3302c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d50d043ce4fe402e90a622a378ec8add1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7009006d3e944eaa82f52532647ce2651/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8e119547cbb34fddafba8c65733b36131/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3d8457edc2c348ee870e2df8e0ffb5591/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1346 )
+```
+
+# SQL Server 2012 SP3 CU5 - 11.0.6544.0 - x86 (3180915)
+``` powershell
+# SQL Server 2012 SP3 CU5 - 11.0.6544.0 - x86 (3180915)
+$outputFolder = 'c:\sqlsyms\11.0.6544.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/58621a8e7f424ceaaf82b6a8621ad5ae2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b5cfcf4e10fc47c9b1c57156d868ea882/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7bacebdbc3ef47338dcba37b2d5d42012/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c5bf5f4f707a4b86bf1d9ce281f7bc142/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/f662a0c9bba14a7aa62df4a06b8657271/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/73b2ad756d314c55814d8d03fc8b7b6c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c06729d83eb1457084c51e25542252781/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ee5eff6976704286b8be419395371aac1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3f5943d18bf84c9189322c1d5aca2a9a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/78d4fff0f00047728cb50cb4211c493d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6544.00 ((SQL11_SP3_QFE-CU).160829-1356 )
+```
+
+# SQL Server 2012 SP3 CU4 - 11.0.6540.0 - x64 (3165264)
+``` powershell
+# SQL Server 2012 SP3 CU4 - 11.0.6540.0 - x64 (3165264)
+$outputFolder = 'c:\sqlsyms\11.0.6540.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/05130a8e03694effbf4ee0a5d93d6f022/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d91b0bd2f080497d8898ca7dc13564e12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ee95fd17ecc14e49a85fcf6d693011042/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/6b39164c29804cc6b7609f81e04c8bb62/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/e81c72c3de764c97b5615f32b3d10b5f1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c363526150464be9a52a234e681f31ed1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b5b55e52e8e04520a7c81e3fd8c1aeeb1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/971700e9f5c24edb979e7aa0820b71981/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/13788a023dd542da9822e3eea228db7b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/031265bbe1a14ada8f4078c6705f7c4c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1731 )
+```
+
+# SQL Server 2012 SP3 CU4 - 11.0.6540.0 - x86 (3165264)
+``` powershell
+# SQL Server 2012 SP3 CU4 - 11.0.6540.0 - x86 (3165264)
+$outputFolder = 'c:\sqlsyms\11.0.6540.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/7abb3b2c641e462d99e832cfaa77b5022/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a3440669ec5541c8a7aafd6b6a7e5c152/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b031eefe7864472ab762aa98e16b11142/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/765547fd40cc4aef80ec1b3dd8f0a9292/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7651776a76644a30b6a8d7ecdd1d24d11/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1de5f51195b54e5eb12f2f56f6237a041/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2cc47be0bc3e4cf7b0c0aebac03b08a11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2f3cb78d00b54698824e73ac44b2f9bc1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/18bb1bb91f9a4ba78e00ea92bc40fe121/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/b14e40ff51364430b7bed58f8b44cef72/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6540.00 ((SQL11_SP3_QFE-CU).160623-1729 )
+```
+
+# SQL Server 2012 SP3 CU3 - 11.0.6537.0 - x64 (3152635)
+``` powershell
+# SQL Server 2012 SP3 CU3 - 11.0.6537.0 - x64 (3152635)
+$outputFolder = 'c:\sqlsyms\11.0.6537.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/784b2d2a11f4459784a98a777a61e39e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/41074d77469a4e0e9217c8e29cb4ed772/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a01672c248514057a59d13e89ce93b0f2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d5d1a87d5e764f29b202493cbcba3d082/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/cf422a9dbb8340a5b5000ab5dbd4f4e91/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/a803eeca499b45fbb53081e01c86e0571/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/7335b11661aa48f298d976a2448c6f6a1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b027f13eb4994ee99ecc152c282fbb581/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c99210c7d2ff447c98494bb5c241af8c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/dcdc7cc5bfba4aa38c320285a6cdcbaa2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+```
+
+# SQL Server 2012 SP3 CU3 - 11.0.6537.0 - x86 (3152635)
+``` powershell
+# SQL Server 2012 SP3 CU3 - 11.0.6537.0 - x86 (3152635)
+$outputFolder = 'c:\sqlsyms\11.0.6537.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/87293ca873904ed2b56237e34e3e1f1a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e43071f0910a4ea7bf86b1d5ccc3fd3a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c8f9372146b044febc8ccce8b3c2b1c12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/0270b86f2c75487194f651d075a34e5c2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/4341ceb14e534bb5924ea613956c20361/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/85fe76a3ab4547f1b1cfad36f43712371/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b62e092daed64119808aa2f71fdf41051/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/91e900c8fc1b4d7f81cbc2e79afbfadc1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d39bca94636a4cf0bbeffedf2073f5551/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6065f2fd7ce6477bb93ff9dd4b74897a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6537.00 ((SQL11_SP3_QFE-CU).160428-1744 )
+```
+
+# SQL Server 2012 SP3 CU2 - 11.0.6523.0 - x64 (3137746)
+``` powershell
+# SQL Server 2012 SP3 CU2 - 11.0.6523.0 - x64 (3137746)
+$outputFolder = 'c:\sqlsyms\11.0.6523.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/fcafe44179a349b4b1a42e17631445382/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/04ab05307b834b1e93aaa5957b68ce492/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/10d09d86092f400aac076647eeca36492/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/af7848b84c93447291909dd6fed24bfa2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/79347e6e63ee4aa7a267ddb157777b3c1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7a3302ffc3a643eab7a0eb0a777222d01/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d12619783d1247e29e210143f65ebd4f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/74204f690ddd470aa8ba6d534f4b07441/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0045a36c9f7e4dca997063b212dc62291/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/86c28146977b477e8bc99340ad0107ff2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2113 )
+```
+
+# SQL Server 2012 SP3 CU2 - 11.0.6523.0 - x86 (3137746)
+``` powershell
+# SQL Server 2012 SP3 CU2 - 11.0.6523.0 - x86 (3137746)
+$outputFolder = 'c:\sqlsyms\11.0.6523.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/68a1704d4c60484abdab611a4011ebd22/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2b713f51cb3a475c8a0ade5063d183c52/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a9139393e7d148949351243a6f2e60372/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/84966d1d5e904eeda26c06b58e1d8dbb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/de7fcca82fa446358962e3106fa609be1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/39a1b26dcdea427fb467b9aefff863f51/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c5f85db1be474d0dbf027a0374de6e9a1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/49835c6b775c4d9db7d3415b2b59ca741/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d74fca8456884c6a9b58acd70da167251/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e1d2fd01359645a69447f78c6a39beda2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6523.00 ((SQL11_SP3_QFE-CU).160302-2116 )
+```
+
+# SQL Server 2012 SP3 CU1 - 11.0.6518.0 - x64 (3123299)
+``` powershell
+# SQL Server 2012 SP3 CU1 - 11.0.6518.0 - x64 (3123299)
+$outputFolder = 'c:\sqlsyms\11.0.6518.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a311f07702a44e019573de6bc28d9a802/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/122248fa6f9643ffaa1d4b98a8b852892/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9d9fff96ee2d47fb8d4a1694bf0bc01a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/007a1b4b3ac941cab55a979ce199b3cd2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/8419c4bbf0b844879129f25d50eda11d1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ab53bf1c7c5b415489b8dad9527aaef71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f6d8f219eb804aeeb61e15c17855fa351/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d6e72bc2815a411e803c12d5a757e6c21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5f78f36cf3c64d4d8bbf5ae5b8506a5d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/466c40a06fe8457a88ac5b2ac31bb8012/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+```
+
+# SQL Server 2012 SP3 CU1 - 11.0.6518.0 - x86 (3123299)
+``` powershell
+# SQL Server 2012 SP3 CU1 - 11.0.6518.0 - x86 (3123299)
+$outputFolder = 'c:\sqlsyms\11.0.6518.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/85e2f9abea704a94a052cfe9a6dee0572/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1522388b2b31493585a6e2b4f2624aa12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2ada5d3381bf4c93aeb02541e200f17b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/70b02e6179e54640b5dcc09743e445ee2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/92fe1e276d4f424988cce512111d09151/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/a704e7ede8b04298b150daaa93ba4d8f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/9040b150117a4e44a073e50d38297c051/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2599461ed95c4636bf1b1b4467a5d1e21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9b6afd69a5674b42b6876b28a79d8c161/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/799ab84cc9fe4b8a9cff76c808c5669c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6518.00 ((SQL11_SP3_QFE-CU).160107-1429 )
+```
+
+# SQL Server 2012 SP3 SP3 - 11.0.6020.0 - x64 (3072779)
+``` powershell
+# SQL Server 2012 SP3 SP3 - 11.0.6020.0 - x64 (3072779)
+$outputFolder = 'c:\sqlsyms\11.0.6020.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8c2548391c41414994a23eb9e1ffbc5d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8bcf882af198453eae955b7af05df27a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3811dbbc84c44f0d979c674cd571926a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/eb85f8ee377f43f9afed8cd2e9c932192/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/a017c07601cf4596a671f7b35a4119bd1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b287171e30de46d48bc5e4f50d321d511/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/50aca007a677401f99a7ad15b4631f101/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/cebe10126c694f9089577dc49f71d20e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ae66568baac84d068167d6a4a1cd7b001/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d7c6e98402ea495fa3da17f1aecb29ba2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1526 )
+```
+
+# SQL Server 2012 SP3 SP3 - 11.0.6020.0 - x86 (3072779)
+``` powershell
+# SQL Server 2012 SP3 SP3 - 11.0.6020.0 - x86 (3072779)
+$outputFolder = 'c:\sqlsyms\11.0.6020.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9c88c47ad634432f947247b93a4c437a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/70e38bc1d979482ab3577c81191a07892/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a71c6013ff7e4b4188afe07b47e9d5112/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/fe998ea9010c43c090935a171585c9152/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/1066d39f48fb4eefbd1096712687a1811/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b4529742a01b4ee88d17228b861439c21/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/49a2aab10cb04420b666377d96ec5b731/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5894cb69e99141c1b730209ff772dcb81/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/21ae50d9944c4af2b2868123b95b46591/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/12ddb13831544b28b5f8a4c017d0efa92/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.6020.00 ((SQL11_PCU_Main).151020-1525 )
+```
+
+# SQL Server 2012 SP2 CU16 - 11.0.5678.0 - x64 (3205054)
+``` powershell
+# SQL Server 2012 SP2 CU16 - 11.0.5678.0 - x64 (3205054)
+$outputFolder = 'c:\sqlsyms\11.0.5678.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/db25800662db4aa5abc2fe3b1dfa40892/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c2962322b56545e18fdd1947d7a3f5552/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/26e55d51a2524f8f9c3eb14a9c0a5e7f2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3f7c15db3e80428d842dc6577dbe957b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/102484c88a7a454e94a5b6fd7baf00a11/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6ccba8f0e4194a70a33c5969a18ee7a41/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/5006d5458a6049588ec4c1e0043b13a61/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/c30cda3d5e9f47378676888347f958991/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8979dfe9d46a474a9c4ceba886d148071/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/a62693b04bed4018829db79c6e9014242/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1503 )
+```
+
+# SQL Server 2012 SP2 CU16 - 11.0.5678.0 - x86 (3205054)
+``` powershell
+# SQL Server 2012 SP2 CU16 - 11.0.5678.0 - x86 (3205054)
+$outputFolder = 'c:\sqlsyms\11.0.5678.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/c7c7b2fbe65140d48fbfb488363088822/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b4a31b7568c54b6db1e29cfd4a8c62a12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/05099346226d439f95d2dc50d23f84042/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b1228bc7d3284c2bb2716e659b542b5f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/e3c2403ccac246f7945b28cf1636d68b1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f9706bb17f8b42128c9a74895ba068091/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6aad5ebf336a4352be93b0cd1283f3901/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7ce1f1a9129c489e9358e13dbd8dd6d51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/08ec37d9396e469a97fa1884e4f3126b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/cf639729d8724367a1e99d7dce200cc82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5678.00 ((SQL11_SP2_QFE-CU).161216-1502 )
+```
+
+# SQL Server 2012 SP2 CU15 - 11.0.5676.0 - x64 (3205416)
+``` powershell
+# SQL Server 2012 SP2 CU15 - 11.0.5676.0 - x64 (3205416)
+$outputFolder = 'c:\sqlsyms\11.0.5676.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/dd1ba68516834e3eac8754e0c3f763a62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d4489a41a7864f41a583d818941820bb2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/96ba3b4dada540baae72f7ac5d372c562/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/58ff259b5717420199bdca05ad6475fa2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/243641435747432bb7cb32747fbb096e1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d972cc8d2f0c47ec8f219ea7d4152cca1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/5b9529c4d43b4f79ae09b990a453ef2e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1e8ddd5ae37c49c98e758b3fd246d4971/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/06783190c3eb47438d51e209b2b15b4a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/acab102088fb4de3aea8154c3d3073c22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+```
+
+# SQL Server 2012 SP2 CU15 - 11.0.5676.0 - x86 (3205416)
+``` powershell
+# SQL Server 2012 SP2 CU15 - 11.0.5676.0 - x86 (3205416)
+$outputFolder = 'c:\sqlsyms\11.0.5676.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/c5dce76c002d40228af8b7f4334c43382/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f9ca6e1c1c5a48509ef17541f440110d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a65a7dbefb534977862075b5592cbea22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/2d77fbddcd3c461788cbbc876813d8672/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/3350d6c06cda4237b5522c0ce229d61e1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/08912861adab4657b566a71ce625b5df1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/591d683835904ed6936cc8c15d53bb271/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/beb991341db6464ba3e901e618e4141c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/01e137606c424aaea4b7ad65fda59f4a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/afaeeb6537af486eba72087380814b682/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5676.00 ((SQL11_SP2_QFE-CU).161010-1819 )
+```
+
+# SQL Server 2012 SP2 CU14 - 11.0.5657.0 - x64 (3180914)
+``` powershell
+# SQL Server 2012 SP2 CU14 - 11.0.5657.0 - x64 (3180914)
+$outputFolder = 'c:\sqlsyms\11.0.5657.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/25d44c4a218a45e69440f64a6c2f39022/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4ef82375cf4e42a8be639daea082a4c52/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ca2d467f8210454ea0b0f9e80185f22a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d89b853ec00c4ef4a2ff7439eebe952c2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/87f21dcc1cd04ac3b90b4a6ae1e428201/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e5104d3be08248348393b672b2a9bb0a1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ac3edf92e6ec4a12bb6533025087bf2f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/821c2909862a40bdb68783eb23929cc31/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d1c8cae724694f6bb2962cdc83f4329e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/a4a3c0bd71ad4f85bb1e8b97eb7b18862/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1743 )
+```
+
+# SQL Server 2012 SP2 CU14 - 11.0.5657.0 - x86 (3180914)
+``` powershell
+# SQL Server 2012 SP2 CU14 - 11.0.5657.0 - x86 (3180914)
+$outputFolder = 'c:\sqlsyms\11.0.5657.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ce78955c784c48afa622c25baf31d45b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/213855c2ec884f97896f2de644073c0e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6aba2304025c482694789dfa59caa53d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/140309b667144067ab36b0dbd619c6592/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/c3de962144364bee8d4f28ef8a9244911/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1ceb4d2de2a44439a8704ea70320c65e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/73272f461ea94ba19eab4f80bad006f01/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/4326574b01f6436a833579f838b757e21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8b38568a4a9f49c8b3aec36e8b5a71f41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bf3d3e6661b04901834ca05fc19a44352/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5657.00 ((SQL11_SP2_QFE-CU).160825-1749 )
+```
+
+# SQL Server 2012 SP2 CU13 - 11.0.5655.0 - x64 (3165266)
+``` powershell
+# SQL Server 2012 SP2 CU13 - 11.0.5655.0 - x64 (3165266)
+$outputFolder = 'c:\sqlsyms\11.0.5655.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a433571fbd0c41f5ac4d33283de127002/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/960013cc86c5408f9808f8378e2da08a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/171ddb83c0474edf824711de922e0a172/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4747e8ca27484a8199bb39b14f211c302/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/69db5fdaa93f408890a49893da554dbb1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/2e74440521ea4986a0b4eb23a776f3d01/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8b3231d270724bdc997c398a178833891/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a730d9127fc74a9b9ab5c74334bebfe71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9c5081d580624480aab3f8894169a9581/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/519331463ede472796ee00b4dbd637042/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1418 )
+```
+
+# SQL Server 2012 SP2 CU13 - 11.0.5655.0 - x86 (3165266)
+``` powershell
+# SQL Server 2012 SP2 CU13 - 11.0.5655.0 - x86 (3165266)
+$outputFolder = 'c:\sqlsyms\11.0.5655.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a40567d01f594052a94636f0cd569c541/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/6f33217e9aa04118a60392866667a4dd1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a082374fd27f42d8aeb194286aa2f6051/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/8877e5f396644ace9da54a50dd1d9e621/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/28f1fa69afaf411b9febdf147cd1175a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3d0122e1b8b845c3a2e8aba23fe95f521/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/4ba3538fcd764fc18b0042deb7c698781/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d06fc9adef414529902a650201013aa21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0f5b5abc62a743e3bbd0782075ef62371/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/67f36d2c92b743e5aff3dc36ae129fc41/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5655.00 ((SQL11_SP2_QFE-CU).160705-1417 )
+```
+
+# SQL Server 2012 SP2 CU12 - 11.0.5649.0 - x64 (3152637)
+``` powershell
+# SQL Server 2012 SP2 CU12 - 11.0.5649.0 - x64 (3152637)
+$outputFolder = 'c:\sqlsyms\11.0.5649.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/3b91a33f51794e3caa45dae0a72e3c9e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8981f04bfc6b49b1bc366fdbba7ac9bc2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ff6907a9682d4b2c8211be8b09ca3cb42/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b7f62a1ca0024f608c64c70ab25f49e32/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/20533819d052436b9f11657e00a25c3e1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/4aad9e292bf548faae06ff8ae1d430b31/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/0fa56d3b36df453db62d14d6baf90bb41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/454c0beb41f946d99f097261b0177c841/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c8f5be043d814c118f23709c4a1ad1181/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/44f0c5b99ab343e28ab8711fa9bb2a272/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-0952 )
+```
+
+# SQL Server 2012 SP2 CU12 - 11.0.5649.0 - x86 (3152637)
+``` powershell
+# SQL Server 2012 SP2 CU12 - 11.0.5649.0 - x86 (3152637)
+$outputFolder = 'c:\sqlsyms\11.0.5649.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0a81fe91a80c4005abc46c2263f09c4c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e3044265c315485f8812fef56a7e73b72/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/334ddc7a968042d58e7f62f9a365c1852/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/76854cf991784573858a7b60962f93232/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/d1dde76542a9427ebecb65f2468b91ce1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/29d1f01b3bb84da780dddb33213dbcf31/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/9de157e8d6f54db7b98a7502b94577641/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e8541edbbfc0410d9b82e6ab78fc2ef01/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f31f3117b463455688edb8b0f8163a401/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e3318525756c429c81667cb043abadba2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5649.00 ((SQL11_SP2_QFE-CU).160424-1132 )
+```
+
+# SQL Server 2012 SP2 CU11 - 11.0.5646.0 - x64 (3137745)
+``` powershell
+# SQL Server 2012 SP2 CU11 - 11.0.5646.0 - x64 (3137745)
+$outputFolder = 'c:\sqlsyms\11.0.5646.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/cd7a679d23ce4318ae4f9bd42021a1712/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/90d74a8ca29a4f30944f5fdfaba0c83c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/14a616d4d2fe48f293fdb04ccae512bd2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/a91a9c36928443ab880573c213736a0b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/40dd4867eec84f79bc2e0b16c8a88f121/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3a605746326140df8f9996070fe654b11/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c9718e636e7c4b4e8c0353b5a5a9deae1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/eb2f543f9569417e9664bdae69d903ac1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f16396e855d64f2b9db73963a1f31e591/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/856db9275d4b49bea827cbdd41a9afe42/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1734 )
+```
+
+# SQL Server 2012 SP2 CU11 - 11.0.5646.0 - x86 (3137745)
+``` powershell
+# SQL Server 2012 SP2 CU11 - 11.0.5646.0 - x86 (3137745)
+$outputFolder = 'c:\sqlsyms\11.0.5646.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/1747440228a742e590232cb45d5be3b72/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/95cfc60f73d24ed7b89a90a7ebbbaeef2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0c6c10d175a6457d8d7c6ffad717539d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/05b4ccc988ff4e5ebcc0702b5833f2db2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/5452aac59a3148ee8502ba3f365c7f501/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/018af0e7122742feb5a7332e671946771/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8b0d9d31c92147c2a83d337704ddd4641/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/56d0425cc87a4fcbb066efb003b8f9fc1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ee1d6435917a4f9885af79e50b4d37321/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6fa82e53cc59482a9fa430a99730f6222/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5646.00 ((SQL11_SP2_QFE-CU).160226-1735 )
+```
+
+# SQL Server 2012 SP2 CU10 - 11.0.5644.2 - x64 (3120313)
+``` powershell
+# SQL Server 2012 SP2 CU10 - 11.0.5644.2 - x64 (3120313)
+$outputFolder = 'c:\sqlsyms\11.0.5644.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d8768549cb5345399f4fe1cea88794752/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2cfeaeeffde843899bf0085a1fe229fc2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9255e9211d0f41edb184f4c128e449062/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/1f9672b7fd7e4c04a13e4623c116288c2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/65527fa7b46a4ba48843ac5ca4f6c91a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/aec37a7322154ab0a71d747d9318ad461/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/3c1d262015bf4d089e3dd11a7735ce971/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/998be39e1a234448be37b1e13fe86d7e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9ce5afd549134784a502ca2c56a422ea1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e3a30191df804683ace74857f09b14582/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2337 )
+```
+
+# SQL Server 2012 SP2 CU10 - 11.0.5644.2 - x86 (3120313)
+``` powershell
+# SQL Server 2012 SP2 CU10 - 11.0.5644.2 - x86 (3120313)
+$outputFolder = 'c:\sqlsyms\11.0.5644.2\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/7826cfcc93bd484fabcb123fb93136b72/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/030e8e2257cc4ca6a2e48a05ce239b412/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/94778bf7d845444cb650904ec51e75442/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7b2d129b95e040ebbb027cef893c7f332/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/d7c79fd24b5e456dad7ec1547ddc46821/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ba92ea50bd6a44f28a8fd9559f5394d81/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c0db7d5acd534245b1bd9c10c425335f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d7942859fe6849968b3b484e5c17a03b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7f570e9d52e1447ab60d9b9fa8354e761/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/dbd7a81924634685b9cffd5c3cb533a62/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5644.02 ((SQL11_SP2_QFE-CU).160107-2309 )
+```
+
+# SQL Server 2012 SP2 CU9 - 11.0.5641.0 - x64 (3098512)
+``` powershell
+# SQL Server 2012 SP2 CU9 - 11.0.5641.0 - x64 (3098512)
+$outputFolder = 'c:\sqlsyms\11.0.5641.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a521723dc40a41ae90e5d3f588fa0ccf2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8321e31318604a69993a346d0006baa02/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9d8402c7dd2a49b0b16ed33e0a4beb322/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/00ebaef66b3e4232a2e59b4cb1b0f0de2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/b1d05b1c84dd431a8f41ffb65bb657021/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/22bc0604c1d54b8c8d826ee74708cc431/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6aa02f4cf90e431e96f5ed3610a5c8561/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/19b09216c02f4f79954d0bc4dd86deb31/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/63f7a395d7c345f182d3cb93ce1065f61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/33a6114f99434ff0b67b421c6ba8bf872/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1624 )
+```
+
+# SQL Server 2012 SP2 CU9 - 11.0.5641.0 - x86 (3098512)
+``` powershell
+# SQL Server 2012 SP2 CU9 - 11.0.5641.0 - x86 (3098512)
+$outputFolder = 'c:\sqlsyms\11.0.5641.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/90707b52346e4f2081ee4b57991465f02/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dadbef50fe024e9fa2ab29facd23364e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/848be43da62b4654962c76ac0817f4d52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d3ead1ac747046bf95ce1fb24d26414b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/6d4960a06b9e449189135a1f8cfe486d1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/fc7864bea8ae4450af4c100b03106cbc1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ab2ca7efbd604bc2a98d334a6e8e85051/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1aaa39cfe07242669c6f1fd909a40e141/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8987ad9ed15145209fc028ceae4267041/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9166856bbe0d4752b138d4aef51afa7f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5641.00 ((SQL11_SP2_QFE-CU).151020-1623 )
+```
+
+# SQL Server 2012 SP2 CU8 - 11.0.5634.1 - x64 (3082561)
+``` powershell
+# SQL Server 2012 SP2 CU8 - 11.0.5634.1 - x64 (3082561)
+$outputFolder = 'c:\sqlsyms\11.0.5634.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/61ef98bf0c944d27bdcdcbe956a71f532/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e32a770828b441ea83876963f8915c642/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/82d71733ddda4f63b0c0c587bea3e5b52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3d8d115280c343e79ffda9d5e13914ca2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/df6d6664b8b343b5822f404ca1c71e961/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/afdf9896ee5f454da131c41d186ed2381/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d24c170faa1d4b66a72dee2f6905bda41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/6be320158f64485fb39edc54657cc9691/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/4a7653322ccd491db5e3319fe11fd1e11/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ff7b48cc7d4845009f4219b2ea8ed7af2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1845 )
+```
+
+# SQL Server 2012 SP2 CU8 - 11.0.5634.1 - x86 (3082561)
+``` powershell
+# SQL Server 2012 SP2 CU8 - 11.0.5634.1 - x86 (3082561)
+$outputFolder = 'c:\sqlsyms\11.0.5634.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/eaf68945f2a744b49102874620c553442/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/62d91f546d724970a297824753b247a62/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0cee6b19c69a45a79cc9ba2576d203802/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3595e13882f2488dad33b5b42b6de7022/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/5d1ce58362004146a03b9a203f716bcc1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7ec8ca29f61b41c99ebc77df6f3641dc1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/32f2862ef89d49b29bfa4935a8cb5da81/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/64249ed7e3394edfa60825e07327feab1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/41763cddfdd84bdeae6a9d2f7f93a23a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/839d3b40fcbb4c94b8bc3b9e91581f962/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5634.01 ((SQL11_SP2_QFE-CU).150903-1831 )
+```
+
+# SQL Server 2012 SP2 CU7 - 11.0.5623.0 - x64 (3072100)
+``` powershell
+# SQL Server 2012 SP2 CU7 - 11.0.5623.0 - x64 (3072100)
+$outputFolder = 'c:\sqlsyms\11.0.5623.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ae8dca071dd14b8588f8c1e8355750c42/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e7c57dfa80174541b048819804823b642/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ff4277e6a21e48fb9e04cc4e2c80ba0f2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/88abae217a834ae18b5754feecda13012/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7d92e63eb71a45809ce78c14ffaf09d81/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b5fb3509642c4690a5c45749035333051/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8072e1fb97424fdc98269196785f7fbe1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/fca6c8e72e5e42ecb99207f194bef9191/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/31bac03868374db896288d1c1a856bf91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/48708388ca2f4e6c9c9a286887fc6bda2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1152 )
+```
+
+# SQL Server 2012 SP2 CU7 - 11.0.5623.0 - x86 (3072100)
+``` powershell
+# SQL Server 2012 SP2 CU7 - 11.0.5623.0 - x86 (3072100)
+$outputFolder = 'c:\sqlsyms\11.0.5623.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/473e800d9eeb4e4097e87652ab5aaa052/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/19adc0aa5e1249238e244b5ba9e0f2492/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/58fc60e3bbd5448bb466dc8f753683b62/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/49c28e17e982469bb1092e77901d168b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/cc65b11dda20409a8879339d384bd9491/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1a58faf830674e18a3aeb22c4f0818211/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/49fd8984505e468590ca91dda1dc99d41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/3ba93675da7c476c979fd0b7cecbbdab1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3d6472408ed74f41bb58f30027ba9e421/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ee5bb2170a2347978420200f22fb85592/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5623.00 ((SQL11_SP2_QFE-CU).150709-1156 )
+```
+
+# SQL Server 2012 SP2 CU6 - 11.0.5592.0 - x64 (3052468)
+``` powershell
+# SQL Server 2012 SP2 CU6 - 11.0.5592.0 - x64 (3052468)
+$outputFolder = 'c:\sqlsyms\11.0.5592.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a9e46f8055ae4cb5aa344fb96e73ca7e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/cf97aed844944105b2d8ed9a933dc1522/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d3bcd6c8911b48a491bcf8e18841ba3b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/92ea2d549256436c83154e05e769d26f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/0ddbf5e6c62c483eab519b300e41aa131/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/253e36a0d02942189ed1205210163d8a1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ae5a1adb5bf94b38b3ebb35270da6bb71/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/11acb1f2f7cf4498a3a8594014e4a5491/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7ff78655e62d42d3862242c04816400d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c68000bb1ce7439ca573a54d17c73ab52/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1509 )
+```
+
+# SQL Server 2012 SP2 CU6 - 11.0.5592.0 - x86 (3052468)
+``` powershell
+# SQL Server 2012 SP2 CU6 - 11.0.5592.0 - x86 (3052468)
+$outputFolder = 'c:\sqlsyms\11.0.5592.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/90b88bf18b2b483bbb76862b88cce4032/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ade94be306d74bdea416c6d4efd8d8482/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/fc93e429e1454118b9be2831ac8539602/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/27a72ca6e4604cc8bdd4b0362751e82e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7aa7de50535a41d4b28f1437981bb3401/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/73f81b7d9c4240de8339ad241becf98f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/4b749317568942e383ee42a9eb2cf1f41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/3c59c6073f7d48df91b7abd1828db0c51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7f22862851fc4bdca72990a66edb51991/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e36a38ed3a6146fbaf6216025b206d802/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5592.00 ((SQL11_SP2_QFE-CU).150417-1510 )
+```
+
+# SQL Server 2012 SP2 CU5 - 11.0.5582.0 - x64 (3037255)
+``` powershell
+# SQL Server 2012 SP2 CU5 - 11.0.5582.0 - x64 (3037255)
+$outputFolder = 'c:\sqlsyms\11.0.5582.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8badafbcc6334b139d67b83c61e1ad632/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c736d839f6f54501a94ccd22ec14d3552/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d4ed0467cc1944e19589685f554793482/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4534514aec274addb9f4bacefda3799e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/556a0a2b1d5d4757aac0242c56f798551/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3cceaa5cf5684811a0386e715a6aecca1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b1bc02bf82844ba886d35e2f3dadd38d1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f4538786cdca4eb789acedeb918639401/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8358c5a13ecf438890f62b23d94a30f51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ae3adbf271aa479fb5256880e575fed22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1800 )
+```
+
+# SQL Server 2012 SP2 CU5 - 11.0.5582.0 - x86 (3037255)
+``` powershell
+# SQL Server 2012 SP2 CU5 - 11.0.5582.0 - x86 (3037255)
+$outputFolder = 'c:\sqlsyms\11.0.5582.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/3a47214af54f43b494f0ea53b36d1a3a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8b32b6454ee742eb98916880e92325292/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9bd5f790568b408fa093d1ac93ad5dd92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9920c94073c94b9b9334cfac3233e2e92/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7bd272d1179e4fbd92b9c5863a0133791/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/0ddb45c56e3b41d99a71af72332e241f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c3ba2ddbe9f143788b703f9d2d8c7a2c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ecce36e5bb034047998a2bd085889c841/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/cb343262158a462f92b23f68d2ae7ac21/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5a1bf2e1647e44f0815b022eb13ff9232/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5582.00 ((SQL11_SP2_QFE-CU).150227-1813 )
+```
+
+# SQL Server 2012 SP2 CU4 - 11.0.5569.0 - x64 (3007556)
+``` powershell
+# SQL Server 2012 SP2 CU4 - 11.0.5569.0 - x64 (3007556)
+$outputFolder = 'c:\sqlsyms\11.0.5569.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/362c792ee0e84038a70ca60e9d73670d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a0ca918076554d4c933045287d5096ed2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/77c344284abe4a1886d727f7552e9c952/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/a30fa17e3c414464afa91913f0833c122/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/7fc8dd4807bb420fbc055771e64b95321/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/183074ed7e6a4bb9a13c48ad2a00c3411/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/3984af0d59e8459d83be5e3215e151b91/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/79ebc6f96e85467090f16ccd6efa5f6a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/384a0f1d64a749e9bac4a0b0d8d203d91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/99ebd3f774364d7cbd4679ed474886ae2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1123 )
+```
+
+# SQL Server 2012 SP2 CU4 - 11.0.5569.0 - x86 (3007556)
+``` powershell
+# SQL Server 2012 SP2 CU4 - 11.0.5569.0 - x86 (3007556)
+$outputFolder = 'c:\sqlsyms\11.0.5569.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0f05bf5e3ab14d13a90d394d10fb3ee32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0467323f452c4c889bb8c03eb9245e482/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/8d05289fe8d740979420b0fd5a7676e92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/29ae6e87132b46b4b78e7965ea7ada3c2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/9fa2ee33584d4ed78ec81f31b1b600481/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/405d1f73f6c94e88a32c71a53ecd1e8e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/0db139cf45c246d3913b3c3605ec2f651/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/50b739fdeaea477589c02536e8cab5cf1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ccb38bba52fa4568bc85256b6039d9531/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3f9b337dac5a40559d2c1d53f33b4dd62/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5569.00 ((SQL11_SP2_QFE-CU).150109-1126 )
+```
+
+# SQL Server 2012 SP2 CU3 - 11.0.5556.0 - x64 (3002049)
+``` powershell
+# SQL Server 2012 SP2 CU3 - 11.0.5556.0 - x64 (3002049)
+$outputFolder = 'c:\sqlsyms\11.0.5556.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d1a00b8b404a457b9d366e7db692612c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/caa84e0b43e5423dabd502cf51fcef3a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/692932d983ac4d0cb8b4c5280484f7ee2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/eb5aa259e39446cd8eaf7e75c20ccad22/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/0d5bd32496a14c1db5d2bf51ac4c1e0a1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c25697387b484c97b22b5f447bb3ac1f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ad1f8b1a883a4339a75f54c8dc57fdb31/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/22376adfcdfb44f5af969adecba164911/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/931ba4aa04ce4f42a0fc4d464091f18a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ce308e7fe1024a62ac491cf474cec82c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1640 )
+```
+
+# SQL Server 2012 SP2 CU3 - 11.0.5556.0 - x86 (3002049)
+``` powershell
+# SQL Server 2012 SP2 CU3 - 11.0.5556.0 - x86 (3002049)
+$outputFolder = 'c:\sqlsyms\11.0.5556.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/5918d9b7678849c49bbb3f5da4e3a0282/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/00b4161353c44d8e8a3f856e666b09162/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/dd70fb9e4d4e45d2b05ab68c33586bdf2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8a3d1406ad4b4d81a996bc92df9ebcfe2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/de2557533cb84d6c8fb44bd721bc09ca1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/99a6e3ff0cb84daa83b2c919ac45bf3f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d8c9218704ce483ea64cb50ae2bc08f11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5ffe4b28d77f4236b72eba2f4c36c4901/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/87cd133d6de14b83a0fc51fd0c6731731/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/750a2c62762c42a5bd832b7334954b822/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5556.00 ((SQL11_SP2_QFE-CU).141031-1639 )
+```
+
+# SQL Server 2012 SP2 CU2 - 11.0.5548.0 - x64 (2983175)
+``` powershell
+# SQL Server 2012 SP2 CU2 - 11.0.5548.0 - x64 (2983175)
+$outputFolder = 'c:\sqlsyms\11.0.5548.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/99205f110e104780bcd50b13b8b2ef602/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/cae73ab941a5449bb04d577b8ac0ee2e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5b7ccbfa58b54a8d80d9fe76d86eead32/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/35f5dd06512c4dae8339badc7b32f1a02/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/07c56b468964456996e7fffcc033ba561/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f8b575102d5e4845bb73a4713fbd27281/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f48d51269e1a44bf917c04e47fd3497f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/380cdbf633f94b8e9f7a15c4a0f05e9c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a10eeceb16684e2f97e7bf5b048556ae1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c7371ee128084547b8cc44cf23daf6322/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1703 )
+```
+
+# SQL Server 2012 SP2 CU2 - 11.0.5548.0 - x86 (2983175)
+``` powershell
+# SQL Server 2012 SP2 CU2 - 11.0.5548.0 - x86 (2983175)
+$outputFolder = 'c:\sqlsyms\11.0.5548.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/3e037ba29b3e4225ae410c337d79bd8c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b45cf018f0f54771a95e71eaaa28a88e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a76a804ec0ba4b76ba58f380668012da2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/54c5a385aba743edb15be3e62a137c832/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/3165959521524b8eaed9ece7ff68571d1/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1a52c14e68fa418188349ed428ed814a1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c4534dd553ae4e1da2fdbb4df151981c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a6e6cca281ff419291ad2ce6e8c536881/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/01e271d3affe4c5197beedb3189b46541/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9d08d936dc3f4b259d73b86191fcd0d32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5548.00 ((SQL11_SP2_QFE-CU).140906-1802 )
+```
+
+# SQL Server 2012 SP2 CU1 - 11.0.5532.0 - x64 (2976982)
+``` powershell
+# SQL Server 2012 SP2 CU1 - 11.0.5532.0 - x64 (2976982)
+$outputFolder = 'c:\sqlsyms\11.0.5532.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/cbf110ac14d94a8cb27f29d7def6e2832/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/5ef74be1c5314aa38320fa24e34e51c72/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ffb5d83cafba46faa6816b8e6491c4b12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/5078a04f329147b7978220b06bb870192/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/d7952e1acc294862bda55dd7e4d3e8211/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/5a95d568bac94867b8e0840fd91e50c51/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6639b1da0ba34639811d5bec9aff80371/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a8c29cbda99e41fe8e103298736b6a4b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/da3edb6b439f4e028581352ace87953f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/427d00997e8b428bbb7a3e5258acb0f72/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1446 )
+```
+
+# SQL Server 2012 SP2 CU1 - 11.0.5532.0 - x86 (2976982)
+``` powershell
+# SQL Server 2012 SP2 CU1 - 11.0.5532.0 - x86 (2976982)
+$outputFolder = 'c:\sqlsyms\11.0.5532.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/35685e9861dd48aaae7cc5b16bd328122/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/894411a3cde84440964e7d15e54a42f22/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b8e311cfe83844efbfa836d7edd0a4c92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4dde9c04fa9e48aa8dd99f6253ddde802/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/bc9c1b0188ad4c4694e3fc2b2cc003f51/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f4e0f97f61954596a55a9127841a84ad1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/27494563474d41a9b38acc20ae538cae1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/3c69ca79dab742ffa5fd044f1300bbe11/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/4081f3e32c334fb8b9164529b87ccf601/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4b32834628184e4fa4f9848fa401a19c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5532.00 ((SQL11_SP2_QFE-CU).140714-1449 )
+```
+
+# SQL Server 2012 SP2 SP2 - 11.0.5058.0 - x64 (2958429)
+``` powershell
+# SQL Server 2012 SP2 SP2 - 11.0.5058.0 - x64 (2958429)
+$outputFolder = 'c:\sqlsyms\11.0.5058.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ee0459385983426284e7a607384e4bf62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/fbafcdb326434a41a09d549fbf6e8f062/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/587ed8597e30437a8028d1ee025c75d12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d7a22e5762bd4c94bc2c0af2fc63a1372/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/017fa06efaf641d4bba760a5258be5741/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/32a91c0b60204fffa1374cf3492a88a01/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/0452878b0b30401f814aab0fa4ac74661/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/389e963e00f040079eff7b8e2ccc3c911/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0ef93093d4ea4f9d90a21e79f602919d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/12ec0b5836ca41429c5bce95a1653eaf2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1820 )
+```
+
+# SQL Server 2012 SP2 SP2 - 11.0.5058.0 - x86 (2958429)
+``` powershell
+# SQL Server 2012 SP2 SP2 - 11.0.5058.0 - x86 (2958429)
+$outputFolder = 'c:\sqlsyms\11.0.5058.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9a6c2fb9f9ad46b7b240b1cd3f7782312/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1c6fd82d91f84e9b9ebca1a6a1bfb80d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c7c06ee472184be7a264d1450b683ef52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/004a42376b6e41af95b7280c65021add2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\SqlAccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlAccess.pdb/15004f64c18c48e1b5b1573836f2a7931/SqlAccess.pdb' -OutFile "$outputFolder\SqlAccess.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d5064f709c6f4124a7423ab6fa0ed7f71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/74570a2c5655462e859fe5f6358603ef1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/895b174b37d9498496b464b2600219a31/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/366970ac611340e4bd1e6c244d2b30e71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/a4ca976e0f84491eafe73b3195b39c6a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2011.0110.5058.00 ((SQL11_PCU_Main).140514-1623 )
+```
+
diff --git a/Errors/PDB/SQL-Server-2014.md b/Errors/PDB/SQL-Server-2014.md
new file mode 100644
index 00000000..38963da2
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2014.md
@@ -0,0 +1,1650 @@
+# SQL Server 2014 SP3 Security update - 12.0.6372.1 - x64 (KB4535288)
+``` powershell
+# SQL Server 2014 SP3 Security update - 12.0.6372.1 - x64 (KB4535288)
+$outputFolder = 'c:\sqlsyms\12.0.6372.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/58e64a3a589647efb0962ea0b54a4f802/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4c0bcc7afda04998a4cb7e0bfdb736792/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7c6006d90ec04c61ba245a22fba604112/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/34148353e4e245728f03ab52442361702/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/fdbeff4d6d474008a694cd69c38acff72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/e82e0bf323c44a328f1dff97e18643ea2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ee0aebf1bb054cf7bf1a02b9967cb1941/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/37659ab76c0746f59df1383528780d091/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d5b8297e63ee412bacb678e15142c6e61/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e541cd3097054c21bae4d0f56206a5d81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9d8cfaa7d57c414eb326f3d248345f4a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+```
+
+# SQL Server 2014 SP3 Security update - 12.0.6372.1 - x86 (KB4535288)
+``` powershell
+# SQL Server 2014 SP3 Security update - 12.0.6372.1 - x86 (KB4535288)
+$outputFolder = 'c:\sqlsyms\12.0.6372.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/293ea0a0c7424b899d5bcd915253d8671/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/bcf38756effd4ebc810aa6e146c6a1bf1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a59d30393cae4117a8fb17f54e1b6fff1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/19fe1f9fe3c84751a09fb1916c1d1ab31/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/ed1d0cdedb2247d9b67ba5b7df4247ad2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f3647da71cd84c81a409357f4e3823b01/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1e54810c09ff4222889ac0220924754a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/eb15a63849fd464484aadb058f6cceee1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6372.01 ((SQL14_SP3_QFE-OD).191212-1438)
+```
+
+# SQL Server 2014 SP3 CU4 - 12.0.6329.1 - x64 (KB4500181)
+``` powershell
+# SQL Server 2014 SP3 CU4 - 12.0.6329.1 - x64 (KB4500181)
+$outputFolder = 'c:\sqlsyms\12.0.6329.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d8fb694123ba4677bee6145b83b62cff2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1b6e19734d074c9890f13ff5ea5d4c912/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f95e3773af054cc7a3bf4b6085f6c1d12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/84e90c67c25b46419a58c11eea0a9a4a2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1e7f7c728a8f41049e73e89d313fcf852/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/4f2b4eda1143444bb7963507c9f9ea232/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/530c0de276fb40ceab73fb117b038d601/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d6708b4bf5854985b6fa2ef0d44508a11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/6c202059075a4fab90806f205caa070a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/63a4742459624df0938bf06b948771ad1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0f334a75cf294a6aa2be0b46f824b4902/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+```
+
+# SQL Server 2014 SP3 CU4 - 12.0.6329.1 - x86 (KB4500181)
+``` powershell
+# SQL Server 2014 SP3 CU4 - 12.0.6329.1 - x86 (KB4500181)
+$outputFolder = 'c:\sqlsyms\12.0.6329.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/890448d8cb7045b393f8d1e2414899681/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/54428dd07fed4d92a44af191b64b93931/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1b72f20b65754e08a1b1afa6a1afa4111/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/648fb8d142124a79ba2427d7afa6e0b11/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/494b3def7c474707a36f396d3376c4862/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1fffeae543a04025affdb7835ea77d271/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f5d000569d74429ea2403fa65f7e782d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/37ed1fbf4c114534bc53be649d38a4931/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6329.01 ((SQL14_SP3_QFE-CU).190720-2034)
+```
+
+# SQL Server 2014 SP3 CU3 - 12.0.6259.0 - x64 (KB4491539)
+``` powershell
+# SQL Server 2014 SP3 CU3 - 12.0.6259.0 - x64 (KB4491539)
+$outputFolder = 'c:\sqlsyms\12.0.6259.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/509f1673a650493eaf6e0609be36b3492/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/9d0ed648ab3943148311d78972c4dcdf2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/93f36eaccaf74bb49b33f830aa6225302/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/59a4d543c0184372b51935541c2900152/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1836c6d5c554455c8b477142ba1c27552/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/aefccb0a87ff43b6aa36c438baf6d1c42/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/aa90299262cb4b118067c2df8703c9b91/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/806e98d642074181978524533a9ef6531/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/afbaa234358740998f706fd39e87a54e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/dd07d2aa7b2d4a528ffb3446711c9f321/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9a8dc77df3fc40f0a74375aa505eccfa2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+```
+
+# SQL Server 2014 SP3 CU3 - 12.0.6259.0 - x86 (KB4491539)
+``` powershell
+# SQL Server 2014 SP3 CU3 - 12.0.6259.0 - x86 (KB4491539)
+$outputFolder = 'c:\sqlsyms\12.0.6259.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/eb6a68e1d0a24f9a9334f21aa15921651/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e70ca276fe4043b19187d6d11dc8b8191/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6961ef7185e6403b8f45a2f02afaf21d1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/43b2f5430e244bfdbebf88fe85f6c9dc1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/549544362bc8490f9d315b111ae5b6952/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ce9855d8b6af4d45a14edb618dae86be1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1c741bb277204482be593a294bc80dc71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/48abe955b32c43c2a8d38d8a0b706de51/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6259.00 ((SQL14_SP3_QFE-CU).190401-2139)
+```
+
+# SQL Server 2014 SP3 CU2 - 12.0.6214.1 - x64 (KB4482960)
+``` powershell
+# SQL Server 2014 SP3 CU2 - 12.0.6214.1 - x64 (KB4482960)
+$outputFolder = 'c:\sqlsyms\12.0.6214.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/10e693af20a345548cab5cc0d5bb9e5f2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/277e791468d84fd3ac5134bfcb8b00292/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/8c63860792c440eb997bbc9c3da54eb72/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/860593c8a27d4f609d1f139775b445862/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/0170e47e2ba046e0b2726300345d4dfc2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/cf29ef995a5545ed8f8af7ddd180b7802/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/4d1d0ae8debb488496086b48820cae8c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a3671b7f7c5a457186f91951c24bae1c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d7cc5f9c29834c34ac417d1237cc631c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/187d57d685f644f79c937544e990dbb81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5c5e9a47919c4d6884d480d8f1c2d0762/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+```
+
+# SQL Server 2014 SP3 CU2 - 12.0.6214.1 - x86 (KB4482960)
+``` powershell
+# SQL Server 2014 SP3 CU2 - 12.0.6214.1 - x86 (KB4482960)
+$outputFolder = 'c:\sqlsyms\12.0.6214.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/754b0cc922a745aa8602712ee9aa1db11/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/3841b412fc874fb99ca1f27156227aba1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ed56dba006f74b929b23cac11986d8d51/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/ec53723220f14149a92352787915d8cf1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/a13d5a4be3234606bcfdbdfbf99ca8352/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f3338a3416cc4c9faa6f0f2dd08873761/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b113633a9a3f4819b125a6fd84cc4b2f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/40e7e956e6b64b3390093d7fed7996711/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6214.01 ((SQL14_SP3_QFE-CU).190202-0024)
+```
+
+# SQL Server 2014 SP3 CU1 - 12.0.6205.1 - x64 (KB4470220)
+``` powershell
+# SQL Server 2014 SP3 CU1 - 12.0.6205.1 - x64 (KB4470220)
+$outputFolder = 'c:\sqlsyms\12.0.6205.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d81e66c5bbd8441aa42d3120f29de3942/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/531883113186498cba06afb246bd12172/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/093905727fd6498fac8991daed83fcde2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/810559511add437f9da77ec6c227c3fb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/fff69d6bafab400fbafb9bfdd6fb52ff2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5cac176280bf4ab2af8033571dac19112/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b6bdfa6c96e74ef5ae6996e1733a432f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8be7ae0b97464e56889d44760e5991771/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/452b00505e9c4459877311b2a5296de01/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/aa1470bb4a5c4687aef9d015e876685d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2fe2b89405d644e8859b099da8827acb2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+```
+
+# SQL Server 2014 SP3 CU1 - 12.0.6205.1 - x86 (KB4470220)
+``` powershell
+# SQL Server 2014 SP3 CU1 - 12.0.6205.1 - x86 (KB4470220)
+$outputFolder = 'c:\sqlsyms\12.0.6205.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/cbcf0fbe53e54dacab354777d0dd5c2f1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4f2576c7baa640d894aa0bf5d12fcf5f1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ac9f63e413d74fc5b1685806550265ae1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/fd21a26df72c47e29b96652c800806001/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/75e51827bfcf435bae782ec8b7a4e3d82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1a1dabe18df94874ba8bf28b429a8e6e1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6cc29ac330c64c0a97461b778a1ba63d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/64addefbdce84bdd97198a54d80939e71/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6205.01 ((SQL14_SP3_QFE-CU).181130-0218)
+```
+
+# SQL Server 2014 SP3 SP3 - 12.0.6024.0 - x64 (KB4022619)
+``` powershell
+# SQL Server 2014 SP3 SP3 - 12.0.6024.0 - x64 (KB4022619)
+$outputFolder = 'c:\sqlsyms\12.0.6024.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/41b862dddc464a7e8fb435d80ef36d452/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8bc7a14bc8374bd0a9bcba71d608c2ef2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d1b5af4c4bcb41aebdae55654c0abc172/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/a84fba616c964fdb849bb61878d368312/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cd96b0931624429a8b38b968078fad6c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5e9cea18178c471b98c01da45892cc142/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c9163d437f9e473a91690d6a7fae07531/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f97a0a9518ea47d3ad13d09e1c6cbc8e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1915e0ba4f764b49806e8bcefe9bdd351/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9b9535d5b46442d7a75246220c243ad91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/15291da2ad56424ab3f1a7e97809ec602/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+```
+
+# SQL Server 2014 SP3 SP3 - 12.0.6024.0 - x86 (KB4022619)
+``` powershell
+# SQL Server 2014 SP3 SP3 - 12.0.6024.0 - x86 (KB4022619)
+$outputFolder = 'c:\sqlsyms\12.0.6024.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/63c453d94e884e719f71611dd86e41f71/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/6b94239f60d04638ac56d2d915054ae11/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d2bd8b4899db4627a49dcf39f275681a1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/e42c910a8207417ebfe95904c7aca3c01/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/65c5722bca2e4384b8abdd8e7f57d00b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f0ce2870ba1c4a759c01ee8c9366fa5d1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b1c25cca32ca4d6391442eb096c2e71b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/370cc1865d654a908a912aca9de0156d1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.6024.00 ((SQL14_PCU_Main).180907-0056)
+```
+
+# SQL Server 2014 SP2 CU18 - 12.0.5687.1 - x64 (KB4500180)
+``` powershell
+# SQL Server 2014 SP2 CU18 - 12.0.5687.1 - x64 (KB4500180)
+$outputFolder = 'c:\sqlsyms\12.0.5687.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/bc12ecf9b0b543b196f0b7ed938283452/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1b75aed94f92493dbba724cdc1f7c36d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ff83ee2c46a7487686e8e1130887ced12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b1044002158745fa8df8cce82b12f6ae2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e8b1bf15c88342efbc82d32362ea64702/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/e6d23fe6f42648418edc7c96c8619fd12/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/abbcda6f1fb844bab401cd2ec5ec95471/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f1f51c0ee2bb40dea8c9cc16917f52981/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1d23807267c543f9a3fe48d69ef3d13e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/801dddbf3b0849d9b0b1d15219dadad81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e53cbbfca1d94580b8d4a7d511bb56e22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+```
+
+# SQL Server 2014 SP2 CU18 - 12.0.5687.1 - x86 (KB4500180)
+``` powershell
+# SQL Server 2014 SP2 CU18 - 12.0.5687.1 - x86 (KB4500180)
+$outputFolder = 'c:\sqlsyms\12.0.5687.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/1f1ebd01257f4aa5861d1ba6bd5eef381/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b7fdb65668ae43cbac516c04d7fcddfb1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f4b5dc917b9a4b578e83a63c98914bdb1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/dd4f41c29b454453b9dadd60a3cf988e1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/a8c3b381308647ab9a765b681f92e08f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/77dc64a2c02c41c3921c183c76ca39d51/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/afe089cbd86947c6b1fe8796ded5a75e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/897c55ca4ff84510ae2c1ac75f918e771/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5687.01 ((SQL14_SP2_QFE-CU).190720-2034)
+```
+
+# SQL Server 2014 SP2 CU17 - 12.0.5632.1 - x64 (KB4491540)
+``` powershell
+# SQL Server 2014 SP2 CU17 - 12.0.5632.1 - x64 (KB4491540)
+$outputFolder = 'c:\sqlsyms\12.0.5632.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/7cec2abd211d44449ec0f3e94e1a78202/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/093aba20ce644768bb722dfc74216a672/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/429635c72df34811b063bfbdc4fd30d72/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3e544ec2f85b4e27b3d23c8316125f262/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f5e5a5a404464f80b46f6449a2dfa6a02/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b5f8b9ae3a364402ac1b8bab1c3732512/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/cf46f2edea064dae95f6a457ba1ae1ef1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8a0ea19b90b84d7799d99bb3b751399d1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/fa60812c91384eaf82bd97d59a2ff4e61/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/310541c655dc434c9d834d1a6a196cfd1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2de8f5bc87ff4a8390a0f454faf810282/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+```
+
+# SQL Server 2014 SP2 CU17 - 12.0.5632.1 - x86 (KB4491540)
+``` powershell
+# SQL Server 2014 SP2 CU17 - 12.0.5632.1 - x86 (KB4491540)
+$outputFolder = 'c:\sqlsyms\12.0.5632.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/748fe7f884084be6bd64e1e9448d0ffe1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/545779f8eb8547d4abdd811f28c7f3f61/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/36d26ada3cf949229fda088acadabd831/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/478b047f2f8044b7b33aeded194ebfee1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/0466eb809cbe4386b49402ad9004229d2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/066f353a8df34b8c8bc789d6e27c5a321/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6ac1205c109b49ae850f9ded968ffecb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/eed60d89729949198006ca2352abf51f1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5632.01 ((SQL14_SP2_QFE-CU).190401-2109)
+```
+
+# SQL Server 2014 SP2 CU16 - 12.0.5626.1 - x64 (KB4482967)
+``` powershell
+# SQL Server 2014 SP2 CU16 - 12.0.5626.1 - x64 (KB4482967)
+$outputFolder = 'c:\sqlsyms\12.0.5626.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/7090b9b360f644bda3ac44b853a206d82/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/6c9e5d6da1dd488d89eb0ae333b1c5eb2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ea9b053430534dfc8f0dce4807a484682/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/98a4a92f370d402188b910a7435ba3f72/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/d535d53ebf624bb29f5557ffbf0a5efc2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/54f79487ed6d40ea86bbcc67ff82b6e82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ea86d5e8467f4f289207290bec941f7a1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1d2496b66ea54f22851739b58fcd1d371/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/70eb1fd8363e42419e5e5ee4a23d7af31/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0ceb3b389ce54506b0198b62af03a7a81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/44cde1fe0341418cabb84df6877e072f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+```
+
+# SQL Server 2014 SP2 CU16 - 12.0.5626.1 - x86 (KB4482967)
+``` powershell
+# SQL Server 2014 SP2 CU16 - 12.0.5626.1 - x86 (KB4482967)
+$outputFolder = 'c:\sqlsyms\12.0.5626.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/b78052c424754a1e9f08450f02cf15261/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/273a5267830d42a7aa3f38a52bc210cb1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5256c66a20844f00876972b91c7606d01/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/f755234510654e88b5a922721ea8f8071/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/dcbe2aea271c41d08af7f2ee653651c72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/2c2f8b012a19446b80ca5f21ca91700c1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e59649446ebc4f07a5aa23edc78b5af11/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d0b73290904841ca94d10ec14ad456ab1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5626.01 ((SQL14_SP2_QFE-CU).190208-0024)
+```
+
+# SQL Server 2014 SP2 CU15 - 12.0.5605.1 - x64 (KB4469137)
+``` powershell
+# SQL Server 2014 SP2 CU15 - 12.0.5605.1 - x64 (KB4469137)
+$outputFolder = 'c:\sqlsyms\12.0.5605.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/117240f0c59848f8afe7069fadb2be382/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/876f1d479cf34b3cbcef15246fff9b2b2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3204a130bbab4542902c7a8a2d83fa512/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9d04ea3232d645d88d2918112a86965b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/271f77960efa4e848183c41e045ed28b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/05287b373d6848818fed57489cb723882/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/37871400f6ba41cb87953ea6dee1679b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a150b67635d9449e9cb1e54dc04057091/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/729bc522263b44bf9d76c05c86d60aa71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0efb398f50ac46a095e3db1d063494b71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8c1f27f1610d4083b6cfc03d8464e9702/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+```
+
+# SQL Server 2014 SP2 CU15 - 12.0.5605.1 - x86 (KB4469137)
+``` powershell
+# SQL Server 2014 SP2 CU15 - 12.0.5605.1 - x86 (KB4469137)
+$outputFolder = 'c:\sqlsyms\12.0.5605.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/b80aa4d26d824d51a1b2821b3bd3c9df1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a167e470217c45f8990402872693763c1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/8624d05eb3114058bb16484bb5b270f41/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/fbacb139597e46f5b710e865a66de6401/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/5de0309257254890b30958eddac74d692/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/7c97495f85d545ec97e160ec95e08a051/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8a2c37cc83db491095f9452840c70a5e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0ed0bd2de748480cae7a6fb8c9c720eb1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5605.01 ((SQL14_SP2_QFE-CU).181130-0132)
+```
+
+# SQL Server 2014 SP2 CU14 - 12.0.5600.1 - x64 (KB4459860)
+``` powershell
+# SQL Server 2014 SP2 CU14 - 12.0.5600.1 - x64 (KB4459860)
+$outputFolder = 'c:\sqlsyms\12.0.5600.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/2438e40ce685447eac9e01d2173b146d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/93a50030edc54ab2805e7324b5c5867e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b0b41b9743964fe2874cf90433ef7c9a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/5e129aa1bde341ef9cd43882060582eb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/250c631ea1f249fdabc901273e8f7c452/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/e6f37c85e8004bfc8c74ccba69e5ce642/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/73600a8dc74945059ccf2d99ca8a377b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c357ccbf716b47e29b48073179a6a2a81/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f925b1c9695d4dd28360ceb7e2976a581/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8ae4a300b56c475095d8ec409dbc31221/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1b685a50036e4af388ff9f1fab8a795f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+```
+
+# SQL Server 2014 SP2 CU14 - 12.0.5600.1 - x86 (KB4459860)
+``` powershell
+# SQL Server 2014 SP2 CU14 - 12.0.5600.1 - x86 (KB4459860)
+$outputFolder = 'c:\sqlsyms\12.0.5600.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/c6575e4e12d94e4ba30764806d0577061/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/61c9b48dd8af443780ba4556f948816d1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/88e4973a9b8548909a0ab9b691936ed31/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/62a1d5b32fc9473daeb6a9e21b76bf101/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/ceebbde0de164cf985ce91e4e28d96862/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5963ceed5f9b435d853a2c11315f11521/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5cc038bc384c45578d1485fb3370f81c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/441a2d9da7a2414f999efcac59e8da3d1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5600.01 ((SQL14_SP2_QFE-CU).180927-2111)
+```
+
+# SQL Server 2014 SP2 CU13 - 12.0.5590.1 - x64 (KB4456287)
+``` powershell
+# SQL Server 2014 SP2 CU13 - 12.0.5590.1 - x64 (KB4456287)
+$outputFolder = 'c:\sqlsyms\12.0.5590.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/f22828ad8cd143b98690f3d5308405a72/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/38f99ac2329e4ee1a630dd928660bf8c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/26704fbb534d46b49653205984de35ca2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b9bbf018d2d24d3088f300f40de6569f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7760942524a04b989b969dc6db24bba12/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/4d0c5e89bcee412c9100b8d694214c402/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/17b16aabe9944c3a83febffb78cbd6811/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c9216aed6e7645d39c0825a977c5a6f31/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/9d9eadc9e8f8484eb83eb557687c059f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3d021aaa04a8473abb5965725950c4ab1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/407d631b6e454fd0b0c041c33c345fd22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+```
+
+# SQL Server 2014 SP2 CU13 - 12.0.5590.1 - x86 (KB4456287)
+``` powershell
+# SQL Server 2014 SP2 CU13 - 12.0.5590.1 - x86 (KB4456287)
+$outputFolder = 'c:\sqlsyms\12.0.5590.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/33e588094276460b8038432fad3db2661/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/629dce7389c24992a825468bd5191eae1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5b493a35686047f1ba71f7ce7b3a90751/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/f7a83574ae43421b8468a07d493246ef1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f158728bc8404e1aa43fe38433e4e6f82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1f241b8adf9748bca47525e287ae42451/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/bc679557623041a48db99e6ab3c27f691/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f6f9e9d0148d47d7ad3abfc75f8bb31b1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5590.01 ((SQL14_SP2_QFE-CU).180801-0048)
+```
+
+# SQL Server 2014 SP2 CU12 - 12.0.5589.7 - x64 (KB4130489)
+``` powershell
+# SQL Server 2014 SP2 CU12 - 12.0.5589.7 - x64 (KB4130489)
+$outputFolder = 'c:\sqlsyms\12.0.5589.7\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9cf25aee69fe4936b6d5dbc0a2864e562/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/56bc64bb80724cbe9e73e3baf373ac5e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bfd1994080f84d2b832dc738a74466d62/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c4b5a5ca9822464386d76070dc0b16c52/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/69363948fbbe4b37a1942a397c28ac9a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/7d1172991d104f70985859b8f5c1ca122/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/2ba38b2b5dc84ea29ba150f79b52c9b31/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f7947a9995b34b38bffe3a086f9ed3341/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d97a5e01a698460d9641e2017990f2ba1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/bf808d6229bd4fe69562c672359a61b81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5abf57238fc44199bc9b494c7391a94a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+```
+
+# SQL Server 2014 SP2 CU12 - 12.0.5589.7 - x86 (KB4130489)
+``` powershell
+# SQL Server 2014 SP2 CU12 - 12.0.5589.7 - x86 (KB4130489)
+$outputFolder = 'c:\sqlsyms\12.0.5589.7\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a17e4ed617604e1f93cb7043a7b061af1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f1d22c428ec941b3ab6cf84b970013d21/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3df9de6f254540598dd9da4852d8797d1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/8a70299c32844f529bf7af758400e1a61/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c8053d2959e24d70bc2820ef3d183c4a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a2e7016632da4d79a7ffc36ec94956c21/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0dd5355ca33a4d49a27401e7bed2e4241/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bb53084f1e9c448db50e72d30284890d1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5589.07 ((SQL14_SP2_QFE-CU).180609-1032)
+```
+
+# SQL Server 2014 SP2 CU11 - 12.0.5579.0 - x64 (KB4077063)
+``` powershell
+# SQL Server 2014 SP2 CU11 - 12.0.5579.0 - x64 (KB4077063)
+$outputFolder = 'c:\sqlsyms\12.0.5579.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0aea57c255f340f6b268422d36c9b5462/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8f7a73cfc7ae40b69cedfb56c478c8a42/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6f3a59d764d34c1c9506c1cbb799ce282/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/5e23ac5ca0a441cea1043b92cc7db19d2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/90418b6bc2dd41469db8c20a64cd6b082/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/4355cf52f7e54f1abd0d6545276e31242/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6eacc2b3b2b54beba5e1e47ccf312c691/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/43312b84f24d461582340aa0d3706e0f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f88d3bc891cf4a66a06ab20db6a2f4111/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1a52dc5348f24ec98371fc0191786fa31/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f9963e6eb1a34e019caf757ff0bdf2762/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+```
+
+# SQL Server 2014 SP2 CU11 - 12.0.5579.0 - x86 (KB4077063)
+``` powershell
+# SQL Server 2014 SP2 CU11 - 12.0.5579.0 - x86 (KB4077063)
+$outputFolder = 'c:\sqlsyms\12.0.5579.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/2a38a3f0f77b410b8ab96959ec07f43f1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ad85bbc382b94bc4b6d28c94bea7b09f1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2c9ba43db9924d71be6599ef2ddfb6fa1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/8b5208e65b4d420884a73dca82dfb5c61/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/fd4511ab526d47b7ae5f18fa15dcb2ee2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ace3687338a64ee99b1ddad95e5b5a611/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ae50d44983714260bc12cb539b3ae6481/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6524dc9692f44f0a954ebc34fba6566e1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5579.00 ((SQL14_SP2_QFE-CU).180221-1111)
+```
+
+# SQL Server 2014 SP2 CU10 - 12.0.5571.0 - x64 (KB4052725)
+``` powershell
+# SQL Server 2014 SP2 CU10 - 12.0.5571.0 - x64 (KB4052725)
+$outputFolder = 'c:\sqlsyms\12.0.5571.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/1f838ce4d2314a679d95f581ba5cfca72/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/eb5287194386470bb6ed9be5cfa913032/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/187bfc99dd6142ed912b9b0a16971ba92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4a0d1ac8b530440581e5ee96278215352/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/2a491b79a3534daaba1fdaee3ef28d412/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/88fe4b4b23a64afd804553959161691a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1dd40e165b074b0784aa0fa5c7225ce11/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/42629264c38e41829734aca5e2c32b851/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/9ff125ff36e841719e28e54c59d81e8a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/195069bf1697410789e1c320dcff547e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4ea18a049c454b7fab49fa3af4d747652/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+```
+
+# SQL Server 2014 SP2 CU10 - 12.0.5571.0 - x86 (KB4052725)
+``` powershell
+# SQL Server 2014 SP2 CU10 - 12.0.5571.0 - x86 (KB4052725)
+$outputFolder = 'c:\sqlsyms\12.0.5571.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/7388785bb378492eae7399ead30a62bd1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/9ae111fc7f1b45789253f4d3910106c81/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/655a1096c0074f94b7ffbbf9b233ea5a1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/cf11f8ed6ff04de7b823930a8451701b1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/273a0ff6e91b4a8da2bee5298a5dd61f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/fa6377a396864fb2918b6a596d4beb711/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/464ae4327e2f4dc3b17e8f3a771ff18c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/7cb655624af24ccc85f4389fb0c901241/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5571.00 ((SQL14_SP2_QFE-CU).180110-1458)
+```
+
+# SQL Server 2014 SP2 CU9 - 12.0.5563.0 - x64 (KB4055557)
+``` powershell
+# SQL Server 2014 SP2 CU9 - 12.0.5563.0 - x64 (KB4055557)
+$outputFolder = 'c:\sqlsyms\12.0.5563.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/b9c9830b1bcc4092bd2bb4f51bf81cf52/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/7032c53e91934abdbf6bad9fac99066c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bbfb8d689ab34f56b443d662c7b9336e2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/1143c59b5fee4cb9a86a2fa2978285562/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/a5dfb5b4a0c041539cd6312fd52d8b2c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/d0d7ae41d21e404694ddef3b58b555102/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/03fd2ef25c1540819c499476aa797f5a1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ffa799b2d4d2478186b883fe71edf34e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a56ee479b9024d47bde320de941d1ad81/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0917fd5803fe42e9b8fcdbac6b428edb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d194fc1a9c914898b99235221a474a522/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+```
+
+# SQL Server 2014 SP2 CU9 - 12.0.5563.0 - x86 (KB4055557)
+``` powershell
+# SQL Server 2014 SP2 CU9 - 12.0.5563.0 - x86 (KB4055557)
+$outputFolder = 'c:\sqlsyms\12.0.5563.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/06301e600c9448b49312e41cc75d51401/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/3d79c403b6534fa3a1850e0f8e5cb71b1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/13d944a09a6b4075bec01634bb3c5ba61/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/57fbfa47c5064fdfbaa81ce84725cfd91/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/fe70fe593a974da09e5170edc376b0622/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/cbecde3234164a3c871dd3a45649152b1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/06186cc6b2eb40dab968c484987b96c41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3fa4e4db8ea34b0a86118d3b83e1a1721/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5563.00 ((SQL14_SP2_QFE-CU).171207-0002)
+```
+
+# SQL Server 2014 SP2 CU8 - 12.0.5557.0 - x64 (KB4037356)
+``` powershell
+# SQL Server 2014 SP2 CU8 - 12.0.5557.0 - x64 (KB4037356)
+$outputFolder = 'c:\sqlsyms\12.0.5557.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/e7152ca5bb5641cabadc516f5de4448e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/976df45212de41739cfb5401b5395f032/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d5029367d82748b08723648d64ea340c2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/1095950d7a964eca94e27667eec14dd22/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/0b310c825aca4a7abef7b902667467e62/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/96dbb1b774234407bbfaa17da1e2538a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6aa802a2e06f497b86358cfbef459f031/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2d7ae65a5e784e3e9c8e06a697a64b6b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f23892f30b094ded9d4b88ca2aab338b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e7dfaaf012694a6db4eae23dc3b319e31/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0d6e87edec3d4a5bb55a6f86db91f3112/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+```
+
+# SQL Server 2014 SP2 CU8 - 12.0.5557.0 - x86 (KB4037356)
+``` powershell
+# SQL Server 2014 SP2 CU8 - 12.0.5557.0 - x86 (KB4037356)
+$outputFolder = 'c:\sqlsyms\12.0.5557.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/1c82caaaa09e48eba283def9ee6a77041/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/981f442e7b8a4ff4b016c222f897ec1e1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bd794c7b740e447cbff73748980a6f1b1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/383f44422d364daab6360a0dbd8961481/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7e546ae16c48449396f2a6c30dc8d35b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/4daecbd75bfd4b6f9af8fce5ec09aa9d1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9fa6bf9d3fb54bb98a5f0124bfb3e14e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d04a9e96c37045e98b5c7b3b8b81096d1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5557.00 ((SQL14_SP2_QFE-CU).171003-1352)
+```
+
+# SQL Server 2014 SP2 CU5 - 12.0.5546.0 - x64 (KB4013098)
+``` powershell
+# SQL Server 2014 SP2 CU5 - 12.0.5546.0 - x64 (KB4013098)
+$outputFolder = 'c:\sqlsyms\12.0.5546.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/50741efef953472e93c9c4449641b7b12/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/eba63b27a035483d8aa8328a1ae4e5032/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5cf0fb086a51465eae2224c47d6929a12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e261efec946a49d8bd60ad2d2d0d4f412/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4e1c24324a24404db55cab70549295842/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b4f8f667b3d14a67b4d6603088e655742/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/236b638fded8473898894137c7838d5c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/7ac0b64a624249d9b29869bc24c71bb91/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/dab7c2d4a1d74357a7e35e4823c201241/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6ba2f0c99aac4edfb5f1154130a28aff1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d4afa77c6b874237bef59d288e3502712/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+```
+
+# SQL Server 2014 SP2 CU5 - 12.0.5546.0 - x86 (KB4013098)
+``` powershell
+# SQL Server 2014 SP2 CU5 - 12.0.5546.0 - x86 (KB4013098)
+$outputFolder = 'c:\sqlsyms\12.0.5546.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/7cc57429e0ec49fbbb5a7e0bde3ed2f51/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0b763c98cd3540cc87fbae90dd4d293e1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/faebc6f4ea6f4aa9b51dd320a99cdf6a1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/df2f1f29a7ee42209c3d1083a539cdab1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4e548597f1554021a96df9a125e321c12/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1c1ab29dd2684425be41d15d14f82eda1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/52aa8ba5e2dc47a3b05441a95feaaad41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/41250386e94f4b749067a8bdf653fad31/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5546.00 ((SQL14_SP2_QFE-CU).170403-1355)
+```
+
+# SQL Server 2014 SP2 CU4 - 12.0.5540.0 - x64 (KB4010394)
+``` powershell
+# SQL Server 2014 SP2 CU4 - 12.0.5540.0 - x64 (KB4010394)
+$outputFolder = 'c:\sqlsyms\12.0.5540.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/327f327fa575417cafb328a77700579b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b33973d4b2b84e898cf5fdbcc0cbfdda2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7c3b4d37cd874b8b9046197faa764b8a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/5c620c62165d4d6c929c48fbf285ecee2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/573e711ad5ff4306afcf4ead17f3ccd32/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/134dec74500e4623ac8395fd0f7b39002/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/efafa5fc3ed741138011d67be2e0956e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/322ab5e1bdb44d00b01fadf709cedb591/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2e34b42cd60244c18d4d932740df1fba1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5fa1d5a4f5184d8a96340d50ca49b8f91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/15a01dcd6514423dabf05a79ddbc260c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+```
+
+# SQL Server 2014 SP2 CU4 - 12.0.5540.0 - x86 (KB4010394)
+``` powershell
+# SQL Server 2014 SP2 CU4 - 12.0.5540.0 - x86 (KB4010394)
+$outputFolder = 'c:\sqlsyms\12.0.5540.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3b24410a96fc4557937d8680025104781/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/de2cbe9a066b4ca683edb111b07e98fe1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/65d8e8258a7d425b919ff886fef2a46e1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a55b0dba79c145579d868184299943121/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/a45a2e2de940478cb4da26c83ed480c02/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/91505e4ffbab42b0bb9fce392119d2a31/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/51b204af39e4418e8e436b505def119d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c8cdb62c1d024e1ebcd1167ea4e408fd1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5540.00 ((SQL14_SP2_QFE-CU).170126-2112)
+```
+
+# SQL Server 2014 SP2 CU3 - 12.0.5538.0 - x64 (KB3204388)
+``` powershell
+# SQL Server 2014 SP2 CU3 - 12.0.5538.0 - x64 (KB3204388)
+$outputFolder = 'c:\sqlsyms\12.0.5538.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/3b2ec8a276c44fdc906942cd4a1f69182/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a2983d6c8beb482197eea282afd09f502/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f15dfc2d86f545358f47d7963137b3772/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/51c7e960bc594a57948755163fc43a492/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/d11bb61c53bf4b68a2c3ba2527bd73bc2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/bd27195567bb4bf8a03bb27ceec1b7432/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e48b584befcc4a70adb8046bcf451a2e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b580840b77684d8a8f6eda6fc85965451/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/94c127c2d37e4e489484c51a03884ac11/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7ccaba5c7002409fa220d36307fc2b8b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8e5ff8ec981943338edc6cd886bd8fb82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+```
+
+# SQL Server 2014 SP2 CU3 - 12.0.5538.0 - x86 (KB3204388)
+``` powershell
+# SQL Server 2014 SP2 CU3 - 12.0.5538.0 - x86 (KB3204388)
+$outputFolder = 'c:\sqlsyms\12.0.5538.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/baa30c554cb44fa09d0bdfbed39e5a791/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/3dd488b8d441453dbd8745f0a544e7a61/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/47108c8b37424ae8851820cfe82c9e121/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b8d1890d88e746a998e86b2f3c74364c1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/848570152cb8402aa9d6fada8beb0c202/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/dde9b5fc95434bcdaf74b851a180a39a1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f57e00c99b1542da9050e3c79e4fc0751/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ad0a17bd74a343c68885438c5a1667261/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5538.00 ((SQL14_SP2_QFE-CU).161215-1705)
+```
+
+# SQL Server 2014 SP2 CU2 - 12.0.5522.0 - x64 (KB3188778)
+``` powershell
+# SQL Server 2014 SP2 CU2 - 12.0.5522.0 - x64 (KB3188778)
+$outputFolder = 'c:\sqlsyms\12.0.5522.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/85619806cd0c4d7f80b7d9c39ec0c55d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b7c764dde62d4501ad899b44155266f42/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/42c45987637146d9b0b6a18b3c16b4ed2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/a0718d2fb2484e6a9690d00a513a7ec22/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/925f17833290448e8a4a1981956919f72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f8b1d43023e94a69ad0ebdbdef8184262/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/cec32d3f65ae45e8a01456021c1965331/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/e5b418e31d1e4c7288dce466806e4a651/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e0a453b334904529a2b117ea1654e0071/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/46ca775ce2b347cf9a0497239589b9891/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/944350d206c94698a2d2836213aa3cd42/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+```
+
+# SQL Server 2014 SP2 CU2 - 12.0.5522.0 - x86 (KB3188778)
+``` powershell
+# SQL Server 2014 SP2 CU2 - 12.0.5522.0 - x86 (KB3188778)
+$outputFolder = 'c:\sqlsyms\12.0.5522.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/84f5af3698d149afa148b2a0cd3f4f581/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/213e8207dbe444d0909729961a287bd11/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/4bc737f7ee4c42ddabdc2dbd286531231/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b288a2b59dc74ac7b41ab91de6c4fc761/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/ffa4bbede27e459680aa2c3492dc76de2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/cff1f891748b4e46975bff972020c88d1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/68063a6d27944efc9b396708c391443a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/50ee2c4f4dba45cbabed0418e30529771/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5522.00 ((SQL14_PCU_main).160921-2323)
+```
+
+# SQL Server 2014 SP2 CU1 - 12.0.5511.0 - x64 (KB3178925)
+``` powershell
+# SQL Server 2014 SP2 CU1 - 12.0.5511.0 - x64 (KB3178925)
+$outputFolder = 'c:\sqlsyms\12.0.5511.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/955297012f084a879c084982baeb90802/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/6c97245a05ce4bb99d73b38531d5c1fd2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/115b0bf758864697975c5a790169856e2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/512c482f3fb045bda66e04e34964fb3a2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f769c28a891e437a9c794fc1ec7472752/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f143a40c5a8440bf8478537feeee5d642/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/b17b7a8868cb42579bae8551a8c7e0591/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/e2182fd204d84ab99011cccd1949e9c11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/27105a4614ac45c2ae4efbf8702e3afc1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/40b6d2eebb0d495ca7712c349427f5de1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5f5f15692fa448e79427eb55f742b9512/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+```
+
+# SQL Server 2014 SP2 CU1 - 12.0.5511.0 - x86 (KB3178925)
+``` powershell
+# SQL Server 2014 SP2 CU1 - 12.0.5511.0 - x86 (KB3178925)
+$outputFolder = 'c:\sqlsyms\12.0.5511.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/7cfba95f3823488aac2461a3e97e896f1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/da9e2bc4951043bd81090ae40dede7a11/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/aeff84391a5b452fbfcde0f4a892c5a11/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/5939ac9c2ded4145bcf7770744fd2bce1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/29a54a98b892439391394e42b0b5db512/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ed2df1c1d06e4545bdf23aaaaf209acc1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e1cccd08ad4847b7b40a5d54d95e458e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8ca704ad75a147c083468e8128a8d1c71/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5511.00 ((SQL14_PCU_main).160819-1335)
+```
+
+# SQL Server 2014 SP2 SP2 - 12.0.5000.0 - x64 (KB3171021)
+``` powershell
+# SQL Server 2014 SP2 SP2 - 12.0.5000.0 - x64 (KB3171021)
+$outputFolder = 'c:\sqlsyms\12.0.5000.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9b03bed67fb8409cb0790cc7b223dad92/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d06bb22769e2403894634bf47dced50d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/4505a8d6fda14645ba80e4c411ed63512/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/421f256c2b694c9f997cc27b691db8e82/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/581e38dca5b2499ea574ffc0173d6bb12/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ca529b22f161423c9266aa03928136612/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/16d952f37ecc4c839f06fc3f0a8e858b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/49e9ae321a004d859a4844a1881682fd1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e2bbf32382d24e16a4567c49dffedc1a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/bdcaa196c0824ba38ddec076b5fd89521/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/cc3cd23e34174332ae8778d4e4b7991f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+```
+
+# SQL Server 2014 SP2 SP2 - 12.0.5000.0 - x86 (KB3171021)
+``` powershell
+# SQL Server 2014 SP2 SP2 - 12.0.5000.0 - x86 (KB3171021)
+$outputFolder = 'c:\sqlsyms\12.0.5000.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3520a09c560647b0be4af33b838bb70f1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d0a102b60e2d4138a7435f98d7305ed21/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/739a59d06bce47de8b1bf3d77899ba601/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/34d38d0ff9ad490cb7c02c96ee741a651/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/16e45d5242524db7a022a600e0a58bd12/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/3105a463134247deb442c42904dd6af61/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f54482c3160047a0bffd5ee829fc930c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4ef9cb8fd3c141bcb4f1af7c26cbf7571/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.5000.00 ((SQL14_PCU_main).160617-1804)
+```
+
+# SQL Server 2014 SP1 CU12 - 12.0.4511.0 - x64 (KB4017793)
+``` powershell
+# SQL Server 2014 SP1 CU12 - 12.0.4511.0 - x64 (KB4017793)
+$outputFolder = 'c:\sqlsyms\12.0.4511.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/5194020c2bb54e35b975fb4b822687822/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c3e92c0187324b64902b44eb0d2e42ed2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/828309d8e65a4661bef26612e6c66da12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d17b6b1b84b74212b072a8b5bdd573b92/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/15ed0973c9214f76b84dce1924c47f2c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5347b58cfec447408dea4ef359a7fee82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/63966ccc66c6484197a1c5472f9ffba61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/15bee1647bc8463e9222aae1c310334a1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b8e0b1f00b4c47c3817d8d3211bd97eb1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7f74ffbfb5634301908b7c0a815e1e811/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c0bb53c9d4624637846157dcba6945322/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+```
+
+# SQL Server 2014 SP1 CU12 - 12.0.4511.0 - x86 (KB4017793)
+``` powershell
+# SQL Server 2014 SP1 CU12 - 12.0.4511.0 - x86 (KB4017793)
+$outputFolder = 'c:\sqlsyms\12.0.4511.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/1716ba550f704b47be04801c46ddd2271/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b07fe01e0c1d4fafadf3b3ae1198b23c1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5b2e3ff1f9ea426bb60c065573ba35851/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/06525a5e3eb34b839bfc1af702354c0f1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/5b0356ce9df44d3ebc3aaf4752c4dbc42/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/cfe4d232673d4feca1536f22af5d7da01/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1638c8bafaa4484f8115dc810f65688c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0cb40d6a5aee4627a803997293d2bc9f1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4511.00 ((SQL14_SP1_QFE-CU).170330-2026)
+```
+
+# SQL Server 2014 SP1 CU11 - 12.0.4502.0 - x64 (KB4010392)
+``` powershell
+# SQL Server 2014 SP1 CU11 - 12.0.4502.0 - x64 (KB4010392)
+$outputFolder = 'c:\sqlsyms\12.0.4502.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/6511e1af7762429a824f8d9413f8185b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0855528f0c094a8d9ddaa082dc6273892/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2d502c894cf145449e35bb27b9e723632/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4e718d4e6aaa4267a812e7a96d96e4192/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e3bc90eb56494cef8d0bb1c27630e7e82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/79e86271788b4ad8a73585aca0712a572/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/74b685c445be4b0abc1e40a39b1ce15e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fdad2621c0fd4be18f295ef7666f71541/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/fead2b11478e4f16957015b1c716dbf51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2fef4d7e355741078263ba0359236cb51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/baa3f42ceb4441f0a0362400473a45a32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+```
+
+# SQL Server 2014 SP1 CU11 - 12.0.4502.0 - x86 (KB4010392)
+``` powershell
+# SQL Server 2014 SP1 CU11 - 12.0.4502.0 - x86 (KB4010392)
+$outputFolder = 'c:\sqlsyms\12.0.4502.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/05c3adbed7b94c678abd5818fb1df1981/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4e38ef962bd44249a4374f46e4918e491/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1f790bbb27d94e7d8f76905be4ea8a8a1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/118dcefd951242c2b376ce23b8ca149d1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/16bba5c457c24f71816590513599284d2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1c2171f6e4c942a78d884a965ca2c2311/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b2e5cdea0e254b88aec4f52ff7d81bce1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/22ff6b3197a54e6d8e424fb153ee85291/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4502.00 ((SQL14_SP1_QFE-CU).170126-2035)
+```
+
+# SQL Server 2014 SP1 CU10 - 12.0.4491.0 - x64 (KB3204399)
+``` powershell
+# SQL Server 2014 SP1 CU10 - 12.0.4491.0 - x64 (KB3204399)
+$outputFolder = 'c:\sqlsyms\12.0.4491.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9d45c0ca9ff84210bd26d27a1db957b32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/fed498da893e422cac5e804b2b7a4c242/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2ad37367352148f6979dfdc99264bead2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9d0d6af6a3844491ba66db3b3a0e41992/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cdb4ecf4e5554b98963cfc8713f18def2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f524bcc24a0a4a09aeac95cdd7ff44cc2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/018fb92048554db0b8ce8d938f36c1af1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6f4088e11c2141038659ad6f5d75d67e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ef95d5619182441cba33ee5fcc0db2a11/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e6bbf5f834c248888873d9a1a9644be91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ed041be3c310451d8c409219c552e7f32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+```
+
+# SQL Server 2014 SP1 CU10 - 12.0.4491.0 - x86 (KB3204399)
+``` powershell
+# SQL Server 2014 SP1 CU10 - 12.0.4491.0 - x86 (KB3204399)
+$outputFolder = 'c:\sqlsyms\12.0.4491.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/d2366262dd7941978da45d5e683f7c101/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d800a487ae16476aad1a1d3a6000b3d81/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/47e138b038f94533b40e4cda75009dd11/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/ea65c57da53241919f6b2c099baddf6b1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/300035b8a93d4361bb955f88c14a9ec02/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5d479ce08c8f4a3189fc00cb7d96396f1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8b12d29053264fc798fb8b7312f457a61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/40548e898f644819908b614970e763f51/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4491.00 ((SQL14_SP1_QFE-CU).161209-1421)
+```
+
+# SQL Server 2014 SP1 CU9 - 12.0.4474.0 - x64 (KB3186964)
+``` powershell
+# SQL Server 2014 SP1 CU9 - 12.0.4474.0 - x64 (KB3186964)
+$outputFolder = 'c:\sqlsyms\12.0.4474.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ed3eb06f842543d287a3f4b7976a290e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f68fd847991e45efb467567f043365c92/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f39da543554a46fa9f66356d10ae25ba2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4e632d1dba694b07b1420d42203131fb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e6b6452458da4bfb90b095db670835ba2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/459d7854b8b442f7a7d16164e13d223e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/dbbebce79710422da003b9b362db90471/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/039cb07174774ae984a6c127254d699b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/cd5d4f223a81432b9a94c70f090bdbfa1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/587aafcade5c4befb8a21f74a0472f991/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/40263aec90934578b565fd5738ab0fe82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+```
+
+# SQL Server 2014 SP1 CU9 - 12.0.4474.0 - x86 (KB3186964)
+``` powershell
+# SQL Server 2014 SP1 CU9 - 12.0.4474.0 - x86 (KB3186964)
+$outputFolder = 'c:\sqlsyms\12.0.4474.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a2983e7c5b434d9fbc6828950649cd531/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/814705e58f2a452282645ab653b330771/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d29ed6114bab459499a99eb2aa5c9d901/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/5577ca7998974f91a2830c9130544b4b1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f5a4f8db221443c88c6c01c2097d5f012/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/8addcf093cf549e5b363e7bc4c1ff3d21/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7ab2c10294bc42ba84947f929ef553501/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9256f9eed09947189e79d8d088a780771/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4474.00 ((SQL14_SP1_QFE-CU).160921-2215)
+```
+
+# SQL Server 2014 SP1 CU8 - 12.0.4468.0 - x64 (KB3174038)
+``` powershell
+# SQL Server 2014 SP1 CU8 - 12.0.4468.0 - x64 (KB3174038)
+$outputFolder = 'c:\sqlsyms\12.0.4468.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/3d92fd2a73794d07b455ae4e5889a5132/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b3729fa94bef405fb2cb87260238c9f42/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5ce178c1c5d64b0c87dfe545697274d42/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3cad76e8bd284c3d843ddf72eebdeb6f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/690748ff94a84fe2a84415950be20d8b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c96238046bc24361b06e16837730d61a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/2a89258be7de4ce9b48dbb73a55d324d1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/95e6fa8b9aee433684c70867ff60a4e61/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/0c553a702c974f208644a405b541f85c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/db5a292a8769461583541a15ebe202611/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/13c47c3e18bb421fa3249689a54a71102/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+```
+
+# SQL Server 2014 SP1 CU8 - 12.0.4468.0 - x86 (KB3174038)
+``` powershell
+# SQL Server 2014 SP1 CU8 - 12.0.4468.0 - x86 (KB3174038)
+$outputFolder = 'c:\sqlsyms\12.0.4468.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/65f204610ef64b91a0fd8794150b94291/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1a01ea9849824b6c9d89022a9165081d1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/acfc80b3b2b14e0e8c44bb5638a59e011/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a1112b3c01de49d3bf7df61d9421bb671/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/d3657353614f4ee8adb22730dcb9dd0f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/633bdb5f043c4d5eb8ab475398f1d6b31/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8142bc3f8c344dd2a3f6a5f9b8accbc91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d5882b2e79e648a880c48dbf9aa04b751/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4468.00 ((SQL14_SP1_QFE-CU).160807-1306)
+```
+
+# SQL Server 2014 SP1 CU7 - 12.0.4459.0 - x64 (KB3162659)
+``` powershell
+# SQL Server 2014 SP1 CU7 - 12.0.4459.0 - x64 (KB3162659)
+$outputFolder = 'c:\sqlsyms\12.0.4459.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/9e6af119e0f34e8284af02aeb6c2aed32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2be68cda7aca40769bedc7911c47199e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/51a3a33ea06c4b6fa7ba5f3a872f475b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e90c807a4c35455a820c37c0d50b4b232/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/b61b9c7dcab24b45922994aca824ef672/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/619dd10c6677476c9b9d849815196fa32/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/433c6e1e9a8945498db235a0b52cde5e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fa3d2944dc8846d3bcc61c2e7ee065281/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/58c10d6cf94142c985df4771e46cb2371/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a27d505e013f4048877030aa5e518ea51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f27d6b48d60d41b685ab306cdd9a51ac2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+```
+
+# SQL Server 2014 SP1 CU7 - 12.0.4459.0 - x86 (KB3162659)
+``` powershell
+# SQL Server 2014 SP1 CU7 - 12.0.4459.0 - x86 (KB3162659)
+$outputFolder = 'c:\sqlsyms\12.0.4459.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/6fff44d1682f4a9495ec0d87165558441/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/92d19dff78a545049ba60ecbb778e1b81/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ad454e7f63754f3f8ea5182420e1a95c1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/9228212f994f44d5b53f3ab7dd3356cc1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/8578316b4f5d4354a53ec2cfd55481022/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/bd487adc6b904a848c1231663606b3f31/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1832bee682d6478cadcc049a8e7f667c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/274a8b7eca104af493f554023e54b1511/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4459.00 ((SQL14_SP1_QFE-CU).160527-1445)
+```
+
+# SQL Server 2014 SP1 CU6 - 12.0.4457.0 - x64 (KB3167392)
+``` powershell
+# SQL Server 2014 SP1 CU6 - 12.0.4457.0 - x64 (KB3167392)
+$outputFolder = 'c:\sqlsyms\12.0.4457.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0d205c1fa08b4e30be8d57b0b66f7aad2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ca933e39df4a4a06877ec27e0ca8635c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/73bb9ef1b6d444949ec88857e9ad1a282/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8405542cc1254c03a666cb742da51ea72/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/95315aebcf874ef0bb34618350d666432/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c6bebcd7804e461f9efd30cabf8e8f8a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/79d2d1bdc00b4d4eba2870d71a3dd2d61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a8ccc254a9e6493295a6bca4bfaa61401/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/fae429df4a7f4b2fb2654331aed0ac171/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b950a8b8c82d4963b5c9dd17c8d278d41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f44520516b3d4f4eba97077627392c722/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+```
+
+# SQL Server 2014 SP1 CU6 - 12.0.4457.0 - x86 (KB3167392)
+``` powershell
+# SQL Server 2014 SP1 CU6 - 12.0.4457.0 - x86 (KB3167392)
+$outputFolder = 'c:\sqlsyms\12.0.4457.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/e20a40c355fc4e44a73ebc5e6f9aedff1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/46bbfbc5d91f42e49d4787fdb099ac611/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/4fc6d961f7114c9b99d7a889580a49451/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/205de64132184b59aae89e227e12d54d1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/10f36fe6efa44624bd46211d0d8cb4202/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/349d89ce6e074117afa7cf153ccc510c1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b0785ae48497462bac6fd725dfb8517f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/71d4f69079d846b192583ae1293d14c91/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4457.00 ((SQL14_SP_QFE-OD).160526-2301)
+```
+
+# SQL Server 2014 SP1 CU6 (Deprecated) - 12.0.4449.0 - x64 (KB3144524)
+``` powershell
+# SQL Server 2014 SP1 CU6 (Deprecated) - 12.0.4449.0 - x64 (KB3144524)
+$outputFolder = 'c:\sqlsyms\12.0.4449.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/541dc558cad74e0694256b9a79761f922/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8a5052b8ff7345599f6f242cf4f3e09f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/8a62d7af769a4f2c864d2b808ab81dfe2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/251fdfd9e8454621b19032d327a2fbbf2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/6cf73332314548c29f5d02b19d98963b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/55742e7e85204da4818d8a730a2f70852/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1a20c516b71c4ee9a74d40cd5b3597631/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/db864229a8b14fce99322d74a808b8d61/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/db0d700ed8dd45349808c9c8078f7c1d1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/42213ff00a944645a6752810210b9c4f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bba4a2d05f6b4a7da8cb248ae45a322a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+```
+
+# SQL Server 2014 SP1 CU6 (Deprecated) - 12.0.4449.0 - x86 (KB3144524)
+``` powershell
+# SQL Server 2014 SP1 CU6 (Deprecated) - 12.0.4449.0 - x86 (KB3144524)
+$outputFolder = 'c:\sqlsyms\12.0.4449.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/ff6fa640813246d6b61408f766f2ba301/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/79a658164e2e44e482bca7933ae40daf1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9871f564b21d489591a9d62997125cfe1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b12da1e6770a4cb7819bae2c4d8ab0fb1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/326123b149634674bdb729d1f67111da2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/dc4d9c2424574034b47f8c3f62d96cee1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/011a3a3c5ee64a52bbfbb132c3c067011/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5867019c5089413eb07654da21ad9eb21/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4449.00 ((SQL14_SP1_QFE-CU).160413-1153)
+```
+
+# SQL Server 2014 SP1 CU5 - 12.0.4439.1 - x64 (KB3130926)
+``` powershell
+# SQL Server 2014 SP1 CU5 - 12.0.4439.1 - x64 (KB3130926)
+$outputFolder = 'c:\sqlsyms\12.0.4439.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8c05af1cd714431692715e7c894227922/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/9d7930b2b40d4a76882ff6e932d114ea2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3620205f1aa146fc8fb261528826e9252/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/a4841e65bbea49e8b8fb034d059b1f3a2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/51bd4d350e134a0788e8e5082f7b5df22/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/040e2fe727c3407584cf8ec849b8ec752/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ee405fe12c294db58642f2aaab531b541/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/19c41b55d37f49c9a1ae06318c57e8d11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b4b47d122cc049cbb8f6781a308dda711/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a1181e9122f6449b8283138dbe7117171/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/748dfbd824714b7784555b943be771552/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+```
+
+# SQL Server 2014 SP1 CU5 - 12.0.4439.1 - x86 (KB3130926)
+``` powershell
+# SQL Server 2014 SP1 CU5 - 12.0.4439.1 - x86 (KB3130926)
+$outputFolder = 'c:\sqlsyms\12.0.4439.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/98b4120a06c3471f972576543f15ac971/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dd78d54baaeb4fcfa8ec3adac01727ee1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0e9fc78f89ab4d5297fc3ade50fa39f51/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/71a0972911d64d6d89202a102f4e36331/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e8f53d675d904f2ab71e74b2619f6f612/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/0ccdcf5f1baa43bb8fe10be379928bc21/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b4cea174690147acad1b103353feaad01/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/da27c83c09ec4ebfb0df22b5746adc711/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4439.01 ((SQL14_SP1_QFE-CU).160215-1104)
+```
+
+# SQL Server 2014 SP1 CU4 - 12.0.4436.0 - x64 (KB3106660)
+``` powershell
+# SQL Server 2014 SP1 CU4 - 12.0.4436.0 - x64 (KB3106660)
+$outputFolder = 'c:\sqlsyms\12.0.4436.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/362a8410d21b4d39ac0e7a02cc9c2c372/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/681476d84d7d40f186d3ea82a2661c672/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a31f385046b54b9cbaf08c4df972c6782/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8a3fe11c189b4435bcbe953f4841d99f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/8f68c8d3545c49e8b83079bc84c6e2842/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f08834e6067d4b98acb3b60090b4ba292/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1d1d583c3f204024a1c6247dfce1af251/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/bf369e60da5943c5ac4ecd1c83e9c1491/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/6fe2ce101a564db2a580f3f85176f0681/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e1afd1f24c8a44f1a734bd1c4a10eaf51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5aa7af725caf4fe38f52515b787d4c4d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+```
+
+# SQL Server 2014 SP1 CU4 - 12.0.4436.0 - x86 (KB3106660)
+``` powershell
+# SQL Server 2014 SP1 CU4 - 12.0.4436.0 - x86 (KB3106660)
+$outputFolder = 'c:\sqlsyms\12.0.4436.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/e3278cf94d974d73a099dd3541f1430b1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/65cc2740001e4389a652c81d662ff4a31/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1215ee0470bf46c1bcd1ddfa35951f911/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/737570a73e254326826ad1c811c340671/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/50cf83342da94fbeaee4f79bd16973ab2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/df2f947c30e4454b9e568b53ca4dd8c51/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3e240bb821c44d9d8ab1e59638d2bf351/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/28a61563540846d5a4c6c1b9f58e6b9c1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4436.00 ((SQL14_SP1_QFE-CU).151202-1517)
+```
+
+# SQL Server 2014 SP1 CU3 - 12.0.4427.24 - x64 (KB3094221)
+``` powershell
+# SQL Server 2014 SP1 CU3 - 12.0.4427.24 - x64 (KB3094221)
+$outputFolder = 'c:\sqlsyms\12.0.4427.24\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8b612bab70d84b87bc09f27e4886aeb32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dd15f98e38c244fc99b4ea43e149751a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/cfee366445fd45cb90c9a47537129e772/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/da33ddc66f9843f38802e386e21a23d92/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/5d78955b0a444fa8a0829509864abdcf2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/d625926716ac4a4ab6d395e0717eee292/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f7bfed5a7b9c4b0a89c2351606f6dabd1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2829cd5018b94524a05d17c0aba940a51/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/28ce7b1a2fe64c1bae7180a1ab1d4b841/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2ab9eea24838455ebedc0b4bfca780651/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d1da515568304cada52f5ca07d32c56f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+```
+
+# SQL Server 2014 SP1 CU3 - 12.0.4427.24 - x86 (KB3094221)
+``` powershell
+# SQL Server 2014 SP1 CU3 - 12.0.4427.24 - x86 (KB3094221)
+$outputFolder = 'c:\sqlsyms\12.0.4427.24\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3ef0e0f2fe2b43ac93875b3b3925fc6e1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e630387bc0da4378a384f2f0381a70361/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/195f5a4a374443d7aba2b2bee84e34891/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/f7d1027c3648472896a7f5d88da4c9d21/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/9e81862bb11447788e4a5248fb8a067e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5a5b0039a4474b42bb55ccb3ca6127721/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d656086d4f4b422580baf43047ee17da1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ac149317d5054708a94ca8aa8cef2fb41/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4427.24 ((SQL14_SP1_QFE-CU).151010-1609)
+```
+
+# SQL Server 2014 SP1 CU2 - 12.0.4422.0 - x64 (KB3075950)
+``` powershell
+# SQL Server 2014 SP1 CU2 - 12.0.4422.0 - x64 (KB3075950)
+$outputFolder = 'c:\sqlsyms\12.0.4422.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/cc4b19123a7e4b00bc327dc0d8c0535a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/685f3f3dd9bf40a384bc3b34b5e0ec382/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/132245b6e07d4ed0b8a037f372c07a1c2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/f2d5c201fa064580a88c8620fcf528942/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/3c213b3e4cac475c986f38788ee7ae812/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9833540f5dd84c07bfa7aa07e35878c82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/703a0ff035d8421093c5873ca70254021/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a70c6bd99bbb44129002fe32794a1a491/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/3b2cc6000a1e46aa8ad7be339858e1871/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6e69bdfbde834092882537afb0164ee41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d6bbc455ed6d43fca5b6c541fd9840a82/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+```
+
+# SQL Server 2014 SP1 CU2 - 12.0.4422.0 - x86 (KB3075950)
+``` powershell
+# SQL Server 2014 SP1 CU2 - 12.0.4422.0 - x86 (KB3075950)
+$outputFolder = 'c:\sqlsyms\12.0.4422.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3e6e97436d7947efba0199c077de575e1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8f1c6ef392a94f7280e4551d787bde0e1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/802091eeae1040b9929300673cf1e6cc1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/7cf486d748c648a993d8fee09d470ed01/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/77421fe01c504798bd84ff1111394ed02/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/bce992e7e4704168967f6b792d2c92161/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/10d2fbe0372a465a984499f610117b671/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8132ccd977ac49b9b82d21e453c9d7db1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4422.00 ((SQL14_SP1_QFE-CU).150727-1536)
+```
+
+# SQL Server 2014 SP1 SP1 - 12.0.4100.1 - x64 (KB3058865)
+``` powershell
+# SQL Server 2014 SP1 SP1 - 12.0.4100.1 - x64 (KB3058865)
+$outputFolder = 'c:\sqlsyms\12.0.4100.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0b3969cc9d1c42209d848cdd6619deb22/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/cb126849ce004b6fb8128a91ca87d5de2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3b28768245824b4e9dbe603fd491e2852/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b7ffc8fe9e2f4b15b44e40b4afd2ea012/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/08ffbabfdc4a4926bc16c8522c9bbc322/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/3b87272344ce49a79745b7c63a7e20182/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/4fedbb6d132d4ed49a566bcd7212408d1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c333820aef364ad2b93a5bcc5a1c66101/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1a18e036793145c8a9d1ab124a2607e41/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/63dadaf018f1419f8a4dbbd6bc1dc14a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ab6196f20a154ace825cff70fd87b6092/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+```
+
+# SQL Server 2014 SP1 SP1 - 12.0.4100.1 - x86 (KB3058865)
+``` powershell
+# SQL Server 2014 SP1 SP1 - 12.0.4100.1 - x86 (KB3058865)
+$outputFolder = 'c:\sqlsyms\12.0.4100.1\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/0865f069e71245ca8bfa3d606b60c1621/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e489ada097d74198927ef538fd8927a41/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5bea9870e6614f7e83671000e406de331/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/68a3418eaba04db5b35c3ab2cc4a67681/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/295830323d5343efad5c418d4e6dddb72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a3aeeef5442b49b4abf8d50de9edab181/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1ea104008bc644218268d19341eecd741/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e36eebbe2905446fbf814c89dee44df71/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.4100.01 ((SQL14_PCU_main).150420-1653)
+```
+
+# SQL Server 2014 RTM CU14 - 12.0.2569.0 - x64 (KB3158271)
+``` powershell
+# SQL Server 2014 RTM CU14 - 12.0.2569.0 - x64 (KB3158271)
+$outputFolder = 'c:\sqlsyms\12.0.2569.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/539b0c025c174d6698c4969ee00d608a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/da89f627ad2346c38a7e801fed26a28d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/50637ed0c6714c5c99da521077e3e5c32/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/01a3ff5e96cd40d5a8f1ab8f127009522/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/05af9fc52b03405a9cb80cbd73c60a692/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a803366e7b534798ab18db7ab2f059602/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/bee70081bce04d9e9a4d9145f820ec5f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/097922796c7443deaaebb689165db0c81/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/fc8453414c104e1992d469013988d78d1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/4cc60f940e164516ba060e2ec7a9085d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/167b796ce1b84bd6aab8a050c0507d842/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+```
+
+# SQL Server 2014 RTM CU14 - 12.0.2569.0 - x86 (KB3158271)
+``` powershell
+# SQL Server 2014 RTM CU14 - 12.0.2569.0 - x86 (KB3158271)
+$outputFolder = 'c:\sqlsyms\12.0.2569.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/759d2b26ff5346bd861ce3f29f45bec81/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/78d8fd90a81d424b9a11cff7694359be1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/10adc5ffc4504f70bea9ace99b83d4811/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/d5d8a1b7129843e992a5cc7ac48d8cdc1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/88e10155378342d28c551097e352cddc2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a51778462d5b483bb0f7c56f35e1b3881/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/63daa87222644774b370021497f13aae1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2e5c327356dd422e8df429052b8e1de21/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2569.00 ((SQL14_RTM_QFE-CU).160527-1418)
+```
+
+# SQL Server 2014 RTM CU13 - 12.0.2568.0 - x64 (KB3144517)
+``` powershell
+# SQL Server 2014 RTM CU13 - 12.0.2568.0 - x64 (KB3144517)
+$outputFolder = 'c:\sqlsyms\12.0.2568.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/de53ea6dfde743f18cadc0b0d43042492/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dd5ba486f24344ad8405ff37e26b4e1f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/93d02eddd4a34a3dbbecfeb54abf9a1d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c9fd07c3fc294f1da6e434f006522b152/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/a032aa8c1f9c4768a7f44c6e724c25542/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c244f112481946d78890457e4e7ee5a72/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/64efea4a66a242fe84610bdea54e47fd1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d1faf0f81672488e975d5cbff4f5f4c51/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d6ba17eeb5534b6c8f09b7bd7a9d87ef1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/7b633a8ab9664ffaa16dff394ebc5d331/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5e921cfba868494fa153b17f0d1fda992/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+```
+
+# SQL Server 2014 RTM CU13 - 12.0.2568.0 - x86 (KB3144517)
+``` powershell
+# SQL Server 2014 RTM CU13 - 12.0.2568.0 - x86 (KB3144517)
+$outputFolder = 'c:\sqlsyms\12.0.2568.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/f4ce9bbe9cd94155a053957fc6e89a171/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e3272664d7ac4280889108adaa8fa4081/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b3d91828d7c04aef9f0a597390b6e3f01/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/7f73aff2ab6146b59f7cba467bfe64071/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/5db522686f8c42f58a7a6cb449f772d32/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/d5748e2f6f7043058e5bbd55bacb3b4f1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5958ca20c2cd4e2e855fe49509dd0e7c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/310e33c9d39046199259897860543ef81/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2568.00 ((SQL14_RTM_QFE-CU).160330-1726)
+```
+
+# SQL Server 2014 RTM CU12 - 12.0.2564.0 - x64 (KB3130923)
+``` powershell
+# SQL Server 2014 RTM CU12 - 12.0.2564.0 - x64 (KB3130923)
+$outputFolder = 'c:\sqlsyms\12.0.2564.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ac2576ff05574d0895c27ddeafbe5c8c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/24cf73afb18b44e98f4ba0ac01281e232/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/05ca53d70a0d46c78025be9f7379f3f02/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e478a5c24cc047cdaa62614b9d6bd3052/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/eb2d01edd0b143d3a8cf1c8a5ebea4972/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/16cdbd70f47b48cf908a13007767df1a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9f3ca7a2feee48a1998590fec323b2e91/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/3ebf546ee388483abdb7dab6effd82d21/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a2f68300ade4407fb71d87f30a77fc111/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/cc7dd6966b7e43d99c7c23447f95542f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f0308e1404e542b2a920139701283a252/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+```
+
+# SQL Server 2014 RTM CU12 - 12.0.2564.0 - x86 (KB3130923)
+``` powershell
+# SQL Server 2014 RTM CU12 - 12.0.2564.0 - x86 (KB3130923)
+$outputFolder = 'c:\sqlsyms\12.0.2564.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/17b9f26230cd4187a439851dc2b15e5a1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/df46ff7b155e49048c088afde27092b21/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1849c8c7f5774787a047b5c3105a4f861/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/1e704748340e45ad8c1e5bc9b08a77281/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c3e4dde16a9a427ea900174c72dfb9e82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6c5d715625174c2c94d325757fa8d1e81/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/fa23d7c84b444dcd8b619046b60b65421/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/29ba1ceeca2744fe84f8d852530d27f71/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2564.00 ((SQL14_RTM_QFE-CU).160204-1937)
+```
+
+# SQL Server 2014 RTM CU11 - 12.0.2560.0 - x64 (KB3106659)
+``` powershell
+# SQL Server 2014 RTM CU11 - 12.0.2560.0 - x64 (KB3106659)
+$outputFolder = 'c:\sqlsyms\12.0.2560.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/71ccee0526474342a5891a30d552962b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/3919239c1e00493990334a7288fcb7962/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/756b21da38ee46d0984b1188544092342/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d028137b7daa4438bc7be686320a64fe2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/781c50f9c2c44642b355a47de65574b82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a0aff51dd9904d55a4fcce650e40a9762/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9293a8099c4d4f49bc6b0543846b03791/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fa5b0015e66a4fb286899631f60591021/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/56f5dd0eb56e420b92dcd5f59b05ef9c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/64b1f742fbcb4e2eb3f2e1dc05b70ea61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8ec5a23b411344a6b1fb5a9dfc8d1c752/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+```
+
+# SQL Server 2014 RTM CU11 - 12.0.2560.0 - x86 (KB3106659)
+``` powershell
+# SQL Server 2014 RTM CU11 - 12.0.2560.0 - x86 (KB3106659)
+$outputFolder = 'c:\sqlsyms\12.0.2560.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a90e6d303f4345efaedba859da66d0e21/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/64473f2a9c0243d08ad2cebd7e62f0ac1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/eb1f9c11c81140199ee680f02d407a3c1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/5b6c3b54f0234bb2be975c25092ba4851/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/286b5c4590a94a3bb3da0360ecd0e9c72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ce4f67214c154f52ad60711ba933ad3d1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/aec11813c97e4e44bdb233dd821866191/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bd25689f8fa549398c347993c1fba4851/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2560.00 ((SQL14_RTM_QFE-CU).151130-1922)
+```
+
+# SQL Server 2014 RTM CU10 - 12.0.2556.4 - x64 (KB3094220)
+``` powershell
+# SQL Server 2014 RTM CU10 - 12.0.2556.4 - x64 (KB3094220)
+$outputFolder = 'c:\sqlsyms\12.0.2556.4\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a06b30032d9f4505a3c8f000010f8e4a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e48e96adf3df44b481c69001d428659f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a1d6b6fd3e564262ae281bf794e96bd72/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/038d25c7c8644a3395f40f40f36382c62/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cfb6dad33e5f4582bb467ca8f85d4a162/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/98e46a54759c4bdfbab7383aa518630a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/76f05d07a3e9414f80f50c6442eea7931/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1383af48c8034eebb40e2851e1a44a1c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f3b781e181fe41d98402118e16e3f7601/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d0f7a6c9e839447fbf537b344c12efae1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6f9cb7b79b0f4b7eb215793a66b2ef942/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+```
+
+# SQL Server 2014 RTM CU10 - 12.0.2556.4 - x86 (KB3094220)
+``` powershell
+# SQL Server 2014 RTM CU10 - 12.0.2556.4 - x86 (KB3094220)
+$outputFolder = 'c:\sqlsyms\12.0.2556.4\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/9c806d9ee5a84c898f8421b5380b95e31/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b69a5dcf43574aa79661d3e85b9daf3b1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/97d553cffeff4762b0266da68f578fba1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/d79a773caeba4ac59f6882c36b1f356c1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f646c10572b24eaaadbae323b7abd2782/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/38dc9d399d6b41a69f084603941b4de21/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3960118c1cbe4a29af87cc01706ce2641/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/7e7fd36e795447998d8a574e0de7c1871/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2556.04 ((SQL14_RTM_QFE-CU).150925-1720)
+```
+
+# SQL Server 2014 RTM CU9 - 12.0.2553.0 - x64 (KB3075949)
+``` powershell
+# SQL Server 2014 RTM CU9 - 12.0.2553.0 - x64 (KB3075949)
+$outputFolder = 'c:\sqlsyms\12.0.2553.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/4d240a39c8904928a18106632f6553402/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a7035a6ff90d479b9919516f8a75c6f92/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/90c16352697346c4adc344d5bcbef4ec2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c4b7ea36a9ed41e28a86daf39605b1332/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/afdf18a69a2247a69f8775fb26ba35842/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/531f254bc1634a668690bfa78ac1c9642/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/a0a41504488d42e0889c7aec0d470a201/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8f66e9d5591841f585146e18e861ba1e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7b7dadea82424ddb940d8bcb1ced7a461/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/19ab0699fbdf4c26b2c48e3206ac53ca1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/eceabbbb5b7a43e49511f7e3b3064b472/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+```
+
+# SQL Server 2014 RTM CU9 - 12.0.2553.0 - x86 (KB3075949)
+``` powershell
+# SQL Server 2014 RTM CU9 - 12.0.2553.0 - x86 (KB3075949)
+$outputFolder = 'c:\sqlsyms\12.0.2553.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/d56eacfc22cb4f8ebfb7ed4457b60f311/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2dd16123a37f485dae76965defe7f15e1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/569970ff8be84c0b9f067365e4a00c3b1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/17dd6df3096b4d0199d1035815c1d8881/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/594a78c1c2204ba1a183b4127c462a3e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6446039fddc749d3a1583d2472405cf21/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6f805634dddd401994ea5e31420c30281/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8d3747171962416d957f2f4a2a5dc8701/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2553.00 ((SQL14_RTM_QFE-CU).150727-1511)
+```
+
+# SQL Server 2014 RTM CU8 - 12.0.2546.0 - x64 (KB3067836)
+``` powershell
+# SQL Server 2014 RTM CU8 - 12.0.2546.0 - x64 (KB3067836)
+$outputFolder = 'c:\sqlsyms\12.0.2546.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/1869491de3c641a18e49984e36c254472/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/23feec68725245cba986d45a86d87c3f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/21db9cb621534d9e9be8f5c03e7091c52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8575334bb55240b5a1f44608bf3eda9b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/aeb2b040245c4f408ba6cfba7376190a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/bfffb5bc7a3044ebb54ab848cdfeb7632/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6e2e2a0675164fe8a3ade4ecae7ac20c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/dde786dd2d5b4cdca67f2653dafdb4d91/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/20f66d85e7d54ab797a4802c4e642b431/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/281a067206bb4599bf54b71128337a161/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/a7596bb350534cfc874c588a8c31dccc2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+```
+
+# SQL Server 2014 RTM CU8 - 12.0.2546.0 - x86 (KB3067836)
+``` powershell
+# SQL Server 2014 RTM CU8 - 12.0.2546.0 - x86 (KB3067836)
+$outputFolder = 'c:\sqlsyms\12.0.2546.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a902edbf6d6e45a5bdb96d88b3d8b9eb1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/91f4ba068591426395fba9cf46b9fe3b1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a3454c90a9ec423abaab7718704766c41/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/6648b0c58be2467c85d16b826474f8e71/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/57dad04962d6454e8ee40edafdd2a7382/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9b2bcdfb948342728b8154e042fa2aab1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9291ad53019f4d93b0a31996c43797fb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6aaa6f308fc649d8b2982b6ae4cb77c71/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2546.00 ((SQL14_RTM_QFE-CU).150606-0007)
+```
+
+# SQL Server 2014 RTM CU7 - 12.0.2495.0 - x64 (KB3046038)
+``` powershell
+# SQL Server 2014 RTM CU7 - 12.0.2495.0 - x64 (KB3046038)
+$outputFolder = 'c:\sqlsyms\12.0.2495.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/892a317818044f39a181616fc087af5d2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/3f9503803aac4aaf9068cf713da94fcc2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7b4cb4924f874c2c9a01962d7bebb4322/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/f953a26136a349b4bc7123c9b57674cb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/5b04b86cb1df4377852dcdfbaa579d6a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/68b76d2800ca4d67a20176b8080792622/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/8ed3b76470a54f71a22fe04ec4aa07971/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ac765b05370f4dd39bc3dab2c9c5b0881/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/868f36d33dea4cdd80d7ac95d51becb61/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e750975049a44a5ca167527370ef01171/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/76a12fa76ee2455086cf3afd914b939b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+```
+
+# SQL Server 2014 RTM CU7 - 12.0.2495.0 - x86 (KB3046038)
+``` powershell
+# SQL Server 2014 RTM CU7 - 12.0.2495.0 - x86 (KB3046038)
+$outputFolder = 'c:\sqlsyms\12.0.2495.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/b723d38841c74cb09e79d2eeadffc2ab1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0f90d520883c490f9d0815f7a6211e701/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bc6b474d28164912bd70a0e0087e35261/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/c32b08605905479daa5521248a294c091/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/96046540101444be821ef103aa4e0f982/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/710e00b267c04ae1bc850a013edee5231/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/982821e1f1a348c4845b7a31dd0a43ce1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d8c2b98f2dd94438849861c279784cfb1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2495.00 ((SQL14_RTM_QFE-CU).150331-0856)
+```
+
+# SQL Server 2014 RTM CU6 - 12.0.2480.0 - x64 (KB3031047)
+``` powershell
+# SQL Server 2014 RTM CU6 - 12.0.2480.0 - x64 (KB3031047)
+$outputFolder = 'c:\sqlsyms\12.0.2480.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/dbacb5b0cfd24693ae42ddf04ab4b27c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/31d5b80990d64e0fb25cb5327135bf492/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ff523ac683ae46a2b355c15b4ac022eb2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/edbd5ea4bbe04d47b93025254094b02d2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4929c9ecd1704cf8a7821dc901f6d92f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1c0f8135f2934a5ca84ebff15f88b6aa2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3ab1423a6b7f48d1a942c5df2fd242b61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c9aa7a554ed94d15b35740ffe04036c01/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/95947070310e43e2accbc93c08f222241/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0d379c00cf81409587f1a4c9f95f77dd1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ec96151a8358494bb84329e05aaf78e02/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+```
+
+# SQL Server 2014 RTM CU6 - 12.0.2480.0 - x86 (KB3031047)
+``` powershell
+# SQL Server 2014 RTM CU6 - 12.0.2480.0 - x86 (KB3031047)
+$outputFolder = 'c:\sqlsyms\12.0.2480.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/9b22a94162d74004a82810c2c3710a3f1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ececdbe975594116b9e388e6c9f8a80f1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9f41e051cb014f8d9fec6e44e9b721131/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/2ffeb57130c84f8fa3d69df7de71eb681/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7d7d89e6640645beb6306cbf2444ee662/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/22336473e39548f99831e8d061b7831b1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/b16a9fdb9f8546788b04a5d80b2bae261/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2c1a8c9a1b8c44e283868f97d75481e01/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2480.00 ((SQL14_RTM_QFE-CU).150128-1755)
+```
+
+# SQL Server 2014 RTM CU5 - 12.0.2456.0 - x64 (KB3011055)
+``` powershell
+# SQL Server 2014 RTM CU5 - 12.0.2456.0 - x64 (KB3011055)
+$outputFolder = 'c:\sqlsyms\12.0.2456.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/eb8a93e72a794e8b9f5e5319cfc523682/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/53f31818f69145f48eee069d0d23fbd12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/6e2939b1a6c747c79606f27572d2167d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/133c13f037d542e68e5d1fb06ae6e8042/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1afa777fdd2643e8b7eaa7faa9b6b5fa2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/19634392d50f4dcab91217f04a415f482/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/8fbc290a832848ffb96d30114d63ed611/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/291765ae21a741eda736cb1cbcea5de51/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7b53fe2f993e41209ea93c774deed22f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/214c250884534e1aa0185e6bef362a521/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9b95a106672640318876b62eb49ce32b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+```
+
+# SQL Server 2014 RTM CU5 - 12.0.2456.0 - x86 (KB3011055)
+``` powershell
+# SQL Server 2014 RTM CU5 - 12.0.2456.0 - x86 (KB3011055)
+$outputFolder = 'c:\sqlsyms\12.0.2456.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/b845d2f2afb44859904e1c51ea2df77c1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/93ab40244d4b4108b3e1e5e507a841f81/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3bd2da20bc3d42df9bda66521f4763141/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/301c79ece27a4a4ea90a4026b151273d1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/15d84d064320486d8f0aa9c175e73ff72/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/677fc25409af4e5cb079fc220a507a281/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c99783448e224e5ead440e48808f3a371/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3ee8df660b704120a5769fe486d912b91/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2456.00 ((SQL14_RTM_QFE-CU).141211-1636)
+```
+
+# SQL Server 2014 RTM CU4 - 12.0.2430.0 - x64 (KB2999197)
+``` powershell
+# SQL Server 2014 RTM CU4 - 12.0.2430.0 - x64 (KB2999197)
+$outputFolder = 'c:\sqlsyms\12.0.2430.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8ed2ab1b64c64cd6b53be5ba2940d1a42/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1d8587b3f0eb464f8da9733cc91606862/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/21f00ed9f1534ee39faf557af2efe0b22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/0999d6303e144ea494c2befc049f4f052/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f21b42e831e3406796f8341329a2109c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6ea90b282987428e950c06ca61b48d022/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/72b8a33dcd5a4c199f48947510111e4f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c3f38698f3db4272bbf911928e3a71c91/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/c9e0caaa8d11431aadaff0f8fc85c2041/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f98a21da91c24cfdb165f8f2c1a4019d1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/3863b99a65d94c2f9aba257ddb80519c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+```
+
+# SQL Server 2014 RTM CU4 - 12.0.2430.0 - x86 (KB2999197)
+``` powershell
+# SQL Server 2014 RTM CU4 - 12.0.2430.0 - x86 (KB2999197)
+$outputFolder = 'c:\sqlsyms\12.0.2430.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/c842b82043f14b56bbdaf6f3daf8c9361/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/bd6cc732c1a04a70949c746ad7c75bfc1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5e255a6c840c4135afd13947b885a0bc1/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/bf46680cb561413d92bf308f29ed422d1/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c2a06041e7e2494889e753f9633f49ad2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b6b6b351ea9b4ddc8d275499e307dc371/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d44e146dd57b4e84bd689c2dc23f38a21/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0bad01bb555b4a9a9fb58bba8dbdee961/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2430.00 ((SQL14_RTM_QFE-CU).141015-1502)
+```
+
+# SQL Server 2014 RTM CU3 - 12.0.2402.0 - x64 (KB2984923)
+``` powershell
+# SQL Server 2014 RTM CU3 - 12.0.2402.0 - x64 (KB2984923)
+$outputFolder = 'c:\sqlsyms\12.0.2402.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/74853044551f42dc87b5388cb869e80e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b95f32db724a460eb6eef6e130b837262/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/ea34d76c06f34b6cb7b0908f0746c0782/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b0d9d6294e034a73afeeee938172760b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/bf41580581a9420fb851f76ec3afb75a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f96bf02390534634bdc1e8d623c2d33a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f822ab6d65fc431cb5ab54b0ee8e3d4e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/7b77a2193e4f4891b0f34f9cda87f7b11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5ef94f8c3ac34e8494fe1807ea68107b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/70d73245215e4eb1968511982957b5a51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/56ece3cd49754bf8b5aea9068ca1858a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+```
+
+# SQL Server 2014 RTM CU3 - 12.0.2402.0 - x86 (KB2984923)
+``` powershell
+# SQL Server 2014 RTM CU3 - 12.0.2402.0 - x86 (KB2984923)
+$outputFolder = 'c:\sqlsyms\12.0.2402.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/0232dbfdd56b459fb96c006f563d2f6c1/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0d331b541b294e44a065cae4384077da1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1fdf9f2c4cd74c4c99eaf0b33fb615271/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/1f461bef6f764833badbfb63717c6ca21/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/8dde3944f69a481aa12e39b50dc1387e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/fc462491d53f4437bbf3b53c21a2d19b1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3abaa853cdfd43538b656cf6b8ed08f41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c1fcff98a6144ea89585dbf7506c49c31/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2402.00 ((SQL14_RTM_QFE-CU).140813-1032)
+```
+
+# SQL Server 2014 RTM CU2 - 12.0.2370.0 - x64 (KB2967546)
+``` powershell
+# SQL Server 2014 RTM CU2 - 12.0.2370.0 - x64 (KB2967546)
+$outputFolder = 'c:\sqlsyms\12.0.2370.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/00fe9a5483574e96ba85d4e14743c8cf2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c0cd8d60c1ac4687a1f529cca07230152/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a3e0e381d1dc4ba2abefa830fb5908072/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/abf0ec3c6c1f49efb5ad08dbf408ef8e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/2709a8f9d5804dc695ad1b95124e3c732/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/27958e94f9a14900b53db20d28600db82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/af790770d88f4c40a2b39623e71a4dab1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d4ac25f2460744f992933ca2b332429e1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/21a099f1ea704e979734421be237b3751/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/28d76d0753dc4ed1b8a26d6a8820df5e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/021ad6b05b234d8484546842381e7d652/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+```
+
+# SQL Server 2014 RTM CU2 - 12.0.2370.0 - x86 (KB2967546)
+``` powershell
+# SQL Server 2014 RTM CU2 - 12.0.2370.0 - x86 (KB2967546)
+$outputFolder = 'c:\sqlsyms\12.0.2370.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/efa900c9c1eb4134a444a4adf16505551/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/7e9bd6b6dc8f41448ceaad495e2da09a1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/1866d12aa39c485397ac98c9edfb88101/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/3cd6a9cb42774008ad553c1ff1b647d91/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/9c6ed829937f4036b7fabcff7173cdab2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6f14e9defc694da98c58fd58d3a358481/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/54dbf7bb6af447298c7637a9ada989ac1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1e3ffb2e704744d6a73cfb79cb38619f1/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2370.00 ((SQL14_RTM_QFE-CU).140621-1135)
+```
+
+# SQL Server 2014 RTM CU1 - 12.0.2342.0 - x64 (KB2931693)
+``` powershell
+# SQL Server 2014 RTM CU1 - 12.0.2342.0 - x64 (KB2931693)
+$outputFolder = 'c:\sqlsyms\12.0.2342.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/57c252c885d8450b93688037679d5db22/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a35c73537ad64f2ab17ad8ef76ceeb4c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/550f9e5b95f44c42a77d2f32154b77eb2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/b97e3ca52a8e4182992f891a812e911d2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/65b8869fb0b44abfaf9f3635bb4c694f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9e454a85cdba496dbb47c8aeb1d5c66b2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ba6cba69141549d4b828b2e3a8e69b981/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fe5ab059d8de48b6b74bd26c7c0015ca1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/318b9d34af1d4e1780ef5277e5a5a8741/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8f42604977cd4be4a8c3d12f390048cf1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5460fb87c3d54751906607c8a455f81a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+```
+
+# SQL Server 2014 RTM CU1 - 12.0.2342.0 - x86 (KB2931693)
+``` powershell
+# SQL Server 2014 RTM CU1 - 12.0.2342.0 - x86 (KB2931693)
+$outputFolder = 'c:\sqlsyms\12.0.2342.0\x86' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/74815ec15b4c4e5db8b41b9f77197a431/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/33e87393cabf44a381d3b0d5f7d36efe1/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/e84e6950792046a9ad837c8451c0bab41/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/2369cc5ed5334d2587d538a1075230d01/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/6982bb0a3859490eae0d8885cc0dd1322/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5d24211092fb49aaa62c76ee12da579f1/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/c98e147056fd4ad9bc50de8c6705590a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/76992783851b4654be2bd359dc53bc831/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2014.0120.2342.00 ((SQL14_RTM_QFE-CU).140404-1739)
+```
+
diff --git a/Errors/PDB/SQL-Server-2016.md b/Errors/PDB/SQL-Server-2016.md
new file mode 100644
index 00000000..4acae0e8
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2016.md
@@ -0,0 +1,699 @@
+# SQL Server 2016 SP2 CU13 - 13.0.5820.21 - x64 (KB4549825)
+``` powershell
+# SQL Server 2016 SP2 CU13 - 13.0.5820.21 - x64 (KB4549825)
+$outputFolder = 'c:\sqlsyms\13.0.5820.21\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/e6a5231d69314339a622dec94dcdd7d32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/96c764d747bf420b9996befef7475c9a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9ee1aa873d2d4b778e6a54459fd7914d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e09ce83a1ee54955a5e6406176a389362/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/62fe14b4c3604a3fb403bb7e22940c362/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/7221bd8eef08483c81a4a857dd6587d82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/aa95581843cc476f8b86d487e4f708f51/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/22bf33591a704ff09291525ac1d00d191/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/8f4b1832517446938ef926263aab57cf1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/f8668e661315449497cea566e51c83131/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2633f57463f64221a5ebeff75ed2100d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5820.21 ((SQL16_SP2_QFE-CU).200522-0642)
+```
+
+# SQL Server 2016 SP2 CU12 - 13.0.5698.0 - x64 (KB4536648)
+``` powershell
+# SQL Server 2016 SP2 CU12 - 13.0.5698.0 - x64 (KB4536648)
+$outputFolder = 'c:\sqlsyms\13.0.5698.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0271f8481dae4e9493e450b8dc796bc02/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/641b2f06bbc146b38bc05e9b58e36d0f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/72307bde192a4c319454098c20cb912b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/bcd4e428d7c94039b4955ed076e7a3682/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/92812c2e4617474db8111c7804eda4f92/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/5a323ebb0fbc4248b605abd7c0654b2c2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d3cd4e59ac0046c1a6f61aafb00e2c4c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/20e8d53a37e1427cb93fa7cafe5f27aa1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d0bcad819dcc4842929e81a1e9ecb59e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/98ebdb42d04440ba9295070f88407f6a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0148f923aea94af19053f99ba79996682/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5698.00 ((SQL16_SP2_QFE-CU).200215-0125)
+```
+
+# SQL Server 2016 SP2 CU11 - 13.0.5598.27 - x64 (KB4527378)
+``` powershell
+# SQL Server 2016 SP2 CU11 - 13.0.5598.27 - x64 (KB4527378)
+$outputFolder = 'c:\sqlsyms\13.0.5598.27\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/430ef93c7b564dc2a93647e6e1fafc8c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/79015e09729743128701ee4f66f24fe92/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c4b83e706a594c56b9f509cd06c33b762/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/f137caf5bd854030935dcf93b62eeaeb2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/832f21f9f07244ca8ae43ecb5f76fb9d2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1aefde25bf814c2197bd09f7f58513292/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/380b9e486b1643008a409f775f7c8a411/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/001fd9d68d3c4dae8e89c2402fa889021/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/75ccea7cdb124f4a8ececf21620e312f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8a1a47fa116541d3bf3428149ba6b3bb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/186252fbc0884d24b6fe231af0759a352/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5598.27 ((SQL16_SP2_QFE-CU).191127-1657)
+```
+
+# SQL Server 2016 SP2 CU10 - 13.0.5492.2 - x64 (KB4524334)
+``` powershell
+# SQL Server 2016 SP2 CU10 - 13.0.5492.2 - x64 (KB4524334)
+$outputFolder = 'c:\sqlsyms\13.0.5492.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/70ecf5dbd5ef45d58df538eeb5e739b42/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/63e1be959b6b450b974b7736342adbfa2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bf2a1e4b8d03428aacfea5d795e2425b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/fd96f94072a141758a4cbea2812690a12/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4048059f80d943babfc3f6c28cbaea1f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/bb191544f6184394adf2c918affc041f2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d5895ca6c7dc4374b010a96739da4bc21/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/801fb6f15a7f4965acaabfab3e987d9c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/c3151df89b1c457dabf76e34c04f1bb71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6f298cba9ac5443cb1450d8082c0c3011/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/006c2ae04bf045c0a9b5effd267136ad2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5492.02 ((SQL16_SP2_QFE-CU).191004-1836)
+```
+
+# SQL Server 2016 SP2 CU8 - 13.0.5426.0 - x64 (KB4505830)
+``` powershell
+# SQL Server 2016 SP2 CU8 - 13.0.5426.0 - x64 (KB4505830)
+$outputFolder = 'c:\sqlsyms\13.0.5426.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/18b397dfe9034092a48167ec1ec5ea0b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/132b5e0d712b4464be80ed12e1e5505e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/db48420d121b42899a92f0d23dc57ad22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d5acd14328d4434abea6af32ef61536a2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/32d9395ab3de4e75a7e11a1d23cb5e822/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c010f16083f14fab9a85dd2d21893a302/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9dfd9945902246ccb7d504ba4d348f461/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/331c42cbf74a420e81faba8d2c85a3cf1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7acfbd3f08164c9aa7b501bf677cb43c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/d604a24250b64ca6a926842ec51546ad1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1e0e6f6d8afd403bbb31684416b9314e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5426.00 ((SQL16_SP2_QFE-CU).190721-2038)
+```
+
+# SQL Server 2016 SP2 Hotfix for SP2 CU7 - 13.0.5343.1 - x64 (4508636)
+``` powershell
+# SQL Server 2016 SP2 Hotfix for SP2 CU7 - 13.0.5343.1 - x64 (4508636)
+$outputFolder = 'c:\sqlsyms\13.0.5343.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/e4884387ee894c14b9ba32a55b1e4ed72/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/5504c31fbc484a04960c330f5520df7a2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b4414980247d436abdf4cf4c43f5023f2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/47b47fc8b89d47d5a82297cf24630ca02/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/72d0f73f142c4d1f9c2be9ce5c5f9a7b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/66bd5fc8cd934353b7fa1b2db5d1e5382/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/5e06fd5a624848ff9a02a71ddf0c11481/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ca29126933fd43f7bcc35106076ac2471/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/25e8c49501a8498a86d2a13ab329b3ea1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ccd4f61a1ae7416b9caecb49e46c96ca1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9dd288e031a2402dbad6f68c468a1f662/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5343.01 ((SQL16_SP2_QFE-OD).190614-1944)
+```
+
+# SQL Server 2016 SP2 CU7 - 13.0.5337.0 - x64 (KB4495256)
+``` powershell
+# SQL Server 2016 SP2 CU7 - 13.0.5337.0 - x64 (KB4495256)
+$outputFolder = 'c:\sqlsyms\13.0.5337.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/19f0728b189a437db61f6d0a59378c2f2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/27a0893b43494606b4da007056d14b8f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/53f66882dcc948a5ab43ccf35f8c62172/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/26528819a67f4c9793cdb2c6b6d25f022/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f6d28fb6f5ac469a828b160544679d362/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/956090e1037945b2928f4f605b52ded32/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/55ab1c4583324e4181dc2d13638a270c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/4a5ef712546c4ea593b3919fc8e9be3c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b29f002c7c8546f399a8818e0f01340f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/decb2afdf5ad41c48644e8ee74024d501/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e272bf31dd404e02800badc8605d29702/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5337.00 ((SQL16_SP2_QFE-CU).190516-0131)
+```
+
+# SQL Server 2016 SP2 CU6 - 13.0.5292.0 - x64 (KB4488536)
+``` powershell
+# SQL Server 2016 SP2 CU6 - 13.0.5292.0 - x64 (KB4488536)
+$outputFolder = 'c:\sqlsyms\13.0.5292.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/950cfd27fb154e0fa81f5171d3a9e72c2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f4e8c4a23f0e4300b84aff830703780e2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/98e48204764e43beb5a7512730a309542/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/2c6f6ddf2326442bbf1d71142d177eb12/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e677182deae14a179afc8d4cd0de3e682/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/705ca25058a944e6ab3c1ab89d77de3c2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6b45c84e9e8e4450ac26bdc614b491da1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1f44e38a066b4c9aad14b90ea547e5f11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/bcf044a5cfc64d03be7cdf8df023bd2d1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/dad251dee8644e4dbf61bedbcf9a06bf1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d6c736e277fd4baf8e88d3b6d27cff362/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5292.00 ((SQL16_SP2_QFE-CU).190311-2257)
+```
+
+# SQL Server 2016 SP2 CU5 - 13.0.5264.1 - x64 (KB4475776)
+``` powershell
+# SQL Server 2016 SP2 CU5 - 13.0.5264.1 - x64 (KB4475776)
+$outputFolder = 'c:\sqlsyms\13.0.5264.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0bae10a1491645f8a97b697fe565dd332/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/85a6f0d21b0a4d8f96d6aa8049a1c8892/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f5b7a81e036a4be3bc7c1858909869802/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/e8f4359ed540405ebf50b2593e54434b2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/73d85290046448bdbcc3ede97dfc234b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/81dc5887677b47be879138df0c3009b12/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/97818e2e150f41d4a1b3882e98aee44e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fcb62686788c4edab5fbbb3586fa70641/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e3d3a5d84aa04e1c95a508d1a2a121ca1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8f3f2c17b925463ab3be306a8bfbf6191/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/21046a92c3c344459925db3348bed5402/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5264.01 ((SQL16_SP2_QFE-CU).190110-1506)
+```
+
+# SQL Server 2016 SP2 CU4 - 13.0.5233.0 - x64 (KB4464106)
+``` powershell
+# SQL Server 2016 SP2 CU4 - 13.0.5233.0 - x64 (KB4464106)
+$outputFolder = 'c:\sqlsyms\13.0.5233.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/f1595ec49d654c548b60b5b8640881562/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8d1e052738ed4834ac1162b8970bf0532/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9b29b84d1daa4cb690c91697520de38a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7975964f1eb7477988fd520d142465bf2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1be684f3c3984a379a6438f8c36fbb4a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/17bc4cfd173e428fb9eae9da392a49682/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/87146b12ed3649fa9968b622bb55394e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f428b375b3ac4ef38be75a3d7affd27b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/624caa45728c42819a84a8a89279d3471/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1f8acdfa201f4b3fb8fd8b64013b32be1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/45097423fa97421fb2c60e85d141580c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5233.00 ((SQL16_SP2_QFE-CU).181102-1539)
+```
+
+# SQL Server 2016 SP2 CU3 - 13.0.5216.0 - x64 (KB4458871)
+``` powershell
+# SQL Server 2016 SP2 CU3 - 13.0.5216.0 - x64 (KB4458871)
+$outputFolder = 'c:\sqlsyms\13.0.5216.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/f9c66f15cdc3472da5b316372a3cd0c62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4eb925dc9f414f4293fb048931c1d1d12/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2aaea59f054945b1948f09a286af4aa22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/d9a41e1b050741a9915c9f2f68841b662/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/127cbf6e83634f56858c143daccdf3472/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/8cd3001646bb4bee9fa7b29c4e3c424d2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/cef124fae1224970a283718094129ec41/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/3428a25be3a1405bb9e935aa5e5a5f921/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/86edaf9016ec43d49af82793f7361d011/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/25fb6b2428844941bc633974f50616bc1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/df83d51fbc304a579684e3c308750cba2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5216.00 ((SQL16_SP2_QFE-CU).180913-2138)
+```
+
+# SQL Server 2016 SP2 CU2 + Security Update - 13.0.5201.2 - x64 (KB4458621)
+``` powershell
+# SQL Server 2016 SP2 CU2 + Security Update - 13.0.5201.2 - x64 (KB4458621)
+$outputFolder = 'c:\sqlsyms\13.0.5201.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/048d5147a1fb4e80b787588ffc9fc1e62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a75b883c7cf144338e088ca1afe44c472/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/fadd356647c4454191fdf160228f57e72/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/55d8b0e99a7446308229c50cefdd930e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f7a6fc258016430597598d515e0a483f2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/8f9e0659b5514f89b3cac5bdcfc7e3882/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ecb9fb39a89c4e59b3daad0b525fa9b71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/9ecba208484247eaa0a0e2d43c3bbb5d1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d05ba204ab6d4176bfa45358d8bc42121/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/41df1265eeed4d5086844d85018088bf1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8360d2c4f315435cb1a449b1ebe4a68a2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5201.02 ((SQL16_SP2_QFE-CU).180818-0710)
+```
+
+# SQL Server 2016 SP2 CU2 - 13.0.5153.0 - x64 (KB4340355)
+``` powershell
+# SQL Server 2016 SP2 CU2 - 13.0.5153.0 - x64 (KB4340355)
+$outputFolder = 'c:\sqlsyms\13.0.5153.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/fddc412a5dcb40429eda4fb2f4fb09572/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dd1807b4810a4aee89a261e957c2d8f92/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0e02593224ce4b00a8ae88c15f7554822/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7f96e1cef4e24bd58ce1bfb0097d7bd62/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cbb698692191446e8e63cbb247cb4abe2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ce4e0c0acef54b2e889a6e92ce618f3b2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/8b8a156300244f6d998e9518bf3655741/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f332d042c9ba422c8fb4dadb8ad6bd601/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f507bb1cdc6b4c46b06676fde5cdf8c71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9689d6f86afc4da78d5cfb3bfbe5950b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bb2788ca8bc24a8cac395d4371de62422/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5153.00 ((SQL16_SP2_QFE-CU).180628-1652)
+```
+
+# SQL Server 2016 SP2 CU1 - 13.0.5149.0 - x64 (KB4135048)
+``` powershell
+# SQL Server 2016 SP2 CU1 - 13.0.5149.0 - x64 (KB4135048)
+$outputFolder = 'c:\sqlsyms\13.0.5149.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/6d9698a353374e5c938b2acb7ee7ed362/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/37faf9a6bc2b4d16a8d962d486092a302/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/271e230238254765bcd979679d6b56982/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9f9dc614a58242c2a85acc563e431db62/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/bf258f9a750546b6a8b936b4970b7eca2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b896f5579e09485e9d9eec87d67b676f2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3cd9ede70ebf4e4185992fe4fa65b2d61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f31fd9f5e3ef4fe096cf59903c387f4b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/762df1defe62466280d87d81794865c61/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/72d4af7f134e4cb49edcccf5f4cf383f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c5ce87b693a14696b7df5cb69aee3d442/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5149.00 ((SQL16_SP2_QFE-CU).180519-0907)
+```
+
+# SQL Server 2016 SP2 SP2 - 13.0.5026.0 - x64 (KB4052908)
+``` powershell
+# SQL Server 2016 SP2 SP2 - 13.0.5026.0 - x64 (KB4052908)
+$outputFolder = 'c:\sqlsyms\13.0.5026.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/efc619ab5524425aa224c623beaf4a662/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/104358b4c4b04eec8a75e36af274c29f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/cae1133e7ab54002a38c876e49559d222/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8f07285b69314e478c481af6c60aa28e2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c390e4f8204e4d87a76a44032594be0d2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/4f2f9273fda643d4a2dfd31a67e93a0e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7866454b831848c5b5de93b2b03fb8491/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/445daee2af1a43f295208380348074031/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/6c004a1c95204734b6cef4f8511617421/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a6047d2982024452905f1fff97fa11421/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ee2324e08c3e4f42acf1572a9cb62d9e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0131.5026.00 ((SQL16_PCU_Main).180318-0835)
+```
+
+# SQL Server 2016 SP1 CU15 - 13.0.4574.0 - x64 (KB4495257)
+``` powershell
+# SQL Server 2016 SP1 CU15 - 13.0.4574.0 - x64 (KB4495257)
+$outputFolder = 'c:\sqlsyms\13.0.4574.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/da14e7ceb24d4c2890b2bde9a03778e52/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d0dc0e05673549c39349963e9c6115eb2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/003624ea1e0642a58b9040c5811ecc372/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c408c0723f014e5f90286bc7c822f7142/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/205c4da00f5c4795a18730dd162b0e5c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/7d0210ad6c38483d82d5a673f656490b2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e5157d95993b4804b14b3ba28ac25a4e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6c807a6e0bfe4a3d8ddbebb9c5df94b21/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/04e55a9040ff4d5a901fb9edb3f714ba1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0d0627accf6849419318444c37eb8fb61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/16d8c4351bdc40ac9997dfc601968a8e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4574.00 ((SQL16_SP1_QFE-CU).190427-1658)
+```
+
+# SQL Server 2016 SP1 CU14 - 13.0.4560.0 - x64 (KB4488535)
+``` powershell
+# SQL Server 2016 SP1 CU14 - 13.0.4560.0 - x64 (KB4488535)
+$outputFolder = 'c:\sqlsyms\13.0.4560.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/6a1934433512464b8b8ed905ad930ee62/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4d031e02b20c495c8581a9a757ae5fad2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/fe7ef391534148c79622e391200336c42/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/55eb1336f7f74ba48038b7c00dd46a0d2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cf41b9625c804b5c8cbc1a77ebc6330b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9179e43956784d1ebdbffe52d6a40c5e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c5be83b1f16440bc8f708236c273c2051/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/15a13e10244142eb9d45aff1353423771/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/a7b733870ad24fdfae1196da3201bee41/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/33d27befeb5c4432830896ac70de90501/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/9d0d577195464804b2e7e408f64f87d32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4560.00 ((SQL16_SP1_QFE-CU).190312-0204)
+```
+
+# SQL Server 2016 SP1 CU13 - 13.0.4550.1 - x64 (KB4475775)
+``` powershell
+# SQL Server 2016 SP1 CU13 - 13.0.4550.1 - x64 (KB4475775)
+$outputFolder = 'c:\sqlsyms\13.0.4550.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/a9a4c14c343f48969f80364f590898602/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/12140f43a3c84dc99114f1db9d63442b2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/2485f60633124761be7e478491159c092/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4d617c540beb4fc59140e9f8547c57962/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c3061b6d621e4d1081838f523ef808d62/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/22da8e8de40543f8aa01fb1b02a60e5c2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/1a8accfb14c14072a4929654c400f8491/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c765c8f7785e4598b640f828d81fd9851/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/30268bd8d01d40d0be47fb9ce30522021/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/4c1f27348acd463dbe00df9477d840c51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5c4f7f0fbb6a42689720fe6353a343e92/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4550.01 ((SQL16_SP1_QFE-CU).190110-1903)
+```
+
+# SQL Server 2016 SP1 CU12 - 13.0.4541.0 - x64 (KB4464343)
+``` powershell
+# SQL Server 2016 SP1 CU12 - 13.0.4541.0 - x64 (KB4464343)
+$outputFolder = 'c:\sqlsyms\13.0.4541.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/d3080f42570f4bf0a4a837a8895ca7902/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/4dce2e3f19f74c31b5a6ac2af6a9d8262/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/18954e55372343d5a4d6681895c263ea2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9aac7f2866b540b4ab2c1b9ac9e577a72/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/8093743906d24ebbbaf34109d536867b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c7333000708848b794283812c1bb4c1f2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c1238bf343b747f7b8b337f438942c711/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/7f07d29b92d74e038aec8d7d0dd4b36b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/98c1ec14b1674f1c86ddd4ceb6ccf6fa1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/06a0750893f44304ad32a17a180927f21/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/7162e87a93b346bba5752ed81f9b57202/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4541.00 ((SQL16_SP1_QFE-CU).181026-1658)
+```
+
+# SQL Server 2016 SP1 CU11 - 13.0.4528.0 - x64 (KB4459676)
+``` powershell
+# SQL Server 2016 SP1 CU11 - 13.0.4528.0 - x64 (KB4459676)
+$outputFolder = 'c:\sqlsyms\13.0.4528.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/49f484665e944b7b955f47ac457f6f132/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/db189aef1bba4446a2162ff54266b4ce2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/e1bc1af368224105abe4120dbdb73f832/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/33537b3dbc714ad39948f5a027e02e042/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/d4a5c566de5f4e8cbc0724155e6897252/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6abb1e2ee2324531a59ef3e3532c7a012/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/af8f4fe9f42b47208ffae42cd1cd846d1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2da374ada649478aa35648edc58188811/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f073ed383da5472da181faca36520b1e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9f53ea00e8104275af6dbf64e1b6a3591/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2dc4533ebfec420a88bcb188833b50db2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4528.00 ((SQL16_SP1_QFE-CU).180830-2114)
+```
+
+# SQL Server 2016 SP1 CU10 + Security Update - 13.0.4522.0 - x64 (KB4293808)
+``` powershell
+# SQL Server 2016 SP1 CU10 + Security Update - 13.0.4522.0 - x64 (KB4293808)
+$outputFolder = 'c:\sqlsyms\13.0.4522.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/2c80618f9f82487ba2385a9cc3ddf88f2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0fae990bea634884b2bb03ef48ae0f9c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/744610eb2fed4fe28992cb1051af89f52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/231b6d23fea44f0e9978b2903e55f98c2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/9ebc1faac19940a2913209dedfe0a8fb2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/920fc8ef2b144b92b9e500f34c7a71292/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/0f4ea0db1e374ab5aa9c527249a56a5b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/48c8d8e079b5402da40b9db2b50d98381/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/332f649e9f7a4444b0e7f810cfe46daf1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/306b24badfce478b88e7cc9bf4f158ba1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/1900f69e405d454783d12534bc3e62232/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4522.00 ((SQL16_SP1_QFE-CU).180717-2208)
+```
+
+# SQL Server 2016 SP1 CU10 - 13.0.4514.0 - x64 (KB4341569)
+``` powershell
+# SQL Server 2016 SP1 CU10 - 13.0.4514.0 - x64 (KB4341569)
+$outputFolder = 'c:\sqlsyms\13.0.4514.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/eba3127f55a6490b925ac53a6af5ef262/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c36664a87ee44edc82989935ce8fa1ad2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7b867a51f536452a95636acf588d0cef2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/4f050afd2b5b4cacb6ff7c302f5ce5c72/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e4ce24f005df4299b285c9da1050c01e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ad7c0ab9750744a9985d59afa1474dda2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6a522b1480b54288a132ac67e8da49e51/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/e63e19d43fb24d81b84c1208c96984ac1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7f5068607ec14c409d9d04c56ac9e1731/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0e87037690c64c06ac41a9db319a970f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0840ef6023a7422f90acbfc2bfe60dfe2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4514.00 ((SQL16_SP1_QFE-CU).180622-1535)
+```
+
+# SQL Server 2016 SP1 CU9 - 13.0.4502.0 - x64 (KB4100997)
+``` powershell
+# SQL Server 2016 SP1 CU9 - 13.0.4502.0 - x64 (KB4100997)
+$outputFolder = 'c:\sqlsyms\13.0.4502.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/ee6e6cc4172f49ca87933514afe4929b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2676f65ef4f14e1c9a6b62a9d1522fe82/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7dfceb96c58c453ba4e3d8a1ca78615d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7f8a037059454eba99b698a776696daa2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/334ffbfb732c4fc79e4e3513e5027a3d2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b561f4e3c38e4562b7972ea695cffc4c2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/cf91d9718d41483bb4606f54896f9c3e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fca548701ad64b9eb0f58be2ab0dccf11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5cc13763d5064b6d97d9f1cc1ecaa20c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/beda030e12954da6a9eba8922683f73e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2a17dec666134d14a64d767ef4aebe202/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4502.00 ((SQL16_SP1_QFE-CU).180514-1334)
+```
+
+# SQL Server 2016 SP1 CU8 - 13.0.4474.0 - x64 (KB4077064)
+``` powershell
+# SQL Server 2016 SP1 CU8 - 13.0.4474.0 - x64 (KB4077064)
+$outputFolder = 'c:\sqlsyms\13.0.4474.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/bad09995ed274e949232badd3f3d7aa82/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ddf784b88c44464fbbef4a3c309436392/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/04aab3b7206c46a9b777313cc33d57402/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/ef2f100c08554e4398658ca191205f162/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4b20376587754240a8157ec3f5c827102/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/61506f0f9d5240c18416dae8f808755e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7e93929a70af49a98c0d3a9d10d24d841/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/e66b4e3643c94f26862bcdbcae4df7901/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/48c28f25191a4ee0b7a4810e6c0f29f71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ea990dbdb39247fbbd083d2de5f867d71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0d79a37d6dda4c28aa9dea14724f12f52/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4474.00 ((SQL16_SP1_QFE-CU).180224-1012)
+```
+
+# SQL Server 2016 SP1 CU7 - 13.0.4466.4 - x64 (KB4057119)
+``` powershell
+# SQL Server 2016 SP1 CU7 - 13.0.4466.4 - x64 (KB4057119)
+$outputFolder = 'c:\sqlsyms\13.0.4466.4\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/4fb77886edcf4e9d89fac79ebf7d1fea2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/04bc3e5a0e4f471e9b96d67c5e3f36df2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/75cbabc14dbe4b78b399b0e5f88a97092/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c68cc2cb6c074e39881a844eec9778f82/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/bf98529869b64e518f5afd9c0c5079c82/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9215ec6a12bf4d20a9e6798034e2036e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/33d2f4d2ce9c4e3ebb58b76dd1c289a81/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/7aa9d469ad5e42b8b414338158cf15b41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f86b9c579a474a3fac7812d34b52bf221/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/893d1525c26945cf827a45f9b043e5eb1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c583e52b9d604d4da427ceb43ab482252/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4466.04 ((SQL16_SP1_QFE-CU).171222-1041)
+```
+
+# SQL Server 2016 SP1 CU6 - 13.0.4457.0 - x64 (KB4037354)
+``` powershell
+# SQL Server 2016 SP1 CU6 - 13.0.4457.0 - x64 (KB4037354)
+$outputFolder = 'c:\sqlsyms\13.0.4457.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/db2fe36302c64a1a86813d0549b22b012/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/9cdf1937cd024f1e82060b74e9e60e512/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/046a40a60ddc486086561319f5387e142/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/2547dc27f1324d3fbb7daad4793c6cf12/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1a145eacaf05435abe69b319f8277b9c2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/90a48bebb7f84ca9884ca115fa7ed9c32/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3daff9d0abe941b08003e61197ce4ede1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/9bb39bd5bd404d9b8693d476a4976c381/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b76a518cfcad45f5bc36600f200d8df51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5028c6a5a3bf40fb893b7034820c6ea81/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/853cc6b85b6049bb8e28d35007644cf22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4457.00 ((SQL16_SP1_QFE-CU).171108-1347)
+```
+
+# SQL Server 2016 SP1 CU5 - 13.0.4451.0 - x64 (KB4040714)
+``` powershell
+# SQL Server 2016 SP1 CU5 - 13.0.4451.0 - x64 (KB4040714)
+$outputFolder = 'c:\sqlsyms\13.0.4451.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/0adf0efaa0674d52b42ede2653b2bc792/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/9c9bc2d7227d4a44826cc162dc9364782/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/00a5c9de969c45918756df4cfd8c6f682/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/01e048da3e0c4ca4bdf473066c7cf6c62/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/bc8c89cf69be4fd3a3364dcb0a72dca52/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/360009d4947e4ac08be932e3f16b2ccb2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8a5bedd54909459eb41b76521723683b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/57c8fa0d82c643d290ab9530b788e4d42/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4451.00 ((SQL16_SP1_QFE-CU).170905-1437)
+```
+
+# SQL Server 2016 SP1 CU4 - 13.0.4446.0 - x64 (KB4024305)
+``` powershell
+# SQL Server 2016 SP1 CU4 - 13.0.4446.0 - x64 (KB4024305)
+$outputFolder = 'c:\sqlsyms\13.0.4446.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/c880090278d9483faab63d7472a628ba2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/ea6d107876b848c990276c5164f78e222/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d41f27d7505149d2a9d14483961593b92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/92e8bee376394dcb8a2a52800b39f5092/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/149150e4cdbf4baf80620e32ef97fc012/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/6cd22e703a544fac840bae7b3ab83c132/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/76b434a7b537413da49b849be7bbd2b91/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/eaaa9a9973f6411495bf3d00bb06f8f11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/b8813f5978cf4a3dba90881436bb77f71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0a7f20ebf1024eaf8a1ffd2b239bfa4e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/eab3cf5200994d3eb10eaa1a884a3ef12/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4446.00 ((SQL16_SP1_QFE-CU).170716-1734)
+```
+
+# SQL Server 2016 SP1 CU3 - 13.0.4435.0 - x64 (KB4019916)
+``` powershell
+# SQL Server 2016 SP1 CU3 - 13.0.4435.0 - x64 (KB4019916)
+$outputFolder = 'c:\sqlsyms\13.0.4435.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/8fe09624812049058da82aa8f1dd66f22/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/558322e65c7e4b328939747b49d560902/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/470aff4a91ac4921b55a2172551f7bf12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3149ea1cf3e144a595628fffafeb88fd2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/0d9fe1a60fe342c1a1ce09de7ccdbd2a2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/225b08e74e474943bc4e1122946cbf532/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/de75b23f05c440f9a563565af615e1391/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/08b0902123f545b6bbbcd419f6f8cb5b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/cc9c2fb0544943e48eb8e300255313191/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/320d5955652048e78f2fc910d1eef2d51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ded87b2c33dd49fd93d4daed66d9092f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4435.00 ((SQL16_SP1_QFE-CU).170427-1707)
+```
+
+# SQL Server 2016 SP1 CU2 - 13.0.4422.0 - x64 (KB4013106)
+``` powershell
+# SQL Server 2016 SP1 CU2 - 13.0.4422.0 - x64 (KB4013106)
+$outputFolder = 'c:\sqlsyms\13.0.4422.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/cb638c12b4674d87ac7357f16e8ad0c32/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/6cf52c50743545e3b6a49ff43d1379152/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bc808d257868486f8231cded7542228e2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/be2f8736bbab4e6d9dddd5e2ee23c5ce2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7a42c58c49904f169a5aff489be7369b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/997d7a6a523843b08a2ae10c5d75534d2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/c2b0f4c16c5a4e509441c8338aa5ec1c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/28f240977ff44072aa8e8b2a7d60ba641/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/270d0aa365954e83ae7d1df1408d6d9a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3b16a7b538974a81bf76596ef78cb3381/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/65b28e59df5346238c2bb00123ee4d2b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4422.00 ((SQL16_SP1_QFE-CU).170306-1319)
+```
+
+# SQL Server 2016 SP1 CU1 - 13.0.4411.0 - x64 (KB3208177)
+``` powershell
+# SQL Server 2016 SP1 CU1 - 13.0.4411.0 - x64 (KB3208177)
+$outputFolder = 'c:\sqlsyms\13.0.4411.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/268a89d9ed10413ba41fe54bf2d75b1e2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c9ead68f28c24061a124762b8351b6f82/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/74b5f464baac4a9484c931946ae5b68f2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/3c313be76f2444939a67caf043f53d7f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/84c8f12c82c44a1392d6f65ef1a318b52/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/549f12f6d342442cb72a078cabc0b0362/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e2fa7e5dba454b9b88a2a1d96b467fd01/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/751d83a8390f4faba2ebd6aafac7f1d51/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1b95571d967d4731b5e72ed855f469111/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2821e0a9f1074075bdda62de3e7008c61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/826a7546f2db4f3089d413578a2cdf882/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4411.00 ((SQL16_SP1_QFE-CU).170106-1315)
+```
+
+# SQL Server 2016 SP1 SP1 - 13.0.4001.0 - x64 (KB3182545)
+``` powershell
+# SQL Server 2016 SP1 SP1 - 13.0.4001.0 - x64 (KB3182545)
+$outputFolder = 'c:\sqlsyms\13.0.4001.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/1d3fa75eb35540e287b2e012d69785df2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d38058f49e7c4d62970677e4315f1f1c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/cb9e5b8e0483423cb122da4ad87534d52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/13cb00e6ed4d46789fadceb55abddfe92/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c6d08b108b154f8b8431f090dbaab1c92/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c1220065fb9e4e61919175ac9792a2bc2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/f0fd3061c4be4486b3308828ea99276e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f53682311a4e427ba43cc7908850cf9d1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f42433ff7c4b4c52b53875da10d4684e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/961e76a609b04a7c935cd8ad827f23381/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e6e24f9a081b42e3b9e22e1f6414b9b22/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.4001.00 ((SQL16_PCU_Main).161028-1734)
+```
+
+# SQL Server 2016 RTM CU9 - 13.0.2216.0 - x64 (KB4037357)
+``` powershell
+# SQL Server 2016 RTM CU9 - 13.0.2216.0 - x64 (KB4037357)
+$outputFolder = 'c:\sqlsyms\13.0.2216.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/2c007938542145638d786ebdc67c1c9b2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b6c9ba6727b14530bf871a406d0724802/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/477e9070b1e642a9b166ef3b07e1687b2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/8946accd7bb14ec18499ee4c4e5e53812/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/57cbeb8f33464fb69f691482ce8de8d42/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/abd45d29f555480fadf1990a92e34b252/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ff1fa69bac4f4a6ea28eea880c69588e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/f56e5624d87b4a708ca9f6667aba68a71/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1ca1e6c22cb548b296414dc80c64f4ef1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0842b22e9ff84f00bfb066e5a557d3051/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e7ba978114ac4b5b9c032b8f1e1be2222/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2216.00 ((SQL16_RTM_QFE-CU).171109-1343)
+```
+
+# SQL Server 2016 RTM CU8 - 13.0.2213.0 - x64 (KB4040713)
+``` powershell
+# SQL Server 2016 RTM CU8 - 13.0.2213.0 - x64 (KB4040713)
+$outputFolder = 'c:\sqlsyms\13.0.2213.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/7a0af19f84774e599332cd0db1f1278a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f70df0f1cf3d45b5988d87fa813fe74b2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f3809f64b9a8419ea5fa8f35a32197452/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7faa03153e474bcc9d8205a253de66df2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/96aa656777b0457e9b21ebda6ec38f1e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/64c55c4c8b894ec191c9a512d64d05932/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/2610adf0ecd04828af0815caf79e19351/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/901b0c2906cb48e99fb09e1e8cbe9e751/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e47bab9e66704c33be9edb1c3468aee41/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/07f0e5afd4634724b92cd6d5ac50fbcc1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e8186d9274b8415c90bea6dbee62765d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2213.00 ((SQL16_RTM_QFE-CU).170905-1430)
+```
+
+# SQL Server 2016 RTM CU6 - 13.0.2204.0 - x64 (KB4019914)
+``` powershell
+# SQL Server 2016 RTM CU6 - 13.0.2204.0 - x64 (KB4019914)
+$outputFolder = 'c:\sqlsyms\13.0.2204.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/cfb9f1f67ed94f2ca6ce13a87b281a912/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e319d277318a43f7bdbfaf7c09e8ea0d2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f85c7c7fbcfe4fe2bfde5a9d3faaede92/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/0bbbf57d7cc6413fbdade7dd8e806f682/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/10777de046a746f1b118cfcc17d06c2b2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/0152302a8c624ace9201fe5842e87e012/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/3b988c8fe7f04e3f974a275a0eeeeb0b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b7d84e7993fb4451b2cd97adae2171001/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/c6b1fbc9d12d414b906f7be297838d8a1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/788729ffd2354809b96f60469725732e1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0e8610c36c354d36986910b6ef9f99f12/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2204.00 ((SQL16_RTM_QFE-CU).170420-2326)
+```
+
+# SQL Server 2016 RTM CU4 - 13.0.2193.0 - x64 (KB3205052)
+``` powershell
+# SQL Server 2016 RTM CU4 - 13.0.2193.0 - x64 (KB3205052)
+$outputFolder = 'c:\sqlsyms\13.0.2193.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/29fff1570c614d079dd399bb465245ba2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/51387eb8f90f4726aa9df7dd8a937c432/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/bf13531c7d694d729c441c09b114ba5a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/37c497fe00574995b2275c82bd5448222/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/db92e29b6d7a40a8b447c044382186f52/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c564d1d1af464ec4b23625bc349021e82/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d83d9a08a6304475973f8c1527e9a18b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c9179764a88745b6b27d0340adfe00da1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/0a6f9df489884c5aae89b04a707f77991/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/db44013b2c72466ea3f22c14bdedc55f1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/0e65448c6e524b05b5e23432481867792/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2193.00 ((SQL16_RTM_QFE-CU).170106-1104)
+```
+
+# SQL Server 2016 RTM CU3 - 13.0.2186.6 - x64 (KB3205413)
+``` powershell
+# SQL Server 2016 RTM CU3 - 13.0.2186.6 - x64 (KB3205413)
+$outputFolder = 'c:\sqlsyms\13.0.2186.6\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/2ff2ffcd1aec4430a320031a5b39932a2/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/7a54654444b3498ea417d266f13be4852/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/9554edfa9c98497691f273323bcb95cc2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/c8625b8816e14ab5b1ff2831407f971f2/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/3293fd4acafd48539b54f36145afa5a62/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/2581ec9c9a2d477fb3e3b1d87b7a7db42/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/dcb6d2efe1284ce697e4291b198fccce1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/38d5d0c4e3e94a128f0e8e61535485481/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f198f8dfc2304e189df71ef4b47851fb1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/9535038ce47847eca6d1a33db6a7497b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/f4a805d2b05c4cf0ac5538e5c9d3ef122/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2186.06 ((SQL16_RTM_QFE-CU).161031-1738)
+```
+
+# SQL Server 2016 RTM CU2 - 13.0.2164.0 - x64 (KB3182270)
+``` powershell
+# SQL Server 2016 RTM CU2 - 13.0.2164.0 - x64 (KB3182270)
+$outputFolder = 'c:\sqlsyms\13.0.2164.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/940eac419c934059b710be37641e39112/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/61e79d07815549199699608cf3ebd8a22/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/0b0fe3a447d74fec8396a46cbcf4ade42/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/7aee76c9772241c4abab13ba1d825bc02/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/fc8265399db44d05bb66cf0c53d3a9132/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/43431b47b3c242f2a76e2d5ca301d0372/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/956fcfce5bc348a9abe7db682dc7a85e1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6dc828b4ac564e199c26106da4394a591/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/6e06587843f44870abfb873c263bdd581/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3717f27071594c5e976040c9e18032df1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8c33d4ecd80a4de683073c4e36fe87242/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2164.00 ((SQL16_RTM_QFE-CU).160909-1949)
+```
+
+# SQL Server 2016 RTM CU1 - 13.0.2149.0 - x64 (KB3164674)
+``` powershell
+# SQL Server 2016 RTM CU1 - 13.0.2149.0 - x64 (KB3164674)
+$outputFolder = 'c:\sqlsyms\13.0.2149.0\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\sqldk.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqldk.pdb/175d1d9f3e3f4aa5b25e8defb354e9282/sqldk.pdb' -OutFile "$outputFolder\sqldk.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c887519f85984f93a45d804fbd9efa7c2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/52a90f506b934a63bee7f9acb3ecbd592/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\sqltses.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqltses.pdb/9285360a585b4659a9178b94d54195e52/sqltses.pdb' -OutFile "$outputFolder\sqltses.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/431d7cd65d56492084619a4f2be7de342/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a4c480d343034344a88ac1b39f672b152/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/501ffaaba03a405c942a3636f744d86f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/df614cefd0a64503b3f9a8b8e28d62ab1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7f75cde05cd84c74b27b97fde6200cf21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/986ce3d6b4334bacb5c924134d2883971/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d67b0283c81c4a93b4d4ede2af0cec522/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2015.0130.2149.00 ((SQL16_RTM_QFE-CU).160711-2134)
+```
+
diff --git a/Errors/PDB/SQL-Server-2017.md b/Errors/PDB/SQL-Server-2017.md
new file mode 100644
index 00000000..2eac5632
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2017.md
@@ -0,0 +1,522 @@
+# SQL Server 2017 RTM CU21 - 14.0.3335.7 - x64 (KB4557397)
+``` powershell
+# SQL Server 2017 RTM CU21 - 14.0.3335.7 - x64 (KB4557397)
+$outputFolder = 'c:\sqlsyms\14.0.3335.7\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/eb5a565f1039423ab57f1b0c07f2cf062/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a95c4feb63e24e859cc3ea84c66738362/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/15abf4bc294f43439f8d26bcc081b7852/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/0b714c2255d248be8e2772ed2614c3252/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/cfa406dc3e6f44fbaecf3bb7bfef85403/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/74e2955f444d4a999afc17aebfc101b62/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e2a53588492542619e2df6eb2f15fbd81/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/0611eac031eb43e1ba9b7df173a4baaf1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/bee1e0c4ebf047f58848229e8e8080301/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0f83d02887a64bb38055cec85d9816351/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ebf1bd99202241e49994b70abd89b06c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3335.07 ((SQL17_RTM_QFE-CU).200613-0316)
+```
+
+# SQL Server 2017 RTM CU20 - 14.0.3294.2 - x64 (KB4541283)
+``` powershell
+# SQL Server 2017 RTM CU20 - 14.0.3294.2 - x64 (KB4541283)
+$outputFolder = 'c:\sqlsyms\14.0.3294.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/bee1fad8fac344258a08781c73e86ed52/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/2a5c5b4ca34b4406b4458d69ac3e4cae2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3875b7d16696416f9301c11cef45b20d2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b50d619829294819a0b07403e79e9ded2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/32ca1afe76d247de8ddeb0b8bed119763/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b33c89a9f1bf48dab0da20e1e1f14b372/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/13f6629965894b1a898d22a6075e9d321/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/c56991f0bbb44efd9550bdb640b930921/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/c57fd569df0c4b71827c8a73da6ff82f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/120c44132c254546a280305c87974fd41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2187f716c3254ca882a146416b6231d92/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3294.02 ((SQL17_RTM_QFE-CU).200313-2113)
+```
+
+# SQL Server 2017 RTM CU19 - 14.0.3281.6 - x64 (KB4535007)
+``` powershell
+# SQL Server 2017 RTM CU19 - 14.0.3281.6 - x64 (KB4535007)
+$outputFolder = 'c:\sqlsyms\14.0.3281.6\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/77d53ce9ab0d4543b6625be66af453422/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e19ffa5d57f24259a2a98fdd90289e152/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/f421b91603c34ba99b30746fd8059d772/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/672558a3b8504bb0b1dd7bcd11f9c84a2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1e174cf6018a4087be3d9fb563fe1b633/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/971fc73e739647b8998f3a158cdeee4f2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/84c15d654b424537b1947ac49c2bffef1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/b69205eb69a8423dbec803e670916fe51/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7eec0edeb9f9430c9958d3a06448b6c21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2a200d24c4da4a678c4ebe925100e6e41/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e13e064b30614472be3ba2d950f0a78b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3281.06 ((SQL17_RTM_QFE-CU).200124-0352)
+```
+
+# SQL Server 2017 RTM CU18 - 14.0.3257.3 - x64 (KB4527377)
+``` powershell
+# SQL Server 2017 RTM CU18 - 14.0.3257.3 - x64 (KB4527377)
+$outputFolder = 'c:\sqlsyms\14.0.3257.3\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/0cf29846f3c24e78ad6c68ffc23c958b2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/edc4c7b44f9842f5ba869f71b5d409d72/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/e9b9a716dd8a4c80a1cde404d18ca8142/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/ee0cc71e1a194e49bbb83839ce3b7f342/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/18f1fdf24e1c4a2b8a647f005476ea353/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/92014d8cf1724ba281afe5be39449fce2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/88d125cb6c734230bda07306dc5a44971/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/4f77a328940e448e97c9bb6e817b34c71/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2572674dae244c15af96c8fb8dbc76891/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ae6fdf41e3a34796a31096c15ffe09b71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/46d8ae1b2f884ce8bd9bbf46c2a5a54e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3257.03 ((SQL17_RTM_QFE-CU).191116-0848)
+```
+
+# SQL Server 2017 RTM CU17 - 14.0.3238.1 - x64 (KB4515579)
+``` powershell
+# SQL Server 2017 RTM CU17 - 14.0.3238.1 - x64 (KB4515579)
+$outputFolder = 'c:\sqlsyms\14.0.3238.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/5e50e02ad0cf43da8949c7caa26c49f92/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/fdb5ae5d994745f5b29bd9e5a44cfbac2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c4ff40dd1b834161b04985c7e21556dc2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/4bef8588459043f89f045f2cb9956e342/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/4bf28ededa384502a61929dae625e0833/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ac756fec0f804ed4b6bc3fecccb7ed152/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/2d58e76525314e67b7158d5b971973471/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/41ff67e8d1d94d7782771b2ceb7d91461/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/3567f1e7bd304700a1315891a9bffcf21/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/74418625e16d46dea9c4dabf1f3c97711/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c3a61d285faa4b848c2ad7e7b02c54742/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3238.01 ((SQLServer2017-CU14).190913-2228)
+```
+
+# SQL Server 2017 RTM CU16 - 14.0.3223.3 - x64 (KB4508218)
+``` powershell
+# SQL Server 2017 RTM CU16 - 14.0.3223.3 - x64 (KB4508218)
+$outputFolder = 'c:\sqlsyms\14.0.3223.3\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/cc2cb01a74b84342bad196721c4b229a2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b6830a8a29e746f7a9e334bbc16f73cd2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d4be23dadfa94b4eaedf98e747a35f7a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/60134c9480e24546b6dfcfa95981db792/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/942175c9b9254c3a8143db7613f4720e3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/3d22f9effe75470b9cb73b22e30ee0042/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d172da872f4f42faa859e1e262d8f1fe1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/2945c675b7f4457892e17485e328b6e11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/05671d5db5a04a3e87f616b6a172e64e1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3ba3e96155514539bf263e91196a59591/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/238777599d2342ada234a90d46ae10cd2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3223.03 ((SQLServer2017-CU14).190712-2335)
+```
+
+# SQL Server 2017 RTM CU15+GDR - 14.0.3192.2 - x64 (KB4505225)
+``` powershell
+# SQL Server 2017 RTM CU15+GDR - 14.0.3192.2 - x64 (KB4505225)
+$outputFolder = 'c:\sqlsyms\14.0.3192.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/122fc135abf24465ba9e6be0a6274eb32/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/207221dfd01a4ecda2e45a5be4afa8342/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7f9c184f5b2944cc8c1bdba07670f8412/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/9559bc0f3b5e4cef8a84ce08601fe3df2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/24b12b3f43be4a27a4139c39849ef5e33/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/efd30261c88042a2a49e19b21f90ef002/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/cb6a1cd50b654d0a8474f4ed74255e6c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/139c16954bd04111a21c3d8e834e5ea41/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/e0243d6070c94969a2aabfc1c32fb0a61/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/439bff18122840658f0e9240ffda29301/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/107813d2dfe94332aec5cba570dfa4082/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3192.02 ((SQLServer2017-CU14).190615-0703)
+```
+
+# SQL Server 2017 RTM Hotfix for CU15 - 14.0.3164.1 - x64 (4506633)
+``` powershell
+# SQL Server 2017 RTM Hotfix for CU15 - 14.0.3164.1 - x64 (4506633)
+$outputFolder = 'c:\sqlsyms\14.0.3164.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/5f0e68f3162641ad8d035c501c0b697c2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f90eacadd1904231a7dc6326c4ab53af2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/7ef8fc8b0ed04a9f9dc7872b2ddb5bdb2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/05f95c5ac74d4eb599b922c69dbc39c12/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/6775b239a8fe440ba6bdae93bfcb524c3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/2be30f46dc9c414aa6ec8855811226fa2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6c08af17cbcc4ae6b47b9b000ba2df9f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1f39d18ce9124de3a8af1fb9bf3b16b21/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/beef7d8475d8486bb1acf9603c370d9b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3c4f56edb20a4d7f903ea7985ee392551/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/e5610121ea0b430ba050cfd7de9a55a72/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3164.01 ((SQLServer2017-CU15-OD).190529-2332)
+```
+
+# SQL Server 2017 RTM CU15 - 14.0.3162.1 - x64 (KB4498951)
+``` powershell
+# SQL Server 2017 RTM CU15 - 14.0.3162.1 - x64 (KB4498951)
+$outputFolder = 'c:\sqlsyms\14.0.3162.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/1dfc724617524d0b81e6c9bfe5a3fa922/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/5b6770d3a2954ad38fcf61d69b2406f62/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d912ea3687524101b23bc88c89be16062/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/7e76c3114d2445fb957c7e2f8d395b722/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/f5a9dd15f9e0443cbabb7b93f9d76b233/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/e5f4295c75c6451a885b0d60309760772/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ba6e8c729b7f41a7b6863e2c11cd13561/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/1b3d232725c54f5dbd6e80715545efad1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/67e2b8702fa745f88d74d149c65524b81/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/1b81dfc91133481ab49da77d8e57f3c61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/d7da732da1224c3dbbf571c85cdf65532/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3162.01 ((SQLServer2017-CU14).190516-0147)
+```
+
+# SQL Server 2017 RTM CU14+GDR - 14.0.3103.1 - x64 (KB4494352)
+``` powershell
+# SQL Server 2017 RTM CU14+GDR - 14.0.3103.1 - x64 (KB4494352)
+$outputFolder = 'c:\sqlsyms\14.0.3103.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3d4403b9c1644b51ae4e8518d6ce10852/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/dd1cd60ea219405ba26b3549a087d7cd2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d8204dcd590548d0886483894461e2712/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b5b369edbeb54c34929c63aaeef0c56a2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/6e83a97d29fa45dcad8a1531728528103/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/201a31638edb45cea8fc7e3089c1b8bb2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/ccbb2144f26d47ecb0117313489d42d71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/8e895540bc1b48b1ac1056481e757a001/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/02e0af9b69b241f4a9f63962d2f7b3e51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/55a7586e0a684168944bc84d8b3f3a7b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/13efe2857d1f407d8c3eafab072d28812/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3103.01 ((SQLServer2017-CU14).190323-0508)
+```
+
+# SQL Server 2017 RTM CU14 - 14.0.3076.1 - x64 (KB4484710)
+``` powershell
+# SQL Server 2017 RTM CU14 - 14.0.3076.1 - x64 (KB4484710)
+$outputFolder = 'c:\sqlsyms\14.0.3076.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/9dc4b5b9129b4d90aca76c656a8a7cdb2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/12a634d42b0a466fa8892f030ec414cf2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5a0ee5562cf744fe87b6f8f0e66342a62/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a9e9815a726f4f658305f67cbcb7ba432/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7b7b6d8bbf4e4baba8437e4623514f163/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/74bda280c8e8462b879a8d1c6684d8b32/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d9b0c3d63a0d48ce80d7ae4e6bd2faae1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fb39d136087c4150905913a5a901dd081/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/4a46951e68434ecd93a667401da5c63c1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ed48cfbb0bcb463b8ca48ab657da16221/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/8505782dfd8c4d589bb569f27dda72282/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3076.01 ((SQLServer2017-CU14).190313-0159)
+```
+
+# SQL Server 2017 RTM CU13 - 14.0.3048.4 - x64 (KB4466404)
+``` powershell
+# SQL Server 2017 RTM CU13 - 14.0.3048.4 - x64 (KB4466404)
+$outputFolder = 'c:\sqlsyms\14.0.3048.4\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/db7d37e644684c76aca6244566f04ddb2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/deb451448a184a019d15fbecb4b3dbd42/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/154b616962204fc98ab8ba2ac0944fd62/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a8ea1f9fa4a8417b901a2e9c1108cd532/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/162006a3c04048a5b3c3bd6db4d37d5c3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/254e81f1cf6d407188805d66c3fc8a002/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6ad53123fe984297bf11178b0f6833b61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/64e83552a4324544b14f7ad910d6dbd31/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2750700543774a219883ff4fd8f9b1c71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/045b89b9000c427aa2d7eb19476ead711/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/bb0704a30a134cc8a0436285de13449b2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3048.04 ((SQLServer2017-CU13).181130-2004)
+```
+
+# SQL Server 2017 RTM CU12 - 14.0.3045.24 - x64 (KB4464082)
+``` powershell
+# SQL Server 2017 RTM CU12 - 14.0.3045.24 - x64 (KB4464082)
+$outputFolder = 'c:\sqlsyms\14.0.3045.24\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/e1a278df9008417880471554645ffe0e2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0f960e0b699d427db586034ed7b0fdef2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3901620f11594833aa71280f8375f0be2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/9cfe911d498646b8ae4f2f50a9d067a42/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/27ed7bd2e8a7400e886335247c98a3073/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/9ab679cc975b4b1ba1d15706afd6450a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/d2812bf323f14d81a9b099908c9ffff61/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6615c4c7be0c407697ca045825239c131/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/196df91bf910437c9fd9acfa2117826f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/6cc447fe65eb4c59aa455ccbf9b251a91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/5cc64f878ee841aab5448338015a5c952/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3045.24 ((SQLServer2017-CU12).181019-0539)
+```
+
+# SQL Server 2017 RTM CU11 - 14.0.3038.14 - x64 (KB4462262)
+``` powershell
+# SQL Server 2017 RTM CU11 - 14.0.3038.14 - x64 (KB4462262)
+$outputFolder = 'c:\sqlsyms\14.0.3038.14\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/33fb5fb0d73a441090eb718412270dbd2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/c9ed01ded3264172a6a840a1510a9e082/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/58093a59f19b4a3398ce13fe13ed92ab2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/93188b40fdeb4d9b84f1b0825df6e5402/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/652be97b165947e18523339f10380c3e3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/056712b91a6b43a98b8ddb86e19d07832/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/767d4249b3b342ccb953f3ff28a3477b1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/eec4e581cc1e4e9289b0ff1027f761c21/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/95f766b77d5340cf91e4237c1b5cb1d11/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3da659532f314c3d971b21293e4fbf911/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4ecd8c32a3744a72b86f59e40106e58f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3038.14 ((SQLServer2017-CU11).180914-1944)
+```
+
+# SQL Server 2017 RTM CU10 - 14.0.3037.1 - x64 (KB4342123)
+``` powershell
+# SQL Server 2017 RTM CU10 - 14.0.3037.1 - x64 (KB4342123)
+$outputFolder = 'c:\sqlsyms\14.0.3037.1\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/bd9f49c63360495684146dfce60449ca2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/a7ac68d2a55042d4b014d983ca4dc5652/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/89f5a5f6f6cb46308ee263616e47a1e52/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/73b2fdabd985459abcf4b906d49acabe2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/1914abc38f5c4d259a75f0d60f99fb503/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c440983f340f41279499f51c06f0796a2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e67f311e495e452cba574599785f478f1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/007f32ffc751482cab8cce28fae4eaae1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/d1e4131926fb4197a56f62d1aec4b0891/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/04067943d1b14ed58777d6bc6307223c1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/7726181ee6a44f1bb557e413279dd4ab2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3037.01 ((SQLServer2017-CU10).180727-1609)
+```
+
+# SQL Server 2017 RTM CU9 + GDR - 14.0.3035.2 - x64 (KB4293805)
+``` powershell
+# SQL Server 2017 RTM CU9 + GDR - 14.0.3035.2 - x64 (KB4293805)
+$outputFolder = 'c:\sqlsyms\14.0.3035.2\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/2cd60104c58545f8930beb63ebc961542/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/0960eef2f5f74555a6bc0201f30b2dd32/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c48a041fc73742acb92a2483901e3e232/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/97b1e169ef954a2fa0624d2da36be4712/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/04a742d9881d40f69a5b7d65befc114c3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a91a2cb72c0b4147ac810d5c0fb0b1822/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/17e84ac011b740de94a0e096713ed7061/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/89f68be128904de1aa86fcb9815538161/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/f2c0eb19ab6b47609637f59efac0a5c71/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/0f67bd671bda40e7b9498d504d67d9c71/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2fed6d1f4fc74711a8088b94f98d10062/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3035.02 ((SQLServer2017-CU9-GDR).180707-0051)
+```
+
+# SQL Server 2017 RTM CU9 - 14.0.3030.27 - x64 (KB4341265)
+``` powershell
+# SQL Server 2017 RTM CU9 - 14.0.3030.27 - x64 (KB4341265)
+$outputFolder = 'c:\sqlsyms\14.0.3030.27\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/66034bb7692f47b68d91508392748a702/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/cd0f72d319dd45b48226d59a0a4d1b942/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/d62f64ac53a647e4a5be66a50a609f542/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/cd65ee0c97594540ac37cf1346fd46072/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/20879ea42b6046c6ac042fd5917732433/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/ffcd6d3fd4724d65b7f0c3c1dcd3bbbc2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9af640605b0941d9b7934ab9eea3acdd1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/31ea27e79fc14bb991e62f4060d7c3a81/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/7805edcb819f4e70ab4d14520165787f1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/097b87a6547a4e8d87b2f63f8b514e0b1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/764a2e690ea84ab3943f336482774e932/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3030.27 ((SQLServer2017-CU9).180630-0026)
+```
+
+# SQL Server 2017 RTM CU8 - 14.0.3029.16 - x64 (KB4338363)
+``` powershell
+# SQL Server 2017 RTM CU8 - 14.0.3029.16 - x64 (KB4338363)
+$outputFolder = 'c:\sqlsyms\14.0.3029.16\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/5525b238911a499ca15f316ab6c962822/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1399d2afb4264c55b70e45f70f798bf22/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/c50bc63f8aee470a99e4662f43e0d0522/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/35d0d8eb3c1c437ba654cb78cd4fa1e62/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/e2ba4bb806624faa8bbacdae707e61163/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/404b3fcd8cc841ccbe0003b3dfb189f02/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/281f91e3d7d14f3faaa9992d00ba32991/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/28abba31fdde432389c3beb6641c86b61/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/10393de02ddd42ae80046a075942ed4b1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/3ed5a913bd7f49e4b00d13e1e0d96bd01/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/78fd9b633d9d4f15b3fa6cef32db99d72/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3029.16 ((SQLServer2017-CU8).180613-1911)
+```
+
+# SQL Server 2017 RTM CU7 - 14.0.3026.27 - x64 (KB4229789)
+``` powershell
+# SQL Server 2017 RTM CU7 - 14.0.3026.27 - x64 (KB4229789)
+$outputFolder = 'c:\sqlsyms\14.0.3026.27\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/10da85787e1149a58e60e6c0b2c7a1552/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/65dcd0640108491a9e0de5ed8058f1fb2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/293ecb04af0f483b898462dba64e945a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/3799cfd261564e5ba73053afe3e0b60c2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c236c6b5eced44c3a22b1b7779f989d33/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/8d9a1bacfae04c508cd2852cfc3d4e912/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/6fc5beab5b2b42d9b0575f3e384038f51/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/946a419bcbcc44d08c05275adfb3dbc01/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ed1e63b89e7743619a7f541d831943f01/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/2747080059f64f4ba2a97a69287d05e51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/37b0126ce3264429b7a3070d9c7ca29d2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3026.27 ((SQLServer2017-CU7).180510-1901)
+```
+
+# SQL Server 2017 RTM CU6 - 14.0.3025.34 - x64 (KB4101464)
+``` powershell
+# SQL Server 2017 RTM CU6 - 14.0.3025.34 - x64 (KB4101464)
+$outputFolder = 'c:\sqlsyms\14.0.3025.34\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/a98a782c58784e29bbaa2c211b0f5c682/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f24aacbfad9e414285f7046d1d48d2be2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/42522ba8c70843a89dd2cbe8af1bb4b32/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/b4e8225ee505470da1c3ae7cd8b872e12/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/02573056bbd745149600abc3fda59b873/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/75e13c8cab1140ff95e0a8be1561e5f52/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e9265ab70bc24f7892140a0c56c8fff71/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/0b7a9ff5214245c7935cedb57471d2b71/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/99e106f3dc9d4485910ca051be7c7ead1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ebfd29864c4549c48179f4a037ac91271/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/ae60023494ff4dd7a992cde1dbedd2d52/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3025.34 ((SQLServer2017-CU6).180410-0033)
+```
+
+# SQL Server 2017 RTM CU5 - 14.0.3023.8 - x64 (KB4092643)
+``` powershell
+# SQL Server 2017 RTM CU5 - 14.0.3023.8 - x64 (KB4092643)
+$outputFolder = 'c:\sqlsyms\14.0.3023.8\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/109e36e55c01403497cc5d50c579d8532/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/bddaac25fb1f426da61e50a94d7fc9ab2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b1507220d6954a02a8b70fc6a55ef15a2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/3741e4701fc3405b96394985517ff8a02/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/ac8d8709958847f8a0acfc7d842689343/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/b32f21bc37674e1b935d03ad80b368f42/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/457d193fc3f44383aceee37f22beb4ee1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/6051c5232f1b45d7add16da0ffbd40561/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/ae5d32ddd37e4201b4deb372cd8eeace1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/ab8e5af83878473e9872fa70607103c91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/691d47cd1fe84e27beecb625888885242/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3023.08 ((SQLServer2017-CU5).180302-2330)
+```
+
+# SQL Server 2017 RTM CU4 - 14.0.3022.28 - x64 (KB4056498)
+``` powershell
+# SQL Server 2017 RTM CU4 - 14.0.3022.28 - x64 (KB4056498)
+$outputFolder = 'c:\sqlsyms\14.0.3022.28\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/57d7c3c8a5d0448e80136b24d0fff1c32/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d579a66e0be244f4933f70d895ea0ca72/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3b96d064c2a7446b8bf27f889a05c5f82/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/c0a46b4eda834af696bc62f1f25d2ed12/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/98358edb8975452a950cf30afd43dacb3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/d2356ed3f2a54cd39d5b0d6c67c270b02/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/374a04e072bc477297ac9c32d1cec4761/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/ae215b6a707a4db08bc6442bd43ac11c1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/076f3b18167d41edbd98e8898113cad41/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/69e152bad2594a2cb66eaeeaa412f1611/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/6061b66f34624106bafd4ee77d938d8f2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3022.28 ((SQLServer2017-CU1).180209-2025)
+```
+
+# SQL Server 2017 RTM CU3 - 14.0.3015.40 - x64 (KB4052987)
+``` powershell
+# SQL Server 2017 RTM CU3 - 14.0.3015.40 - x64 (KB4052987)
+$outputFolder = 'c:\sqlsyms\14.0.3015.40\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/fd63f54995484f9cada261048b448e362/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/8e5e48eb780a41c496ec3aff3e0470dd2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/b882d062f0ae4f3a826bdae177e2f6ae2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a56fa639b1be44b791f33e70221a74d42/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/35e6d755c08b44dea0288b8f4c8be7e33/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/a90c29baa7a945e79a5f316c1c016de92/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/a1723bbc5db04c588a7c8090f24732931/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/84fb90a5783b4d3da9f829e36dd5e4f11/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/72cc987076974daead0760fbfc9e06dc1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/8041f1f6e7894ae08d6acdd1ed3988d91/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/422ffe74342b4124ac700e11127116952/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3015.40 ((SQLServer2017-CU1).171222-2334)
+```
+
+# SQL Server 2017 RTM CU2 - 14.0.3008.27 - x64 (KB4052574)
+``` powershell
+# SQL Server 2017 RTM CU2 - 14.0.3008.27 - x64 (KB4052574)
+$outputFolder = 'c:\sqlsyms\14.0.3008.27\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3138403f1ce44cc1969afc40973749f12/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f1a833a2d2c34202b7302121de112bd32/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/40d5a1efad844abfa5a689f2e49153e12/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/a1dfaae5bf0f4d5691487e1d7ca137fe2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/abc003696f9c4269b13c4e246bd6d10e2/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/8d19325e37f34ec5b6f4ebe1ea29978e2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/9496aab8e37448c5ad97fde8635a3d201/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/d984365873cb4a10a728e6f95b206aef1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/5c90a79531e94e37ba58d8993b04e1201/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/edcf09de5c5a482991e58e26301562341/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/11a2d383108e4e49bac7214a5c4e7c2e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3008.27 ((SQLServer2017-CU1).171116-1722)
+```
+
+# SQL Server 2017 RTM CU1 - 14.0.3006.16 - x64 (KB4038634)
+``` powershell
+# SQL Server 2017 RTM CU1 - 14.0.3006.16 - x64 (KB4038634)
+$outputFolder = 'c:\sqlsyms\14.0.3006.16\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/87eba05ec89242d9927509fa7cd4df222/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/e801003d9d0e480aaf2a9961f14722be2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/5eb2d9b1ed7647099675595f5c1af9542/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/dfeb0841aebc48fc92d2ebce8243d6b02/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/133d9c8bada14ea89a11c0c505f8c2412/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/c7ef60b6dc0c4068a48974e6dcf589e42/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/e1feb096228e45b4ad3fd948d10b06f21/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/fc74cd37bd3c40f1a63232f24b9861621/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/88d42585c0844b0493b3383459c778cb1/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/85149cd8bce34a5d80e738205084b92a1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/641d7dfd397d4232a6cf7ccc61db3ec32/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.3006.16 ((SQLServer2017-CU1).171019-0548)
+```
+
+# SQL Server 2017 RTM GDR - 14.0.2014.14 - x64 (KB4494351)
+``` powershell
+# SQL Server 2017 RTM GDR - 14.0.2014.14 - x64 (KB4494351)
+$outputFolder = 'c:\sqlsyms\14.0.2014.14\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3b83b1a537f04ab3a16e88432d682bcb2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/d72fae04d4364d2f9fddc737646f1baa2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/51b6292d90284698b26fd5785f1470cd2/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/74cac1ac260d4f90b5c2e3d16bd2e1fa2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/bf2dc2594f0045b287cf32f04ea6dc033/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/1f4bea33f4a44fcbbb2ed8b1b636dc442/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/962db9f1c6a34d7bb306a6b5a9eb43821/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/20bb3d988bee43fa8b73251c97892d9b1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1cab94f0f12f4c0dafd50eaf20df7ae51/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/a54634c716264671ad9b42292c6d6c751/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/408c96c6da754a7f9ea16fd4e961910c2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.2014.14 ((SQL17_RTM_GDR).190405-1545)
+```
+
+# SQL Server 2017 RTM GDR - 14.0.2002.14 - x64 (KB4293803)
+``` powershell
+# SQL Server 2017 RTM GDR - 14.0.2002.14 - x64 (KB4293803)
+$outputFolder = 'c:\sqlsyms\14.0.2002.14\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/eede151a1fe14c888e12bd2cd18499342/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/1365eb638bb547fb8dda02460ccb1db32/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/3d765ec46087444a99857a8850ed91612/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/59c28b768a1a468d9a1d7c9e3e86c8792/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/c51ed42364994190bde46cadad32bfcc3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/67fa8e005f9e4dd5aa0f1eecd911e9fd2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/0f1a7721cd8e47319fec23bdc5ec7b911/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/3ae9ebe14179453fa16c7790e4468c0a1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/1986c63f87fd4b93aecba08c176afb911/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5b3e2b01fca64473b86112687e9633b51/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/c11351f7ec7643bfa04d930c29d6d4872/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.2002.14 ((SQL17_RTM_GDR).180721-1410)
+```
+
+# SQL Server 2017 RTM GDR - 14.0.2000.63 - x64 (KB4057122)
+``` powershell
+# SQL Server 2017 RTM GDR - 14.0.2000.63 - x64 (KB4057122)
+$outputFolder = 'c:\sqlsyms\14.0.2000.63\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/48cf4690e5f34376afb5a53a8f8ab45d2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/efc35e061a2a4daf97ee2bac1f6a96302/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/59f051256d4743af8f758d0645475b962/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/5e35faefffe6499b9489c56f061d804e2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/989ba51ed4984d1e8df0b1653ecaf3fc3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/20e66bce4c7f42f5837a7e65b84e7a742/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/db011824808740f7b2bdc935fde6ea301/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/77a3acda141547c1a6c80fdd4417d3651/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/177b8b95f7254a86a9eb266863bccfb01/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/77e3bb72b6cb4714aafd8f36cfceccfe1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/4b38c81bae244806938fe19e14dfbf2e2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.2000.63 ((SQL17_RTM_GDR).171222-2325)
+```
+
+# SQL Server 2017 RTM RTM - 14.0.1000.169 - x64 (NA)
+``` powershell
+# SQL Server 2017 RTM RTM - 14.0.1000.169 - x64 (NA)
+$outputFolder = 'c:\sqlsyms\14.0.1000.169\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/3cbcf6039e774ef7b3216ad46ed66e162/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/f188529c1026441ea07ad838452c34832/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/a93a74f3276b4f14a8a57d6b42bf8ae22/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/e0a351d14abe45afbaef64d1f88cc9fa2/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/7db97580232143a99f64077925f11a9d3/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/7be72e22126e41a0ba4a1589d22db4ef2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/a042792795f74ae093210433b2ef4f5c1/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/79032174ef0b4f9eac01826df8f5334f1/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/2cf7210d69f34a5484c0aa7010921c501/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/e1b7563a29b445e6aec1dc8739824fa61/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/2270ab48523147ce8c3aa44993fb31bb2/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2017.0140.1000.169 ((SQLServer).170822-2340)
+```
+
diff --git a/Errors/PDB/SQL-Server-2019.md b/Errors/PDB/SQL-Server-2019.md
new file mode 100644
index 00000000..697afc15
--- /dev/null
+++ b/Errors/PDB/SQL-Server-2019.md
@@ -0,0 +1,306 @@
+# SQL Server 2019 RTM CU5 - 15.0.4043.16 - x64 (KB4552255)
+``` powershell
+# SQL Server 2019 RTM CU5 - 15.0.4043.16 - x64 (KB4552255)
+$outputFolder = 'c:\sqlsyms\15.0.4043.16\x64' # <>'
+mkdir -f $outputFolder
+if (-not (Test-Path "$outputFolder\SqlDK.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlDK.pdb/26dc3c5c64d84fbe9858e9751952614b2/SqlDK.pdb' -OutFile "$outputFolder\SqlDK.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\sqlmin.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlmin.pdb/b7ecc728f4d145db8216e57082798f7f2/sqlmin.pdb' -OutFile "$outputFolder\sqlmin.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\sqllang.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqllang.pdb/e0e08efa82cf49839524d699fcbfcdd32/sqllang.pdb' -OutFile "$outputFolder\sqllang.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\SqlTsEs.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SqlTsEs.pdb/fb3bc1d1ea3b445e8b2d8f82af2c83082/SqlTsEs.pdb' -OutFile "$outputFolder\SqlTsEs.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\sqlaccess.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlaccess.pdb/2250bc823b6d45d78bbb1526118d5bcd1/sqlaccess.pdb' -OutFile "$outputFolder\sqlaccess.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\qds.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/qds.pdb/f15f1bb425e345fbbbf9052dfff3009f2/qds.pdb' -OutFile "$outputFolder\qds.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\hkruntime.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkruntime.pdb/7119961e9948486980ac4126d67f28671/hkruntime.pdb' -OutFile "$outputFolder\hkruntime.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\hkengine.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkengine.pdb/a5e2854d1d5e4c1b9c354018f78c6ca91/hkengine.pdb' -OutFile "$outputFolder\hkengine.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\hkcompile.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/hkcompile.pdb/822326dc5739477b9d02545c442b49911/hkcompile.pdb' -OutFile "$outputFolder\hkcompile.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\SQLOS.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/SQLOS.pdb/5303b7b87c2c4e2789a75900f67989fe1/SQLOS.pdb' -OutFile "$outputFolder\SQLOS.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+if (-not (Test-Path "$outputFolder\sqlservr.pdb")) { Invoke-WebRequest -uri 'https://msdl.microsoft.com/download/symbols/sqlservr.pdb/17641aefa414415686ca0f4ad81a06a12/sqlservr.pdb' -OutFile "$outputFolder\sqlservr.pdb" } # File version 2019.0150.4043.16 ((SQLServer2019-CU5).200611-0058)
+```
+
+# SQL Server 2019 RTM CU4 - 15.0.4033.1 - x64 (KB4548597)
+``` powershell
+# SQL Server 2019 RTM CU4 - 15.0.4033.1 - x64 (KB4548597)
+$outputFolder = 'c:\sqlsyms\15.0.4033.1\x64' # <