Google
 

2007-01-31

教授生日快乐

  今天是教授的27大寿,其实好多天前,好像还是大牛生日前后的时候,我就已经想到今天了,还跟疯丫头说了,还去逗教授玩,说给教授去弄个礼物来。遗憾的是,疯丫头是一直没出席过最近几次同事们的生日宴,从猫猫到大牛,再到今天的教授。
  今天白天是评议了一天,上午2个小时,下午接近3个小时,几乎没有时间干点其它的事情,实在是讨论得全身难受,而教授则像是被人先整了,不知道谁用他的notes发了个邮件,疯丫头还说是我弄的,结果只骗了她一个人。哈哈,看那邮件的内容似乎是一本正经的样子,也难怪疯丫头这么信教授了,呼呼。
  下班后,一群人奔向湘江老厨,雨烟还想鼓动猫猫也送教授花,结果如我所料,猫猫是肯定不会送的,最后就挑了个小森林,哈哈。
  我发现我有时候的脾气还真是挺大的,结账的时候,他们多算了一个人,我就很大脾气地冲过去叫他们数数凳子,而且好像很凶的样子说,难道我们13个人坐12个凳子。小思宇曾经还说过很怕我生气的样子,有时候打的,我在前面跟司机犟的时候,她们在后面吓得直发抖,呵呵。我还怕小思宇呢,倒吸一口凉气也是最经典的一幕呀!
  不扯别的了,教授又大了一岁了,怎么还不着急找女人呀,呼呼,我都急呢。总之,教授生日快乐,在新长的一岁里,找个好女人!

2007-01-30

小破聊天软件QQ

  真不知道,QQ这么个小破聊天软件,为什么能做得这么大,80多MB的东西可不是随便能写出来的,实在是佩服啊,也看不出它都实现了哪些炫目的特色功能,除了聊天还能干吗。
  今天下午睡了午觉起来,头竟然是昏的,眩晕!TSE坐在我旁边跟我说话,我强打着精神,努力不让自己说错话或者漏过他说的话,吃力啊!不知道是怎么了,晕了好久,去喝水,冷水冲脸,都没好转。后来时间慢慢过去了,稍微好一点了,但还是不正常,就是晕!从来没有过这样的情形啊!

2007-01-29

虚荣心满足了

  昨天晚上睡觉着,把电脑抱到床上,跟float聊了一会儿,她说要点名表扬我一下,因为我的blog上说了一些让她觉得要赞赏的话。好奇地熬到今天,去她的QQ空间看了一下,就抄了我三句话,不过也让我的虚荣心小小地满足了一把。
  今天去买了机票了,11号的,去的时候6.5折,回来的7.5折,还是花了我2030个大洋啊,呜呜,越来越穷了。顺便去请了假,从12号开始请到17号,原来一直在等,等消息确定,自从知道小丫头被短信通知了后,我便可以心安理得、死心踏地地去请假去买机票了,今年,还是一个人走。所谓的人算不如天算啊!

2007-01-28

南山毛家饭店

  今年的测试部聚餐改到了南山的毛家饭店。说实话,除了那盘虾,其它的菜我觉得做得实在不行。而且最为让人奇怪的是,为什么不同的人,运气好坏的差别就会那么大呢。对于抽奖这种全凭运气的好事,从来都轮不上我,倒是一些倒霉事情也许可能偏偏会找到我头上来。虽然,《火影忍者》里的阿凯说,运气也是实力的一部分。但这样抽奖的事,实在是跟自己一点点都打不到边的,划拳打牌什么的也许还可以算是自己有一部分人为因素,比如临场反应力,观察力等等,唉!
  只休息一天,有点不爽。明天去买机票吧,然后是请假,早点回去。

满城尽带黄金甲

  完全不知道在讲什么,反正就是噼里啪啦打了一阵,有乱伦,有恶搞,最后是屠杀。一点不好看,连色彩、声音都让人觉得没什么值得说的,怎么说《夜宴》至少这点上还是继承近几年来国内大片的特色的。
  不过,小马哥还是又帅又酷的,巩俐阿姨的演技确实也是一流的,可惜的是剧本太烂了。刘烨也还成,好像后来看到他演的角色都是不太好的,不像那部那部叫什么来着,和孙俪一起演的,多好的一角色,《茉莉花开》里也是个讨打的角色,呵呵。周杰伦就真的太丑了,Jay啊,不要出来演戏了,就好好写你的曲,唱你的歌吧,影视圈不适合你!
  到最后,就又跟看《夜宴》时的感觉一样,突然听到怎么好熟悉的音乐啊,才想起来最近不就一直在听《菊花台》吗,当时感触还多大的,感慨Jay是个才子,什么样风格的歌都能唱,所以所以,我在再次大声呼喊,Jay,不要演戏了,好好写你的曲,唱你的歌吧!

2007-01-27

小丫头病得挺严重的

  今天下班后找小丫头一起去吃饭,等我走到百草园门口时给她打电话,说在等打针。我在门口等了一会,忍不住了就进去找她,原来是要打吊针。于是先出去吃饭,在百草园门口随便找了一家馆子,有粥喝就进去了。叫了个皮蛋瘦肉粥,一个黄金豆腐,还有个清炒生菜。除了生菜,另外两个的味道都不怎么样,黄金豆腐还都是用鲜蛋打的蛋花,晕!
  小丫头不停地咳,还是带痰的。吃过饭就陪她去打吊针,吊了1个多小时。还说现在已经是有所好转了,前几天是还有发烧的,有一次去跑操,结果不行了,让一个男生背回去的,甚至连那男的是谁都不知道,长啥样都没看,可怜的小丫头。
  小丫头说,她们部门已经给她发短信通知她不要急着找房子了,因为要被派到其它研究所去。呼~~~也许她在深圳,就只能再呆这最后一星期了。

2007-01-26

大牛生日快乐

  大牛两天前开始就发邮件问,周五晚上有空一起吃饭。我当然无论如何是有空的啦,哈哈,再怎么说有得吃饭,优先级是最高的。
  今天下了班,跟猫猫、晓妮、悍超和教授一起,到湘江老厨,好happy,蛋糕好好吃呀!
  大牛生日快乐!

2007-01-25

小丫头竟然病倒了

  小丫头下午发短信来,说在打点滴,病倒了。下班后给她打电话,本来想过去看看她的,顺便拉她去吃饭。这个家伙总是不想吃饭,还说医生说只要休息就行了。饭都不吃的人,休息有什么用。可惜她说要去上课了,于是只好作罢。

2007-01-24

去看了下小丫头

  小丫头在大队培训,还当了个什么班干部,呵呵,这让我对人的性格决定命运这一论调更加深信不疑,像我这种人是绝对不会跑上去竞选的。她还说,当时因为在台上唱了几句,就选上了。我好奇地问,唱了什么。结果她唱起来,晕,小薇……还真有个性,呵呵。
  昨天小丫头叫我上网找些配乐诗朗诵的东西,上网搜了一把,没多少,把能下的都下下来了,发现也才几十MB,刻个DVD也忒浪费了,于是把街舞教学的那些视频,加上K Mega Lite和千千静听一起刻了,刚好4GB。今天就给小丫头拿过去,本来说是到培训中心食堂找她的,结果她打电话来说,回百草园了。于是吃完饭,就走去百草园了,刚好身上也不带钱,就断了坐小巴的念头。刚走进百草园,小丫头就出来了。于是两个人一起往外走,去培训中心,小丫头还昏了头,走错路都不知道,呵呵。从她打电话的时间看,就知道她没吃中饭,这个家伙。还说带她去食堂买点吃的,结果走到教室门口的时候,好像里面有点事情,她就直接进去了。

2007-01-23

美女老大说我眼光高

  呵呵,今天在食堂吃晚饭的时候,我们美女老大说我眼光高。这点我承认,好多人已经这样说过我了,我自己也觉得。难道真的是因为美女看多了,不知不觉就把要求提高了?
  其实,说不定,哪天,心血来潮,就随便找个女人过了,哈哈。现在一直觉得还年轻,可以拖几年,混点资本,到时候再找个。很盲目,呵呵!

2007-01-22

永远不是最后一次

  今天偶然看到某人也有blog了,这让我有些许的诧异。因为一直以来,都以为是个对网络不怎么感兴趣的人,仅有的用处大概就是下碟,当歌,聊QQ吧。不过,也许是因为不够了解,也许是因为人会改变。毕竟,这半年来,我自认为也改变了很多了,甚至是换了一种生活方式,一种生活态度。可能是一直以来,自己的处世方法有问题,对人对事总以一成不变的眼光看待。有句话说得好,可能最值得庆幸的是,人是会改变的。但是不能改变的是曾经,是历史。有些事情,是永远没有挽回的余地的。因为我的愚蠢,我的冲动,我的情不自禁,我的不可饶恕,一切已成为过去。
  也许,某些人对于一个人来说,都只是漫长生命旅途中的匆匆过客,某一刻,某地,稍作停留,又继续上路,剩下的只有那回眸一笑的皓爽回味,亦或是横刀相向的痛苦回忆。佛曰,上天尚且不完美。凡人何必要追求事事无憾。
  只为了那逝去的友情,追忆曾经拥有的快乐和酸楚,永远记住那个被我深深伤害的小女孩。对不起!

2007-01-21

心乱如麻

  在回百草园的335上,看着旁边闭着眼睛假寐的女孩,除了叹惜,实在想不出任何的神情和动作来表达我乱麻般的思绪了。
  小丫头穿着浅绿色睡衣的样子真可爱。
  唉!
  前天,妈妈突然发短信来,说做了个很美的梦。梦见我带了女朋友回去了,我上班,婆媳俩在家带孩子。我晕倒,回说还早得很呢。估计我妈除了无奈,没有其它想法了。
  套用某某人曾经很爱说的一句话:“大自然真奇妙!”

LLYF Spy has been transplanted to BDS2006

  LLYF ToolBox里除了LLYF Spy,其它的都是使用BDS2006来编译的,相比BCB6,2006版本的编译器最明显最直观的改进是编译速度的巨大提升。另外,传说中的VCL改进使得更好的内存管理,导致的更佳的内存占用情况,也是值得升级过来的。另外就是,IDE界面和其它工具的改进,比如debugger,都说明,从BCB6把工程移植到BDS2006是多么应该呀!LLYF Spy一直没移植过来,是因为BDS2006中一直安装Flash的ocx控件没成功,而LLYF Spy中有个Splash窗体,尽管一直都在配置文件中把它屏蔽掉了,但当时是为了演示Flash跟本地应用的集成而添加上去的。昨天下决心去找了一下解决方法,要在BDS2006中添加ocx控件,应该先new一个package,然后再import type library,试了一下果然可以,对于有些函数说连接错误的,就把原型改一下,比如__fastcall改成__stdcall,还有就是加inline,设好obj文件的搜索路径,终于可以编译LLYF Spy了。
  除了移植过去,还试图给嵌入的WebBrowser控件添加XP风格。这点当时我郁闷了很久也没想通,以为整个程序有了XP manifest就应该把它嵌入的WebBrowser也有XP风格。前几天看了一篇文章,才知道,原来是要另外作些处理。要调用InitCommonControlsEx,设置一个标记,再把shell32.dll和explorer.exe装载进来。还有种方法说是改写WebBrowser的接口,返回一个标记就可以,可是我试了不行,不知道是哪里出错了。

2007-01-20

流水账

  嘿嘿,小丫头说我只会记流水账,是啊,从初中开始,一直在写流水账,到高中的时候遇到一个比较宽容的语文老师,对于反应真实生活的文章,即使是没有文采的流水账,他也会赞赏,于是更加变本加厉,从此只会写流水账,哈哈!我这个没有文学素养的粗人,流水账也可以记录曾经发生过的美好和痛楚,平淡中见真知。哈哈,其实是借口啦,当然不像小丫头,一腔的忧愁、一肚的苦水、一堆的酸楚,化作让人心动的文字。男人不需要多愁善感,把所有的伤感和悲鸣藏在心底,带给对自己重要的人阳光和快乐。

2007-01-19

加快XP启动速度

  突然想到的,把一些本来设置成手动的服务改成自动,或许会加快系统启动速度。果然有用,大概是因为有些服务设置成手动后,本来是需要的,在系统启动时,却还需要花时间去检测,或是在启动的后期进行启动服务,所以速度变慢了。
  好不容易下到个官方命令行版的svn,上去把CodeBlocks的源代码取下来。唉,如果不是因为可执行安装包下不下来,我才懒得弄呢!不过刚好试用一下svn也好,起码比起CVS要先进,比起VSS它是免费的,比起ClearCase它小巧。
  射手网真是个好网站,一般流行的片子,都能找到字幕,哈哈,现在才大致知道应该怎么找字幕。
  网上很难找make和gdb的文档!有还是有的,但我想要的是用chm或pdf格式的整理好的,却很少很少。如果以后都像写我的方块那样写游戏,可以先考虑用MinGW是否可行,代价是否很大。一般说来,需要一个好的代码编辑器,所以试试CodeBlocks,需要一个强悍的调试器,就用gdb,还需要良好的工程管理,就用GNU make。不过说实话,VC加上VAX插件,绝对是在Windows环境下最牛x的开发环境,但毕竟,都是要n多money的,而前面提到的那些工具,全是GPL的。可以试一下,也许还需要一个GUI开发库,比如Delphi/BCB中的VCL、VC中的MFC,免费的有wxWidget、Fox、QT等等,但都会拖一个大大的链接库,我不需要跨平台可移植,所以,看winx的表现,似乎是可以把WTL单独剥离出来,给MinGW用的,到时候再看看,说不定,只写DirectX游戏的话,对这方面的要求不多呢!

2007-01-17

奇怪的MinGW

  很早以前就尝试过用MinGW,总是因为遇到奇怪的问题解决不了而马上放弃。写个小程序,它硬是不照着人想的那样来,资料又奇少无比。但再想想,连MAME这么大的工程都能用它来编译,为什么呢!
  配置好了编译环境,整了个makefile,写个小程序,用来生成HTML格式的文件列表的。遇到好多问题,最怪的就是,它生成的程序居然会自动解决命令行参数,比如*.*,它就自动把当前目录下的所有文件名作为参数传进去了,除非用引号包住。开始不知道原因,硬是以为它调用的库函数有bug-_-b
  放弃bjam了,白天看了一下它的文档,跟Boost的耦合太强了,似乎不太适合作为通用的工程管理工具,还是用make算了,文档也多,基本上绝大部分的工作都能完成。

2007-01-16

去个同事那拷了20多GB的电子书

  昨天就发邮件打了个招呼,今天下班后,带着我的巨巨外置硬盘去了,想不到这位哥们的硬盘更大,是250GB的,比我的大了90GB,晕!电子书有20多个GB,看了看我的4个分区,本来是想放到专门放文档、资料的分区里的,一看居然只剩下8GB多的空间了,很奇怪,先不管了,放到另外一个空很多的分区里。后来才想起来,前段时间才用eMule下了17GB多的MAME ROM,还有很多其它的Emulator,当然占去了20多GB了。拷完东西,出来给小思宇打电话。把睡袋和垫子拿回来,小思宇说在收拾东西,因为明天就要回去了。真牛,她们领导也竟然真肯让她请假这么久,昏倒。
  昨天晚上跟小丫头聊天,说了四五点原因,说得很沉重。其实我在想,如果在不远的以后的某一天,这几点原因中超过一半得到了改善,我可能还是会考虑、会继续。唉!

2007-01-15

拿得起,放不下

一盏离愁孤灯伫立在窗口
我在门后假装你人还没走
旧地如重游月圆更寂寞
夜半清醒的烛火不忍苛责我
一壶漂泊浪迹天涯难入喉
你走之后酒暖回忆思念瘦
水向东流时间怎么偷
花开就一次成熟我却错过

谁在用琵琶弹奏一曲东风破
岁月在墙上剥落看见小时候
犹记得那年我们都还很年幼
而如今琴声幽幽我的等候你没听过
谁在用琵琶弹奏一曲东风破
枫叶将故事染色结局我看透
篱笆外的古道我牵着你走过
荒烟漫草的年头就连分手都很沉默

一壶漂泊浪迹天涯难入喉
你走之后酒暖回忆思念瘦
水向东流时间怎么偷
花开就一次成熟我却错过

谁在用琵琶弹奏一曲东风破
岁月在墙上剥落看见小时候
犹记得那年我们都还很年幼
而如今琴声幽幽我的等候你没听过
谁在用琵琶弹奏一曲东风破
枫叶将故事染色结局我看透
篱笆外的古道我牵着你走过
荒烟漫草的年头就连分手都
谁在用琵琶弹奏一曲东风破
岁月在墙上剥落看见小时候
犹记得那年我们都还很年幼
而如今琴声幽幽我的等候你没听过
谁在用琵琶弹奏一曲东风破
枫叶将故事染色结局我看透
篱笆外的古道我牵着你走过
荒烟漫草的年头就连分手都很沉默

2007-01-14

make or bjam?

  早上8点的时候,手机就响了,也不知道是谁,郁闷死了,一个打错的!然后想想就还是起来开始洗澡收拾,9点的时候出门,发了条短信。在梅林倒车,在金地花园下车。回忆一下当时走过的路,嘿嘿,还好还记得怎么走的。但哪个房间就忘了,只是依稀记得好像是10楼的,于是只好打电话问了,果然是在10楼的,呵呵。上去坐了一会儿,看了一会儿电视,都没几个台,因为没装数字电视,关外这点比较好,装了有线电视就可以收到好多个台。有个水电工在修下水管,下去买了个新的。过了11点半,说去吃饭吧,走到下面附近一个自助火锅,还真便宜,一人18元,锅底10元,哈哈,我拿了很多水果,吃了很多蟹肉。
  吃完火锅,说去医院吧。于是坐到华强南,福田医院站,乱找了一通,总算找到了所谓的福田人民医院。走到体检科,玩了一下视力表,哈哈,我还有1.5呢。结果被告知下午不体检,只有每天上午8点到10点,郁郁地出来,既然都到了上海宾馆了,就逛一下街吧。去天虹、NICO、曼哈逛了,一直到5点多,累了,走进曼哈的麦当劳,买了可乐和鸡翅,亏了,没用优惠券,郁闷!
  逛得腿酸!
  突然想学一下make或bjam,或者两个都学一下。因为觉得用命令行只能每次全都编译连接一遍,有点浪费时间!写游戏还真是能学到不少东西,居然已经转换到这个上面来了,呵呵。

2007-01-13

VC命令行

  用VC7.1写榜单,榜单一般就是一个cpp文件就搞定了。因为有很多个榜单,所以一个一个建工程似乎稍微麻烦了点,后来想想用make能搞定不,可是我又不熟悉make,只好看看能不能写个批处理文件,用命令行来解决。看了一下LUA发布包里的编译用的批处理文件,再看看IDE里的工程属性,照着写了一个,舒服啊,可以一下把所有的都马上全编译连接了。

2007-01-11

让VC7.1编译DLL时不连接C运行时库

  照着写单机的榜单,突然发现从某个修改开始,总是会把C运行时库也连接进来,真麻烦,仔细看看自己的代码,实在没必要拖个DLL呀,何况VC7.1的C库是msvcrt71.dll,是不由Windows携带的,所以要发布这个榜单的同时,就要背负需要同时发布这个dll的负担。在工程属性中把可能想到的所有的编译选项都关掉了,用depends看还是连接进来了。仔细想想,应该跟代码有关系。因为把我的代码贴到其它以前编译过不用连接C库的工程里,最后也会有C库被连接进来的。于是心一狠,在工程属性中设置连接时强制不连接C库,看它最后有什么提示。可以看到有浮点数的应用,就要求连接C库了。刚好这时浮点数的应用很简单,可以转换为整形的计算。然后再编译连接,发现是有要连接另外2个函数了,看看函数名,猜想大概跟程序运行安全相关,再到工程属性中把异常和缓冲区检测都关掉,果然可以编译连接通过了。再一步步试,最后发现是因为打开了缓冲区检测,每当程序中用到了数组的操作,就会有连接C库中的一些函数的要求。
  终于搞定!

2007-01-09

breaking霹雳舞(1)

  没有艺术细胞呀,四肢僵硬呀,肥肉丛生呀!
  摇滚步,战斗舞,排腿,结束动作,hoho~~~

2007-01-08

游戏驱动(译)

  终于把这篇也整了,原文在这里,同样,还是有些没懂起的。

游戏驱动
by Aaron Giles
  可能关于MAME怎样工作的最常见的问题是:我应该怎么编写驱动?为了理解怎么编写驱动,你需要理解驱动是怎样连接到MAME中去的,以及众多的驱动相关的难点是什么。这篇文章向你提供在从最顶层的,驱动需要些什么的概况。以后的文章会讲述这些以外的细节。
  开始,你得先看一下driver.c里的代码。实际上这个模块做的,只是生成了MAME支持的所有驱动的指针的列表。问题是每个驱动,需要选声明一下:
extern struct GameDriver driver_puckman;
extern struct GameDriver driver_puckmana; ...
  然后所有的驱动被声明了,我们要这样声明一个驱动的列表:
const struct GameDriver *drivers[] = {
&driver_puckman, &driver_puckmana, ..., 0 };
  使用C语言来做这事很烦人,因为它需要我们为每个驱动添加2个东西到driver.c,在顶部的一个声明和最底部的列表中的表项。实际上,在用一些好用的预处理魔法去简化这些事情前,我们已经这样做了好多年。如果你是一个C专家,你可能会指出来,也可能不会,没关系。重要的是,要把驱动添加到主列表中,你只要用特定的DRIVER宏这样声明一次就行了:
DRIVER( puckman ) DRIVER( puckmana ) ...
  这样把表项插入到列表中,和其它表项一起,你的驱动就已经可以被MAME通过主驱动列表正式引用了!当然,这也是说你实际上需要一个GameDriver对象,用在MAME其它的地方,用相同的名字,用于成功地连接到应用中。那应该怎样正确地定义一个游戏驱动?
  基本的GameDriver结构非常简单。它提供一个很基础的信息列表,关于这个驱动的,记录了绝大部分的描述性数据(游戏名,制造商,年份等)和指向其它用于描述游戏使用的硬件的结构的一些指针。比起你自己定义和使用GameDriver结构,你应该简单地使用宏来填充所有的细节内容。如果你看一下驱动目录中任何一个文件的底部,你会看到大量的这种宏用于描述驱动:
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
...

  使用宏的主要缺点是,对于每个参数的含义不够直观。甚至很多使用了相同的名字("pacman")。然而,这是你经常会遇到的。表项从左到右的含义是:
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第一个参数(1980)很明显,是MAME指定的这个游戏的年份。一般,我们会试图使用游戏自己显示的版权年份作为这个定义的年份。这可能不够完全精确,但它经常够接近,并且这个定义使我们至少是对游戏了解了。对于不显示版权的游戏,我们就要去收集相关的信息,去猜这个年份。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第二个参数(puckman/puckmana)是驱动自己的名字。这个名字要跟你在driver.c中使用DRIVER()宏时用的名字匹配。这里GAME()宏和driver.c中的DRIVER()宏都会在你指定的这个名字前添加前缀"driver_",是为了给系统中所有的游戏驱动都保持一个统一的命名机制。因此,在上面的例子中,会扩展成driver_puckman和driver_puckmana,这样就同前面讲的命名机制匹配了。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第三个参数(0/puckman)是父驱动的名字。MAME中,父驱动是一个游戏最近版本的驱动。这个参数总是可以为0来指定父驱动。游戏的所有其它版本都可以被认为是“克隆“,并且必须在这个域指定其父驱动的名字。上面这个例子中,puchman是父驱动,puchmana是克隆驱动。作为驱动名字,GAME宏会自动添加”driver_”宏在你指定的名字前面。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第四个参数(pacman)是机器驱动的名字,它描述了街机硬件。机器驱动值得讲一整篇文章,所以这里不会详细讨论。对于多游戏驱动共享同一机器驱动是很常见的,特别是对于在有一组相同硬件上面有很多种游戏的系统。机器驱动很有趣的一面是,不像游戏驱动是用GameDriver结果来表示,机器驱动不用结构而是在运行时通过宏生成的代码来创建。也就是说这第四个参数指向的不是一个结构,而是个“构造“函数。同样,根据维护规则,GAME宏会在名字前面添加”construct_”前缀。上面的例子中,宏会把这个参数扩展为指向函数construct_pacman,这个函数稍后会定义。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第五个参数(还是pacman)是输入端口定义的名字。输入端口会在其它地方描述,简要地说,它们描述了所有游戏中的输入(控制和DIP切换)是如何被映射的。像机器驱动,输入端口在运行时被创建,宏会添加”construct_ipt_”前缀在这个名字前。上面的例子中,宏就生成了指向函数construct_ipt_pacman的指针。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第六个参数(这里是0,但以数字表示其它的驱动)是驱动相关的初始化函数的名字。这个函数会试图做些解密操作,如果需要,可能会动态改变该游戏驱动的CPU的内存映射。这个会有用,是因为大多数游戏的硬件是通过机器驱动的定义来控制的,而这机器驱动会经常在多个游戏驱动中共享。但是实现中,甚至当游戏在相同的硬件上运行,都会有些细小的差别。初始化函数允许在虚拟硬件创建前就使驱动设置生效。宏会在你给的名字前添加”init_”前缀。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第七个参数(这里是ROT90)指定了游戏显示器的方向。所有游戏都实际是设计成TV形式的显示输出的。像Pac Man游戏,却是顺时针方向旋转90°。游戏中的所有图形在内部都经过旋转,所以它看起来旋转后就是右边是上边。类似,有很多游戏是设计成逆时针方向旋转90°。也有一些游戏是设计成从镜面反射的,所以所有的东西都是画在镜面中的镜像。这些转换通过这个方向参数描述。
  方向参数实际由3个bits组成,它们都是独立可控的。第一个bit (ORIENTATION_FLIP_X)指示显示器应该从左到右画。第二个bit (ORIENTATION_FLIP_Y)指示显示器应该从上到下画。第三个bit(ORIENTATION_SWAP_XY)指示显示器应该从左上角到右下角画对角线。如果你觉得这些东西很难懂,你会意识到如果把这些东西结合在一起,假设先是SWAP_XY,然后描述所有可能的旋转和镜像。例子顺时针90°旋转就是SWAP_XY与FLIP_X的结合。
多数时候,这个复杂性已经帮你屏蔽了,你可以使用预定义的宏ROT0, ROT90, ROT180, 和 ROT270来指示无旋转,顺时针90°旋转,180°旋转(翻转X和Y),和逆时针90°旋转。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第八个参数("Namco")是制造商的名字。很不幸,这并不像它看起来那么容易决定。很多时候游戏从一个制造商授权给另一个。例如Pac Man就是授权给Midway在美国发布。这样,制造商信息应该写成"[Namco] (Midway license)"。对于走私货就更麻烦点。一半的情况下,走私贩就只用一个或两个字母来表示名字,并且不是什么值得提及的合法的公司。多数时候,走私货用”bootleg”或”hack”为表示制造商名字。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  第九个参数("PuckMan (Japan set X)")是游戏的全名。这个名字应该代表它显示出来的名字,如果可能,应该接着圆括号里面是版本或区域信息。这里,区域(Japan)信息也被指定了,这表示跟其它众多版本有些细节上的区别。同很多街机游戏一样,实际版本号是从不指定的,所以我们就用自己的版本编号机制,而不管是否真的需要其中的细节区别。
GAME( 1980, puckman, 0, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, puckmana, puckman, pacman, pacman, 0, ROT90, "Namco", "PuckMan (Japan set 2)", GAME_SUPPORTS_SAVE )
  最后一个参数(GAME_SUPPORTS_SAVE)是用来描述驱动状态的一个或多个标识。如果没有标识,就简单地设为0。如果有多个标识,就用or来连结。当前使用的标识的含义如下:
GAME_NOT_WORKING —游戏没有完全正常工作;这可能是因为有些奇妙的bug使得游戏没有完全被模拟,因而不能正常从头玩到尾;
GAME_UNEMULATED_PROTECTION —游戏中某种形式的反盗版保护使得不能完全正常工作;这个标识几乎总是和GAME_NOT_WORKING一起使用。
GAME_WRONG_COLORS —色彩解码还没有完成;常因为是丢了一般用于色彩映射的色彩PROM。
GAME_IMPERFECT_COLORS —色彩解码已经全部完成了,但在有些情况下色彩显示有些小问题,比如没有阴影或者高亮。
GAME_IMPREFECT_GRAPHICS —图形显示中有些已知的问题;同样,这可能是一些很明显的问题(比如没有显示)或者很细小的问题(比如不正确的优先级或其它问题)
GAME_NO_COCKTAIL —游戏支持鸡尾酒模式,但可能是不知道如何使能这种模式,或者驱动作者太懒了,还不想在视频系统中支持它。
GAME_NO_SOUND —游戏没有声音;常是因为使用了未知的声音硬件。
GAME_IMPERFECT_SOUND —游戏的声音模拟有些不正确;可能是缺少一些声音芯片的模拟,或者少了一些过滤器,或者其它的声音的问题。
GAME_SUPPORTS_SAVE —驱动已经从代码级经过难,并已经通过测试支持保存状态;如果你从命令行使用-autosave选项,带了这个标识的游戏在你退出时就会自动保存,当下次你再运行时,就会自动从保存的状态中恢复,从那儿开始游戏。
NOT_A_DRIVER —这个游戏表项不是一个游戏,BIOS表项就可以像父驱动一样使一组游戏都共享这个核心BIOS。

MAME的CPU调度(译)

  有好些地方看不懂,晕,凑合吧,以后如果明白了,再来改吧!更让我郁闷的是,自己的英语水平真是不敢恭维啊!其实Aaron Giles已经写得很简单了,几乎没有长句!唉!

MAME的CPU调度
by Aaron Giles

第1部分
  MAME中多CPU游戏是以循环的方式进行调度的。循环执行的顺便在机器驱动中根据CPU的顺便严格定义。没有办法改变这个顺序,然而,你可以通过挂起CPU或调整调度粒度来影响调度。那部分内容会在第2部分讨论。
  调度器依靠定时器系统工作,定时器系统知道什么时候下一个定时器被调度。所有调度都是在定时器被触发时发生。类似的,当CPU运行时,定时器从来不被触发。这点很重要。
  调度器查询定时器系统,找出什么时候下一个定时器被触发。然后它轮循每个CPU,计算CPU需要多少个时钟周期才会到达那个时刻,再运行CPU那么多个时钟周期。当CPU执行完后,CPU核心会返回实际上执行了多少个时钟周期。这些信息被累计,并转换为“本地CPU时间”,这是为了统计是否多用了CPU核心时间,或者过早退出CPU核心。
  例如我们说CPU #0是14MHz,CPU #1是2MHz。我们还说我们从0时刻(对两个CPU来说都是本地时间为0)开始,有个定时器在150ms后触发(time=0.000150)。
  循环逻辑会启动CPU #0,计算它需要多少时钟周期才能达到0.000150时刻。我们从0时刻开始,我们至少需要运行150µs。0.000150 × 14,000,000 = 2100时钟周期。它就调用CPU运行函数执行2100个时钟周期;当函数返回,它知道多少个时钟周期实际被执行了。我们假设它返回它实际运行了2112个时钟周期。(CPU核心一般会过量使用,因为很多指令会占用多于1个时钟周期。)2112个时钟周期转换为CPU #0的本地CPU时间是0.000150857(2112/14,000,000)。
  现在轮到CPU #1运行。0.000150 × 2,000,000 = 300时钟周期。所以我们调用执行(300个时钟周期)并返回300个时钟周期。CPU #1的本地时间现在是0.000150。
  现在,两个CPU都已经执行过了,它们的本地时间都大于或等于目标时间0.000150。所以调度器调用定时器系统让它处理定时器。完成后,它再次查询什么时候下一个定时器会触发。假设它很精确地在150µs后触发,time=0.000300。
  再回到调度器,我们再次启动循环。CPU #0需要运行(0.000300 – 0.000150857) × 14,000,000 = 2088时钟周期到达本地时间0.300。注意我们统计了上次执行过的所有时钟周期数。所以我们调用执行(2088),然后返回,是2091。这时本地时间就是0.000150857 + 0.000149357 = 0.000300214。
  轮到CPU #1。还是(0.000300 – 0.000150) × 2,000,000 = 300时钟周期。调用执行(300),返回302个时钟周期。记录CPU #1的本地时间是0.000150 + 0.000151 = 0.000301.
  再一次,两个CPU都已执行了,它们的本地时间都大于或等于0.000300,所以我们联系定时器系统让它运行它的定时器。这个过程贯穿了整个系统的执行。
  这里有些事要注意。第一次循环后,CPU #0的本地时间稍微比CPU #1的本地时间提前一点。经过第二次循环后,刚好相反。因此你不能保证在任何时候一个CPU会比其它的是要提前点还是延后点。
  而且,需要记住的是每个CPU有它各自的本地时间。定时器系统也会有一个“全局时间”。全局时间一般是所有CPU本地时间中最小的那个。当调用定时器系统时使用哪个时间,取决于当前哪个CPU上下文是活动状态的。如果某CPU上下文是活动的(一般只有当CPU在运行时才是;例如在读/写回调函数),然后所有定时器操作都把这个“当前时间”作为CPU本地时间,统计当前时间片内CPU执行的所有时钟周期数。如果某CPU上下文不是活动状态(所有其它时刻;例如,在定时器回调中),这时“当前时间”就是全局时间。
  全局时间在每个时间片结束,调度器调用定时器系统处理定时器前被更新,而且全局时间可用来分派定时器。
  有很多内容这篇文章没提到的,包括提前退出,挂起CPU,自旋(spinning)和让步(yielding)。下一篇文章会讲到所有相关的这些细节如果适用到定时系统中。

第2部分
  文章的第1部分讲到了MAME在运行多CPU时使用的循环调度算法的基础知识。可以总结为:
  1. 决定什么时候下一个定时器被触发
  2. 轮循每个CPU:
    1) 计算这个时间和CPU本地时间的差值
    2) 执行(消耗)这段时间
    3) 统计被执行的时钟周期,并计算CPU本地时间
  3. 返回第1步
  现在你应该能预感到接下来的事情——注意第1步要求你做的。实际上MAME中的很多事件都是周期性的可预知的,所以这个工作应该是个很好的开始。
  然而有件很常用的事件是不可预知的,就是2个CPU间的通信。实际上,这是我把定时器系统添加到MAME中的第一个地方的一个主要原因。让我们看一个例子,如果没有同步,CPU间通信就会出错。
  回到前面那个例子,有CPU #0是14MHz,CPU #1是2MHz。我们知道有个定时器每150µs被触发一次,或者说是在时刻0.000150。所以我们开始执行CPU #0共2100个时钟周期。这时,在CPU #0上运行的代码决定发送个中断信号给CPU #1在第1500个时钟周期的时候(时间点=1500/14,000,000=0.000107143)。因为没有同步机制,中断信号发送过去(一般是设置一些CPU #1的上下文状态,来指示有中断)后,CPU #0继续执行直到时间片用完。当它完成后,像前面一样,它执行了2112个时钟周期,本地时间是0.000150857。
  现在是CPU #1第一次运行。因为它注意到它有个中断,所以它应该处理中断,并继续执行剩下的时间片。
那问题是什么呢?呃,CPU #0发送中断信号在本地时间0.000107143,但CPU #1在本地时间0(就是时间片刚开始)时处理中断。假定CPU #1是个声音处理CPU;结果就是可能音乐开始得早了点。更糟糕点的,假定CPU #1正忙于处理其它事情,那时就没有机会处理中断了。可能你已经改掉了代码,或改了状态,用一种比较糟糕的方式。
  可能不太容易注意到的是,定时器系统在创建了定时器后,大部分情况下会立马触发定时器。如果你曾经在MAME中看过timer_set(TIME_NOW,…),你就已经看到了对一个定时器的请求。因为定时器是同步的障碍。整个调度算法是基于执行所有CPU直到下一个定时器触发。创建一个定时器,就是在请求调度器和定时器系统协同工作,让CPU运行到当前预定的时间直到调用你提供给它的函数。(译注:这句没看懂…)
  这又如何对上面提到的中断信号问题有所帮助呢?假定当CPU #0决定发送中断信号给CPU #1,它并不立即发送信号。它建立了一个定时器让它触发。从当前时间0.000107143才发送中断,就是定时器被触发时。但是定时器并不会触发,直到循环序列结束,而只有当所有CPU都到达那个时间才会。所以如果我们在循环结束时,它仍不会触发,因为CPU #1还在时刻0。
  这里我们有另外一个主题。CPU #0创建了个定时器,在0.000107143时刻触发,但它仍有600个时钟周期需要在时间片内执行完。我们可以让它运行完,在0.000150857时刻。但是当需要执行CPU #1,我们只有在定时器被触发时(0.000150857时刻)才会执行,这时2个CPU就完全不同步了。比起让这样的事情发生,还不如每当在某时间片内创建一个新的定时器,在时间片被用完前它就被调度触发,定时器系统和调度器协同工作中止那个CPU的执行。一般,这意味着CPU会在当前指令执行完后停止执行,并把控制权返回给调度器。
  在这种情况下,从CPU #0在该时间片内创建定时器起,从该定时器在该时间片内被调度触发起,CPU #0被中止执行,但仍有600个时钟周期剩下。调度器知道CPU #0只执行了它要求的2100个时钟周期中的1500个,并更新CPU #0的本地时间为1500 / 14,000,000 = 0.000107143。
  现在CPU #1有机会执行了。0.000107143 × 2,000,000 = 215时钟周期,所以我们执行CPU #1那么久。完成后,可能它实际执行了217个时钟周期,所以它的本地时间是0.0001085。
  全局时间被更新为所有CPU时间中最小的那个值,这里是0.000107143,并且定时器系统被要求处理定时器。这时,我们设置的该定时器的回调函数被调用,在这个回调函数中我们发送中断信号给CPU #1。
  返回到调度器,我们看一下之后仍有一个定时器被设定在0.000150时刻触发,所以计算一下CPU #0(600)的时钟周期并执行。CPU #0执行完后,我们切换到CPU #1开始执行。CPU #1现在有一个待处理的中断,但它已经在正确(或接近的,在0.0001085时刻)的本地时间接收到了中断信号,这样2个CPU间的同步就实现了。
  当CPU #1试图回访CPU #0时又发生了什么呢?请看第3部分,讲到了这个复杂主题的细节。

第3部分
  文章第2部分讨论了调度器和定时器间的协作使得事件在多CPU间进行同步。简单说来,当一个CPU需要发送事件给另一个CPU,它创建一个定时器,使得所有CPU一直执行到那个时刻。然后,定时器回调函数就被触发,事件就能安全地精确地发送过去。
  这个方案中的一个大问题是,它只有到目标CPU有个小于当前时间的本地时间时才会正常工作。我们上面看到的例子中,CPU #0发送中断信号给CPU #1。循环顺序中使得CPU #0先被执行,我们就已经保证了当CPU #0想发送信号时,它的本地时间会大于CPU #1的本地时间了。
  但是,当CPU #1想发回信号给CPU #0时,又发生了什么呢?
  采用这个天真的方案,回到我们前面那个例子,假设我们有CPU #0是14MHz,CPU #1是2MHz。有个被调度的定时器是设定在150µs后被触发,即0.000150时刻。所以我们开始执行CPU #0共2100个时钟周期,它用完时间片后,返回2112个时钟周期,意味着它的本地时间为0.000150857。
  现在我们执行CPU #1的时间片,根据第1部分中的例子,运行300个时钟周期。然而,这次在运行到第50个时钟周期时,CPU #1决定发送信号给CPU #0。所以,不是立即发送信号,而是创建个定时器,设定在50 / 2,000,000 = 0.000025时刻触发。这也有个副作用,就是中止CPU #1的执行,结束当前循环。
  这时,调度器通知定时器系统,指示全局时间需要更新为所有CPU本地时间中最小值,即0.000025。定时器系统知道后,就有个定时器被调度设定在0.000025时被触发;在回调函数中,我们就发送信号给CPU #0。
  但是等一下,CPU #0的本地时间不是已经在0.000150857时用完了么?对!这就是说,这个信号比它应该到达的时间(0.000150857 – 0.000025 = 0.000125857秒, 或1762 CPU时钟周期,太晚了)来得太迟了,我们又失去了同步。
  那我们怎么解决这个问题呢?我们需要交换执行顺序,使得调度器先执行CPU #1。但为了那样做,我们需要再一次进行预测。如果2个CPU间的通信细节已经充分理解了,并遵守这些严格的规则,应该是可以使这类调度工作正常的。到现在为止,仍然没有一个好的方案使得像这样不按顺序地运行。所以循环顺序是固定的。
  传统的在MAME中(实际上,在我写定时器系统和调度器前)这种CPU间的通信问题已经解决了,用来增加CPU间的插入因子。插入因子是一个数字,用于指示MAME中配置的为了重同步CPU间每一个视频帧需要的运行时间的频率。(这是在视频帧中指定的,因为所有在MAME中的定时都是根据已有的定时器相关的视频帧来完成的)。(译注:这段没懂…)
  插入因子在MAME的机器驱动结构中指定为全局的值。它通过计算每秒需要多少次同步(例如,某60Hz运行的游戏,插入因子为100,则暗示着每秒需要6000次同步),并简单地创建一个定时器,带一个NULL回调函数,以那个速率触发,来隐含地实现。不需要回调函数是因为不需要做任何动作;因为起码每次这个定时器的触发会使得所有CPU就在那样的速率下被同步。
  回到我们的例子,假定我们的游戏以60Hz的帧速率运行,我们使插入因子为500。那就需要确保每秒500 × 60 = 30,000次同步,或者说每0.000033333秒一次同步。这就意味着需要一个定时器设定为每0.000033333秒被触发。让我们重新评估一下发生了什么,而且为什么插入因子使一些事件得到了改善。
  记住,定时器系统指出什么时候第一个定时器被触发。前面,我们第一个定时器设定在0.000150时触发,但现在我们有了这个插入因子定时器,能更早地在0.000033333时被触发,所以决定了哪个会是第一个时间片。0.000033333 × 14,000,000 = 467时钟周期,所以我们执行CPU #0共467个时钟周期。假定它返回执行了470个时钟周期。就把本地时间更新为0.000033571。
  现在我们执行CPU #1的时间片,用新的定时器执行67个时钟周期。再一次,执行了50了时钟周期后,CPU #1决定发送个信号给CPU #0。我们创建一个定时器让它马上触发,在0.000025时刻。像以前那样,这会结束循环,并通知定时器系统。
  然而,这个时候CPU #0在0.000033571时刻收到信号,只迟了0.000008571秒或120个CPU时钟周期。相比1762个时钟周期,这是个大改进,但它仍然不够完美。通过提高插入因子,只要我们愿意,我们可以使得它做得更好。实际上,插入因子确定了从一个CPU发送信号到另一个CPU的最差情况的延迟。
  我们可以做得更好一点么?嗯,实际上,可以。如果我们创建一个定时器,以每秒2,000,000次(第2快的CPU的时钟速率)的频率运行,我们可以得到尽可能接近完美的插入因子。CPU #0从来不会执行时间长于CPU #1上的一个时钟周期,所以当CPU #1发送一个信号,它会在这个运行于CPU #1上的特定的时钟周期结束的同时触发CPU #0。
  设置高的插入因子,如在游戏的机器驱动中设置插入因子为33333。这样试一下,东东变得很慢很慢。这是因为在2个CPU间切换上下文是有代价的,当你试图创建一个定时器运行得那么频繁,你会花掉你所有的时间用于上下文切换,只有一占时间用于实际执行其它的代码。
  完美的解决方案是检测什么时候看起来CPU #1需要发送信号给CPU #0,并临时那样提高插入因子,至少那么一会儿,就可以保证同步了。这是cpu_boost_interleave函数调用的目的。它接受2个参数。第1个参数是定时器触发的频率——注意它并不在视频帧里指定,不是个绝对值。你可以传个0过去,这样系统会自动使用第2快的CPU的时钟速率,就能实现完美的同步。第2个参数指定你需要保留这个级别的插入因子多久(以秒计)。一般你不会需要它太久。
  大多数情况,MAME的游戏创建并使主CPU最先运行,并且在循环顺序中,通信是从先运行的CPU到后运行的CPU。插入因子的使用是因为从CPU需要发送回一些信息,而主CPU正好在那里等待响应。
  记住,没有一个系统是完美的,但它们已经成功地在几千种不同的平台上使用了。在第4部分,我会把这些内容连同一点关于自旋、让步和触发器一起穿起来。

第4部分
  第3部分讨论了如何解决从一个稍迟运行(在一个循环顺序中被稍迟调度)的CPU发送信号到稍早运行的CPU时调度通信问题。因为MAME不支持在循环中改变CPU运行顺序,所以唯一的改善时延的办法是提高插入因子,全局地或临时地。
  在CPU执行过程中改变调度,有2种方法。cpu_yield() 和cpu_spin()调用。过去,这2个方法都经常被滥用,因为缺少对它们实际如何工作的理解,现在是时候使这成为历史了。
  cpu_yield()做的是使当前CPU时间片提前结束。它不影响系统中的其它CPU。我们来看一个例子。
  我们再次假定有CPU #0是14MHz,CPU #1是2MHz。有个被调度的定时器设定在0.000150时刻。我们开始执行CPU #0共2100个时钟周期,但这次,在它时间片一半时(如,在第1250个时钟周期时),有个它的读/写处理函数调用了cpu_yield()。这会中止当前时间片,把CPU #0的本地时间设置为0.000089286。
  轮到CPU #1执行。一般它会执行整个时间片直到0.000150时刻;然而,因为前面的CPU过早地停止了,所以调度器只调度到前一个CPU停止执行的时刻。就是0.000089286 × 2,000,000 = 179时钟周期。假定它执行了180个时钟周期,本地时间就是0.00009。
  这时,我们告诉定时器系统全局时间是0.000089286,但是在0.000150时刻前,没有定时器会被触发,所以什么也不会发生,循环继续。
  到目前为止,所有的事都很好,但这里有个不是很明显的副作用:当cpu_yield()后,CPU会不再被调度,直到下次插入因子定时器被触发。(回忆一下上一部分,插入因子值决定了定时器以一个要求的插入因子速率被调度)就是说以后的调度周期中,CPU #0就不再配合了,直到插入因子定时器被触发,并再次允许它进行调度。
  实际上,cpu_yield()属于一组同步调用:cpu_yielduntil_trigger(), cpu_yielduntil_int(), cpu_yielduntil_time()。所有这些函数都跟cpu_yield()有相同的基本操作——它们停止当前CPU的执行,把它从调度中移除——但每一个都指定了一个不同的事件能使得CPU重要被调度。这个不被调度的CPU有一些有趣的结果。
  再看一下前面的例子,结果这些知识。为了让事情变得易于解释,我们改变情况,不调用cpu_yield(),而是调用cpu_yielduntil_time(0.00005)。这会告诉调度器不要放弃时间片,但在50ms后从调度体中移除。所以:
  CPU #0像以前那样执行,调用cpu_yielduntil_time(0.00005)后在0.000089286时刻结束时间片。中止了时间片,内部会创建一个定时器在当前本地时间(0.000089286)加0.00005秒时触发,或者说在0.000139286时刻。
  然后CPU #1执行,直到前一个CPU停止执行的时刻,即0.000089286时刻。同样,是179个时钟周期,所以我们运行CPU,它返回180个时钟周期,它的本地时间就是0.00009。
  调用定时器系统,但没有任何可以触发的,所以循环结束了。这次当我们询问定时器系统下一个定时器什么时候触发,它返回0.000139286,因为定时器由cpu_yielduntil_time()创建了。
  循环再次开始,由于CPU #0彻底从调度中移除,我们跳到CPU #1。计算时钟周期((0.000139286 –0.00009)×2,000,000)=99时钟周期。我们运行CPU #1这么多个时钟周期,返回得到101个时钟周期,把它的本地时间改为0.0001405,循环结束。
  这时,cpu_yielduntil_time()创建的定时器被触发,它使得CPU #0在下次循环中可以被调度。然后,注意2个CPU已经失去同步了。CPU #0仍然在本地时间0.000089286,CPU #1已经是0.0001405。而有个定时器设定在0.000150时触发,所以会在下次循环中使用。
  对于CPU #0,下次会执行0.000150 - 0.000089286 = 0.000060714秒,即850个时钟周期,这远远长于正常所需,因为它要一直多执行很多个时钟周期,直到那个目标时间为止。另一方面CPU #1几乎已经是在目标时间了,只需要执行19个时钟周期就到目标时间了。
  这么大的这种方式使用cpu_yielduntil_time()的副作用是你使得让步(yield)CPU在调度处理的后面了。重复使用让步调用会使得CPU越来越延后,直到导致一些奇怪的行为。例如因为CPU #0在CPU #1后的很大一段时间后才开始执行,如果它设置了一个定时器,这个定时器对于CPU #1可能就已经是在过去时了。
  类同的cpu_yield()调用是cpu_spin()调用。这些调用精确地像它们的搭档一样操作,除了自旋CPU的本地时间在每个时间片结束时是自动逼近当前全局时间的。就是说,CPU不会延后;它实际上以某种方法“烧”掉了所有剩下的时钟周期,并且自旋CPU永远不会再需要它们。
  让人迷惑的是:让步是一种同步的形式。自旋是一种hack。虽然它们看起来有点相似,但它们是用于2种不同的目的。
  有2个正统的理由来使用自旋,这是为了给那些正做着无用功的等待某些事件的游戏添加自旋循环优化。如果事件在以后一些已知的时刻会发生,就使用cpu_spinuntil_time()。如果事件是中断,就使用cpu_spinuntil_int()。如果事件是一些其它的外部驱动因子,使用cpu_spinuntil_trigger(),并在事件发生时调用cpu_trigger()。
  如果你发现你使用cpu_spin()调用来进行同步,你正屏蔽了一些其它的模拟器系统的问题。
  最后,关于触发器的一句话。触发䍛是一种简单的信号机制,用于指示一个指定的事件已经发生了。一个触发器由一个整数标记,这个整数是一个随机值,由创建/使用触发器的人选定。触发器标识没有冲突检测或分配手段(尽管可能它们需要)。为了通知触发器,你可以简单地调用cpu_trigger()带一个触发器标识。触发器大多数时候跟让步和自旋调用一起使用,让步和自旋阻塞了CPU的执行,触发器为CPU解除阻塞。没有更多的东西了。
  这里总结了我对MAME中CPU调度的讨论。如果有什么问题,我可以在稍后的第5部分回答。感谢一直读到这里——我知道,这里很多内容很难得继续跟下来。

2007-01-07

去华神吃了一顿

  早上9点多时就被电话吵醒了,因为要来换抽水马桶。到了1点多的时候,很无聊,给小丫头发短信问她在干吗,然后决定去逛下街,就约好地点。比小丫头早到了大半个小时,说是堵死了,其实已经都到了,只是她不认识路。两个人逛了一会儿茂业,觉得买不起,于是走到曼哈,有些东西确实要便宜点。小丫头买了两件连衣裙,总共才花了315元,难得有这么便宜的女装哦!之后她也不想再花钱了,也差不多刚好到吃饭时间了。刚好找到这个机会有人一起去吃火锅,就跑去华神吃了一顿,浪费了一个白菜。2个人吃了142元。小丫头说,每次都是我请她吃,下次她请我,还说欠了我好多钱,哈哈。其实我就想找机会去吃顿重庆味的火锅,叫了雨烟好多次,均未果。 小丫头说我的blog写的都是方块,或者程序。我说偶尔也有写生活的呀,她说真的是偶尔才有哦。呵呵!

2007-01-05

MAME的资源管理(译)

  打算研究一下MAME,所以先研究一下Aaron Giles写的几篇文章,英文的看着不是很舒服,所以草草地翻译了一下。这次放出第一篇《Resource Management in MAME》,原文在这里。

MAME的资源管理
by Aaron Giles

  如果你在写一个驱动,或者给驱动添加状态保存功能,这时了解MAME是如何管理资源的就很重要。
  以前,MAME根本不跟踪资源的使用情况的:如果你调用了malloc(),你就需要free();如果你调用了timer_alloc(),就需要调用timer_free()等等。因为标准命令行版本的MAME一次只运行一个游戏,所以当你退出时即使留下一堆已分配的资源也没有什么实际影响。当然,那些移植版本如MacMAME―允许你在不退出的情况下停止一个游戏开始另一个游戏―会因为内存不足或其它资源分配后却不回收等问题引起程序崩溃。
  在内核中使用优秀的资源管理有很明显的理由:它只使用不多的代码,并且不会很快地改变。而,在几百个驱动中用好资源管理,简直是个噩梦。驱动通过提供回调函数hook住主系统。下面列表中是一些通用驱动回调函数:
 DRIVER_INIT
 VIDEO_START/VIDEO_STOP
 MACHINE_INIT/MACHINE_STOP
  大多数的驱动在MACHINE_INIT和VIDEO_START中分配资源,并且理论上假设它们也会在MACHINE_STOP和VIDEO_STOP回调函数中释放这些资源。实际上,这并不是一定的,这让人很头疼。而且,一些系统会在DRIVER_INIT中分配内存,但却没有比较合适的地方可以释放这些内存。我假设我们应该添加个DRIVER_STOP回调函数,但是最后却是另外一个不同的方案被采纳了。
  如果你从逻辑上考虑一下,99%的情况下,你会希望在MACHINE_STOP释放在MACHINE_INIT中分配的资源。类似的,你想要在VIDEO_STOP中释放所有在VIDEO_START中分配的资源。所以,相比要求每个驱动去编写代码完成释放资源,为什么不由内核来简单地跟踪资源分配,并在适当的时候自动释放呢?这样确实可以工作得很好。
  如果你看一下这些回调函数的调用顺序,它应该像这样(用伪码表示):
init
{
DRIVER_INIT
VIDEO_START
reset:
{
MACHINE_INIT
run-the-game-until-exit-or-reset
MACHINE_STOP
}
if we-exited-due-to-reset then
loop back to reset:
VIDEO_STOP
}
exit

  你应该会注意到我在上面的伪码中使用了一组花括号。这会给你一点提示,应该怎样自动跟踪资源的分配-这很像在C/C++中使用局部变量。当离开这个作用域,所有被跟踪的资源在该作用域中被分配的应该自动回收。当你运行到MACHINE_STOP和VIDEO_STOP间的闭花括号,内核会释放所有从前面的开花括号以来分配的资源,包括所有在MACHINE_INIT中分配的东西,同样也会回收内核在那段时间分配的资源。类似的,当你运行到第二个闭花括号时,所有被跟踪的在DRIVER_INIT和VIDEO_START中分配的资源都会被释放。
请注意我说的被跟踪的资源。只有有些资源是被跟踪的,另外一些需要显式释放。例如定时器,总是被跟踪的。任何时候你在MACHINE_INIT中分配了一个定时器,它会在你退出内部作用域时被释放。实际上,通过这种方式来跟踪,定时器是不需要显式调用timer_free(),你需要依赖于资源跟踪来处理。
  最明显的不被自动跟踪的资源是内存。原因是当调用malloc()后,当离开该作用域时还是有可能需要保留该内存不被释放。你可通过使用auto_malloc()替换malloc(),手动使MAME跟踪内存。auto_malloc()像malloc()那样工作除了它会在离开当前作用域时自动释放。这里你必须小心点,因为如果你在MACHINE_INIT中使用了auto_malloc()并保存了该指针在一个全局变量中,当游戏重启时MACHINE_INIT会被重新调用,那块内存会被释放。你的全局变量仍然是相同的指针值,但内存已经不存在了。正确的作法是不要使用保存在全局指针中的值,而只要简单地每次在MACHINE_INIT回调函数中都调用auto_malloc()就可以了。
  另一种通用资源需要被手动跟踪的是位图。有个叫auto_bitmap_alloc()的函数可以创建位图,并在离开当前作用域时回收。
  最后一种被跟踪的“资源”是新近才加的:保存状态注册。根据最近的系统的修改,你可以只注册数据到需要被保存到外部作用域(DRIVER_INIT/VIDEO_START)。这是因为如果你点击F3重启游戏,MACHINE_INIT会被调用多次,而保存状态系统不能处理重复注册(我知道,这并不难,但有其它一些更复杂的东西)。为了管理这些,当你退出一个作用域,所有你在该作用域内注册的保存的状态数据会丢失,意味着你需要再注册一次。像大多数情况下,你在MACHINE_INIT回调函数中注册,当游戏重启后你会被再一次调用MACHINE_INIT,这并不是说你需要做什么特别的,只要简单地像什么事都没发生过一样注册一遍,它就能工作得很好。
  在之后的文章里,我会讲到关于保存状态的系统的更多细节,所以如果上面这些听起来有点迷糊,很快就能得到更多的认识。

2007-01-04

对的时间遇上错的人

  沉重地叹息,孤独地忧伤,无奈地哀愁,心慌意乱地继续找寻……

2007-01-03

元旦就这样过去了

  三天的假期感觉好短哦。
  1号睡得多了点,下午跑到华强北买衣服去了,真是贵呀,实在不好找。后来还是在茂业买个件外套,去买了个洗衣袋。买了东西就没事做了,发短信问一下雨烟在干吗,说在买手机,于是跑去找他们。然后她和小于陪我去曼哈打了个耳洞,¥44呢,还是人家算错钱了,哈哈。心里感觉怪怪的,就这么一下,身上就多了个洞。之后3个人走到巴蜀风去吃了一顿,也不是很贵,三个人¥102。
  2号早上7点多就醒了,因为心里总是惦记着小思宇说早上要过来,就翻来覆去不怎么敢睡了,结果本来说8点就过来的人,一直到8点45过后才给我发短信说才出门,晕,起床收拾了一下,等她过来。然后跟她一起出去,到小区对面吃了早点。好像我跟她都没一起吃过早点哦,以前大队培训的时候,她总是不吃早点,后来虽然一起住,也是到各自所在的区域的食堂吃的,周末一般都是睡过去了,起来后最多找些零食来充饥一下,呵呵。送走小思宇,我便坐317跑到笔架山公园,和同事们爬了山,下来打了一下午牌。之后转去华强北吃自助烤肉,从没去过那儿,在振华路口,叫酋长的地方。一边吃一边玩杀人游戏。居然一把杀手都没当过,不过我自己都觉得奇怪,怎么在猜杀手的时候,我的判断力会这么好,以前跟小思宇他们那帮人一起玩的时候,没这么准过呀。不过有点气人的是,猫猫和雨烟两个家伙,就知道瞎起哄。
  3号,没什么事做了,呆在屋子里,看《天使心》,就是《城市猎人》的续集,还是比较合我口味的,看了一天!今天是妈妈的阴历生日哟,妈妈生日快乐!

2007-01-01

2007年的第一篇

  2007年到喽,第一天,发短信问候祝福,爸爸妈妈应该都早就睡了吧,同事朋友们该干啥干啥呢,大家新年快乐呀!
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。餮饕餮。。
。。。。。。饕餮饕。。餮饕餮饕。。餮饕餮饕餮。。
。。。。。。。餮饕。饕餮饕餮饕餮饕餮饕。。餮饕。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。。。。。。。。
。。。餮饕餮。。饕餮饕餮。餮饕餮。。。。。。。。
。。。。饕餮饕。饕餮饕。。餮饕餮。。。。。。。。
。。。。饕餮饕。饕餮。。。餮饕餮。。。。。。。。
。。。。。餮饕餮饕餮。餮饕餮饕餮。。。。饕餮饕。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮
。。。。。。饕餮饕。。。。餮饕餮。。饕餮。。。。
。。。。。。饕餮饕。。。。餮饕餮。。饕餮。。。。
。。。。。。饕餮饕。饕餮饕餮饕餮。。饕餮。。。。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。。饕餮。。。。
。。。。饕餮饕餮饕。。。。餮饕餮。。饕餮。。。。
。。。餮饕餮饕餮饕餮饕餮。餮饕餮。。饕餮。。。。
。。。餮饕餮饕餮饕餮饕餮饕餮饕。。。饕餮。。。。
。。饕餮饕。饕餮饕。饕餮饕餮饕。。。饕餮。。。。
。。饕餮。。饕餮饕。。。饕餮饕。。。饕餮。。。。
。餮饕。。。饕餮饕。。餮饕餮。。。。饕餮。。。。
。餮饕餮饕餮饕餮饕。饕餮饕。。。。。饕餮。。。。
。。。。。。饕餮。餮饕餮。。。。。。饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。。。。。。。。餮饕餮。。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。。饕餮。。。。。餮饕餮。。。。。。。。。。
。。。餮饕餮。。。。。餮饕餮。。。。。。。。。。
。。饕餮饕。。。。。。餮饕餮。。。。。。。。。。
。餮饕餮。。。。。。。餮饕餮。。。。饕餮。。。。
饕餮饕。饕餮饕。。。。餮饕餮。。。餮饕餮饕。。。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。。。
。。。。饕餮饕。。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。。餮饕餮。。。。。餮饕餮饕。
饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。饕。。。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。饕餮饕。。。。。。。。。
。。。。饕餮饕。。。。。饕餮饕。。。。。。。。。
。。。。饕餮饕。。。。。饕餮饕。。。饕餮。。。。
。。。。饕餮饕。饕餮饕餮饕餮饕餮饕餮饕餮饕。。。
。。。。饕餮饕餮。。。。饕餮饕。。。饕餮。。。。
。。饕餮饕餮饕餮饕餮。。饕餮饕。。。饕餮。。。。
。。饕餮饕餮饕餮饕餮。。饕餮饕。。。饕餮。。。。
。餮饕餮饕餮饕餮饕。。。饕餮饕。。。饕餮。。。。
。餮饕餮饕餮饕。。。。。饕餮饕。。。饕餮。。。。
。餮饕。饕餮饕。。。。。饕餮饕。。。饕餮饕餮饕。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。。饕餮饕。。。。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。餮饕餮。餮饕。。。。。。。
。。。。饕餮饕。。。。餮饕。。餮饕餮。。。。。。
。。。。饕餮饕。。。饕餮饕。。餮饕餮。。。。。。
。。。。饕餮饕。。餮饕餮。。。。饕餮饕。。。。。
。。。。饕餮饕。。餮饕。。。。。。餮饕餮饕。。。
。。。。饕餮饕。饕餮。。。。。。。。饕餮饕餮饕。
。。。。饕餮饕餮饕。。。。。。。。。。餮饕餮饕。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。饕餮饕。。。。。
。。。。。餮饕。。。。。饕餮饕餮饕餮饕餮。。。。
。。。。饕餮饕餮饕餮饕餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕。。。。。。。。。
。。。。饕餮饕。。。。。饕餮。。。。。。。。。。
。。。。饕餮饕。。。。。饕餮。。。。。。。。。。
。。。。饕餮饕。。。。。饕餮。。。。。。。。。。
。。。。饕餮饕。。。。。饕餮。。。。。餮饕餮。。
。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。。饕餮。。。。。。饕餮。。。。。。。。。。
。。。。。。。。。。。。饕餮。。。。。。。。。。
。。。。。。。餮饕餮。。饕餮。餮饕餮。。。。。。
。。。。。。饕餮饕餮。。饕餮。。饕餮饕。。。。。
。。。。。餮饕餮。。。。饕餮。。。餮饕餮。。。。
。。。。饕餮饕。。。。。饕餮。。。。饕餮饕。。。
。。。餮饕餮。。。。。。饕餮。。。。饕餮饕餮。。
。。饕餮饕。。。。。。。饕餮。。。。。餮饕餮。。
。餮饕餮。。。。。。。餮饕餮。。。。。餮饕。。。
。餮饕。。。。。饕餮饕餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮。。。。。。。。。。。。。。。。。。
。。饕餮饕。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕。。。。。。。。餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。饕餮。。
。。。。。餮饕。。。。。。。。。。。。餮饕餮饕。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。饕。
。。。。。。。。。。。。饕餮饕餮。。。。。。。。
。。。。。。。。。。。。饕餮饕。。餮饕餮。。。。
。。。。饕餮饕。。。。餮饕餮。。。餮饕餮饕。。。
。餮饕餮饕餮饕餮。。饕餮饕。。。饕餮饕餮。。。。
。。。。饕餮饕。。餮饕餮饕餮饕餮饕餮饕。。。。。
。。。。饕餮饕。。。饕餮。。。餮饕餮。。饕。。。
。。。。饕餮饕。。。。。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。。。。。。。饕餮。。饕餮饕餮饕。
。。。。饕餮饕。。。。。。餮饕。。。饕餮饕。。。
。。。。饕餮饕。饕餮。餮饕餮。。。餮饕餮。。。。
。。。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。。。。
。。。。饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。
。。。。饕餮饕餮。。。。。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。。。。饕餮饕。。。。餮饕餮饕。
。。。。。餮饕。。。饕餮饕餮。。。。。。饕餮饕。
。。。。。。。。饕餮饕餮。。。。。。。。。餮饕。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。餮饕。。。
。。。。。。。。。。。。。。。餮饕餮饕餮饕。。。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕。饕餮。。
。。。餮饕餮饕餮饕。饕餮。。。。。餮饕餮。。。。
。。。。。。饕餮。。。餮饕餮。。饕餮饕餮。。。。
。。。。。。饕餮饕。。餮饕餮。。饕餮。。。。。。
。。。。。。。餮饕。。。饕餮。餮饕。。。。。。。
。。。餮饕。。。。。。。。。。餮饕。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。。。。餮饕餮。。。。。。。餮饕。。。
。餮饕餮。。。。。餮饕餮。。。。。。饕餮。。。。
。。。。。。。。。餮饕。。。。。。餮饕餮饕。。。
。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。。。
。。。。。。。。饕餮饕。。。。。。餮饕。。。。。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮。。。。
。。。。。。。餮饕餮饕餮。。。餮饕餮饕。。。。。
。。。。。。。餮饕。饕餮。。饕餮饕餮。。。。。。
。。。。。。饕餮饕。。餮饕餮饕餮饕。。。。。。。
。。。。。餮饕餮。。。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮饕。。。。。。。
。。。餮饕。。。。餮饕餮饕。。餮饕餮饕餮饕餮饕餮
。餮饕餮饕餮饕餮饕餮。。。。。。。。饕餮饕餮。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。。餮饕餮。。。。。。饕餮饕餮。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕。。。。。。餮饕餮。。。。。。。。
。。饕餮饕餮饕餮饕餮饕餮。餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。。。饕餮饕。饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。餮饕餮。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮。。饕餮饕。。。
。。饕餮饕。。。饕餮饕。。。饕餮饕餮饕餮饕。。。
。。饕餮。。。。饕餮。。。。。。。餮饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。饕餮饕餮。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕餮。餮饕餮饕。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。饕餮饕。。。。。。餮饕餮饕。
。。。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。餮饕餮饕餮。餮饕餮。。饕餮。。。餮饕。。。
。。。餮饕餮饕餮。餮饕。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕。饕餮。。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕餮饕餮饕餮。。饕餮饕。。。。。。。
。餮饕。饕餮饕。。。饕餮饕餮饕餮饕餮饕。。。。。
饕餮饕。饕餮饕。。。饕餮饕。饕餮饕。饕餮。。。。
。。。。饕餮饕。。。饕餮饕。饕餮饕。饕餮饕。。。
。。。。饕餮饕。。餮饕餮。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。餮饕。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。饕餮饕。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕。饕餮。。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。餮饕餮。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。餮饕。饕餮饕。。。。。。。。。
。。。。。。。餮饕餮饕餮饕餮饕餮饕餮。。。。。。
。。。。饕餮饕餮饕。。餮饕餮饕。。餮饕餮。。。。
。。饕餮饕。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕。。。饕餮饕。。。。餮饕餮。。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。
。。。。。。饕餮饕。。。饕餮饕。。。饕。。。。。
。。。。。。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。。餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮。。。。
。。。。。餮饕餮饕餮。。。餮饕餮饕餮饕。。。。。
。餮饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。。。
。餮饕餮饕。饕餮饕。。。。餮饕餮饕。。。。。。。
。。。。。。饕餮饕。。。。餮饕餮饕。。。。餮饕。
。。。。。。饕餮饕。。。饕餮饕餮饕餮。。。餮饕。
。。。。。。饕餮饕。。餮饕餮。餮饕餮饕。。餮饕。
。。。。。。饕餮饕餮饕餮。。。。饕餮饕餮。餮饕。
。。。餮饕餮饕餮饕餮。。。。。。。餮饕餮饕餮饕。
。。。。。餮饕餮。。。。。。。。。。。餮饕餮饕餮
。。。。。。。。。。。。。。。。。。。。。。饕餮
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。饕餮。。。。
。。。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。。。
。。。。。餮饕。。。。餮饕餮。。。餮饕餮。。。。
。。。。饕餮饕。。。。餮饕餮。。。餮饕餮。。。。
。。。。饕餮。。。。。餮饕餮。。。餮饕餮。。。。
。。。餮饕餮饕餮。。。餮饕餮。。。餮饕。。。。。
。。。餮饕餮饕。。。。餮饕餮。。饕餮饕。。。。。
。。饕餮饕餮饕。。。。餮饕餮。。饕餮饕。饕餮饕。
。。饕餮饕餮饕。。。。餮饕餮。。饕餮饕餮饕餮饕餮
。餮饕。饕餮饕。。。。餮饕餮。。。。。。饕餮饕。
饕餮饕。饕餮饕。。。。餮饕餮。。。。。。饕餮饕。
。。。。饕餮饕。。。。餮饕。。。。。。。饕餮。。
。。。。饕餮饕。。。饕餮饕。。。。。。。饕餮。。
。。。。饕餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。饕餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。饕餮饕。。餮饕餮。。。。。。。餮饕餮。。
。。。。饕餮饕。。餮饕餮。。。。。。。餮饕餮。。
。。。。饕餮饕。饕餮饕。。。。餮饕。饕餮饕餮。。
。。。。饕餮饕。饕餮。。。。。餮饕餮饕餮饕。。。
。。。。饕餮饕餮饕。。。。。。。。餮饕餮。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕餮饕。。。。餮饕餮饕餮饕。。。。。
。。。。。餮饕餮。。。。。餮饕餮。餮饕餮。。。。
。。。。饕餮饕。。餮饕餮。餮饕餮。。饕餮饕。。。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮。。饕餮饕。。。
。。。餮饕餮。。。餮饕餮。餮饕餮。。。。饕餮。。
。。。餮饕餮饕餮。餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。饕餮饕餮饕。。餮饕餮饕。。。。餮饕。
。。饕餮饕餮饕餮饕餮饕。。餮饕餮饕餮。。。。。。
。餮饕。饕餮饕。饕餮。。。餮饕。饕餮。。。。。。
饕餮。。。餮饕餮饕餮。。饕餮饕。饕餮饕。。。。。
。。。。。餮饕餮饕。。。饕餮饕。饕餮饕。。。。。
。。。。。。饕餮饕。。餮饕餮。。。餮饕餮。。。。
。。。。。餮饕餮。。饕餮饕。。。。餮饕餮饕。。。
。。。。饕餮饕。。餮饕餮。。。。。。饕餮饕餮饕。
。。饕餮饕。。餮饕餮。。。。。。。。。。。。。。
。餮饕餮饕餮。餮饕。。。。餮。。。餮饕餮。。。。
。。。。饕餮。餮饕餮。。。餮饕餮。。饕餮饕。。。
。。。餮饕餮。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕餮。。饕餮饕。。。饕餮饕。。餮饕餮饕。
。餮饕餮饕。。。。餮饕。。。饕餮饕。。。饕餮。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。餮饕。。。
。。。。。。。。。。。。。。。餮饕餮饕餮饕。。。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕。饕餮。。
。。。餮饕餮饕餮饕。饕餮。。。。。餮饕餮。。。。
。。。。。。饕餮。。。餮饕餮。。饕餮饕餮。。。。
。。。。。。饕餮饕。。餮饕餮。。饕餮。。。。。。
。。。。。。。餮饕。。。饕餮。餮饕。。。。。。。
。。。餮饕。。。。。。。。。。餮饕。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。。。。餮饕餮。。。。。。。餮饕。。。
。餮饕餮。。。。。餮饕餮。。。。。。饕餮。。。。
。。。。。。。。。餮饕。。。。。。餮饕餮饕。。。
。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。。。
。。。。。。。。饕餮饕。。。。。。餮饕。。。。。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮。。。。
。。。。。。。餮饕餮饕餮。。。餮饕餮饕。。。。。
。。。。。。。餮饕。饕餮。。饕餮饕餮。。。。。。
。。。。。。饕餮饕。。餮饕餮饕餮饕。。。。。。。
。。。。。餮饕餮。。。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮饕。。。。。。。
。。。餮饕。。。。餮饕餮饕。。餮饕餮饕餮饕餮饕餮
。餮饕餮饕餮饕餮饕餮。。。。。。。。饕餮饕餮。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮。。。。。。。。。。。。。。。。。。
。。饕餮饕。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕。。。。。。。。餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。饕餮。。
。。。。。餮饕。。。。。。。。。。。。餮饕餮饕。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。饕。
。。。。。。。。。。。。饕餮饕餮。。。。。。。。
。。。。。。。。。。。。饕餮饕。。餮饕餮。。。。
。。。。饕餮饕。。。。餮饕餮。。。餮饕餮饕。。。
。餮饕餮饕餮饕餮。。饕餮饕。。。饕餮饕餮。。。。
。。。。饕餮饕。。餮饕餮饕餮饕餮饕餮饕。。。。。
。。。。饕餮饕。。。饕餮。。。餮饕餮。。饕。。。
。。。。饕餮饕。。。。。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。。。。。。。饕餮。。饕餮饕餮饕。
。。。。饕餮饕。。。。。。餮饕。。。饕餮饕。。。
。。。。饕餮饕。饕餮。餮饕餮。。。餮饕餮。。。。
。。。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。。。。
。。。。饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。
。。。。饕餮饕餮。。。。。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。。。。饕餮饕。。。。餮饕餮饕。
。。。。。餮饕。。。饕餮饕餮。。。。。。饕餮饕。
。。。。。。。。饕餮饕餮。。。。。。。。。餮饕。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。。饕餮饕。。。。。。。。。
。。。。。餮饕。。。。。饕餮饕。。。。。饕餮饕。
。。。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮
。餮饕餮。餮饕餮。。。餮饕餮饕。。。。。。。。。
。。饕餮饕餮饕餮。。饕餮饕餮。。。。。。。。。。
。。饕餮饕餮饕餮。。饕餮饕餮饕餮饕餮饕餮。。。。
。。饕餮。餮饕餮。餮饕餮饕。。。饕餮饕餮。。。。
。。。。。餮饕餮。餮饕餮饕餮。餮饕餮。。。。。。
。。。。。餮饕餮饕餮。。饕餮饕餮饕。。。。。。。
。。。餮饕餮饕餮饕。。。。餮饕餮。。。。。。。。
。餮饕餮饕餮饕餮。。。。饕餮饕餮饕。。。。。。。
。餮饕餮。餮饕。。。饕餮饕。。餮饕餮饕餮。。。。
。。。。饕餮饕。饕餮饕餮。。。。。餮饕餮饕餮饕餮
。。。。饕餮饕餮饕餮。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。。。。。
。。。。饕餮。。。。。。。。。餮饕。。。。。。。
。。。餮饕餮。。。餮饕餮饕。。。。。。。。。。。
。。饕餮饕。。。。。。。饕餮饕餮饕。。。。。。。
。。饕餮。。。。。。。。。。。餮饕餮饕。。。。。
。餮饕。。。。。。。。。。。。。饕餮饕。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。。餮饕餮。。。。。。饕餮饕餮。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕。。。。。。餮饕餮。。。。。。。。
。。饕餮饕餮饕餮饕餮饕餮。餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。。。饕餮饕。饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。餮饕餮。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮。。饕餮饕。。。
。。饕餮饕。。。饕餮饕。。。饕餮饕餮饕餮饕。。。
。。饕餮。。。。饕餮。。。。。。。餮饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。饕餮饕餮。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕餮。餮饕餮饕。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。饕餮饕。。。。。。餮饕餮饕。
。。。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。餮饕餮饕餮。餮饕餮。。饕餮。。。餮饕。。。
。。。餮饕餮饕餮。餮饕。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕。饕餮。。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕餮饕餮饕餮。。饕餮饕。。。。。。。
。餮饕。饕餮饕。。。饕餮饕餮饕餮饕餮饕。。。。。
饕餮饕。饕餮饕。。。饕餮饕。饕餮饕。饕餮。。。。
。。。。饕餮饕。。。饕餮饕。饕餮饕。饕餮饕。。。
。。。。饕餮饕。。餮饕餮。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。餮饕。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。饕餮饕。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕。饕餮。。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。餮饕餮。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。餮饕。饕餮饕。。。。。。。。。
。。。。。。。餮饕餮饕餮饕餮饕餮饕餮。。。。。。
。。。。饕餮饕餮饕。。餮饕餮饕。。餮饕餮。。。。
。。饕餮饕。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕。。。饕餮饕。。。。餮饕餮。。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。
。。。。。。饕餮饕。。。饕餮饕。。。饕。。。。。
。。。。。。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。。餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮。。。。
。。。。。餮饕餮饕餮。。。餮饕餮饕餮饕。。。。。
。餮饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。。。
。餮饕餮饕。饕餮饕。。。。餮饕餮饕。。。。。。。
。。。。。。饕餮饕。。。。餮饕餮饕。。。。餮饕。
。。。。。。饕餮饕。。。饕餮饕餮饕餮。。。餮饕。
。。。。。。饕餮饕。。餮饕餮。餮饕餮饕。。餮饕。
。。。。。。饕餮饕餮饕餮。。。。饕餮饕餮。餮饕。
。。。餮饕餮饕餮饕餮。。。。。。。餮饕餮饕餮饕。
。。。。。餮饕餮。。。。。。。。。。。餮饕餮饕餮
。。。。。。。。。。。。。。。。。。。。。。饕餮
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。饕餮饕。。。。。。。。。
。。。。。餮饕餮饕。。。。餮饕餮。。。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。饕。。。
。。。。饕餮饕。。。。。。餮饕餮。。。餮饕餮。。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。
。。。。饕餮饕。。。。。饕餮饕。。。。。。。。。
。。。餮饕餮饕。。。。。饕餮饕餮。。。。。。。。
。。。餮饕餮饕。。。。餮饕餮饕餮。。。。。。。。
。。饕餮饕餮饕。。。。餮饕。饕餮。。饕餮饕。。。
。。饕餮饕餮饕。。。饕餮饕。饕餮。餮饕餮饕餮。。
。餮饕。饕餮饕。。餮饕餮饕。饕餮。餮饕。。。。。
。餮饕。饕餮饕。饕餮饕餮饕。饕餮饕餮。。。。。。
。。。。饕餮饕餮饕餮饕餮饕。。餮饕。。。。。。。
。。。。饕餮饕餮饕。饕餮饕。。餮饕餮。。。。。。
。。。。饕餮饕餮。。饕餮饕。。餮饕餮。。。。。。
。。。。饕餮饕。。。饕餮饕。。。饕餮饕。。。。。
。。。。饕餮饕。。。饕餮饕。饕餮饕餮饕。。。。。
。。。。饕餮饕。。。饕餮饕餮饕餮。餮饕餮饕。。。
。。。。饕餮饕。。。饕餮饕餮。。。。饕餮饕餮。。
。。。。饕餮饕。。餮饕餮饕。。。。。。餮饕餮饕。
。。。。饕餮饕。。。饕餮。。。。。。。。。。。。
。。。。饕餮。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕餮饕。。。。餮饕餮饕餮饕。。。。。
。。。。。餮饕餮。。。。。餮饕餮。餮饕餮。。。。
。。。。饕餮饕。。餮饕餮。餮饕餮。。饕餮饕。。。
。。。。饕餮饕餮饕餮饕餮饕餮饕餮。。饕餮饕。。。
。。。餮饕餮。。。餮饕餮。餮饕餮。。。。饕餮。。
。。。餮饕餮饕餮。餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。饕餮饕餮饕。。餮饕餮饕。。。。餮饕。
。。饕餮饕餮饕餮饕餮饕。。餮饕餮饕餮。。。。。。
。餮饕。饕餮饕。饕餮。。。餮饕。饕餮。。。。。。
饕餮。。。餮饕餮饕餮。。饕餮饕。饕餮饕。。。。。
。。。。。餮饕餮饕。。。饕餮饕。饕餮饕。。。。。
。。。。。。饕餮饕。。餮饕餮。。。餮饕餮。。。。
。。。。。餮饕餮。。饕餮饕。。。。餮饕餮饕。。。
。。。。饕餮饕。。餮饕餮。。。。。。饕餮饕餮饕。
。。饕餮饕。。餮饕餮。。。。。。。。。。。。。。
。餮饕餮饕餮。餮饕。。。。餮。。。餮饕餮。。。。
。。。。饕餮。餮饕餮。。。餮饕餮。。饕餮饕。。。
。。。餮饕餮。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕餮。。饕餮饕。。。饕餮饕。。餮饕餮饕。
。餮饕餮饕。。。。餮饕。。。饕餮饕。。。饕餮。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。。饕餮饕。。。。。。。。。
。。。。。餮饕。。。。。饕餮饕。。。。。饕餮饕。
。。。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮
。餮饕餮。餮饕餮。。。餮饕餮饕。。。。。。。。。
。。饕餮饕餮饕餮。。饕餮饕餮。。。。。。。。。。
。。饕餮饕餮饕餮。。饕餮饕餮饕餮饕餮饕餮。。。。
。。饕餮。餮饕餮。餮饕餮饕。。。饕餮饕餮。。。。
。。。。。餮饕餮。餮饕餮饕餮。餮饕餮。。。。。。
。。。。。餮饕餮饕餮。。饕餮饕餮饕。。。。。。。
。。。餮饕餮饕餮饕。。。。餮饕餮。。。。。。。。
。餮饕餮饕餮饕餮。。。。饕餮饕餮饕。。。。。。。
。餮饕餮。餮饕。。。饕餮饕。。餮饕餮饕餮。。。。
。。。。饕餮饕。饕餮饕餮。。。。。餮饕餮饕餮饕餮
。。。。饕餮饕餮饕餮。。饕餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。。。。。
。。。。饕餮。。。。。。。。。餮饕。。。。。。。
。。。餮饕餮。。。餮饕餮饕。。。。。。。。。。。
。。饕餮饕。。。。。。。饕餮饕餮饕。。。。。。。
。。饕餮。。。。。。。。。。。餮饕餮饕。。。。。
。餮饕。。。。。。。。。。。。。饕餮饕。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。餮饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮。。。。。。。。。。。。。。。。。。
。。饕餮饕。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。餮饕。。。。。。。。餮饕餮。。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。。饕餮饕。。。饕餮。。
。。。。。餮饕。。。。。。。。。。。。餮饕餮饕。
。。。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。饕。
。。。。。。。。。。。。饕餮饕餮。。。。。。。。
。。。。。。。。。。。。饕餮饕。。餮饕餮。。。。
。。。。饕餮饕。。。。餮饕餮。。。餮饕餮饕。。。
。餮饕餮饕餮饕餮。。饕餮饕。。。饕餮饕餮。。。。
。。。。饕餮饕。。餮饕餮饕餮饕餮饕餮饕。。。。。
。。。。饕餮饕。。。饕餮。。。餮饕餮。。饕。。。
。。。。饕餮饕。。。。。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。。。。。。。饕餮。。饕餮饕餮饕。
。。。。饕餮饕。。。。。。餮饕。。。饕餮饕。。。
。。。。饕餮饕。饕餮。餮饕餮。。。餮饕餮。。。。
。。。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。。。。
。。。。饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。
。。。。饕餮饕餮。。。。。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。。。。饕餮饕。。。。餮饕餮饕。
。。。。。餮饕。。。饕餮饕餮。。。。。。饕餮饕。
。。。。。。。。饕餮饕餮。。。。。。。。。餮饕。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。饕餮饕。
。餮饕餮。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。饕餮
。餮饕餮饕餮饕餮饕。。。。。。。。。饕餮饕。。。
。餮饕餮。。饕餮。。。。。。。。。。饕餮饕。。。
。餮饕餮。。饕餮。。。。。。。餮。。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮饕餮饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮饕餮饕餮。餮饕餮饕餮饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮饕餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕。。餮饕。。。。。。。饕餮饕。。。
。餮饕。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。饕餮饕餮饕餮饕。。。
。。。。。。。。。。。。。。。。。餮饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕。。。。。。。饕餮饕。。。。。。。
。。。。。餮饕。。。。。。。饕餮饕餮。。。。。。
。。。。。餮饕。。。饕餮。。。餮饕。。。饕餮。。
。。。。。餮饕。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。餮饕餮饕餮饕餮饕餮饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕餮饕餮饕餮饕。。。。。。餮饕餮。。
。。。。饕餮饕餮饕。饕餮饕餮饕餮饕餮饕餮饕餮。。
。餮饕餮饕餮饕。。。饕餮饕。。。。。。餮饕餮。。
饕餮饕餮。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。餮饕餮。。。。。。。。。。。。
。。。。。餮饕。。餮饕餮。。。。。。。。。。。。
。。。。。餮饕。。餮饕。。。。。。。。。。。。。
。。。。。餮饕。饕餮饕。。。。。。。。。。。。。
。餮饕餮饕餮饕餮饕餮。。。。。。。。。。。。。。
。。。餮饕餮饕餮饕。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。。餮饕餮。。。。。。饕餮饕餮。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕。。。。。。餮饕餮。。。。。。。。
。。饕餮饕餮饕餮饕餮饕餮。餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。饕餮饕。。。饕餮饕。饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕餮饕餮饕。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。餮饕餮。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。饕餮饕。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕。。。饕餮饕。。。。。。。。餮饕餮。。
。。饕餮饕餮饕餮饕餮饕。。。饕餮。。饕餮饕。。。
。。饕餮饕。。。饕餮饕。。。饕餮饕餮饕餮饕。。。
。。饕餮。。。。饕餮。。。。。。。餮饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。饕餮饕餮。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕餮。餮饕餮饕。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。。餮饕餮。。。餮饕餮。。。。。。。。。。
。。。。饕餮饕。。。饕餮饕。。。。。。餮饕餮饕。
。。。。饕餮饕。。。饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。餮饕餮饕餮。餮饕餮。。饕餮。。。餮饕。。。
。。。餮饕餮饕餮。餮饕。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕。饕餮。。。。饕餮饕。饕餮。。。。
。。饕餮饕餮饕餮饕餮饕餮。。饕餮饕。。。。。。。
。餮饕。饕餮饕。。。饕餮饕餮饕餮饕餮饕。。。。。
饕餮饕。饕餮饕。。。饕餮饕。饕餮饕。饕餮。。。。
。。。。饕餮饕。。。饕餮饕。饕餮饕。饕餮饕。。。
。。。。饕餮饕。。餮饕餮。。饕餮饕。。餮饕餮。。
。。。。饕餮饕。。餮饕。。。饕餮饕。。餮饕餮饕。
。。。。饕餮饕。饕餮饕。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕。饕餮。。。。饕餮饕。。。饕餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。餮饕。
。。。。饕餮饕餮饕。。。。。饕餮饕。。。。。。。
。。。。饕餮饕。。。。餮饕餮饕餮饕。。。。。。。
。。。。饕餮饕。。。。。。餮饕餮。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。餮饕。饕餮饕。。。。。。。。。
。。。。。。。餮饕餮饕餮饕餮饕餮饕餮。。。。。。
。。。。饕餮饕餮饕。。餮饕餮饕。。餮饕餮。。。。
。。饕餮饕。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。饕餮饕。。。
。。。。。。饕餮饕。。。饕餮饕。。。。。。。。。
。。。。。。饕餮饕。。。饕餮饕。。。。餮饕餮。。
。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。
。。。。。。饕餮饕。。。饕餮饕。。。饕。。。。。
。。。。。。饕餮饕。。。饕餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕。。。。餮饕。。餮饕餮饕。。。
。。。。。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮。。。。
。。。。。餮饕餮饕餮。。。餮饕餮饕餮饕。。。。。
。餮饕餮饕餮饕餮饕。。。。餮饕餮饕餮。。。。。。
。餮饕餮饕。饕餮饕。。。。餮饕餮饕。。。。。。。
。。。。。。饕餮饕。。。。餮饕餮饕。。。。餮饕。
。。。。。。饕餮饕。。。饕餮饕餮饕餮。。。餮饕。
。。。。。。饕餮饕。。餮饕餮。餮饕餮饕。。餮饕。
。。。。。。饕餮饕餮饕餮。。。。饕餮饕餮。餮饕。
。。。餮饕餮饕餮饕餮。。。。。。。餮饕餮饕餮饕。
。。。。。餮饕餮。。。。。。。。。。。餮饕餮饕餮
。。。。。。。。。。。。。。。。。。。。。。饕餮
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。餮饕。。。。。。。。。。。。。
。。。。。。。。。餮饕餮饕。。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。餮饕餮。。。。。。。。。。
。。。。。餮饕餮饕餮饕餮饕餮。。。。饕餮。。。。
。。。。。。。。。。。餮饕餮。。。餮饕餮饕。。。
。。。。。。。。。。。餮饕餮。。饕餮饕。。。。。
。。。。。。。餮饕餮。餮饕餮饕。饕餮。。。。。。
。餮饕餮饕餮饕餮饕餮。餮饕餮饕餮饕。。。。。。。
。。。。。。饕餮饕。。餮饕餮饕餮。。。。。。。。
。。。。。。饕餮饕。。餮饕。饕餮。。。。。。。。
。。。。。。饕餮饕。。餮饕。饕餮饕。。。。。。。
。。。。。餮饕餮。。。餮饕。。餮饕餮。。。。。。
。。。。。餮饕餮。。。餮饕。。餮饕餮。。。。。。
。。。。饕餮饕。。。。餮饕。。。饕餮饕餮。。。。
。。。餮饕餮。。。。。餮饕。。。。餮饕餮饕。。。
。。。餮饕。。。。。。餮饕。。。。。饕餮饕餮饕。
。。饕餮。。。。。。。餮饕。。。。。。餮饕餮饕餮
。餮饕。。。。餮饕餮饕餮饕。。。。。。。。。。。
饕餮。。。。。。。餮饕餮饕。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。餮饕。。。。。
。。饕餮饕餮。。。。。。。。。。。餮饕餮。。。。
。。。。饕餮饕。饕餮饕餮饕餮饕餮饕餮。餮饕。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。饕餮饕。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。餮饕。。。
。。。。。。。。。。。。。。。。。。饕餮饕餮。。
。。。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕餮。餮饕。
。。。。饕餮饕。。。。餮饕。。餮饕。。。。。。。
饕餮饕餮饕餮饕餮。。饕餮饕。。餮饕。。。。。。。
。。。。饕餮饕。。。饕餮饕。。餮饕。。。。。。。
。。。。饕餮饕。。。饕餮饕。。餮饕。。。。。。。
。。。。饕餮饕。。。饕餮。。。餮饕。。。饕。。。
。。。。饕餮饕。。餮饕餮。。。餮饕。。餮饕餮。。
。。。。饕餮饕。。餮饕。。。。餮饕。。餮饕餮。。
。。。。饕餮饕。饕餮。。。。。餮饕餮。餮饕餮饕。
。。。餮饕餮饕餮饕。。。。。。。饕餮饕餮饕。。。
。餮饕餮饕。饕餮饕。。。。。。。。。。。。。。。
饕餮饕餮。。。餮饕餮饕。。。。。。。。。。。饕餮
。。。。。。。。。餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。饕餮饕。
。餮饕餮。。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。饕餮
。餮饕餮饕餮饕餮饕。。。。。。。。。饕餮饕。。。
。餮饕餮。。饕餮。。。。。。。。。。饕餮饕。。。
。餮饕餮。。饕餮。。。。。。。餮。。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮饕餮饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮。餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮饕餮饕餮。餮饕餮饕餮饕餮饕。饕餮饕。。。
。餮饕餮。。饕餮饕餮饕餮。。饕餮饕。饕餮饕。。。
。餮饕餮。。饕。。餮饕。。。。。。。饕餮饕。。。
。餮饕。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。。。。。饕餮饕。。。
。。。。。。。。。。。。。。饕餮饕餮饕餮饕。。。
。。。。。。。。。。。。。。。。。餮饕餮。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮。。。。。餮饕餮。。。。。。。。
。。。。。餮饕。。。。。。。饕餮饕。。。。。。。
。。。。。餮饕。。。。。。。饕餮饕餮。。。。。。
。。。。。餮饕。。。饕餮。。。餮饕。。。饕餮。。
。。。。。餮饕。饕餮饕餮饕餮饕餮饕餮饕餮饕餮饕。
。餮饕餮饕餮饕餮饕餮饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕。。。饕餮饕。。。。。。餮饕餮。。
。。。。。餮饕餮饕餮饕餮饕。。。。。。餮饕餮。。
。。。。饕餮饕餮饕。饕餮饕餮饕餮饕餮饕餮饕餮。。
。餮饕餮饕餮饕。。。饕餮饕。。。。。。餮饕餮。。
饕餮饕餮。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。。饕餮饕。。。。。。。。。。。
。。。。。餮饕。。餮饕餮。。。。。。。。。。。。
。。。。。餮饕。。餮饕餮。。。。。。。。。。。。
。。。。。餮饕。。餮饕。。。。。。。。。。。。。
。。。。。餮饕。饕餮饕。。。。。。。。。。。。。
。餮饕餮饕餮饕餮饕餮。。。。。。。。。。。。。。
。。。餮饕餮饕餮饕。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮饕。。。。。。。。。。。。。。。
。。。。。。饕餮。。。。。。。。。。。。。。。。
。。。。。。。餮。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。餮饕餮饕餮。。。。。。。。。。。。。。
。。。。。餮饕餮饕。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。