/* md5.js - MD5 Message-Digest
 * Copyright (C) 1999,2002 Masanao Izumo <iz@onicos.co.jp>
 * Version: 2.0.0
 * LastModified: May 13 2002
 *
 * This program is free software.  You can redistribute it and/or modify
 * it without any warranty.  This library calculates the MD5 based on RFC1321.
 * See RFC1321 for more information and algorism.
 */

/* Interface:
 * md5_128bits = hash(data);
 * md5_hexstr = hexhash(data);
 */

/* ChangeLog
 * 2002/05/13: Version 2.0.0 released
 * NOTICE: API is changed.
 * 2002/04/15: Bug fix about MD5 length.
 */
/* Modified by martin  2007/05/01 13:04:50
 * Packed by packer < http://dean.edwards.name/packer/ >
 *     e.g. var md5_string = MD5.$("foo");
 */
var MD5;eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3g={T:[3f,3e,3d,3c,3b,3a,2Z,2Y,2X,2W,2V,2U,2T,2S,2R,2Q,2P,2O,2N,2M,2L,2K,2J,2I,2H,2G,2F,2E,2D,2C,2B,2A,2z,2y,2x,2w,2v,2u,2t,2s,2r,2q,2p,2o,2n,2m,2l,2k,2j,2i,2h,2g,2f,2e,2d,2c,2b,2a,1Z,1Y,1X,1W,1V,1U,1T],R:(m(){e 1j=[[0,7,1],[1,12,2],[2,17,3],[3,22,4],[4,7,5],[5,12,6],[6,17,7],[7,22,8],[8,7,9],[9,12,10],[10,17,11],[11,22,12],[12,7,13],[13,12,14],[14,17,15],[15,22,16]];e 1i=[[1,5,17],[6,9,18],[11,14,19],[0,20,20],[5,5,21],[10,9,22],[15,14,23],[4,20,24],[9,5,25],[14,9,26],[3,14,27],[8,20,28],[13,5,29],[2,9,30],[7,14,31],[12,20,32]];e 1h=[[5,4,33],[8,11,34],[11,16,35],[14,23,36],[1,4,37],[4,11,38],[7,16,39],[10,23,1S],[13,4,1R],[0,11,1Q],[3,16,1P],[6,23,1O],[9,4,1N],[12,11,1M],[15,16,1L],[2,23,1K]];e 1g=[[0,6,1J],[7,10,1I],[14,15,1H],[5,21,1G],[12,6,1F],[3,10,1E],[10,15,1D],[1,21,S],[8,6,1C],[15,10,1B],[6,15,1A],[13,21,1z],[4,6,1y],[11,10,1x],[2,15,1w],[9,21,1b]];e F=m(x,y,z){o(x&y)|(~x&z)};e G=m(x,y,z){o(x&z)|(y&~z)};e H=m(x,y,z){o x^y^z};e I=m(x,y,z){o y^(x|~z)};o[[F,1j],[G,1i],[H,1h],[I,1g]]})(),w:m(J){o O.N(J&M)+O.N((J>>>8)&M)+O.N((J>>>16)&M)+O.N((J>>>24)&M)},1v:m(E){o E.q(0)|(E.q(1)<<8)|(E.q(2)<<16)|(E.q(3)<<24)},K:m(n){1f(n<0)n+=1e;1f(n>1u)n-=1e;o n},1a:m(x,s,f,g,r){e a,b,c,d;e V,L,U;e t,u;a=g[0];b=g[1];c=g[2];d=g[3];V=r[0];L=r[1];U=r[2];u=f(s[b],s[c],s[d]);t=s[a]+u+x[V]+h.T[U];t=h.K(t);t=((t<<L)|(t>>>(32-L)));t+=s[b];s[a]=h.K(t)},Z:m(l){e g,x,p,s;e A,D,C,f,r;e i,j,k;e Q;p=[1t,1s,1r,1q];A=l.1p;D=A&1o;C=(D<S)?(S-D):(1n-D);1m(C>0){l+="\\1l";v(i=0;i<C-1;i++)l+="\\1k"}l+=h.w(A*8);l+=h.w(0);A+=C+8;g=[0,1,2,3];x=1d 1c(16);s=1d 1c(4);v(k=0;k<A;k+=1b){v(i=0,j=k;i<16;i++,j+=4){x[i]=l.q(j)|(l.q(j+1)<<8)|(l.q(j+2)<<16)|(l.q(j+3)<<24)}v(i=0;i<4;i++)s[i]=p[i];v(i=0;i<4;i++){f=h.R[i][0];r=h.R[i][1];v(j=0;j<16;j++){h.1a(x,s,f,g,r[j]);Q=g[0];g[0]=g[3];g[3]=g[2];g[2]=g[1];g[1]=Q}}v(i=0;i<4;i++){p[i]+=s[i];p[i]=h.K(p[i])}}o h.w(p[0])+h.w(p[1])+h.w(p[2])+h.w(p[3])},$:m(l){e i,B,c;e P;P=h.Z(l);B="";v(i=0;i<16;i++){c=P.q(i);B+="Y".X((c>>4)&W);B+="Y".X(c&W)}o B}};',62,203,'||||||||||||||var||abcd|this||||data|function||return|state|charCodeAt|||||for|pack||||len|out|padLen|index|s4|||||n32|number|ss|0xff|fromCharCode|String|bit128|tmp|round|56||ii|kk|0xf|charAt|0123456789abcdef|hash|||||||||||apply_round|64|Array|new|4294967296|while|round4|round3|round2|round1|x00|x80|if|120|0x3f|length|0x10325476|0x98badcfe|0xefcdab89|0x67452301|4294967295|unpack|63|62|61|60|59|58|57|55|54|53|52|51|50|49|48|47|46|45|44|43|42|41|40|0xeb86d391|0x2ad7d2bb|0xbd3af235|0xf7537e82|0x4e0811a1|0xa3014314|0xfe2ce6e0|||||||||||0x6fa87e4f|0x85845dd1|0xffeff47d|0x8f0ccc92|0x655b59c3|0xfc93a039|0xab9423a7|0x432aff97|0xf4292244|0xc4ac5665|0x1fa27cf8|0xe6db99e5|0xd9d4d039|0x04881d05|0xd4ef3085|0xeaa127fa|0x289b7ec6|0xbebfbc70|0xf6bb4b60|0x4bdecfa9|0xa4beea44|0xfde5380c|0x6d9d6122|0x8771f681|0xfffa3942|0x8d2a4c8a|0x676f02d9|0xfcefa3f8|0xa9e3e905|0x455a14ed|0xf4d50d87|0xc33707d6|0x21e1cde6|0xe7d3fbc8|0xd8a1e681|0x02441453|0xd62f105d|0xe9b6c7aa|0x265e5a51|0xc040b340|0xf61e2562|0x49b40821|0xa679438e|0xfd987193|0x6b901122|0x895cd7be|0xffff5bb1|0x8b44f7af|0x698098d8|0xfd469501|0xa8304613|0x4787c62a|||||||||||0xf57c0faf|0xc1bdceee|0x242070db|0xe8c7b756|0xd76aa478|0x00000000|MD5'.split('|'),0,{}));

