星期四, 九月 24, 2009

算法挑战 36进制条码序列号生成器[修正]

问题描述:
条码打印.要求是唯一的序列.中间有一个日期,最后3位为流水号.但打印的张数会超过999;
因此必须用到26个大写字母,用36进制的话3位可以表示36*36*36=46656个数字。
现在要求如下:
999以前就是普通数字(001~999),再多就开始在百位使用字母
即999的后一个数字为A00此时十位和个位还不能使用字母(平时打印会少于3600张,为了客户看起来方便),
只有在百位将Z用完后才允许在十位使用字母,十位用完才允许个位使用字母
注意事项:
1)不能重复
2)数字个数应达到46656个
3)效率不能太低
4)请在本地测试没有重复序列号
博客: http://www.cnblogs.com/shinn/archive/2008/04/22/1147473.html 给了算法思路,但他的代码有问题。
我的分析:

 

[jjwt.png]

[jieguo.png]

我的代码:

/*


 * Created by SharpDevelop.


 * User: liuyk


 * Date: 2009-9-22


 * Time: 22:05


 */


using System;


namespace ConvertTo36X


{


    /// <summary>


    /// 把[0-46655]转换成36进制的3位序列.


    /// </summary>


    public class ConvertTo36X


    {


        private readonly char[] Char26=new char[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};


        private readonly char[] Char36=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};


 


        public string ConvertNum(int num)


        {


        if(num<0 || num>46655)


        {


        throw new Exception("输入的数字超出范围");


        }


        else if(num>=12960)


        {


        string value="";


        num-=12960;


        char h=Char36[((int) (num/936))%36];


        char t=Char36[((int) (num/26))%36];


        char d=Char26[num%26];


        return value+h+t+d;


        }


        else if(num>=3600)


        {


        string value="";


        num-=3600;


        char h=Char36[(int)((num%360)/10)];


        char t=Char26[(int)(num/360)];


        int d=num%10;


        return value+h+t+d;


        }


        else if(num>=10)


        {


        string value="";


        char h=Char36[(int)(num/100)];


        num=num%100;


        int t=(int)(num/10);


        int d=num%10;


        return value+h+t+d;


        }


        else


        {


        return "00"+num;


 


        }


 


        }


 


    }


 


 


 }






/*


 * Created by SharpDevelop.


 * User: liuyk


 * Date: 2009-9-24


 * Time: 17:09


 * 


 * To change this template use Tools | Options | Coding | Edit Standard Headers.


 */


using System;


using   System.IO;   


namespace ConvertTo36X


{


    class TestConvertTo36


    {


        public static void Main(string[] args)


        {


            Console.WriteLine("Hello World!");


 


            // TODO: Implement Functionality Here


                        ConvertTo36X xx=new ConvertTo36X();


            FileStream   fileName  =   new   FileStream("Temp.txt",FileMode.OpenOrCreate);  


            StreamWriter sw = new StreamWriter(fileName);


 


 


            //System.Console.WriteLine(xx.ConvertNum(46655));


        for (int j=0;j<=46655;j++){


            System.Console.WriteLine(j);


            sw.WriteLine(xx.ConvertNum(j)); 


 


        }


            sw.Close();


 


 


            Console.Write("Press any key to continue . . . ");


            Console.ReadKey(true);


        }


    }


}

把数字转换成36进制

把数字转换成36进制
36进制包括0-9和a-z,只有整形的可以转换。
long i=1234567890L;
System.out.println(Long.toString(i,36).toLowerCase());
输出:kf12oi

星期四, 九月 03, 2009

如何让Chrome支持MonkeyGTD、Tiddly本地存储?

问题:
————————————————————————————————————————
有用以下GTD工具的吗?
MonkeyGTD 3.0----GTD system based on MPTW.
d3 (new version)----GTD system from dcubed.ca (http://www.dcubed.ca/Welcome_to_d-cubed.html 需要翻墙)
我现在只能用Firefox使用上述工具,IE太慢,GoogleChrome不能本地存储。 想请问各位高人,如何让Chrome打开JavaScript本地存储功能?
——————————————————————————————————————————
解答:
1、到 http://monkeygtd.blogspot.com/2008/09/monkeygtd-and-chrome-new-best-friends.html 网站下载TiddlySaver.jar
2、到http://java.com 下载最新版 java
3、把TiddlySaver.jar 和monkeygtd.html或者d3_doit_delegateit_deferit的htm文件
放到同一个路径下。
4、在最新版本的Chrome里打开本地的monkeygtd.html,提示安装时点同意。

Puff the magic dragon

http://hi.baidu.com/fiber/blog/item/7c0b9cef7de244e6ce1b3e2c.html

星期一, 六月 01, 2009

星期五, 五月 15, 2009

[转]Chrome启动参数方案

下面是常用的一些启动参数:
–user-data-dir=UserDataDir 自定义用户数据目录
–start-maximized 启动就最大化
–no-sandbox 取消沙盒模式
–single-process 单进程运行
–process-per-tab 每个标签使用单独进程
–process-per-site 每个站点使用单独进程
–in-process-plugins 插件不启用单独进程
–disable-popup-blocking 禁用弹出拦截
–disable-javascript 禁用JavaScript
–disable-java 禁用Java
–disable-plugins 禁用插件
–disable-images 禁用图像
A Complete list to Google Chrome Startup Switches…
see below
-disable-hang-monitor
-disable-metrics
-disable-metrics-reporting
-assert-test
-renderer-assert-test
-crash-test
-renderer-crash-test
-renderer-startup-dialog
-plugin-startup-dialog
-testshell-startup-dialog
-plugin-launcher
-channeltesting-channel
-homepagestart-renderers-manuallyrenderer
-renderer-pathplugin
-single-process
-process-per-tab
-process-per-site
-in-process-plugins
-no-sandbox
-safe-plugins
-trusted-plugins
-test-sandbox
-user-data-dir
-appupload-file
-dom-automation
-plugin-pathjs-flags
-geoidlangdebug-children
-wait-for-debugger-children
-log-filter-prefix
-enable-logging
-dump-histograms-on-exit
-disable-logging
-remote-shell-port
-uninstallomnibox-popup-count
-automation-channel
-restore-last-session
-record-mode
-playback-mode
-no-events
-hide-icons
-show-icons
-make-default-browser
-proxy-server
-dns-log-details
-dns-prefetch-disable
-debug-print
-allow-all-activex
-disable-dev-tools
-always-enable-dev-tools
-memory-model
-tab-count-to-load-on-session-restore
-memory-profile
-enable-file-cookies
-start-maximized
-enable-watchdogfirst-run
-message-loop-strategy
-message-loop-histogrammer
-importsilent-dump-on-dcheck
-disable-prompt-on-repost
-disable-popup-blocking
-disable-javascript
-disable-java
-disable-plugins
-disable-images
-use-lf-heap
-new-http

本文来源于谷歌Chrome中文站 http://www.downdig.com/chrome , 原文地址:

Chrome启动参数及地址栏功能

Chrome启动参数及地址栏功能,希望各位大力支持(持续更新)。
转: http://bbs.webmou.com/thread-2343-1-1.html

启动参数
--disable-plugins 禁用插件
--User-data-dir=dir 设置缓存
--single-process 单线程模式
--no-sandbox 非沙箱模式
process-per-tab 每个标签使用单独进程
process-per-site 每个站点使用单独进程
in-process-plugins 插件不启动单独进程
start-maximized 启动就最大化
first-run 第一次运行
disable-popup-blocking 禁用弹出拦截
disable-javascript 禁用javascript
disable-java 禁用java
disable-images 禁用图像

disable-hang-monitor
disable-metrics
disable-metrics-reporting
assert-test
renderer-assert-test
crash-test
renderer-crash-test
renderer-startup-dialog
plugin-startup-dialog
testshell-startup-dialog
plugin-launcher
channel
testing-channel
homepage
start-renderers-manually
renderer
renderer-path
plugin
safe-plugins
trusted-plugins
test-sandbox
app
upload-file
dom-automation
plugin-path
js-flags
geoid
lang
debug-children
wait-for-debugger-children
log-filter-prefix
enable-logging
disable-logging
log-level
dump-histograms-on-exit
remote-shell-port
uninstall
omnibox-popup-count
automation-channel
restore-last-session
record-mode
playback-mode
no-events
hide-icons
show-icons
make-default-browser
proxy-server
dns-log-details
dns-prefetch-disable
debug-print
allow-all-activex
disable-dev-tools
always-enable-dev-tools
memory-profile
memory-model
enable-file-cookies
enable-watchdog
message-loop-histogrammer
import
silent-dump-on-dcheck
disable-prompt-on-repost
use-lf-heap
gears-plugin-path
gears-in-renderer
new-http
javascript-debugger-path
enable-p13n


地址栏功能:
about:version - 显示当前版本 也可以是chrome-resource://about/
about:plugins - 显示已安装插件,Google Chrome支持Active X!
about:histograms - 显示历史记录
about:dns - 显示DNS状态
about:cache, 重定向到 view-cache: 显示缓存页面
view-cache:stats - 缓存状态
about:stats - 显示状态
about:network - 很酷的网络工具
about:internets - 这应该算是一个彩蛋
chrome-resource://new-tab/ - 新标签页
about:memory - 可以查看内存和进程占用。也可以Shift+ESC,点击Statistics for nerds(傻瓜统计信息)

谷歌浏览器(Google Chrome)不支持本地js文件

I am using the jQuery Cookie plugin (download and demo and source code with comments) to set and read a cookie. I'm developing the page on my local machine.

The following code will successfully set a cookie in FireFox 3, IE 7, and Safari (PC). But if the browser is Google Chrome AND the page is a local file, it does not work.

$.cookie("nameofcookie", cookievalue, {path: "/", expires: 30}); 

What I know:

  • The plugin's demo works with Chrome.
  • If I put my code on a web server (address starting with http://), it works with Chrome.

So the cookie fails only for Google Chrome on local files.

Possible causes:

  • Google Chrome doesn't accept cookies from web pages on the hard drive (paths like file:///C:/websites/foo.html)
  • Something in the plugin implentation causes Chrome to reject such cookies

Chrome doesn't support cookies for local files unless you start it with the --enable-file-cookies flag. You can read a discussion about it at http://code.google.com/p/chromium/issues/detail?id=535.


Get organized with GTDTiddlyWiki

Get organized with GTDTiddlyWiki

by Jason Thomas

Everyone has to find their own killer personal organizational app, and for me, it's a single, free HTML document calledGTDTiddlyWiki. The self-contained standalone mini-wiki is packed with features but it doesn't dictate how you work - it provides a canvas on which you can design your own process improvements and workflows.

Don't let GTDTiddlyWiki's unusual name put you off. It's one of the best organization apps available, and in fact it beats the pants off all the commercial organizational software I've tried.

If you're looking for your killer app, today I've got a primer on how I've put GTDTiddlyWiki to work for me.

What's GTDTiddlyWiki?

GTDTW is an HTML document that you save to your local hard drive and edit there using your web browser. When you save information, it edits itself, and stores what you've written in an internal data format. This is very convenient for people who are into portable apps on USB keys, because it's completely self-contained, always with you and only requires a web browser to edit. It's also very easy to back it up: just send it up to your Gmail account every few days, or better yet schedule a job to do it for you.

To download GTDTW, right-click this GTDTiddlyWiki link and save it to a folder on your desktop. Don't save it to your desktop if you intend to keep it there; I'll explain why in a minute. In fact, you don't even need to save it at all: you can follow through most of this tutorial with the one that's up there on the site.

Now that you've saved it, load it up in Firefox. You're going to see something like this (click to enlarge):

Over there on the left is a menu. That's all editable, and it's one way you can get around in GTDTW.

Over on the right are what they call "tiddlers." These are analogous to pages in a traditional wiki. You could also say that they're like notecards in a Hipster PDA, and that's no accident: GTDTW was designed from the get-go to work like index card stacks. You can even print tiddlers to index cards, so you have a nice way of dumping out lists and so on for when you're on the go.

Editing GTDTiddlyWiki

GTDScreenshot2.jpg

There's a button on the menu to the left that says "CreateNewTiddler." Click it. On the right, you'll see a new card appear. Double-click it, enter a title — for now, call it Lists — and type in some text. When you're finished, click "done" or just hit Ctrl-Enter. Your tiddler's finished now. But it's not saved permanently yet. To do so, click "save changes" on the menu. Your first time it will trigger a Firefox warning telling you that the Javascript wants to save something on your local hard drive. Click the "Allow" button and check off "Remember this decision" so you don't get asked every time. You're good to go now, and next time you load up GTDTW your new tiddler will show up in the system.

Note: If you've never done much with wikis before, the formatting involved can seem daunting at first. GTDTW syntax is a simplified version of the highly evolved app that runs Wikipedia, but it does take getting used to. Bear with me; after a little practice it becomes automatic.

Building your GTDTiddlyWiki

You've probably evolved a number of organizational methods of your own that fit your own work style. You're probably going to want to edit the menu to reflect your own process. To do that, click on the "MainMenu" button in the menu. It pops up a tiddler. That's right — the menu itself lives on a tiddler, and you can edit it just like any other card. Click the yellow "edit" button on the MainMenu tiddler. You'll see a number of entries in brackets. Add a new one: type "[[Lists]]" and close the card. Now, over on the left, you should see the item appear in the menu. Click the menu item Lists and the new card you made earlier should appear. Snazzy.

You might want to call it something more descriptive than that. I have one called "Ideas" that I use to reference other cards containing ideas for articles, projects, etc. Here's how to link to other cards from within a tiddler:

Say you're going on vacation and you need to remember to bring everything with you. That would be a new list, so you want it to be referenced from your "Lists" card.

Open up "Lists" from the menu, or if you already have it open, just double-click it to edit the card. On it, you have whatever you typed earlier. Now, type "VacationList" and close the tiddler. It's important that you make it one single word with two capitals ("camel case"). That's a WikiWord, and it's how wiki's indicate links to other pages. Alternatively, you can just enclose the word in double brackets like we did above.

You'll see that VacationList link is on there, and it's in italics. The italics mean that the tiddler hasn't been created yet. Click that link and it'll create a new tiddler called VacationList. You can edit that tiddler to indicate everything you need to bring with you. You can make it a bulleted list by typing an asterisk ahead of each word.

If you want, just paste the following text into your new card:

!Packing
*Into Suitcase
**Scarf
**Gloves
**iPod

!Shopping
*Sporting Goods Store
**New Boots
**Trail Mix
**Pocket Heaters

When you click "Done," here's what it should look like:

GTDScreenshot4.jpg

Here's a tip for things like shopping or packing lists you might print out to index cards: If you use a double asterisk, it'll result in an empty circle instead of a solid bullet. That way, when you finish each item on the list, just fill in the corresponding circle. Make sure to use a sharp number 2 pencil! That and numerous other tips are on the FormattingInstructions menu item.

Configuring GTDTiddlyWiki

GTDScreenshot3.jpg

There are a few little usability issues with GTDTW, but they're easy to get around. Firstly, you should go into "options" on the menu and click "AutoSave." I also uncheck "EnableAnimations," because sometimes the animations can result in slowness, especially if you're running from remote over X or through something like VMWare.

The reason AutoSave is so important is because GTDTW lives in Firefox. More specifically, it lives in a Firefox tab. It's real easy to forget and start up multiple instances of GTDTW, making you run into version control issues. You also might just accidentally close the tab GTDTW is on, and even though it'll ask you to confirm, you don't want to be adding a lot of cards to the system, switch to another tab and forget to save it.

In Options, you'll also notice a checkbox labeled "Save Backup." That button is the reason why you don't want to throw GTDTW onto your desktop. It saves incremental backups every time you make a change, each one in its own new file. This is nice in case you make a mistake or need to revert, but it can result in clutter that you don't really need, so you want to place GTDTW in its own separate folder. Once your GTDTW file grows to a few megs or so, you'll also want to go into its folder and clear out some of the older backup files occasionally to save disk space, because it can add up.

When I want to back up my GTDTW, I just send it to a Gmail account I've set up for handling backups. I have a Linux cron job that sends it up there every day. That way, you keep running incremental backups of your work over time. It's not good to use Gmail as a primary file storage, but it's great for backups like this because it keeps everything nicely organized by date. You could also just use your "Gmail This" bookmarklet and add your saved GTDTW file as an attachment. Here's a previous Lifehacker feature on emailing yourself backups on Windows.

External links to your other capture tools

For a while, I was adding everything under the sun into GTDTW. Now, not so much. The file will get big, bloated and unwieldy. For a while, I was linking to files on my local hard drive (see the LinktoFolders tiddler under FormattingInstructions), but that's unwieldy too if you move from computer to computer.

Better to link to your Google Notebooks and store information there. Just add an external link to a tiddler like so:[[MyNotebook|http://www.google.com/notebook/]]. If you're logged into Google Notebook, it'll bring up your full page view. In Firefox, you can just middle-click the link and it will open in a new tab.

Ready to print something to notecards? Just hit "Print" from your browser and the tiddlers you have open will print just as nice as could be.

You'll find that your methods for using GTDTW will evolve over time. For a while, I was using GTDTW for my monthly planner. Now, under my "Agenda" menu item, I have a link to my Google calendar. You guessed it— it's just the same as above, except the link looks like this: [[http://www.google.com/calendar/]].

GTDTW is a great tool for research, organizing different clippings, images and whatnot into an format that's easy to navigate and search. In fact, you might want to save Google searches to look at later. Just link to them:[[Lifehacker|http://www.google.com/search?q=lifehacker]]

I could go on for probably twenty more pages about all the ways I've used GTDTW. I'm not even touching on how to use tags, or the search utility, or the full-featured regular expression searching that it offers.

GTDTiddlyWiki took getting used to, but now I use it every day. But in its customizability lies a pitfall: it has the potential to be an incredible distraction and time-waster. Don't just play with it like a new toy and then discard it. Work up a system and stick with it for a while, actually use it. Then, after you've integrated it into your workflow, start refactoring: look at the way you're using it and figure out how you can streamline your process. That's how you get continual improvement over time.

For more ideas of what you can do with these great apps, check tiddlywiki.com. Also, thank the developers. They deserve it.


4 Free Proxies To Block Ads in Google Chrome (or any browser)

4 Free Proxies To Block Ads in Google Chrome (or any browser)


So you've tested Google Chrome and decided that you like it. You say you'd switch, but there's no adblocker? Fortunately for you, there are several free, tiny filtering proxy applications available that can do the job.

The best part is, they'll help block ads in any browser - including Chrome.

Before I get into a list, it's important to know that several of these apps haven't been updated in ages. However, content filtering is a pretty straightforward operation, so even the old ones work just fine - and you can always tweak the blocking rules yourself.

CyberGuard WebWasher Classic
is another great option. It's small, fast, and very customizable. It's got additional capabilities to block popups, scripts, referrers, cookies, and prefixes. New filters are incredibly easy to set up, and there's no noticeable lag in load times. Of the apps I tested, WebWasher was my favorite.

Proxomitron has a god awful GUI, but it works well enough that its appearance can be overlooked (you can create your own bitmaps if you really hate it). It offers extremely flexible bloxing rules, and the default set is extrmely effective. Blocked ads are replaced with [red text in brackets], and pages load times weren't adversely affected.


iReject Trash is a tiny download (200k) and works extremely well. Its log view also gives you an interesting insight into the pages you're visiting. CNET.com, for example, had 33 items blocked. Out-of-the-box the blocking was very good, and the rules are fully customizable. You can block by host, pattern, or image dimensions. Page load times were a bit slower on certain sites.

Lifehacker suggests Privoxy
as an option (via GeekZone NZ). Privoxy is more low-fi: all your configuration tweaks are done by editing text files. It is, however, very easy on processor usage and it also does a very good job with no tweaking. I didn't notice any difference in page load times with Privoxy.

There are tons of other options for blocking ads (just check the Google Directory), so don't give up on Chrome just because there's no AdBlock. Grab one of these apps, and give it another try - then tell us how it went!

星期四, 五月 14, 2009

WINRAR KEY 注册码

选择对应的代码复制到TXT文本文档中,命名为rarreg.key放入WinRAR 的安装目录中的文件中(如果没有就自己创建一个)!!
呃,多嘴说一句,使用方法不是双击 RarReg.key 导入注册表
而是把 RarReg.key 放到 WinRAR 的安装目录
WinRAR 的安装目录通常在 C:\Program Files\WinRAR

3.6 beta8版以下:

RAR registration data
Alexander Aymanov
Single PC usage license
UID=dc1d9fdb26f9be064d83
64122122504d83d04ee243231738b88600fb267f1d3b9632421295
d1048b98780395138be06035c6ab9048e2c5c62f0238f183d28519
aa87488bf38f5b634cf28190bdf438ac593b1857cdb55a7fcb0eb0
c3e4c2736090b3dfa45384e08e9de05c58609e0915bfdc561003a6
755c95e82155892c0f36e7ff4b3d62f55230e8ad51b6756d092d0b
89e5c480d3449cc0c7d9ab1d3d4abb32baf07ebabe0e145e608494
e628198aaef1e665f9d63f719cb57ef19f3443f31a830478060233

3.71版以下:
RAR registration data
Ian Gledhill
Single PC usage license
UID=1b80823684224d9b748a
6412212250748a81108382cda7d3d039b93ea05369c1b3222bcc93
248e0a5c901e7a89b5946035c6ab9048e2c5c62f0238f183d28519
aa87488bf38f5b634cf28190bdf438ac593b1857cdb55a7fcb0eb0
c3e4c2736090b3dfa45384e08e9de05c58604100fe88f402153c05
aa6e9cf44271379afcc502a027ec9ef029e9691f1d734d58eb8016
4dfef1ff926eee74128b50442ab561e9abfdd6b8490e36e46004bb
71874b07a0fb27a6c5d662140fae567747083ae2ed070249382990

3.80版以下:

RAR registration data
Database Administrators
5 PC usage license
UID=54d582e921e445f1bfe8
6412212250bfe8e73e20bdb947f60ef0da9624150bcf8668412c68
84affda559742bbb686d6071302587655a7ba28d516e17834b7616
47cd79a293eb4c0e4fbf5e9f967e6ed5b28a02418d0ab2549fc4da
19e4644f2345190bf26ff7bcd0c819f12560b57cf28adc164a00c6
3174fcbb69509912e7c7c4793779b941901c6c793b7319cc395ee0
8bddb923fa08fc20019b59d0b246e0ac325d2e5854d4f97a602fc0
a4357b8f857cfb717545410ecad088fb28a2a3cf0dff2102863273

3.60 beta8 :

RAR registration data
vncodered
Single PC usage license
UID=1779147d103f2fdbd317
6412212250d317d5ea5a69ea5936c8a67dd60fc5eb0e3b230a0cce
d95d6cc8c4b5248e40986035c6ab9048e2c5c62f0238f183d28519
aa87488bf38f5b634cf28190bdf438ac593b1857cdb55a7fcb0eb0
c3e4c2736090b3dfa45384e08e9de05c5860266bd3d416f192e71b
c2ec1d27fd4b058c495a2bf7e1ad7bbddbbee27df7988217761f42
45d28472a7591f8faaf3e78c78f9f97112fcd8a662a5401c60d21a
2e9f208d4dd673099d78613e7a1bc45bac1f6d65a10a1775209829

WinRAR 3.8 key!注册文件(共2个,任选一个都行,


请复制另存为文本文件,命名为以下名称 rarreg。key,并保存在winrar文件夹里。}

WinRAR v3.80 Final working key





注册码1
=================================================

RAR registration data
Federal Agency for Education
1000000 PC usage license
UID=b621cca9a84bc5deffbf
6412612250ffbf533df6db2dfe8ccc3aae5362c06d54762105357d
5e3b1489e751c76bf6e0640001014be50a52303fed29664b074145
7e567d04159ad8defc3fb6edf32831fd1966f72c21c0c53c02fbbb
2f91cfca671d9c482b11b8ac3281cb21378e85606494da349941fa
e9ee328f12dc73e90b6356b921fbfb8522d6562a6a4b97e8ef6c9f
fb866be1e3826b5aa126a4d2bfe9336ad63003fc0e71c307fc2c60
64416495d4c55a0cc82d402110498da970812063934815d81470829275

=================================================

RAR registration data
Database Administrators
5 PC usage license
UID=54d582e921e445f1bfe8
6412212250bfe8e73e20bdb947f60ef0da9624150bcf8668412c68
84affda559742bbb686d6071302587655a7ba28d516e17834b7616
47cd79a293eb4c0e4fbf5e9f967e6ed5b28a02418d0ab2549fc4da
19e4644f2345190bf26ff7bcd0c819f12560b57cf28adc164a00c6
3174fcbb69509912e7c7c4793779b941901c6c793b7319cc395ee0
8bddb923fa08fc20019b59d0b246e0ac325d2e5854d4f97a602fc0
a4357b8f857cfb717545410ecad088fb28a2a3cf0dff2102863273