From 4334aa13897bd728eddb398434d406cf853ea2cb Mon Sep 17 00:00:00 2001 From: JimBobSquarePants Date: Thu, 11 Apr 2013 08:58:32 +0100 Subject: [PATCH] initial commit Former-commit-id: 78afc616b46416cac5bc8bab9024b386039f944d --- src/ImageProcessor.Web/Caching/CachedImage.cs | 29 +- src/ImageProcessor.Web/Caching/DiskCache.cs | 10 +- .../Caching/PersistantDictionary.cs | 2 +- src/ImageProcessor.Web/Caching/SQLContext.cs | 139 ++--- .../ImageProcessor.Web.csproj | 14 +- .../SQLite.cs.REMOVED.git-id | 1 + src/ImageProcessor.Web/SQLiteAsync.cs | 486 ++++++++++++++++++ src/ImageProcessor.Web/packages.config | 3 +- src/Test/Test/Web.config | 160 +++--- ...Csharp-Sqlite.3.7.7.1.nupkg.REMOVED.git-id | 1 + .../Csharp-Sqlite.3.7.7.1.nuspec | 21 + .../Community.CsharpSqlite.SQLiteClient.dll | Bin 0 -> 59392 bytes .../Community.CsharpSqlite.dll.REMOVED.git-id | 1 + .../Community.CsharpSqlite.SQLiteClient.dll | Bin 0 -> 59392 bytes .../Community.CsharpSqlite.dll.REMOVED.git-id | 1 + .../Community.CsharpSqlite.SQLiteClient.dll | Bin 0 -> 59392 bytes .../Community.CsharpSqlite.dll.REMOVED.git-id | 1 + .../SQLitex64.1.0.66.nupkg.REMOVED.git-id | 1 - .../SQLitex64.1.0.66/SQLitex64.1.0.66.nuspec | 23 - .../32/System.Data.SQLite.DLL.REMOVED.git-id | 1 - .../64/System.Data.SQLite.DLL.REMOVED.git-id | 1 - .../lib/System.Data.SQLite.DLL.REMOVED.git-id | 1 - .../content/SQLite.cs.REMOVED.git-id | 1 + .../sqlite-net.1.0.7/content/SQLiteAsync.cs | 486 ++++++++++++++++++ .../sqlite-net.1.0.7/sqlite-net.1.0.7.nupkg | Bin 0 -> 24342 bytes .../sqlite-net.1.0.7/sqlite-net.1.0.7.nuspec | 20 + 26 files changed, 1171 insertions(+), 232 deletions(-) create mode 100644 src/ImageProcessor.Web/SQLite.cs.REMOVED.git-id create mode 100644 src/ImageProcessor.Web/SQLiteAsync.cs create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nupkg.REMOVED.git-id create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nuspec create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net20/Community.CsharpSqlite.SQLiteClient.dll create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net20/Community.CsharpSqlite.dll.REMOVED.git-id create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net35/Community.CsharpSqlite.SQLiteClient.dll create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net35/Community.CsharpSqlite.dll.REMOVED.git-id create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net40/Community.CsharpSqlite.SQLiteClient.dll create mode 100644 src/packages/Csharp-Sqlite.3.7.7.1/lib/net40/Community.CsharpSqlite.dll.REMOVED.git-id delete mode 100644 src/packages/SQLitex64.1.0.66/SQLitex64.1.0.66.nupkg.REMOVED.git-id delete mode 100644 src/packages/SQLitex64.1.0.66/SQLitex64.1.0.66.nuspec delete mode 100644 src/packages/SQLitex64.1.0.66/lib/32/System.Data.SQLite.DLL.REMOVED.git-id delete mode 100644 src/packages/SQLitex64.1.0.66/lib/64/System.Data.SQLite.DLL.REMOVED.git-id delete mode 100644 src/packages/SQLitex64.1.0.66/lib/System.Data.SQLite.DLL.REMOVED.git-id create mode 100644 src/packages/sqlite-net.1.0.7/content/SQLite.cs.REMOVED.git-id create mode 100644 src/packages/sqlite-net.1.0.7/content/SQLiteAsync.cs create mode 100644 src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nupkg create mode 100644 src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nuspec diff --git a/src/ImageProcessor.Web/Caching/CachedImage.cs b/src/ImageProcessor.Web/Caching/CachedImage.cs index bc7ef15b7..41241cb1b 100644 --- a/src/ImageProcessor.Web/Caching/CachedImage.cs +++ b/src/ImageProcessor.Web/Caching/CachedImage.cs @@ -9,6 +9,9 @@ namespace ImageProcessor.Web.Caching { #region Using using System; + + using SQLite; + #endregion /// @@ -16,28 +19,14 @@ namespace ImageProcessor.Web.Caching /// internal sealed class CachedImage { + //[PrimaryKey, AutoIncrement] + //public int Id { get; set; } + /// - /// Initializes a new instance of the class. + /// Gets or sets the key identifying the cached image. /// - /// - /// The value of the cached image. - /// - /// - /// The max age of the cached image. - /// - /// - /// The last write time of the cached image. - /// - /// - /// The expires time. - /// - public CachedImage(string path, int maxAge, DateTime lastWriteTimeUtc, DateTime expiresTimeUtc) - { - this.Path = path; - this.MaxAge = maxAge; - this.LastWriteTimeUtc = lastWriteTimeUtc; - this.ExpiresUtc = expiresTimeUtc; - } + [PrimaryKey] + internal string Key { get; set; } /// /// Gets or sets the value of the cached image. diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 33d48d19f..6a1f1b841 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -227,7 +227,15 @@ namespace ImageProcessor.Web.Caching { string key = Path.GetFileNameWithoutExtension(this.CachedPath); DateTime expires = DateTime.UtcNow.AddDays(MaxFileCachedDuration).ToUniversalTime(); - CachedImage cachedImage = new CachedImage(this.CachedPath, MaxFileCachedDuration, lastWriteTimeUtc, expires); + CachedImage cachedImage = new CachedImage + { + Key = key, + Path = this.CachedPath, + MaxAge = MaxFileCachedDuration, + LastWriteTimeUtc = lastWriteTimeUtc, + ExpiresUtc = expires + }; + await PersistantDictionary.Instance.AddAsync(key, cachedImage); } diff --git a/src/ImageProcessor.Web/Caching/PersistantDictionary.cs b/src/ImageProcessor.Web/Caching/PersistantDictionary.cs index cd868f03c..644d74364 100644 --- a/src/ImageProcessor.Web/Caching/PersistantDictionary.cs +++ b/src/ImageProcessor.Web/Caching/PersistantDictionary.cs @@ -130,7 +130,7 @@ namespace ImageProcessor.Web.Caching return await SQLContext.RemoveImageAsync(key); } - return await SQLContext.AddImageAsync(key, cachedImage); + return await SQLContext.AddImageAsync(cachedImage); } catch { diff --git a/src/ImageProcessor.Web/Caching/SQLContext.cs b/src/ImageProcessor.Web/Caching/SQLContext.cs index 22c2c70d6..1f5be5475 100644 --- a/src/ImageProcessor.Web/Caching/SQLContext.cs +++ b/src/ImageProcessor.Web/Caching/SQLContext.cs @@ -8,14 +8,17 @@ namespace ImageProcessor.Web.Caching { #region Using + using System; using System.Collections.Generic; - using System.Data.SQLite; using System.IO; using System.Threading.Tasks; using System.Web.Hosting; using ImageProcessor.Web.Config; using ImageProcessor.Web.Helpers; + + using SQLite; + #endregion /// @@ -37,57 +40,44 @@ namespace ImageProcessor.Web.Caching /// /// The connection string. /// - private static readonly string ConnectionString = string.Format("Data Source={0};Version=3;", IndexLocation); + private static readonly string ConnectionString = IndexLocation; #endregion #region Methods #region Internal + /// /// Creates the database if it doesn't already exist. /// internal static void CreateDatabase() { - if (!File.Exists(IndexLocation)) + try { - string absolutePath = HostingEnvironment.MapPath(VirtualCachePath); - - if (absolutePath != null) + if (!File.Exists(IndexLocation)) { - DirectoryInfo directoryInfo = new DirectoryInfo(absolutePath); + string absolutePath = HostingEnvironment.MapPath(VirtualCachePath); - if (!directoryInfo.Exists) + if (absolutePath != null) { - // Create the directory. - Directory.CreateDirectory(absolutePath); - } - } - - SQLiteConnection.CreateFile(IndexLocation); - - using (SQLiteConnection connection = new SQLiteConnection(ConnectionString)) - { - connection.Open(); + DirectoryInfo directoryInfo = new DirectoryInfo(absolutePath); - using (SQLiteTransaction transaction = connection.BeginTransaction()) - { - using (SQLiteCommand command = new SQLiteCommand(connection)) + if (!directoryInfo.Exists) { - command.CommandText = @"CREATE TABLE names - (Key TEXT, - Path TEXT, - MaxAge INTEGER, - LastWriteTimeUtc TEXT, - ExpiresUtc TEXT, - PRIMARY KEY (Key), - UNIQUE (Path));"; - - command.ExecuteNonQuery(); + // Create the directory. + Directory.CreateDirectory(absolutePath); } + } - transaction.Commit(); + using (SQLiteConnection connection = new SQLiteConnection(IndexLocation)) + { + connection.CreateTable(); } } } + catch (Exception ex) + { + throw ex; + } } /// @@ -104,25 +94,11 @@ namespace ImageProcessor.Web.Caching { using (SQLiteConnection connection = new SQLiteConnection(ConnectionString)) { - connection.Open(); + List images = connection.Query("SELECT * FROM CachedImage"); - using (SQLiteCommand command = new SQLiteCommand(connection)) + foreach (CachedImage cachedImage in images) { - command.CommandText = "SELECT * FROM names;"; - - SQLiteDataReader reader = command.ExecuteReader(); - - while (reader.Read()) - { - string key = reader["Key"].ToString(); - CachedImage image = new CachedImage( - reader["Path"].ToString(), - int.Parse(reader["MaxAge"].ToString()), - DateTime.Parse(reader["LastWriteTimeUtc"].ToString()).ToUniversalTime(), - DateTime.Parse(reader["ExpiresUtc"].ToString()).ToUniversalTime()); - - dictionary.Add(key, image); - } + dictionary.Add(cachedImage.Key, cachedImage); } } @@ -137,19 +113,16 @@ namespace ImageProcessor.Web.Caching /// /// Adds a cached image to the database. /// - /// - /// The key for the cached image. - /// /// /// The cached image to add. /// /// /// The true if the addition of the cached image is added; otherwise, false. /// - internal static async Task AddImageAsync(string key, CachedImage image) + internal static async Task AddImageAsync(CachedImage image) { // Create Action delegate for AddImage. - return await TaskHelpers.Run(() => AddImage(key, image)); + return await TaskHelpers.Run(() => AddImage(image)); } /// @@ -169,48 +142,28 @@ namespace ImageProcessor.Web.Caching #endregion #region Private + /// /// Adds a cached image to the database. /// - /// - /// The key for the cached image. - /// /// /// The cached image to add. /// /// /// The true if the addition of the cached image is added; otherwise, false. /// - private static bool AddImage(string key, CachedImage image) + private static bool AddImage(CachedImage image) { try { - using (SQLiteConnection connection = new SQLiteConnection(ConnectionString)) - { - connection.Open(); + SQLiteConnection connection = new SQLiteConnection(ConnectionString); - using (SQLiteTransaction transaction = connection.BeginTransaction()) + connection.RunInTransaction(() => { - using (SQLiteCommand command = new SQLiteCommand(connection)) - { - command.CommandText = "INSERT INTO names VALUES(?, ?, ?, ?, ?)"; - - SQLiteParameter[] parameters = new[] - { - new SQLiteParameter("Key", key), - new SQLiteParameter("Path", image.Path), - new SQLiteParameter("MaxAge", image.MaxAge), - new SQLiteParameter("LastWriteTimeUtc", image.LastWriteTimeUtc), - new SQLiteParameter("ExpiresUtc", image.ExpiresUtc) - }; - - command.Parameters.AddRange(parameters); - command.ExecuteNonQuery(); - } - - transaction.Commit(); - } - } + // Database calls inside the transaction + connection.Insert(image); + connection.Dispose(); + }); return true; } @@ -233,22 +186,14 @@ namespace ImageProcessor.Web.Caching { try { - using (SQLiteConnection connection = new SQLiteConnection(ConnectionString)) - { - connection.Open(); + SQLiteConnection connection = new SQLiteConnection(ConnectionString); - using (SQLiteTransaction transaction = connection.BeginTransaction()) - { - using (SQLiteCommand command = new SQLiteCommand(connection)) - { - command.CommandText = "DELETE FROM names WHERE key = @searchParam;"; - command.Parameters.Add(new SQLiteParameter("searchParam", key)); - command.ExecuteNonQuery(); - } - - transaction.Commit(); - } - } + connection.RunInTransaction(() => + { + // Database calls inside the transaction + connection.Delete(key); + connection.Dispose(); + }); return true; } diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index 21ce0661c..60e5b6ed6 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -18,7 +18,7 @@ full false bin\Debug\ - DEBUG;TRACE + TRACE;DEBUG;USE_CSHARP_SQLITE prompt 4 @@ -66,6 +66,12 @@ MinimumRecommendedRules.ruleset + + ..\packages\Csharp-Sqlite.3.7.7.1\lib\net40\Community.CsharpSqlite.dll + + + ..\packages\Csharp-Sqlite.3.7.7.1\lib\net40\Community.CsharpSqlite.SQLiteClient.dll + ..\packages\Microsoft.Bcl.Async.1.0.14-rc\lib\net40\Microsoft.Threading.Tasks.dll @@ -78,10 +84,6 @@ - - False - ..\packages\SQLitex64.1.0.66\lib\32\System.Data.SQLite.DLL - @@ -108,6 +110,8 @@ + + diff --git a/src/ImageProcessor.Web/SQLite.cs.REMOVED.git-id b/src/ImageProcessor.Web/SQLite.cs.REMOVED.git-id new file mode 100644 index 000000000..ee7e14fe9 --- /dev/null +++ b/src/ImageProcessor.Web/SQLite.cs.REMOVED.git-id @@ -0,0 +1 @@ +ce0491dcbe39702bf25fb616f76e1b149f670688 \ No newline at end of file diff --git a/src/ImageProcessor.Web/SQLiteAsync.cs b/src/ImageProcessor.Web/SQLiteAsync.cs new file mode 100644 index 000000000..b4cf34e07 --- /dev/null +++ b/src/ImageProcessor.Web/SQLiteAsync.cs @@ -0,0 +1,486 @@ +// +// Copyright (c) 2012 Krueger Systems, Inc. +// +// 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. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; +using System.Threading.Tasks; + +namespace SQLite +{ + public partial class SQLiteAsyncConnection + { + SQLiteConnectionString _connectionString; + + public SQLiteAsyncConnection (string databasePath, bool storeDateTimeAsTicks = false) + { + _connectionString = new SQLiteConnectionString (databasePath, storeDateTimeAsTicks); + } + + SQLiteConnectionWithLock GetConnection () + { + return SQLiteConnectionPool.Shared.GetConnection (_connectionString); + } + + public Task CreateTableAsync () + where T : new () + { + return CreateTablesAsync (typeof (T)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + where T4 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3), typeof (T4)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + where T4 : new () + where T5 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3), typeof (T4), typeof (T5)); + } + + public Task CreateTablesAsync (params Type[] types) + { + return Task.Factory.StartNew (() => { + CreateTablesResult result = new CreateTablesResult (); + var conn = GetConnection (); + using (conn.Lock ()) { + foreach (Type type in types) { + int aResult = conn.CreateTable (type); + result.Results[type] = aResult; + } + } + return result; + }); + } + + public Task DropTableAsync () + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.DropTable (); + } + }); + } + + public Task InsertAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Insert (item); + } + }); + } + + public Task UpdateAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Update (item); + } + }); + } + + public Task DeleteAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Delete (item); + } + }); + } + + public Task GetAsync(object pk) + where T : new() + { + return Task.Factory.StartNew(() => + { + var conn = GetConnection(); + using (conn.Lock()) + { + return conn.Get(pk); + } + }); + } + + public Task FindAsync (object pk) + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Find (pk); + } + }); + } + + public Task GetAsync (Expression> predicate) + where T : new() + { + return Task.Factory.StartNew(() => + { + var conn = GetConnection(); + using (conn.Lock()) + { + return conn.Get (predicate); + } + }); + } + + public Task FindAsync (Expression> predicate) + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Find (predicate); + } + }); + } + + public Task ExecuteAsync (string query, params object[] args) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Execute (query, args); + } + }); + } + + public Task InsertAllAsync (IEnumerable items) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.InsertAll (items); + } + }); + } + + [Obsolete("Will cause a deadlock if any call in action ends up in a different thread. Use RunInTransactionAsync(Action) instead.")] + public Task RunInTransactionAsync (Action action) + { + return Task.Factory.StartNew (() => { + var conn = this.GetConnection (); + using (conn.Lock ()) { + conn.BeginTransaction (); + try { + action (this); + conn.Commit (); + } + catch (Exception) { + conn.Rollback (); + throw; + } + } + }); + } + + public Task RunInTransactionAsync(Action action) + { + return Task.Factory.StartNew(() => + { + var conn = this.GetConnection(); + using (conn.Lock()) + { + conn.BeginTransaction(); + try + { + action(conn); + conn.Commit(); + } + catch (Exception) + { + conn.Rollback(); + throw; + } + } + }); + } + + public AsyncTableQuery Table () + where T : new () + { + // + // This isn't async as the underlying connection doesn't go out to the database + // until the query is performed. The Async methods are on the query iteself. + // + var conn = GetConnection (); + return new AsyncTableQuery (conn.Table ()); + } + + public Task ExecuteScalarAsync (string sql, params object[] args) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + var command = conn.CreateCommand (sql, args); + return command.ExecuteScalar (); + } + }); + } + + public Task> QueryAsync (string sql, params object[] args) + where T : new () + { + return Task>.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Query (sql, args); + } + }); + } + } + + // + // TODO: Bind to AsyncConnection.GetConnection instead so that delayed + // execution can still work after a Pool.Reset. + // + public class AsyncTableQuery + where T : new () + { + TableQuery _innerQuery; + + public AsyncTableQuery (TableQuery innerQuery) + { + _innerQuery = innerQuery; + } + + public AsyncTableQuery Where (Expression> predExpr) + { + return new AsyncTableQuery (_innerQuery.Where (predExpr)); + } + + public AsyncTableQuery Skip (int n) + { + return new AsyncTableQuery (_innerQuery.Skip (n)); + } + + public AsyncTableQuery Take (int n) + { + return new AsyncTableQuery (_innerQuery.Take (n)); + } + + public AsyncTableQuery OrderBy (Expression> orderExpr) + { + return new AsyncTableQuery (_innerQuery.OrderBy (orderExpr)); + } + + public AsyncTableQuery OrderByDescending (Expression> orderExpr) + { + return new AsyncTableQuery (_innerQuery.OrderByDescending (orderExpr)); + } + + public Task> ToListAsync () + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.ToList (); + } + }); + } + + public Task CountAsync () + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.Count (); + } + }); + } + + public Task ElementAtAsync (int index) + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.ElementAt (index); + } + }); + } + + public Task FirstAsync () + { + return Task.Factory.StartNew(() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.First (); + } + }); + } + + public Task FirstOrDefaultAsync () + { + return Task.Factory.StartNew(() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.FirstOrDefault (); + } + }); + } + } + + public class CreateTablesResult + { + public Dictionary Results { get; private set; } + + internal CreateTablesResult () + { + this.Results = new Dictionary (); + } + } + + class SQLiteConnectionPool + { + class Entry + { + public SQLiteConnectionString ConnectionString { get; private set; } + public SQLiteConnectionWithLock Connection { get; private set; } + + public Entry (SQLiteConnectionString connectionString) + { + ConnectionString = connectionString; + Connection = new SQLiteConnectionWithLock (connectionString); + } + + public void OnApplicationSuspended () + { + Connection.Dispose (); + Connection = null; + } + } + + readonly Dictionary _entries = new Dictionary (); + readonly object _entriesLock = new object (); + + static readonly SQLiteConnectionPool _shared = new SQLiteConnectionPool (); + + /// + /// Gets the singleton instance of the connection tool. + /// + public static SQLiteConnectionPool Shared + { + get + { + return _shared; + } + } + + public SQLiteConnectionWithLock GetConnection (SQLiteConnectionString connectionString) + { + lock (_entriesLock) { + Entry entry; + string key = connectionString.ConnectionString; + + if (!_entries.TryGetValue (key, out entry)) { + entry = new Entry (connectionString); + _entries[key] = entry; + } + + return entry.Connection; + } + } + + /// + /// Closes all connections managed by this pool. + /// + public void Reset () + { + lock (_entriesLock) { + foreach (var entry in _entries.Values) { + entry.OnApplicationSuspended (); + } + _entries.Clear (); + } + } + + /// + /// Call this method when the application is suspended. + /// + /// Behaviour here is to close any open connections. + public void ApplicationSuspended () + { + Reset (); + } + } + + class SQLiteConnectionWithLock : SQLiteConnection + { + readonly object _lockPoint = new object (); + + public SQLiteConnectionWithLock (SQLiteConnectionString connectionString) + : base (connectionString.DatabasePath, connectionString.StoreDateTimeAsTicks) + { + } + + public IDisposable Lock () + { + return new LockWrapper (_lockPoint); + } + + private class LockWrapper : IDisposable + { + object _lockPoint; + + public LockWrapper (object lockPoint) + { + _lockPoint = lockPoint; + Monitor.Enter (_lockPoint); + } + + public void Dispose () + { + Monitor.Exit (_lockPoint); + } + } + } +} + diff --git a/src/ImageProcessor.Web/packages.config b/src/ImageProcessor.Web/packages.config index 58ea5f418..c3bf2d679 100644 --- a/src/ImageProcessor.Web/packages.config +++ b/src/ImageProcessor.Web/packages.config @@ -1,7 +1,8 @@  + - + \ No newline at end of file diff --git a/src/Test/Test/Web.config b/src/Test/Test/Web.config index f6e8b95f0..09f93bfb9 100644 --- a/src/Test/Test/Web.config +++ b/src/Test/Test/Web.config @@ -4,84 +4,84 @@ http://go.microsoft.com/fwlink/?LinkId=152368 --> - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nupkg.REMOVED.git-id b/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nupkg.REMOVED.git-id new file mode 100644 index 000000000..873e6cddd --- /dev/null +++ b/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nupkg.REMOVED.git-id @@ -0,0 +1 @@ +81fffff68e71d82a09d8c6a345ce69410f351786 \ No newline at end of file diff --git a/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nuspec b/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nuspec new file mode 100644 index 000000000..574462183 --- /dev/null +++ b/src/packages/Csharp-Sqlite.3.7.7.1/Csharp-Sqlite.3.7.7.1.nuspec @@ -0,0 +1,21 @@ + + + + Csharp-Sqlite + 3.7.7.1 + C#-SqLite Unofficial Package + noah.hart + noah.hart + http://code.google.com/p/csharp-sqlite/ + false + C#-SQLite is an independent reimplementation of the SQLite software library version 3.7.7.1. + + + + Sqlite + + + + + + \ No newline at end of file diff --git a/src/packages/Csharp-Sqlite.3.7.7.1/lib/net20/Community.CsharpSqlite.SQLiteClient.dll b/src/packages/Csharp-Sqlite.3.7.7.1/lib/net20/Community.CsharpSqlite.SQLiteClient.dll new file mode 100644 index 0000000000000000000000000000000000000000..471796b1bb97d4a404efcc18cf009bf241e0601f GIT binary patch literal 59392 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 - - - SQLitex64 - 1.0.66 - SQLitex64 - Amir Barylko - Amir Barylko - http://www.sqlite.org/ - http://www.sqlite.org/images/sqlite370_banner.gif - false - Provides both (32 and 64 bit) assemblies needed to use SQLite. -The current package only provides 32 bit. - SQLite 64 bit and 32 bit assemblies - - - - SQLite - - - - - \ No newline at end of file diff --git a/src/packages/SQLitex64.1.0.66/lib/32/System.Data.SQLite.DLL.REMOVED.git-id b/src/packages/SQLitex64.1.0.66/lib/32/System.Data.SQLite.DLL.REMOVED.git-id deleted file mode 100644 index f6116a77c..000000000 --- a/src/packages/SQLitex64.1.0.66/lib/32/System.Data.SQLite.DLL.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -aa398bbec1a567de55f984959d200900b794372a \ No newline at end of file diff --git a/src/packages/SQLitex64.1.0.66/lib/64/System.Data.SQLite.DLL.REMOVED.git-id b/src/packages/SQLitex64.1.0.66/lib/64/System.Data.SQLite.DLL.REMOVED.git-id deleted file mode 100644 index acf4e1240..000000000 --- a/src/packages/SQLitex64.1.0.66/lib/64/System.Data.SQLite.DLL.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -6f07d5e7ab41a0f791f07d5407f10edb4b716a02 \ No newline at end of file diff --git a/src/packages/SQLitex64.1.0.66/lib/System.Data.SQLite.DLL.REMOVED.git-id b/src/packages/SQLitex64.1.0.66/lib/System.Data.SQLite.DLL.REMOVED.git-id deleted file mode 100644 index f6116a77c..000000000 --- a/src/packages/SQLitex64.1.0.66/lib/System.Data.SQLite.DLL.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -aa398bbec1a567de55f984959d200900b794372a \ No newline at end of file diff --git a/src/packages/sqlite-net.1.0.7/content/SQLite.cs.REMOVED.git-id b/src/packages/sqlite-net.1.0.7/content/SQLite.cs.REMOVED.git-id new file mode 100644 index 000000000..2dfc5c248 --- /dev/null +++ b/src/packages/sqlite-net.1.0.7/content/SQLite.cs.REMOVED.git-id @@ -0,0 +1 @@ +d2856e3733eb6c7d85057c37ae415e54c8bf2386 \ No newline at end of file diff --git a/src/packages/sqlite-net.1.0.7/content/SQLiteAsync.cs b/src/packages/sqlite-net.1.0.7/content/SQLiteAsync.cs new file mode 100644 index 000000000..b4cf34e07 --- /dev/null +++ b/src/packages/sqlite-net.1.0.7/content/SQLiteAsync.cs @@ -0,0 +1,486 @@ +// +// Copyright (c) 2012 Krueger Systems, Inc. +// +// 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. +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; +using System.Threading.Tasks; + +namespace SQLite +{ + public partial class SQLiteAsyncConnection + { + SQLiteConnectionString _connectionString; + + public SQLiteAsyncConnection (string databasePath, bool storeDateTimeAsTicks = false) + { + _connectionString = new SQLiteConnectionString (databasePath, storeDateTimeAsTicks); + } + + SQLiteConnectionWithLock GetConnection () + { + return SQLiteConnectionPool.Shared.GetConnection (_connectionString); + } + + public Task CreateTableAsync () + where T : new () + { + return CreateTablesAsync (typeof (T)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + where T4 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3), typeof (T4)); + } + + public Task CreateTablesAsync () + where T : new () + where T2 : new () + where T3 : new () + where T4 : new () + where T5 : new () + { + return CreateTablesAsync (typeof (T), typeof (T2), typeof (T3), typeof (T4), typeof (T5)); + } + + public Task CreateTablesAsync (params Type[] types) + { + return Task.Factory.StartNew (() => { + CreateTablesResult result = new CreateTablesResult (); + var conn = GetConnection (); + using (conn.Lock ()) { + foreach (Type type in types) { + int aResult = conn.CreateTable (type); + result.Results[type] = aResult; + } + } + return result; + }); + } + + public Task DropTableAsync () + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.DropTable (); + } + }); + } + + public Task InsertAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Insert (item); + } + }); + } + + public Task UpdateAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Update (item); + } + }); + } + + public Task DeleteAsync (object item) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Delete (item); + } + }); + } + + public Task GetAsync(object pk) + where T : new() + { + return Task.Factory.StartNew(() => + { + var conn = GetConnection(); + using (conn.Lock()) + { + return conn.Get(pk); + } + }); + } + + public Task FindAsync (object pk) + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Find (pk); + } + }); + } + + public Task GetAsync (Expression> predicate) + where T : new() + { + return Task.Factory.StartNew(() => + { + var conn = GetConnection(); + using (conn.Lock()) + { + return conn.Get (predicate); + } + }); + } + + public Task FindAsync (Expression> predicate) + where T : new () + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Find (predicate); + } + }); + } + + public Task ExecuteAsync (string query, params object[] args) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Execute (query, args); + } + }); + } + + public Task InsertAllAsync (IEnumerable items) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.InsertAll (items); + } + }); + } + + [Obsolete("Will cause a deadlock if any call in action ends up in a different thread. Use RunInTransactionAsync(Action) instead.")] + public Task RunInTransactionAsync (Action action) + { + return Task.Factory.StartNew (() => { + var conn = this.GetConnection (); + using (conn.Lock ()) { + conn.BeginTransaction (); + try { + action (this); + conn.Commit (); + } + catch (Exception) { + conn.Rollback (); + throw; + } + } + }); + } + + public Task RunInTransactionAsync(Action action) + { + return Task.Factory.StartNew(() => + { + var conn = this.GetConnection(); + using (conn.Lock()) + { + conn.BeginTransaction(); + try + { + action(conn); + conn.Commit(); + } + catch (Exception) + { + conn.Rollback(); + throw; + } + } + }); + } + + public AsyncTableQuery Table () + where T : new () + { + // + // This isn't async as the underlying connection doesn't go out to the database + // until the query is performed. The Async methods are on the query iteself. + // + var conn = GetConnection (); + return new AsyncTableQuery (conn.Table ()); + } + + public Task ExecuteScalarAsync (string sql, params object[] args) + { + return Task.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + var command = conn.CreateCommand (sql, args); + return command.ExecuteScalar (); + } + }); + } + + public Task> QueryAsync (string sql, params object[] args) + where T : new () + { + return Task>.Factory.StartNew (() => { + var conn = GetConnection (); + using (conn.Lock ()) { + return conn.Query (sql, args); + } + }); + } + } + + // + // TODO: Bind to AsyncConnection.GetConnection instead so that delayed + // execution can still work after a Pool.Reset. + // + public class AsyncTableQuery + where T : new () + { + TableQuery _innerQuery; + + public AsyncTableQuery (TableQuery innerQuery) + { + _innerQuery = innerQuery; + } + + public AsyncTableQuery Where (Expression> predExpr) + { + return new AsyncTableQuery (_innerQuery.Where (predExpr)); + } + + public AsyncTableQuery Skip (int n) + { + return new AsyncTableQuery (_innerQuery.Skip (n)); + } + + public AsyncTableQuery Take (int n) + { + return new AsyncTableQuery (_innerQuery.Take (n)); + } + + public AsyncTableQuery OrderBy (Expression> orderExpr) + { + return new AsyncTableQuery (_innerQuery.OrderBy (orderExpr)); + } + + public AsyncTableQuery OrderByDescending (Expression> orderExpr) + { + return new AsyncTableQuery (_innerQuery.OrderByDescending (orderExpr)); + } + + public Task> ToListAsync () + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.ToList (); + } + }); + } + + public Task CountAsync () + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.Count (); + } + }); + } + + public Task ElementAtAsync (int index) + { + return Task.Factory.StartNew (() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.ElementAt (index); + } + }); + } + + public Task FirstAsync () + { + return Task.Factory.StartNew(() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.First (); + } + }); + } + + public Task FirstOrDefaultAsync () + { + return Task.Factory.StartNew(() => { + using (((SQLiteConnectionWithLock)_innerQuery.Connection).Lock ()) { + return _innerQuery.FirstOrDefault (); + } + }); + } + } + + public class CreateTablesResult + { + public Dictionary Results { get; private set; } + + internal CreateTablesResult () + { + this.Results = new Dictionary (); + } + } + + class SQLiteConnectionPool + { + class Entry + { + public SQLiteConnectionString ConnectionString { get; private set; } + public SQLiteConnectionWithLock Connection { get; private set; } + + public Entry (SQLiteConnectionString connectionString) + { + ConnectionString = connectionString; + Connection = new SQLiteConnectionWithLock (connectionString); + } + + public void OnApplicationSuspended () + { + Connection.Dispose (); + Connection = null; + } + } + + readonly Dictionary _entries = new Dictionary (); + readonly object _entriesLock = new object (); + + static readonly SQLiteConnectionPool _shared = new SQLiteConnectionPool (); + + /// + /// Gets the singleton instance of the connection tool. + /// + public static SQLiteConnectionPool Shared + { + get + { + return _shared; + } + } + + public SQLiteConnectionWithLock GetConnection (SQLiteConnectionString connectionString) + { + lock (_entriesLock) { + Entry entry; + string key = connectionString.ConnectionString; + + if (!_entries.TryGetValue (key, out entry)) { + entry = new Entry (connectionString); + _entries[key] = entry; + } + + return entry.Connection; + } + } + + /// + /// Closes all connections managed by this pool. + /// + public void Reset () + { + lock (_entriesLock) { + foreach (var entry in _entries.Values) { + entry.OnApplicationSuspended (); + } + _entries.Clear (); + } + } + + /// + /// Call this method when the application is suspended. + /// + /// Behaviour here is to close any open connections. + public void ApplicationSuspended () + { + Reset (); + } + } + + class SQLiteConnectionWithLock : SQLiteConnection + { + readonly object _lockPoint = new object (); + + public SQLiteConnectionWithLock (SQLiteConnectionString connectionString) + : base (connectionString.DatabasePath, connectionString.StoreDateTimeAsTicks) + { + } + + public IDisposable Lock () + { + return new LockWrapper (_lockPoint); + } + + private class LockWrapper : IDisposable + { + object _lockPoint; + + public LockWrapper (object lockPoint) + { + _lockPoint = lockPoint; + Monitor.Enter (_lockPoint); + } + + public void Dispose () + { + Monitor.Exit (_lockPoint); + } + } + } +} + diff --git a/src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nupkg b/src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..64dd2824f52d82a27e2590535a51930db13cdb2b GIT binary patch literal 24342 zcmb681FSAg5G{yq+qP}nwrzde_Sv>=+qP|$hD z?xb5u78DEy=zj=tqUW=|FA?wSU^+-X#dmo|JU4g z_wxyQ+SwAh1Dsu~9PIf?m>HNzhyeDc4rW&N7W^b`uIBVyB!U8bDgaw!*Z(|REUg?} zi2e()ci|_obai#)VPteMwFKB1yD&I70_^{rF?VpbGj{!N=xo90Xl!a@Yyn_oVPfK7 z{4bmT4+hEqj!C5U#}V*Y!Fw$gv&sC2f{*z3nsb-72 zeQ4ATECo!-QD-NOUVqKkO}=vs;ifI z3qeP8WL0&^FsP3rXj_I%EAQWm4(NBz^Ziw?_po88xsMq4RU@Jv**Y9~BB#REZTJ^H zuSLrog<#G4DzzJv+7ZgJ5@+9oY?T`)z^lOMp5?p$x@@aviWQ0g0>^>%sURnW_v)aL zTRpyUF@!}R&27(FDEzgoFMrpocrcc#}V57{!^sd}JePy^e;$udm0roYlTEyS_3T!-cKn%*`B zr+Xk8{y_gbDQy^u2vH@0fcDja|0gL;9qe5J_O6Vo%5wj0YX;N*+vDuU_s3;RBI$h2 zdF2O@$*>nTld0w8*qM7eNjB|RjPX+^GR|S{N=2BA%vc_TO-N?d%h&(ws{Ugn01V*8 z*`2M1f;=Fn_@8+Er*p-Uhy?sm?vIoDi3a+L#jgdZ{C~dR`}=$!J%6O1WtnB`l1O;E zY0D=&t|h)U3c}Iv`;$ws$^n_D+9_!ZZYpG$9t-No7E5O9u?*26t>tUd%RI?AwFs@Oa)-zua?MbJ)%6Q@JiUJ{mMWyCtP&BB+=^r)?}46cLh6Wyb}Vxcmt?=QmHtsQM=R?XcoZ8)%`=*-dTJj|3nv-V zpU)QeL`<29O#mmL@d)K|aH%lcS_X~e!gR{`xOnHr@BEg8ten(L6dZ(9!MhLU{O=DV53k>bf3I&B=1smhW%+pj?cME- zMC}c$r@dS8+SgBhyx|Kel~b4R@;_78Z$}0LpW@tL&F(KrL2<@{%LOMvo^`?PJJ9W4=2q(Y*SEh&y9c`$f9LKyeoX!u_5T}Z z81m}e6BLFK0p6oq;fwb{BXDB zou+5RU%y=eu7Opg?N{3KF=`T=8@&AQ2iJe)`Ckij7lwUvYexvgg;h)HFXWU$ z_?`cZLWF-q&@aF%`0?>>$@ux^A5Q=h@w7%Mm`7;$_U6CCEBFQKYI!&K51S(0D$NM= zj8~{{3H65@n4r(+-bjN)ve|OeG0&^p$|v=N+|l~Nmpd1jGcI{oK&p}?KZkr2zMtC0YNs16IVuZ*Ff$YOu zv1^tOrd?16LA-@FPw&;u03RL2cPS+}$M$3Q16yCj^sz<8Y_XZ~jRAIuGXx5=@I^P) zK>cvE8K{I6nQvuW?Oy)Lefr|%51tsh-b+*iO|tm?AFTjUg|bn;b9?U5G;KbGDQP$s z6fame0w13Si78_wc!`3)$1l6#!Yst(Pin%8^#nD-`0A0-{*ZW@eNWqFS)Xlzsm^n1X1l9;-u~ z%18Dl4k?~u4f z%d=M=;CpZmQFan_a7!qD$Ui`#CIjIUTM*8HEJG)t%)mXJF~W8pUJHaznLzQ3Q$Aor z*zX9deC-WmO!I}c%t1#BLFz;dG6~P~I1JHK1oU1Z*iQT+_fGty1ChB-!mzaEAg+h| z_;hMU3D z(NnG&13@@a$;6QIiCdz_A=<&uP%&Yqgj(OrX`QBse(4*XWxy1Smxtv&yEff!{41NR zQP1_M4mIlCgJmgG|9qRi1+@K^l1JOgU0$jW_(-}}7xc3gV4D_sH?R7?@1AmxmiX!F z;ZB>)y0S3>3=Oth34P%?M#ylgFc+TflYD-lX4clIEuVFps9_3p9lTkvBWJ_u-`vf` zfiZOJ5nl?$oZeUn;ggHPZ#-t4!Eq62Zf!nEGxBZ-zq>rVgz}>Lf7u(vVr%^E4@qbo z1Ih47Xjf6G&n=HIx|DI{qT<9&43uAfAu-PJTg`Nbkpa`mm}XqyjJIWz+3k<=J-(nh zN$n%HUSn}byeH*R27n79LYjbqCL<6et;bv9W6huRyzf76s&GUkGTH*BL%JbuRh20Zyt;s3|s#E~PIod373W2hnW2JD22UFAyiC4!3 zJ(c%(zpG_!OB+Wo!{ZcAjbt>pR(S4$*hTM5v=d+KW^Jwy2Tl=h!sJ=RaQVXccz)6A z_={q$#v1csm-2!!NdbMQL`bT3_uvdxo=zdQq|tpp=Gc9Bk+tx=xAyT7D|7Kyy!Vwg zbfjBOYBfFL^Ru{D?ov~EhqSxJ`bRLEw+EJCDX2Iz-h>qm#Vf+Zx>H-e{;8Qcs`%0_ z@`NANJdSB^+AVjbkZ{mON1U&ikkyHF?BD$*;UxV;GiAS$!1k} zl1yquk6Wb&eXz#bBe?#O4s;QFVpk58$Ii7Wc1F@#(CPejOD7up`0cb;K3-O_ViO1f z0J_d*V{EqADW90W3t|P!{hlo`HmsT3VZQ0F54crTQmm|!gv*L;lnf@!=E}Nca?S#^ z)Z5_EB{;Ml{ginXVrU&GYfsA!?O|w{ONZr5HlkVOvx7}FbJFTp zLPoqAv=n8U8qFG0-IyXJh+LRbf-3DP` z66b^E*ie*tz7#W(wmEX8dERQ8`<03)St)$ank2|NtW9QNehxG?&VcGA)M`?U@As0`$~&w z5I;(m5eor?qk{uq=I)>U)Z9Po@B3X6vJlS?CyckuY1Pqg3i1M2f$+Uc65Ep3|d zRe*FX-+1wx0}FC2TDBo&-J!BPCn!=t$Y+bjpE`gVJB@qMsv~IkiRMCMBr+k@f#xmL z_r4^4UiuT+fubYcSkGR7wP@yY3~ZsDOULL&jIXOk(0!M2h5{NGti(}#3U)4#8z36+ zzOzp@+8eND9K@pL7D%Kz^?^1m_?uSTZKd**TR}^sge9YSn+E8=`t68u2Wu1rg#JyR zE7CW7{aXgfCJcCE`vJ>Z6xu$ikWb)+Eh~^O0KQv4*Km3mq=$rRL(CDNNyQDUPD2Ye zp{q-Qs8LJpl@`B2D$vfP@{p{dFuA#ABvTk>6D0xqVQ%12rvTp61mDz=)|T0Z9q#Rj zMk?VQPeUOpIA8?gcm@fP6uvDwNPxGN)Nl-bGUsDK;(e~7BP+J@MNoL&8+ZL+cDu=3 z#kjh`V*>%lzYohMkhoO=4L*r}2xXzuYbLP`*ZBg_vQdvPy}(6yMRzALS!-KOhD6--ZOYBlL2BrsAl4OgykP7^uQpI|IKz}` zS}cRYFjBnX58{oI=q8b zC1^ZlvOq@+6Bs?o0z4HzYrO+qWpR@r7H>Adn*iHIiY+ho+@aU_%qjARqCBMOVoAhS z5Wv6JI?{oRbM;3SfBslQf0c|fI4we=A8j^XUvieq_yNWNZ9R02;|~BylI42h*?4Uu0wT^BwFrY8ff9 z@cm#$s)Pe-h#@luOlv8A;_TDm_dGpL{BXtQevYwv73tWA*0}r>Jra z-hz zd<7&U*&|S3+CvWr{eo$sx-|zONY=rWE$092uR`T?-bOpNAmD~H_zYpP`ngNjUmVY>Ms=y zi|^FT(xvi`XtQiN5m~b>`j?pfRdjr2w#tR%_Zt*Xf6MO^^cQKKRSErSMs-z)qHre% zETFx-XS1d$!&9K&oU}h-CZH)3mj7si)7%F-ZW_2vE>uA3*v7#3pZ+Gb)Yx@K3`wX) z0=`Gy$kvp^HJhzKAh@2FaZ( z;HZ+|y%!KFW}?O9hlua;gA{rOv9V3}|Fx5?USe_^Js#*Nyb|l(k24|9OAAP0MH*ir z*9y4WUdik1L&Qa+kL6b7r@C2}B6_-$(VsD@oh1nUd7DVs=Uh4-PASGbJdBE~O6ff} z3lTPVdR}>|2eZVf2t5UVh^AA850Ho+8T5?!a*o^ka+dhgJt4|-WO7W#LbqHSDY2y` zn{bJcL4rq{%jo#F1x`q~5lU@K*p< zdXQO$Cp>v{0t?am5y3n7mH3U8NX7*(G7`B!>rFgrz*$$vs@jZCPXdoE3sS1&Z-`X?KakBV)E^}Q!uNENQ3p1?H*+} zTj|Nge#sFVHf*0upT$4MScr84uflQUXSj<1Up2rD1$nP1>REAiX6V0A`8)$5dbY|k zHk<=!&ajPJm}8(IihrDbE{+Jk8Mu>xi=(V@F2aV-3B^4(i{3g=4bs&W+Mdz9bKnn^ z_2voI`a$xws)6Ix=|sN&(*8rUcJ`;aT}>J+=p`)>E6Y-nZKdY7nA5GS@dmT|9;T_j zi9yJ3gbWNvMpTFXcm^T{sE0t?Lx5*hUQ!wOIz;*x6app9ulYTrjf#E|fK0B3SfAp8 zW!0tmS^Vs2_fub)ri0J3rE5u$HOBQqfO87Zu>=+~&Q}kAQ*alF>tEa&z^Gk$l6*Wz zo8gr^yDBFdrx;MskU3u(F+1q+6#mg&uy@Wx6K7FNK8BTBq;P2o8tXq+W8ZpWvGVSj z_T-+ajae*}}x?k3VUMl_jQ3W@nQmj=ud zv|dq4A`{y#$kO1PIo%zyLa!ZrimVJBdQa?K!z9UH8My6egJR{?ShD*7{O+IkTpWv# zkw;K#Km$UD^ft9BDpRedB25TNnz9>2L96D;s$GL-EB|P6kt({lxYJciZSa@;(pZ9% zN{JS?SNeA5f6r8B+xr<($)56>FU5olb9LKwht`ZqZ_O=8+=O}-257 z`yp`7?-2PwA+kPrPxUs*2u4@U<))7>#6}SZ-NcPV0 z9n)~fprzN%A2!A#SG6cs)@YQNxhv_1r3@rUW1t?`8kZZ4D-}QFXSg5iTyAP`1k~i@ zf)^{>qkumWRFrXCW$${CR(Pi5R5uM|j|o)fMj!(xFy;&mGNHNM86D3~lK4elLWz+D z>SRb_<4mm#NUYgamySb}19?HhGuRo&!7f~tK7t^VVCI^Sz@$|@36ivGIxqsyMarw| zp|aX&j$lU5%CbblCdnx<{b|X3OK0$rEaWGi!jy_EQx2q{NWYx}PX=0oqchl6+JCu> zzb_sJ2cvIt4Q)A_mM;nK2&N~SNC;z@GU79d`$lq3*!VCr>`^7yeqgtVkI#yY=1@NM zX)MX_!INTn=^OLP=29%CV8M0-%arEJU844lhyLs_=T7$ANq!i!ZmAAj13Z6YA05aI zcQQo1{}wpAUeBYtB;%1j7JOoBwXJ^h6uueFA*{C%YiN*~DVFKSYCGb5l#g5X+;sR} zFdotDh}%~~sZR-4bdO~Y*UZrsC`}2@->e7fw9){vT04C+&6%YO7@=yH6aCEfrbVh* zHxR0U#Ig_Wc*;x~4qsT4lqbX@d^QF0ZK~BTRa9Wlt1}kymu9Tdwgjrlhvt-f!p~L7 zC)#H4evX*H+&r)0U#$enOF)kqu+9Kmd0<-mNRKm}-{%)4g~jvKAv}|)7Shfpii@?A zB`oKo?$^Uj*_|vyvg+IgUF3yf(5VP;rPqL2+_R-T55B5x&Ydcjo^M&^uFGdpp99h4 z8FLS_QrjUlkG6o4v`RU6g+D;@RBR45({*d5=$suTOO#`$no9t|y0Fq%`^72P zR4txbwy4v#cwaQ9RyBWY+BUN27EEJQG>K=`B$DVBjN7umUI?p4($~|AX=CX>Oe&ZT zeRKKu(@HicO4O1FPwJJ3qhY;F;J{+&bvBd1%HM!rQR|RW;pmtY$Y>~-cFE1n$f;lU zDu;{oTAt=D!XHji7p7Y~tn3HHCE__$60eXp|Hj!}$c1$--aGQff zm%cTlq4|(#L%dKp3$+5jTl?u)Bz&HpS4t3b*?wO6j@`O+G;J6GxNGfob-4^98J6X< zG}pO%8Xj@@*mNG2C(Yd39-YC^>;?=HK_vF?CzVocz=so1P!(u&)x zj8?rYzk`SiAA{7>n?~>k_!6r(m5wH?o_|nWa0oC{g6D9AlbZ((85ndZhaMfLYmn{u ztJEZ`Sta>yPq`o?9%cuzL{;Fy#^>nhJHvJGy}eci#_s2F5J}bS($kuZ5+@|NGm>iN zT!;J82eI+kM!a1*^W+8BepeO)dIN=igHa#Kze41Pgn@@z3cQ*4g0%(pbV4Il7IQE#ixSIwWn z>bF_Y$-3{-fZya>>dI?%h_Jk|!4^FfnXYD}^-?(Ky)3Z4M?Wy}v~uFZ23&2wvgEgh z(S86}Kf{BZ8I72$saT0+!M*1S0ttaVjyPv0Y(si|9_`lL6dn9=d3IAl5T6r*dEjY` zgg@I?%Cmw~?SqgBm&dnCbP|2{Q!*(G&RmY#(MYMR*=wzT*MeU3Ag4v}sK7n(rDlV$ zUSDEIZ>Pe{|D0Pxo4(^%gu#3@_hOcsJY&qj{uHGB9>45oRE?tYSYozegmfpVRnr`& zX0Wx*?}zn>9mvvLhNp3^om;shY4zddPMKrJ5vP->;VC^yl`P$MKICja z(Su0mmA-~Nx$X>V9jUY(A)!%u>Q0ndOc~hA5*GBX`IKK zyO~ZUC5tOQ&hi+dMx*o+j>b#e&;Yp^;Im8C0Inne@&e&UZ_O;!Wwz7VKUXp{&wK)j zLllSH&Cs@?=ZjeD-J>nWDJT$cf}gi$mN{L}hQs5VopTw-HTWH~iy~Tu7Z708-6N|$ zd6wxzmSQ{I}s`q(*C~^wnaL+BUG)O<>=KJM#RKCS&gB8;StTt)don1GMK`0r-jsb z(crH~TxEdq|E%6SGO?Y-{OtM9xB=mPJJA_=zAmX%=+%worE+3WY06a;-c@3*Lbg{0<{p&l8S!$_VjP6o zMzbu%6qEA&;r$dM)4UXe8W+73!nT2F6nV6C?s|7@N%9|YYx{5pFQQ&4s-GnnLoH94?5AI$3sMwb`6A&JS+>7eMl;P?qgMCgyL<6|^_ zd>TUSl>y?RN(0xd!$Gv3F4dJ9m`j=*I~KCtMT4}&M*@NmJGS#aB}AQ?J)$b6To{Y( zeFc9*?neu7%oklCs&QHki3cCPY4IPbvz4IoiQ961i)HGmS>sz*f&%ma>eIeqGv8R?SEk8NB)yh!Uz8}20;4vd26#H@O zAlsLFK{-(N#(PjuQ-^aY!`qdB6USUIRLc<}nV81+q^n}3RWX~m zp9(N(bej2QPjRmfOuGLI$aptYU$-eDs5k#q*tT7ZK3Ps`G9X6PBaVbLDdkL;mEQMJM3 zaZq_NmZ%p9%lVkQ#I`3A=gWe@;QR_7*4lI*3fuYvP^hOu739%Q^bIZLD*jf5kDzm| zh!IVu?4@)rRyH)9S-qzsPqoR?46*fZ@vVx|E#XDp(KE3R?8p)?xW{+2m9}2u(c^zt zmrsW#+WX&Nt~-$8qG+X_BO+V2L#}u>?9fe)#!?i-2$$^aK4AFYVc{1rEP=c%-W$^y zg~-Z)ngPj7Iz$?l;CiX&KY2gdh!L{iHn2M^mpH<{+9BRIk=b`S^lU{I~6 zG1FxNvi@@VVwCUTI|wSJdTWEF#U{7aMEWVA=26K`+552u*gZ6+aJQ>-KOF<`Xc=n* z#h#$$F13`AZu%TvI2U`ween9L7iFmI1)B8G-<7fHYcb~XG(>0bNT>t#I#nPf-z1p0u% zZ>!Z}8ZDQHl25gZ^j{OV+A0pSz=M5>ID+p4xEtL}n+4T&(kp;N@NYnZ-xG(5ZqF>u zz-K2l!wO%-3p@BbH-v6Zfho|=`#XjrUqrMY-`yQ`|Xk>zfK)m&0Ou zL92)+HLZT^8b)_iH|goLl{2+~VZ-hK8qO7pH({A{m=(zMl(Im}Tkm4ax0--Z&r#>j zg#^vN=B*}$%);3M@eZ1GgY44Qb9fHqDSk`31@_^%Y>lTTx#+xXkDh<`%ZKj-hNtqb z{#xXG233)wHtImniZkljc0Ew&V{a!^VJkb(h~I{!XSH3v>;C>_#5*5iYByQE6qvzF z+F{zsa3pqaXKdZ^n|4tOT*qoCQ78@jtp;zevSaPR-JW()s8H%$)wS~lp{zQobPGXh zN;}NBmYY#+Z->u*86K&gFGIFP6+CrUv22j)j?R7Zw?g>gZT#@{+-mv0ezx!@G(dMo zQWD+8M6@Igq|NQ97Cvd1P#+1pEVwLKgrd4ZQWS~4H`3+KqaDb`YNNJ|>Q>TQ-n(ws z5tBe+3fCH9;DqusQ(4Fzpw)Kz3pCKqd-Nq9MmI)SRK-F9EyoPNA@zB|6a~apby~(P z^_aY-^pe+;jA^84Osz>qd|qg|WZY#pYUPa7__+A}XrnI?O+eY(#FYI$3`50eb5C_! zmR=j%w&B5|OX8ntJyxk&B=`(WQ%h z#Q&*2oN<5eo8BMdU&`8yByIlhs`l<{db<;Uu><}nbv{CH^mr~D{lNFX?7%ebzR%h> zU}m}GRc@6W>V;mXuhNxIc&nbf00+>V=GO-fr&f`o*Vt}GzAQRLQxYBywuBuA=YhiV zTn0c}3~2li4fGXv1U1;X4j(0*Q@7Mi#U_#%d#LPlh_HlY#_zJP<=1RP5O5M$YSw)j zBL*XZYFy~8`-z!$H!%nNu5b^oG9U<`ej1X;mTZx=8|6>IdBn(gCbdU_r2A2g4oAET zyfH?WF~U9*(d>mq>~#*K4OwI+HqlkcG|<<eAsofNn2 z^cf|zVC;9nk2@}jqNa4b%Jaz1-|(i}+Yy;bMqsoG3VbX(Noi((jDC*8fWk@!vIigs z=-_gglZ-JLUEjqYxL_6%wI2u)eATK4O|{kt>-z2^&OI$9) z;(y+by!(Y(>y`z&$ctRmKKWuV@mJJMS81=cP}C;7 z;DB_EAcdbNYvso(8zpf$%Xhq^Z6;#Dt(8|=zWGE2T+s{egmy*Jouf4AG+y<4(i~CK zhhQ+&LKcvKzQ$AAS$tTfL|iEmS4)S zw3hC4xW83gUZ^Pz>0L~$csjxU1*S%JGi{q|C?sc~M(gJEaF-u&xXHjniQ7ufl~%uQ z!Go)L`m*vcaM7gZL&r&h4Ik)D@pYG4F3f>Do>=*#`kl;~4KBjA_nofJo)ZV{zX@ov z!2PQQpEOo(C2=<(V@P;|>S_I;v!)@hAnF6$D-nbM&^aWyE3r(dpuB*cX`aW0Yc?%KkKhX&l zyu#jS)E7v_9*64HA)dMvX7Dc6j2*=k2cI1@kzMlZq8a@z7Qq@JAPFxKA%v<-c%Me{N9+44L=Bt1 zVMK`Doo%i!Tj++18pS*xDFeqPMRT8v3SmCA{$d)G(r>%N8$=FXP-EEUg4UO{Y@?_q zWnd%PKd{3s7xVmAYGAHo{@2321_zd@-EacNubfZ9I^2kb#etyz#?iG(913)?Xb7*b zDtwNDoi0%x*E)*}ue_Z7LU7R=zC$WICSUr&@pxq~H2buEfsXdgPk*&Lj^I4b7cngQ zkDfwx2G^Qw7e7?ZXV2(1zeEMj!_$Wg3DA>(OA+!6`I+$gYhB|Rr4zHf@t?CW&gAk? z`LC$xcRXKdT*R2Q%-2P7DPvlm{(Zwzo73nF*4?tGav|?TJhGyOcpVpDW6@|U32XUw zhr4H+>yh%~u3jDby&`drnqyr@e4TZp`uND<6|P$f%x2oZ%f3Q`1N0EU@Pg#%<#Y5M zk|8$}KKL&Eg?(vD%!gFF{JoH7E8N)>sN3E+vM9PPN<%$I`@gd?q6JZ?TX@4q!CUF+ z*K5rPa8hyp7j3Ag^$f+0)}I`*6@acyN%r1zJ>i0lFbi0aGHLzXqP017GOt;VMtY+! z-6(ORA#(9VxY^KoKb*>}phZTP1WD-{zi}RVDmzrtYzfURELZ#k&G_NvwyyKb10K2t z%hp!MQ@SqmWYwFcPzTRD{VI^+dy@!0f~soPYt_EkI0?U0!|x65YVbu9*YbMA$9RIz za3bJq-m7aYqhRQEMig`*UOARs`hjF%+pUYIoL4vGJXcYBw2Ni0l7ZEdUW4|hjStPP79FhD3a&WES=+Oq=rQ2O>IG!btBuLZ&r-Q8L9pc~r^DuZg%PMv8( zeG(mY06tdoq5wiUw6Y7*6_;wGEw9L?5>Aq&XMV0^|1Q6UA-xR)W5)-?P1SoIV{ZBA zPB8o2Ud^-e0PUkhw6+%+s&L4gt`muB8cEm8fEjg@3O2WPRK;kF?+k;PYjEwqfr4)3 zDh0zzJqhRYl{m`@SGt4+Z5tnSGu{G!5a(aEemA6IF(PCN56B~8MlUbjEUgd~tjq@S z&;ykn3&_OVWLx&hc6PbQd~;T}2s!w8u53N8M#AahG?_`@QpIE}>e6Ue^pd(sL;#T$ z(5LQ7b#!-tP1dH3&B0_b(M~C}{_FIsX+LOwO=Ho&Nh_Y=xT^3enT8lJ!>yMUG+x}1 z;tt2u*~`?63EaE!RZm=fYcF(`5jyxk zsG5A0KG7UwZ=Gi<+qr@9ak(}{?4whu20E0QUC$!ozo2L$%s$Vlx`=EOgr3po5_N+u zHdn!95_reZowu@7Dg_O64~^asF5Oy)-V;h^Qs8`DBpC)hl|O5vnW z9-Yl$Di(K=6V_ODGjaY0=IJ6s7g3C*GpK7Yx0_(bcuoOS#nA^GvFGa{^$S$Et2O&# zt>^-MEe!#~=F&31a!Q-7Nq4C*< z|Bw)F?bSV%H5qEh2Zb6t(!Gc1PDy2R$7L|?rVR#m7-JvC1Z9&rw!xf;# zqb*8=!-c|I8)^&dhcagY<>K0C=-9}?D{)|pAbt5@Hh?BkI!RXC)64ldz@4&%W{Y;H z78%|fBt2c$s7SrW;=E{ua=y6~CAaKkh9_@A+DItlx!?Lc^XbIrS(jo4&33E!S@^y8 z)io0K<*(s?cQx?#XrHi6>Z;w+Ze+k55RYCVDd%IF6nP|HgCQR5m;xdgNF=vxm7SjW zWz{Tk=P}e_H#%XIs}EN3zn^Xn4%&?vzrUZB9^S3A+jyQl37DXAeI6={+gf|*>D}@G z3J(xp#&3B+tN@mP-m zb0BJKxPE+zZ~2O80~FiOL9_h1j}fQf*rT?0-k^lmtIF}$aTviG)CCl0-@Q~=XFzsb z6ESZ6{tY=%&`5T#jH{KaCL;MeDK#0^!AlzDsvAKsRWET>+|2Ux#q~0nx6QOjw=&~o zJNK?H-#g}g-7rMh}<2<0?z?`mO(tDLTVR7^_q(! zV({-@HA5; zPS~j`(b<$h{nhuUqlw(6&=bd_QD9ss5fXCFbWwclo|Vw(6VMH0S3c98hcr@pptk52 zyGw%->J9|EzIX{VL=&@)(Rh=2S5dj?3UB2~^_Pq}yW~k^>Ps0?@*_}L!>t3=Obu=e zxGlQ!B))vKKseEJl=KjsCsnq$75{iLcY^67*%|e65<|j*LLOg6wkv1OMFrXb>+t$dgQKc#`V_PVO7Tp~5ac z>FdE*J#Y903+P%s$$z%lFhAh==d`M-z*pXLSptO7Fw7OCg26d5yJmG!zM>&?wozNZ zz)XEGCOR8&Qhm>P`n{Lu9}Eg*2EGWKTm3U#%kkV+s3xiH;x7zj$5ccwtQQxn`u7Oa z6%*47mN4)UJee=>Gb=S4ZEn5(`Jc(2d_)3nJlozu?iPo6k=KKf(xGoUlBqD@D?dbY zO|U7%YqJNhb2Qabi*4Gcg-Ny?&^1Nmo$2u#@0W+0uR?javU&sC>g2}{#3Y{22uHTQ zgnXok{ZkgfBIOT+qKtGGxJw7Uog^V+grE82|59g0{Fz~7L?#1q{ld!q$E`S+G|Ls6 zx0Cf7@JH@^##R9!0u(2_1OYq`i5Orw_ABwl=N_oy??bdvB$m5|m*rt8yHR|a4G*UZ z$bSTk4ME_7w2Nu78@6oLA#i?QuV7G!{6+abkePaOXNqR9os=eqoQ`?pHz%4IDCUOV zLm+pB6s*|8m9e+leUyi)s1Vd<&I_ZJSGQp$uy)GJmXDT%#&DwQ)99JHW5+zC4A;!9 z$B5rdq%12A8tlUg`S5O1(QHGc8+#5vrgP7!T38HZe?Ek2j#szj zorrih!+ES|zS9@?0j^_<7`}*KbDgDrSB)`sD1JbKIJ6cpAoFa`?8ylaPQI*XjvumtOoO`t90o%=#xnBUS?m4#MvYmo99T6l6lL=0Yew|mKFQkcn)$3TJacMC z_xZbt2;sWAtQ21qEDc1(4bIO&n9MC&td4o-m>#JK)~~x68#eV}8udQcqeTmTt1-ml zmUDW5sz2B|DZrf6diB9?8zwDwa4@tk;ElN0xwO?q>|a0`^r7o6jp)W^JIw-_szypd zKcN3K_ck}DQf1U^VbM_1#^Qk&LYb7j{+z0HbgbN_4d`n@Mpat}oolGgBdR+j;@k09 z>Mps=zE{wv@^~Hcv{C3YUG=)h&JYQ&;-Rk3yVd@EhflJcqx03mq{vLNKcdA@Tg?6K5LUN!Nfl|Jf3^>`)J{2^vYqw#d1xi+=GBNms(DdtY- zec>vjt2m8ElAb0nx^cg`CBriMR)pJZxn;9!2EDa>q?fioF>oTOcIwnP9Y}OI+ zCi~j*kj0hI#2Oyjhj!^@1kDr~!Wmo2O$o=V#BjvO-&SY*#bJ4p^iu)>nqUYzxpDqZ zrF)9jj9nc^310o)J+=d|h1?0+7E#T@_lqD`vQFG4mw|^T!sr+`l*{aB))!lD(sV^D zeOsgkVMqdt=HSGc{%KOj&B$Iw&|>BZFz~%tqz80)zlhd)0WKV!IAC~xOopr$PHbhF zDb4hFpF$b-Hzms2OCd1yeyw?`$>qpiF82#g-p|>OQ-&JwSU1|%8C6_)TWQ5n)>J5u z1UgGnbQR(Y{qBGSTx)l+CzVSy*A95f-$!f3TB)Qpl1$vID@K-}Dz~4=vL#$Q)23X- zxtr@gf~dP3|Ed+so=(i}jL}!8EnD$hPg4KaWmWMZ3RQZO1kYt%&i-ABvR_f?;XOY$ zlgiNsvjy56agQ!V?Q366DAE*`Ey3ruGUbnV?pl;xjbeqHv=WPlZu!oT{eMR7IlY95 z>IefopT0m=$$O&+`p##w;}iTN@>)JHjrZH?y0#Rt%7LEk2Ne3JuDOVfQVEUxE2jl- z5XR2|%ogW#P6(}9<@*)$%&-V9PXWVM8pzpO!m^&#dYfA6;U;FLsmF$vx~cQ0#Y`)! zY^y!-mvhsK42@H7#rS3EDj!}jNNm!J^^3Ue2#X%j55=K)eoPiXbP*#eG1o`!=yf>2 z6%#31^(jhn&y%?n!aYK{a;6Pwx52ut0KQ2U#5Z;0wp+_XBtc^n->0rKNc=yEMX3lN z#bFn_znA~~LYd!PB%%658x_V?KNP5pj}9=BAebKaIf*Yf(BjPt`;7#&vzJV^b(N?WrYw`Yjdc( zQ(Ey0TJblh_@F&JcDPp*p{JCjMCl94-1xwGo93A2eYVwz!Z#(O9AAqNf33#6W-{vx z{8G;7oiZ<`i?MK)OssORyksW%qj&zO+lVY?!S1v-=Sic}j5pA(9>{g-R#(|{+LJnF z)OC+0qJgrl9Ci8 zB&3C*Q&M6E7#Nsgf|LdY0g*;R1OcU6B}D;|ltz(|9FUR*5%>l@=jb`>-ur#)TX)Uc zf9!dm-tW6>?dL}$;vpDuH%U5*C;EQYo6jl9sWf9TD|}OPP>WXQx5?bC9jf=yG6xh| z4hNO1XSNEBW^cE;znq%9Lqid_WUtYON)%5smxdj)1^Eb@J+zw}Q)s)@2Ay-gM5-ZC zbqmF;HjKU5(hN^6p7aO4IO>8lHgH!_i6?%MV#dgjc#35Btc4w2wWPj$xL;IiPzGc_>@OvHF5fNYJ9e&0XhX4cQXsLHe9_kkCXK&mYwK+Icx z16ht;IP8ET;=26jwd;tI%(v}^-BMEzblEY5m#?^oo4PBwS86pa(&m>lzI8oVsIh95 z>h|Iid?_4vv$^!4SjEm<_I7AUWwXu&YEf}o_7w95vxT+1<}a;U3avdB$*Qz1nAV);MqdKV~cf~#Opzev7zsRdVFh!t9MlN z*O3LC(84#i?$y)QD|T>Cdq0D0lXQY&@x2M9%-Iod%b^!MkStfSksrx8OH zUA}qRm;iimINy7LO{Onq>-HikK6OSE&r{3CC-Uf^e)}R_lqb_VO@(TvbrvmS)|M)= zRb;$rMra`Y({GM3>E^BMnR878BjP1Wv6B9xF*iC7Z%s15Pn$E^APzFxqnRA@<_sJ( zN1uck4VA8`TjMO-_e7}1+1nVvqEo+T@*Zh6HuTso2s}XU6Re-zpu?De z%p%7mrfYZ7o$|gmF<&~&dm4ydLtOD!71K||8+Vx*Y}+Ti#5@(-^7JWV4Nc=7=PvvK z<+Rc62Ia1AGG}7Ns`3iS6$IOS?m*wN*08QbCZO_cPNtKE`mH;^1>x8@;leJTE&%G3 z?G+%$b8B0kr*rtwS5?NeG`OM)@8x0G;DWXJ=Y&B8RvZ3#UyOVscV(=HGPd`U3H0*x ziGAWMS3&Z9-LfkUcOi23pW-)hW4fI7h>~jF)M)wyE6gshf_%SjlPOC~uQ5&PRVNGV zM{K37d4KJFnUhBy6@SL{wR(zC%tW4VJEBUt4;F0~i^Jib--(V_jK27oHf?28qDSE_ zqb%6utl@J3xl=Il<)kk@vHOBxc^FP_?oAoO#e7UcfU{z{h|d^RXJJ~jGqf3GVZ zqxI?J$&LYRqY!+`8zX-0c2e~YKk&o6Nc)wf-QhTYzzcCoO z$Juh7ax6Gq#<=1Y**LkT-^0>mjJGB#V+RT6maDbOC+1zRV5UwR&RN7>&TBRwWu39-B+zTFm}tKHviR8C}FJvLf@`u?+H7jd;) zg6I88YhI|(EUrwU%(DPpY!l&jc+K;7Z3|*2vg~L)nPcrx0QV4uWywTqT`No=oN-+Q zAGf3h<1_?aF4hf*%8oPN3{K?UbPdMsFj&3K>i;KTuh6D5|LIkx^EBCUhB7knCute-Tx{aoa42W&myUDJKN@Ub@#1 zS)QGbL5ZT#bIQqxiG&2b#j?pdcuv2O__j_!yI)pzQ2Kn!ff~)GxsBlcWFnDR?z4sL z;()ntZ3n`g4759=vq0qODKXNmXVkH@`uk{ZuSXEk5K~Qamf_HnxM)tQM3i33Lc_F_ zo&Mlr4~P+RjH$k{aSgqa(Vs%Wx+GM-Sy+18VvK|$K%U=Xm(;`U_)^w;-WURtp~X)Pre{K4^vMHmz7I z|6=3f%JqA|yE=|ekkB2P83)6PkO$)mzgs<30|am ze?5i^w%zPv(=o5;vT@Wh6Cjh}N|eC^EDrk6aO@8aUJXlCD|Z^)_~te#clekQJzJ&{ z2fyBIEMdD;OD13Y8m-Z-Jwbpkuxcko-#}1%uY+<%rd92lGAlRU^)!u03r})*Ra1su z;I7*jq?rShoT zp1h5yoXqZ{Q|+LtZmLA4sB|P8e4Oh-SY4$yVTvp^fI-M6@SeEEvt9t1c$Kj` zl;nl;7hxs{QyD!Y`x>|FDMCYBJj`TG3lKa(P~H^QywAYSx5TBMs!|%S_o}3*-;q;) zC7hpwT-VP?kv3>eWyhDR-t}R}U&L6kTy!TZiMz)l=>g=GiBaQ^Vm$zr)6jOF(QHbL zBz!_-B+d7BEfzQ)#>+;WDnC;^JQxl?qx?Hv=aEOUA?rmPoOCf990n}%>F;zM6{Mf1 z)Bl3lS+uf-eUhgM@(${N+L;rPfnTJh@$!c_3CF?NK6RRBh}_G2492#_rP>&|xzQbM zy4=a%K+M@pkXNbJ0MMtI0R_-~rH-s;N47NKI?Oc`i`0gAe zY*hV@ON4fCax$A_;P(fzcHI2bqI1>^UimrrwA?7gJC_|e8oKUXkciPyg%Cc6YSNs2RN$>e~y$)ys2wNwg={1B4AO=FSfBh8=RP zsy`MYzb&G&TqO4U)RbIMV!&weBzv}7C` zkT4Q|9=b=ZZ0|qKPIiN(YSk`}g%*#rdGK(!{S>~@dgMCrqH=3Q_4d?oXhD9iceBcP z%kuSC0fQ&@T}C`0-V|OPLfZ0v5jVaf+wa53wZR9wD{*)F36!rr+i367y!Fwf1b-@8 zk*_C9Pm|Huq*|1MMO#T05vLTh}919#d`BJ!mRu*d7xkB2GRUEvtR} z(!9GVft^W}Ji8{nFa5IJmk@t1$RPGKg{=AGe3H-qnMl7-98QvxDC1#|=SC3vuEN<`( ze`b%vc>-RC646*v-EUfvV|Rko-gwrv)IuDEzI9v@ z9V8>R$x9=w7~w8}_^FUV6W=7GI z@1>1X1EvB<8M)%+zgz$QRwf7Ou%ds+si0f9ew6X>Vq$T13&dq)*ThO$bNZl09i7v! zvqCGLTH(%V_iqeQlM#)W*8!p8#DO@*6FW{yWYOb&o=Es31^}cO8 zd)Hnk!gw(wzSaueM|z5@*)k)i1T_8fwCr^kiT&{;(u?opRy_raXr*I`^+wIaSqGrE{^));}V6`!JF-0)l#9m9CwQcJ~XT^Yb~ z>qaV&t|`Zuy9I8p1s6(?5>D~o!VKz0B%@bn=54or$77k+zgCF? zkv3-}f(Vfpss!U$zFFhnP}v50_tqq6onFO-$J(p5OJ}n-o)^sbytuWEK6~By z$%Yh+!9)&r0za}6O0PiB5uZkXvSj8?e~?D3EsjZeHE6-QqVwpkO`_f1>x}Z>7W;f*l2Nm-5N#sNPK!N_%MOFE$ zAJpa0uO<5|ySr$%>3C#fw)50ooVWUd)$P24Am--b7QzkMLfOi@s3%;53^b@mo4lcx zL+EjjqgGnev+NM5jrq&9z`j(HL)&O&pTy$k?rQ|q1V`K=4~>FR#7`eJ7?ko3>UF{;0eLv14H#i}XO${-P6srdl2M{9GjswiUhq2V|;T5HB# zQewr%j^dVL1Y_6xC+n{XVz-~&HVncfyqHy>t4~#Y>Y#0>okeMSJYtPb^Z+)6bd2;~ zVUV`)v=?vQ8oPPyplDta>`h&C=fbsU#0T==I|9KRH}kI;{3{K}X-Ah+Zg4 z72ST%tcYisbCGe?(Wc}Ti<8EXqH9lRKgr6ghTB1^kW%~v2WVr5JLBu6sdW#Bl7)*j zlN%R`o2im^ghw?TKWWqJj3_;26rM6=w$fvIa1=jYXhxJQPScV-a&0FsAh5jXCjfT_N=xDxm~st-$IWiZmTzhK9S#ULlVU0!2ad8BJs@q(?;H7$d%DXP*%8 zcGV4dTUh$848sSv7@gTxOjUWc<>&2PLK}xp78CMpguFoIP)#1LOqihoct|>ABi+E5 zMJ4&tBE8vHo9}odQk$2P zd)R(*w*lnl_m-VIC$GM5J{$$=$p3_&Q>*8;b%ECG`F#p^TcP05Fb2J8*?gKRL6Bmt z4QGl2MJUCaFB`CZ;O2?j)NtX2kO`@d$Bre*05Lt3*>ELa-lGy?OxBZ`g)fY5QrTuH zkueK*HK+wwGq~dKMVImFB`rzrq+4d(#S{M0NQ_UZXK!VCFd{C)JES1JgeQ4Pd70*M zzuGkh$z#^@TkT&&Ud>oU1{*#O&iQ79z19A&b6@`xo%R3D^*smG8vezp{R#G!2RZ#k z;)SCT&>tjUkdqh~3iiOVIFVu!q7q`QoaCJlUK;Y-RW2IkITmS?KaPS126M+Fp7#iUOz6|hyctSiJpa3Yu z5#fOF1E6342PhQg0}$2MFvUuP0D3S_?0;}L6yo#~eta&2#Kr&yoRfk95Kq8Qw&{;u zM+YPrDGJa=ojdbEKu}ot>A8p+58#TZ_z#2F0S~Z)C+ggeBN%{$c)+2404yIF4uOI} z=fXY^lq}ugQp(=hLu48)O5A6yl8I-0_J%>IYfUH z^Y;Rt7Zd`*4ndqDV8n0r{2}?$ow06eh4 zqJ9K>Ud8jWVXJ~dVDo`^B2Wrqf9WXvU@`xi;y)nBzm_R28}jNaEHwLkqs1;$Yqg)i z*<0s4YNV~`IUM`H0?__p@BazT{^K!S1a%%07M!gPc6LBRQ2-5J?DY7_?LH@ca|8Ye z{@j-$_ivL<%-a+64?MTXA19=9M))r(w=g!}ALQtN;o?u6_P=!kb3%c!C~hoQ`(J1~ z{ipE$qvoHO>woL_KP2}L4)V-i3v8|8e+#F_8bM{`c29zpL}>{!{(WmpuPW{qNVS-)$sX o;QaTmUjKCe_jUNYdpT>If3+$NfrLcoVno*q-nG5Bl$7-T(jq literal 0 HcmV?d00001 diff --git a/src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nuspec b/src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nuspec new file mode 100644 index 000000000..ad44185a8 --- /dev/null +++ b/src/packages/sqlite-net.1.0.7/sqlite-net.1.0.7.nuspec @@ -0,0 +1,20 @@ + + + + sqlite-net + 1.0.7 + sqlite-net + Frank Krueger + Frank Krueger + https://github.com/praeclarum/sqlite-net/blob/master/license.md + https://github.com/praeclarum/sqlite-net + false + sqlite-net is an open source, minimal library to allow .NET and Mono applications to store data in SQLite databases. It is written in C# 3.0 and is meant to be simply compiled in with your projects. It was first designed to work with MonoTouch on the iPhone, but should work in any other CLI environment. + A .NET client library to access SQLite embedded database files in a LINQ manner. + v1.0.7: Update with commits through 06-FEB-2013. + + + sqlite sql monotouch database metro winrt + + + \ No newline at end of file