Boost.lockfree总结
来源:互联网 发布:百度慧眼数据 编辑:程序博客网 时间:2024/06/05 11:05
1.官方文档地址
2.简介和术语
在一定的限制条件下,一些数据结构只能用无锁的方式实现。boost.lockfree实现的相关方面是生产和消费线程(producer and consumer thread)的个数.单生产者(sp)或多生产者(mp)意味着只有一个线程或多个并发线程被允许添加数据至某数据结构中。单消费者(sc)或多消费者(mc)则对应于从数据结构中移除数据。
3.无阻塞数据结构的性质
3.1 无阻塞数据结构不依赖于锁或互斥量来保证线程安全;
3.2 无阻塞数据结构需要原子操作。
4.阻塞行为来源
除了锁和互斥量,一下三种情况也会违反自由锁:
4.1 有些架构在硬件层面不支持原子操作;
4.2 从操作系统分配内存不是无锁的;
4.3 C++异常处理对其实时性不做任何保证。
5.数据结构
boost::lockfree::queue
boost::lockfree::stack
boost::lockfree::spsc_queue
一个无等待的单生产者/单消费者队列(通常被称为环形缓冲区)
6.数据结构配置
boost::lockfree::fixed_sized
配置数据结构为固定大小。内部节点被存储在一个数组内,并使用数组索引寻址。这将队列可能的大小限制在了能被索引类型映射的元素总数(通常是2**16-2),但是在缺少双宽的比较交换(compare-and-exchange,注:一般是记为compare-and-swap,CAS)指令的平台上,这是实现无锁的最好方式。
boost::lockfree::capacity
在编译时设置数据结构的容量。这意味着数据结构是固定大小的。
boost::lockfree::allocator
定义分配器。boost.lockfree支持状态分配器,并且与Boost.Interprocess的分配器兼容。
7.实例
#include <boost/thread/thread.hpp>#include <boost/lockfree/queue.hpp>#include <iostream>#include <boost/atomic.hpp>using namespace std;//生产数量boost::atomic_int producer_count(0);//消费数量boost::atomic_int consumer_count(0);//队列boost::lockfree::queue<int> queue(512);//迭代次数const int iterations = 10000;//生产线程数const int producer_thread_count = 4;//消费线程数const int consumer_thread_count = 4;//生产函数void producer(void){ for (int i = 0; i != iterations; ++i) { //原子计数————多线程不存在计数不上的情况 int value = ++producer_count; cout << "*"; //观察生产类型: 纯生产还是同时有消费的情况 //若没有进入队列,则重复推送 while (!queue.push(value)) ; }}//是否生产完毕标志boost::atomic<bool> done (false);//消费函数void consumer(void){ int value; //当没有生产完毕,则边消费边生产 while (!done) { //只要能弹出元素,就消费 while (queue.pop(value)) { cout << "."; //观察消费类型: 纯消费还是边生产边消费 ++consumer_count; } }//如果生产完毕,则消费 while (queue.pop(value)) ++consumer_count;}int main(int argc, char* argv[]){ cout << "boost::lockfree::queue is "; if (!queue.is_lock_free()) cout << "not "; cout << "lockfree" << endl;//线程群管理器 boost::thread_group producer_threads, consumer_threads;//创建生产者线程 for (int i = 0; i != producer_thread_count; ++i) producer_threads.create_thread(producer);//创建消费者线程 for (int i = 0; i != consumer_thread_count; ++i) consumer_threads.create_thread(consumer);//等待生产者生产完毕 producer_threads.join_all(); //可以消费标志 done = true; //主线程不等生产线程完毕就设置done标记 cout << endl; cout << "done" << endl; //输出以观察主线程和各子线程的执行顺序 //等待消费者结束 consumer_threads.join_all();//输出生产和消费数量 cout << endl; cout << "produced " << producer_count << " objects." << endl; cout << "consumed " << consumer_count << " objects." << endl; return 0;}
编译
g++ lockfree.cpp -o lockfree -lboost_system -lboost_thread
输出
boost::lockfree::queue is lockfree*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************.....*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*..*.*.*..*.*.*.*.*.*.*.*.*.*..*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*..*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*..*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*..*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*..*.*.*.*.*.*..*.*.*.*..*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*..*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.******.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*..*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*****************************************************************************************************************************************************************************************************************************************************************************************.*...................*..*..*..*..*.*...*..*....*..*..*..*..*...*..*...*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*...*..*...*..*..*...*.*..*...*..*..*..*..*..*..*...*..*..*...*..*..*..*.*...*..*.*...*..*..*..*.*..*.*..*..*..*...*..*..*..*...*..*...*..*..*..*..*..*..*..*..*....*..*..*...*..*.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*.*..*..*...*..*..*..*..*..*...**.********.***.**.*.**.***.***.**.**.***.**.*.**.***.**.*.**.**..***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**.***.***.**.*.**.**.**.**.**.**.***.**.**.**.***.**.****.***.**.**.***.***.***.****.****.****.**.**..***.***.*.**.*.**.**.**.**.**.**.**.**.***.***.**.**.**.****.***.**.***.**.**.***.***.***.**.***.****.**.***.**.***.**.**.**.**.**.***.**.**.**.***.**.**.****.**.**.**.***.***.**.***.**.***.**.**.**.**.**.**.**.**.**.*.**.**.***.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**.**.*.****.**.**.**.**.**.**.**.**.**.**.**.**.**.***.***.**.**.**.****.**.***.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.*.**.**.**.**.**.**.****.**.*.**.**.*.**..**.**.**.****.**.**.**.**.**.*.*..**.****.**.**.**.*.**.**.**.**.**.**.**.*.**.**.**.**.*.**.**.**.**.**.*..***.**.**.**.**.***.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.*.**.**.**.**.**.**.**.*...........*.**.*.**.***.****.***.**.****.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.*.**.**.*.**.**.**.**.*.**.**..**.**.**.**.**.***.**.**.**.*.**.**.*.**.**.*..***.**.**.***.**.**.*.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.*.**.**.**.**.**.****.**.**.*.**.**.**.**.*.**.**.**.**.**.****.**.**.**.**.*.**.**.**.**.**.**.*.**.**.**..**.**.*.*.*.**.**.**.**.**.**.**.**.**.**.*.**.**.**.*..***.**.**.**.***.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.*.**.**.**.*.**.*.**.**.**.**..***.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**..**.**.***.**.**.*.**.**.**.**.**.**.**.*.**.**.**.**.**.**.*.**.**.**.*.**.**.***.**.**.**.**.**.**.**.**.**.**.*.**.*.**.**.**.**.*..***.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.***.**.**.**.*.*.***.**.**.**.**.**.**.**.**..**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**..***.**.**.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.**.**..***.**.**.**.*.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.*.**.**.**.**.**.**.***.**.**.**.**.**.**.*.**.**.**.**.*.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**..**..***.**.**.**.**.**.**.***.**.**.**.*.**.**.*.**.**..**.**.***.**.**.**.*.****.**.**.**.**.**.**.*.*..***.**.**.**.**.**.**.**.**.**.**.*.**.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.*.**.**.**.***.**.**.**.*.**.**.**.**.**.**.**.**.****.**.**.*.**.**.**.**.**..***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.*.**.**.**.**.*.**.**.**.*.**.**.*.**.**.*.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.***.**.**.**.**.*.**.**.**.*.**.**.**.*.**.*..*.**.**.****.**.**.**.**.**.**.**.**.**.**.****.**.**.*.***.**.***.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.****.**.**.**..***.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.*.*.***.***.**.************************************************************************************************************************************************************.*********.**.**.**.*.***....**.****.**.****.**.**.*.**.**.**.**.**.**.**.**.**.**.****.**.**.*.***.**.**.**.**.****.**.**.*.****.**.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.*.**.*.**.**.**.*.**.**.**.**.*.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**.*.**.****.**.**.**.**.*.**.**.*.**.**.*.**.**.**.**.**.**.****.**.**.*.**.**.**.**.**.*.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.****.**.**.**.**.*..***.**.**.**.**.**.**.**.***.**.**.**.**.*.**.*.**.**.**.*.**.**..**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.*.**.**.****.**.**.*.****.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**..***.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.***.**.**.**..***.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.*.**.*.*.**.*.**.**.**.**.**.***.**.**.**.***.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**.***.*.**.****.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.**.**.***.**.**.**.**.**.*.**.**.**.**.**.**.**.****.**.**.*.**.**.*.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.*.**.**.*.**.**.***.****.**.***.**..*..****.**.**.*.**.**.**.**.**.****.**.**.**.**.*.*.***.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**..**.**.**.*****.**.**.**.**.*.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**..**.**.**.**.*.*.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.***.**.***.**.**..**.**.**.****.**.**.*.**..***.**.**.**.**.**.*.**.**.**..***.**.**.**.**.*.**.**.**.**.**.**.**.**.***.**.**.**.*.**.**.**.**.*.**.**..***.**.*.**.**.**.*.**.**.***.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.***.**.**.*.**.**.**.**.**.**.*.**.**.**.**.**..***.*..**.**.**.**.**.**.**.**.**.**.**.**.*.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.*.**.**.**.**.*.**.*.**.**.**.**.***.**.*.**.**.*.**.**.*.**.**.**.**.**.**.**.*.**.**.**.****.**.**.**.**.**.**.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.*.**..**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**.***.**..*.**..**.**.**.**.**.**.*.**.**.**.***.***.**.**.**.**.**.*.**.**.*.**.**.**..*****************..*.....*.**.*.**.**.**.*.**.**.**.**.**.**.****.**.**..***.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*.***.*..**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*..***.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.*.**.**.**.**.*.**.**.*.***.**.**.**.**.**.**.****.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.*.***.**.**..***.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.*.**.*.*.**.*.**.**.**.**.**.**.**.**.*.**.**..**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.**.**.**.**..**.**.**.**.**.*.**.**.**.*.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.*..**.**.**.**.**.**.**.**.**.**.***.***.**.*..**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.****.**.**.**.**.***.**.**.*.**.*..**.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**.**.*.*.***.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**********.*****.*..*.*.*.*....*.*.*.*.*.*.*.*....*.*..*.***.**.***.**.***.**.*.*.**.**.**.**.**.**.**.**.****.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**..**.****.**.**.**.**.**.**.****.*.**.**..***.**.**.**.****.**.**.****.**.**.*.**.**.**.**.**.**.**.**.**.*.**.**.**.**.*.**.**.*.*.*.**.**.**.*.**.***.**.**.**.****.**.**.**..**.***.**.**.**.**.**.***.**.**.**.**.**.**.**.**.**.**..***.**.**.**.**.**.**.*.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.**.***.**.**.**.**.**.**.**.**........*.*.*.*.*.*.*..*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*..*..*.*.*.**..*.*..*...*..*..*..*..*...*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*.*...*..*..*..*...*...*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*.*.*.*.*.*.*..*...*..*..*..*..*..*..*..*..*..*..*..*...*...*..*..*..*..*..*..*...*.*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*..*.*....*..*..*..*...*..*..*..*..*..*...*..*..*..*.*..*..*..*..*..*..*..*...*.*..*..*..*..*..*..*..*..*...*..*..*.*.*....*..*..*..*..*..*...*..*..*..*....*.*..*...*..*..*.*...*..*..*..*..*...*..*.*..*..*..*..*..*.*...*..*..*..*..*..*..*..*..*...*..*..*..*...*..*...*.*..*..*..*..*...*....*..*..*..*...*.*....*...*..*..*...*..*..*..*..*...*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*...*..*..*..*..*..*..*..*..*.*..*..*..*..*..*..*..*..*.*..*...*..*..*..*..*..*..*...*..*..*...*...*..*..*..*.*...*..*...*..*..*..*..*....*..*...*..*..*..*..*..*....*...*..*..*...*..*..*.*..*...*..*...*.*..*..*...*..*...*..*..*..*..*..*...*..*.*...*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*..*..*.*....*..*..*..*..*..*..*..*..*..*....*..*..*..*..*..*..*..*..*..*..*...*.*...*..*...*...*..*..*..*....*.*..*..*..*....*..*...*..*..*.*..*..*..*..*..*..*..*..*..*..*..*..*..*....*..*...*..*..*..*...*..*..*..*...*...*...*..*..*..*..*..*..*...*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*....*..*..*..*..*..*..*..*..*..*..*..*..*..*.*...*.*..*.*..*...*..*..*..*..*...*..*..*..*.*...*..*..*..*..*..*..*..*..*...*..*...*..*..*..*...*..*..*...*..*..*..*..*..*..*...*..*..*..*...*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*.*..*..*..*...*..*..*...*.*..*...*..*...*..*..*...*..*..*...*...*..*..*..*...*..*..*..*..*..*....*..*..*..*..*...*.*..*..*..*..*.*..*..*..*..*...*..*..*..*..*....*..*..*..*..*..*..*..*..*...*...*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*.*..*..*..*..*..*...*...*..*..*..*...*..*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*****.*.*.*..*.*..*...................................................................................................................................................................................................................................................................*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.**.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.******************************************************************************************************************************************************************************************************************************************.*.....*.*****.*.*.*.*.*.*.*.*.*.*..*.*.*.**.*.*.*.**.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*..*.*.*.*.*.*..*.*.*.*.*..*.*.*.*..*.*.*.*.*.*..*..*..*..*.*.*..*..*..*.*.*..*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.**.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.**.*.*..*.*.*.*.*.*.*..**.*.*.*************************************************.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.**.**.**.*.*.*.**.**.*.*.*.**.*.*.*.*.**.*.*.*.*.*.*.*.**.*.*.*.*.*.*.**.*.*.*.**.*.**.**.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.**.**.*.*.*.**.*.**.**.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.**.**.**.*.*.**.**.**.*.**.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.**.*.*.*.*.*.*.*.**.**.*.*.*.*.*.**.**.*.*.**.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.*.*.*.*.**.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.**.**.**.**.*.*.*.**.*.*.*.*.*.*.*.*.*.*.**.*.*.**.**.**.**.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.**.*.*.*.*.*.*.*.*.*.*.**.*.*.*.**.*.*.*.**.*.*.*.*.**.**.*.*.*.*.*.*.*.*.**.*...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................*..*..*.*.*..*.*..*.*..*..*.*.*.*.*.**.*.....*..*....*..*.*..*..*..*.*.*..*..*..*.*..*.*..*.*..*..*.*..*..*.*.*..*.*..*.*.*.*.*.*.*.*..*..*..*..*.*.*..*.*.*..*..**............................*.*.*.*..*..*..*..*.*.*..*.*..*.*..*..*..*.*..*.*.*..*..*..*.*.*..*.*.*..*..*.*..*.*.*..*..*.*..*..*..*..*..*.*..*.*.*.*..*.*.*.*.*..*.*..*..*..*..*.*.*.*.*..*.*..*.*..*..*..*.*.*..*..*.*..*.*..*..*..*.*.*.*..*.*.*.*..*.*.*.*.*..*..*..*.*..*.*.*.*.*.*..*..*..*.*.*.*..*..*.*.*.*.*..*..*.**.*..*.**.*.**..**.*.**.**.*.**.*.**.**.**.*.*.**.*.**.*.**.**.*.**.**.*.**.*.**.*.**.*.**.***.*.**.**..**.*.**.*.**.***.**.*.**..**.*.**.**.*.**.*.*********************************************************.**.*.*.*.*.*..*..*.*.*.*.*.*.*.*..*..*..*.*..*.*..*.*.*..*..*.*.*..*.*.*..*.*.*.*.*.*..*.*..*..*..*.*.*..*.*.*..*..**.*.**.***.*.**.**.*.**.**.**.*.**.***.*.**.**.**.**.**.*.**.**.*.**.*.**.**.*.***.**.*.**.*.**.*.**.*.**.*.**.*.**.**.**.*.**..**.**.*.**.**.**.**.**.*.**.**.**.*.**.*.**.**.**.**.**.*.**.*.***..***.**.**.*.**.*.**.**.**.**.**.**.**.**.**.*.**.*.**.**.**.*.**.*.**.**.*.**..**.*.**.***.*.**.**..**.*.**.**.*.***..**.*.**.**.*.**.*.**.**.**.**.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**..**.**.*.**.*.***.**.**.**.**.**.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.**.*.**.**.**.*.**.**.**.**.*.**.**.*.**.*.**.***.*.**.**.**.**.*.*.***.*.**.*.**.*.**.**.*.****.**.*.**.*.*.**.*.**.*.***.*.**.*.**.*.**.***.***.*.**.*.**.**.*.**.**..***..**.*.**.*.**.***.**.*.**.**.*.*.**.**.**.**.**.*.**.*.**.*.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.***.**.*.**.*.**.*.**.*.**.**.*.**.**.*.***.**.**.*.**.*.**.*.*.**.**.*.**.*.**.*.**.*.*.**.*.**.*.***.**.*.**.*.***.***.***.**.*.***.**.*.**.*.**.**.**.**.**.*.**.*.**.*.**.*.**.**.**.*.**.*.**.**.*.**.*.**.*.**.**.**.**.*.***.**.*.*.**.**.*.**.*.***.**.*.*.**.*.**.*.**.**.*.**.*.**..**.*.**.*.**.*.**.**.*.**.**.**.**.*.*.**.*.*.**.*.***.*.***.*.**.*.***.**.*.***.**..*.**.*.**.*.**.*.**..*.***.**.**.**.*.***.**.**.*.**.**.*.**.*.**.*.**.**.***.**.*.**.*.*.**.*.**.*.**.**.**.*.**.*.**.**.**.**.*.**.*.**.**.*.**.*.**.*.**.**.*.**.*.**.*.**.*.**.**.**.*.**.*.**.*.***.**..**.**.*.**.**.*.**.*.**.**.*.**.*.**.*.**..**.*.**.*.**.*.***.*.**.**.**.*.**.*.**.*.*.*.**.**.**.**.*.*.**.*.**.*.*.**.*.**.**.*.**.*.*.**.*.**.**.*.**.*.*.**..**.*.*.**.*.**.***.**.*.**.*.**.**.**.*.**.*.**.**.**.*.**.*.**.*.**.*.**.**.*.**.***.*.*.*.**.**.*.**.**.**.*.***..**.**.**.*.**.***.**..**.**.*.***.*.*.***.**.**.*.*.**.**.*.**.**.**.*.**.**.**.**.*.**.*.**.**.*.**.***.**..**.*.**.*.**.*.**.**.*.**.*.**.*.*.**.**..**.*.**.*.**.*.**.*.**.*.**.*.**.**.**.*.**.**.*.**.**.**.**.*.**.*.***.**.**.**.**.*.**.*.**.*.*.**.**.**.*.**.**.*.**.*.*.**.**.**.*.**.**.**.**.**.*.**.*.**.***.**.**.*.**.**.**.*.**..**.*.**.*.**.*.**.*.**.**.**.**.**.**.*.**.*.**.**.**.**.*.**.*.**.**.***.*.***.**.**.*.**.*.**.**..**.*.*.**.*.**.*.**.*.**.*.**.**.*.**.*.**.**.*.***.**.*.**.**.*.**.**.**.**.*.**.*.**.**.***.*.**.*.**.*.**.*.***.**.*.**.*.**.**.**.**.**.*.**.*.**.*.**.**.*.**.***.*.*.*.**.**.*.**.*.**.**.**.*.**.*.**..**.*.**.***.*.*.**.*.**.*.**.**.**.*.**.*.**.*.*.**.**.*.*.**..**.*.**.*.*.**.**.*.**.*.**.*.**.*.*.**.*.**.*.**.*.**.*.**.*.**.**.**.*.**.*.**.**.**.**.**.**.**.**.**..**.**.**.*.***.*.**.**.*.*.***..**.*.***.**.**.**.**.**.**.**.**.**.**.**.**.**.*.**.*.**.**.*.**.*.**.**.*.**.*.**.**.*.**.*.**.**.*.**.*.**.*.**.*.**.*.***.**.*.**.*.**.**.*.*.**.*.**.*.*.***.*.**.*.**.*.**.*.**.*.**.*.***.*.*.**.*.**.*.***..**.**.*.**.*.**.*.****.*.**.*.**.**.*.**.*.**.*.**.*.**.*.**.**.*.**.**.*.*.**.**.*.**..**.*.**.*.**.**.*.**.**.***.*.**.**..**.**.*.*.**.*.*.**.*.*.**.*.**.*.**.**.*.**.**.*.**.**.*.**.*.**.**.*.**.*.**.*.**.*.*.**.**.*.**.*.**.**.*.**.*.**.**.*.*.**.*.**.*.**.*.**.**.*.**.*.**.*.**.**.**.*.**.*.**.**.*.*.**.**.**..**.*.**.*.**.*.**.*.**.*.**.**.*.**.*.***.**.**..**.*.**.*.**.**.*.**.*.***.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.**.*.**.**.**.*.***.**.*.*.*.**.**.**.*.**.*.**.***.**.*.*.**.*.**.*.***.**..**.**.**.*.**.*.**..**.*.**.*.*.**.*.**.**.*.**.*.**.**.**.*.**.***.**.**..**..**.*.**.*.***.**.**.*.**.*.**.**.*.***.**.**.*.**.*.**.*.**.*.**.*.**.**.**..**.*.**.*.**.**.**.*.**.*.**.**.*.**.*.**.**.*.**.**.**.*.**.**.**.*.*.**.**.*.**.*.**.*.***.*.*.**.*.**.*.**.*.**.**.*.*.**.*.**.*.**..**.*.**.**.**.*.*.**.*.*.*.**.*.**.*.**.*.**.*.*.**.**.*.**.*.**.*.**.*.**.*.*.**.*.**.**.*.*.**.**.*.**.*.**.*.**.*.**.*.**.*.**.***.***.**.*.**.*.**.***.*.**.**.*.*.**.*.**.*.***..**.**.**.**.**.*.**.*.**.*.**.*.**.*.**.*.**..*.**.*.**.**.*.**.**.*.**.*.***.*.**.*.**.**.*.*.**.*.**.***.*.***.*.**.*.**.*.**.**.*.**.***.*.***..**.**.**.*.**.*.**.***.*.**.**.**.**.**.**.**.*.****.***.***.**.*.**.*.**.**.*.**.**.**.**.**.**.**.*.*.**.**.*.***.*.**.**.**.**.**.**.**.**.*.***.**.**.**.**......*......*..*.............................................*....*..*.*..*..*..*..*..*..*..*..*..*..*..*..*...*..*.*..*..*..*..*..*..*...*..*..*..*..*..*..*.*...*...*...*..*..*..*..*...*..*..*..*..*..*..*...*..*..*...*..*..*...*..*..*..*..*..*..*..*..*...*..*..*..*..*.*...*.*...*..*.*..*...*..*..*..*..*...*...*..*...*..*..*..*..*..*..*..*..*..*...*..*.*..*..*...*..*..*..*...*..*...*..*..*..*..*..*..*..*..*...*...*...*..*..*..*..*..*..*.****.*.*..*..*...*.*.*..*..*..*..*...*..*..*..*..*.*..*..*...*..*..*...*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*.*..*...*...*...*....*..*..*..*...*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*...*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*.*..*..*.*...*.*..*..*..*...*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*...*.*...*..*..*..*..*..*.*...*...*..*..*..*...*..*..*..*...*..*...*..*..*..*..*...*...*..*..*..*..*...*...*.*..*..*..*..*...*..*...*...*..*..*...*..*..*..*..*..*...*.*..*..*..*..*..*..*.*...*.*..*...*..*..*..*...*..*...*...*..*..*..*..*...*.*...*..*..*..*...*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*.*..*..*..*..*..*.*..*...*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*....*.*..*.*..*..*..*..*..*...*..*..*..*..*..*..*...*.*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*.*..*.*...*.*....*.*..*..*..*..*...*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*...*...*....*..*...*...*..*..*..*..*..*..*...*..*...*..*...*..*..*..*...*..*...*..*..*...*..*..*..*...*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*...*..*..*..*..*...*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*...*.*..*...*..*...*..*..*...*..*..*..*..*...*...*..*..*....*..*..*...*..*..*...*..*..*..*..*..*..*..*..*....*..*..*..*...*..*..*..*...*..*..*...*..*..*..*...*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*.*..*..*..*..*..*..*..*...*..*..*..*..*...*..*..*..*..*..*..*..*.***.*.*.*.*..*...*..*..*..*..*..*..*..*..*..*..*..*.*..*...*.*..*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*...*....*.*..*..*..*...*..*..*..*..*..*..*..*...*..*..*...*..*..*..*....*...*..*..*..*..*...**.**.*.*.*..*..*..*..*...*...*..*..*..*...*..*...*..*..*..*..*..*..*...*..*..*..*..*...*..*..*..*...*..*..*..*..*.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................*........*..*..*..*.*..*...*..*...*....*.*..*.*..*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*..*....*..*...*.*..*...*..*....*..*....*.*..*..*..*..*..*..*..*..*..*..*...*..*...*..*.*..*...*..*..*..*..*..*..*..*..*...*..*...*..*..*...*..*..*..*..*..*..*..*.*...*..*..*..*..*..*...*..*......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................****.*.*..*..*..*..*...*..*...*...*.*..*..*..*..*...*..*..*..*...*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*...*..*..*...*..*..*..*.*..*..*..*.*...*..*..*..*..*..*..*..*...*..*..*..*...*..*...*..*..*...*..*..*....*..*..*.*.*******.***.***.**.**.**.***.****.**.**.**.**.**.**.**..**.***.****.**.**.**.**.**.**.**.**.*.*.**..***.**.***.***.***.**.****.**.*.**.**.***.**.**.**.*.**.*.*.***.**.*.**.***.**.***.**.**.**.*.***.**.**..***.****.***.**.**.**.**.*.***.**.**.*.**.**.***.***.**.*.***.**.***.***.**.*.**.**.***.***.**.**.**.***.***.**.**.**.**.**.**.***.***.****.***.**.**.**..***.***.**.**.**.***.**.**.**.**.**.**.**.***.****.**.**.***.***.*.**.***.**..****.**.****.**.*.***.**.***.**.**.**.***.***.**.***.***.**.**.**.**.**.**.**.**.**.***.**.***.****.**.**.*.***.**.***.***.**.**.**.**.**.**.**.**.***.**.**.***.**.**.**.*.**.*.***.**.**.**.**.**.**.***.***.**.***.***.**.***.***.**.**.**.*.**.***.**.**.**.**.*.***.***.**.*.****.**.*.**.*.**.*.***.**.**.**.***.**.***.***.**.**.***.**.**.**.**.***.**.***.***.***.*.*.*.**.**.**.*.***.**.**..****.***.****.**.**.**.***.***.***.***.***.***.**.***.**.****.**.***.***.****.**.*.**.**.*.**.**.**..***.**.**.*.***.***.**.**.***.**.**.**.**.***.**..****.***.****.**.*.*.**.**.**..****.**..**..***.**.*.**..***.***.**.**.**..***.**.***.**.*.**..**.**.**.**..**.***.***.***.*.**.***.***.***.**.**.***.***.**.**.**.**.**.***.**.**.***.**.**.**.**.**.**.**.*.**.***.***.**.*.*.***.***.**.**.**.***.***.****.**.**.*.**.*.**.***.**.**.**.**.**.**.***.**.**.***.**.***.***.**..****.**.***.***.**..***.***.**.*.**..**.***.**.**.**.**.**.**.**.**.**.**.**.***.***.**.***.**.**.***.**.**.***.**.**.**.**.**.**.*.**.*.***.**.*.**.**.*.**.***.**.**.**.***.**.*.**.**.**.**..**.**.*.**.**.**.**.**.**.**.***.**.**.**.***.***.**.**.***.**.***.****.**.**.**.**.**.**.**.****.***.**.***.***.**.***.**.**.**.***.***.***.**.****.**.**.***.**.**.**.**.***.**.**.**.**.**.*.**.**.**.**.**.****.***.***..**..**.*.**.*.*.*.*..*..*..*..*..*..*...*..*..*...*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*....*..*..*..*.*...*..*..*..*...*..*..*..*..*..*..*..*...*..*..*..*..*..*...*..*...*..*..*..*...*..*..*..*..*..*.*..*..*...*..*..*...*...*...*..*...*..*..*..*..*..*...*..*..*...*..*..*..*...*..*..*..*..*...*...*...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................**.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..**..*.*.*.**..*.*.**..*.**..*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..***..**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.**..*..**.*.*.**..*.*.*.**..*.*..**.*.*.*.*.*.*.*.*.**..*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*..***..**..*..**.*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**.*..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.**..**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.**..*.**..*.*.*.**.*..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*..**.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*..***..*.**..*.*.*.*.*.*.*.*.*.*.**..*.**..**..*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.**..*.**..*.*.**..**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.**..*.*.**..*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.**..*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.**..*.*.*.*.*..**.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.**..*.**..*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.**..*.*.*..**.*.**..*.**..*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.**..*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*..**.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..*.*.*.*.*.*..**.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*..**.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*..**.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.**..*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*..**.*.*.*.*.*.*.**.*..*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.**..*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..**.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.************************.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*..*.*..*.*.*..**.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*..*.*.*.*..*.*.*.*.*.*.*.*.*.*..*..*.*.**.*..*.*.*.*.*.*..*.**.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*....*......*..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*..***..*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*..***..*.**..*.*.*.*.*.*.**..*.*.**..*.*.**..*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*..**.*..**.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*..**.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*..**.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*..**.*.**..*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*..***..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*..**.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*..**.**..*.*.**.*..*.*.*.***.*.*.*.*.*.*.*..*.*.**.****.*.*.*.*.*.*.*.****************************.***.*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*................................***.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.********.***********************************************************************************.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*..*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*..*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************.***.*..*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*.*.*.*.*.*.**..*.*.*..*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*....*.*.**..*.*.****.*.*.*.**.*.**.*.**.***.**.*.*.*.*.*.**.*.*.***.*.**..**.*.*.*.***.**.*.**.*.**.**.*.**.**.*.*.**.*.*.**.**.*.**.*.*.*.**.*.**.**.*.***.*.**..**.*.*.*.**.*.*.**.**.*.**.*.**.*.*.*.***..**.*.*.***.*.**.*.*.**.*.*.**.*..**.*.*.*.**.*.**..**.*.*.**.*.*.*.**.*.**.*.**.*.**.**.*.**.*.*.**..**.*.**..**..***.*.**.*.*.**.*.**..***..**.**.**..*.**.*.*.**..*.***.*.*.**.***.*.*.**.*.**.*.*.**.*.***.**.*.**.*.**.**.*.**..**.*.*.**..***.*.*.**.*.**.*.***.*.**********************.*.*.**.*.**.**.*****..*.**.**.**.**.**.**.**.**.**..***..**.**.**.**.*.***...**.**.**.**.***...**.**.**.**.**.**.**.*.**.**.**.**.**.***.**.**.*****.***.**.**.**.**.**.**.**.**.**..****.****.**.***.*.**************...............................................................................................................................................*******.**.*.**..*****.****.**.***..***.**.****.*.****.***.***.**.***.***.***.***.**.*.*.**..**..***.**.**.**.**.**..**...**..**.**.**.**..**.***.**.**.***.**.**.**.**.**.**.**..**.**.**.***.***.**.**.**.**.*.**.*.**.***.****.***.**..*.**.*.**.*.***.***.**.***.**.*.**.***.**.***.**.***.***.****.***.***.**.***.***.***.*.*****.***.****.***.**.**.*.****.**.**.***.**.**.***.**..***.**.**.**.*.**...**.**.**.**..**.**.**.*****.**.**.**.**..**.**.**.***.*.**.**.**..***.**.*****.**.**.*.***.**.**..**.***.***.****.*******.**.**.*.****.**.*..**..*****..**.*****.**.*.****..***.*.****.**.***.**.**.*.**.**.**.**.*.****..*.**.***.*****.**.***.**.****.**.***.*********.**.**.****.**.**.****.**.*****.***.******.**********.*.**.*****.*****.***.*******.**********************************..**.**.***.*.*************.**.*...*.*..*..*.*..*.*..*.*.*.*.*.*..*.*..*.*.*.*.*..*.*..*...*..*.*..*..*.*............*.***********.****.**.**..*..**..**........*..........*....*..*.*..************.**.*..*.*.**.*.**..*.*.*.*.*.**.*..**.*..*.*.*..*.*.*..*.*.*.*..*.*..*..**.*.*..*..*.*..*..*..*****************************************************************************************.****.*.*..*.*..*********.*.*.*.*..*.*.*.*.*..*.*.*.*.*.*.*.*..*.*.*..*.*.*..*.*.*.*..*..*.*.*.*.*..*.*.*..*..*.*..*.*.*.*.*..*.*..*.*.*.*.*..*..*..*.*..*.*..*.*..*.*..*..*..*..*.*..*..*.*.*..*.*.*.**..**.*.*.*.**.**.**.**.**.*.*.**.**.**.*.*.**.**.*.**.*.**.*.**.*.***.*.*.*.**.**.*.**.*.**.**.*.*.**.**.*.*.**.**.*.**.*.**.*.**.**.*.**.*.**.*.**.***.**.*.**.**.**.**.**.**.*.**.**.***.**.*.**.*.*.***.**.*.*.**.*.**.*.**.**.*.**.**.**.**.*.*.**.*.**.*.**.**.*.**.*.***.**.**.*.**.*.**.*.**.*.***.*.*.**.**.*.**.*.***.*.**.**.**.*.**.**.*.***..***.*.**.**.**.**.*.*.**.*.**.**.*.**.**.**.**.*.**.*.**.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.*.**.**.**.**.**.*.***..**.*.**.*.**.*.**.**.**.*.**.*.**.*.*.**.*.*.**.*.*.*.**.**.*.**.**.*.**.*.**.**.**.*.**.*.**.*.**.*.**.*.*.*.**.*.**.*.*.**.*.*.**.**.*.***.*.**.*.**.*.**.*.**.**.**.*.**.**.*.**.*.**.*.**.*.**.**.*.**.*.*.**.**.**.**.**.*.**.***.*.***.*.**.*.**.**.*.**.**.*.***..**.*.**.**.**.**.*.**.*.**.*.*.**..**..*.**.*.*.**.*.*.**.*.*.**.*.*.**.*.**.*.**..**.*.**.*.*.**.**.*.**.*.**.*.**.*.**.*.**.**.*.**.**.*.**.*.**.*.**.*.**.*.**..**.*.**.*.**.**.*.*.**.**.*.**..**.*.***.**.*.**.*.**.*.**.*.**.*.**.*.*.**.*.**.*.**.*.**.*.**.**.*.**.*.**.*.**.**.*.**.*.***..**.**.*.**.*.**.*.**.*.**.**.*.**.***.*.**.**.*.**.*.**.*.**.**.*.**.*.**.*.*.**.*.*.***.**..**.*.*.**.*.*.*.**.*.*.**.***.*.*.**.*.**.**.*.*.*.**.*.**.**.**..*.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.**.**.**.*.**.***.*.***.*.**.*.**.*.**.***.*.*.*.**.**.*.**.*.**.*.**.**.**.**.*.**.*.**.*.*.***.*.*.*.*.**.**.**.**.**.*.*.**.**.*.**.**.*.**.**.*.**.**.**..**.*.*.**.*.*.***.**.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*..**.**.*.**.**.**.**.*.**.*.***..*.***.*.*.**.*.**.**.*.**.***.*.***.**.*.**.*.**.*.*.**.*.*.***.**.*.**.*.**.*.**.*.**.*.*.**..***********************************************************************************************************************************************************************************************.*..*..***..*..*....*...*....*...*...*...*...*.....*.....*....*..*...*...*..*....*...*...*...*..*...*..*....*....*...*...*..*...*...*..*....*...*....*...*...*....*..*...*..*...*...*...*...*....*..*...*...*...*...*...*...*..*...*....*..*..*...*...*..*....*..*...*...*...*....*..*....*...*..*...*....*...*...*..*...*..*...*...*...*...*...*...*..*...*...*..*...*...*...*....*...*..*...*...*...*....*...*....*...*...*...*....*....*...*..*...*....*...*...*...*..*...*....*.....*...*...*..*...*...*...*...*....*...*....*...*..*...*...*...*...*..*....*...*...*...*..*....*...*..*...*..*....*..*....*....*.....*.....*...*...*.....*....*.....*.....*.....*....*.....*...*....*....*..*...*...*..*....*...*...*...*...*..*....*..*...*..*...*..*..*...*...*..*....*...*..*...*..*...*.....*....*...*...*...*..*....*...*....*....*....*...*..*...*...*..*....*.....*....*...*...*.....*...*...*..*...*...*...*....*...*...*....*...*..*...*....*...*...*...*..*...*....*...*..*..*..*...*...*....*...*...*....*...*....*...*...*...*....*....*...*...*...*...*...*...*...*...*....*...*...*...*...*....*...*...*..*....*...*...*...*..*....*...*...*...*....*....*...*...*..*....*....*....*....*...*.....*...*....*...*..*..*....*...*..*....*....*...*...*..*....*..*....*....*...*...*...*....*....*..*...*...*...*...*...*....*...*...*...*...*....*...*...*....*...*...*...*...*..*...*...*...*...*...*...*..*....*...*..*..*....*...*...*....*..*.....*...*.....*...*...*....*...*....*...*....*...*...*...*...*....*...*...*....*...*....*...*..*.....*....*...*....*...*....*...*......*.*.*.**.*.***.*.*.**.*.**.*.*.**.*.***.*.**.**.*.*.**.*.**.*.**.*.**.**.*.**.*.**.**.*.*.**.*.**.***.**.*.**.*.**.*.**.*.**.*.*.***.*.**.*.**.***.*.*.**.**.*.**.**.*.*.**.**.*.**.*.**.*.**.*.**.*.*.**.*.**.*.**.*.*.**.**.*.**.*.**.*.*.**.**.*.**.*.*.**.*.**.*.**.*.*.**.*.***.*.**.*.*.***..**.*.**.*.**.*.**.**.*.*.**.*.**.*.**.**.*.*.**..**.*.**.****************************************************************.*****.*..*.*.****.*.**.*.**.*.**.*.**.*.**.**.*.*.**.*.**.*.**.*.**.*.***.*.*.*.**.*.**.*.**.**.*.**.*.**.*.***.*.*.**..**.*.*.*.**.*.*.*.**.*.**.*.**.*.*.**.*.**.*.**.*.**.*.**.*.**.*.**.*.***.**.*.**.**.*.**.**.*.*.**.*.**.**.*.*.**.**.**.*.*.**.*.**.**.*.**.**.*.*.**.***.*.*.**.*.*.***..*.*.*.*.*.*.*.*..*.*.*.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*..*.*.*..*.*.*.*.*.*..*.**...*.*...*..*..*...*..*..*..*..*..*..*..*...*..*...*..*.*...*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*...*..*..*..*..*..*.*....*.*...*..*..*..*..*..*.**.**.*.*..*...*..*...*..*..*...*..*..*..*..*...*.*...*..*.*...*..*..*..*..*...*..*..*..*..*...*..*.*..*..*..*..*..*...*..*..*..*...*..*..*...*..*..*..*..*..*..*..*..*.*...*..*..*..*..*..*..*..*..*..*..*..*..*...*..*...*..*..*..*..*..*..*..*..*..*..*...*...*..*..*..*...*..*..*..*..*..*..*..*..*..*..*..*...*..*...*..*...*.*..*..*..*..*..*...*.*...*..*..*..*..*..*...*..*...*..*...*..*..*..*..*..*.*..*.*...*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*..*...*...*.*...*..*..*...*..*..*..*..*..*..*..*..*..*..*...*....*.*...*..*..*..*...*..*..*..*..*..*..*..*..*.*.**.*.*.*..*..*...*...*..*..*..*..*..*..*..*..*..*..*...*..*...*..*..*..*..*.*...*.*...*..*..*..*..*..*..*.*..*..*....*..*..*..*..*...*..*..*..*..*..*..*..*..*...*..*..*..*...*.*...*.*..*...*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*..*...*...*..*.*..*..*..*..*..*..*..*...*..*..*..*..*..*..*..*..*..*.*..*..*..*..*.*..*..*...*.*..*...*..*..*..*..*...*..*...*..*..*...*..*.*..*..*..*..*..*..*..*..*...*..*..*..*..*..*...*..*..*..*..*..*..*..*.*..*..*..*..*..*...*..*..*..*...*..*..*..*..*.*..*..*..*..*..*..*..*..*..*.*.*..*.*..*..*..*..*..*..*...*...*..*..*..*..*..*..*...*..*..*..*...*...*..*..*..*..*...*..*..*..*...*..*..*.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................***.*..*.*.*.*.*.*.*.*..**.*.**..*.*.*.*..**.*.*.**..*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*..**.*..**.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*..**.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.**..**..*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.**..*.*.**..*.*.*.*..**.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**.*..*.*.*.*.**..*.*.*.*.*.*.*..***..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.*.*..***..*.*.*.*.*.**..*.*.*.*.*.*..**.*.*.*.*.*.*.**..**..*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..**..*.*.*.*.*.*.**..*.*.*.**..*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*..**.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.**....*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*..***..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*..**.*.**..*.*.*.*.**..*.*..**.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**.*..*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*..**.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.**.*..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.**..*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.**..*.**..*.**..*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*..**.**.*..**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.**..*.*.**..*.*.**.*..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**.*..*.*.*.**..*.**..*.*.*.*.*.**..*.*.*.*..**.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.**..*.*.**..*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*..**.*.*.*.*.*.**..*.*.*.*.*.*.*..**.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*..**.*..***..*.**..*.*.*.*..**.*.*.**..*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*..**.*.*.*.*.*.*.*.*.*..**.*.*.*.*.*.**..*.*.*..**.**..*.*.*.*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.**.*..*.*.*.*.**..*.*.*.*.*.*.*.*.*.*.**..*.*.*.*.**..*.*..done.produced 40000 objects.consumed 40000 objects.
- Boost.lockfree总结
- Boost Lockfree
- Boost Lockfree
- Boost.Lockfree
- boost lockfree lib
- boost::lockfree::queue记录
- Boost之LockFree
- Boost.Lockfree官方文档翻译
- Boost.Lockfree官方文档翻译
- Boost.Lockfree官方文档翻译
- 【Boost】Boost总结汇总
- 【Boost】Boost总结汇总
- 【Boost】Boost总结汇总
- boost 总结
- evpp性能测试(3): 对无锁队列boost::lockfree::queue和moodycamel::ConcurrentQueue做一个性能对比测试
- 关于 lockfree 算法
- MemoryPool的LockFree实现
- MemoryPool的LockFree实现
- C++实验7——最大公约和和最小公倍数
- jsp标签
- ACM天梯赛练习L1-016. 查验身份证
- Redis的Java客户端源码解读
- JavaScript:表单基础知识
- Boost.lockfree总结
- 一个典型的SSH登录与增删改查demo详解+源代码
- 第一章 JAVA入门(Android之Hello World)
- 状态栏显示
- 存储班长信息的学生类
- 五.控件--导航控制器
- android之handler的刨根问底
- iOS 第三方框架-MJExtension的使用
- uvalive 3644 X-Plosives(并查集)