eval(function(p,a,c,k,e,r){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--)r[e(c)]=k[c]||e(c);k=[function(e){return r[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}('G 1h={9X:\'1.6.0.1\',1T:{43:!!(1A.7y&&!1A.8L),4B:!!1A.8L,4x:51.5d.47(\'gN/\')>-1,7L:51.5d.47(\'7L\')>-1&&51.5d.47(\'c2\')==-1,bI:!!51.5d.1f(/fG.*f8.*aT/)},3V:{79:!!1c.2O,6t:!!1A.6C,83:1c.48(\'1X\').5h&&1c.48(\'1X\').5h!==1c.48(\'1x\').5h},7O:\'<5c[^>]*>([\\\\S\\\\s]*?)<\\/5c>\',bT:/^\\/\\*-ga-([\\s\\S]*)\\*\\/\\s*$/,4i:q(){},K:q(x){o x}};E(1h.1T.bI)1h.3V.83=1t;G 2b={2v:q(){G 2T=1k,3i=$A(1r);E(M.2q(3i[0]))2T=3i.5m();q 1N(){C.2K.3J(C,1r)}M.1a(1N,2b.1d);1N.9N=2T;1N.cK=[];E(2T){G 9G=q(){};9G.1l=2T.1l;1N.1l=1s 9G;2T.cK.1i(1N)}18(G i=0;i<3i.N;i++)1N.6I(3i[i]);E(!1N.1l.2K)1N.1l.2K=1h.4i;1N.1l.cc=1N;o 1N}};2b.1d={6I:q(26){G 3d=C.9N&&C.9N.1l;G 3i=M.4n(26);E(!M.4n({2D:1o}).N)3i.1i("2D","bS");18(G i=0,N=3i.N;i<N;i++){G 1w=3i[i],I=26[1w];E(3d&&M.2q(I)&&I.bH().3H()=="$4e"){G 1E=I,I=M.1a((q(m){o q(){o 3d[m].3J(C,1r)}})(1w).5S(1E),{bS:q(){o 1E},2D:q(){o 1E.2D()}})}C.1l[1w]=I}o C}};G 4V={};M.1a=q(5W,26){18(G 1w 1V 26)5W[1w]=26[1w];o 5W};M.1a(M,{2B:q(14){2x{E(M.2F(14))o\'4z\';E(14===1k)o\'1k\';o 14.2B?14.2B():14.2D()}2C(e){E(e aR eG)o\'...\';4A e;}},3D:q(14){G 1C=4b 14;5A(1C){2s\'4z\':2s\'q\':2s\'e8\':o;2s\'e6\':o 14.2D()}E(14===1k)o\'1k\';E(14.3D)o 14.3D();E(M.3G(14))o;G V=[];18(G 1w 1V 14){G I=M.3D(14[1w]);E(!M.2F(I))V.1i(1w.3D()+\': \'+I)}o\'{\'+V.2z(\', \')+\'}\'},4q:q(14){o $H(14).4q()},3F:q(14){o 14&&14.3F?14.3F():2a.5L(14)},4n:q(14){G 4n=[];18(G 1w 1V 14)4n.1i(1w);o 4n},1S:q(14){G 1S=[];18(G 1w 1V 14)1S.1i(14[1w]);o 1S},2m:q(14){o M.1a({},14)},3G:q(14){o 14&&14.3p==1},4F:q(14){o 14&&14.cc===2e},87:q(14){o 14 aR 44},2q:q(14){o 4b 14=="q"},3c:q(14){o 4b 14=="3n"},84:q(14){o 4b 14=="4N"},2F:q(14){o 4b 14=="4z"}});M.1a(9S.1l,{bH:q(){G 3C=C.2D().1f(/^[\\s\\(]*q[^(]*\\((.*?)\\)/)[1].5l(",").7Y("3X");o 3C.N==1&&!3C[0]?[]:3C},1G:q(){E(1r.N<2&&M.2F(1r[0]))o C;G 3l=C,21=$A(1r),14=21.5m();o q(){o 3l.3J(14,21.20($A(1r)))}},gQ:q(){G 3l=C,21=$A(1r),14=21.5m();o q(1b){o 3l.3J(14,[1b||1A.1b].20(21))}},7U:q(){E(!1r.N)o C;G 3l=C,21=$A(1r);o q(){o 3l.3J(C,21.20($A(1r)))}},9B:q(){G 3l=C,21=$A(1r),cs=21.5m()*cr;o 1A.gI(q(){o 3l.3J(3l,21)},cs)},5S:q(1L){G 3l=C;o q(){o 1L.3J(C,[3l.1G(C)].20($A(1r)))}},4P:q(){E(C.9v)o C.9v;G 3l=C;o C.9v=q(){o 3l.3J(1k,[C].20($A(1r)))}}});9S.1l.4k=9S.1l.9B.7U(0.gG);gF.1l.3D=q(){o\'"\'+C.gC()+\'-\'+(C.gB()+1).4u(2)+\'-\'+C.gA().4u(2)+\'T\'+C.gs().4u(2)+\':\'+C.gq().4u(2)+\':\'+C.gn().4u(2)+\'Z"\'};G c0={bU:q(){G 7B;18(G i=0,N=1r.N;i<N;i++){G bR=1r[i];2x{7B=bR();2i}2C(e){}}o 7B}};4f.1l.1f=4f.1l.2P;4f.bK=q(5R){o 2a(5R).1Y(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\'\\\\$1\')};G by=2b.2v({2K:q(3a,4h){C.3a=3a;C.4h=4h;C.7s=1t;C.6w()},6w:q(){C.3Y=bm(C.6v.1G(C),C.4h*cr)},90:q(){C.3a(C)},9f:q(){E(!C.3Y)o;bi(C.3Y);C.3Y=1k},6v:q(){E(!C.7s){2x{C.7s=1o;C.90()}fF{C.7s=1t}}}});M.1a(2a,{5L:q(I){o I==1k?\'\':2a(I)},bf:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});M.1a(2a.1l,{3o:q(22,3t){G 1q=\'\',26=C,1f;3t=1r.5I.8J(3t);1O(26.N>0){E(1f=26.1f(22)){1q+=26.3y(0,1f.1g);1q+=2a.5L(3t(1f));26=26.3y(1f.1g+1f[0].N)}1m{1q+=26,26=\'\'}}o 1q},aS:q(22,3t,3s){3t=C.3o.8J(3t);3s=M.2F(3s)?1:3s;o C.3o(22,q(1f){E(--3s<0)o 1f[0];o 3t(1f)})},aQ:q(22,Y){C.3o(22,Y);o 2a(C)},eC:q(N,5s){N=N||30;5s=M.2F(5s)?\'...\':5s;o C.N>N?C.3y(0,N-5s.N)+5s:2a(C)},3X:q(){o C.1Y(/^\\s+/,\'\').1Y(/\\s+$/,\'\')},aN:q(){o C.1Y(/<\\/?[^>]+>/gi,\'\')},3R:q(){o C.1Y(1s 4f(1h.7O,\'aK\'),\'\')},aI:q(){G aG=1s 4f(1h.7O,\'aK\');G aD=1s 4f(1h.7O,\'eb\');o(C.1f(aG)||[]).2V(q(az){o(az.1f(aD)||[\'\',\'\'])[1]})},4y:q(){o C.aI().2V(q(5c){o 74(5c)})},77:q(){G 5B=1r.5I;5B.3T.7b=C;o 5B.1X.4T},au:q(){G 1X=1s J(\'1X\');1X.4T=C.aN();o 1X.49[0]?(1X.49.N>1?$A(1X.49).3L(\'\',q(2M,L){o 2M+L.4G}):1X.49[0].4G):\'\'},7g:q(ai){G 1f=C.3X().1f(/([^?#]*)(#.*)?$/);E(!1f)o{};o 1f[1].5l(ai||\'&\').3L({},q(3z,1I){E((1I=1I.5l(\'=\'))[0]){G 1u=9A(1I.5m());G I=1I.N>1?1I.2z(\'=\'):1I[0];E(I!=4z)I=9A(I);E(1u 1V 3z){E(!M.4F(3z[1u]))3z[1u]=[3z[1u]];3z[1u].1i(I)}1m 3z[1u]=I}o 3z})},3u:q(){o C.5l(\'\')},8V:q(){o C.3y(0,C.N-1)+2a.dC(C.a6(C.N-1)+1)},7o:q(3s){o 3s<1?\'\':1s 2e(3s+1).2z(C)},8Z:q(){G 4L=C.5l(\'-\'),8X=4L.N;E(8X==1)o 4L[0];G 88=C.7q(0)==\'-\'?4L[0].7q(0).2U()+4L[0].5N(1):4L[0];18(G i=1;i<8X;i++)88+=4L[i].7q(0).2U()+4L[i].5N(1);o 88},6B:q(){o C.7q(0).2U()+C.5N(1).28()},dg:q(){o C.3o(/::/,\'/\').3o(/([A-Z]+)([A-Z][a-z])/,\'#{1}6h#{2}\').3o(/([a-z\\d])([A-Z])/,\'#{1}6h#{2}\').3o(/-/,\'6h\').28()},hC:q(){o C.3o(/6h/,\'-\')},2B:q(d1){G 9z=C.3o(/[\\hw-\\ht\\\\]/,q(1f){G 9R=2a.bf[1f[0]];o 9R?9R:\'\\\\hk\'+1f[0].a6().4u(2,16)});E(d1)o\'"\'+9z.1Y(/"/g,\'\\\\"\')+\'"\';o"\'"+9z.1Y(/\'/g,\'\\\\\\\'\')+"\'"},3D:q(){o C.2B(1o)},9M:q(2d){o C.aS(2d||1h.bT,\'#{1}\')},cM:q(){G 5R=C;E(5R.5o())o 1t;5R=C.1Y(/\\\\./g,\'@\').1Y(/"[^"\\\\\\n\\r]*"/g,\'\');o(/^[,:{}\\[\\]0-9.\\-+h0-u \\n\\r\\t]*$/).2P(5R)},67:q(cE){G 3j=C.9M();2x{E(!cE||3j.cM())o 74(\'(\'+3j+\')\')}2C(e){}4A 1s gU(\'gS gR cB 3n: \'+C.2B());},1M:q(22){o C.47(22)>-1},9D:q(22){o C.47(22)===0},cA:q(22){G d=C.N-22.N;o d>=0&&C.9C(22)===d},63:q(){o C==\'\'},5o:q(){o/^\\s*$/.2P(C)},gP:q(14,22){o 1s 3e(C,22).2O(14)}});E(1h.1T.4x||1h.1T.43)M.1a(2a.1l,{77:q(){o C.1Y(/&/g,\'&cw;\').1Y(/</g,\'&cu;\').1Y(/>/g,\'&gt;\')},au:q(){o C.1Y(/&cw;/g,\'&\').1Y(/&cu;/g,\'<\').1Y(/&gt;/g,\'>\')}});2a.1l.3o.8J=q(3t){E(M.2q(3t))o 3t;G 5Z=1s 3e(3t);o q(1f){o 5Z.2O(1f)}};2a.1l.gK=2a.1l.7g;M.1a(2a.1l.77,{1X:1c.48(\'1X\'),3T:1c.cq(\'\')});cp(2a.1l.77)1X.5Y(3T);G 3e=2b.2v({2K:q(5Z,22){C.5Z=5Z.2D();C.22=22||3e.cm},2O:q(14){E(M.2q(14.9x))14=14.9x();o C.5Z.3o(C.22,q(1f){E(14==1k)o\'\';G 5e=1f[1]||\'\';E(5e==\'\\\\\')o 1f[2];G 6L=14,6K=1f[3];G 22=/^([^.[]+|\\[((?:.*?[^\\\\])?)\\])(\\.|\\[|$)/;1f=22.ch(6K);E(1f==1k)o 5e;1O(1f!=1k){G cg=1f[1].9D(\'[\')?1f[2].3o(\'\\\\\\\\]\',\']\'):1f[1];6L=6L[cg];E(1k==6L||\'\'==1f[3])2i;6K=6K.5N(\'[\'==1f[3]?1f[1].N:1f[0].N);1f=22.ch(6K)}o 5e+2a.5L(6L)}.1G(C))}});3e.cm=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;G $2i={};G 2H={1D:q(Y,1K){G 1g=0;Y=Y.1G(1K);2x{C.4a(q(I){Y(I,1g++)})}2C(e){E(e!=$2i)4A e;}o C},cb:q(4N,Y,1K){Y=Y?Y.1G(1K):1h.K;G 1g=-4N,9t=[],2E=C.3u();1O((1g+=4N)<2E.N)9t.1i(2E.3y(1g,1g+4N));o 9t.9s(Y,1K)},9r:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G 1q=1o;C.1D(q(I,1g){1q=1q&&!!Y(I,1g);E(!1q)4A $2i;});o 1q},c6:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G 1q=1t;C.1D(q(I,1g){E(1q=!!Y(I,1g))4A $2i;});o 1q},9s:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G V=[];C.1D(q(I,1g){V.1i(Y(I,1g))});o V},7H:q(Y,1K){Y=Y.1G(1K);G 1q;C.1D(q(I,1g){E(Y(I,1g)){1q=I;4A $2i;}});o 1q},5V:q(Y,1K){Y=Y.1G(1K);G V=[];C.1D(q(I,1g){E(Y(I,1g))V.1i(I)});o V},gx:q(2d,Y,1K){Y=Y?Y.1G(1K):1h.K;G V=[];E(M.3c(2d))2d=1s 4f(2d);C.1D(q(I,1g){E(2d.1f(I))V.1i(Y(I,1g))});o V},1M:q(14){E(M.2q(C.47))E(C.47(14)!=-1)o 1o;G 9o=1t;C.1D(q(I){E(I==14){9o=1o;4A $2i;}});o 9o},gr:q(4N,6G){6G=M.2F(6G)?1k:6G;o C.cb(4N,q(3y){1O(3y.N<4N)3y.1i(6G);o 3y})},3L:q(2M,Y,1K){Y=Y.1G(1K);C.1D(q(I,1g){2M=Y(2M,I,1g)});o 2M},7Y:q(1E){G 21=$A(1r).3y(1);o C.2V(q(I){o I[1E].3J(I,21)})},gp:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G 1q;C.1D(q(I,1g){I=Y(I,1g);E(1q==1k||I>=1q)1q=I});o 1q},go:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G 1q;C.1D(q(I,1g){I=Y(I,1g);E(1q==1k||I<1q)1q=I});o 1q},gm:q(Y,1K){Y=Y?Y.1G(1K):1h.K;G 9i=[],9h=[];C.1D(q(I,1g){(Y(I,1g)?9i:9h).1i(I)});o[9i,9h]},5T:q(1w){G V=[];C.1D(q(I){V.1i(I[1w])});o V},gk:q(Y,1K){Y=Y.1G(1K);G V=[];C.1D(q(I,1g){E(!Y(I,1g))V.1i(I)});o V},bX:q(Y,1K){Y=Y.1G(1K);o C.2V(q(I,1g){o{I:I,6m:Y(I,1g)}}).gh(q(2p,5D){G a=2p.6m,b=5D.6m;o a<b?-1:a>b?1:0}).5T(\'I\')},3u:q(){o C.2V()},ge:q(){G Y=1h.K,21=$A(1r);E(M.2q(21.2y()))Y=21.gb();G bQ=[C].20(21).2V($A);o C.2V(q(I,1g){o Y(bQ.5T(1g))})},bP:q(){o C.3u().N},2B:q(){o\'#<2H:\'+C.3u().2B()+\'>\'}};M.1a(2H,{2V:2H.9s,9c:2H.7H,2S:2H.5V,2d:2H.5V,g9:2H.1M,g8:2H.3u,g7:2H.9r,g5:2H.c6});q $A(31){E(!31)o[];E(31.3u)o 31.3u();G N=31.N,V=1s 2e(N);1O(N--)V[N]=31[N];o V}E(1h.1T.4x){q $A(31){E(!31)o[];E(!(M.2q(31)&&31==\'[14 g4]\')&&31.3u)o 31.3u();G N=31.N,V=1s 2e(N);1O(N--)V[N]=31[N];o V}}2e.bF=$A;M.1a(2e.1l,2H);E(!2e.1l.95)2e.1l.95=2e.1l.4j;M.1a(2e.1l,{4a:q(Y){18(G i=0,N=C.N;i<N;i++)Y(C[i])},bA:q(){C.N=0;o C},3H:q(){o C[0]},2y:q(){o C[C.N-1]},g2:q(){o C.2S(q(I){o I!=1k})},bw:q(){o C.3L([],q(2E,I){o 2E.20(M.4F(I)?I.bw():[I])})},6y:q(){G 1S=$A(1r);o C.2S(q(I){o!1S.1M(I)})},4j:q(bv){o(bv!==1t?C:C.3u()).95()},g0:q(){o C.N>1?C:C[0]},bt:q(bs){o C.3L([],q(2E,I,1g){E(0==1g||(bs?2E.2y()!=I:!2E.1M(I)))2E.1i(I);o 2E})},fY:q(2E){o C.bt().5V(q(5Q){o 2E.7H(q(I){o 5Q===I})})},2m:q(){o[].20(C)},bP:q(){o C.N},2B:q(){o\'[\'+C.2V(M.2B).2z(\', \')+\']\'},3D:q(){G V=[];C.1D(q(14){G I=M.3D(14);E(!M.2F(I))V.1i(I)});o\'[\'+V.2z(\', \')+\']\'}});E(M.2q(2e.1l.bq))2e.1l.4a=2e.1l.bq;E(!2e.1l.47)2e.1l.47=q(5Q,i){i||(i=0);G N=C.N;E(i<0)i=N+i;18(;i<N;i++)E(C[i]===5Q)o i;o-1};E(!2e.1l.9C)2e.1l.9C=q(5Q,i){i=fV(i)?C.N:(i<0?C.N+i:i)+1;G n=C.3y(0,i).4j().47(5Q);o(n<0)?n:i-n-1};2e.1l.3u=2e.1l.2m;q $w(3n){E(!M.3c(3n))o[];3n=3n.3X();o 3n?3n.5l(/\\s+/):[]}E(1h.1T.4B){2e.1l.20=q(){G 2E=[];18(G i=0,N=C.N;i<N;i++)2E.1i(C[i]);18(G i=0,N=1r.N;i<N;i++){E(M.4F(1r[i])){18(G j=0,bk=1r[i].N;j<bk;j++)2E.1i(1r[i][j])}1m{2E.1i(1r[i])}}o 2E}}M.1a(52.1l,{fS:q(){o C.4u(2,16)},8V:q(){o C+1},7o:q(Y){$R(0,C,1o).1D(Y);o C},4u:q(N,bj){G 3n=C.2D(bj||10);o\'0\'.7o(N-3n.N)+3n},3D:q(){o fK(C)?C.2D():\'1k\'}});$w(\'fH fE fD fB\').1D(q(1E){52.1l[1E]=fy[1E].4P()});q $H(14){o 1s 44(14)};G 44=2b.2v(2H,(q(){q 8T(1u,I){E(M.2F(I))o 1u;o 1u+\'=\'+bb(2a.5L(I))}o{2K:q(14){C.4J=M.87(14)?14.6J():M.2m(14)},4a:q(Y){18(G 1u 1V C.4J){G I=C.4J[1u],1I=[1u,I];1I.1u=1u;1I.I=I;Y(1I)}},6r:q(1u,I){o C.4J[1u]=I},8R:q(1u){o C.4J[1u]},fi:q(1u){G I=C.4J[1u];8O C.4J[1u];o I},6J:q(){o M.2m(C.4J)},4n:q(){o C.5T(\'1u\')},1S:q(){o C.5T(\'I\')},1g:q(I){G 1f=C.7H(q(1I){o 1I.I===I});o 1f&&1f.1u},fd:q(14){o C.2m().5a(14)},5a:q(14){o 1s 44(14).3L(C,q(1q,1I){1q.6r(1I.1u,1I.I);o 1q})},4q:q(){o C.2V(q(1I){G 1u=bb(1I.1u),1S=1I.I;E(1S&&4b 1S==\'14\'){E(M.4F(1S))o 1S.2V(8T.7U(1u)).2z(\'&\')}o 8T(1u,1S)}).2z(\'&\')},2B:q(){o\'#<44:{\'+C.2V(q(1I){o 1I.2V(M.2B).2z(\': \')}).2z(\', \')+\'}>\'},3D:q(){o M.3D(C.6J())},2m:q(){o 1s 44(C)}}})());44.1l.9x=44.1l.6J;44.bF=$H;G b6=2b.2v(2H,{2K:q(4m,50,5K){C.4m=4m;C.50=50;C.5K=5K},4a:q(Y){G I=C.4m;1O(C.1M(I)){Y(I);I=I.8V()}},1M:q(I){E(I<C.4m)o 1t;E(C.5K)o I<C.50;o I<=C.50}});G $R=q(4m,50,5K){o 1s b6(4m,50,5K)};G 1Q={b5:q(){o c0.bU(q(){o 1s b4()},q(){o 1s b2(\'f1.aZ\')},q(){o 1s b2(\'f0.aZ\')})||1t},8I:0};1Q.5G={6u:[],4a:q(Y){C.6u.4a(Y)},aW:q(4p){E(!C.1M(4p))C.6u.1i(4p)},eW:q(4p){C.6u=C.6u.6y(4p)},7Z:q(3a,3k,1W,3j){C.1D(q(4p){E(M.2q(4p[3a])){2x{4p[3a].3J(4p,[3k,1W,3j])}2C(e){}}})}};M.1a(1Q.5G,2H);1Q.5G.aW({7e:q(){1Q.8I++},3O:q(){1Q.8I--}});1Q.8E=2b.2v({2K:q(U){C.U={1E:\'6o\',7d:1o,6n:\'7c/x-eB-1x-ey\',8D:\'ev-8\',3B:\'\',67:1o,8B:1o};M.1a(C.U,U||{});C.U.1E=C.U.1E.28();E(M.3c(C.U.3B))C.U.3B=C.U.3B.7g();1m E(M.87(C.U.3B))C.U.3B=C.U.3B.6J()}});1Q.5g=2b.2v(1Q.8E,{8z:1t,2K:q($4e,2X,U){$4e(U);C.1W=1Q.b5();C.3k(2X)},3k:q(2X){C.2X=2X;C.1E=C.U.1E;G 2W=M.2m(C.U.3B);E(![\'8R\',\'6o\'].1M(C.1E)){2W[\'eh\']=C.1E;C.1E=\'6o\'}C.3B=2W;E(2W=M.4q(2W)){E(C.1E==\'8R\')C.2X+=(C.2X.1M(\'?\')?\'&\':\'?\')+2W;1m E(/ef|aT|c2/.2P(51.5d))2W+=\'&6h=\'}2x{G 2o=1s 1Q.8v(C);E(C.U.7e)C.U.7e(2o);1Q.5G.7Z(\'7e\',C,2o);C.1W.ed(C.1E.2U(),C.2X,C.U.7d);E(C.U.7d)C.8i.1G(C).4k(1);C.1W.73=C.8u.1G(C);C.aB();C.2w=C.1E==\'6o\'?(C.U.ea||2W):1k;C.1W.e9(C.2w);E(!C.U.7d&&C.1W.aA)C.8u()}2C(e){C.4R(e)}},8u:q(){G 2R=C.1W.2R;E(2R>1&&!((2R==4)&&C.8z))C.8i(C.1W.2R)},aB:q(){G 4S={\'X-e7-e5\':\'b4\',\'X-1h-9X\':1h.9X,\'e4\':\'3T/e3, 3T/8p, 7c/6U, 3T/6U, */*\'};E(C.1E==\'6o\'){4S[\'8n-1C\']=C.U.6n+(C.U.8D?\'; e0=\'+C.U.8D:\'\');E(C.1W.aA&&(51.5d.1f(/7L\\/(\\d{4})/)||[0,aw])[1]<aw)4S[\'dZ\']=\'dY\'}E(4b C.U.aP==\'14\'){G 5x=C.U.aP;E(M.2q(5x.1i))18(G i=0,N=5x.N;i<N;i+=2)4S[5x[i]]=5x[i+1];1m $H(5x).1D(q(1I){4S[1I.1u]=1I.I})}18(G 1e 1V 4S)C.1W.dU(1e,4S[1e])},4W:q(){G 4w=C.6e();o!4w||(4w>=dT&&4w<dS)},6e:q(){2x{o C.1W.4w||0}2C(e){o 0}},8i:q(2R){G 6p=1Q.5g.an[2R],2o=1s 1Q.8v(C);E(6p==\'8F\'){2x{C.8z=1o;(C.U[\'5q\'+2o.4w]||C.U[\'5q\'+(C.4W()?\'dQ\':\'dP\')]||1h.4i)(2o,2o.7h)}2C(e){C.4R(e)}G 6n=2o.5u(\'8n-1C\');E(C.U.8B==\'ah\'||(C.U.8B&&6n&&6n.1f(/^\\s*(3T|7c)\\/(x-)?(dO|dM)5c(;.*)?\\s*$/i)))C.af()}2x{(C.U[\'5q\'+6p]||1h.4i)(2o,2o.7h);1Q.5G.7Z(\'5q\'+6p,C,2o,2o.7h)}2C(e){C.4R(e)}E(6p==\'8F\'){C.1W.73=1h.4i}},5u:q(1e){2x{o C.1W.8e(1e)}2C(e){o 1k}},af:q(){2x{o 74((C.1W.3g||\'\').9M())}2C(e){C.4R(e)}},4R:q(8Q){(C.U.b9||1h.4i)(C,8Q);1Q.5G.7Z(\'b9\',C,8Q)}});1Q.5g.an=[\'dJ\',\'dH\',\'dF\',\'dE\',\'8F\'];1Q.8v=2b.2v({2K:q(3k){C.3k=3k;G 1W=C.1W=3k.1W,2R=C.2R=1W.2R;E((2R>2&&!1h.1T.43)||2R==4){C.4w=C.6e();C.8S=C.ab();C.3g=2a.5L(1W.3g);C.7h=C.a8()}E(2R==4){G 6U=1W.a7;C.a7=M.2F(6U)?1k:6U;C.dB=C.a5()}},4w:0,8S:\'\',6e:1Q.5g.1l.6e,ab:q(){2x{o C.1W.8S||\'\'}2C(e){o\'\'}},5u:1Q.5g.1l.5u,dz:q(){2x{o C.89()}2C(e){o 1k}},8e:q(1e){o C.1W.8e(1e)},89:q(){o C.1W.89()},a8:q(){G 3j=C.5u(\'X-cB\');E(!3j)o 1k;3j=9A(bK(3j));2x{o 3j.67(C.3k.U.a2)}2C(e){C.3k.4R(e)}},a5:q(){G U=C.3k.U;E(!U.67||(U.67!=\'ah\'&&!(C.5u(\'8n-1C\')||\'\').1M(\'7c/3j\'))||C.3g.5o())o 1k;2x{o C.3g.67(U.a2)}2C(e){C.3k.4R(e)}}});1Q.a1=2b.2v(1Q.5g,{2K:q($4e,3r,2X,U){C.3r={4W:(3r.4W||3r),8Y:(3r.8Y||(3r.4W?1k:3r))};U=M.2m(U);G 3O=U.3O;U.3O=(q(2o,3j){C.bl(2o.3g);E(M.2q(3O))3O(2o,3j)}).1G(C);$4e(2X,U)},bl:q(3g){G 5M=C.3r[C.4W()?\'4W\':\'8Y\'],U=C.U;E(!U.4y)3g=3g.3R();E(5M=$(5M)){E(U.58){E(M.3c(U.58)){G 58={};58[U.58]=3g;5M.2A(58)}1m U.58(5M,3g)}1m 5M.5a(3g)}}});1Q.dq=2b.2v(1Q.8E,{2K:q($4e,3r,2X,U){$4e(U);C.3O=C.U.3O;C.4h=(C.U.4h||2);C.54=(C.U.54||1);C.86={};C.3r=3r;C.2X=2X;C.4m()},4m:q(){C.U.3O=C.bx.1G(C);C.6v()},9f:q(){C.86.U.3O=4z;dl(C.3Y);(C.3O||1h.4i).3J(C,1r)},bx:q(2o){E(C.U.54){C.54=(2o.3g==C.a0?C.54*C.U.54:1);C.a0=2o.3g}C.3Y=C.6v.1G(C).9B(C.54*C.4h)},6v:q(){C.86=1s 1Q.a1(C.3r,C.2X,C.U)}});q $(k){E(1r.N>1){18(G i=0,1Z=[],N=1r.N;i<N;i++)1Z.1i($(1r[i]));o 1Z}E(M.3c(k))k=1c.dh(k);o J.1a(k)}E(1h.3V.79){1c.85=q(1z,6Z){G V=[];G 9g=1c.2O(1z,$(6Z)||1c,1k,dc.db,1k);18(G i=0,N=9g.d9;i<N;i++)V.1i(J.1a(9g.d7(i)));o V}}E(!1A.6Y)G 6Y={};E(!6Y.d4){M.1a(6Y,{d4:1,hB:2,d3:3,hz:4,hy:5,hx:6,hv:7,hs:8,hq:9,hp:10,hm:11,hi:12})}(q(){G k=C.J;C.J=q(17,2k){2k=2k||{};17=17.28();G 2Q=J.2Q;E(1h.1T.43&&2k.1e){17=\'<\'+17+\' 1e="\'+2k.1e+\'">\';8O 2k.1e;o J.6V(1c.48(17),2k)}E(!2Q[17])2Q[17]=J.1a(1c.48(17));o J.6V(2Q[17].h8(1t),2k)};M.1a(C.J,k||{})}).9L(1A);J.2Q={};J.1d={9O:q(k){o $(k).15.3x!=\'81\'},cI:q(k){k=$(k);J[J.9O(k)?\'cH\':\'cG\'](k);o k},cH:q(k){$(k).15.3x=\'81\';o k},cG:q(k){$(k).15.3x=\'\';o k},cS:q(k){k=$(k);k.1P.6O(k);o k},5a:q(k,W){k=$(k);E(W&&W.2N)W=W.2N();E(M.3G(W))o k.5a().2A(W);W=M.3F(W);k.4T=W.3R();W.4y.1G(W).4k();o k},1Y:q(k,W){k=$(k);E(W&&W.2N)W=W.2N();1m E(!M.3G(W)){W=M.3F(W);G 3f=k.cD.9F();3f.gT(k);W.4y.1G(W).4k();W=3f.cC(W.3R())}k.1P.9E(W,k);o k},2A:q(k,24){k=$(k);E(M.3c(24)||M.84(24)||M.3G(24)||(24&&(24.2N||24.3F)))24={4o:24};G W,t,3f;18(1v 1V 24){W=24[1v];1v=1v.28();t=J.5j[1v];E(W&&W.2N)W=W.2N();E(M.3G(W)){t.2A(k,W);3w}W=M.3F(W);3f=k.cD.9F();t.65(k,3f);t.2A(k,3f.cC(W.3R()));W.4y.1G(W).4k()}o k},5S:q(k,1L,2k){k=$(k);E(M.3G(1L))$(1L).6V(2k||{});1m E(M.3c(1L))1L=1s J(1L,2k);1m 1L=1s J(\'1X\',1L);E(k.1P)k.1P.9E(1L,k);1L.5Y(k);o 1L},2B:q(k){k=$(k);G 1q=\'<\'+k.17.28();$H({\'1p\':\'1p\',\'1j\':\'6Q\'}).1D(q(1I){G 1w=1I.3H(),1R=1I.2y();G I=(k[1w]||\'\').2D();E(I)1q+=\' \'+1R+\'=\'+I.2B(1o)});o 1q+\'>\'},7V:q(k,1w){k=$(k);G 1Z=[];1O(k=k[1w])E(k.3p==1)1Z.1i(J.1a(k));o 1Z},64:q(k){o $(k).7V(\'1P\')},6P:q(k){o $(k).cz("*")},cy:q(k){k=$(k).62;1O(k&&k.3p!=1)k=k.3P;o $(k)},cx:q(k){E(!(k=$(k).62))o[];1O(k&&k.3p!=1)k=k.3P;E(k)o[k].20($(k).4M());o[]},61:q(k){o $(k).7V(\'cv\')},4M:q(k){o $(k).7V(\'3P\')},gO:q(k){k=$(k);o k.61().4j().20(k.4M())},1f:q(k,42){E(M.3c(42))42=1s 19(42);o 42.1f($(k))},gM:q(k,1z,1g){k=$(k);E(1r.N==1)o $(k.1P);G 64=k.64();o 1z?19.5i(64,1z,1g):64[1g||0]},gL:q(k,1z,1g){k=$(k);E(1r.N==1)o k.cy();G 6P=k.6P();o 1z?19.5i(6P,1z,1g):6P[1g||0]},gJ:q(k,1z,1g){k=$(k);E(1r.N==1)o $(19.25.6N(k));G 61=k.61();o 1z?19.5i(61,1z,1g):61[1g||0]},6R:q(k,1z,1g){k=$(k);E(1r.N==1)o $(19.25.6M(k));G 4M=k.4M();o 1z?19.5i(4M,1z,1g):4M[1g||0]},2S:q(){G 21=$A(1r),k=$(21.5m());o 19.7S(k,21)},5n:q(){G 21=$A(1r),k=$(21.5m());o 19.7S(k.1P,21).6y(k)},co:q(k){k=$(k);G 1p=k.5f(\'1p\'),5B=1r.5I;E(1p)o 1p;do{1p=\'gH\'+5B.cl++}1O($(1p));k.6V(\'1p\',1p);o 1p},5f:q(k,1e){k=$(k);E(1h.1T.43){G t=J.3Q.7R;E(t.1S[1e])o t.1S[1e](k,1e);E(t.3C[1e])1e=t.3C[1e];E(1e.1M(\':\')){o(!k.2k||!k.2k[1e])?1k:k.2k[1e].I}}o k.9w(1e)},6V:q(k,1e,I){k=$(k);G 2k={},t=J.3Q.6W;E(4b 1e==\'14\')2k=1e;1m 2k[1e]=M.2F(I)?1o:I;18(G 29 1V 2k){1e=t.3C[29]||29;I=2k[29];E(t.1S[29])1e=t.1S[29](k,I);E(I===1t||I===1k)k.ck(1e);1m E(I===1o)k.cj(1e,1e);1m k.cj(1e,I)}o k},ci:q(k){o $(k).5X().2Y},cf:q(k){o $(k).5X().2f},68:q(k){o 1s J.7N(k)},7M:q(k,1j){E(!(k=$(k)))o;G 70=k.1j;o(70.N>0&&(70==1j||1s 4f("(^|\\\\s)"+1j+"(\\\\s|$)").2P(70)))},ce:q(k,1j){E(!(k=$(k)))o;E(!k.7M(1j))k.1j+=(k.1j?\' \':\'\')+1j;o k},cd:q(k,1j){E(!(k=$(k)))o;k.1j=k.1j.1Y(1s 4f("(^|\\\\s+)"+1j+"(\\\\s+|$)"),\' \').3X();o k},gE:q(k,1j){E(!(k=$(k)))o;o k[k.7M(1j)?\'cd\':\'ce\'](1j)},gD:q(k){k=$(k);G L=k.62;1O(L){G ca=L.3P;E(L.3p==3&&!/\\S/.2P(L.4G))k.6O(L);L=ca}o k},63:q(k){o $(k).4T.5o()},7K:q(k,3d){k=$(k),3d=$(3d);G c9=3d;E(k.c8)o(k.c8(3d)&8)===8;E(k.7I&&!1h.1T.4B){G e=k.7I,a=3d.7I,6H=3d.3P;E(!6H){do{3d=3d.1P}1O(!(6H=3d.3P)&&3d.1P)}E(6H)o(e>a&&e<6H.7I)}1O(k=k.1P)E(k==c9)o 1o;o 1t},c7:q(k){k=$(k);G 3M=k.5b();1A.c7(3M[0],3M[1]);o k},2l:q(k,15){k=$(k);15=15==\'9q\'?\'71\':15.8Z();G I=k.15[15];E(!I){G 9p=1c.gz.gy(k,1k);I=9p?9p[15]:1k}E(15==\'3N\')o I?5v(I):1.0;o I==\'7G\'?1k:I},gu:q(k){o $(k).2l(\'3N\')},9n:q(k,4I){k=$(k);G 9m=k.15,1f;E(M.3c(4I)){k.15.9l+=\';\'+4I;o 4I.1M(\'3N\')?k.5C(4I.1f(/3N:\\s*(\\d?\\.?\\d*)/)[1]):k}18(G 1w 1V 4I)E(1w==\'3N\')k.5C(4I[1w]);1m 9m[(1w==\'9q\'||1w==\'71\')?(M.2F(9m.9k)?\'71\':\'9k\'):1w]=4I[1w];o k},5C:q(k,I){k=$(k);k.15.3N=(I==1||I===\'\')?\'\':(I<0.7F)?0:I;o k},5X:q(k){k=$(k);G 3x=$(k).2l(\'3x\');E(3x!=\'81\'&&3x!=1k)o{2f:k.5U,2Y:k.5z};G 41=k.15;G c4=41.9j;G c3=41.1v;G c1=41.3x;41.9j=\'7E\';41.1v=\'4U\';41.3x=\'gl\';G bZ=k.bY;G bW=k.bV;41.3x=c1;41.1v=c3;41.9j=c4;o{2f:bZ,2Y:bW}},gj:q(k){k=$(k);G 3M=J.2l(k,\'1v\');E(3M==\'7a\'||!3M){k.9e=1o;k.15.1v=\'6F\';E(1A.8L){k.15.2g=0;k.15.2p=0}}o k},gg:q(k){k=$(k);E(k.9e){k.9e=4z;k.15.1v=k.15.2g=k.15.2p=k.15.4o=k.15.5D=\'\'}o k},gf:q(k){k=$(k);E(k.4X)o k;k.4X=J.2l(k,\'9d\')||\'7G\';E(k.4X!==\'7E\')k.15.9d=\'7E\';o k},gc:q(k){k=$(k);E(!k.4X)o k;k.15.9d=k.4X==\'7G\'?\'\':k.4X;k.4X=1k;o k},5b:q(k){G 2L=0,2J=0;do{2L+=k.56||0;2J+=k.4Y||0;k=k.4d}1O(k);o J.55(2J,2L)},6D:q(k){G 2L=0,2J=0;do{2L+=k.56||0;2J+=k.4Y||0;k=k.4d;E(k){E(k.17==\'bO\')2i;G p=J.2l(k,\'1v\');E(p==\'6F\'||p==\'4U\')2i}}1O(k);o J.55(2J,2L)},9b:q(k){k=$(k);E(k.2l(\'1v\')==\'4U\')o;G 9a=k.6D();G 2g=9a[1];G 2p=9a[0];G 2f=k.bY;G 2Y=k.bV;k.bN=2p-5v(k.15.2p||0);k.bM=2g-5v(k.15.2g||0);k.bL=k.15.2f;k.bJ=k.15.2Y;k.15.1v=\'4U\';k.15.2g=2g+\'3m\';k.15.2p=2p+\'3m\';k.15.2f=2f+\'3m\';k.15.2Y=2Y+\'3m\';o k},99:q(k){k=$(k);E(k.2l(\'1v\')==\'6F\')o;k.15.1v=\'6F\';G 2g=5v(k.15.2g||0)-(k.bM||0);G 2p=5v(k.15.2p||0)-(k.bN||0);k.15.2g=2g+\'3m\';k.15.2p=2p+\'3m\';k.15.2Y=k.bJ;k.15.2f=k.bL;o k},98:q(k){G 2L=0,2J=0;do{2L+=k.4E||0;2J+=k.4D||0;k=k.1P}1O(k);o J.55(2J,2L)},7z:q(k){E(k.4d)o $(k.4d);E(k==1c.2w)o $(k);1O((k=k.1P)&&k!=1c.2w)E(J.2l(k,\'1v\')!=\'7a\')o $(k);o $(1c.2w)},6A:q(96){G 2L=0,2J=0;G k=96;do{2L+=k.56||0;2J+=k.4Y||0;E(k.4d==1c.2w&&J.2l(k,\'1v\')==\'4U\')2i}1O(k=k.4d);k=96;do{E(!1h.1T.4B||k.17==\'bO\'){2L-=k.4E||0;2J-=k.4D||0}}1O(k=k.1P);o J.55(2J,2L)},bG:q(k,26){G U=M.1a({bE:1o,bD:1o,bC:1o,bB:1o,56:0,4Y:0},1r[2]||{});26=$(26);G p=26.6A();k=$(k);G 5P=[0,0];G 2T=1k;E(J.2l(k,\'1v\')==\'4U\'){2T=k.7z();5P=2T.6A()}E(2T==1c.2w){5P[0]-=1c.2w.4Y;5P[1]-=1c.2w.56}E(U.bE)k.15.2p=(p[0]-5P[0]+U.4Y)+\'3m\';E(U.bD)k.15.2g=(p[1]-5P[1]+U.56)+\'3m\';E(U.bC)k.15.2f=26.5U+\'3m\';E(U.bB)k.15.2Y=26.5z+\'3m\';o k}};J.1d.co.cl=1;M.1a(J.1d,{cz:J.1d.2S,g3:J.1d.cx});J.3Q={6W:{3C:{1j:\'6Q\',bz:\'18\'},1S:{}}};E(!1c.9F||1h.1T.4B){J.1d.2A=q(k,24){k=$(k);E(M.3c(24)||M.84(24)||M.3G(24)||(24&&(24.2N||24.3F)))24={4o:24};G t=J.5j,W,1v,3M,17;18(1v 1V 24){W=24[1v];1v=1v.28();3M=t[1v];E(W&&W.2N)W=W.2N();E(M.3G(W)){3M.2A(k,W);3w}W=M.3F(W);17=((1v==\'5e\'||1v==\'7x\')?k.1P:k).17.2U();E(t.4g[17]){G 5O=J.7w(17,W.3R());E(1v==\'2g\'||1v==\'7x\')5O.4j();5O.1D(3M.2A.7U(k))}1m k.g1(3M.6x,W.3R());W.4y.1G(W).4k()}o k}}E(1h.1T.4B){J.1d.2l=J.1d.2l.5S(q(3Z,k,15){5A(15){2s\'2p\':2s\'2g\':2s\'5D\':2s\'4o\':E(3Z(k,\'1v\')===\'7a\')o 1k;2s\'2Y\':2s\'2f\':E(!J.9O(k))o 1k;G 7v=bu(3Z(k,15),10);E(7v!==k[\'2Z\'+15.6B()])o 7v+\'3m\';G 3i;E(15===\'2Y\'){3i=[\'7u-2g-2f\',\'7t-2g\',\'7t-4o\',\'7u-4o-2f\']}1m{3i=[\'7u-2p-2f\',\'7t-2p\',\'7t-5D\',\'7u-5D-2f\']}o 3i.3L(7v,q(2M,1w){G 94=3Z(k,1w);o 94===1k?2M:2M-bu(94,10)})+\'3m\';6z:o 3Z(k,15)}});J.1d.5f=J.1d.5f.5S(q(3Z,k,1R){E(1R===\'7r\')o k.7r;o 3Z(k,1R)})}1m E(1h.1T.43){$w(\'6D 7z 6A\').1D(q(1E){J.1d[1E]=J.1d[1E].5S(q(3Z,k){k=$(k);G 1v=k.2l(\'1v\');E(1v!=\'7a\')o 3Z(k);k.9n({1v:\'6F\'});G I=3Z(k);k.9n({1v:1v});o I})});J.1d.2l=q(k,15){k=$(k);15=(15==\'9q\'||15==\'71\')?\'9k\':15.8Z();G I=k.15[15];E(!I&&k.53)I=k.53[15];E(15==\'3N\'){E(I=(k.2l(\'2d\')||\'\').1f(/93\\(3N=(.*)\\)/))E(I[1])o 5v(I[1])/br;o 1.0}E(I==\'7G\'){E((15==\'2f\'||15==\'2Y\')&&(k.2l(\'3x\')!=\'81\'))o k[\'2Z\'+15.6B()]+\'3m\';o 1k}o I};J.1d.5C=q(k,I){q 92(2d){o 2d.1Y(/93\\([^\\)]*\\)/gi,\'\')}k=$(k);G 53=k.53;E((53&&!53.fX)||(!53&&k.15.bp==\'fU\'))k.15.bp=1;G 2d=k.2l(\'2d\'),15=k.15;E(I==1||I===\'\'){(2d=92(2d))?15.2d=2d:15.ck(\'2d\');o k}1m E(I<0.7F)I=0;15.2d=92(2d)+\'93(3N=\'+(I*br)+\')\';o k};J.3Q={7R:{3C:{\'6Q\':\'1j\',\'18\':\'bz\'},1S:{7p:q(k,1R){o k.9w(1R,2)},bo:q(k,1R){G L=k.bn(1R);o L?L.I:""},2j:q(k,1R){1R=k.9w(1R);o 1R?1R.2D().3y(23,-2):1k},6E:q(k,1R){o $(k).3I(1R)?1R:1k},15:q(k){o k.15.9l.28()},7r:q(k){o k.7r}}}};J.3Q.6W={3C:M.2m(J.3Q.7R.3C),1S:{3S:q(k,I){k.3S=!!I},15:q(k,I){k.15.9l=I?I:\'\'}}};J.3Q.91={};$w(\'fR fQ fP fO fN 7D \'+\'fM fL fJ fI\').1D(q(29){J.3Q.6W.3C[29.28()]=29;J.3Q.91[29.28()]=29});(q(v){M.1a(v,{bh:v.7p,bg:v.7p,1C:v.7p,5w:v.bo,3A:v.6E,3S:v.6E,fC:v.6E,fA:v.6E,fz:v.2j,be:v.2j,fx:v.2j,fw:v.2j,fv:v.2j,fu:v.2j,ft:v.2j,fs:v.2j,fp:v.2j,fo:v.2j,fn:v.2j,fm:v.2j,fl:v.2j,fk:v.2j,fj:v.2j,fh:v.2j,fg:v.2j,ff:v.2j})})(J.3Q.7R.1S)}1m E(1h.1T.7L&&/fe:1\\.8\\.0/.2P(51.5d)){J.1d.5C=q(k,I){k=$(k);k.15.3N=(I==1)?0.fc:(I===\'\')?\'\':(I<0.7F)?0:I;o k}}1m E(1h.1T.4x){J.1d.5C=q(k,I){k=$(k);k.15.3N=(I==1||I===\'\')?\'\':(I<0.7F)?0:I;E(I==1)E(k.17==\'b8\'&&k.2f){k.2f++;k.2f--}1m 2x{G n=1c.cq(\' \');k.5Y(n);k.6O(n)}2C(e){}o k};J.1d.5b=q(k){G 2L=0,2J=0;do{2L+=k.56||0;2J+=k.4Y||0;E(k.4d==1c.2w)E(J.2l(k,\'1v\')==\'4U\')2i;k=k.4d}1O(k);o J.55(2J,2L)}}E(1h.1T.43||1h.1T.4B){J.1d.5a=q(k,W){k=$(k);E(W&&W.2N)W=W.2N();E(M.3G(W))o k.5a().2A(W);W=M.3F(W);G 17=k.17.2U();E(17 1V J.5j.4g){$A(k.49).1D(q(L){k.6O(L)});J.7w(17,W.3R()).1D(q(L){k.5Y(L)})}1m k.4T=W.3R();W.4y.1G(W).4k();o k}}E(1c.48(\'1X\').b7){J.1d.1Y=q(k,W){k=$(k);E(W&&W.2N)W=W.2N();E(M.3G(W)){k.1P.9E(W,k);o k}W=M.3F(W);G 2T=k.1P,17=2T.17.2U();E(J.5j.4g[17]){G 3P=k.6R();G 5O=J.7w(17,W.3R());2T.6O(k);E(3P)5O.1D(q(L){2T.7n(L,3P)});1m 5O.1D(q(L){2T.5Y(L)})}1m k.b7=W.3R();W.4y.1G(W).4k();o k}}J.55=q(l,t){G 1q=[l,t];1q.2p=l;1q.2g=t;o 1q};J.7w=q(17,8p){G 1X=1s J(\'1X\'),t=J.5j.4g[17];1X.4T=t[0]+8p+t[1];t[2].7o(q(){1X=1X.62});o $A(1X.49)};J.5j={5e:{6x:\'fb\',2A:q(k,L){k.1P.7n(L,k)},65:q(k,3f){3f.fa(k)}},2g:{6x:\'f9\',2A:q(k,L){k.7n(L,k.62)},65:q(k,3f){3f.f7(k);3f.f6(1o)}},4o:{6x:\'f5\',2A:q(k,L){k.5Y(L)}},7x:{6x:\'f4\',2A:q(k,L){k.1P.7n(L,k.3P)},65:q(k,3f){3f.f3(k)}},4g:{f2:[\'<4O>\',\'</4O>\',1],7m:[\'<4O><5J>\',\'</5J></4O>\',2],b3:[\'<4O><5J><7l>\',\'</7l></5J></4O>\',3],8K:[\'<4O><5J><7l><b1>\',\'</b1></7l></5J></4O>\',4],b0:[\'<2S>\',\'</2S>\',1]}};(q(){C.4o.65=C.2g.65;M.1a(C.4g,{aY:C.4g.7m,cR:C.4g.7m,aX:C.4g.8K})}).9L(J.5j);J.1d.7k={3I:q(k,1R){1R=J.3Q.91[1R]||1R;G L=$(k).bn(1R);o L&&L.eZ}};J.1d.3E={};M.1a(J,J.1d);E(!1h.3V.6t&&1c.48(\'1X\').5h){1A.6C={};1A.6C.1l=1c.48(\'1X\').5h;1h.3V.6t=1o}J.1a=(q(){E(1h.3V.83)o 1h.K;G 1d={},3E=J.1d.3E;G 1a=M.1a(q(k){E(!k||k.7j||k.3p!=1||k==1A)o k;G 2G=M.2m(1d),17=k.17,1w,I;E(3E[17])M.1a(2G,3E[17]);18(1w 1V 2G){I=2G[1w];E(M.2q(I)&&!(1w 1V k))k[1w]=I.4P()}k.7j=1h.4i;o k},{7i:q(){E(!1h.3V.6t){M.1a(1d,J.1d);M.1a(1d,J.1d.7k)}}});1a.7i();o 1a})();J.3I=q(k,1R){E(k.3I)o k.3I(1R);o J.1d.7k.3I(k,1R)};J.6I=q(2G){G F=1h.3V,T=J.1d.3E;E(!2G){M.1a(1B,1B.1d);M.1a(1B.J,1B.J.1d);M.1a(J.1d.3E,{"eY":M.2m(1B.1d),"eX":M.2m(1B.J.1d),"b0":M.2m(1B.J.1d),"aV":M.2m(1B.J.1d)})}E(1r.N==2){G 17=2G;2G=1r[1]}E(!17)M.1a(J.1d,2G||{});1m{E(M.4F(17))17.1D(1a);1m 1a(17)}q 1a(17){17=17.2U();E(!J.1d.3E[17])J.1d.3E[17]={};M.1a(J.1d.3E[17],2G)}q 7f(2G,5W,82){82=82||1t;18(G 1w 1V 2G){G I=2G[1w];E(!M.2q(I))3w;E(!82||!(1w 1V 5W))5W[1w]=I.4P()}}q aU(17){G 1N;G 8H={"eV":"eU","aV":"eT","P":"eS","eR":"eQ","eP":"eO","eN":"eM","eL":"eK","eJ":"eI","eH":"5F","eF":"5F","eE":"5F","eD":"5F","eA":"5F","ez":"5F","Q":"ex","ew":"aO","eu":"aO","A":"et","b8":"es","er":"eq","ep":"aM","eo":"aM","aY":"8A","cR":"8A","7m":"8A","b3":"em","aX":"aL","8K":"aL","el":"ek","ej":"ei"};E(8H[17])1N=\'8y\'+8H[17]+\'J\';E(1A[1N])o 1A[1N];1N=\'8y\'+17+\'J\';E(1A[1N])o 1A[1N];1N=\'8y\'+17.6B()+\'J\';E(1A[1N])o 1A[1N];1A[1N]={};1A[1N].1l=1c.48(17).5h;o 1A[1N]}E(F.6t){7f(J.1d,6C.1l);7f(J.1d.7k,6C.1l,1o)}E(F.83){18(G 8x 1V J.1d.3E){G 1N=aU(8x);E(M.2F(1N))3w;7f(T[8x],1N.1l)}}M.1a(J,J.1d);8O J.3E;E(J.1a.7i)J.1a.7i();J.2Q={}};1c.eg={5X:q(){G 8w={};G B=1h.1T;$w(\'2f 2Y\').1D(q(d){G D=d.6B();8w[d]=(B.4x&&!1c.2O)?5B[\'ee\'+D]:(B.4B)?1c.2w[\'aJ\'+D]:1c.4t[\'aJ\'+D]});o 8w},cf:q(){o C.5X().2f},ci:q(){o C.5X().2Y},ec:q(){o J.55(1A.aH||1c.4t.4D||1c.2w.4D,1A.aF||1c.4t.4E||1c.2w.4E)}};G 19=2b.2v({2K:q(1z){C.1z=1z.3X();C.ag()},aE:q(){E(!1h.3V.79)o 1t;G e=C.1z;E(1h.1T.4x&&(e.1M("-2r-1C")||e.1M(":63")))o 1t;E((/(\\[[\\w-]*?:|:3S)/).2P(C.1z))o 1t;o 1o},ag:q(){E(C.aE())o C.aC();G e=C.1z,4l=19.6b,h=19.25,c=19.6m,3q,p,m;E(19.4Q[e]){C.3K=19.4Q[e];o}C.3K=["C.3K = q(1n) {","G r = 1n, h = 19.25, c = 1t, n;"];1O(e&&3q!=e&&(/\\S/).2P(e)){3q=e;18(G i 1V 4l){p=4l[i];E(m=e.1f(p)){C.3K.1i(M.2q(c[i])?c[i](m):1s 3e(c[i]).2O(m));e=e.1Y(m[0],\'\');2i}}}C.3K.1i("o h.8t(n);\\n}");74(C.3K.2z(\'\\n\'));19.4Q[C.1z]=C.3K},aC:q(){G e=C.1z,4l=19.6b,x=19.2t,3q,m;E(19.4Q[e]){C.2t=19.4Q[e];o}C.3K=[\'.//*\'];1O(e&&3q!=e&&(/\\S/).2P(e)){3q=e;18(G i 1V 4l){E(m=e.1f(4l[i])){C.3K.1i(M.2q(x[i])?x[i](m):1s 3e(x[i]).2O(m));e=e.1Y(m[0],\'\');2i}}}C.2t=C.3K.2z(\'\');19.4Q[C.1z]=C.2t},6j:q(1n){1n=1n||1c;E(C.2t)o 1c.85(C.2t,1n);o C.3K(1n)},1f:q(k){C.8s=[];G e=C.1z,4l=19.6b,as=19.8r;G 3q,p,m;1O(e&&3q!==e&&(/\\S/).2P(e)){3q=e;18(G i 1V 4l){p=4l[i];E(m=e.1f(p)){E(as[i]){C.8s.1i([i,M.2m(m)]);e=e.1Y(m[0],\'\')}1m{o C.6j(1c).1M(k)}}}}G 1f=1o,1e,2u;18(G i=0,78;78=C.8s[i];i++){1e=78[0],2u=78[1];E(!19.8r[1e](k,2u)){1f=1t;2i}}o 1f},2D:q(){o C.1z},2B:q(){o"#<19:"+C.1z.2B()+">"}});M.1a(19,{4Q:{},2t:{4H:"//*",1H:"/*",5n:"/6i-4r::*[1]",6k:\'/6i-4r::*\',17:q(m){E(m[1]==\'*\')o\'\';o"[ay-1e()=\'"+m[1].28()+"\' 8q ay-1e()=\'"+m[1].2U()+"\']"},1j:"[6a(20(\' \', @6Q, \' \'), \' #{1} \')]",1p:"[@1p=\'#{1}\']",5r:q(m){m[1]=m[1].28();o 1s 3e("[@#{1}]").2O(m)},29:q(m){m[1]=m[1].28();m[3]=m[5]||m[6];o 1s 3e(19.2t.6g[m[2]]).2O(m)},69:q(m){G h=19.2t.2c[m[1]];E(!h)o\'\';E(M.2q(h))o h(m);o 1s 3e(19.2t.2c[m[1]]).2O(m)},6g:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[e2-cp(@#{1}, \'#{3}\')]",\'$=\':"[5N(@#{1}, (3n-N(@#{1}) - 3n-N(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[6a(@#{1}, \'#{3}\')]",\'~=\':"[6a(20(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[6a(20(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2c:{\'3H-1H\':\'[4v(8C-4r::*)]\',\'2y-1H\':\'[4v(6i-4r::*)]\',\'6l-1H\':\'[4v(8C-4r::* 8q 6i-4r::*)]\',\'63\':"[3s(*) = 0 8o (3s(3T()) = 0 8q e1(3T(), \' \\t\\r\\n\', \'\') = \'\')]",\'3S\':"[@3S]",\'3A\':"[@3A]",\'ax\':"[4v(@3A)]",\'4v\':q(m){G e=m[6],p=19.6b,x=19.2t,3q,v;G 8m=[];1O(e&&3q!=e&&(/\\S/).2P(e)){3q=e;18(G i 1V p){E(m=e.1f(p[i])){v=M.2q(x[i])?x[i](m):1s 3e(x[i]).2O(m);8m.1i("("+v.5N(1,v.N-1)+")");e=e.1Y(m[0],\'\');2i}}}o"[4v("+8m.2z(" 8o ")+")]"},\'1U-1H\':q(m){o 19.2t.2c.1U("(3s(./8C-4r::*) + 1) ",m)},\'1U-2y-1H\':q(m){o 19.2t.2c.1U("(3s(./6i-4r::*) + 1) ",m)},\'1U-2r-1C\':q(m){o 19.2t.2c.1U("1v() ",m)},\'1U-2y-2r-1C\':q(m){o 19.2t.2c.1U("(2y() + 1 - 1v()) ",m)},\'3H-2r-1C\':q(m){m[6]="1";o 19.2t.2c[\'1U-2r-1C\'](m)},\'2y-2r-1C\':q(m){m[6]="1";o 19.2t.2c[\'1U-2y-2r-1C\'](m)},\'6l-2r-1C\':q(m){G p=19.2t.2c;o p[\'3H-2r-1C\'](m)+p[\'2y-2r-1C\'](m)},1U:q(5y,m){G 3U,1J=m[6],8l;E(1J==\'av\')1J=\'2n+0\';E(1J==\'at\')1J=\'2n+1\';E(3U=1J.1f(/^(\\d+)$/))o\'[\'+5y+"= "+3U[1]+\']\';E(3U=1J.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(3U[1]=="-")3U[1]=-1;G a=3U[1]?52(3U[1]):1;G b=3U[2]?52(3U[2]):0;8l="[((#{5y} - #{b}) dX #{a} = 0) 8o "+"((#{5y} - #{b}) 1X #{a} >= 0)]";o 1s 3e(8l).2O({5y:5y,a:a,b:b})}}}},6m:{17:\'n = h.17(n, r, "#{1}", c);   c = 1t;\',1j:\'n = h.1j(n, r, "#{1}", c); c = 1t;\',1p:\'n = h.1p(n, r, "#{1}", c);        c = 1t;\',5r:\'n = h.5r(n, r, "#{1}"); c = 1t;\',29:q(m){m[3]=(m[5]||m[6]);o 1s 3e(\'n = h.29(n, r, "#{1}", "#{3}", "#{2}"); c = 1t;\').2O(m)},69:q(m){E(m[6])m[6]=m[6].1Y(/"/g,\'\\\\"\');o 1s 3e(\'n = h.69(n, "#{1}", "#{6}", r, c); c = 1t;\').2O(m)},4H:\'c = "4H";\',1H:\'c = "1H";\',5n:\'c = "5n";\',6k:\'c = "6k";\'},6b:{6k:/^\\s*~\\s*/,1H:/^\\s*>\\s*/,5n:/^\\s*\\+\\s*/,4H:/^\\s/,17:/^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,1p:/^#([\\w\\-\\*]+)(\\b|$)/,1j:/^\\.([\\w\\-\\*]+)(\\b|$)/,69:/^:((3H|2y|1U|1U-2y|6l)(-1H|-2r-1C)|63|3S|(en|dW)dV|4v)(\\((.*?)\\))?(\\b|$|(?=\\s)|(?=:))/,5r:/^\\[([\\w]+)\\]/,29:/\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'"])([^\\4]*?)\\4|([^\'"][^\\]]*?)))?\\]/},8r:{17:q(k,2u){o 2u[1].2U()==k.17.2U()},1j:q(k,2u){o J.7M(k,2u[1])},1p:q(k,2u){o k.1p===2u[1]},5r:q(k,2u){o J.3I(k,2u[1])},29:q(k,2u){G 4G=J.5f(k,2u[1]);o 19.6g[2u[2]](4G,2u[3])}},25:{20:q(a,b){18(G i=0,L;L=b[i];i++)a.1i(L);o a},76:q(O){18(G i=0,L;L=O[i];i++)L.3W=1o;o O},5E:q(O){18(G i=0,L;L=O[i];i++)L.3W=4z;o O},1g:q(1P,4j,6f){1P.3W=1o;E(4j){18(G O=1P.49,i=O.N-1,j=1;i>=0;i--){G L=O[i];E(L.3p==1&&(!6f||L.3W))L.75=j++}}1m{18(G i=0,j=1,O=1P.49;L=O[i];i++)E(L.3p==1&&(!6f||L.3W))L.75=j++}},8t:q(O){E(O.N==0)o O;G V=[],n;18(G i=0,l=O.N;i<l;i++)E(!(n=O[i]).3W){n.3W=1o;V.1i(J.1a(n))}o 19.25.5E(V)},4H:q(O){G h=19.25;18(G i=0,V=[],L;L=O[i];i++)h.20(V,L.4c(\'*\'));o V},1H:q(O){G h=19.25;18(G i=0,V=[],L;L=O[i];i++){18(G j=0,1H;1H=L.49[j];j++)E(1H.3p==1&&1H.17!=\'!\')V.1i(1H)}o V},5n:q(O){18(G i=0,V=[],L;L=O[i];i++){G 6R=C.6M(L);E(6R)V.1i(6R)}o V},6k:q(O){G h=19.25;18(G i=0,V=[],L;L=O[i];i++)h.20(V,J.4M(L));o V},6M:q(L){1O(L=L.3P)E(L.3p==1)o L;o 1k},6N:q(L){1O(L=L.cv)E(L.3p==1)o L;o 1k},17:q(O,1n,17,2I){17=17.2U();G V=[],h=19.25;E(O){E(2I){E(2I=="4H"){18(G i=0,L;L=O[i];i++)h.20(V,L.4c(17));o V}1m O=C[2I](O);E(17=="*")o O}18(G i=0,L;L=O[i];i++)E(L.17.2U()==17)V.1i(L);o V}1m o 1n.4c(17)},1p:q(O,1n,1p,2I){G 3b=$(1p),h=19.25;E(!3b)o[];E(!O&&1n==1c)o[3b];E(O){E(2I){E(2I==\'1H\'){18(G i=0,L;L=O[i];i++)E(3b.1P==L)o[3b]}1m E(2I==\'4H\'){18(G i=0,L;L=O[i];i++)E(J.7K(3b,L))o[3b]}1m E(2I==\'5n\'){18(G i=0,L;L=O[i];i++)E(19.25.6N(3b)==L)o[3b]}1m O=h[2I](O)}18(G i=0,L;L=O[i];i++)E(L==3b)o[3b];o[]}o(3b&&J.7K(3b,1n))?[3b]:[]},1j:q(O,1n,1j,2I){E(O&&2I)O=C[2I](O);o 19.25.ar(O,1n,1j)},ar:q(O,1n,1j){E(!O)O=19.25.4H([1n]);G aq=\' \'+1j+\' \';18(G i=0,V=[],L,6d;L=O[i];i++){6d=L.1j;E(6d.N==0)3w;E(6d==1j||(\' \'+6d+\' \').1M(aq))V.1i(L)}o V},5r:q(O,1n,29){E(!O)O=1n.4c("*");G V=[];18(G i=0,L;L=O[i];i++)E(J.3I(L,29))V.1i(L);o V},29:q(O,1n,29,I,ap){E(!O)O=1n.4c("*");G 2h=19.6g[ap],V=[];18(G i=0,L;L=O[i];i++){G 4G=J.5f(L,29);E(4G===1k)3w;E(2h(4G,I))V.1i(L)}o V},69:q(O,1e,I,1n,2I){E(O&&2I)O=C[2I](O);E(!O)O=1n.4c("*");o 19.2c[1e](O,I,1n)}},2c:{\'3H-1H\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++){E(19.25.6N(L))3w;V.1i(L)}o V},\'2y-1H\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++){E(19.25.6M(L))3w;V.1i(L)}o V},\'6l-1H\':q(O,I,1n){G h=19.25;18(G i=0,V=[],L;L=O[i];i++)E(!h.6N(L)&&!h.6M(L))V.1i(L);o V},\'1U-1H\':q(O,1J,1n){o 19.2c.1U(O,1J,1n)},\'1U-2y-1H\':q(O,1J,1n){o 19.2c.1U(O,1J,1n,1o)},\'1U-2r-1C\':q(O,1J,1n){o 19.2c.1U(O,1J,1n,1t,1o)},\'1U-2y-2r-1C\':q(O,1J,1n){o 19.2c.1U(O,1J,1n,1o,1o)},\'3H-2r-1C\':q(O,1J,1n){o 19.2c.1U(O,"1",1n,1t,1o)},\'2y-2r-1C\':q(O,1J,1n){o 19.2c.1U(O,"1",1n,1o,1o)},\'6l-2r-1C\':q(O,1J,1n){G p=19.2c;o p[\'2y-2r-1C\'](p[\'3H-2r-1C\'](O,1J,1n),1J,1n)},ao:q(a,b,am){E(a==0)o b>0?[b]:[];o $R(1,am).3L([],q(2M,i){E(0==(i-b)%a&&(i-b)/a>=0)2M.1i(i);o 2M})},1U:q(O,1J,1n,4j,6f){E(O.N==0)o[];E(1J==\'av\')1J=\'2n+0\';E(1J==\'at\')1J=\'2n+1\';G h=19.25,V=[],8G=[],m;h.76(O);18(G i=0,L;L=O[i];i++){E(!L.1P.3W){h.1g(L.1P,4j,6f);8G.1i(L.1P)}}E(1J.1f(/^\\d+$/)){1J=52(1J);18(G i=0,L;L=O[i];i++)E(L.75==1J)V.1i(L)}1m E(m=1J.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(m[1]=="-")m[1]=-1;G a=m[1]?52(m[1]):1;G b=m[2]?52(m[2]):0;G 8k=19.2c.ao(a,b,O.N);18(G i=0,L,l=8k.N;L=O[i];i++){18(G j=0;j<l;j++)E(L.75==8k[j])V.1i(L)}}h.5E(O);h.5E(8G);o V},\'63\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++){E(L.17==\'!\'||(L.62&&!L.4T.1f(/^\\s*$/)))3w;V.1i(L)}o V},\'4v\':q(O,42,1n){G h=19.25,dR,m;G 8j=1s 19(42).6j(1n);h.76(8j);18(G i=0,V=[],L;L=O[i];i++)E(!L.3W)V.1i(L);h.5E(8j);o V},\'ax\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++)E(!L.3A)V.1i(L);o V},\'3A\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++)E(L.3A)V.1i(L);o V},\'3S\':q(O,I,1n){18(G i=0,V=[],L;L=O[i];i++)E(L.3S)V.1i(L);o V}},6g:{\'=\':q(3h,v){o 3h==v},\'!=\':q(3h,v){o 3h!=v},\'^=\':q(3h,v){o 3h.9D(v)},\'$=\':q(3h,v){o 3h.cA(v)},\'*=\':q(3h,v){o 3h.1M(v)},\'~=\':q(3h,v){o(\' \'+3h+\' \').1M(\' \'+v+\' \')},\'|=\':q(3h,v){o(\'-\'+3h.2U()+\'-\').1M(\'-\'+v.2U()+\'-\')}},al:q(1Z,1z){G 2u=1s 19(1z).6j(),h=19.25;h.76(2u);18(G i=0,V=[],k;k=1Z[i];i++)E(k.3W)V.1i(k);h.5E(2u);o V},5i:q(1Z,1z,1g){E(M.84(1z)){1g=1z;1z=1t}o 19.al(1Z,1z||\'*\')[1g||0]},7S:q(k,5H){G ak=5H.2z(\',\');5H=[];ak.aQ(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,q(m){5H.1i(m[1].3X())});G V=[],h=19.25;18(G i=0,l=5H.N,42;i<l;i++){42=1s 19(5H[i].3X());h.20(V,42.6j(k))}o(l>1)?h.8t(V):V}});E(1h.1T.43){19.25.20=q(a,b){18(G i=0,L;L=b[i];i++)E(L.17!=="!")a.1i(L);o a}}q $$(){o 19.7S(1c,$A(1r))}G 1B={8h:q(1x){$(1x).8h();o 1x},aj:q(1Z,U){E(4b U!=\'14\')U={3z:!!U};1m E(M.2F(U.3z))U.3z=1o;G 1u,I,8g=1t,4Z=U.4Z;G 7b=1Z.3L({},q(1q,k){E(!k.3A&&k.1e){1u=k.1e;I=$(k).32();E(I!=1k&&(k.1C!=\'4Z\'||(!8g&&4Z!==1t&&(!4Z||1u==4Z)&&(8g=1o)))){E(1u 1V 1q){E(!M.4F(1q[1u]))1q[1u]=[1q[1u]];1q[1u].1i(I)}1m 1q[1u]=I}}o 1q});o U.3z?7b:M.4q(7b)}};1B.1d={6q:q(1x,U){o 1B.aj(1B.66(1x),U)},66:q(1x){o $A($(1x).4c(\'*\')).3L([],q(1Z,1H){E(1B.J.5t[1H.17.28()])1Z.1i(J.1a(1H));o 1Z})},dN:q(1x,72,1e){1x=$(1x);G 7J=1x.4c(\'4K\');E(!72&&!1e)o $A(7J).2V(J.1a);18(G i=0,8f=[],N=7J.N;i<N;i++){G 4K=7J[i];E((72&&4K.1C!=72)||(1e&&4K.1e!=1e))3w;8f.1i(J.1a(4K))}o 8f},8N:q(1x){1x=$(1x);1B.66(1x).7Y(\'8N\');o 1x},8M:q(1x){1x=$(1x);1B.66(1x).7Y(\'8M\');o 1x},ae:q(1x){G 1Z=$(1x).66().5V(q(k){o\'7E\'!=k.1C&&!k.3A});G 8d=1Z.5V(q(k){o k.3I(\'7D\')&&k.7D>=0}).bX(q(k){o k.7D}).3H();o 8d?8d:1Z.9c(q(k){o[\'4K\',\'2S\',\'8c\'].1M(k.17.28())})},dL:q(1x){1x=$(1x);1x.ae().ad();o 1x},3k:q(1x,U){1x=$(1x),U=M.2m(U||{});G 2W=U.3B,5w=1x.5f(\'5w\')||\'\';E(5w.5o())5w=1A.dK.bh;U.3B=1x.6q(1o);E(2W){E(M.3c(2W))2W=2W.7g();M.1a(U.3B,2W)}E(1x.3I(\'1E\')&&!U.1E)U.1E=1x.1E;o 1s 1Q.5g(5w,U)}};1B.J={8P:q(k){$(k).8P();o k},2S:q(k){$(k).2S();o k}};1B.J.1d={6q:q(k){k=$(k);E(!k.3A&&k.1e){G I=k.32();E(I!=4z){G 1I={};1I[k.1e]=I;o M.4q(1I)}}o\'\'},32:q(k){k=$(k);G 1E=k.17.28();o 1B.J.5t[1E](k)},dI:q(k,I){k=$(k);G 1E=k.17.28();1B.J.5t[1E](k,I);o k},bA:q(k){$(k).I=\'\';o k},dG:q(k){o $(k).I!=\'\'},ad:q(k){k=$(k);2x{k.8P();E(k.2S&&(k.17.28()!=\'4K\'||![\'8b\',\'8h\',\'4Z\'].1M(k.1C)))k.2S()}2C(e){}o k},8N:q(k){k=$(k);k.fq();k.3A=1o;o k},8M:q(k){k=$(k);k.3A=1t;o k}};G fr=1B.J;G $F=1B.J.1d.32;1B.J.5t={4K:q(k,I){5A(k.1C.28()){2s\'ac\':2s\'bd\':o 1B.J.5t.ba(k,I);6z:o 1B.J.5t.8c(k,I)}},ba:q(k,I){E(M.2F(I))o k.3S?k.I:1k;1m k.3S=!!I},8c:q(k,I){E(M.2F(I))o k.I;1m k.I=I},2S:q(k,1g){E(M.2F(1g))o C[k.1C==\'2S-dD\'?\'aa\':\'a9\'](k);1m{G 3v,I,bc=!M.4F(1g);18(G i=0,N=k.N;i<N;i++){3v=k.U[i];I=C.7Q(3v);E(bc){E(I==1g){3v.8a=1o;o}}1m 3v.8a=1g.1M(I)}}},aa:q(k){G 1g=k.dA;o 1g>=0?C.7Q(k.U[1g]):1k},a9:q(k){G 1S,N=k.N;E(!N)o 1k;18(G i=0,1S=[];i<N;i++){G 3v=k.U[i];E(3v.8a)1S.1i(C.7Q(3v))}o 1S},7Q:q(3v){o J.1a(3v).3I(\'I\')?3v.I:3v.3T}};4V.8U=2b.2v(by,{2K:q($4e,k,4h,3a){$4e(3a,4h);C.k=$(k);C.4s=C.32()},90:q(){G I=C.32();E(M.3c(C.4s)&&M.3c(I)?C.4s!=I:2a(C.4s)!=2a(I)){C.3a(C.k,I);C.4s=I}}});1B.J.a4=2b.2v(4V.8U,{32:q(){o 1B.J.32(C.k)}});1B.a4=2b.2v(4V.8U,{32:q(){o 1B.6q(C.k)}});4V.6s=2b.2v({2K:q(k,3a){C.k=$(k);C.3a=3a;C.4s=C.32();E(C.k.17.28()==\'1x\')C.a3();1m C.6w(C.k)},8W:q(){G I=C.32();E(C.4s!=I){C.3a(C.k,I);C.4s=I}},a3:q(){1B.66(C.k).1D(C.6w,C)},6w:q(k){E(k.1C){5A(k.1C.28()){2s\'ac\':2s\'bd\':1F.4C(k,\'dy\',C.8W.1G(C));2i;6z:1F.4C(k,\'dx\',C.8W.1G(C));2i}}}});1B.J.6s=2b.2v(4V.6s,{32:q(){o 1B.J.32(C.k)}});1B.6s=2b.2v(4V.6s,{32:q(){o 1B.6q(C.k)}});E(!1A.1F)G 1F={};M.1a(1F,{dw:8,dv:9,du:13,dt:27,fT:37,ds:38,fW:39,dr:40,fZ:46,dp:36,dn:35,dm:33,g6:34,dk:45,2Q:{},97:q(1b){G k;5A(1b.1C){2s\'dj\':k=1b.di;2i;2s\'gd\':k=1b.2N;2i;6z:o 1k}o J.1a(k)}});1F.1d=(q(){G 59;E(1h.1T.43){G 9Z={0:1,1:4,2:2};59=q(1b,57){o 1b.8b==9Z[57]}}1m E(1h.1T.4x){59=q(1b,57){5A(57){2s 0:o 1b.7A==1&&!1b.9Y;2s 1:o 1b.7A==1&&1b.9Y;6z:o 1t}}}1m{59=q(1b,57){o 1b.7A?(1b.7A===57+1):(1b.8b===57)}}o{df:q(1b){o 59(1b,0)},de:q(1b){o 59(1b,1)},dd:q(1b){o 59(1b,2)},k:q(1b){G L=1F.1a(1b).7C;o J.1a(L.3p==6Y.d3?L.1P:L)},5i:q(1b,1z){G k=1F.k(1b);E(!1z)o k;G 1Z=[k].20(k.64());o 19.5i(1Z,1z,0)},5p:q(1b){o{x:1b.ct||(1b.da+(1c.4t.4D||1c.2w.4D)),y:1b.c5||(1b.d8+(1c.4t.4E||1c.2w.4E))}},gv:q(1b){o 1F.5p(1b).x},gw:q(1b){o 1F.5p(1b).y},9f:q(1b){1F.1a(1b);1b.d6();1b.d5();1b.hE=1o}}})();1F.1a=(q(){G 2G=M.4n(1F.1d).3L({},q(m,1e){m[1e]=1F.1d[1e].4P();o m});E(1h.1T.43){M.1a(2G,{d5:q(){C.hD=1o},d6:q(){C.7B=1t},2B:q(){o"[14 1F]"}});o q(1b){E(!1b)o 1t;E(1b.7j)o 1b;1b.7j=1h.4i;G 5p=1F.5p(1b);M.1a(1b,{7C:1b.hA,97:1F.97(1b),ct:5p.x,c5:5p.y});o M.1a(1b,2G)}}1m{1F.1l=1F.1l||1c.6c("d2").5h;M.1a(1F.1l,2G);o 1h.K}})();M.1a(1F,(q(){G 2Q=1F.2Q;q 9W(k){E(k.9V)o k.9V;1r.5I.1p=1r.5I.1p||1;o k.9V=++1r.5I.1p}q 9u(1y){E(1y&&1y.1M(\':\'))o"d0";o 1y}q 7P(1p){o 2Q[1p]=2Q[1p]||{}}q 7T(1p,1y){G c=7P(1p);o c[1y]=c[1y]||[]}q cZ(k,1y,2h){G 1p=9W(k);G c=7T(1p,1y);E(c.5T("2h").1M(2h))o 1t;G 1L=q(1b){E(!1F||!1F.1a||(1b.1y&&1b.1y!=1y))o 1t;1F.1a(1b);2h.9L(k,1b)};1L.2h=2h;c.1i(1L);o 1L}q 9y(1p,1y,2h){G c=7T(1p,1y);o c.9c(q(1L){o 1L.2h==2h})}q cY(1p,1y,2h){G c=7P(1p);E(!c[1y])o 1t;c[1y]=c[1y].6y(9y(1p,1y,2h))}q cX(){18(G 1p 1V 2Q)18(G 1y 1V 2Q[1p])2Q[1p][1y]=1k}E(1A.7y){1A.7y("be",cX)}o{4C:q(k,1y,2h){k=$(k);G 1e=9u(1y);G 1L=cZ(k,1y,2h);E(!1L)o k;E(k.80){k.80(1e,1L,1t)}1m{k.7y("5q"+1e,1L)}o k},5k:q(k,1y,2h){k=$(k);G 1p=9W(k),1e=9u(1y);E(!2h&&1y){7T(1p,1y).1D(q(1L){k.5k(1y,1L.2h)});o k}1m E(!1y){M.4n(7P(1p)).1D(q(1y){k.5k(1y)});o k}G 1L=9y(1p,1y,2h);E(!1L)o k;E(k.cW){k.cW(1e,1L,1t)}1m{k.hr("5q"+1e,1L)}cY(1p,1y,2h);o k},60:q(k,1y,2M){k=$(k);E(k==1c&&1c.6c&&!k.cV)k=1c.4t;E(1c.6c){G 1b=1c.6c("d2");1b.ho("d0",1o,1o)}1m{G 1b=1c.hn();1b.cT="hl"}1b.1y=1y;1b.2M=2M||{};E(1c.6c){k.cV(1b)}1m{k.hj(1b.cT,1b)}o 1F.1a(1b)}}})());M.1a(1F,1F.1d);J.6I({60:1F.60,4C:1F.4C,5k:1F.5k});M.1a(1c,{60:J.1d.60.4P(),4C:J.1d.4C.4P(),5k:J.1d.5k.4P()});(q(){G 3Y,9P=1t;q 6T(){E(9P)o;E(3Y)1A.bi(3Y);1c.60("hh:cP");9P=1o}E(1c.80){E(1h.1T.4x){3Y=1A.bm(q(){E(/cP|cO/.2P(1c.2R))6T()},0);1F.4C(1A,"hf",6T)}1m{1c.80("he",6T,1t)}}1m{1c.6W("<5c 1p=cN 4k bg=//:><\\/5c>");$("cN").73=q(){E(C.2R=="cO"){C.73=1k;6T()}}}})();44.4q=M.4q;G hd={3x:J.cI};J.1d.hc=J.1d.7K;G hb={ha:q(k,W){o J.2A(k,{5e:W})},h9:q(k,W){o J.2A(k,{2g:W})},h7:q(k,W){o J.2A(k,{4o:W})},h6:q(k,W){o J.2A(k,{7x:W})}};G $3w=1s h5(\'"4A $3w" h4 h3, hg "o" h2\');G 9K={cL:1t,9J:q(){C.cJ=1A.aH||1c.4t.4D||1c.2w.4D||0;C.cU=1A.aF||1c.4t.4E||1c.2w.4E||0},h1:q(k,x,y){E(C.cL)o C.cQ(k,x,y);C.6S=x;C.6X=y;C.2Z=J.5b(k);o(y>=C.2Z[1]&&y<C.2Z[1]+k.5z&&x>=C.2Z[0]&&x<C.2Z[0]+k.5U)},cQ:q(k,x,y){G 9Q=J.98(k);C.6S=x+9Q[0]-C.cJ;C.6X=y+9Q[1]-C.cU;C.2Z=J.5b(k);o(C.6X>=C.2Z[1]&&C.6X<C.2Z[1]+k.5z&&C.6S>=C.2Z[0]&&C.6S<C.2Z[0]+k.5U)},gZ:q(7W,k){E(!7W)o 0;E(7W==\'gY\')o((C.2Z[1]+k.5z)-C.6X)/k.5z;E(7W==\'gX\')o((C.2Z[0]+k.5U)-C.6S)/k.5U},5b:J.1d.5b,6D:J.1d.6D,9b:q(k){9K.9J();o J.9b(k)},99:q(k){9K.9J();o J.99(k)},hu:J.1d.98,4d:J.1d.7z,gW:J.1d.6A,2m:q(26,7C,U){U=U||{};o J.bG(7C,26,U)}};E(!1c.7X)1c.7X=q(cF){q 9I(1e){o 1e.5o()?1k:"[6a(20(\' \', @6Q, \' \'), \' "+1e+" \')]"}cF.7X=1h.3V.79?q(k,1j){1j=1j.2D().3X();G 9H=/\\s/.2P(1j)?$w(1j).2V(9I).2z(\'\'):9I(1j);o 9H?1c.85(\'.//*\'+9H,k):[]}:q(k,1j){1j=1j.2D().3X();G 1Z=[],68=(/\\s/.2P(1j)?$w(1j):1k);E(!68&&!1j)o 1Z;G O=$(k).4c(\'*\');1j=\' \'+1j+\' \';18(G i=0,1H,cn;1H=O[i];i++){E(1H.1j&&(cn=\' \'+1H.1j+\' \')&&(cn.1M(1j)||(68&&68.9r(q(1e){o!1e.2D().5o()&&cn.1M(\' \'+1e+\' \')}))))1Z.1i(J.1a(1H))}o 1Z};o q(1j,6Z){o $(6Z||1c.2w).7X(1j)}}(J.1d);J.7N=2b.2v();J.7N.1l={2K:q(k){C.k=$(k)},4a:q(Y){C.k.1j.5l(/\\s+/).2S(q(1e){o 1e.N>0}).4a(Y)},6r:q(1j){C.k.1j=1j},gV:q(9U){E(C.1M(9U))o;C.6r($A(C).20(9U).2z(\' \'))},cS:q(9T){E(!C.1M(9T))o;C.6r($A(C).6y(9T).2z(\' \'))},2D:q(){o $A(C).2z(\' \')}};M.1a(J.7N.1l,2H);J.6I();',62,1095,'||||||||||||||||||||element||||return||function||||||||||||this||if||var||value|Element||node|Object|length|nodes||||||options|results|content||iterator||||||object|style||tagName|for|Selector|extend|event|document|Methods|name|match|index|Prototype|push|className|null|prototype|else|root|true|id|result|arguments|new|false|key|position|property|form|eventName|expression|window|Form|type|each|method|Event|bind|child|pair|formula|context|wrapper|include|klass|while|parentNode|Ajax|attribute|values|Browser|nth|in|transport|div|replace|elements|concat|args|pattern||insertions|handlers|source||toLowerCase|attr|String|Class|pseudos|filter|Array|width|top|handler|break|_getEv|attributes|getStyle|clone||response|left|isFunction|of|case|xpath|matches|create|body|try|last|join|insert|inspect|catch|toString|array|isUndefined|methods|Enumerable|combinator|valueL|initialize|valueT|memo|toElement|evaluate|test|cache|readyState|select|parent|toUpperCase|map|params|url|height|offset||iterable|getValue||||||||callback|targetNode|isString|ancestor|Template|range|responseText|nv|properties|json|request|__method|px|string|gsub|nodeType|le|container|count|replacement|toArray|opt|continue|display|slice|hash|disabled|parameters|names|toJSON|ByTag|toHTML|isElement|first|hasAttribute|apply|matcher|inject|pos|opacity|onComplete|nextSibling|_attributeTranslations|stripScripts|checked|text|mm|BrowserFeatures|_counted|strip|timer|proceed||els|selector|IE|Hash|||indexOf|createElement|childNodes|_each|typeof|getElementsByTagName|offsetParent|super|RegExp|tags|frequency|emptyFunction|reverse|defer|ps|start|keys|bottom|responder|toQueryString|sibling|lastValue|documentElement|toPaddedString|not|status|WebKit|evalScripts|undefined|throw|Opera|observe|scrollLeft|scrollTop|isArray|nodeValue|descendant|styles|_object|input|parts|nextSiblings|number|table|methodize|_cache|dispatchException|headers|innerHTML|absolute|Abstract|success|_overflow|offsetLeft|submit|end|navigator|Number|currentStyle|decay|_returnOffset|offsetTop|code|insertion|isButton|update|cumulativeOffset|script|userAgent|before|readAttribute|Request|__proto__|findElement|_insertionTranslations|stopObserving|split|shift|adjacent|blank|pointer|on|attrPresence|truncation|Serializers|getHeader|parseFloat|action|extras|fragment|offsetHeight|switch|self|setOpacity|right|unmark|Heading|Responders|expressions|callee|tbody|exclusive|interpret|receiver|substring|fragments|delta|item|str|wrap|pluck|offsetWidth|findAll|destination|getDimensions|appendChild|template|fire|previousSiblings|firstChild|empty|ancestors|initializeRange|getElements|evalJSON|classNames|pseudo|contains|patterns|createEvent|nodeClassName|getStatus|ofType|operators|_|following|findElements|laterSibling|only|criteria|contentType|post|state|serialize|set|EventObserver|ElementExtensions|responders|onTimerEvent|registerCallback|adjacency|without|default|viewportOffset|capitalize|HTMLElement|positionedOffset|_flag|relative|fillWith|nextAncestor|addMethods|toObject|expr|ctx|nextElementSibling|previousElementSibling|removeChild|descendants|class|next|xcomp|fireContentLoadedEvent|xml|writeAttribute|write|ycomp|Node|parentElement|elementClassName|cssFloat|typeName|onreadystatechange|eval|nodeIndex|mark|escapeHTML|token|XPath|static|data|application|asynchronous|onCreate|copy|toQueryParams|headerJSON|refresh|_extendedByPrototype|Simulated|tr|TBODY|insertBefore|times|_getAttr|charAt|title|currentlyExecuting|padding|border|dim|_getContentFromAnonymousElement|after|attachEvent|getOffsetParent|which|returnValue|target|tabIndex|hidden|00001|auto|detect|sourceIndex|inputs|descendantOf|Gecko|hasClassName|ClassNames|ScriptFragment|getCacheForID|optionValue|read|findChildElements|getWrappersForEventName|curry|recursivelyCollect|mode|getElementsByClassName|invoke|dispatch|addEventListener|none|onlyIfAbsent|SpecificElementExtensions|isNumber|_getElementsByXPath|updater|isHash|camelized|getAllResponseHeaders|selected|button|textarea|firstByIndex|getResponseHeader|matchingInputs|submitted|reset|respondToReadyState|exclusions|indices|predicate|exclusion|Content|and|html|or|assertions|tokens|unique|onStateChange|Response|dimensions|tag|HTML|_complete|TableSection|evalJS|preceding|encoding|Base|Complete|indexed|trans|activeRequestCount|prepareReplacement|TD|opera|enable|disable|delete|focus|exception|get|statusText|toQueryPair|TimedObserver|succ|onElementEvent|len|failure|camelize|execute|has|stripAlpha|alpha|val|_reverse|forElement|relatedTarget|cumulativeScrollOffset|relativize|offsets|absolutize|find|overflow|_madePositioned|stop|query|falses|trues|visibility|styleFloat|cssText|elementStyle|setStyle|found|css|float|all|collect|slices|getDOMEventName|_methodized|getAttribute|toTemplateReplacements|findWrapper|escapedString|decodeURIComponent|delay|lastIndexOf|startsWith|replaceChild|createRange|subclass|cond|iter|prepare|Position|call|unfilterJSON|superclass|visible|fired|offsetcache|character|Function|classNameToRemove|classNameToAdd|_eventID|getEventID|Version|metaKey|buttonMap|lastText|Updater|sanitizeJSON|registerFormCallbacks|Observer|_getResponseJSON|charCodeAt|responseXML|_getHeaderJSON|selectMany|selectOne|getStatusText|checkbox|activate|findFirstElement|evalResponse|compileMatcher|force|separator|serializeElements|exprs|matchElements|total|Events|getIndices|operator|needle|byClassName||odd|unescapeHTML|even|2005|enabled|local|scriptTag|overrideMimeType|setRequestHeaders|compileXPathMatcher|matchOne|shouldUseXPath|pageYOffset|matchAll|pageXOffset|extractScripts|client|img|TableCell|TableCol|stripTags|Mod|requestHeaders|scan|instanceof|sub|Safari|findDOMClass|TEXTAREA|register|TH|THEAD|XMLHTTP|SELECT|td|ActiveXObject|TR|XMLHttpRequest|getTransport|ObjectRange|outerHTML|IMG|onException|inputSelector|encodeURIComponent|single|radio|onunload|specialChar|src|href|clearInterval|radix|arrayLength|updateContent|setInterval|getAttributeNode|_getAttrNode|zoom|forEach|100|sorted|uniq|parseInt|inline|flatten|updateComplete|PeriodicalExecuter|htmlFor|clear|setHeight|setWidth|setTop|setLeft|from|clonePosition|argumentNames|MobileSafari|_originalHeight|escape|_originalWidth|_originalTop|_originalLeft|BODY|size|collections|lambda|valueOf|JSONFilter|these|clientHeight|originalHeight|sortBy|clientWidth|originalWidth|Try|originalDisplay|KHTML|originalPosition|originalVisibility|pageY|any|scrollTo|compareDocumentPosition|originalAncestor|nextNode|eachSlice|constructor|removeClassName|addClassName|getWidth|comp|exec|getHeight|setAttribute|removeAttribute|counter|Pattern||identify|with|createTextNode|1000|timeout|pageX|lt|previousSibling|amp|immediateDescendants|firstDescendant|getElementsBySelector|endsWith|JSON|createContextualFragment|ownerDocument|sanitize|instanceMethods|show|hide|toggle|deltaX|subclasses|includeScrollOffsets|isJSON|__onDOMContentLoaded|complete|loaded|withinIncludingScrolloffsets|TFOOT|remove|eventType|deltaY|dispatchEvent|removeEventListener|destroyCache|destroyWrapper|createWrapper|dataavailable|useDoubleQuotes|HTMLEvents|TEXT_NODE|ELEMENT_NODE|stopPropagation|preventDefault|snapshotItem|clientY|snapshotLength|clientX|ORDERED_NODE_SNAPSHOT_TYPE|XPathResult|isRightClick|isMiddleClick|isLeftClick|underscore|getElementById|fromElement|mouseover|KEY_INSERT|clearTimeout|KEY_PAGEUP|KEY_END||KEY_HOME|PeriodicalUpdater|KEY_DOWN|KEY_UP|KEY_ESC|KEY_RETURN|KEY_TAB|KEY_BACKSPACE|change|click|getAllHeaders|selectedIndex|responseJSON|fromCharCode|one|Interactive|Loaded|present|Loading|setValue|Uninitialized|location|focusFirstElement|ecma|getInputs|java|Failure|Success|selectorType|300|200|setRequestHeader|abled|dis|mod|close|Connection|charset|translate|starts|javascript|Accept|With|boolean|Requested|unknown|send|postBody|im|getScrollOffsets|open|inner|Konqueror|viewport|_method|IFrame|IFRAME|FrameSet|FRAMESET|TableRow||COLGROUP|COL|TableCaption|CAPTION|Image|Anchor|DEL|UTF|INS|Quote|urlencoded|H6|H5|www|truncate|H4|H3|H2|RangeError|H1|Directory|DIR|DList|DL|OList|OL|UList|UL|FieldSet|FIELDSET|Paragraph|TextArea|OptGroup|OPTGROUP|unregister|INPUT|FORM|specified|Microsoft|Msxml2|TABLE|setStartAfter|afterEnd|beforeEnd|collapse|selectNodeContents|Mobile|afterBegin|setStartBefore|beforeBegin|999999|merge|rv|onchange|onselect|onreset|unset|onsubmit|onkeyup|onkeydown|onkeypress|onblur|onfocus|onmouseout|blur|Field|onmousemove|onmouseover|onmouseup|onmousedown|ondblclick|onclick|Math|onload|multiple|floor|readonly|ceil|round|finally|Apple|abs|longDesc|readOnly|isFinite|maxLength|encType|accessKey|dateTime|vAlign|rowSpan|colSpan|toColorPart|KEY_LEFT|normal|isNaN|KEY_RIGHT|hasLayout|intersect|KEY_DELETE|reduce|insertAdjacentHTML|compact|childElements|NodeList|some|KEY_PAGEDOWN|every|entries|member|secure|pop|undoClipping|mouseout|zip|makeClipping|undoPositioned|sort||makePositioned|reject|block|partition|getUTCSeconds|min|max|getUTCMinutes|inGroupsOf|getUTCHours||getOpacity|pointerX|pointerY|grep|getComputedStyle|defaultView|getUTCDate|getUTCMonth|getUTCFullYear|cleanWhitespace|toggleClassName|Date|01|anonymous_element_|setTimeout|previous|parseQuery|down|up|AppleWebKit|siblings|interpolate|bindAsEventListener|formed|Badly|selectNode|SyntaxError|add|page|horizontal|vertical|overlap|Eaeflnr|within|instead|deprecated|is|Error|After|Bottom|cloneNode|Top|Before|Insertion|childOf|Toggle|DOMContentLoaded|load|use|dom|NOTATION_NODE|fireEvent|u00|ondataavailable|DOCUMENT_FRAGMENT_NODE|createEventObject|initEvent|DOCUMENT_TYPE_NODE|DOCUMENT_NODE|detachEvent|COMMENT_NODE|x1f|realOffset|PROCESSING_INSTRUCTION_NODE|x00|ENTITY_NODE|ENTITY_REFERENCE_NODE|CDATA_SECTION_NODE|srcElement|ATTRIBUTE_NODE|dasherize|cancelBubble|stopped'.split('|'),0,{}))

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if (this.slice(0,1) == '#') {  
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if (this.length==7) color = this.toLowerCase();  
    }  
  }  
  return (color.length==7 ? color : (arguments[0] || this));  
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + 0.5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
    },
    pulse: function(pos, pulses) { 
      pulses = pulses || 5; 
      return (
        ((pos % (1/pulses)) * pulses).round() == 0 ? 
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
        );
    },
    spring: function(pos) { 
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); 
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') || 
        Object.isFunction(element)) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = Object.isString(effect.options.queue) ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;
    
    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if (this.state=="idle"){this.state="running";'+
      codeForEvent(this.options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(this.options,'afterSetup')+
      '};if (this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(this.options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(this.options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(), 
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) : 
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
    scrollOffsets = document.viewport.getScrollOffsets(),
    elementOffsets = $(element).cumulativeOffset(),
    max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();  

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1] > max ? max : elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()) }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) { 
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity}); 
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { };
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });
    
    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        }
      }
    }
    this.start(options);
  },
  
  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) + 
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }
  
  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]); 
  });
  
  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
      hash.set(property, css[property]);
      return hash;
    });
    if (!styles.opacity) styles.set('opacity', element.getOpacity());
    return styles;
  };
};

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element)
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) { 
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    }
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( 
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);


function sP() { $('m').style.background = 'url(/images/4-1.gif) no-repeat right center'; }
function hP() { $('m').style.background = 'none'; }
function sP2(e) { $(e).style.visibility = 'visible'; }
function hP2(e) { $(e).style.visibility = 'hidden'; }
function clear() { $('music_list').innerHTML = ''; }
      
var previousMusicList = '';
var submenu_wrapper = $('go_back_link');
function newSubmenu(link) { 
  new Insertion.Bottom(submenu_wrapper, link);
}

function saveState() {
  previousMusicList = $('music_list').innerHTML;
  Element.show($('history'));
  new Effect.Highlight($('history'));
  //$('go_back_link').style.display = 'block';
}
function doGoBack() {
  $('music_list').innerHTML = previousMusicList;
  Element.hide($('history'));
  //$('go_back_link').style.display = 'none';
}
function mS(f) {
  new Ajax.Request('/', {
    asynchronous:true,
    evalScripts:true,
    onComplete:function(request){
      hP();
    },
    onLoading:function(request){
      sP();
    },
    parameters:Form.serialize(f) + '&amp;authenticity_token=' + encodeURIComponent('6d916a0e37c88ec01b53a9600689db43888bd912')
  }); return false;
}
function setCookie(name,value)
{
  document.cookie = name + "="+ escape (value);
}
function getCookie(name)
{
  var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
  if(arr != null) return unescape(arr[2]); else return null;
}
function delCookie(name)
{
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval=getCookie(name);
  if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
      
function setPlayID(id) { 
  $('current_play_id').innerHTML = id;
}
function clearPlaying(cid) 
{ 
  id = $('current_play_id').innerHTML;
  if(id.length != 0 && cid != id) {
    $(id).innerHTML = '';
    new Effect.Fade($(id));
  }
}
//quicktime detect
/* define function that adds another function as a DOM event listener */
function musicLoadDone() { 
  $('music_load_detect').innerHTML = '';
}
function myAddListener(obj, evt, handler, captures)
{
  if ( document.addEventListener )
    obj.addEventListener(evt, handler, captures);
  else
  // IE
    obj.attachEvent('on' + evt, handler);
}
/* define functions that register each listener */
function RegisterListener(eventName, objID, embedID, listenerFcn)
{
  var obj = document.getElementById(objID);
  if ( !obj )
    obj = document.getElementById(embedID);
  if ( obj )
    myAddListener(obj, eventName, listenerFcn, false);
}
/* define a single function that registers all listeners to call onload */
function RegisterListeners()
{
  RegisterListener('qt_loadedmetadata', 'movie1', 'qtmovie_embed', musicLoadDone);
}

//get input checkbox
function getSelectedSongs(e) {
  var song_ids = new Array();
  $$('input[type="checkbox"][name=' + e +']').select(function(i){
    return i.checked
  }).each(function(i){
    song_ids.unshift(i.value)
  });
  return song_ids.join(',');
}
function resetSelectedSongs(e) {
  $$('input[type="checkbox"][name=' + e +']').select(function(i){ i.checked = false })
}
function setSelectIndex(e, v) {
  //$$ == $A($('div'))
  $A($(e).getElementsByTagName('option')).select(function(i) { if(i.value == v) i.selected=true })
}
//iframe play
function mP(u) { $('p').src = u; }
//delete favor songs
function deleteFavor(t) {
  var favor_ids = '';
  favor_ids = getSelectedSongs('songs');
  if (favor_ids.length != 0 && confirm(t)) {
    new Ajax.Request('/song/delete_favor',
    { asynchronous:true,
      evalScripts:true,
      method:'post',
      onComplete:function(request){ hP2('user_nav_progress'); },
      onLoading:function(request){ sP2('user_nav_progress'); },
      parameters:'favor_ids=' + favor_ids + '&authenticity_token=' + encodeURIComponent('1e1a36d9877b7eb2cd1e6ad56bb4a1bd8c62c892')
    })
  }
  return false;
}
//add favors to playlist
function addToPlaylist(e) {
  var favor_ids = '';
  var playlist_id = '';
  favor_ids = getSelectedSongs('songs');
  playlist_id = e.value;
  if (favor_ids.length != 0 && playlist_id != '') {
    new Ajax.Request('/playlist/add_to_playlist',
    { asynchronous:true,
      evalScripts:true,
      method:'post',
      onComplete:function(request){ 
        hP2('user_nav_progress');
        setSelectIndex('playlist_select', '');
        resetSelectedSongs('songs')},
      onLoading:function(request){ sP2('user_nav_progress'); },
      parameters:'favor_ids=' + favor_ids + '&playlist_id=' + playlist_id + '&authenticity_token=' + encodeURIComponent('1e1a36d9877b7eb2cd1e6ad56bb4a1bd8c62c892')
    })
  } else {
    setSelectIndex('playlist_select', '');
  }
  return false;
}
//set flash
function flash(h) { $('flash').innerHTML = "<img height='12px' src='/images/chevron.png' />" + " " + h }
//get On-The-Go
function getOnTheGo(h) {
  new Ajax.Request('/song/new_song', 
  {
    asynchronous:true, evalScripts:true, 
    method:'get', 
    onComplete:function(request){hP2('user_nav_progress'); flash(h);}, 
    onLoading:function(request){sP2('user_nav_progress');}, 
    parameters:'authenticity_token=' + encodeURIComponent('9fb939447aecbea8611c217af42dfbac8e038feb')
  });
  return false;
}
