声明
此次案例只为学习交流使用,抓包内容、敏感网址、数据接口均已做脱敏处理,切勿用于其他非法用途;
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、资源推荐
Web Spider 常见混淆EVAL、AA、JJ、JSFUCK:https://blog.csdn.net/EXIxiaozhou/article/details/128767669
网洛者 - 反反爬虫训练平台网址:https://wangluozhe.com/
JS逆向加密解密工具Crypto Magician、乐易助手、WT-JS 下载使用:https://blog.csdn.net/EXIxiaozhou/article/details/128034062
二、逆向目标
本次案例会使用三种方式解析混淆JS代码
三、抓包分析 & 下断分析逆向
3.1 抓包分析
1、POST,https://wangluozhe.com/challenge/api/3;
2、逆向加密参数:_signature,可以发现加密参数的长度是112;
3.2 下断分析逆向拿到混淆JS代码
1、通过启动器,进入代码定义处;
2、在此处下断点,
window.get_sign();
;
3、翻页刷新网站;
4、复制混淆JS代码
window.date = Date.now().toString().slice(5,13);
゚ω゚ノ=/`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+/*´∇`*/(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((o^_^o) +(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((o^_^o) - (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(c^_^o)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) - (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o) +(o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (゚Θ゚))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+(o^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚) + (o^_^o))+((゚ー゚) + (゚Θ゚))+(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
3.3 AAEncode解决方式
常见的三种AAEncode解决方式
- 1、加密,解密地址:http://www.hiencode.com/aaencode.html
- 2、去掉代码最后一个符号 (‘_’) 后,复制代码在浏览器控制台打印即可看到源码;
- 3、在混淆代码处打断点,一步一步往下跟,就能跟到源码处;
1、在线解密,有些时候不起作用,不能解决大部分的混淆;
2、去掉代码最后一个符号 (‘_’) 后,复制代码在浏览器控制台打印即可看到源码,点进去可以看到详细的JS代码;
3、在混淆代码处打断点,一步一步往下跟,就能跟到源码处;
四、JS代码调试 & 完整JS代码
4.1 JS代码调试
1、跟进加密代码处,可以发现使用了encryptByDES加密方式,并且检测了window.document.location.href,走的是try的调用方式;
window.document.location.href:‘https://wangluozhe.com/challenge/3’
key:‘1677760251000’ // 时间戳
message = :‘https://wangluozhe.com/challenge/3’ + ‘|’ + Date.parse(new Date()).toString();
2、通过以上的代码分析,可以将代码修改一下,并补充检测的属性(window.document.location.href)
3、关于CryptoJS 模块,可以通过npm安装再引入模块,也可以通过工具生成CryptoJS 的源码,我这边直接复制了CryptoJS 的源码;
4.2 完整JS代码
window = this;
var CryptoJS = new CryptoJS;
function CryptoJS(root, factory){
var CryptoJS = CryptoJS ||(function(Math, undefined){
var create = Object.create ||(function(){
function F(){};returnfunction(obj){
var subtype;
F.prototype = obj;
subtype = new F();
F.prototype = null;return subtype;};}())
var C ={};
var C_lib = C.lib ={};
var Base = C_lib.Base =(function(){return{
extend:function(overrides){
var subtype =create(this);if(overrides){
subtype.mixIn(overrides);}if(!subtype.hasOwnProperty('init')|| this.init === subtype.init){
subtype.init =function(){
subtype.$super.init.apply(this, arguments);};}
subtype.init.prototype = subtype;
subtype.$super = this;return subtype;},
create:function(){
var instance = this.extend();
instance.init.apply(instance, arguments);return instance;},
init:function(){},
mixIn:function(properties){for(var propertyName in properties){if(properties.hasOwnProperty(propertyName)){
this[propertyName]= properties[propertyName];}}if(properties.hasOwnProperty('toString')){
this.toString = properties.toString;}},
clone:function(){return this.init.prototype.extend(this);}};}());
var WordArray = C_lib.WordArray = Base.extend({
init:function(words, sigBytes){
words = this.words = words ||[];if(sigBytes != undefined){
this.sigBytes = sigBytes;}else{
this.sigBytes = words.length *4;}},
toString:function(encoder){return(encoder || Hex).stringify(this);},
concat:function(wordArray){
var thisWords = this.words;
var thatWords = wordArray.words;
var thisSigBytes = this.sigBytes;
var thatSigBytes = wordArray.sigBytes;
this.clamp();if(thisSigBytes %4){for(var i =0; i < thatSigBytes; i++){
var thatByte =(thatWords[i >>>2]>>>(24-(i %4)*8))&0xff;
thisWords[(thisSigBytes + i)>>>2]|= thatByte <<(24-((thisSigBytes + i)%4)*8);}}else{for(var i =0; i < thatSigBytes; i +=4){
thisWords[(thisSigBytes + i)>>>2]= thatWords[i >>>2];}}
this.sigBytes += thatSigBytes;return this;},
clamp:function(){
var words = this.words;
var sigBytes = this.sigBytes;
words[sigBytes >>>2]&=0xffffffff<<(32-(sigBytes %4)*8);
words.length = Math.ceil(sigBytes /4);},
clone:function(){
var clone = Base.clone.call(this);
clone.words = this.words.slice(0);return clone;},
random:function(nBytes){
var words =[];
var r =(function(m_w){
var m_w = m_w;
var m_z =0x3ade68b1;
var mask =0xffffffff;returnfunction(){
m_z =(0x9069*(m_z &0xFFFF)+(m_z >>0x10))& mask;
m_w =(0x4650*(m_w &0xFFFF)+(m_w >>0x10))& mask;
var result =((m_z <<0x10)+ m_w)& mask;
result /=0x100000000;
result +=0.5;return result *(Math.random()>.5?1:-1);}});for(var i =0, rcache; i < nBytes; i +=4){
var _r =r((rcache || Math.random())*0x100000000);
rcache =_r()*0x3ade67b7;
words.push((_r()*0x100000000)|0);}return new WordArray.init(words, nBytes);}});
var C_enc = C.enc ={};
var Hex = C_enc.Hex ={
stringify:function(wordArray){
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var hexChars =[];for(var i =0; i < sigBytes; i++){
var bite =(words[i >>>2]>>>(24-(i %4)*8))&0xff;
hexChars.push((bite >>>4).toString(16));
hexChars.push((bite &0x0f).toString(16));}return hexChars.join('');},
parse:function(hexStr){
var hexStrLength = hexStr.length;
var words =[];for(var i =0; i < hexStrLength; i +=2){
words[i >>>3]|=parseInt(hexStr.substr(i,2),16)<<(24-(i %8)*4);}return new WordArray.init(words, hexStrLength /2);}};
var Latin1 = C_enc.Latin1 ={
stringify:function(wordArray){
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var latin1Chars =[];for(var i =0; i < sigBytes; i++){
var bite =(words[i >>>2]>>>(24-(i %4)*8))&0xff;
latin1Chars.push(String.fromCharCode(bite));}return latin1Chars.join('');},
parse:function(latin1Str){
var latin1StrLength = latin1Str.length;
var words =[];for(var i =0; i < latin1StrLength; i++){
words[i >>>2]|=(latin1Str.charCodeAt(i)&0xff)<<(24-(i %4)*8);}return new WordArray.init(words, latin1StrLength);}};
var Utf8 = C_enc.Utf8 ={
stringify:function(wordArray){
try {returndecodeURIComponent(escape(Latin1.stringify(wordArray)));}catch(e){
throw new Error('Malformed UTF-8 data');}},
parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)));}};
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
reset:function(){
this._data = new WordArray.init();
this._nDataBytes =0;},
_append:function(data){if(typeof data =='string'){
data = Utf8.parse(data);}
this._data.concat(data);
this._nDataBytes += data.sigBytes;},
_process:function(doFlush){
var data = this._data;
var dataWords = data.words;
var dataSigBytes = data.sigBytes;
var blockSize = this.blockSize;
var blockSizeBytes = blockSize *4;
var nBlocksReady = dataSigBytes / blockSizeBytes;if(doFlush){
nBlocksReady = Math.ceil(nBlocksReady);}else{
nBlocksReady = Math.max((nBlocksReady |0)- this._minBufferSize,0);}
var nWordsReady = nBlocksReady * blockSize;
var nBytesReady = Math.min(nWordsReady *4, dataSigBytes);if(nWordsReady){for(var offset =0; offset < nWordsReady; offset += blockSize){
this._doProcessBlock(dataWords, offset);}
var processedWords = dataWords.splice(0, nWordsReady);
data.sigBytes -= nBytesReady;}return new WordArray.init(processedWords, nBytesReady);},
clone:function(){
var clone = Base.clone.call(this);
clone._data = this._data.clone();return clone;},
_minBufferSize:0});
var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
cfg: Base.extend(),
init:function(cfg){
this.cfg = this.cfg.extend(cfg);
this.reset();},
reset:function(){
BufferedBlockAlgorithm.reset.call(this);
this._doReset();},
update:function(messageUpdate){
this._append(messageUpdate);
this._process();return this;},
finalize:function(messageUpdate){if(messageUpdate){
this._append(messageUpdate);}
var hash = this._doFinalize();return hash;},
blockSize:512/32,
_createHelper:function(hasher){returnfunction(message, cfg){return new hasher.init(cfg).finalize(message);};},
_createHmacHelper:function(hasher){returnfunction(message, key){return new C_algo.HMAC.init(hasher, key).finalize(message);};}});
var C_algo = C.algo ={};return C;}(Math));(function(){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_enc = C.enc;
var Base64 = C_enc.Base64 ={
stringify:function(wordArray){
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var map = this._map;
wordArray.clamp();
var base64Chars =[];for(var i =0; i < sigBytes; i +=3){
var byte1 =(words[i >>>2]>>>(24-(i %4)*8))&0xff;
var byte2 =(words[(i +1)>>>2]>>>(24-((i +1)%4)*8))&0xff;
var byte3 =(words[(i +2)>>>2]>>>(24-((i +2)%4)*8))&0xff;
var triplet =(byte1 <<16)|(byte2 <<8)| byte3;for(var j =0;(j <4)&&(i + j *0.75< sigBytes); j++){
base64Chars.push(map.charAt((triplet >>>(6*(3- j)))&0x3f));}}
var paddingChar = map.charAt(64);if(paddingChar){while(base64Chars.length %4){
base64Chars.push(paddingChar);}}return base64Chars.join('');},
parse:function(base64Str){
var base64StrLength = base64Str.length;
var map = this._map;
var reverseMap = this._reverseMap;if(!reverseMap){
reverseMap = this._reverseMap =[];for(var j =0; j < map.length; j++){
reverseMap[map.charCodeAt(j)]= j;}}
var paddingChar = map.charAt(64);if(paddingChar){
var paddingIndex = base64Str.indexOf(paddingChar);if(paddingIndex !==-1){
base64StrLength = paddingIndex;}}returnparseLoop(base64Str, base64StrLength, reverseMap);},
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
};
function parseLoop(base64Str, base64StrLength, reverseMap){
var words =[];
var nBytes =0;for(var i =0; i < base64StrLength; i++){if(i %4){
var bits1 = reverseMap[base64Str.charCodeAt(i -1)]<<((i %4)*2);
var bits2 = reverseMap[base64Str.charCodeAt(i)]>>>(6-(i %4)*2);
words[nBytes >>>2]|=(bits1 | bits2)<<(24-(nBytes %4)*8);
nBytes++;}}return WordArray.create(words, nBytes);}}());(function(Math){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
var T =[];(function(){for(var i =0; i <64; i++){
T[i]=(Math.abs(Math.sin(i +1))*0x100000000)|0;}}());
var MD5 = C_algo.MD5 = Hasher.extend({
_doReset:function(){
this._hash = new WordArray.init([0x67452301,0xefcdab89,0x98badcfe,0x10325476]);},
_doProcessBlock:function(M, offset){for(var i =0; i <16; i++){
var offset_i = offset + i;
var M_offset_i = M[offset_i];
M[offset_i]=((((M_offset_i <<8)|(M_offset_i >>>24))&0x00ff00ff)|(((M_offset_i <<24)|(M_offset_i >>>8))&0xff00ff00));}
var H = this._hash.words;
var M_offset_0 = M[offset +0];
var M_offset_1 = M[offset +1];
var M_offset_2 = M[offset +2];
var M_offset_3 = M[offset +3];
var M_offset_4 = M[offset +4];
var M_offset_5 = M[offset +5];
var M_offset_6 = M[offset +6];
var M_offset_7 = M[offset +7];
var M_offset_8 = M[offset +8];
var M_offset_9 = M[offset +9];
var M_offset_10 = M[offset +10];
var M_offset_11 = M[offset +11];
var M_offset_12 = M[offset +12];
var M_offset_13 = M[offset +13];
var M_offset_14 = M[offset +14];
var M_offset_15 = M[offset +15];
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
a =FF(a, b, c, d, M_offset_0,7, T[0]);
d =FF(d, a, b, c, M_offset_1,12, T[1]);
c =FF(c, d, a, b, M_offset_2,17, T[2]);
b =FF(b, c, d, a, M_offset_3,22, T[3]);
a =FF(a, b, c, d, M_offset_4,7, T[4]);
d =FF(d, a, b, c, M_offset_5,12, T[5]);
c =FF(c, d, a, b, M_offset_6,17, T[6]);
b =FF(b, c, d, a, M_offset_7,22, T[7]);
a =FF(a, b, c, d, M_offset_8,7, T[8]);
d =FF(d, a, b, c, M_offset_9,12, T[9]);
c =FF(c, d, a, b, M_offset_10,17, T[10]);
b =FF(b, c, d, a, M_offset_11,22, T[11]);
a =FF(a, b, c, d, M_offset_12,7, T[12]);
d =FF(d, a, b, c, M_offset_13,12, T[13]);
c =FF(c, d, a, b, M_offset_14,17, T[14]);
b =FF(b, c, d, a, M_offset_15,22, T[15]);
a =GG(a, b, c, d, M_offset_1,5, T[16]);
d =GG(d, a, b, c, M_offset_6,9, T[17]);
c =GG(c, d, a, b, M_offset_11,14, T[18]);
b =GG(b, c, d, a, M_offset_0,20, T[19]);
a =GG(a, b, c, d, M_offset_5,5, T[20]);
d =GG(d, a, b, c, M_offset_10,9, T[21]);
c =GG(c, d, a, b, M_offset_15,14, T[22]);
b =GG(b, c, d, a, M_offset_4,20, T[23]);
a =GG(a, b, c, d, M_offset_9,5, T[24]);
d =GG(d, a, b, c, M_offset_14,9, T[25]);
c =GG(c, d, a, b, M_offset_3,14, T[26]);
b =GG(b, c, d, a, M_offset_8,20, T[27]);
a =GG(a, b, c, d, M_offset_13,5, T[28]);
d =GG(d, a, b, c, M_offset_2,9, T[29]);
c =GG(c, d, a, b, M_offset_7,14, T[30]);
b =GG(b, c, d, a, M_offset_12,20, T[31]);
a =HH(a, b, c, d, M_offset_5,4, T[32]);
d =HH(d, a, b, c, M_offset_8,11, T[33]);
c =HH(c, d, a, b, M_offset_11,16, T[34]);
b =HH(b, c, d, a, M_offset_14,23, T[35]);
a =HH(a, b, c, d, M_offset_1,4, T[36]);
d =HH(d, a, b, c, M_offset_4,11, T[37]);
c =HH(c, d, a, b, M_offset_7,16, T[38]);
b =HH(b, c, d, a, M_offset_10,23, T[39]);
a =HH(a, b, c, d, M_offset_13,4, T[40]);
d =HH(d, a, b, c, M_offset_0,11, T[41]);
c =HH(c, d, a, b, M_offset_3,16, T[42]);
b =HH(b, c, d, a, M_offset_6,23, T[43]);
a =HH(a, b, c, d, M_offset_9,4, T[44]);
d =HH(d, a, b, c, M_offset_12,11, T[45]);
c =HH(c, d, a, b, M_offset_15,16, T[46]);
b =HH(b, c, d, a, M_offset_2,23, T[47]);
a =II(a, b, c, d, M_offset_0,6, T[48]);
d =II(d, a, b, c, M_offset_7,10, T[49]);
c =II(c, d, a, b, M_offset_14,15, T[50]);
b =II(b, c, d, a, M_offset_5,21, T[51]);
a =II(a, b, c, d, M_offset_12,6, T[52]);
d =II(d, a, b, c, M_offset_3,10, T[53]);
c =II(c, d, a, b, M_offset_10,15, T[54]);
b =II(b, c, d, a, M_offset_1,21, T[55]);
a =II(a, b, c, d, M_offset_8,6, T[56]);
d =II(d, a, b, c, M_offset_15,10, T[57]);
c =II(c, d, a, b, M_offset_6,15, T[58]);
b =II(b, c, d, a, M_offset_13,21, T[59]);
a =II(a, b, c, d, M_offset_4,6, T[60]);
d =II(d, a, b, c, M_offset_11,10, T[61]);
c =II(c, d, a, b, M_offset_2,15, T[62]);
b =II(b, c, d, a, M_offset_9,21, T[63]);
H[0]=(H[0]+ a)|0;
H[1]=(H[1]+ b)|0;
H[2]=(H[2]+ c)|0;
H[3]=(H[3]+ d)|0;},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
dataWords[nBitsLeft >>>5]|=0x80<<(24- nBitsLeft %32);
var nBitsTotalH = Math.floor(nBitsTotal /0x100000000);
var nBitsTotalL = nBitsTotal;
dataWords[(((nBitsLeft +64)>>>9)<<4)+15]=((((nBitsTotalH <<8)|(nBitsTotalH >>>24))&0x00ff00ff)|(((nBitsTotalH <<24)|(nBitsTotalH >>>8))&0xff00ff00));
dataWords[(((nBitsLeft +64)>>>9)<<4)+14]=((((nBitsTotalL <<8)|(nBitsTotalL >>>24))&0x00ff00ff)|(((nBitsTotalL <<24)|(nBitsTotalL >>>8))&0xff00ff00));
data.sigBytes =(dataWords.length +1)*4;
this._process();
var hash = this._hash;
var H = hash.words;for(var i =0; i <4; i++){
var H_i = H[i];
H[i]=(((H_i <<8)|(H_i >>>24))&0x00ff00ff)|(((H_i <<24)|(H_i >>>8))&0xff00ff00);}return hash;},
clone:function(){
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();return clone;}});
function FF(a, b, c, d, x, s, t){
var n = a +((b & c)|(~b & d))+ x + t;return((n << s)|(n >>>(32- s)))+ b;}
function GG(a, b, c, d, x, s, t){
var n = a +((b & d)|(c &~d))+ x + t;return((n << s)|(n >>>(32- s)))+ b;}
function HH(a, b, c, d, x, s, t){
var n = a +(b ^ c ^ d)+ x + t;return((n << s)|(n >>>(32- s)))+ b;}
function II(a, b, c, d, x, s, t){
var n = a +(c ^(b |~d))+ x + t;return((n << s)|(n >>>(32- s)))+ b;}
C.MD5 = Hasher._createHelper(MD5);
C.HmacMD5 = Hasher._createHmacHelper(MD5);}(Math));(function(){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
var W =[];
var SHA1 = C_algo.SHA1 = Hasher.extend({
_doReset:function(){
this._hash = new WordArray.init([0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0]);},
_doProcessBlock:function(M, offset){
var H = this._hash.words;
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
var e = H[4];for(var i =0; i <80; i++){if(i <16){
W[i]= M[offset + i]|0;}else{
var n = W[i -3]^ W[i -8]^ W[i -14]^ W[i -16];
W[i]=(n <<1)|(n >>>31);}
var t =((a <<5)|(a >>>27))+ e + W[i];if(i <20){
t +=((b & c)|(~b & d))+0x5a827999;}elseif(i <40){
t +=(b ^ c ^ d)+0x6ed9eba1;}elseif(i <60){
t +=((b & c)|(b & d)|(c & d))-0x70e44324;}else{
t +=(b ^ c ^ d)-0x359d3e2a;}
e = d;
d = c;
c =(b <<30)|(b >>>2);
b = a;
a = t;}
H[0]=(H[0]+ a)|0;
H[1]=(H[1]+ b)|0;
H[2]=(H[2]+ c)|0;
H[3]=(H[3]+ d)|0;
H[4]=(H[4]+ e)|0;},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
dataWords[nBitsLeft >>>5]|=0x80<<(24- nBitsLeft %32);
dataWords[(((nBitsLeft +64)>>>9)<<4)+14]= Math.floor(nBitsTotal /0x100000000);
dataWords[(((nBitsLeft +64)>>>9)<<4)+15]= nBitsTotal;
data.sigBytes = dataWords.length *4;
this._process();return this._hash;},
clone:function(){
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();return clone;}});
C.SHA1 = Hasher._createHelper(SHA1);
C.HmacSHA1 = Hasher._createHmacHelper(SHA1);}());(function(Math){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
var H =[];
var K =[];(function(){
function isPrime(n){
var sqrtN = Math.sqrt(n);for(var factor =2; factor <= sqrtN; factor++){if(!(n % factor)){return false;}}return true;}
function getFractionalBits(n){return((n -(n |0))*0x100000000)|0;}
var n =2;
var nPrime =0;while(nPrime <64){if(isPrime(n)){if(nPrime <8){
H[nPrime]=getFractionalBits(Math.pow(n,1/2));}
K[nPrime]=getFractionalBits(Math.pow(n,1/3));
nPrime++;}
n++;}}());
var W =[];
var SHA256 = C_algo.SHA256 = Hasher.extend({
_doReset:function(){
this._hash = new WordArray.init(H.slice(0));},
_doProcessBlock:function(M, offset){
var H = this._hash.words;
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
var e = H[4];
var f = H[5];
var g = H[6];
var h = H[7];for(var i =0; i <64; i++){if(i <16){
W[i]= M[offset + i]|0;}else{
var gamma0x = W[i -15];
var gamma0 =((gamma0x <<25)|(gamma0x >>>7))^((gamma0x <<14)|(gamma0x >>>18))^(gamma0x >>>3);
var gamma1x = W[i -2];
var gamma1 =((gamma1x <<15)|(gamma1x >>>17))^((gamma1x <<13)|(gamma1x >>>19))^(gamma1x >>>10);
W[i]= gamma0 + W[i -7]+ gamma1 + W[i -16];}
var ch =(e & f)^(~e & g);
var maj =(a & b)^(a & c)^(b & c);
var sigma0 =((a <<30)|(a >>>2))^((a <<19)|(a >>>13))^((a <<10)|(a >>>22));
var sigma1 =((e <<26)|(e >>>6))^((e <<21)|(e >>>11))^((e <<7)|(e >>>25));
var t1 = h + sigma1 + ch + K[i]+ W[i];
var t2 = sigma0 + maj;
h = g;
g = f;
f = e;
e =(d + t1)|0;
d = c;
c = b;
b = a;
a =(t1 + t2)|0;}
H[0]=(H[0]+ a)|0;
H[1]=(H[1]+ b)|0;
H[2]=(H[2]+ c)|0;
H[3]=(H[3]+ d)|0;
H[4]=(H[4]+ e)|0;
H[5]=(H[5]+ f)|0;
H[6]=(H[6]+ g)|0;
H[7]=(H[7]+ h)|0;},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
dataWords[nBitsLeft >>>5]|=0x80<<(24- nBitsLeft %32);
dataWords[(((nBitsLeft +64)>>>9)<<4)+14]= Math.floor(nBitsTotal /0x100000000);
dataWords[(((nBitsLeft +64)>>>9)<<4)+15]= nBitsTotal;
data.sigBytes = dataWords.length *4;
this._process();return this._hash;},
clone:function(){
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();return clone;}});
C.SHA256 = Hasher._createHelper(SHA256);
C.HmacSHA256 = Hasher._createHmacHelper(SHA256);}(Math));(function(){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_enc = C.enc;
var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE ={
stringify:function(wordArray){
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var utf16Chars =[];for(var i =0; i < sigBytes; i +=2){
var codePoint =(words[i >>>2]>>>(16-(i %4)*8))&0xffff;
utf16Chars.push(String.fromCharCode(codePoint));}return utf16Chars.join('');},
parse:function(utf16Str){
var utf16StrLength = utf16Str.length;
var words =[];for(var i =0; i < utf16StrLength; i++){
words[i >>>1]|= utf16Str.charCodeAt(i)<<(16-(i %2)*16);}return WordArray.create(words, utf16StrLength *2);}};
C_enc.Utf16LE ={
stringify:function(wordArray){
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var utf16Chars =[];for(var i =0; i < sigBytes; i +=2){
var codePoint =swapEndian((words[i >>>2]>>>(16-(i %4)*8))&0xffff);
utf16Chars.push(String.fromCharCode(codePoint));}return utf16Chars.join('');},
parse:function(utf16Str){
var utf16StrLength = utf16Str.length;
var words =[];for(var i =0; i < utf16StrLength; i++){
words[i >>>1]|=swapEndian(utf16Str.charCodeAt(i)<<(16-(i %2)*16));}return WordArray.create(words, utf16StrLength *2);}};
function swapEndian(word){return((word <<8)&0xff00ff00)|((word >>>8)&0x00ff00ff);}}());(function(){if(typeof ArrayBuffer !='function'){return;}
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var superInit = WordArray.init;
var subInit = WordArray.init =function(typedArray){if(typedArray instanceof ArrayBuffer){
typedArray = new Uint8Array(typedArray);}if(typedArray instanceof Int8Array ||(typeof Uint8ClampedArray !=="undefined"&& typedArray instanceof Uint8ClampedArray)|| typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array){
typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);}if(typedArray instanceof Uint8Array){
var typedArrayByteLength = typedArray.byteLength;
var words =[];for(var i =0; i < typedArrayByteLength; i++){
words[i >>>2]|= typedArray[i]<<(24-(i %4)*8);}
superInit.call(this, words, typedArrayByteLength);}else{
superInit.apply(this, arguments);}};
subInit.prototype = WordArray;}());(function(Math){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
var _zl = WordArray.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]);
var _zr = WordArray.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]);
var _sl = WordArray.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]);
var _sr = WordArray.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]);
var _hl = WordArray.create([0x00000000,0x5A827999,0x6ED9EBA1,0x8F1BBCDC,0xA953FD4E]);
var _hr = WordArray.create([0x50A28BE6,0x5C4DD124,0x6D703EF3,0x7A6D76E9,0x00000000]);
var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
_doReset:function(){
this._hash = WordArray.create([0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476,0xC3D2E1F0]);},
_doProcessBlock:function(M, offset){for(var i =0; i <16; i++){
var offset_i = offset + i;
var M_offset_i = M[offset_i];
M[offset_i]=((((M_offset_i <<8)|(M_offset_i >>>24))&0x00ff00ff)|(((M_offset_i <<24)|(M_offset_i >>>8))&0xff00ff00));}
var H = this._hash.words;
var hl = _hl.words;
var hr = _hr.words;
var zl = _zl.words;
var zr = _zr.words;
var sl = _sl.words;
var sr = _sr.words;
var al, bl, cl, dl, el;
var ar, br, cr, dr, er;
ar = al = H[0];
br = bl = H[1];
cr = cl = H[2];
dr = dl = H[3];
er = el = H[4];
var t;for(var i =0; i <80; i +=1){
t =(al + M[offset + zl[i]])|0;if(i <16){
t +=f1(bl, cl, dl)+ hl[0];}elseif(i <32){
t +=f2(bl, cl, dl)+ hl[1];}elseif(i <48){
t +=f3(bl, cl, dl)+ hl[2];}elseif(i <64){
t +=f4(bl, cl, dl)+ hl[3];}else{
t +=f5(bl, cl, dl)+ hl[4];}
t = t |0;
t =rotl(t, sl[i]);
t =(t + el)|0;
al = el;
el = dl;
dl =rotl(cl,10);
cl = bl;
bl = t;
t =(ar + M[offset + zr[i]])|0;if(i <16){
t +=f5(br, cr, dr)+ hr[0];}elseif(i <32){
t +=f4(br, cr, dr)+ hr[1];}elseif(i <48){
t +=f3(br, cr, dr)+ hr[2];}elseif(i <64){
t +=f2(br, cr, dr)+ hr[3];}else{
t +=f1(br, cr, dr)+ hr[4];}
t = t |0;
t =rotl(t, sr[i]);
t =(t + er)|0;
ar = er;
er = dr;
dr =rotl(cr,10);
cr = br;
br = t;}
t =(H[1]+ cl + dr)|0;
H[1]=(H[2]+ dl + er)|0;
H[2]=(H[3]+ el + ar)|0;
H[3]=(H[4]+ al + br)|0;
H[4]=(H[0]+ bl + cr)|0;
H[0]= t;},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
dataWords[nBitsLeft >>>5]|=0x80<<(24- nBitsLeft %32);
dataWords[(((nBitsLeft +64)>>>9)<<4)+14]=((((nBitsTotal <<8)|(nBitsTotal >>>24))&0x00ff00ff)|(((nBitsTotal <<24)|(nBitsTotal >>>8))&0xff00ff00));
data.sigBytes =(dataWords.length +1)*4;
this._process();
var hash = this._hash;
var H = hash.words;for(var i =0; i <5; i++){
var H_i = H[i];
H[i]=(((H_i <<8)|(H_i >>>24))&0x00ff00ff)|(((H_i <<24)|(H_i >>>8))&0xff00ff00);}return hash;},
clone:function(){
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();return clone;}});
function f1(x, y, z){return((x)^(y)^(z));}
function f2(x, y, z){return(((x)&(y))|((~x)&(z)));}
function f3(x, y, z){return(((x)|(~(y)))^(z));}
function f4(x, y, z){return(((x)&(z))|((y)&(~(z))));}
function f5(x, y, z){return((x)^((y)|(~(z))));}
function rotl(x, n){return(x << n)|(x >>>(32- n));}
C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);}(Math));(function(){
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var C_enc = C.enc;
var Utf8 = C_enc.Utf8;
var C_algo = C.algo;
var HMAC = C_algo.HMAC = Base.extend({
init:function(hasher, key){
hasher = this._hasher = new hasher.init();if(typeof key =='string'){
key = Utf8.parse(key);}
var hasherBlockSize = hasher.blockSize;
var hasherBlockSizeBytes = hasherBlockSize *4;if(key.sigBytes > hasherBlockSizeBytes){
key = hasher.finalize(key);}
key.clamp();
var oKey = this._oKey = key.clone();
var iKey = this._iKey = key.clone();
var oKeyWords = oKey.words;
var iKeyWords = iKey.words;for(var i =0; i < hasherBlockSize; i++){
oKeyWords[i]^=0x5c5c5c5c;
iKeyWords[i]^=0x36363636;}
oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
this.reset();},
reset:function(){
var hasher = this._hasher;
hasher.reset();
hasher.update(this._iKey);},
update:function(messageUpdate){
this._hasher.update(messageUpdate);return this;},
finalize:function(messageUpdate){
var hasher = this._hasher;
var innerHash = hasher.finalize(messageUpdate);
hasher.reset();
var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));return hmac;}});}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var SHA1 = C_algo.SHA1;
var HMAC = C_algo.HMAC;
var PBKDF2 = C_algo.PBKDF2 = Base.extend({
cfg: Base.extend({
keySize:128/32,
hasher: SHA1,
iterations:1}),
init:function(cfg){
this.cfg = this.cfg.extend(cfg);},
compute:function(password, salt){
var cfg = this.cfg;
var hmac = HMAC.create(cfg.hasher, password);
var derivedKey = WordArray.create();
var blockIndex = WordArray.create([0x00000001]);
var derivedKeyWords = derivedKey.words;
var blockIndexWords = blockIndex.words;
var keySize = cfg.keySize;
var iterations = cfg.iterations;while(derivedKeyWords.length < keySize){
var block = hmac.update(salt).finalize(blockIndex);
hmac.reset();
var blockWords = block.words;
var blockWordsLength = blockWords.length;
var intermediate = block;for(var i =1; i < iterations; i++){
intermediate = hmac.finalize(intermediate);
hmac.reset();
var intermediateWords = intermediate.words;for(var j =0; j < blockWordsLength; j++){
blockWords[j]^= intermediateWords[j];}}
derivedKey.concat(block);
blockIndexWords[0]++;}
derivedKey.sigBytes = keySize *4;return derivedKey;}});
C.PBKDF2 =function(password, salt, cfg){return PBKDF2.create(cfg).compute(password, salt);};}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var MD5 = C_algo.MD5;
var EvpKDF = C_algo.EvpKDF = Base.extend({
cfg: Base.extend({
keySize:128/32,
hasher: MD5,
iterations:1}),
init:function(cfg){
this.cfg = this.cfg.extend(cfg);},
compute:function(password, salt){
var cfg = this.cfg;
var hasher = cfg.hasher.create();
var derivedKey = WordArray.create();
var derivedKeyWords = derivedKey.words;
var keySize = cfg.keySize;
var iterations = cfg.iterations;while(derivedKeyWords.length < keySize){if(block){
hasher.update(block);}
var block = hasher.update(password).finalize(salt);
hasher.reset();for(var i =1; i < iterations; i++){
block = hasher.finalize(block);
hasher.reset();}
derivedKey.concat(block);}
derivedKey.sigBytes = keySize *4;return derivedKey;}});
C.EvpKDF =function(password, salt, cfg){return EvpKDF.create(cfg).compute(password, salt);};}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var SHA256 = C_algo.SHA256;
var SHA224 = C_algo.SHA224 = SHA256.extend({
_doReset:function(){
this._hash = new WordArray.init([0xc1059ed8,0x367cd507,0x3070dd17,0xf70e5939,0xffc00b31,0x68581511,0x64f98fa7,0xbefa4fa4]);},
_doFinalize:function(){
var hash = SHA256._doFinalize.call(this);
hash.sigBytes -=4;return hash;}});
C.SHA224 = SHA256._createHelper(SHA224);
C.HmacSHA224 = SHA256._createHmacHelper(SHA224);}());(function(undefined){
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var X32WordArray = C_lib.WordArray;
var C_x64 = C.x64 ={};
var X64Word = C_x64.Word = Base.extend({
init:function(high, low){
this.high = high;
this.low = low;}});
var X64WordArray = C_x64.WordArray = Base.extend({
init:function(words, sigBytes){
words = this.words = words ||[];if(sigBytes != undefined){
this.sigBytes = sigBytes;}else{
this.sigBytes = words.length *8;}},
toX32:function(){
var x64Words = this.words;
var x64WordsLength = x64Words.length;
var x32Words =[];for(var i =0; i < x64WordsLength; i++){
var x64Word = x64Words[i];
x32Words.push(x64Word.high);
x32Words.push(x64Word.low);}return X32WordArray.create(x32Words, this.sigBytes);},
clone:function(){
var clone = Base.clone.call(this);
var words = clone.words = this.words.slice(0);
var wordsLength = words.length;for(var i =0; i < wordsLength; i++){
words[i]= words[i].clone();}return clone;}});}());(function(Math){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var C_algo = C.algo;
var RHO_OFFSETS =[];
var PI_INDEXES =[];
var ROUND_CONSTANTS =[];(function(){
var x =1,
y =0;for(var t =0; t <24; t++){
RHO_OFFSETS[x +5* y]=((t +1)*(t +2)/2)%64;
var newX = y %5;
var newY =(2* x +3* y)%5;
x = newX;
y = newY;}for(var x =0; x <5; x++){for(var y =0; y <5; y++){
PI_INDEXES[x +5* y]= y +((2* x +3* y)%5)*5;}}
var LFSR =0x01;for(var i =0; i <24; i++){
var roundConstantMsw =0;
var roundConstantLsw =0;for(var j =0; j <7; j++){if(LFSR &0x01){
var bitPosition =(1<< j)-1;if(bitPosition <32){
roundConstantLsw ^=1<< bitPosition;}else{
roundConstantMsw ^=1<<(bitPosition -32);}}if(LFSR &0x80){
LFSR =(LFSR <<1)^0x71;}else{
LFSR <<=1;}}
ROUND_CONSTANTS[i]= X64Word.create(roundConstantMsw, roundConstantLsw);}}());
var T =[];(function(){for(var i =0; i <25; i++){
T[i]= X64Word.create();}}());
var SHA3 = C_algo.SHA3 = Hasher.extend({
cfg: Hasher.cfg.extend({
outputLength:512}),
_doReset:function(){
var state = this._state =[]for(var i =0; i <25; i++){
state[i]= new X64Word.init();}
this.blockSize =(1600-2* this.cfg.outputLength)/32;},
_doProcessBlock:function(M, offset){
var state = this._state;
var nBlockSizeLanes = this.blockSize /2;for(var i =0; i < nBlockSizeLanes; i++){
var M2i = M[offset +2* i];
var M2i1 = M[offset +2* i +1];
M2i =((((M2i <<8)|(M2i >>>24))&0x00ff00ff)|(((M2i <<24)|(M2i >>>8))&0xff00ff00));
M2i1 =((((M2i1 <<8)|(M2i1 >>>24))&0x00ff00ff)|(((M2i1 <<24)|(M2i1 >>>8))&0xff00ff00));
var lane = state[i];
lane.high ^= M2i1;
lane.low ^= M2i;}for(var round =0; round <24; round++){for(var x =0; x <5; x++){
var tMsw =0,
tLsw =0;for(var y =0; y <5; y++){
var lane = state[x +5* y];
tMsw ^= lane.high;
tLsw ^= lane.low;}
var Tx = T[x];
Tx.high = tMsw;
Tx.low = tLsw;}for(var x =0; x <5; x++){
var Tx4 = T[(x +4)%5];
var Tx1 = T[(x +1)%5];
var Tx1Msw = Tx1.high;
var Tx1Lsw = Tx1.low;
var tMsw = Tx4.high ^((Tx1Msw <<1)|(Tx1Lsw >>>31));
var tLsw = Tx4.low ^((Tx1Lsw <<1)|(Tx1Msw >>>31));for(var y =0; y <5; y++){
var lane = state[x +5* y];
lane.high ^= tMsw;
lane.low ^= tLsw;}}for(var laneIndex =1; laneIndex <25; laneIndex++){
var lane = state[laneIndex];
var laneMsw = lane.high;
var laneLsw = lane.low;
var rhoOffset = RHO_OFFSETS[laneIndex];if(rhoOffset <32){
var tMsw =(laneMsw << rhoOffset)|(laneLsw >>>(32- rhoOffset));
var tLsw =(laneLsw << rhoOffset)|(laneMsw >>>(32- rhoOffset));}else{
var tMsw =(laneLsw <<(rhoOffset -32))|(laneMsw >>>(64- rhoOffset));
var tLsw =(laneMsw <<(rhoOffset -32))|(laneLsw >>>(64- rhoOffset));}
var TPiLane = T[PI_INDEXES[laneIndex]];
TPiLane.high = tMsw;
TPiLane.low = tLsw;}
var T0 = T[0];
var state0 = state[0];
T0.high = state0.high;
T0.low = state0.low;for(var x =0; x <5; x++){for(var y =0; y <5; y++){
var laneIndex = x +5* y;
var lane = state[laneIndex];
var TLane = T[laneIndex];
var Tx1Lane = T[((x +1)%5)+5* y];
var Tx2Lane = T[((x +2)%5)+5* y];
lane.high = TLane.high ^(~Tx1Lane.high & Tx2Lane.high);
lane.low = TLane.low ^(~Tx1Lane.low & Tx2Lane.low);}}
var lane = state[0];
var roundConstant = ROUND_CONSTANTS[round];
lane.high ^= roundConstant.high;
lane.low ^= roundConstant.low;;}},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
var blockSizeBits = this.blockSize *32;
dataWords[nBitsLeft >>>5]|=0x1<<(24- nBitsLeft %32);
dataWords[((Math.ceil((nBitsLeft +1)/ blockSizeBits)* blockSizeBits)>>>5)-1]|=0x80;
data.sigBytes = dataWords.length *4;
this._process();
var state = this._state;
var outputLengthBytes = this.cfg.outputLength /8;
var outputLengthLanes = outputLengthBytes /8;
var hashWords =[];for(var i =0; i < outputLengthLanes; i++){
var lane = state[i];
var laneMsw = lane.high;
var laneLsw = lane.low;
laneMsw =((((laneMsw <<8)|(laneMsw >>>24))&0x00ff00ff)|(((laneMsw <<24)|(laneMsw >>>8))&0xff00ff00));
laneLsw =((((laneLsw <<8)|(laneLsw >>>24))&0x00ff00ff)|(((laneLsw <<24)|(laneLsw >>>8))&0xff00ff00));
hashWords.push(laneLsw);
hashWords.push(laneMsw);}return new WordArray.init(hashWords, outputLengthBytes);},
clone:function(){
var clone = Hasher.clone.call(this);
var state = clone._state = this._state.slice(0);for(var i =0; i <25; i++){
state[i]= state[i].clone();}return clone;}});
C.SHA3 = Hasher._createHelper(SHA3);
C.HmacSHA3 = Hasher._createHmacHelper(SHA3);}(Math));(function(){
var C = CryptoJS;
var C_lib = C.lib;
var Hasher = C_lib.Hasher;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var X64WordArray = C_x64.WordArray;
var C_algo = C.algo;
function X64Word_create(){return X64Word.create.apply(X64Word, arguments);}
var K =[X64Word_create(0x428a2f98,0xd728ae22),X64Word_create(0x71374491,0x23ef65cd),X64Word_create(0xb5c0fbcf,0xec4d3b2f),X64Word_create(0xe9b5dba5,0x8189dbbc),X64Word_create(0x3956c25b,0xf348b538),X64Word_create(0x59f111f1,0xb605d019),X64Word_create(0x923f82a4,0xaf194f9b),X64Word_create(0xab1c5ed5,0xda6d8118),X64Word_create(0xd807aa98,0xa3030242),X64Word_create(0x12835b01,0x45706fbe),X64Word_create(0x243185be,0x4ee4b28c),X64Word_create(0x550c7dc3,0xd5ffb4e2),X64Word_create(0x72be5d74,0xf27b896f),X64Word_create(0x80deb1fe,0x3b1696b1),X64Word_create(0x9bdc06a7,0x25c71235),X64Word_create(0xc19bf174,0xcf692694),X64Word_create(0xe49b69c1,0x9ef14ad2),X64Word_create(0xefbe4786,0x384f25e3),X64Word_create(0x0fc19dc6,0x8b8cd5b5),X64Word_create(0x240ca1cc,0x77ac9c65),X64Word_create(0x2de92c6f,0x592b0275),X64Word_create(0x4a7484aa,0x6ea6e483),X64Word_create(0x5cb0a9dc,0xbd41fbd4),X64Word_create(0x76f988da,0x831153b5),X64Word_create(0x983e5152,0xee66dfab),X64Word_create(0xa831c66d,0x2db43210),X64Word_create(0xb00327c8,0x98fb213f),X64Word_create(0xbf597fc7,0xbeef0ee4),X64Word_create(0xc6e00bf3,0x3da88fc2),X64Word_create(0xd5a79147,0x930aa725),X64Word_create(0x06ca6351,0xe003826f),X64Word_create(0x14292967,0x0a0e6e70),X64Word_create(0x27b70a85,0x46d22ffc),X64Word_create(0x2e1b2138,0x5c26c926),X64Word_create(0x4d2c6dfc,0x5ac42aed),X64Word_create(0x53380d13,0x9d95b3df),X64Word_create(0x650a7354,0x8baf63de),X64Word_create(0x766a0abb,0x3c77b2a8),X64Word_create(0x81c2c92e,0x47edaee6),X64Word_create(0x92722c85,0x1482353b),X64Word_create(0xa2bfe8a1,0x4cf10364),X64Word_create(0xa81a664b,0xbc423001),X64Word_create(0xc24b8b70,0xd0f89791),X64Word_create(0xc76c51a3,0x0654be30),X64Word_create(0xd192e819,0xd6ef5218),X64Word_create(0xd6990624,0x5565a910),X64Word_create(0xf40e3585,0x5771202a),X64Word_create(0x106aa070,0x32bbd1b8),X64Word_create(0x19a4c116,0xb8d2d0c8),X64Word_create(0x1e376c08,0x5141ab53),X64Word_create(0x2748774c,0xdf8eeb99),X64Word_create(0x34b0bcb5,0xe19b48a8),X64Word_create(0x391c0cb3,0xc5c95a63),X64Word_create(0x4ed8aa4a,0xe3418acb),X64Word_create(0x5b9cca4f,0x7763e373),X64Word_create(0x682e6ff3,0xd6b2b8a3),X64Word_create(0x748f82ee,0x5defb2fc),X64Word_create(0x78a5636f,0x43172f60),X64Word_create(0x84c87814,0xa1f0ab72),X64Word_create(0x8cc70208,0x1a6439ec),X64Word_create(0x90befffa,0x23631e28),X64Word_create(0xa4506ceb,0xde82bde9),X64Word_create(0xbef9a3f7,0xb2c67915),X64Word_create(0xc67178f2,0xe372532b),X64Word_create(0xca273ece,0xea26619c),X64Word_create(0xd186b8c7,0x21c0c207),X64Word_create(0xeada7dd6,0xcde0eb1e),X64Word_create(0xf57d4f7f,0xee6ed178),X64Word_create(0x06f067aa,0x72176fba),X64Word_create(0x0a637dc5,0xa2c898a6),X64Word_create(0x113f9804,0xbef90dae),X64Word_create(0x1b710b35,0x131c471b),X64Word_create(0x28db77f5,0x23047d84),X64Word_create(0x32caab7b,0x40c72493),X64Word_create(0x3c9ebe0a,0x15c9bebc),X64Word_create(0x431d67c4,0x9c100d4c),X64Word_create(0x4cc5d4be,0xcb3e42b6),X64Word_create(0x597f299c,0xfc657e2a),X64Word_create(0x5fcb6fab,0x3ad6faec),X64Word_create(0x6c44198c,0x4a475817)];
var W =[];(function(){for(var i =0; i <80; i++){
W[i]=X64Word_create();}}());
var SHA512 = C_algo.SHA512 = Hasher.extend({
_doReset:function(){
this._hash = new X64WordArray.init([new X64Word.init(0x6a09e667,0xf3bcc908), new X64Word.init(0xbb67ae85,0x84caa73b), new X64Word.init(0x3c6ef372,0xfe94f82b), new X64Word.init(0xa54ff53a,0x5f1d36f1), new X64Word.init(0x510e527f,0xade682d1), new X64Word.init(0x9b05688c,0x2b3e6c1f), new X64Word.init(0x1f83d9ab,0xfb41bd6b), new X64Word.init(0x5be0cd19,0x137e2179)]);},
_doProcessBlock:function(M, offset){
var H = this._hash.words;
var H0 = H[0];
var H1 = H[1];
var H2 = H[2];
var H3 = H[3];
var H4 = H[4];
var H5 = H[5];
var H6 = H[6];
var H7 = H[7];
var H0h = H0.high;
var H0l = H0.low;
var H1h = H1.high;
var H1l = H1.low;
var H2h = H2.high;
var H2l = H2.low;
var H3h = H3.high;
var H3l = H3.low;
var H4h = H4.high;
var H4l = H4.low;
var H5h = H5.high;
var H5l = H5.low;
var H6h = H6.high;
var H6l = H6.low;
var H7h = H7.high;
var H7l = H7.low;
var ah = H0h;
var al = H0l;
var bh = H1h;
var bl = H1l;
var ch = H2h;
var cl = H2l;
var dh = H3h;
var dl = H3l;
var eh = H4h;
var el = H4l;
var fh = H5h;
var fl = H5l;
var gh = H6h;
var gl = H6l;
var hh = H7h;
var hl = H7l;for(var i =0; i <80; i++){
var Wi = W[i];if(i <16){
var Wih = Wi.high = M[offset + i *2]|0;
var Wil = Wi.low = M[offset + i *2+1]|0;}else{
var gamma0x = W[i -15];
var gamma0xh = gamma0x.high;
var gamma0xl = gamma0x.low;
var gamma0h =((gamma0xh >>>1)|(gamma0xl <<31))^((gamma0xh >>>8)|(gamma0xl <<24))^(gamma0xh >>>7);
var gamma0l =((gamma0xl >>>1)|(gamma0xh <<31))^((gamma0xl >>>8)|(gamma0xh <<24))^((gamma0xl >>>7)|(gamma0xh <<25));
var gamma1x = W[i -2];
var gamma1xh = gamma1x.high;
var gamma1xl = gamma1x.low;
var gamma1h =((gamma1xh >>>19)|(gamma1xl <<13))^((gamma1xh <<3)|(gamma1xl >>>29))^(gamma1xh >>>6);
var gamma1l =((gamma1xl >>>19)|(gamma1xh <<13))^((gamma1xl <<3)|(gamma1xh >>>29))^((gamma1xl >>>6)|(gamma1xh <<26));
var Wi7 = W[i -7];
var Wi7h = Wi7.high;
var Wi7l = Wi7.low;
var Wi16 = W[i -16];
var Wi16h = Wi16.high;
var Wi16l = Wi16.low;
var Wil = gamma0l + Wi7l;
var Wih = gamma0h + Wi7h +((Wil >>>0)<(gamma0l >>>0)?1:0);
var Wil = Wil + gamma1l;
var Wih = Wih + gamma1h +((Wil >>>0)<(gamma1l >>>0)?1:0);
var Wil = Wil + Wi16l;
var Wih = Wih + Wi16h +((Wil >>>0)<(Wi16l >>>0)?1:0);
Wi.high = Wih;
Wi.low = Wil;}
var chh =(eh & fh)^(~eh & gh);
var chl =(el & fl)^(~el & gl);
var majh =(ah & bh)^(ah & ch)^(bh & ch);
var majl =(al & bl)^(al & cl)^(bl & cl);
var sigma0h =((ah >>>28)|(al <<4))^((ah <<30)|(al >>>2))^((ah <<25)|(al >>>7));
var sigma0l =((al >>>28)|(ah <<4))^((al <<30)|(ah >>>2))^((al <<25)|(ah >>>7));
var sigma1h =((eh >>>14)|(el <<18))^((eh >>>18)|(el <<14))^((eh <<23)|(el >>>9));
var sigma1l =((el >>>14)|(eh <<18))^((el >>>18)|(eh <<14))^((el <<23)|(eh >>>9));
var Ki = K[i];
var Kih = Ki.high;
var Kil = Ki.low;
var t1l = hl + sigma1l;
var t1h = hh + sigma1h +((t1l >>>0)<(hl >>>0)?1:0);
var t1l = t1l + chl;
var t1h = t1h + chh +((t1l >>>0)<(chl >>>0)?1:0);
var t1l = t1l + Kil;
var t1h = t1h + Kih +((t1l >>>0)<(Kil >>>0)?1:0);
var t1l = t1l + Wil;
var t1h = t1h + Wih +((t1l >>>0)<(Wil >>>0)?1:0);
var t2l = sigma0l + majl;
var t2h = sigma0h + majh +((t2l >>>0)<(sigma0l >>>0)?1:0);
hh = gh;
hl = gl;
gh = fh;
gl = fl;
fh = eh;
fl = el;
el =(dl + t1l)|0;
eh =(dh + t1h +((el >>>0)<(dl >>>0)?1:0))|0;
dh = ch;
dl = cl;
ch = bh;
cl = bl;
bh = ah;
bl = al;
al =(t1l + t2l)|0;
ah =(t1h + t2h +((al >>>0)<(t1l >>>0)?1:0))|0;}
H0l = H0.low =(H0l + al);
H0.high =(H0h + ah +((H0l >>>0)<(al >>>0)?1:0));
H1l = H1.low =(H1l + bl);
H1.high =(H1h + bh +((H1l >>>0)<(bl >>>0)?1:0));
H2l = H2.low =(H2l + cl);
H2.high =(H2h + ch +((H2l >>>0)<(cl >>>0)?1:0));
H3l = H3.low =(H3l + dl);
H3.high =(H3h + dh +((H3l >>>0)<(dl >>>0)?1:0));
H4l = H4.low =(H4l + el);
H4.high =(H4h + eh +((H4l >>>0)<(el >>>0)?1:0));
H5l = H5.low =(H5l + fl);
H5.high =(H5h + fh +((H5l >>>0)<(fl >>>0)?1:0));
H6l = H6.low =(H6l + gl);
H6.high =(H6h + gh +((H6l >>>0)<(gl >>>0)?1:0));
H7l = H7.low =(H7l + hl);
H7.high =(H7h + hh +((H7l >>>0)<(hl >>>0)?1:0));},
_doFinalize:function(){
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes *8;
var nBitsLeft = data.sigBytes *8;
dataWords[nBitsLeft >>>5]|=0x80<<(24- nBitsLeft %32);
dataWords[(((nBitsLeft +128)>>>10)<<5)+30]= Math.floor(nBitsTotal /0x100000000);
dataWords[(((nBitsLeft +128)>>>10)<<5)+31]= nBitsTotal;
data.sigBytes = dataWords.length *4;
this._process();
var hash = this._hash.toX32();return hash;},
clone:function(){
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();return clone;},
blockSize:1024/32});
C.SHA512 = Hasher._createHelper(SHA512);
C.HmacSHA512 = Hasher._createHmacHelper(SHA512);}());(function(){
var C = CryptoJS;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var X64WordArray = C_x64.WordArray;
var C_algo = C.algo;
var SHA512 = C_algo.SHA512;
var SHA384 = C_algo.SHA384 = SHA512.extend({
_doReset:function(){
this._hash = new X64WordArray.init([new X64Word.init(0xcbbb9d5d,0xc1059ed8), new X64Word.init(0x629a292a,0x367cd507), new X64Word.init(0x9159015a,0x3070dd17), new X64Word.init(0x152fecd8,0xf70e5939), new X64Word.init(0x67332667,0xffc00b31), new X64Word.init(0x8eb44a87,0x68581511), new X64Word.init(0xdb0c2e0d,0x64f98fa7), new X64Word.init(0x47b5481d,0xbefa4fa4)]);},
_doFinalize:function(){
var hash = SHA512._doFinalize.call(this);
hash.sigBytes -=16;return hash;}});
C.SHA384 = SHA512._createHelper(SHA384);
C.HmacSHA384 = SHA512._createHmacHelper(SHA384);}());
CryptoJS.lib.Cipher ||(function(undefined){
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
var C_enc = C.enc;
var Utf8 = C_enc.Utf8;
var Base64 = C_enc.Base64;
var C_algo = C.algo;
var EvpKDF = C_algo.EvpKDF;
var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
cfg: Base.extend(),
createEncryptor:function(key, cfg){return this.create(this._ENC_XFORM_MODE, key, cfg);},
createDecryptor:function(key, cfg){return this.create(this._DEC_XFORM_MODE, key, cfg);},
init:function(xformMode, key, cfg){
this.cfg = this.cfg.extend(cfg);
this._xformMode = xformMode;
this._key = key;
this.reset();},
reset:function(){
BufferedBlockAlgorithm.reset.call(this);
this._doReset();},
process:function(dataUpdate){
this._append(dataUpdate);return this._process();},
finalize:function(dataUpdate){if(dataUpdate){
this._append(dataUpdate);}
var finalProcessedData = this._doFinalize();return finalProcessedData;},
keySize:128/32,
ivSize:128/32,
_ENC_XFORM_MODE:1,
_DEC_XFORM_MODE:2,
_createHelper:(function(){
function selectCipherStrategy(key){if(typeof key =='string'){return PasswordBasedCipher;}else{return SerializableCipher;}}returnfunction(cipher){return{
encrypt:function(message, key, cfg){returnselectCipherStrategy(key).encrypt(cipher, message, key, cfg);},
decrypt:function(ciphertext, key, cfg){returnselectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);}};};}())});
var StreamCipher = C_lib.StreamCipher = Cipher.extend({
_doFinalize:function(){
var finalProcessedBlocks = this._process(!!'flush');return finalProcessedBlocks;},
blockSize:1});
var C_mode = C.mode ={};
var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
createEncryptor:function(cipher, iv){return this.Encryptor.create(cipher, iv);},
createDecryptor:function(cipher, iv){return this.Decryptor.create(cipher, iv);},
init:function(cipher, iv){
this._cipher = cipher;
this._iv = iv;}});
var CBC = C_mode.CBC =(function(){
var CBC = BlockCipherMode.extend();
CBC.Encryptor = CBC.extend({
processBlock:function(words, offset){
var cipher = this._cipher;
var blockSize = cipher.blockSize;
xorBlock.call(this, words, offset, blockSize);
cipher.encryptBlock(words, offset);
this._prevBlock = words.slice(offset, offset + blockSize);}});
CBC.Decryptor = CBC.extend({
processBlock:function(words, offset){
var cipher = this._cipher;
var blockSize = cipher.blockSize;
var thisBlock = words.slice(offset, offset + blockSize);
cipher.decryptBlock(words, offset);
xorBlock.call(this, words, offset, blockSize);
this._prevBlock = thisBlock;}});
function xorBlock(words, offset, blockSize){
var iv = this._iv;if(iv){
var block = iv;
this._iv = undefined;}else{
var block = this._prevBlock;}for(var i =0; i < blockSize; i++){
words[offset + i]^= block[i];}}return CBC;}());
var C_pad = C.pad ={};
var Pkcs7 = C_pad.Pkcs7 ={
pad:function(data, blockSize){
var blockSizeBytes = blockSize *4;
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
var paddingWord =(nPaddingBytes <<24)|(nPaddingBytes <<16)|(nPaddingBytes <<8)| nPaddingBytes;
var paddingWords =[];for(var i =0; i < nPaddingBytes; i +=4){
paddingWords.push(paddingWord);}
var padding = WordArray.create(paddingWords, nPaddingBytes);
data.concat(padding);},
unpad:function(data){
var nPaddingBytes = data.words[(data.sigBytes -1)>>>2]&0xff;
data.sigBytes -= nPaddingBytes;}};
var BlockCipher = C_lib.BlockCipher = Cipher.extend({
cfg: Cipher.cfg.extend({
mode: CBC,
padding: Pkcs7
}),
reset:function(){
Cipher.reset.call(this);
var cfg = this.cfg;
var iv = cfg.iv;
var mode = cfg.mode;if(this._xformMode == this._ENC_XFORM_MODE){
var modeCreator = mode.createEncryptor;}else{
var modeCreator = mode.createDecryptor;
this._minBufferSize =1;}if(this._mode && this._mode.__creator == modeCreator){
this._mode.init(this, iv && iv.words);}else{
this._mode = modeCreator.call(mode, this, iv && iv.words);
this._mode.__creator = modeCreator;}},
_doProcessBlock:function(words, offset){
this._mode.processBlock(words, offset);},
_doFinalize:function(){
var padding = this.cfg.padding;if(this._xformMode == this._ENC_XFORM_MODE){
padding.pad(this._data, this.blockSize);
var finalProcessedBlocks = this._process(!!'flush');}else{
var finalProcessedBlocks = this._process(!!'flush');
padding.unpad(finalProcessedBlocks);}return finalProcessedBlocks;},
blockSize:128/32});
var CipherParams = C_lib.CipherParams = Base.extend({
init:function(cipherParams){
this.mixIn(cipherParams);},
toString:function(formatter){return(formatter || this.formatter).stringify(this);}});
var C_format = C.format ={};
var OpenSSLFormatter = C_format.OpenSSL ={
stringify:function(cipherParams){
var ciphertext = cipherParams.ciphertext;
var salt = cipherParams.salt;if(salt){
var wordArray = WordArray.create([0x53616c74,0x65645f5f]).concat(salt).concat(ciphertext);}else{
var wordArray = ciphertext;}return wordArray.toString(Base64);},
parse:function(openSSLStr){
var ciphertext = Base64.parse(openSSLStr);
var ciphertextWords = ciphertext.words;if(ciphertextWords[0]==0x53616c74&& ciphertextWords[1]==0x65645f5f){
var salt = WordArray.create(ciphertextWords.slice(2,4));
ciphertextWords.splice(0,4);
ciphertext.sigBytes -=16;}return CipherParams.create({
ciphertext: ciphertext,
salt: salt
});}};
var SerializableCipher = C_lib.SerializableCipher = Base.extend({
cfg: Base.extend({
format: OpenSSLFormatter
}),
encrypt:function(cipher, message, key, cfg){
cfg = this.cfg.extend(cfg);
var encryptor = cipher.createEncryptor(key, cfg);
var ciphertext = encryptor.finalize(message);
var cipherCfg = encryptor.cfg;return CipherParams.create({
ciphertext: ciphertext,
key: key,
iv: cipherCfg.iv,
algorithm: cipher,
mode: cipherCfg.mode,
padding: cipherCfg.padding,
blockSize: cipher.blockSize,
formatter: cfg.format
});},
decrypt:function(cipher, ciphertext, key, cfg){
cfg = this.cfg.extend(cfg);
ciphertext = this._parse(ciphertext, cfg.format);
var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);return plaintext;},
_parse:function(ciphertext, format){if(typeof ciphertext =='string'){return format.parse(ciphertext, this);}else{return ciphertext;}}});
var C_kdf = C.kdf ={};
var OpenSSLKdf = C_kdf.OpenSSL ={
execute:function(password, keySize, ivSize, salt){if(!salt){
salt = WordArray.random(64/8);}
var key = EvpKDF.create({
keySize: keySize + ivSize
}).compute(password, salt);
var iv = WordArray.create(key.words.slice(keySize), ivSize *4);
key.sigBytes = keySize *4;return CipherParams.create({
key: key,
iv: iv,
salt: salt
});}};
var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
cfg: SerializableCipher.cfg.extend({
kdf: OpenSSLKdf
}),
encrypt:function(cipher, message, password, cfg){
cfg = this.cfg.extend(cfg);
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
cfg.iv = derivedParams.iv;
var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
ciphertext.mixIn(derivedParams);return ciphertext;},
decrypt:function(cipher, ciphertext, password, cfg){
cfg = this.cfg.extend(cfg);
ciphertext = this._parse(ciphertext, cfg.format);
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
cfg.iv = derivedParams.iv;
var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);return plaintext;}});}());
CryptoJS.mode.CFB =(function(){
var CFB = CryptoJS.lib.BlockCipherMode.extend();
CFB.Encryptor = CFB.extend({
processBlock:function(words, offset){
var cipher = this._cipher;
var blockSize = cipher.blockSize;
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
this._prevBlock = words.slice(offset, offset + blockSize);}});
CFB.Decryptor = CFB.extend({
processBlock:function(words, offset){
var cipher = this._cipher;
var blockSize = cipher.blockSize;
var thisBlock = words.slice(offset, offset + blockSize);
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
this._prevBlock = thisBlock;}});
function generateKeystreamAndEncrypt(words, offset, blockSize, cipher){
var iv = this._iv;if(iv){
var keystream = iv.slice(0);
this._iv = undefined;}else{
var keystream = this._prevBlock;}
cipher.encryptBlock(keystream,0);for(var i =0; i < blockSize; i++){
words[offset + i]^= keystream[i];}}return CFB;}());
CryptoJS.mode.ECB =(function(){
var ECB = CryptoJS.lib.BlockCipherMode.extend();
ECB.Encryptor = ECB.extend({
processBlock:function(words, offset){
this._cipher.encryptBlock(words, offset);}});
ECB.Decryptor = ECB.extend({
processBlock:function(words, offset){
this._cipher.decryptBlock(words, offset);}});return ECB;}());
CryptoJS.pad.AnsiX923 ={
pad:function(data, blockSize){
var dataSigBytes = data.sigBytes;
var blockSizeBytes = blockSize *4;
var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
var lastBytePos = dataSigBytes + nPaddingBytes -1;
data.clamp();
data.words[lastBytePos >>>2]|= nPaddingBytes <<(24-(lastBytePos %4)*8);
data.sigBytes += nPaddingBytes;},
unpad:function(data){
var nPaddingBytes = data.words[(data.sigBytes -1)>>>2]&0xff;
data.sigBytes -= nPaddingBytes;}};
CryptoJS.pad.Iso10126 ={
pad:function(data, blockSize){
var blockSizeBytes = blockSize *4;
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes -1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes <<24],1));},
unpad:function(data){
var nPaddingBytes = data.words[(data.sigBytes -1)>>>2]&0xff;
data.sigBytes -= nPaddingBytes;}};
CryptoJS.pad.Iso97971 ={
pad:function(data, blockSize){
data.concat(CryptoJS.lib.WordArray.create([0x80000000],1));
CryptoJS.pad.ZeroPadding.pad(data, blockSize);},
unpad:function(data){
CryptoJS.pad.ZeroPadding.unpad(data);
data.sigBytes--;}};
CryptoJS.mode.OFB =(function(){
var OFB = CryptoJS.lib.BlockCipherMode.extend();
var Encryptor = OFB.Encryptor = OFB.extend({
processBlock:function(words, offset){
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var keystream = this._keystream;if(iv){
keystream = this._keystream = iv.slice(0);
this._iv = undefined;}
cipher.encryptBlock(keystream,0);for(var i =0; i < blockSize; i++){
words[offset + i]^= keystream[i];}}});
OFB.Decryptor = Encryptor;return OFB;}());
CryptoJS.pad.NoPadding ={
pad:function(){},
unpad:function(){}};(function(undefined){
var C = CryptoJS;
var C_lib = C.lib;
var CipherParams = C_lib.CipherParams;
var C_enc = C.enc;
var Hex = C_enc.Hex;
var C_format = C.format;
var HexFormatter = C_format.Hex ={
stringify:function(cipherParams){return cipherParams.ciphertext.toString(Hex);},
parse:function(input){
var ciphertext = Hex.parse(input);return CipherParams.create({
ciphertext: ciphertext
});}};}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var BlockCipher = C_lib.BlockCipher;
var C_algo = C.algo;
var SBOX =[];
var INV_SBOX =[];
var SUB_MIX_0 =[];
var SUB_MIX_1 =[];
var SUB_MIX_2 =[];
var SUB_MIX_3 =[];
var INV_SUB_MIX_0 =[];
var INV_SUB_MIX_1 =[];
var INV_SUB_MIX_2 =[];
var INV_SUB_MIX_3 =[];(function(){
var d =[];for(var i =0; i <256; i++){if(i <128){
d[i]= i <<1;}else{
d[i]=(i <<1)^0x11b;}}
var x =0;
var xi =0;for(var i =0; i <256; i++){
var sx = xi ^(xi <<1)^(xi <<2)^(xi <<3)^(xi <<4);
sx =(sx >>>8)^(sx &0xff)^0x63;
SBOX[x]= sx;
INV_SBOX[sx]= x;
var x2 = d[x];
var x4 = d[x2];
var x8 = d[x4];
var t =(d[sx]*0x101)^(sx *0x1010100);
SUB_MIX_0[x]=(t <<24)|(t >>>8);
SUB_MIX_1[x]=(t <<16)|(t >>>16);
SUB_MIX_2[x]=(t <<8)|(t >>>24);
SUB_MIX_3[x]= t;
var t =(x8 *0x1010101)^(x4 *0x10001)^(x2 *0x101)^(x *0x1010100);
INV_SUB_MIX_0[sx]=(t <<24)|(t >>>8);
INV_SUB_MIX_1[sx]=(t <<16)|(t >>>16);
INV_SUB_MIX_2[sx]=(t <<8)|(t >>>24);
INV_SUB_MIX_3[sx]= t;if(!x){
x = xi =1;}else{
x = x2 ^ d[d[d[x8 ^ x2]]];
xi ^= d[d[xi]];}}}());
var RCON =[0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36];
var AES = C_algo.AES = BlockCipher.extend({
_doReset:function(){if(this._nRounds && this._keyPriorReset === this._key){return;}
var key = this._keyPriorReset = this._key;
var keyWords = key.words;
var keySize = key.sigBytes /4;
var nRounds = this._nRounds = keySize +6;
var ksRows =(nRounds +1)*4;
var keySchedule = this._keySchedule =[];for(var ksRow =0; ksRow < ksRows; ksRow++){if(ksRow < keySize){
keySchedule[ksRow]= keyWords[ksRow];}else{
var t = keySchedule[ksRow -1];if(!(ksRow % keySize)){
t =(t <<8)|(t >>>24);
t =(SBOX[t >>>24]<<24)|(SBOX[(t >>>16)&0xff]<<16)|(SBOX[(t >>>8)&0xff]<<8)| SBOX[t &0xff];
t ^= RCON[(ksRow / keySize)|0]<<24;}elseif(keySize >6&& ksRow % keySize ==4){
t =(SBOX[t >>>24]<<24)|(SBOX[(t >>>16)&0xff]<<16)|(SBOX[(t >>>8)&0xff]<<8)| SBOX[t &0xff];}
keySchedule[ksRow]= keySchedule[ksRow - keySize]^ t;}}
var invKeySchedule = this._invKeySchedule =[];for(var invKsRow =0; invKsRow < ksRows; invKsRow++){
var ksRow = ksRows - invKsRow;if(invKsRow %4){
var t = keySchedule[ksRow];}else{
var t = keySchedule[ksRow -4];}if(invKsRow <4|| ksRow <=4){
invKeySchedule[invKsRow]= t;}else{
invKeySchedule[invKsRow]= INV_SUB_MIX_0[SBOX[t >>>24]]^ INV_SUB_MIX_1[SBOX[(t >>>16)&0xff]]^ INV_SUB_MIX_2[SBOX[(t >>>8)&0xff]]^ INV_SUB_MIX_3[SBOX[t &0xff]];}}},
encryptBlock:function(M, offset){
this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);},
decryptBlock:function(M, offset){
var t = M[offset +1];
M[offset +1]= M[offset +3];
M[offset +3]= t;
this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
var t = M[offset +1];
M[offset +1]= M[offset +3];
M[offset +3]= t;},
_doCryptBlock:function(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX){
var nRounds = this._nRounds;
var s0 = M[offset]^ keySchedule[0];
var s1 = M[offset +1]^ keySchedule[1];
var s2 = M[offset +2]^ keySchedule[2];
var s3 = M[offset +3]^ keySchedule[3];
var ksRow =4;for(var round =1; round < nRounds; round++){
var t0 = SUB_MIX_0[s0 >>>24]^ SUB_MIX_1[(s1 >>>16)&0xff]^ SUB_MIX_2[(s2 >>>8)&0xff]^ SUB_MIX_3[s3 &0xff]^ keySchedule[ksRow++];
var t1 = SUB_MIX_0[s1 >>>24]^ SUB_MIX_1[(s2 >>>16)&0xff]^ SUB_MIX_2[(s3 >>>8)&0xff]^ SUB_MIX_3[s0 &0xff]^ keySchedule[ksRow++];
var t2 = SUB_MIX_0[s2 >>>24]^ SUB_MIX_1[(s3 >>>16)&0xff]^ SUB_MIX_2[(s0 >>>8)&0xff]^ SUB_MIX_3[s1 &0xff]^ keySchedule[ksRow++];
var t3 = SUB_MIX_0[s3 >>>24]^ SUB_MIX_1[(s0 >>>16)&0xff]^ SUB_MIX_2[(s1 >>>8)&0xff]^ SUB_MIX_3[s2 &0xff]^ keySchedule[ksRow++];
s0 = t0;
s1 = t1;
s2 = t2;
s3 = t3;}
var t0 =((SBOX[s0 >>>24]<<24)|(SBOX[(s1 >>>16)&0xff]<<16)|(SBOX[(s2 >>>8)&0xff]<<8)| SBOX[s3 &0xff])^ keySchedule[ksRow++];
var t1 =((SBOX[s1 >>>24]<<24)|(SBOX[(s2 >>>16)&0xff]<<16)|(SBOX[(s3 >>>8)&0xff]<<8)| SBOX[s0 &0xff])^ keySchedule[ksRow++];
var t2 =((SBOX[s2 >>>24]<<24)|(SBOX[(s3 >>>16)&0xff]<<16)|(SBOX[(s0 >>>8)&0xff]<<8)| SBOX[s1 &0xff])^ keySchedule[ksRow++];
var t3 =((SBOX[s3 >>>24]<<24)|(SBOX[(s0 >>>16)&0xff]<<16)|(SBOX[(s1 >>>8)&0xff]<<8)| SBOX[s2 &0xff])^ keySchedule[ksRow++];
M[offset]= t0;
M[offset +1]= t1;
M[offset +2]= t2;
M[offset +3]= t3;},
keySize:256/32});
C.AES = BlockCipher._createHelper(AES);}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var BlockCipher = C_lib.BlockCipher;
var C_algo = C.algo;
var PC1 =[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4];
var PC2 =[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32];
var BIT_SHIFTS =[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28];
var SBOX_P =[{0x0:0x808200,0x10000000:0x8000,0x20000000:0x808002,0x30000000:0x2,0x40000000:0x200,0x50000000:0x808202,0x60000000:0x800202,0x70000000:0x800000,0x80000000:0x202,0x90000000:0x800200,0xa0000000:0x8200,0xb0000000:0x808000,0xc0000000:0x8002,0xd0000000:0x800002,0xe0000000:0x0,0xf0000000:0x8202,0x8000000:0x0,0x18000000:0x808202,0x28000000:0x8202,0x38000000:0x8000,0x48000000:0x808200,0x58000000:0x200,0x68000000:0x808002,0x78000000:0x2,0x88000000:0x800200,0x98000000:0x8200,0xa8000000:0x808000,0xb8000000:0x800202,0xc8000000:0x800002,0xd8000000:0x8002,0xe8000000:0x202,0xf8000000:0x800000,0x1:0x8000,0x10000001:0x2,0x20000001:0x808200,0x30000001:0x800000,0x40000001:0x808002,0x50000001:0x8200,0x60000001:0x200,0x70000001:0x800202,0x80000001:0x808202,0x90000001:0x808000,0xa0000001:0x800002,0xb0000001:0x8202,0xc0000001:0x202,0xd0000001:0x800200,0xe0000001:0x8002,0xf0000001:0x0,0x8000001:0x808202,0x18000001:0x808000,0x28000001:0x800000,0x38000001:0x200,0x48000001:0x8000,0x58000001:0x800002,0x68000001:0x2,0x78000001:0x8202,0x88000001:0x8002,0x98000001:0x800202,0xa8000001:0x202,0xb8000001:0x808200,0xc8000001:0x800200,0xd8000001:0x0,0xe8000001:0x8200,0xf8000001:0x808002},{0x0:0x40084010,0x1000000:0x4000,0x2000000:0x80000,0x3000000:0x40080010,0x4000000:0x40000010,0x5000000:0x40084000,0x6000000:0x40004000,0x7000000:0x10,0x8000000:0x84000,0x9000000:0x40004010,0xa000000:0x40000000,0xb000000:0x84010,0xc000000:0x80010,0xd000000:0x0,0xe000000:0x4010,0xf000000:0x40080000,0x800000:0x40004000,0x1800000:0x84010,0x2800000:0x10,0x3800000:0x40004010,0x4800000:0x40084010,0x5800000:0x40000000,0x6800000:0x80000,0x7800000:0x40080010,0x8800000:0x80010,0x9800000:0x0,0xa800000:0x4000,0xb800000:0x40080000,0xc800000:0x40000010,0xd800000:0x84000,0xe800000:0x40084000,0xf800000:0x4010,0x10000000:0x0,0x11000000:0x40080010,0x12000000:0x40004010,0x13000000:0x40084000,0x14000000:0x40080000,0x15000000:0x10,0x16000000:0x84010,0x17000000:0x4000,0x18000000:0x4010,0x19000000:0x80000,0x1a000000:0x80010,0x1b000000:0x40000010,0x1c000000:0x84000,0x1d000000:0x40004000,0x1e000000:0x40000000,0x1f000000:0x40084010,0x10800000:0x84010,0x11800000:0x80000,0x12800000:0x40080000,0x13800000:0x4000,0x14800000:0x40004000,0x15800000:0x40084010,0x16800000:0x10,0x17800000:0x40000000,0x18800000:0x40084000,0x19800000:0x40000010,0x1a800000:0x40004010,0x1b800000:0x80010,0x1c800000:0x0,0x1d800000:0x4010,0x1e800000:0x40080010,0x1f800000:0x84000},{0x0:0x104,0x100000:0x0,0x200000:0x4000100,0x300000:0x10104,0x400000:0x10004,0x500000:0x4000004,0x600000:0x4010104,0x700000:0x4010000,0x800000:0x4000000,0x900000:0x4010100,0xa00000:0x10100,0xb00000:0x4010004,0xc00000:0x4000104,0xd00000:0x10000,0xe00000:0x4,0xf00000:0x100,0x80000:0x4010100,0x180000:0x4010004,0x280000:0x0,0x380000:0x4000100,0x480000:0x4000004,0x580000:0x10000,0x680000:0x10004,0x780000:0x104,0x880000:0x4,0x980000:0x100,0xa80000:0x4010000,0xb80000:0x10104,0xc80000:0x10100,0xd80000:0x4000104,0xe80000:0x4010104,0xf80000:0x4000000,0x1000000:0x4010100,0x1100000:0x10004,0x1200000:0x10000,0x1300000:0x4000100,0x1400000:0x100,0x1500000:0x4010104,0x1600000:0x4000004,0x1700000:0x0,0x1800000:0x4000104,0x1900000:0x4000000,0x1a00000:0x4,0x1b00000:0x10100,0x1c00000:0x4010000,0x1d00000:0x104,0x1e00000:0x10104,0x1f00000:0x4010004,0x1080000:0x4000000,0x1180000:0x104,0x1280000:0x4010100,0x1380000:0x0,0x1480000:0x10004,0x1580000:0x4000100,0x1680000:0x100,0x1780000:0x4010004,0x1880000:0x10000,0x1980000:0x4010104,0x1a80000:0x10104,0x1b80000:0x4000004,0x1c80000:0x4000104,0x1d80000:0x4010000,0x1e80000:0x4,0x1f80000:0x10100},{0x0:0x80401000,0x10000:0x80001040,0x20000:0x401040,0x30000:0x80400000,0x40000:0x0,0x50000:0x401000,0x60000:0x80000040,0x70000:0x400040,0x80000:0x80000000,0x90000:0x400000,0xa0000:0x40,0xb0000:0x80001000,0xc0000:0x80400040,0xd0000:0x1040,0xe0000:0x1000,0xf0000:0x80401040,0x8000:0x80001040,0x18000:0x40,0x28000:0x80400040,0x38000:0x80001000,0x48000:0x401000,0x58000:0x80401040,0x68000:0x0,0x78000:0x80400000,0x88000:0x1000,0x98000:0x80401000,0xa8000:0x400000,0xb8000:0x1040,0xc8000:0x80000000,0xd8000:0x400040,0xe8000:0x401040,0xf8000:0x80000040,0x100000:0x400040,0x110000:0x401000,0x120000:0x80000040,0x130000:0x0,0x140000:0x1040,0x150000:0x80400040,0x160000:0x80401000,0x170000:0x80001040,0x180000:0x80401040,0x190000:0x80000000,0x1a0000:0x80400000,0x1b0000:0x401040,0x1c0000:0x80001000,0x1d0000:0x400000,0x1e0000:0x40,0x1f0000:0x1000,0x108000:0x80400000,0x118000:0x80401040,0x128000:0x0,0x138000:0x401000,0x148000:0x400040,0x158000:0x80000000,0x168000:0x80001040,0x178000:0x40,0x188000:0x80000040,0x198000:0x1000,0x1a8000:0x80001000,0x1b8000:0x80400040,0x1c8000:0x1040,0x1d8000:0x80401000,0x1e8000:0x400000,0x1f8000:0x401040},{0x0:0x80,0x1000:0x1040000,0x2000:0x40000,0x3000:0x20000000,0x4000:0x20040080,0x5000:0x1000080,0x6000:0x21000080,0x7000:0x40080,0x8000:0x1000000,0x9000:0x20040000,0xa000:0x20000080,0xb000:0x21040080,0xc000:0x21040000,0xd000:0x0,0xe000:0x1040080,0xf000:0x21000000,0x800:0x1040080,0x1800:0x21000080,0x2800:0x80,0x3800:0x1040000,0x4800:0x40000,0x5800:0x20040080,0x6800:0x21040000,0x7800:0x20000000,0x8800:0x20040000,0x9800:0x0,0xa800:0x21040080,0xb800:0x1000080,0xc800:0x20000080,0xd800:0x21000000,0xe800:0x1000000,0xf800:0x40080,0x10000:0x40000,0x11000:0x80,0x12000:0x20000000,0x13000:0x21000080,0x14000:0x1000080,0x15000:0x21040000,0x16000:0x20040080,0x17000:0x1000000,0x18000:0x21040080,0x19000:0x21000000,0x1a000:0x1040000,0x1b000:0x20040000,0x1c000:0x40080,0x1d000:0x20000080,0x1e000:0x0,0x1f000:0x1040080,0x10800:0x21000080,0x11800:0x1000000,0x12800:0x1040000,0x13800:0x20040080,0x14800:0x20000000,0x15800:0x1040080,0x16800:0x80,0x17800:0x21040000,0x18800:0x40080,0x19800:0x21040080,0x1a800:0x0,0x1b800:0x21000000,0x1c800:0x1000080,0x1d800:0x40000,0x1e800:0x20040000,0x1f800:0x20000080},{0x0:0x10000008,0x100:0x2000,0x200:0x10200000,0x300:0x10202008,0x400:0x10002000,0x500:0x200000,0x600:0x200008,0x700:0x10000000,0x800:0x0,0x900:0x10002008,0xa00:0x202000,0xb00:0x8,0xc00:0x10200008,0xd00:0x202008,0xe00:0x2008,0xf00:0x10202000,0x80:0x10200000,0x180:0x10202008,0x280:0x8,0x380:0x200000,0x480:0x202008,0x580:0x10000008,0x680:0x10002000,0x780:0x2008,0x880:0x200008,0x980:0x2000,0xa80:0x10002008,0xb80:0x10200008,0xc80:0x0,0xd80:0x10202000,0xe80:0x202000,0xf80:0x10000000,0x1000:0x10002000,0x1100:0x10200008,0x1200:0x10202008,0x1300:0x2008,0x1400:0x200000,0x1500:0x10000000,0x1600:0x10000008,0x1700:0x202000,0x1800:0x202008,0x1900:0x0,0x1a00:0x8,0x1b00:0x10200000,0x1c00:0x2000,0x1d00:0x10002008,0x1e00:0x10202000,0x1f00:0x200008,0x1080:0x8,0x1180:0x202000,0x1280:0x200000,0x1380:0x10000008,0x1480:0x10002000,0x1580:0x2008,0x1680:0x10202008,0x1780:0x10200000,0x1880:0x10202000,0x1980:0x10200008,0x1a80:0x2000,0x1b80:0x202008,0x1c80:0x200008,0x1d80:0x0,0x1e80:0x10000000,0x1f80:0x10002008},{0x0:0x100000,0x10:0x2000401,0x20:0x400,0x30:0x100401,0x40:0x2100401,0x50:0x0,0x60:0x1,0x70:0x2100001,0x80:0x2000400,0x90:0x100001,0xa0:0x2000001,0xb0:0x2100400,0xc0:0x2100000,0xd0:0x401,0xe0:0x100400,0xf0:0x2000000,0x8:0x2100001,0x18:0x0,0x28:0x2000401,0x38:0x2100400,0x48:0x100000,0x58:0x2000001,0x68:0x2000000,0x78:0x401,0x88:0x100401,0x98:0x2000400,0xa8:0x2100000,0xb8:0x100001,0xc8:0x400,0xd8:0x2100401,0xe8:0x1,0xf8:0x100400,0x100:0x2000000,0x110:0x100000,0x120:0x2000401,0x130:0x2100001,0x140:0x100001,0x150:0x2000400,0x160:0x2100400,0x170:0x100401,0x180:0x401,0x190:0x2100401,0x1a0:0x100400,0x1b0:0x1,0x1c0:0x0,0x1d0:0x2100000,0x1e0:0x2000001,0x1f0:0x400,0x108:0x100400,0x118:0x2000401,0x128:0x2100001,0x138:0x1,0x148:0x2000000,0x158:0x100000,0x168:0x401,0x178:0x2100400,0x188:0x2000001,0x198:0x2100000,0x1a8:0x0,0x1b8:0x2100401,0x1c8:0x100401,0x1d8:0x400,0x1e8:0x2000400,0x1f8:0x100001},{0x0:0x8000820,0x1:0x20000,0x2:0x8000000,0x3:0x20,0x4:0x20020,0x5:0x8020820,0x6:0x8020800,0x7:0x800,0x8:0x8020000,0x9:0x8000800,0xa:0x20800,0xb:0x8020020,0xc:0x820,0xd:0x0,0xe:0x8000020,0xf:0x20820,0x80000000:0x800,0x80000001:0x8020820,0x80000002:0x8000820,0x80000003:0x8000000,0x80000004:0x8020000,0x80000005:0x20800,0x80000006:0x20820,0x80000007:0x20,0x80000008:0x8000020,0x80000009:0x820,0x8000000a:0x20020,0x8000000b:0x8020800,0x8000000c:0x0,0x8000000d:0x8020020,0x8000000e:0x8000800,0x8000000f:0x20000,0x10:0x20820,0x11:0x8020800,0x12:0x20,0x13:0x800,0x14:0x8000800,0x15:0x8000020,0x16:0x8020020,0x17:0x20000,0x18:0x0,0x19:0x20020,0x1a:0x8020000,0x1b:0x8000820,0x1c:0x8020820,0x1d:0x20800,0x1e:0x820,0x1f:0x8000000,0x80000010:0x20000,0x80000011:0x800,0x80000012:0x8020020,0x80000013:0x20820,0x80000014:0x20,0x80000015:0x8020000,0x80000016:0x8000000,0x80000017:0x8000820,0x80000018:0x8020820,0x80000019:0x8000020,0x8000001a:0x8000800,0x8000001b:0x0,0x8000001c:0x20800,0x8000001d:0x820,0x8000001e:0x20020,0x8000001f:0x8020800}];
var SBOX_MASK =[0xf8000001,0x1f800000,0x01f80000,0x001f8000,0x0001f800,0x00001f80,0x000001f8,0x8000001f];
var DES = C_algo.DES = BlockCipher.extend({
_doReset:function(){
var key = this._key;
var keyWords = key.words;
var keyBits =[];for(var i =0; i <56; i++){
var keyBitPos = PC1[i]-1;
keyBits[i]=(keyWords[keyBitPos >>>5]>>>(31- keyBitPos %32))&1;}
var subKeys = this._subKeys =[];for(var nSubKey =0; nSubKey <16; nSubKey++){
var subKey = subKeys[nSubKey]=[];
var bitShift = BIT_SHIFTS[nSubKey];for(var i =0; i <24; i++){
subKey[(i /6)|0]|= keyBits[((PC2[i]-1)+ bitShift)%28]<<(31- i %6);
subKey[4+((i /6)|0)]|= keyBits[28+(((PC2[i +24]-1)+ bitShift)%28)]<<(31- i %6);}
subKey[0]=(subKey[0]<<1)|(subKey[0]>>>31);for(var i =1; i <7; i++){
subKey[i]= subKey[i]>>>((i -1)*4+3);}
subKey[7]=(subKey[7]<<5)|(subKey[7]>>>27);}
var invSubKeys = this._invSubKeys =[];for(var i =0; i <16; i++){
invSubKeys[i]= subKeys[15- i];}},
encryptBlock:function(M, offset){
this._doCryptBlock(M, offset, this._subKeys);},
decryptBlock:function(M, offset){
this._doCryptBlock(M, offset, this._invSubKeys);},
_doCryptBlock:function(M, offset, subKeys){
this._lBlock = M[offset];
this._rBlock = M[offset +1];
exchangeLR.call(this,4,0x0f0f0f0f);
exchangeLR.call(this,16,0x0000ffff);
exchangeRL.call(this,2,0x33333333);
exchangeRL.call(this,8,0x00ff00ff);
exchangeLR.call(this,1,0x55555555);for(var round =0; round <16; round++){
var subKey = subKeys[round];
var lBlock = this._lBlock;
var rBlock = this._rBlock;
var f =0;for(var i =0; i <8; i++){
f |= SBOX_P[i][((rBlock ^ subKey[i])& SBOX_MASK[i])>>>0];}
this._lBlock = rBlock;
this._rBlock = lBlock ^ f;}
var t = this._lBlock;
this._lBlock = this._rBlock;
this._rBlock = t;
exchangeLR.call(this,1,0x55555555);
exchangeRL.call(this,8,0x00ff00ff);
exchangeRL.call(this,2,0x33333333);
exchangeLR.call(this,16,0x0000ffff);
exchangeLR.call(this,4,0x0f0f0f0f);
M[offset]= this._lBlock;
M[offset +1]= this._rBlock;},
keySize:64/32,
ivSize:64/32,
blockSize:64/32});
function exchangeLR(offset, mask){
var t =((this._lBlock >>> offset)^ this._rBlock)& mask;
this._rBlock ^= t;
this._lBlock ^= t << offset;}
function exchangeRL(offset, mask){
var t =((this._rBlock >>> offset)^ this._lBlock)& mask;
this._lBlock ^= t;
this._rBlock ^= t << offset;}
C.DES = BlockCipher._createHelper(DES);
var TripleDES = C_algo.TripleDES = BlockCipher.extend({
_doReset:function(){
var key = this._key;
var keyWords = key.words;
this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0,2)));
this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2,4)));
this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4,6)));},
encryptBlock:function(M, offset){
this._des1.encryptBlock(M, offset);
this._des2.decryptBlock(M, offset);
this._des3.encryptBlock(M, offset);},
decryptBlock:function(M, offset){
this._des3.decryptBlock(M, offset);
this._des2.encryptBlock(M, offset);
this._des1.decryptBlock(M, offset);},
keySize:192/32,
ivSize:64/32,
blockSize:64/32});
C.TripleDES = BlockCipher._createHelper(TripleDES);}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
var RC4 = C_algo.RC4 = StreamCipher.extend({
_doReset:function(){
var key = this._key;
var keyWords = key.words;
var keySigBytes = key.sigBytes;
var S = this._S =[];for(var i =0; i <256; i++){
S[i]= i;}for(var i =0, j =0; i <256; i++){
var keyByteIndex = i % keySigBytes;
var keyByte =(keyWords[keyByteIndex >>>2]>>>(24-(keyByteIndex %4)*8))&0xff;
j =(j + S[i]+ keyByte)%256;
var t = S[i];
S[i]= S[j];
S[j]= t;}
this._i = this._j =0;},
_doProcessBlock:function(M, offset){
M[offset]^= generateKeystreamWord.call(this);},
keySize:256/32,
ivSize:0});
function generateKeystreamWord(){
var S = this._S;
var i = this._i;
var j = this._j;
var keystreamWord =0;for(var n =0; n <4; n++){
i =(i +1)%256;
j =(j + S[i])%256;
var t = S[i];
S[i]= S[j];
S[j]= t;
keystreamWord |= S[(S[i]+ S[j])%256]<<(24- n *8);}
this._i = i;
this._j = j;return keystreamWord;}
C.RC4 = StreamCipher._createHelper(RC4);
var RC4Drop = C_algo.RC4Drop = RC4.extend({
cfg: RC4.cfg.extend({
drop:192}),
_doReset:function(){
RC4._doReset.call(this);for(var i = this.cfg.drop; i >0; i--){
generateKeystreamWord.call(this);}}});
C.RC4Drop = StreamCipher._createHelper(RC4Drop);}());
CryptoJS.mode.CTRGladman =(function(){
var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
function incWord(word){if(((word >>24)&0xff)===0xff){
var b1 =(word >>16)&0xff;
var b2 =(word >>8)&0xff;
var b3 = word &0xff;if(b1 ===0xff){
b1 =0;if(b2 ===0xff){
b2 =0;if(b3 ===0xff){
b3 =0;}else{++b3;}}else{++b2;}}else{++b1;}
word =0;
word +=(b1 <<16);
word +=(b2 <<8);
word += b3;}else{
word +=(0x01<<24);}return word;}
function incCounter(counter){if((counter[0]=incWord(counter[0]))===0){
counter[1]=incWord(counter[1]);}return counter;}
var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
processBlock:function(words, offset){
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var counter = this._counter;if(iv){
counter = this._counter = iv.slice(0);
this._iv = undefined;}incCounter(counter);
var keystream = counter.slice(0);
cipher.encryptBlock(keystream,0);for(var i =0; i < blockSize; i++){
words[offset + i]^= keystream[i];}}});
CTRGladman.Decryptor = Encryptor;return CTRGladman;}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
var S =[];
var C_ =[];
var G =[];
var Rabbit = C_algo.Rabbit = StreamCipher.extend({
_doReset:function(){
var K = this._key.words;
var iv = this.cfg.iv;for(var i =0; i <4; i++){
K[i]=(((K[i]<<8)|(K[i]>>>24))&0x00ff00ff)|(((K[i]<<24)|(K[i]>>>8))&0xff00ff00);}
var X = this._X =[K[0],(K[3]<<16)|(K[2]>>>16), K[1],(K[0]<<16)|(K[3]>>>16), K[2],(K[1]<<16)|(K[0]>>>16), K[3],(K[2]<<16)|(K[1]>>>16)];
var C = this._C =[(K[2]<<16)|(K[2]>>>16),(K[0]&0xffff0000)|(K[1]&0x0000ffff),(K[3]<<16)|(K[3]>>>16),(K[1]&0xffff0000)|(K[2]&0x0000ffff),(K[0]<<16)|(K[0]>>>16),(K[2]&0xffff0000)|(K[3]&0x0000ffff),(K[1]<<16)|(K[1]>>>16),(K[3]&0xffff0000)|(K[0]&0x0000ffff)];
this._b =0;for(var i =0; i <4; i++){
nextState.call(this);}for(var i =0; i <8; i++){
C[i]^= X[(i +4)&7];}if(iv){
var IV = iv.words;
var IV_0 = IV[0];
var IV_1 = IV[1];
var i0 =(((IV_0 <<8)|(IV_0 >>>24))&0x00ff00ff)|(((IV_0 <<24)|(IV_0 >>>8))&0xff00ff00);
var i2 =(((IV_1 <<8)|(IV_1 >>>24))&0x00ff00ff)|(((IV_1 <<24)|(IV_1 >>>8))&0xff00ff00);
var i1 =(i0 >>>16)|(i2 &0xffff0000);
var i3 =(i2 <<16)|(i0 &0x0000ffff);
C[0]^= i0;
C[1]^= i1;
C[2]^= i2;
C[3]^= i3;
C[4]^= i0;
C[5]^= i1;
C[6]^= i2;
C[7]^= i3;for(var i =0; i <4; i++){
nextState.call(this);}}},
_doProcessBlock:function(M, offset){
var X = this._X;
nextState.call(this);
S[0]= X[0]^(X[5]>>>16)^(X[3]<<16);
S[1]= X[2]^(X[7]>>>16)^(X[5]<<16);
S[2]= X[4]^(X[1]>>>16)^(X[7]<<16);
S[3]= X[6]^(X[3]>>>16)^(X[1]<<16);for(var i =0; i <4; i++){
S[i]=(((S[i]<<8)|(S[i]>>>24))&0x00ff00ff)|(((S[i]<<24)|(S[i]>>>8))&0xff00ff00);
M[offset + i]^= S[i];}},
blockSize:128/32,
ivSize:64/32});
function nextState(){
var X = this._X;
var C = this._C;for(var i =0; i <8; i++){
C_[i]= C[i];}
C[0]=(C[0]+0x4d34d34d+ this._b)|0;
C[1]=(C[1]+0xd34d34d3+((C[0]>>>0)<(C_[0]>>>0)?1:0))|0;
C[2]=(C[2]+0x34d34d34+((C[1]>>>0)<(C_[1]>>>0)?1:0))|0;
C[3]=(C[3]+0x4d34d34d+((C[2]>>>0)<(C_[2]>>>0)?1:0))|0;
C[4]=(C[4]+0xd34d34d3+((C[3]>>>0)<(C_[3]>>>0)?1:0))|0;
C[5]=(C[5]+0x34d34d34+((C[4]>>>0)<(C_[4]>>>0)?1:0))|0;
C[6]=(C[6]+0x4d34d34d+((C[5]>>>0)<(C_[5]>>>0)?1:0))|0;
C[7]=(C[7]+0xd34d34d3+((C[6]>>>0)<(C_[6]>>>0)?1:0))|0;
this._b =(C[7]>>>0)<(C_[7]>>>0)?1:0;for(var i =0; i <8; i++){
var gx = X[i]+ C[i];
var ga = gx &0xffff;
var gb = gx >>>16;
var gh =((((ga * ga)>>>17)+ ga * gb)>>>15)+ gb * gb;
var gl =(((gx &0xffff0000)* gx)|0)+(((gx &0x0000ffff)* gx)|0);
G[i]= gh ^ gl;}
X[0]=(G[0]+((G[7]<<16)|(G[7]>>>16))+((G[6]<<16)|(G[6]>>>16)))|0;
X[1]=(G[1]+((G[0]<<8)|(G[0]>>>24))+ G[7])|0;
X[2]=(G[2]+((G[1]<<16)|(G[1]>>>16))+((G[0]<<16)|(G[0]>>>16)))|0;
X[3]=(G[3]+((G[2]<<8)|(G[2]>>>24))+ G[1])|0;
X[4]=(G[4]+((G[3]<<16)|(G[3]>>>16))+((G[2]<<16)|(G[2]>>>16)))|0;
X[5]=(G[5]+((G[4]<<8)|(G[4]>>>24))+ G[3])|0;
X[6]=(G[6]+((G[5]<<16)|(G[5]>>>16))+((G[4]<<16)|(G[4]>>>16)))|0;
X[7]=(G[7]+((G[6]<<8)|(G[6]>>>24))+ G[5])|0;}
C.Rabbit = StreamCipher._createHelper(Rabbit);}());
CryptoJS.mode.CTR =(function(){
var CTR = CryptoJS.lib.BlockCipherMode.extend();
var Encryptor = CTR.Encryptor = CTR.extend({
processBlock:function(words, offset){
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var counter = this._counter;if(iv){
counter = this._counter = iv.slice(0);
this._iv = undefined;}
var keystream = counter.slice(0);
cipher.encryptBlock(keystream,0);
counter[blockSize -1]=(counter[blockSize -1]+1)|0for(var i =0; i < blockSize; i++){
words[offset + i]^= keystream[i];}}});
CTR.Decryptor = Encryptor;return CTR;}());(function(){
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
var S =[];
var C_ =[];
var G =[];
var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
_doReset:function(){
var K = this._key.words;
var iv = this.cfg.iv;
var X = this._X =[K[0],(K[3]<<16)|(K[2]>>>16), K[1],(K[0]<<16)|(K[3]>>>16), K[2],(K[1]<<16)|(K[0]>>>16), K[3],(K[2]<<16)|(K[1]>>>16)];
var C = this._C =[(K[2]<<16)|(K[2]>>>16),(K[0]&0xffff0000)|(K[1]&0x0000ffff),(K[3]<<16)|(K[3]>>>16),(K[1]&0xffff0000)|(K[2]&0x0000ffff),(K[0]<<16)|(K[0]>>>16),(K[2]&0xffff0000)|(K[3]&0x0000ffff),(K[1]<<16)|(K[1]>>>16),(K[3]&0xffff0000)|(K[0]&0x0000ffff)];
this._b =0;for(var i =0; i <4; i++){
nextState.call(this);}for(var i =0; i <8; i++){
C[i]^= X[(i +4)&7];}if(iv){
var IV = iv.words;
var IV_0 = IV[0];
var IV_1 = IV[1];
var i0 =(((IV_0 <<8)|(IV_0 >>>24))&0x00ff00ff)|(((IV_0 <<24)|(IV_0 >>>8))&0xff00ff00);
var i2 =(((IV_1 <<8)|(IV_1 >>>24))&0x00ff00ff)|(((IV_1 <<24)|(IV_1 >>>8))&0xff00ff00);
var i1 =(i0 >>>16)|(i2 &0xffff0000);
var i3 =(i2 <<16)|(i0 &0x0000ffff);
C[0]^= i0;
C[1]^= i1;
C[2]^= i2;
C[3]^= i3;
C[4]^= i0;
C[5]^= i1;
C[6]^= i2;
C[7]^= i3;for(var i =0; i <4; i++){
nextState.call(this);}}},
_doProcessBlock:function(M, offset){
var X = this._X;
nextState.call(this);
S[0]= X[0]^(X[5]>>>16)^(X[3]<<16);
S[1]= X[2]^(X[7]>>>16)^(X[5]<<16);
S[2]= X[4]^(X[1]>>>16)^(X[7]<<16);
S[3]= X[6]^(X[3]>>>16)^(X[1]<<16);for(var i =0; i <4; i++){
S[i]=(((S[i]<<8)|(S[i]>>>24))&0x00ff00ff)|(((S[i]<<24)|(S[i]>>>8))&0xff00ff00);
M[offset + i]^= S[i];}},
blockSize:128/32,
ivSize:64/32});
function nextState(){
var X = this._X;
var C = this._C;for(var i =0; i <8; i++){
C_[i]= C[i];}
C[0]=(C[0]+0x4d34d34d+ this._b)|0;
C[1]=(C[1]+0xd34d34d3+((C[0]>>>0)<(C_[0]>>>0)?1:0))|0;
C[2]=(C[2]+0x34d34d34+((C[1]>>>0)<(C_[1]>>>0)?1:0))|0;
C[3]=(C[3]+0x4d34d34d+((C[2]>>>0)<(C_[2]>>>0)?1:0))|0;
C[4]=(C[4]+0xd34d34d3+((C[3]>>>0)<(C_[3]>>>0)?1:0))|0;
C[5]=(C[5]+0x34d34d34+((C[4]>>>0)<(C_[4]>>>0)?1:0))|0;
C[6]=(C[6]+0x4d34d34d+((C[5]>>>0)<(C_[5]>>>0)?1:0))|0;
C[7]=(C[7]+0xd34d34d3+((C[6]>>>0)<(C_[6]>>>0)?1:0))|0;
this._b =(C[7]>>>0)<(C_[7]>>>0)?1:0;for(var i =0; i <8; i++){
var gx = X[i]+ C[i];
var ga = gx &0xffff;
var gb = gx >>>16;
var gh =((((ga * ga)>>>17)+ ga * gb)>>>15)+ gb * gb;
var gl =(((gx &0xffff0000)* gx)|0)+(((gx &0x0000ffff)* gx)|0);
G[i]= gh ^ gl;}
X[0]=(G[0]+((G[7]<<16)|(G[7]>>>16))+((G[6]<<16)|(G[6]>>>16)))|0;
X[1]=(G[1]+((G[0]<<8)|(G[0]>>>24))+ G[7])|0;
X[2]=(G[2]+((G[1]<<16)|(G[1]>>>16))+((G[0]<<16)|(G[0]>>>16)))|0;
X[3]=(G[3]+((G[2]<<8)|(G[2]>>>24))+ G[1])|0;
X[4]=(G[4]+((G[3]<<16)|(G[3]>>>16))+((G[2]<<16)|(G[2]>>>16)))|0;
X[5]=(G[5]+((G[4]<<8)|(G[4]>>>24))+ G[3])|0;
X[6]=(G[6]+((G[5]<<16)|(G[5]>>>16))+((G[4]<<16)|(G[4]>>>16)))|0;
X[7]=(G[7]+((G[6]<<8)|(G[6]>>>24))+ G[5])|0;}
C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);}());
CryptoJS.pad.ZeroPadding ={
pad:function(data, blockSize){
var blockSizeBytes = blockSize *4;
data.clamp();
data.sigBytes += blockSizeBytes -((data.sigBytes % blockSizeBytes)|| blockSizeBytes);},
unpad:function(data){
var dataWords = data.words;
var i = data.sigBytes -1;while(!((dataWords[i >>>2]>>>(24-(i %4)*8))&0xff)){
i--;}
data.sigBytes = i +1;}};return CryptoJS;}
function encryptByDES(message, key){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex,{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});return encrypted.ciphertext.toString();}
function getSign(){
var message = 'https://wangluozhe.com/challenge/3';
message = message +'|'+ Date.parse(new Date()).toString();
var key = Date.parse(new Date()).toString();
window.sign =encryptByDES(message, key);return window.sign
}// console.log(getSign());
五、python代码实现
import time
import execjs
import requests
class Spider(object):
def __init__(self):
with open(file='js_encrypt.js', mode='r', encoding='utf-8') as fis:
js_code = fis.read() # 读取JS代码文件
self.js_obj = execjs.compile(js_code) # 激将JS代码传入
self.headers ={'Accept': 'application/json, text/javascript,*/*; q=0.01',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/110.0.0.0 Safari/537.36',
'Cookie': '自己账户的cookie'
}
self.url = 'https://wangluozhe.com/challenge/api/3'
self.count_number = 0
def getParams(self, page):
form_data = {
'page': page,
'count': 10,
'_signature': self.js_obj.call("getSign")
}
return form_data
def request_server(self, page):
form_data = self.getParams(page)
print("当前参数:", form_data)
response = requests.post(url=self.url, headers=self.headers, data=form_data)
for items in response.json()['data']:
print(f"当前值:{self.count_number} + {items['value']} = {self.count_number+items['value']}")
self.count_number += items['value']
def runs(self):
for page in range(1, 100+1):
self.request_server(page=page)
time.sleep(1.5)
print(f"100页的所有数据并加和:{self.count_number}")
if __name__ == '__main__':
Spider().runs()
总结
推荐 - 网洛者反爬练习平台第三题AAEncode 加密:https://blog.csdn.net/kdl_csdn/article/details/121977337
版权归原作者 EXI-小洲 所有, 如有侵权,请联系我们删除。