Foundatio 10.7.1
前缀已被保留dotnet add package Foundatio --version 10.7.1
NuGet\Install-Package Foundatio -Version 10.7.1
<PackageReference Include="Foundatio" Version="10.7.1" />
paket add Foundatio --version 10.7.1
#r "nuget: Foundatio, 10.7.1"
// Install Foundatio as a Cake Addin #addin nuget:?package=Foundatio&version=10.7.1 // Install Foundatio as a Cake Tool #tool nuget:?package=Foundatio&version=10.7.1
构建松散耦合分布式应用的可插拔基础块。
包括 Redis、Azure、AWS、RabbitMQ、Kafka 和内存(开发使用)中的实现。
为什么选择 Foundatio?
当我们构建几个大型云应用时,我们发现缺少优秀的解决方案(这并不意味着没有解决方案),这对于构建可扩展的分布式应用程序(同时保持开发体验简单)的许多关键部分。以下是一些为什么我们构建和使用 Foundatio 的示例:
- 希望针对抽象接口进行构建,以便我们可以轻松地更改实现。
- 希望这些块能友好地支持依赖注入。
- 缓存:我们最初使用的是一个开源的 Redis 缓存客户端,但后来它变成了一款具有高昂许可成本的商业产品。此外,没有内存中的实现,因此每个开发人员都必须设置和配置 Redis。
- 消息总线:我们最初考虑了NServiceBus(优秀的产品),但由于高昂的许可费用(它们也需要养活自己)且不支持开源软件,所以放弃了。我们还研究了MassTransit(另一个优秀的产品),但当时发现Azure支持不足,本地设置也是个头疼的事情(对内存来说)。我们想要一个简单易用的消息总线,无论是在本地还是在云端都能正常工作。
- 存储:我们找不到任何既支持解耦又支持内存、文件存储或Azure Blob存储的现有项目。
总结一下,如果您想在开发和测试过程中避免痛苦,同时允许您的应用程序实现扩展,那么请使用Foundatio!
实现方式
- Redis - 缓存、存储、队列、消息、锁、指标
- Azure Storage - 存储、队列
- Azure ServiceBus - 队列、消息
- AWS - 存储、队列、指标
- Kafka - 消息
- RabbitMQ - 消息
- Minio - 存储
- Aliyun - 存储
- SshNet - 存储
入门指南(开发)
您可以通过NuGet包管理器安装Foundatio。如果需要帮助,请提交问题或加入我们的Discord聊天室。如果您有任何问题,我们随时在这里帮助您!
本节仅用于开发目的!如果您试图使用Foundatio库,请从NuGet获取。
- 您需要安装Visual Studio Code。
- 打开
Foundatio.sln
Visual Studio解决方案文件。
使用Foundatio
以下各节包含Foundatio可能实现功能的一小部分。我们建议您查看源代码获取更多信息。如果您有任何问题或需要帮助,请告知我们!
缓存
缓存允许您快速存储和访问数据,从而避免了创建或获取数据的昂贵的操作。我们提供了四种不同的缓存实现,这些实现源自于ICacheClient
接口
- InMemoryCacheClient:一种内存缓存客户端实现。这种缓存实现在进程生存期内有效。值得注意的是,内存缓存客户端具有通过
MaxItems
属性缓存最后X项的能力。我们使用这个功能在Exceptionless中仅保存最后250个解决的geoip结果。 - HybridCacheClient:这种缓存实现同时使用
ICacheClient
和InMemoryCacheClient
,并使用IMessageBus
在进程间保持缓存同步。这可以带来显著的性能提升,因为您节省了序列化操作和调用远程缓存的调用,如果项目存在于本地缓存中。 - RedisCacheClient:Redis缓存客户端实现。
- RedisHybridCacheClient:一个使用
RedisCacheClient
作为ICacheClient
和使用RedisMessageBus
作为IMessageBus
的HybridCacheClient
实现。 - ScopedCacheClient:此缓存实现采用一个
ICacheClient
的实例和一个字符串scope
。该作用域会添加到每个缓存键的前面。这使得范围化所有缓存键以及轻松地删除它们变得非常简单。
示例
using Foundatio.Caching;
ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");
队列
队列提供先进先出(FIFO)消息传递。我们提供了四个不同队列实现,这些实现都基于IQueue
接口
- InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。
- RedisQueue:Redis队列实现。
- AzureServiceBusQueue:Azure Service Bus队列实现。
- AzureStorageQueue:Azure存储队列实现。
- SQSQueue:AWS SQS实现。
示例
using Foundatio.Queues;
IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();
await queue.EnqueueAsync(new SimpleWorkItem {
Data = "Hello"
});
var workItem = await queue.DequeueAsync();
锁
锁确保资源在任何给定时间只由一个消费者访问。我们提供了两个不同的锁实现,这些实现都基于ILockProvider
接口
- CacheLockProvider:一个使用缓存在进程之间进行通信的锁实现。
- ThrottlingLockProvider:一个仅允许一定数量锁通过的锁实现。您可以使用此功能来限制对某些外部服务的API调用,它将在所有请求该锁的进程中限制它们。
- ScopedLockProvider:此锁实现接受一个
ILockProvider
的实例和一个字符串scope
。该作用域会添加到每个锁键的前面。这使得范围化所有锁以及轻松地释放它们变得非常简单。
值得注意的是,所有锁提供者都接受一个ICacheClient
。这使得您可以为跨机器上的代码确保适当的锁定。
示例
using Foundatio.Lock;
ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();
ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();
消息传递
允许您发布和订阅通过您的应用程序的消息流。我们提供了四个不同的消息总线实现,这些实现都基于IMessageBus
接口
- InMemoryMessageBus:内存消息总线实现。此消息总线实现仅在进程的生命周期内有效。
- RedisMessageBus:Redis消息总线实现。
- RabbitMQMessageBus:RabbitMQ实现。
- KafkaMessageBus:Kafka实现。
- AzureServiceBusMessageBus:Azure Service Bus实现。
示例
using Foundatio.Messaging;
IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
// Got message
});
await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });
作业
允许您运行长时间运行的过程(进程中或进程外),无需担心其被提前终止。我们根据您的用例提供三种不同方式定义工作。
- 工作:所有工作都必须从
IJob
接口派生。我们还提供了一个JobBase
基类,您可以从它派生,它提供了工作上下文和记录。然后,您可以通过在作业上调用RunAsync()
来运行作业,或者创建一个JobRunner
类的实例并调用其中的一个运行方法来运行作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using Foundatio.Jobs;
public class HelloWorldJob : JobBase {
public int RunCount { get; set; }
protected override Task<JobResult> RunInternalAsync(JobContext context) {
RunCount++;
return Task.FromResult(JobResult.Success);
}
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
- 队列处理工作:队列处理工作非常适合处理将由此队列数据驱动的工作。队列处理工作必须从
QueueJobBase<T>
类派生。然后,您可以通过在工作上调用RunAsync()
来运行作业,或者将其传递给JobRunner
类来运行作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using Foundatio.Jobs;
public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
public int RunCount { get; set; }
public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}
protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
RunCount++;
return Task.FromResult(JobResult.Success);
}
}
public class HelloWorldQueueItem {
public string Message { get; set; }
}
// Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());
// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue
IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
- 工作项目工作:工作项目工作将在作业池中与其他工作项目作业一起运行。此类工作非常适合那些不经常发生但应包含在作业中的事情(例如:删除有多个子实体的实体)。当你在
消息总线
上发布消息时,它将触发生成。该作业必须从WorkItemHandlerBase
类派生。然后,您可以通过JobRunner
类运行所有共享作业。JobRunner可以用来自动地将您的作业作为Azure Web Job运行。
示例
using System.Threading.Tasks;
using Foundatio.Jobs;
public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
public override async Task HandleItemAsync(WorkItemContext ctx) {
var workItem = ctx.GetData<HelloWorldWorkItem>();
// We can report the progress over the message bus easily.
// To receive these messages just inject IMessageSubscriber
// and Subscribe to messages of type WorkItemStatus
await ctx.ReportProgressAsync(0, "Starting Hello World Job");
await Task.Delay(TimeSpan.FromSeconds(2.5));
await ctx.ReportProgressAsync(50, "Reading value");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(70, "Reading value");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(90, "Reading value.");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(100, workItem.Message);
}
}
public class HelloWorldWorkItem {
public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();
// Register the handlers with dependency injection.
container.AddSingleton(handlers);
// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());
// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<WorkItemData> queue
// NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
// Foundatio has an extension method that takes the model you post and serializes it to the
// WorkItemData.Data property.
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
文件存储
我们提供不同的文件存储实现,这些实现来自IFileStorage
接口
- InMemoryFileStorage:内存中的文件实现。此文件存储实现只在进程的生命周期内有效。
- FolderFileStorage:使用硬盘进行存储的文件存储实现。
- AzureFileStorage:Azure Blob存储实现。
- S3FileStorage:AWS S3文件存储实现。
- RedisFileStorage:Redis文件存储实现。
- MinioFileStorage:Minio文件存储实现。
- AliyunFileStorage:阿里云文件存储实现。
- SshNetFileStorage:SFTP文件存储实现。
我们建议将所有IFileStorage
实现作为单例使用。
示例
using Foundatio.Storage;
IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")
指标
我们提供了五个派生自IMetricsClient
接口的实现。
- InMemoryMetricsClient:内存中的度量值实现。
- RedisMetricsClient:Redis度量值实现。
- StatsDMetricsClient:statsd 指标实现。
- MetricsNETClient:Metrics.NET 实现参考Metrics.NET。
- AppMetricsClient:AppMetrics 实现参考AppMetrics。
- CloudWatchMetricsClient:AWS CloudWatch 实现参考AWS CloudWatch。
我们建议使用所有的 IMetricsClient
实现作为单例。
示例
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);
示例应用
我们提供幻灯片以及展示如何使用 Foundatio 的示例应用。
感谢所有这些做出贡献的人们
产品 | 版本 兼容以及额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection (>= 6.0.0)
- Microsoft.Extensions.Logging Abrams (>= 6.0.0)
- System.Diagnostics.DiagnosticSource (>= 6.0.0)
- System.Text.Json (>= 6.0.0)
NuGet 包 (50)
显示依赖于 Foundatio 的前 5 个 NuGet 包
包 | 下载 |
---|---|
Foundatio.Redis 用于构建分布式应用的插件化基础块。 |
|
Foundatio.JsonNet 用于构建分布式应用的插件化基础块。 |
|
Foundatio.AzureStorage 用于构建分布式应用的插件化基础块。 |
|
Foundatio.AzureServiceBus 用于构建分布式应用的插件化基础块。 |
|
Foundatio.Repositories 适用于 Elasticsearch 的泛型仓库实现。 |
GitHub 仓库 (1)
显示依赖于 Foundatio 的最受欢迎的 1 个 GitHub 仓库
仓库 | 星级 |
---|---|
Kaioru/Edelstein
C# .NET 开发的 v.95.1 蘑菇游戏服务器模拟器
|
版本 | 下载 | 最后更新 |
---|---|---|
10.7.1 | 336,556 | 3/27/2024 |
10.7.0 | 155,073 | 1/5/2024 |
10.6.1 | 312,837 | 6/23/2023 |
10.6.0 | 312,816 | 1/1/2023 |
10.5.0 | 145,358 | 5/18/2022 |
10.4.0 | 36,418 | 3/7/2022 |
10.3.1 | 25,418 | 1/20/2022 |
10.3.0 | 4,437 | 1/20/2022 |
10.2.5 | 158,527 | 12/7/2021 |
10.2.4 | 4,811 | 12/3/2021 |
10.2.3 | 6,965 | 11/22/2021 |
10.2.2 | 195,489 | 9/23/2021 |
10.2.1 | 31,964 | 7/19/2021 |
10.2.0 | 83,787 | 7/8/2021 |
10.1.4 | 19,917 | 6/16/2021 |
10.1.3 | 30,500 | 4/23/2021 |
10.1.2 | 3,292 | 4/23/2021 |
10.1.1 | 6,244 | 4/15/2021 |
10.1.0 | 4,072 | 4/13/2021 |
10.0.2 | 81,961 | 1/20/2021 |
10.0.1 | 38,635 | 11/2/2020 |
10.0.0 | 45,126 | 9/16/2020 |
10.0.0-beta9 | 6,098 | 8/25/2020 |
10.0.0-beta8 | 5,255 | 8/3/2020 |
10.0.0-beta7 | 4,435 | 7/29/2020 |
10.0.0-beta6 | 5,689 | 7/7/2020 |
10.0.0-beta5 | 5,214 | 6/20/2020 |
10.0.0-beta3 | 4,721 | 6/14/2020 |
10.0.0-beta2 | 4,751 | 6/6/2020 |
10.0.0-beta10 | 4,373 | 9/15/2020 |
10.0.0-beta1 | 5,443 | 5/26/2020 |
10.0.0-alpha3 | 2,824 | 5/5/2020 |
10.0.0-alpha2 | 2,854 | 4/27/2020 |
10.0.0-alpha1 | 2,736 | 4/25/2020 |
9.1.1 | 145,001 | 4/28/2020 |
9.1.0 | 4,278 | 4/28/2020 |
9.0.0 | 142,377 | 1/16/2020 |
8.1.2126 | 346,154 | 8/30/2019 |
8.1.2058 | 90,270 | 5/14/2019 |
8.1.2027 | 18,489 | 4/16/2019 |
8.0.1965 | 58,054 | 2/24/2019 |
8.0.1948 | 9,815 | 2/22/2019 |
7.1.1845 | 243,836 | 11/3/2018 |
7.1.1841 | 5,854 | 11/3/2018 |
7.1.1837 | 5,819 | 11/1/2018 |
7.1.1833 | 26,410 | 11/1/2018 |
7.0.1831 | 5,854 | 11/1/2018 |
7.0.1818 | 6,459 | 10/30/2018 |
7.0.1738 | 64,143 | 9/7/2018 |
7.0.1706 | 90,884 | 5/9/2018 |
6.0.1586 | 49,711 | 11/30/2017 |
5.1.1562 | 10,762 | 10/30/2017 |
5.1.1521 | 12,172 | 9/27/2017 |
5.1.1515 | 5,885 | 9/26/2017 |
5.1.1501 | 11,448 | 9/14/2017 |
5.1.1498 | 6,207 | 8/28/2017 |
5.1.1492 | 5,958 | 8/28/2017 |
5.1.1490 | 13,772 | 8/16/2017 |
5.1.1474 | 23,635 | 8/1/2017 |
5.1.1470 | 5,416 | 7/31/2017 |
5.1.1457 | 26,188 | 6/23/2017 |
5.1.1448 | 12,207 | 5/5/2017 |
5.1.1443 | 6,948 | 5/5/2017 |
5.0.1336 | 9,668 | 3/14/2017 |
5.0.1334 | 6,097 | 3/13/2017 |
5.0.1331 | 6,844 | 3/12/2017 |
5.0.1329-pre | 4,784 | 3/12/2017 |
5.0.1328-pre | 4,774 | 3/12/2017 |
5.0.1327-pre | 4,816 | 3/12/2017 |
5.0.1326-pre | 4,768 | 3/12/2017 |
5.0.1324-pre | 4,712 | 3/12/2017 |
4.3.1323-pre | 4,853 | 3/11/2017 |
4.3.1319 | 7,581 | 3/1/2017 |
4.3.1317 | 8,391 | 2/23/2017 |
4.3.1316 | 6,104 | 2/22/2017 |
4.3.1315 | 6,071 | 2/22/2017 |
4.3.1314 | 12,065 | 2/20/2017 |
4.3.1312 | 5,920 | 2/20/2017 |
4.3.1311-pre | 4,722 | 2/20/2017 |
4.3.1307 | 10,385 | 2/16/2017 |
4.3.1306 | 5,901 | 2/15/2017 |
4.3.1305 | 6,957 | 2/15/2017 |
4.3.1304-pre | 4,728 | 2/15/2017 |
4.3.1303-pre | 4,670 | 2/14/2017 |
4.3.1301 | 6,340 | 2/14/2017 |
4.3.1299 | 6,448 | 2/14/2017 |
4.3.1297 | 4,180 | 2/14/2017 |
4.3.1293 | 5,914 | 2/12/2017 |
4.3.1292 | 5,898 | 2/10/2017 |
4.3.1291 | 5,869 | 2/10/2017 |
4.3.1290 | 5,994 | 2/10/2017 |
4.3.1289 | 5,939 | 2/9/2017 |
4.3.1288 | 5,917 | 2/9/2017 |
4.3.1286 | 5,977 | 2/8/2017 |
4.3.1282 | 7,316 | 2/5/2017 |
4.3.1281 | 4,231 | 2/5/2017 |
4.3.1280 | 4,282 | 2/5/2017 |
4.3.1276-pre | 3,880 | 2/5/2017 |
4.3.1177-pre | 8,034 | 9/2/2016 |
4.3.1164-pre | 8,455 | 8/21/2016 |
4.2.1205-pre | 4,059 | 9/19/2016 |
4.2.1183 | 55,244 | 9/9/2016 |
4.2.1179 | 4,131 | 9/8/2016 |
4.2.1176 | 9,063 | 9/2/2016 |
4.2.1172 | 4,052 | 9/1/2016 |
4.2.1171-pre | 3,712 | 9/1/2016 |
4.2.1169 | 17,750 | 8/22/2016 |
4.2.1167-pre | 3,691 | 8/22/2016 |
4.2.1166-pre | 3,756 | 8/22/2016 |
4.2.1161 | 10,142 | 8/10/2016 |
4.2.1156-pre | 3,690 | 8/2/2016 |
4.2.1155 | 5,468 | 8/1/2016 |
4.2.1150 | 7,319 | 7/20/2016 |
4.2.1149-pre | 4,100 | 7/19/2016 |
4.2.1148-pre | 4,069 | 7/19/2016 |
4.2.1147-pre | 4,062 | 7/19/2016 |
4.2.1146-pre | 4,091 | 7/19/2016 |
4.2.1137 | 4,099 | 7/19/2016 |
4.2.1129-pre | 3,702 | 7/19/2016 |
4.2.1128-pre | 3,718 | 7/19/2016 |
4.2.1127-pre | 3,712 | 7/19/2016 |
4.2.1126-pre | 3,738 | 7/19/2016 |
4.2.1125-pre | 3,684 | 7/19/2016 |
4.2.1123-pre | 3,703 | 7/19/2016 |
4.2.1119-pre | 3,749 | 7/18/2016 |
4.2.1113-pre | 4,122 | 7/16/2016 |
4.2.1108-pre | 4,119 | 7/15/2016 |
4.2.1107-pre | 4,114 | 7/15/2016 |
4.2.1104-pre | 4,251 | 7/13/2016 |
4.2.1099-pre | 7,303 | 7/12/2016 |
4.2.1098-pre | 4,171 | 7/12/2016 |
4.2.1093-pre | 4,029 | 7/8/2016 |
4.2.1091-pre | 4,063 | 7/8/2016 |
4.2.1090-pre | 4,086 | 7/8/2016 |
4.2.1089-pre | 4,096 | 7/7/2016 |
4.2.1087-pre | 4,083 | 7/7/2016 |
4.2.1083-pre | 4,062 | 7/6/2016 |
4.2.1082-pre | 4,039 | 7/6/2016 |
4.2.1081-pre | 4,016 | 7/6/2016 |
4.2.1079-pre | 4,080 | 7/6/2016 |
4.2.1078-pre | 4,068 | 7/6/2016 |
4.2.1073-pre | 3,964 | 7/5/2016 |
4.2.1070-pre | 4,050 | 7/5/2016 |
4.2.1069-pre | 4,051 | 7/1/2016 |
4.2.1059-pre | 4,035 | 7/1/2016 |
4.2.1046-pre | 3,961 | 6/24/2016 |
4.2.1031-pre | 3,724 | 6/24/2016 |
4.2.1028-pre | 3,717 | 6/24/2016 |
4.2.1027-pre | 3,738 | 6/24/2016 |
4.1.1009 | 12,897 | 6/15/2016 |
4.1.1002-pre | 5,040 | 6/14/2016 |
4.1.995-pre | 5,237 | 6/13/2016 |
4.1.989-pre | 5,041 | 5/26/2016 |
4.1.983-pre | 4,680 | 5/25/2016 |
4.1.982-pre | 4,691 | 5/25/2016 |
4.1.978-pre | 4,843 | 5/6/2016 |
4.1.977-pre | 4,730 | 5/5/2016 |
4.1.975-pre | 5,257 | 5/5/2016 |
4.0.958 | 8,198 | 5/1/2016 |
4.0.957 | 6,453 | 4/29/2016 |
4.0.956 | 6,414 | 4/29/2016 |
4.0.955 | 6,415 | 4/28/2016 |
4.0.941 | 6,364 | 4/27/2016 |
4.0.940 | 6,438 | 4/27/2016 |
4.0.925 | 6,312 | 4/27/2016 |
4.0.922 | 6,145 | 4/27/2016 |
4.0.909 | 6,371 | 4/20/2016 |
4.0.880 | 6,756 | 4/7/2016 |
4.0.869 | 6,314 | 3/30/2016 |
4.0.864 | 6,131 | 3/29/2016 |
4.0.861 | 6,251 | 3/29/2016 |
4.0.860 | 6,316 | 3/29/2016 |
4.0.857 | 6,160 | 3/29/2016 |
4.0.855 | 6,203 | 3/29/2016 |
4.0.846 | 6,012 | 3/22/2016 |
4.0.842 | 6,161 | 3/21/2016 |
4.0.836 | 6,036 | 3/18/2016 |
4.0.835 | 6,129 | 3/18/2016 |
4.0.834 | 6,131 | 3/17/2016 |
4.0.832 | 5,954 | 3/17/2016 |
4.0.831 | 6,035 | 3/16/2016 |
4.0.829 | 5,966 | 3/16/2016 |
4.0.828 | 5,939 | 3/15/2016 |
4.0.827 | 6,021 | 3/15/2016 |
4.0.826 | 5,803 | 3/15/2016 |
4.0.825 | 6,108 | 3/13/2016 |
4.0.821 | 6,034 | 3/11/2016 |
4.0.819 | 5,993 | 3/11/2016 |
4.0.818 | 6,042 | 3/11/2016 |
4.0.816 | 6,007 | 3/11/2016 |
4.0.815 | 5,813 | 3/11/2016 |
4.0.814 | 5,994 | 3/11/2016 |
4.0.813 | 5,975 | 3/10/2016 |
4.0.812 | 6,065 | 3/10/2016 |
4.0.811 | 5,853 | 3/10/2016 |
4.0.810 | 5,974 | 3/10/2016 |
4.0.809 | 6,013 | 3/10/2016 |
4.0.805 | 6,003 | 3/9/2016 |
4.0.797 | 5,968 | 3/9/2016 |
4.0.796 | 5,966 | 3/9/2016 |
4.0.794 | 6,039 | 3/9/2016 |
4.0.793 | 5,916 | 3/9/2016 |
4.0.792 | 5,904 | 3/8/2016 |
4.0.791 | 11,108 | 3/8/2016 |
4.0.790 | 5,957 | 3/8/2016 |
4.0.788 | 5,992 | 3/8/2016 |
4.0.774 | 6,264 | 3/2/2016 |
4.0.773 | 6,063 | 3/1/2016 |
4.0.772 | 6,129 | 3/1/2016 |
4.0.770 | 5,996 | 3/1/2016 |
4.0.769 | 6,023 | 3/1/2016 |
4.0.762 | 6,007 | 3/1/2016 |
4.0.761 | 6,314 | 3/1/2016 |
4.0.760 | 7,385 | 2/29/2016 |
4.0.759 | 6,001 | 2/29/2016 |
4.0.758 | 6,201 | 2/29/2016 |
4.0.757 | 5,832 | 2/29/2016 |
4.0.756 | 6,378 | 2/27/2016 |
4.0.755 | 6,446 | 2/27/2016 |
4.0.754 | 6,326 | 2/27/2016 |
4.0.753 | 6,317 | 2/27/2016 |
4.0.752 | 6,138 | 2/27/2016 |
4.0.750 | 6,416 | 2/27/2016 |
4.0.749 | 6,320 | 2/27/2016 |
4.0.747 | 6,402 | 2/26/2016 |
4.0.746 | 6,401 | 2/26/2016 |
4.0.744 | 6,282 | 2/26/2016 |
4.0.743 | 6,431 | 2/26/2016 |
4.0.742 | 6,330 | 2/26/2016 |
4.0.741 | 6,272 | 2/26/2016 |
4.0.739 | 6,044 | 2/25/2016 |
4.0.738 | 6,137 | 2/25/2016 |
4.0.734 | 5,903 | 2/25/2016 |
4.0.733-beta | 4,709 | 2/25/2016 |
4.0.672 | 6,492 | 2/16/2016 |
4.0.669 | 5,837 | 2/11/2016 |
4.0.668 | 30,518 | 2/11/2016 |
3.0.654 | 7,100 | 2/10/2016 |
3.0.646 | 5,651 | 2/5/2016 |
3.0.645 | 5,685 | 2/5/2016 |
3.0.644 | 5,542 | 2/5/2016 |
3.0.639 | 5,567 | 2/3/2016 |
3.0.638 | 5,700 | 2/2/2016 |
3.0.637 | 5,555 | 2/1/2016 |
3.0.635 | 5,548 | 2/1/2016 |
3.0.633 | 9,536 | 1/27/2016 |
3.0.632 | 5,552 | 1/27/2016 |
3.0.629 | 5,748 | 1/18/2016 |
3.0.626 | 5,494 | 1/18/2016 |
3.0.625 | 5,452 | 1/18/2016 |
3.0.624 | 15,931 | 12/17/2015 |
3.0.623 | 5,756 | 12/9/2015 |
3.0.622 | 5,589 | 12/9/2015 |
3.0.621 | 5,726 | 12/9/2015 |
3.0.620 | 5,580 | 12/8/2015 |
3.0.613 | 6,204 | 12/4/2015 |
3.0.611 | 5,713 | 12/3/2015 |
3.0.610 | 5,971 | 11/30/2015 |
3.0.606 | 5,916 | 11/30/2015 |
3.0.605 | 5,933 | 11/25/2015 |
3.0.603 | 5,848 | 11/23/2015 |
3.0.601 | 5,639 | 11/23/2015 |
3.0.600 | 5,587 | 11/19/2015 |
3.0.599 | 5,588 | 11/19/2015 |
3.0.598 | 5,610 | 11/17/2015 |
3.0.592 | 5,518 | 11/12/2015 |
3.0.589 | 5,693 | 11/10/2015 |
3.0.588 | 5,672 | 11/10/2015 |
3.0.586 | 5,660 | 11/10/2015 |
3.0.584 | 5,662 | 11/10/2015 |
3.0.583 | 5,652 | 11/10/2015 |
3.0.581 | 5,903 | 11/6/2015 |
3.0.579 | 5,546 | 11/6/2015 |
3.0.576 | 5,623 | 11/5/2015 |
3.0.575 | 5,601 | 11/4/2015 |
3.0.574 | 5,516 | 11/4/2015 |
3.0.569 | 5,615 | 11/3/2015 |
3.0.568 | 5,623 | 11/3/2015 |
3.0.566 | 5,601 | 11/3/2015 |
3.0.548 | 4,091 | 11/3/2015 |
3.0.545 | 5,797 | 10/28/2015 |
3.0.538 | 5,744 | 10/22/2015 |
3.0.537 | 5,665 | 10/21/2015 |
3.0.536 | 5,689 | 10/21/2015 |
3.0.534 | 5,637 | 10/21/2015 |
3.0.532 | 5,572 | 10/21/2015 |
3.0.531 | 5,666 | 10/21/2015 |
3.0.524 | 5,613 | 10/15/2015 |
3.0.523 | 5,859 | 10/10/2015 |
3.0.522 | 5,577 | 10/10/2015 |
3.0.520 | 5,656 | 10/9/2015 |
3.0.519 | 5,933 | 10/9/2015 |
3.0.518 | 5,803 | 10/9/2015 |
3.0.517 | 5,872 | 10/9/2015 |
3.0.516 | 5,788 | 10/7/2015 |
3.0.514 | 5,889 | 10/6/2015 |
3.0.513 | 5,677 | 10/6/2015 |
3.0.512 | 5,720 | 10/6/2015 |
3.0.509 | 5,846 | 10/1/2015 |
3.0.507 | 5,722 | 10/1/2015 |
3.0.505 | 5,628 | 9/30/2015 |
3.0.503 | 5,758 | 9/30/2015 |
3.0.502 | 5,722 | 9/30/2015 |
3.0.479 | 5,737 | 9/25/2015 |
3.0.476 | 5,675 | 9/24/2015 |
3.0.471 | 5,687 | 9/24/2015 |
3.0.470 | 5,737 | 9/24/2015 |
3.0.469 | 5,646 | 9/24/2015 |
3.0.468 | 5,650 | 9/24/2015 |
3.0.467 | 5,673 | 9/24/2015 |
3.0.465 | 5,666 | 9/24/2015 |
3.0.459 | 5,650 | 9/23/2015 |
3.0.456 | 5,686 | 9/23/2015 |
3.0.455 | 5,678 | 9/22/2015 |
3.0.454 | 5,861 | 9/19/2015 |
3.0.453 | 5,658 | 9/19/2015 |
3.0.452 | 5,571 | 9/18/2015 |
3.0.451 | 5,596 | 9/18/2015 |
3.0.450 | 5,620 | 9/18/2015 |
3.0.447 | 6,860 | 9/18/2015 |
2.0.378 | 5,713 | 9/5/2015 |
2.0.372 | 5,634 | 9/4/2015 |
2.0.370 | 5,698 | 9/4/2015 |
2.0.368 | 5,573 | 9/4/2015 |
2.0.365 | 6,559 | 9/3/2015 |
2.0.363 | 5,550 | 9/3/2015 |
2.0.361 | 5,607 | 9/3/2015 |
1.0.360 | 5,652 | 9/1/2015 |
1.0.359 | 5,594 | 9/1/2015 |
1.0.358 | 5,639 | 9/1/2015 |
1.0.356 | 5,624 | 8/31/2015 |
1.0.355 | 5,677 | 8/31/2015 |
1.0.354 | 5,641 | 8/29/2015 |
1.0.305 | 5,646 | 8/19/2015 |
1.0.299 | 6,083 | 8/8/2015 |
1.0.293 | 5,708 | 7/20/2015 |
1.0.292 | 5,715 | 7/20/2015 |
1.0.289 | 5,814 | 7/10/2015 |
1.0.288 | 5,725 | 7/10/2015 |
1.0.286 | 5,717 | 7/7/2015 |
1.0.285 | 5,786 | 7/7/2015 |
1.0.284 | 5,671 | 7/7/2015 |
1.0.282 | 5,682 | 7/6/2015 |
1.0.281 | 5,675 | 7/6/2015 |
1.0.279 | 5,618 | 7/6/2015 |
1.0.277 | 5,721 | 6/18/2015 |
1.0.276 | 5,711 | 6/8/2015 |
1.0.275 | 5,658 | 6/8/2015 |
1.0.274 | 5,492 | 6/8/2015 |
1.0.272 | 6,179 | 6/1/2015 |
1.0.269 | 5,569 | 5/25/2015 |
1.0.268 | 5,606 | 5/24/2015 |
1.0.266 | 5,587 | 5/24/2015 |
1.0.263 | 5,671 | 5/21/2015 |
1.0.258 | 5,658 | 5/19/2015 |
1.0.257 | 5,660 | 5/18/2015 |
1.0.256 | 5,757 | 5/17/2015 |
1.0.254 | 5,723 | 5/13/2015 |
1.0.253 | 5,610 | 5/13/2015 |
1.0.250 | 5,601 | 5/13/2015 |
1.0.249 | 5,679 | 5/12/2015 |
1.0.248 | 5,602 | 5/12/2015 |
1.0.245 | 5,588 | 5/12/2015 |
1.0.241 | 5,612 | 5/12/2015 |
1.0.240 | 5,414 | 5/12/2015 |
1.0.237 | 5,433 | 5/11/2015 |
1.0.234 | 5,397 | 5/9/2015 |
1.0.233 | 5,280 | 5/9/2015 |
1.0.231 | 5,390 | 5/7/2015 |
1.0.230 | 5,483 | 5/7/2015 |
1.0.229 | 5,358 | 5/7/2015 |
1.0.226 | 5,365 | 5/7/2015 |
1.0.217 | 5,629 | 4/28/2015 |
1.0.215 | 5,522 | 4/27/2015 |
1.0.213 | 5,604 | 4/23/2015 |
1.0.210 | 5,390 | 4/23/2015 |
1.0.209 | 5,374 | 4/15/2015 |
1.0.202 | 5,456 | 4/15/2015 |
1.0.201 | 5,425 | 4/15/2015 |
1.0.198 | 5,346 | 4/15/2015 |
1.0.197 | 5,396 | 4/15/2015 |
1.0.196 | 5,498 | 4/15/2015 |
1.0.195 | 5,456 | 4/15/2015 |
1.0.194 | 5,442 | 4/15/2015 |
1.0.193 | 5,425 | 4/15/2015 |
1.0.192 | 5,382 | 4/15/2015 |
1.0.191 | 5,525 | 4/14/2015 |
1.0.189 | 5,394 | 4/10/2015 |
1.0.187 | 5,469 | 4/9/2015 |
1.0.186 | 5,512 | 4/8/2015 |
1.0.185 | 5,603 | 4/6/2015 |
1.0.183 | 5,300 | 4/3/2015 |
1.0.181 | 5,454 | 4/3/2015 |
1.0.180 | 5,464 | 4/2/2015 |
1.0.178 | 5,394 | 4/1/2015 |
1.0.177 | 5,451 | 4/1/2015 |
1.0.175 | 5,350 | 4/1/2015 |
1.0.171 | 5,353 | 3/31/2015 |
1.0.170 | 5,283 | 3/31/2015 |
1.0.168 | 5,367 | 3/31/2015 |
1.0.164 | 5,634 | 3/30/2015 |
1.0.162 | 5,582 | 3/28/2015 |
1.0.160 | 5,593 | 3/27/2015 |
1.0.159 | 5,595 | 3/26/2015 |
1.0.157 | 5,176 | 3/24/2015 |
1.0.156 | 5,551 | 3/24/2015 |
1.0.154 | 5,496 | 3/24/2015 |
1.0.152 | 5,742 | 3/24/2015 |
1.0.151 | 5,541 | 3/23/2015 |
1.0.150 | 5,588 | 3/23/2015 |
1.0.149 | 5,623 | 3/23/2015 |
1.0.148 | 5,585 | 3/23/2015 |
1.0.147 | 5,499 | 3/21/2015 |
1.0.146 | 5,602 | 3/20/2015 |
1.0.145 | 5,604 | 3/19/2015 |
1.0.143 | 5,724 | 3/18/2015 |
1.0.142 | 5,709 | 3/12/2015 |
1.0.141 | 5,560 | 3/12/2015 |
1.0.140 | 5,532 | 3/5/2015 |
1.0.139 | 5,566 | 3/5/2015 |
1.0.138 | 5,574 | 3/4/2015 |
1.0.137 | 5,482 | 3/3/2015 |
1.0.134 | 5,922 | 3/3/2015 |
1.0.129 | 5,690 | 3/3/2015 |
1.0.128 | 5,636 | 3/3/2015 |
1.0.125 | 5,649 | 2/28/2015 |
1.0.124 | 5,886 | 2/28/2015 |
1.0.122 | 5,635 | 2/28/2015 |
1.0.119 | 5,939 | 2/25/2015 |
1.0.117 | 6,244 | 2/24/2015 |
1.0.115 | 5,972 | 2/24/2015 |
1.0.114 | 5,809 | 2/23/2015 |
1.0.113 | 5,768 | 2/23/2015 |
1.0.112 | 5,898 | 2/23/2015 |
1.0.111 | 5,983 | 2/23/2015 |
1.0.110 | 5,945 | 2/23/2015 |
1.0.109 | 5,865 | 2/22/2015 |
1.0.108 | 5,791 | 2/22/2015 |
1.0.103 | 5,973 | 2/22/2015 |
1.0.37 | 4,683 | 2/18/2015 |
1.0.36 | 4,790 | 2/18/2015 |
1.0.35 | 4,865 | 2/17/2015 |
1.0.34 | 4,807 | 2/17/2015 |
1.0.33 | 4,876 | 2/17/2015 |
1.0.32 | 4,839 | 2/15/2015 |
1.0.31 | 4,830 | 2/15/2015 |
1.0.30 | 4,272 | 2/15/2015 |
1.0.28 | 4,464 | 2/15/2015 |
1.0.27 | 4,324 | 2/15/2015 |
1.0.26 | 4,388 | 2/13/2015 |
1.0.25 | 4,364 | 2/13/2015 |
1.0.24 | 4,292 | 2/12/2015 |
1.0.23 | 4,326 | 2/12/2015 |
1.0.0 | 6,264 | 2/21/2015 |