From 25b7510fe30e9a0a2ab3c1a46e1d767c595a7a67 Mon Sep 17 00:00:00 2001 From: Cesura Date: Fri, 16 Apr 2021 22:35:30 +0300 Subject: [PATCH] Switch to client-side decryption; encrypt title; dark theme icons --- app.py | 2 +- pastey/functions.py | 12 +- pastey/routes.py | 24 +- static/css/style.css | 4 + static/img/language/{ => Dark}/batchfile.png | Bin static/img/language/{ => Dark}/c.png | Bin static/img/language/Dark/coffeescript.png | Bin 0 -> 25561 bytes static/img/language/{ => Dark}/cplusplus.png | Bin static/img/language/{ => Dark}/csharp.png | Bin static/img/language/Dark/css.png | Bin 0 -> 20355 bytes static/img/language/Dark/erlang.png | Bin 0 -> 20750 bytes static/img/language/{ => Dark}/go.png | Bin static/img/language/{ => Dark}/haskell.png | Bin static/img/language/Dark/html.png | Bin 0 -> 20062 bytes static/img/language/{ => Dark}/java.png | Bin static/img/language/{ => Dark}/javascript.png | Bin static/img/language/{ => Dark}/jupyter.png | Bin static/img/language/Dark/lua.png | Bin 0 -> 28087 bytes static/img/language/Dark/markdown.png | Bin 0 -> 12236 bytes static/img/language/{ => Dark}/matlab.png | Bin static/img/language/Dark/objective-c.png | Bin 0 -> 31531 bytes static/img/language/Dark/perl.png | Bin 0 -> 29154 bytes static/img/language/{ => Dark}/php.png | Bin static/img/language/Dark/plaintext.png | Bin 0 -> 7086 bytes static/img/language/{ => Dark}/powershell.png | Bin static/img/language/{ => Dark}/python.png | Bin static/img/language/{ => Dark}/r.png | Bin static/img/language/{ => Dark}/ruby.png | Bin static/img/language/Dark/rust.png | Bin 0 -> 20962 bytes static/img/language/{ => Dark}/scala.png | Bin static/img/language/Dark/shell.png | Bin 0 -> 22715 bytes static/img/language/{ => Dark}/swift.png | Bin static/img/language/Dark/tex.png | Bin 0 -> 17290 bytes static/img/language/{ => Dark}/typescript.png | Bin static/img/language/Light/batchfile.png | Bin 0 -> 12598 bytes static/img/language/Light/c.png | Bin 0 -> 26981 bytes .../img/language/{ => Light}/coffeescript.png | Bin static/img/language/Light/cplusplus.png | Bin 0 -> 27594 bytes static/img/language/Light/csharp.png | Bin 0 -> 28905 bytes static/img/language/{ => Light}/css.png | Bin static/img/language/{ => Light}/erlang.png | Bin static/img/language/Light/go.png | Bin 0 -> 36543 bytes static/img/language/Light/haskell.png | Bin 0 -> 18909 bytes static/img/language/{ => Light}/html.png | Bin static/img/language/Light/java.png | Bin 0 -> 27442 bytes static/img/language/Light/javascript.png | Bin 0 -> 18368 bytes static/img/language/Light/jupyter.png | Bin 0 -> 21691 bytes static/img/language/{ => Light}/lua.png | Bin static/img/language/{ => Light}/markdown.png | Bin static/img/language/Light/matlab.png | Bin 0 -> 31776 bytes .../img/language/{ => Light}/objective-c.png | Bin static/img/language/{ => Light}/perl.png | Bin static/img/language/Light/php.png | Bin 0 -> 21763 bytes static/img/language/{ => Light}/plaintext.png | Bin static/img/language/Light/powershell.png | Bin 0 -> 12599 bytes static/img/language/Light/python.png | Bin 0 -> 19751 bytes static/img/language/Light/r.png | Bin 0 -> 30817 bytes static/img/language/Light/ruby.png | Bin 0 -> 57750 bytes static/img/language/{ => Light}/rust.png | Bin static/img/language/Light/scala.png | Bin 0 -> 18272 bytes static/img/language/{ => Light}/shell.png | Bin static/img/language/Light/swift.png | Bin 0 -> 26609 bytes static/img/language/{ => Light}/tex.png | Bin static/img/language/Light/typescript.png | Bin 0 -> 15993 bytes static/js/common.js | 36 + static/js/fernet.js | 9868 +++++++++++++++++ templates/index.html | 2 +- templates/view.html | 40 +- 68 files changed, 9945 insertions(+), 43 deletions(-) rename static/img/language/{ => Dark}/batchfile.png (100%) rename static/img/language/{ => Dark}/c.png (100%) create mode 100644 static/img/language/Dark/coffeescript.png rename static/img/language/{ => Dark}/cplusplus.png (100%) rename static/img/language/{ => Dark}/csharp.png (100%) create mode 100644 static/img/language/Dark/css.png create mode 100644 static/img/language/Dark/erlang.png rename static/img/language/{ => Dark}/go.png (100%) rename static/img/language/{ => Dark}/haskell.png (100%) create mode 100644 static/img/language/Dark/html.png rename static/img/language/{ => Dark}/java.png (100%) rename static/img/language/{ => Dark}/javascript.png (100%) rename static/img/language/{ => Dark}/jupyter.png (100%) create mode 100644 static/img/language/Dark/lua.png create mode 100644 static/img/language/Dark/markdown.png rename static/img/language/{ => Dark}/matlab.png (100%) create mode 100644 static/img/language/Dark/objective-c.png create mode 100644 static/img/language/Dark/perl.png rename static/img/language/{ => Dark}/php.png (100%) create mode 100644 static/img/language/Dark/plaintext.png rename static/img/language/{ => Dark}/powershell.png (100%) rename static/img/language/{ => Dark}/python.png (100%) rename static/img/language/{ => Dark}/r.png (100%) rename static/img/language/{ => Dark}/ruby.png (100%) create mode 100644 static/img/language/Dark/rust.png rename static/img/language/{ => Dark}/scala.png (100%) create mode 100644 static/img/language/Dark/shell.png rename static/img/language/{ => Dark}/swift.png (100%) create mode 100644 static/img/language/Dark/tex.png rename static/img/language/{ => Dark}/typescript.png (100%) create mode 100644 static/img/language/Light/batchfile.png create mode 100644 static/img/language/Light/c.png rename static/img/language/{ => Light}/coffeescript.png (100%) create mode 100644 static/img/language/Light/cplusplus.png create mode 100644 static/img/language/Light/csharp.png rename static/img/language/{ => Light}/css.png (100%) rename static/img/language/{ => Light}/erlang.png (100%) create mode 100644 static/img/language/Light/go.png create mode 100644 static/img/language/Light/haskell.png rename static/img/language/{ => Light}/html.png (100%) create mode 100644 static/img/language/Light/java.png create mode 100644 static/img/language/Light/javascript.png create mode 100644 static/img/language/Light/jupyter.png rename static/img/language/{ => Light}/lua.png (100%) rename static/img/language/{ => Light}/markdown.png (100%) create mode 100644 static/img/language/Light/matlab.png rename static/img/language/{ => Light}/objective-c.png (100%) rename static/img/language/{ => Light}/perl.png (100%) create mode 100644 static/img/language/Light/php.png rename static/img/language/{ => Light}/plaintext.png (100%) create mode 100644 static/img/language/Light/powershell.png create mode 100644 static/img/language/Light/python.png create mode 100644 static/img/language/Light/r.png create mode 100644 static/img/language/Light/ruby.png rename static/img/language/{ => Light}/rust.png (100%) create mode 100644 static/img/language/Light/scala.png rename static/img/language/{ => Light}/shell.png (100%) create mode 100644 static/img/language/Light/swift.png rename static/img/language/{ => Light}/tex.png (100%) create mode 100644 static/img/language/Light/typescript.png create mode 100644 static/js/fernet.js diff --git a/app.py b/app.py index 80005ae..c233566 100644 --- a/app.py +++ b/app.py @@ -6,7 +6,7 @@ from os import environ from distutils.util import strtobool from threading import Thread -pastey_version = "0.4.1" +pastey_version = "0.4.2" loaded_config = {} loaded_themes = [] diff --git a/pastey/functions.py b/pastey/functions.py index 429401a..ec2db96 100644 --- a/pastey/functions.py +++ b/pastey/functions.py @@ -35,6 +35,7 @@ def get_recent(limit=config.recent_pastes): # Replace preview if encrypted if paste['encrypted']: paste['content'] = "[Encrypted]" + paste['title'] = "[Encrypted]" recent_pastes.append(paste) i += 1 @@ -67,14 +68,6 @@ def get_paste(unique_id, key=""): with open(file_path, "w") as fp: fp.write(json.dumps(paste)) - # Decrypt content, if necessary - try: - if key != "": - cipher_suite = Fernet(key.encode('utf-8')) - paste['content'] = cipher_suite.decrypt(paste['content'].encode('utf-8')).decode('utf-8') - except Exception as e: - return 401 - return paste else: return None @@ -104,7 +97,10 @@ def new_paste(title, content, source_ip, expires=0, single=False, encrypt=False) if encrypt: init_key = Fernet.generate_key() cipher_suite = Fernet(init_key) + + # Encrypt title and content content = cipher_suite.encrypt(content.encode('utf-8')).decode('utf-8') + title = cipher_suite.encrypt(title.encode('utf-8')).decode('utf-8') key = init_key.decode('utf-8') # Check if single use is set diff --git a/pastey/routes.py b/pastey/routes.py index dc3945b..24f56e8 100644 --- a/pastey/routes.py +++ b/pastey/routes.py @@ -72,24 +72,6 @@ def view(unique_id): else: abort(404) -# View paste page (encrypted) -@app.route("/view//") -def view_key(unique_id, key): - content = functions.get_paste(unique_id, key=key) - - if content == 401: - abort(401) - elif content is not None: - return render_template("view.html", - paste=content, - url=common.build_url(request, "/view/" + unique_id + "/" + key), - whitelisted=common.verify_whitelist(common.get_source_ip(request)), - active_theme=common.set_theme(request), - themes=loaded_themes) - else: - abort(404) - - # Delete paste @app.route("/delete/") def delete(unique_id): @@ -143,9 +125,9 @@ def paste(): # Return link if cli form option was set if 'cli' in request.form: - return common.build_url(request, "/view/" + unique_id + "/" + quote(key)), 200 + return common.build_url(request, "/view/" + unique_id + "#" + quote(key)), 200 else: - return redirect("/view/" + unique_id + "/" + quote(key)) + return redirect("/view/" + unique_id + "#" + quote(key)) else: if 'cli' in request.form: return common.build_url(request, "/view/" + unique_id), 200 @@ -199,7 +181,7 @@ def paste_json(): unique_id, key = functions.new_paste(title, content, source_ip, expires=expiration, single=single, encrypt=encrypt) if encrypt: return { - "link": common.build_url(request, "/view/" + unique_id + "/" + quote(key)) + "link": common.build_url(request, "/view/" + unique_id + "#" + quote(key)) }, 200 else: return { diff --git a/static/css/style.css b/static/css/style.css index 68590e8..c1303a3 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -45,3 +45,7 @@ .pastey-checkbox { padding-top:10px; } + +.pastey-title { + word-wrap:break-word; +} \ No newline at end of file diff --git a/static/img/language/batchfile.png b/static/img/language/Dark/batchfile.png similarity index 100% rename from static/img/language/batchfile.png rename to static/img/language/Dark/batchfile.png diff --git a/static/img/language/c.png b/static/img/language/Dark/c.png similarity index 100% rename from static/img/language/c.png rename to static/img/language/Dark/c.png diff --git a/static/img/language/Dark/coffeescript.png b/static/img/language/Dark/coffeescript.png new file mode 100644 index 0000000000000000000000000000000000000000..88ebaa005272f5d8387582f4e6427d3dab4c0118 GIT binary patch literal 25561 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 YuYGuO3YUa>74${;O*4JU4acYd1OHW3VgLXD literal 0 HcmV?d00001 diff --git a/static/img/language/cplusplus.png b/static/img/language/Dark/cplusplus.png similarity index 100% rename from static/img/language/cplusplus.png rename to static/img/language/Dark/cplusplus.png diff --git a/static/img/language/csharp.png b/static/img/language/Dark/csharp.png similarity index 100% rename from static/img/language/csharp.png rename to static/img/language/Dark/csharp.png diff --git a/static/img/language/Dark/css.png b/static/img/language/Dark/css.png new file mode 100644 index 0000000000000000000000000000000000000000..69eee531066adcad711ec21fd99b9cccaff31223 GIT binary patch literal 20355 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 W`fSWkv2PeX6y;Q93m%w0`@aBMj++Yr literal 0 HcmV?d00001 diff --git a/static/img/language/Dark/erlang.png b/static/img/language/Dark/erlang.png new file mode 100644 index 0000000000000000000000000000000000000000..4c06774b99d2d3288683160ef7f44c7df9e1e6eb GIT binary patch literal 20750 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 vNFTY==G8c$E9V{KfwTqXR11 literal 0 HcmV?d00001 diff --git a/static/img/language/go.png b/static/img/language/Dark/go.png similarity index 100% rename from static/img/language/go.png rename to static/img/language/Dark/go.png diff --git a/static/img/language/haskell.png b/static/img/language/Dark/haskell.png similarity index 100% rename from static/img/language/haskell.png rename to static/img/language/Dark/haskell.png diff --git a/static/img/language/Dark/html.png b/static/img/language/Dark/html.png new file mode 100644 index 0000000000000000000000000000000000000000..d17ab3e51d4a131aa5baf9bd94a29ea719165e4a GIT binary patch literal 20062 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 Hj_3Xdy@`;8 literal 0 HcmV?d00001 diff --git a/static/img/language/matlab.png b/static/img/language/Dark/matlab.png similarity index 100% rename from static/img/language/matlab.png rename to static/img/language/Dark/matlab.png diff --git a/static/img/language/Dark/objective-c.png b/static/img/language/Dark/objective-c.png new file mode 100644 index 0000000000000000000000000000000000000000..468a59ccc53731ff546c795da3456db4731399fc GIT binary patch literal 31531 zcmeFYWmr|w);7FpDN&IS1QF@lbV-M>>6C6Zh?I1ffCxx!8U&Q?X49nt($cXh>F$tz z*T!?6=bY<%{yf+Fz5fn^*JiD`#vJn=_ZV}GF&CjKN;3F3WH=xY2p=LVr3M0_;ekM? z_wHc=SH34(O@To7CpdO0F)Hdd>@%a=>U{#=!*!m=w#|{c zFGQhn&tqdLjYN;mQ%yZ?T6|sm_KHOH34~|{lizjQd(0Ah`B02>okWo|M_D=M&Nt`p zosn#HfnRx0_Zv8u!AFHgN*I@-{b`o<6vhQL8m3%E;Y-=mBE%;fWPAi3IbNcboLJ0kj`H0VFmkPd3hAeX#iAM+4uAc0T zWn=wn*j7H^O|#I!Cwz}iVHsUa8J%U0bLoQ%BWUZh*;oFP9hP}9LDkw!8`;S$vukxD z7Gct*+>z9&3V&+SQ}Lz*Fe^2$Vij~L&zF_pyc_-c@%B!T!Mdd24=MW_`48LtINQ&MX3-;U)Pgbbuu7wB5s zj&<9^XXHj+>sdEP@Otg$SeG@QP+qJ%{rnl76)8BqZuUvwiSyxV_ed=Hs($4mlf0IJ z?FrBLOq*q5N#icuYtn4+1^qMk#nBNZ(WSmrHkF2z&63(#->x*wQ5HRpnz#K8_^I=i z3E!AYTD@G9ctmu zxeQ$wk4QdT%4JNu%^w#P{m^>RHh-NNU&J~q#j>MQwxYt*F0@qq5-~h|F`bvvV`teH zw+ZRjwXAPULdi7jgS<5utKZ#SqdTmXc_ZMoM~dZtQmy=a%%`mZjcUy!0OhmEkaLF5 zh&g3Njm=ti%;nKVY0g?XRP%$nzl@z+^-J#g?=u9W^FR5YC^W!l^)^G%WbOQQ59=l~ zHSq8>!cEdmi21VZounS+<~&zdsI2_y`!E^mR@OsGzl75;hB2MA^v#GR+0aUt3Ro zO7L(S6WH774a?0up8)~GwSAWh;u<&9{s?m%slx_^FA`xJ@~k8KJE*hTO{ z@li*f2sVxTLt{(YTKK*5AIU}cnEfn3$@7a+4k0H9)^nV9>91jw6SkgG=wptL3_c5f zKF!XhyJOP9yn%+T@T05SNJMQyYA##io6k7=tJyB8&eM*8Y2prfmEFRiko@*r2yc_1 z=gi}-Y1_hYSQ;O{hqc9Vuq@*|3X;&X)M-(AjZ;J*t~8x3^ab0h(8_ApS}D+3-`H&2 zbG5z{Q&t5(vrE;^LoMU}1EL97^_kAe93M;DXrhgPa+O>Og;N|fn`l@MZjlvv2DzuI zCO%SG^hv^;f^|%f9VTW|o!f{vX)7M_>!;@*6xVM*UsY=S(ya{r@s8xxaRRSi|A4d= zr#XcTTX+weYdx-Y7WvPzUpmh{KJ;428ZxJT@ilC$D$d)qvO2w?;0P*fd2_B0smaX4 z^~w49`y7pN+Ddq;02hT$MxtWL-C`j;@Pe68r^!+1K<~wO#fdLkxjq)9p>mN0qk|}P7%1|mXbY;eh zEQ?MY6E+1a(s|QIz3+SdE+^|Cm2uN~v@GGf?t&+3@;l1U)V2>mDu--{s@g+++1^a% z?!dzzGM@?U<+VSAY*r71SCM81xsuRLzPo=oGF$LD<-OsX58kK9+tfN z`?(HEiBCR0UmC8VI#hekJ&x%D*CBx8Z?=T(%JD*2a@GD&9IQ9DSBlj>7nN}{H=1ulLc7$XL5>CtFp>&n?1T3mbZY<@yYC2!Pj%Otfz}wue}wD%%67u`04atzH|6pMCL6_a_)5PStr(G-4(*D}F zJua~g_V&|{%&`c)X5uEy@0QYam*0e$8!$y3ywZZFBiEL`4yI#klp^vthAax<)6xx} ze5qNDraPus(9D9;Iv?t9Z{gj8+w)5N&>QJ^6^zTBj_RwqSLE8RgI4!ID*G4q#7NVU zq-;>FUPsUIz_aEb(<+57AKr2^P$ZV6Z^4)=4UVYktrA?p3Ydx(4aA#7VAX*&~&Q z^t{!9V@H&a5Do;6s85x%JTs3}L|d+%8Hw-tAF`s3RN#~n-`RcZ zJ$=i(iwZIpE0giY#qoB@;D;Qcq^9w&4W!wPs##OAGqL)dBjeHJ*HYR#BH*WnQLf)b zjGsRD%DTU9o8DIV+>6w10_Gssu<3&;uHJA>MkVq6fQlhQM0U9MAVQEbOKQD3qgLu>IE;EsPTA=lA2PCZk{Fx{E`Bmf-&vQ5{^I9_2pi+-P4=Pg3LtBbmhK!yGZq zz3QAIDn!yKYufSoU&rlBg#DoTCbNjC!ZNkCBk%74!0q_dzKjia}Z+X$rUdQu#&}!jV)uGS`C)D-w-P7KdN;(v&d6R$QH=Q2<1*>9Xy!g`GW;)mKYy{QWowhYA4IKS#(OE59EZU* zWoIz)qjx)x8;A2Cx>QtHA%lul4Y$-9RkA|t$tNcx0~P*(Z`@P$?LCohVi`SS(>|6f zV+uoPx%0M4!Sl1xG4>rX(DzK*WXJwVjV*2|5z>~P5O6&JPAta*307$5EX6Jv(=ds)+1nvon#|13}q;eyV)eLfzaL)1PD z&=7JYlQxw7bp9%QXfM(sw)Nvi00;}E6op+8k2WExT!&@gmvgi*Z`N=1`STykzew{% zN4!I97xcwQ3|yVMq$p4`!qCDZ-#U!91<@#|Mk2%nO31CAoWDVR;RvcF3Ek^+P+gCF z$Fa1a@F8HKo7r7Q*G`JiN8f>7;akOnpMm~iIu(E3PdtBQ74E(^4Yr7L%@BEJ{GD9t zsaCa*-^U@s>Rn;|0OPPTqmdWblBSIf(7JxNkNHyO>|(Q|#@Z5Ru2h*^NlewG$=SWn zE{cT~r@!!MM>myjr#{7Xm83a3#ra6KPuli{_@2il9f};z{db>R$T7^d4qs+Q?jTgy z&#NHO?O086iuZzf{9kK(CI3mFm;S*LZ5uS_rRtOAIec^7o^JgoJhi$R#=if%WC(t5 zo)FBWi#ndmdPV;#Gjf}pz`UY;ubu^nrr%UlhBqJTJNmceja}VF&C#qX5=GFS{)rJ^ zpF9hCam9b`c)43|KSkbw;MMx=+{mATBlyV<<|iJ1{D7}L;>SlC)}J3!-`odXOW0rC z9#Kg-j}Bj$V^4(gEK%K;a;hsj-buykt^Fe$T@oa&p3MGwZ9sG~`P>g-VtG(*|LOO< ziau*kRyp+nQ0YSd#}e1-owFIT#1#%}$8KZCL%U7Sd@-3Io8llhEaU6r?8l_`F{pf~ zd-cfmWr8*yeQd;cMti8#nba5}`W>yKzuXs=@eaF_Q2C~m0nzFBMxQ-?63(x?-}pcv zlprffNfn5sF5c|hba%JlfFL_U$O3w!-B zZVERIBU|Kq>-P4jj>5q3s?z(V@2UQvEUvC*uT#_BlrdI+JXolEwzn(1JBK3C+{ew# ze*aB_ZSErnj#vYtz_NQ^o|*jNpyKLHip{1G>Y5Pt_HGV8VA*r>i!|i10V+eM8?S@M4NQfUc&UldKt z6Jb<<#+8vhF|B)iZykZjR*Fce#M0jd1uB2A=~3)fR{yycaK?3!%krQF!*hIQPWO`E z2Q)mYd5Fo+kNyfbu6g%hcXwd!MtEd%4+|vY=z*KYSpxJvuC0I`hqj`Epqafbn~Ax- zDU{9K_8q_s5J*VW{hf)KHPo5P6l!T@CrrK9*h)=hWiCvu#iPis_)Ze~#!A-H5vuN~ zq+#Z1Z6;t&Eh>T|SX2!(Amn~jtVK$#MIu!S(us{xKH&@ z{cPVUD*l&vJEwo30N??3H+cu3 z0PKGo>1<{3-(dZlZpb@#%lTJDfXDw!?!S%x=i2WE1EUlb1*PoGT#)KPq=c!F^9!2W zn^~C)-hC9{=V0f7nwqon@I$#-xuK>etR_$kURF*HsD-Jy1qU|=hsnQ)g4j7Zo7kB_ zk)iRb&B@08-&a&@Oq?x%2ZX5=tn6Ie|NDl9l`T}= z*#wCu2QLRdFFQLsHwO<7H#Zl@e-C;Mb#wxlh?L2}&c?}ocL!+}L0~ZeuqH^J0s`)? z18WhKbcC8X+dFF5+uI0JBUPe8K6yuPDxtqdk+pIHMtC3@{}0ZqLmmG9_SXe$tnO}6 zQQgs2(8TQTBu*x-(7zY}&;7k+_Qu4{5(@bDKM3{D>sJ4Ru>fnx(6rePp z1*<7Ll%3NQV5=z?=f5lcf3-wj4Ngu$c0NH)j(=aG5EvP_{%KSp@c+l`e+T?aqywP& zdku)7KtKlnS492?W=N*|Km7U!-ToiW0Eqt2B>yXX{{z>5;QC)7@V^@TA9no*uKyJR z|Et0OVb}j}aN+!SO$W6D5?e?W*uM9AOL3j$GrAX4HQ?$g_|Uf%jHX}1SwYkf3UT(Q-0 z;WOZitdGQ%$`2>BB8(s^b`YquTWo%~S?%DbNyT4~j(4@WjJ%-k@Nd{=?g4@_;ffD7%Q#U+Gi$|o%~VxxO(=toT$AxD$HbME zy5)1?#K`z9((cHFjW_l8zXoyK+DB~~vxUo>|wTgsji9A~Ky*gCfI66K8#8a5sJ_S|7dTGO6BP9i%b zU@=FvaXzxWLqz*5uFqha8WQuk>t&vLvIf0}=Ne;{q1xMvCYM%&uyGRg4(qjaum0wz z8z3=bkiW5>m)?D4W|zoba+>BhINOI7$&|3IC>Ukp6}I|u&`bvVMwE0^MtR{eA@Nps zrdC8>cRU<{!Th1;+D!QroEAH6INiuJEaWynqIjg=l4pKIeV)$NAG<9E36T{PQ)~FP zb;eb1pyybUQI&sm=8blTm>>Pbd}UeK5OqDVoTo$Z&Kz(3ZsOE6UF*E!nRLZ&6l;rL zBgrnJs^0C3+SVpuI0U87LR%){`Ks$jNXU64l|z0uiQIJFH>FRa?+UoonTl&WtPj1p z?#O|86dB1NdfTo}%NoCp4=ZFcuBD7QwuZFEI5+BTo^H=x&O>_>Iz|q-CWpO#Q^wf( zne<#^uz7ujfDb5`^_5RI#{*$4)aRQDW@m2N?Dvs$u!#O@P5f+O!#P!cXZpbU%>2Bh z&)y-*mu(}lBW4(^BV*hpH;K5=C17T9Dc13R-{D!GYDisR0XtovfC)Cs3A^CWMjhd! zA|c=4zqex)O~y2y@tZOOJoO~y54pRHe#7jtDE9`IL%f~Ie)7Umd}Wm^ zb3NnR!y|C&Iv6CPDN%~gjH*cC2BD&XH2ecv;IY)_emy%God<()3Jqh>Ei?I(alTUb z_dUu(`@euds9o&kv8+pF^)i-W(IIajV%8$yO$1>FmV+z1`o=-M!4` zN9zAcQsv!QRMJ&O*VkL7hV3oY>>_J*G`{_$zGT}kWjonF$Jnd_vinF|uUwOT>}b+1 z{xp3c(ktM-dv^F2PdLFxbBc=n5n95HlkhqRc5Zzs&p^ z6=Wh0dPOZPZdFq$wIN~{NFs5%yY&`-CG)CnY*seAW!`gBJjk=&6IjO7gR|sLPp(v~ zSALy?Pc&>8z?8_B5?j@Yn_nX84iOr6$f2%WP7j97idqjlb?rmVAQLh%e$}ofXHf;5 zJsjn`SLdn)$FCu4@+ra}z&=@t+i5Q0Fa4zBQGi&!ptC$)O_3Gn=lbbcj3C3tW`5Gm zQ{{s8B#I&cEzkD3x0SWB)7GC1;Z*1GFElkNX6Elgh%(o&T4!)L?lYb$T9}&I=y&1b zNl{TXgPPCnB%R@9hH>388?`;#^PTMcHjX2RO|r%osbJ)UeeQwHJGctI!JT#}CG<3n zEb2V_9@g5T3c(yE?awuvr4G*^o&%)K+Y_0l7bW^n&;WSYU#v{9%z~AO%Gf8!yVhwl zoHq_1&fg>pr+Q)Kv(tSyyC#8J<09sn&RgYE_=t^&x^KADdEPxyR!4d~`-{3>N1qaV zjwyPYv8Z-=JD#IKn{XKsc@?o7_e#Hw&nXfI6l~4v!=F|C?3Zg(E{AQ73SSnm0cQ2L zvNoPQKg!}aWIWUQ)ZV)SJv~>`P3*T?_l9j|Qb(P)J}mGL1*YYDS0pKkBCH!cX8Vq! zXBwj#Zo55=`7Fq38SUL|d%rq7J*jhEByE~e&iXlT*jRo^%oJY0FoEz)>ATS@&3bjN zhM@7X&#gE*vT$U&n@(=}96g%|wiWRI!f)bzXvm}xzh&i>hoz_~+s z4NX=4R*?n~;ICpGw;6!&gI1k&WQN z&JH)kB9BKQ4lv`FMfcnH8Z9b*q06_71#cgNYdV(q3T(GqQtGFYIOa1}8q6mR=2wL}B9f`)DJh*9;zO1JVqWcw2zybuJ8$>X06duGqf zhXkfNzFQ%2kOiL22<~fZ_Q_c7Kd0l)X-=bm%o*w4ZoZB3<(lpyX z1|OaG31cQlY9GUD8>K>{kuIkvkW$1|SRc*s_W9cN#jchYYG*B@>=goRvi z1^*GUHmHesiwZnM(6>jJLX4uh8$b1DI3HDQ zku|o;&?1+GPTpW~fa0KevE@jiK8{;AZgIFl>)IanybxQV%?)0Aol|k83&D!7ICo8~ z8Rc;)&4M8<=4yTCfFxy!+Y6k$V905JjrtmW0S$WvGC?Hr_^Mnv(i?hi=jml&HnF1d z2w;30+cyb-*QZ1fr{2jc?E17`37fX%gBy$j@2@xNu-2;2{j`2=@PfkJ(Z+og&Fg`YOfQy__%*4Pz!c@ZbE%si0Hi z*U#k(mAAdiYV?nY{d;1pwhgT;EaiI=5764Y9EELfrHN2v^-VxjjIHo%g{W&?NL9~d z6Ia!(xP66s0#N~tiie|*d}KnGQKGZ)q4;|PO|QX#+n&N-$TcY3$MxB0r`t1ck&#&cag_?=#O7;8P^YEnOxA=lp^of_1kIhE$=-x=zIu=`!0T!t zff29~xFsM(f6<3Z950E~iD zJ&$b{!y!IwC#Kx1?ge~w<0OJP{YzLI-a4}<0vvOt-t81|}`^b*CF%!c@k-1d?1G(Y?=fyqyDXrl3 z*N_kz#IQa1(;q9Z>e6WmqJU)jdBphd;SfSQ-lxfinuy7h7fkmQL}$K(6eQtA~% zaTa8cKw~^^zAB~J%1YB*VaE~re!VS!M;o7?lZ!%2`RHbB%pP~-SrV7H2jQSbXWKYU zTrSIb5+0i{O-@j5wKB-x>5s!biSYai1AjY~WrV9+g7r_ZnC>lXa4H(?Ic(r|!z&X< ziQ#@je9qYgR6sOT5qE4ZDdU)0BeXjW(%U>12p9BI#z486{WZTl<#pe)2x24$&&i0H zKmL^in1Rj*g%*@6uD!13SS@rDkllcuil3CJ&ZWp~pZ6Z*DsZ)D#P0Pbd-oMzTC`2v z@9@fqS>eB?kV2band6env)8JmrzTnvCJ|9S0NPGm#DCyoZ}X@o3D*9YijPR?bJTEDh% zrY;Ox>0#NtN!G`Qg<WRGj!BuB)ZiYZu(`b?`sWbaw`N} zEcZR=6*CZXi1}!nb*DbtZf@pyB7+3~;ckM?`Q~~E?B=-;%eqKB4!BIOX_bTNo^dhW zX-x_H#5p$a6UVcq&6Gwz$rJyAKt@R0^pg1Wiu5jGhHVYCTn-9B$xi{a*2H zzfFl-ZC~bJ;XhAm;5{X*?R2}jaAbWVeFFN#^K$8MN7dXOb}ak8KXO1zW@Zqikh3QU zSn5OC8S9k@05F;vzqygzOFZt`5Be%o zqA~U+kA+!H7)1DdWab2e&mhe>wpo~|^f2;%Cp8k5H_Kj$O+Qv{V~k@Z;tu(sNE&aV zB*`MzN!$3Movv))S<6A1#(ltV8Dh`CNjsEfF&aco5m&J3;MrOgKyv>;owt`wPB857 zH~GfWdCd+u7YT~klMgsk@=!re@gLeo6QkE2OjyR1qkN?oCG{|Uo_yCcJENBBusfZx zmoE}N?^f1g+8cY;X%ICB_n;)%B(Ihh(U#!OwYl`E82p|ucnY}1gLR-d74(?N*_V0N zIHR}9?JNR00cpI?e9H#AYG3GEIQ<&XlCY*O0AwLlVzv0SSVTA|rfIz6YK6*}+e?a%it9 zfUR862Ov-HJ}z3opJ785XUZ$UjtznY3YV*1ZO*Hl~XljE!_ef1U z`HzD&@AF|MtS~v$yox-WW1XdIQQ0pTgC;ZqMnJK%^f3F1g-0%108*BFI~LYl}9Gcv1*1o2bGA z8c~G5-EXB4en9%<^druV-JLM2K_EUG5Z{n$9`Pgx8;IsOf^x}$LT|hB46`A=r z+gAWAp5gOf7l^)GfBTwFi>1Z|kXS+fJm$gza)g#@-;;pDqK$4m-3!o2ayX@JwMvfI z&%Y4xdE;pyVPi~g6>X<`Rt|KnH14-4M8kZvhh=5;Vy8pA^fKhf04lJT&@?s}yP59_ zyx{?mRqwOg^lmdx3+OMB%f0>b7I4`lUT;Ym-PQKQU;Wj639R9O%Ow8@3yxxR=HRPc z4dAhrQQ<)g}N3b-B6GJ)88(IPF9fAY7-V@S=CEiqe8wW_WKzkCa*OCta1zO^$&vN z6R~*9LQ9Tc-$BpF=IixFzLX8*uc6itg~8EJQddbXHl?5Zy=#?UwzC54+vNgUBp|Wj zncSju$Bmx0)g#9OXMjck+;NW^9b8aAJ*rIJO2hE-n~}KwTH{&788O$;91TNYrBg)$FFM#AH2x`^b~ z#4w~0Ha{;XfJ@?SAjU^soCqIQO*H@3*RAX$$}QGAA5F5a)KHMU`h=Zqh^K|wHN{YeCDaIXT`@r#(dAenD}%e5o;Q-x>4Qohgc3LZdzouz)QX(9vn=N$y*Xv z`?#$SUpnp9Y<8^*^X`;oK=y?bFChWlrZs5}=dOjApx=Ep)a6zduYo@=Ap&e97VMLp zNem%&9k0>^w1pLvJh^Jfj(Bc6+Z=PZ7*k*$G#}1vTNUl*Exn=z5H@$6xhmES=vO8~ zR!ka5YZ5)b>(o*_cK+t%qRs(gP%ca|EGSRS$l_0X`^6NA+r3>+C*zUdF%nIYVJKoA z0Cf+(WbXyL47lD$>e03w5*!)%)BN_)c)&cd zOm05{%c8C3+uSQs!cf}QAN#jXO3zauVb!*&z{6f=Hq`|T?ND|(f8(=?V! zd+DlTmP?D|3}=1s%<+dW@ZrRrIH)v$h}ke2FwJZQ5VXNx43RGR_`5YCQfqxAX4xp$ z6vWO8zdS9IohIg<3_X6ugc%1`#P&bz_^m864J+ueB`v!qZLrvAcW8JwB-LbDyWZZ= zIlz2=98h3YUVCC2v%QGD@j@}9%zC@QTgcFBaCI&K=n9;$y?kjbGZ1~uA>xB{?+?F> zN?J_uw`4kP!G&R1KX-%)4%#6bem`^xw|^xMJNAXbJey@}_ha6O*smW+A1+ zYq#zUMNADy5_`BO-EMGcDTs&1XIiB?K*l!E@Zd6L8(lRfInCw|ckUvQOkzZl!ul51 z_XQD}KgVteNm)0u^FzL)i92E{92aaJm%I9=AswU{WV~H}bYQs7}@r=y(Ca_Bt$!vv>SF+d4G*F4k;KIc{fU~5}s!|*FVvif6 z;W?9rGIwsq!E*m|WcJHS{36O6paqfsEtfXg8M6iz;D8kEhhLW@Ez%_*v6jrKDUmwlK0)BA{bOjV) zhOLORhtg##evsjqn*EEr+R8MkgP#{>-hf8QO%L+26{-I>Qehl@C8&qvP^En^Z zWkPO}2iUkTl{mpT3dH33K&R-_)cLwAL=r`@$jJp`+ze2l?a!nK3_H1pFR9?k6%k;s zP!p132H6XTg@q6+2w)G=JVKaE7Zz`GKiPO9QpVH7_mtefD;|;}@iL^(D!(L|*^$w} z1<@twO#0w)rY!)w-<_A3`EkMwiH|$NzOjX)fjS3N8ZKmDVJM1QPKeE@Y^1-Es(-iE zyB}X|B&(Nr9R#@AkLkSMJ)f6b?^#(hivFdO0+BqivrD`AnFYDl4G=BbesE2dh~pce zBU^%>&LQiQU!0=DFG)bg!-CeWFUr;F*^wz%pRxoP4+pRF8W+TFwOGyw0XPo$wpj*g zBn}Rq!v@JH4v0?1*5yVEr}5xip#CPor+^gL4LW}e5Tz4fztxMq-~r(1HUSPsRxS)w zmfkzWquh(mMQ_{1hrTjokbaKhHS+nx0DZwEe-Iq#&$<1`eX-&jq$4yxbKljYIrVM7 zCjGfOY^9%vRNgK1e75k=2ul81SP(kzbo+kPe{)R=@oG3n1I}(~?mh{GqNO)Uuew}- zTgF0X9pKZ`=}!Oi zT>#qtcy5`)i@XT;!Xpf*nj@oTPBom_h=OqfaS>-u0J*3!cau`}KHBynxCu?GEY?=d zFxZ1tDf+t0BGih({W_!PmrsTgS&Ve!%ffFVyJcMG4(IO;pBBWa9v=rzth|g`Y<)5# z7e*AHeWmU(cmfxunPO$TZZmBaIJykn{rqXE(G)FkYsTLdXe|LO)=pbFd2cD`cYEF4 zbq~*s3MdmB_=olSP6Q#E$^__8yr+@Q8?xPO1B3H*4&}AB@jA{O?xGj2U&>a_V`Q{s zQ_8-<(S$4WnsH;VlIK)^iNiy(g=v~)51p1KUiJNH5lhwg{w0BJ{8w$oz>&`sc5@kEU4mai)r}v*Qhw+4c`Gs(NRa(14Z`UyAipN{j`A7Mw`Ebbc zL391wxH2+K@!8qaDeW+BXh5)(#5Oi*t)0)xR;xNL9er%~d{?x z*Ks?N5XsX`jLfa89@MfmTRpC zRhbyy=q+0TSF(hraUvgRdF@UdHXak#CXQrFnM-KBkKV9&>@CI!zJ+7|JGxnt(Sf=s zWLV0&N%(;kl9q*yC+?!#Qq825f0+rf&u^PW$cMG0ZCQB?tR z_F9HB%McRlH-H^ysW$HOwa&+R%E3%KPAq)=XAD`U3Sfy|ImTedi*c1f*b=hy$Sn@_ zXwx@x*+7Xp#&Vi(aB5TM^yukdm8w{U2#)6@{&fD_bJ=bQ4lfj8E{J*I@F{Yw#x^5n zi^A*=>;)ZS{V;@vNI_(w(ldEX)(|}L6}Gx<(&>*s2QpnA4;!m&Ve*R8`vWdsKL=2RxNmE)pW>l!|v$my=FeyISb8L2)zrO_M9@H!EO%~iT6 zUP23gYRL%-{C?)U@hkRxP}Xy+j-(5QUuu1qnno>8uryC+EiysMl*&CGch6C8*glQV z!fq`oIXv8J=h(oi*f_ND+-Dvy_oeBEyM#{&(QR-*=3|dJfX3fTQMKDw$$T=EdVic< zPf_YOMVG5OVA-Q~DZ6{uxP`I4$oCQ2MwEBN&)9$DJP!ChMLlssGO?V|2PWWmxb6R- zo5~nBUF2+C_~_bWB)C5P6l|ILvNiS(L7rUcsBcs>-99v(>#tGy%5$Dft zG!k)NKL+}q1X#zvhxYfkn`wm=#{4bMVJfJ`BzdP4%AVLbcrS){QNLIHw10B(Q9*`o zW}9njwX}06C|H!>se&Q0@n6pdX(;F`I|kZ)OI}~%{Q}E@t{`LfNC}LWZgRT~c_z>n zqthu<Y9UP%V!z|A2JK&4bqS4rgqp~(j!JsTyvWhoWG4MiTBG5yd4Bgz@Yy2jp4%j`opl3 zKDopDw3j@m0}6s}zukppL}Dr3TeI=8WhnNJ#=<#6c|)_%FGVk8qEm8O7=kBQU=vQx zba=SJ@{w*M!PtC=Rfps0hTMS@jdzcdC~<9MjFCyCM`0K-F=-#KdPyr^lV`VyT4o+~ zJj-c9np0($<<+n9mN;0A9GP7Cl+$6sChgK|hG*A=!Icrrw+vQJe=;Ut11x0_>NdI{~5x5v={nMIsHq=*}8*d&I!1Zo1Cs zb=ARK*_2`$LDG2_Atk>30eTThW8$|m_DNFV_uTI;IwI#p7cmFX53Lb{amPJD8C^Lw z{RX%4Cv-K01eZ$MKZuZdT%1Q~ML9Db9X>MsG9FaYe)pchT8^lG3jQAjmG+ zd3`!9eN>C*~W+oY6br_JM zs=)czaRNUvGkBqZRAxPz1aayjt6p>VJArk-xlBn=x6MI*7Np& zo~4k?aC$)hUJ}B2O#Nw&38t5>5mjxF3C9H=u=@vWDzf3Wd~5rQj8A3g>W7*tR*fzD z%-80(pYyp6hr>eWy5eM*bN1`6=+ah1D4mXEZmpXd!S@E~eXr5Iy>k1BFu5AVx_1rg zIFN5f9HYkX|CWxz@MQ!}U4R{|GQ>n&i`2A~{mNxbP>|ZGS)`rL%`!!6mUrk<2hnu+ z95Sz5-t8;7HEpQoaAF7)`sXjvQc2X(bwwUZ)>t{P?A`llNq_mZT~r3F@;vafn)bYn zTEbgo+n~?>V~FCxN3(R;F?ao%@G&anl9n{VfX~Cr`ZnA%6sO$WxVrXON%g~Vpvex%4_l?5 z`Ge+tSbmlO9^Q zUCp0l*334P8hPRex6x4m18)I!egDn_zl0jk0Nq)@iDG+;Bs+yGSd?qhDXTM=goYZd zPmj8%C;EJ`uIPXR1YSthw^!}1`jcW+%V8|l#-W%Kb3+gDDQ*^?oaY^8#5lVzSkQ(S zmjIQzKEC`o*3(3qOLy}L)tVlTGEZ~878Sxn@xe^pwkk8ZN9Db-A2l&(_cZjgwf!{f zvIx0-&DS!`VhQb(bY90D_oAcylmv>bLXO!G|6l~>rQX@VNlmM3dERvvknim|Rc$>A z!r+?-1~NXQjGx0wv41Y3Aos7noer0H-!iX{0IkK$axC(9!6=hs{2`A(jZY8JePo&# zC^PBu!?(TIL503U`{szmaaZMqPl0%!=xGBX{on6isgKi zX_wSZ>sslYMU?K+@0Y^IAR;S%Dt4)h&W^F+6$B#*u$4c$PZNLt$tzF6{`lfpv)W==iNF2O)4zb6v~Xl>rt8k9Uf~s#6Do!RkziAUC4N17t1_T_&a%op zpq-_3SvviG%vLMQirf8D_$+MCS~NVXat7_i?~x**?d02}eP5w{qNFRJWgv zn9wQQj11smElVnIeWUIt2V+(`ZH}B>2QjJr8XZ(}-3zSRbMVPCb?1=l;x3#2&#!R4;U2sPF1^tjMvOICt3F zMeUlHOMU5rD% z031V3Sz?1iOKFm=?hA`a<1~CLucf>z+P{2Ojk3k{C^ls(T}|vrqb~F8VZEY!7eyz^ zF170vi)SY+Ct7_O@MZ{VLgJw4DTEmHG1~`u+HQ%{Mh$SDh0_X){zjA}N(=j5cYtfS zayz-!X2Xt_hw2paI5%_x)gN0iD7_<*Ebh)Q46%IdOb|$1Y$^9>-{$%`Ey$He?cfVD z-a{?Yo8r^6%WGBabg13#rP8TLSFU92QzDn4gos$(rQlieE#UmFPXnKl_DCAWOYa?; z<)pkK!awKW)pKj8A}b8r#=rb}3{vN1f2>`F4&?SLE5U67eYBRlhZ$Ikz{{j`UJP~3 z+dmE@Q47IQD9y8?*NGG_OH#)$xZ&qYf5D zxvCmWhVGgCSgxJ%7X_r*?ZsA2q9C6hI|TpU2!x)^W7Njq_iCytu^T?E@e}XK$s&CE z*iBQn`R*-V)$9pK=JF0|}Fy_19?X*w?^k5vq7$JTm6<6Ftn8ayItQ#*NRTgNTRF~J&4}3SfY2U1d%AQI#D8vXe)Xz z2_kx;vr2*`%j&)V?)Cf$@5lH1x$iS`&73)NX0CG@C1mOBOFCYKoG*@kTGJH}oe|IQy?hu#YI=_EkHd*vo zZZXm2JidwaZ8TwckA)<@--A!Km9?}9f^?964}$9Za`IkYVJ>{vWG*b5(=|Z5tnCZX zXs-A+H=dJ*J8IXY8afp8gA_n9>$e+nOvbYgW%;mnq!JBs03BUVDQbrMqKtUc%80lU~u!aqoma{tMDb&D%}f3+D_HKk8asK+5L*RxgU8 zaoPFkHl6&Z{exP4-p;eD;#y{Fa_Qn%AFbusGv5;jooT+U%-!o<_>8#0A+sGyq-=S_ zl&`<~lIOR_0Mo7$`XJ}aIeJ@Fr|Eu=M8#?9_YqY`UBYmsE&)O(SQE=NY1o4yQ6$B3{c6He}6Fq5pXR9C=gv!&IjAdCiGOd8^8>CaFX^bN9)w zXX_S?yk5~smdViFOni%859{Tl)Kk!%j_LMitz>6c;raF*R%H(hszx|v^c0Ts{S6tO zoy!3Z#kb_Xf#IzEVT4a{x2~#t7-FEpEuW6q>ksF&$o?`jeEhU!U5I(}oYBbVB2W|# zghU#%^e^XNO$dU+Zdcr_J{SFKXE51JwC#DYc-!BB(m1CF#xPTuCQZ?@6b z%7qyW@x@MUl;?KES0NfbL^k9gB)kpG(=!6ot!NIAB{6Odgc=m0rFKw{W9s&o)=sXyEJ0>$38l|V8^mGijn3Zo`kS|9 ziHqs_EdCN#r!G)Q`y+2E{ixLJT_G6XA<+*j;DGUsdL;i%f8Gg%MfxckNObTg$z#N) zV`>!Z`))n|%dl0Th$WOpGp{el_C6)8hp%Pun4RV13-VdXi%jDcqm2%H4ad|Uj(AvK z=(VUXm4as*P02PQOKpC6KKUqk!9PDTCt+?lv=u`|N`A!7#6x$b@4|j=yY^f4Gyfxg z5po&$h8@2xrn1UmXm}ks^cp6g)_JrDbT5;8DTt{b+!)I$%4bK{S2pvA8r*hV_C#3&Vj)J{vQwDd7msnQDrIXM*fU`E&B0G=U zKO33JGb!4)0oPUu9{G`~F3s_`Agb@|hp85t@?GAL?XXFk6XlwE6Z+K`Jbmy~1}wl` zQtmPPp@{KJzl$XWC{OfQb4{zIXNUiCc7pt?_~rXG4b>ZySyVDwV5gtdBF+RYnP5|uX;*DNXUs<_5Ke4xz5PSy6JH3W$$09On z6H2+q_#)nf+|KByX6ox#H4| zF_491Tgts}oBXIXWG+b;kHOOr#Anba(+D)R-Lwy_kXM@RW;ABA$8|bwXuoD|xne`& z{f6Z6?F#3|m53!CkFiEsr{M?o7qY3$s3+S*DDM5e#TnD?U+6Qe%Eu#Z>VMZwFGz~7 zN|kQA0hlHQY#LLjmE_ zMHC~9&z4%JQfVE*`z#^H5L+S>l@YKZept*KoZs(SoEGZ-4hoSW`x`|Zw7>ZFzlo-f zX;aGxG*@8Qme#xaR#o6Ns{Dax!7x0;E`{CJ0AVyzr} z?V!okStZ7aU$iY3f5V|rFSH71NDlDhr6Bxb|hBN)womy!9plrY^ zo2tw4D9hrjH8*;+W|B6C2fC0G?&4j=?++=cIJFts;o(`9G`77o0;*!6zogb(B;X$p z3YP3IGl1kVJEgm_r%E#`=e-TH!0}1X`6MYt>!Nb}N>sIG;d^+lBr(2U@-aAU!{#j} zO0Q%|M6(3NI#+Nf1NRhDhRpO;^@_?I?BU1BHsHMIy?r|M>A0NKbRokNUeT$dF81)$u4)Lz?#=VjB(|Kd-J|s^$y0~mHk7{I{L$`cae+IPSFD{SgIiIbdKdM0 zPM!a*hIBSSRhCq1d^j<(!&di?EpZME-E_OC(yBjAr7eON9CB530bNnUHqFKh{GFC9 z{uSC;=JEcxe521*Dr?082*E^8{r-*!zx_-K}ASSNJ8)Ix_J-||a1iu-yu@WR?r+*@Rz#3j))6G_cX9cj>aGSsz#cJ&ktvRV!K?IIqt#WTr|E z%*l%PJs+{$=Yg1L_=`x)<{PzXCp8wKwpT4Y_AWGU0*^QL9C}~WdE{^OKdi{lc36(` z$3i+A0*k#Zrz8 z${eX)^_i|{ZO?FEh)GZX_}N{bz}nV9`4oU<|HhI4BhKm~^i0y^U zE3UXKmbitm2$UKQXiSDctg&CYzzus&s1$t4<9zKYPb)jlxr>e%lvdq-6Ww<$Q-qlm z-_)E=` z5@>;UnBFa#e7R~|U)X}1EBvbRW5tPD_9*qgZagbPKb&EBaK>D* z24opVB3`8XZ)`T_E3X9L|34y<_s+jsep>W4XCwh>+@x;)J2jgYcO8hb+X=_#iau)7 z_kLCLvKp`gEGEma?_qtkz8xM(!}0%39U)*s-^BCkB_dN)fE2{3y768;TL@~ddT6>c z8vkEgT}Z6cY6Q`LW?M`Ix-FK=ll%mZY$$AX>$-g<-Qr>X!zQUOpU{10C-0r``oEpH zUPBh>OBB+k3IvSwtAqpK?S~^)y(h%#IDGPun=cklw|-t&0NtEwBs%?cTw}Kw{fH){ zhzH0YcqJ9Y-E#i6#vA+#*umdxDu`9w?CAvP008a40U&Bx1ASI{qO%M;7l#*)mHNGN>G^KWJ%B zDK9hv3Ags2iHB-#X1Dla&abq&eUkwowWREli~|kdFo2>=OpL7w)og>*;7Jn?D&IE- zKfs3O3K^R&@B&x)5<{KnH+ireR^Qk-uMECWzZcsc>7XkBa9dJP(sHk5MG@u2=kiw^ zrp_Qgw$qoEBZm0g3!pWHxZR*2YlZ(^4q`<0|HqI?n;vcV;h-cED=X%uw|I)@=^RJK zRnz*?P1M8j{l?q~8phwWa4*d)SAgjyOdRAoj~Kyh*M)so zx|gL}_X?w_PsvRU*yVTkhL_dAnU~2adPN7g6C~&3dc*mo+j(F-^U4u9g@n@lIl2G} z%t+UfGoadM3UYuh$a#6WJ{#a`=9RU%J>;{VRnRlX6Y->h9vSoY-`&T`BsICdGAay9 zY?LrT4oTg|WY^qvZa%@>?>!gMX3RjsDiaZGdEEV?<_!5%A~Ei_R&E$Egc2Z$rg7>S zedhDKD%(>2EWc_zpoh=r$`ww}f}IL;vRcMZY|Cqcxs<0>np$CFYr9BdZHAC6&Wie7 zI!MBWKgQ)f1h7rvheGxUmQt>VA>TnbPy6vZZvVJEoKkS=01i|v%IAyZsq6%_#JP`_ zRFpRo#Aq<0cYZ9qR|USb*Hh6;h9s~QI#vcW+#}5u1}RyMW1Z$du%Xx-9o<$)?Lflx z$(WZ*x+1-k+JhKXPy_)t8_RJe@~McNKn~z1+@`PQXkj^}69_wOP6ESYE6_V-Hm0T_ zq()K&{Tp>aJTlQ==+|$1;@&-K&g@G7kzLc)cZLQG<_EA-DR7LSE4hjY9usg0usFp^ zOHh1&PIHZ$;_-G+u7;2DJ?W=bo#kT$pq+~dQE>Ttk#S_sP_gm3i7tN3@1jy{;IrYy z1Y#54fI z-$t%PX?B0A22oSFyH+U*h`?paZ?$3Vcx*)YPeMy(Y>wgJhoB>mxwfz0 zkyUI|^CI;F#sLI?ee&58qRSG`x?ZU$DeRV^BBzkVpi3>6`c+RzlM18rcq<@l#^}|b zoS~<0XIx?*1-_Vynbg(27P3BLCz!?LcJxY^rYY-cj5~4Es326mvt!ZkqP@~x_ZkR@ zjGkc{Iyr1US{UrQ5P}h~sM;XQKo-<^Dd6tGU`x8$6Gu>ij88gAu+r%E^557ijE3d5 zVyWi&p~AyPBX)s(Aj`(SeTiU2pg2QyX`JV>Z*w&YVNioS_42U*WFSZvn0ldmP1p?9 z=JTLlWYt%+Df&vJohQ_&)TDUNEf2G0r?uNiVoT}Xz1olb$A1$JQinHr7q1;AUI{fP zxX;{{csBR8Fr7(ZR$AD@+kbY!gk;_nVh6iR<|QuJ*CAnKt*y_C-Q#W&dO&K+ALfi|{O;Q(!ciK59Wm}#o=e3?2Ab{}DUcLPJvqf?> z$HG?2B4cCRC@5*Bb>ma5FLzlI?fXZVh)!)^(JK#`E_pe8-ne8TWT~ddId*gxaZOvT z^74E~3Bk(JV42ox9a~bDa1XH9eV&S;i@KgY&(6P`Q^gafL(lP(f30accC`)mBhX_} z6WlP>atFdrJ1bLrMW2csD}UnBt-^cSQkCnDz;AIgb`|ZLN&2_kdjGuQhesMOoj<_) zo}B(z`HA6taFDD13dNon{Noacw#w9X@h(E1*)I&cR&}RrO7-f$G7JZw)WI#Z`=a;K zd`_lMt^+VBo9Iz)dQHU=Y54Ib#8oX*0HSWWERW_B_t#X1@Q^sz*wuZw7h=6gUDI`K z>Lo$|a~vS9ZX z9#Ih6&(tXewUehy*UAFBEG;?$RH+_6{JAe4+>cZzPup4j6?25auM*I+YIU#fOhJ9n^O7uV{8vH;{+`5?n1FHmOW$p?^F%n95DWNtUU1u7#J*YnLy(P+|szg&sXb#o#LkYium^1k)^`_?q*imMXQ!ZC*8xVSdW@rOmgd`z9o{1{ZM-^hY zhp%bB4c&fThn z*=|u~H;X0d+O1Fluj{l|OWGX&+2lLkJ!f1S=%@OweUzWPVXgpedZPPDPczs)ueKzM7VoV*Y-n^KqNzMpe{xaJ zEGXLf%oA9rPu{iD@{*sE+f4nojhcDR+HtqDt0!Y{P4yOFyfo|KqU8wA%|!iwi+XK2 z3{-bsF0R6mH#9;kzgE`p8;Vb_q4dbJ`OFLq(0)Wbgg`{q)8`x;yF zxQfGT9OZ`gE}xN?io`nI7S94`p@{1R)Y*vZ8hSm`aVAUNScU=?Jr@l1$_e920-N?r zV!Z*9PVs817`sn0Iw>xB{J{1K8YvPR^)h8YR7Zwsfi5H{)_*$}V^npot353!{0m>g zFoBt0{xg-FP4@LR4>u?uN(AEr!MfVhiJE0;6WveonzLxS3o-P_5jFA#t)KBf*l{WU zo5*Ccmc zGNP9(8`mgkJmL57O7jok`~XHR@v0=`T^p$iRawbRzB4)+ZmNw+4cEm9&4ZeXfx2?T zF|Xn?uzIYkbbI_=!<_VwNxv(;RY zgwWu3V;Qx=j5tcPV0@_YmSn3c@eZCiX_GF6&lU(zcIM2 zQmXWcSeS|p6A(c-fy@=GX}N%x+pTBxCn| zW9@EzS#QcBkyV&6!l&@V*U3`Xou<2=mL>0D-R@nuswGjH+5!huFd1IR@A*w8@=!(J zI%ET&8EgMo+LyJ!4`QK&y-!?sNjK(rpob4#thJZRfVjvqjK@&8$Q?MaX2y4KJe<<8 znR(OXX()1AAxE7pq;1Cv>zJ0Fbt_PPxYF%jlZ6De7G$(6IOZ8%FCZSY8r-C<>)ek{m`+STlB%r^dZT|eq1e>M4{ATl z`INnEH|OPv(9-`Q(A9C8}F+3v!}+eh5$Jhnyxp~I(CzkBz^FIu7$ z9sBuywazMly&~x^$t0buiy1Y<2U(M6Er%hCGowuQ~1I$Km>{ENW8u+sbo{U1)N>dm;QBenz2EbkK&du$`u((%1cf5MSAc~!YzfJD-g;k zF&lOPek!^wokKLQy*g(evMvE3iSf|;ENGU+uWr#*Jb-t5wQ0-Z;}Gq+#o@4Rm%jYd zg&iToQExe|N^Xwyje-tZ;FX7NjrQeiQrTBufGNlkcqoK9d@sKnc~`FzHl#S=oFvYE zOQgEo^~9S^Ln^%J$FZMr z6H-g7eOW@?J1Ecj&x>rbaBI=8_B|i(voxtzdT`}})rZRmI+mZ!u6C>5!H15dWx>7! zi81v?$YNWaBEmccchZSU_L+98qf8L?F2ElGUc^xZL3Ya3rtJtNdK~}Zbu1{KBcL z+hU?kUU|Rmuj(1pUa7RspWR<9E^E}gzhtojdV@~K31Wct8NTOyJkvbfII!?Tg1Vh<%n zFMq?Yv+ytK6yY_!`3?QvWR?xvPC5fz@iYAM&8zg?`!G1yX-53kuc1`^&)W(t`&uoI zJA8aOvv9gpR(uWPF#+J%N-oINC#kJ$Mec->a!ZvidKU+_>#JORBqb1CKsHHhP9N_qubYTuaq^^1iawEZtUTy-cFq!j4JAl` zd1gm^zoZK!H=9?Qary3kLbm=kYK0x-i8Dc%@TzjIf>DPt)M@dx5bsqmu7lY0r30Da zR$0g15;Z^HP;>HWSdU3fkkz-IN6#;Q5;i@ms9$uWApyKF1cF$DO7T{2IYM$Wl5VSD zZzWE9*okhYn*^yub{4*dyq>Zw#%w+%zoTB9EarePU+q@>lWHKi;h!{$cS1{&yZ>M> zZ`NPbA+T*b*aCi;E87$ z&&(zcAuM>E--R^sPoTH_3}07pZZbtF_|KXiz6piPqzeX2rqsr7QPE;IpJ^@LA`4qI zy&!_HX5&(m&Q3o~)l@l3OKwqt@J35GNnF7QjXx`6Jl}9f1Y7T%4%kqCZS8n2NXloz zSJjgc5AhB|>Venmu91|n2uT$+#1|N+E?s*`Xxv&fnQSV=Ug&ebVzOQd9-NLJ(X58E-9CgR73Qq75_NQ?UFZ!;{<-*mKn<(M^| zOZTZO`ds8_9|7lnE%PIvh%=}^f9d&=P9(?dn$=ek08lrP!!lEWFg&AnwRC?N;_C{?}T^MED8zuOQOMT7W7Sg6~1HfM-l{h6z@aS z%ANe$c8)V1f3pV8*l!dTm=M{iYebNt%wuvvxg6^7OGaKHcp1Zs`~x6bq3tP$yr!~Q z9EBuhewyyidVSC!fk;1=*(g|g5~FrfF>?~>(7AywYYgJcxq)|;_NLwgvA{`zTBGGL z_jMCCg@X?onH;bbrz)f-=RE(^vi5;;?(0c9ipFY9md5m2Ro$E1D^||`v?P=2zOuc} zfqpWG3{B3AfOsS~m?ZZv=+>9mdT^{im|ziE=YgV-y)^!rvq(6(SrD1ZxJS<|plAik z-4gAst-Zh7dM7>w&6fDwVB1t8{9$W8@b>8G>_hSm)R*-mxdhNv001rl0mrCX-ZP{u zytyaN2kWYu54JTsvHIix_~H3|e080T;0pc5Z~BX8+9xrt76wOEh+atktL8t$)Yqyu z4F^$YcVsqdAN)5ECsux#lcf1zNnT6T>X?@5V4=W|BJxc{@9?ND#cx)|I=*Uv- z#w9mU!nI9Ne?O)<`!ozCR2Qmyn5t!%X-Cu~#``&b^Q`+~*U;AX4+CkbPXOnwUU%=BnjW&XO<+^zr1Ysmk9zfHtm5`HKA Vv7kkx^carj literal 0 HcmV?d00001 diff --git a/static/img/language/Dark/perl.png b/static/img/language/Dark/perl.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0c6f37a5fe7976e1b3fd213b018a15298770ee GIT binary patch literal 29154 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 MroKkS1KZdC2Ze_MnE(I) literal 0 HcmV?d00001 diff --git a/static/img/language/php.png b/static/img/language/Dark/php.png similarity index 100% rename from static/img/language/php.png rename to static/img/language/Dark/php.png diff --git a/static/img/language/Dark/plaintext.png b/static/img/language/Dark/plaintext.png new file mode 100644 index 0000000000000000000000000000000000000000..b955bd63145b36573e37abf1372e152d9d2927b2 GIT binary patch literal 7086 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 PBkt$tbetpdcmE6j4E1lrAj@ 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 X8~TGls6d{yzzel4ZY*D literal 0 HcmV?d00001 diff --git a/static/img/language/scala.png b/static/img/language/Dark/scala.png similarity index 100% rename from static/img/language/scala.png rename to static/img/language/Dark/scala.png diff --git a/static/img/language/Dark/shell.png b/static/img/language/Dark/shell.png new file mode 100644 index 0000000000000000000000000000000000000000..661d63a1937ae0237e9fcd752f64ebc3fcaebc58 GIT binary patch literal 22715 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 literal 0 HcmV?d00001 diff --git a/static/img/language/typescript.png b/static/img/language/Dark/typescript.png similarity index 100% rename from static/img/language/typescript.png rename to static/img/language/Dark/typescript.png diff --git a/static/img/language/Light/batchfile.png b/static/img/language/Light/batchfile.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a28574df41af2e33e0ef1b0b0b4716c1b2cf94 GIT binary patch literal 12598 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 RW=YXVOI`0y*=?K1{{q3*n#BMB literal 0 HcmV?d00001 diff --git a/static/img/language/coffeescript.png b/static/img/language/Light/coffeescript.png similarity index 100% rename from static/img/language/coffeescript.png rename to static/img/language/Light/coffeescript.png diff --git a/static/img/language/Light/cplusplus.png b/static/img/language/Light/cplusplus.png new file mode 100644 index 0000000000000000000000000000000000000000..1d067c037cf4948ee3eb3e588bccfdfe65f56333 GIT binary patch literal 27594 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 B|FZx9 literal 0 HcmV?d00001 diff --git a/static/img/language/Light/csharp.png b/static/img/language/Light/csharp.png new file mode 100644 index 0000000000000000000000000000000000000000..6dbdfbd2ddb7ef994caeadcbb3feeca6b2231dbe GIT binary patch literal 28905 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 literal 0 HcmV?d00001 diff --git a/static/img/language/Light/haskell.png b/static/img/language/Light/haskell.png new file mode 100644 index 0000000000000000000000000000000000000000..6f49fc7554377a06c9e79311ff76addd1b2b9799 GIT binary patch literal 18909 zcmeIac{r5q`v*KyT2RqENGT0jvyXjC3^N!ql)(2+`f%xP7{0u}e`%r5Ud`Nvx3lBPS*;_REJa zmTP_!GiV)DzY}f9;b}8UuIp}0ZHCS+Z~A558Z-~8JOVwj#qU4IqB3Q3B^B06nh{pzUV^{=@iZT=8{C&9wj)or1sWx2|< z;72d23R#x@hSn-KXZPPQR|qxfyD43ctG5$gEeIJ2=7)}wmlBJgD8_#F4N}SoC{(+; zcSUEh?8c+C_smt<6OU)pvV+i?xLo-|tU(O6+g>~Ev#3f_k+ce#~h;vKX>jp2~8(@E3{{K zB>M2qH$C}O@BQ_Y@?PY+$kEbn>!g^Y?Z2M6p%hq~ zT1MmPI~kok*^*8=L79j*1gRTyavgrt1zIj<{-**x&iO*?_0-SFZLw8{qavasvLenk z*`{K<`18>zfswedB_q$T4qAq%?p*2fjc3&TRp_~{SeW9$m!bbO*=uD*BGOEA?wLt$ zzt`%Td`@7a@rm3IdnhemWcdSdR5p6jT_3U+*xN9lcV!Y&zv=E4mp!Bd1cMu z&dF4{W~1}pZDWiweB8X2!lOU=VV)&bj?X`B+Kno@J{ufcwDZ;UcgHSAB7JJ9h0XkA z`7WxfutH5j;j9~*-*s!6p#Hn1v40&`A@Cp+kltm?HM1G*2vm*;{S-z!XV@OH_{)hJsLA4>Gx4d}}lB+jpi$JnzQ zqF6_I3yj%Fy!uA5l{_zhJ!^j_?*BMwE5W!=rT^%e&O81WlCm;xcHQ1AN)-&}uf*$R6pnQSC26JxBe=+eXLv@;%aflFx@_Sudx-0Zp0 z%q*mFb0`JNaV_w8opU>%jg^mfYy0b2ulW>5zqDRWnHc`{7x5&i(=o^|PHoaPPG^+f znN9S3yfYF$&wW8PC$r+mn2xv|M}Pbwh$6+YN|vIu=L^iuz|}C%slNiBXyK~&3uU>J�{sN1JdoqC51>eWA_ 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�Dp4}v|?jf+mkXG%O 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 G{{I6@F~@!Y literal 0 HcmV?d00001 diff --git a/static/img/language/html.png b/static/img/language/Light/html.png similarity index 100% rename from static/img/language/html.png rename to static/img/language/Light/html.png diff --git a/static/img/language/Light/java.png b/static/img/language/Light/java.png new file mode 100644 index 0000000000000000000000000000000000000000..5e15cc53b8ed7ce2ed7be1d685c1d2d18557bc7b GIT binary patch literal 27442 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 Gj{JXI*lMl- literal 0 HcmV?d00001 diff --git a/static/img/language/Light/javascript.png b/static/img/language/Light/javascript.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f92cf637a3604e2f74fc027aeea47f2fb4c72f GIT binary patch literal 18368 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 literal 0 HcmV?d00001 diff --git a/static/img/language/Light/jupyter.png b/static/img/language/Light/jupyter.png new file mode 100644 index 0000000000000000000000000000000000000000..8830d1d0eacb12d683184ce672edee3fb4221696 GIT binary patch literal 21691 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 L>gTe~DWM4fVE|3@ literal 0 HcmV?d00001 diff --git a/static/img/language/lua.png b/static/img/language/Light/lua.png similarity index 100% rename from static/img/language/lua.png rename to static/img/language/Light/lua.png diff --git a/static/img/language/markdown.png b/static/img/language/Light/markdown.png similarity index 100% rename from static/img/language/markdown.png rename to static/img/language/Light/markdown.png diff --git a/static/img/language/Light/matlab.png b/static/img/language/Light/matlab.png new file mode 100644 index 0000000000000000000000000000000000000000..804c3a43b851a39f1228b0588b3513237b5eb509 GIT binary patch literal 31776 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 R4#n?EML|QpMD}&a{{wlL$>RV3 literal 0 HcmV?d00001 diff --git a/static/img/language/objective-c.png b/static/img/language/Light/objective-c.png similarity index 100% rename from static/img/language/objective-c.png rename to static/img/language/Light/objective-c.png diff --git a/static/img/language/perl.png b/static/img/language/Light/perl.png similarity index 100% rename from static/img/language/perl.png rename to static/img/language/Light/perl.png diff --git a/static/img/language/Light/php.png b/static/img/language/Light/php.png new file mode 100644 index 0000000000000000000000000000000000000000..aec0e41eab79d972e1fe2771235aad366b4dd0f9 GIT binary patch literal 21763 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 literal 0 HcmV?d00001 diff --git a/static/img/language/plaintext.png b/static/img/language/Light/plaintext.png similarity index 100% rename from static/img/language/plaintext.png rename to static/img/language/Light/plaintext.png diff --git a/static/img/language/Light/powershell.png b/static/img/language/Light/powershell.png new file mode 100644 index 0000000000000000000000000000000000000000..ac899835265e24630459631059ca7a330fe4c8ea GIT binary patch literal 12599 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

m_uLPA?V}mas%II`+bZv~ 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 B($xR} literal 0 HcmV?d00001 diff --git a/static/js/common.js b/static/js/common.js index 8bf9f72..fb190f6 100644 --- a/static/js/common.js +++ b/static/js/common.js @@ -14,3 +14,39 @@ function resetTheme() { document.cookie = "pastey_theme=; Expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; SameSite=Lax;"; location.reload(); } + +function decryptPaste() { + var key = window.location.hash.substring(1); + $("#paste-url").val($("#paste-url").val() + window.location.hash); + + try { + var secret = new fernet.Secret(decodeURIComponent(key)); + + // Decrypt title + var title_token = new fernet.Token({ + secret: secret, + token: $("#pastey-title").text(), + ttl: 0 + }); + var title = title_token.decode(); + $("#pastey-title").text(title); + document.title = title + ' | Pastey'; + + // Decrypt content + var content_token = new fernet.Token({ + secret: secret, + token: $("#pastey-content").text(), + ttl: 0 + }); + $("#pastey-content").text(content_token.decode()); + + // Show success message + $("#pastey-decrypt-success").css("display", "block"); + + } catch(error) { + + // Show error message + $("#pastey-decrypt-failed").css("display", "block"); + } + +} \ No newline at end of file diff --git a/static/js/fernet.js b/static/js/fernet.js new file mode 100644 index 0000000..eccb37b --- /dev/null +++ b/static/js/fernet.js @@ -0,0 +1,9868 @@ +(function(e){if("function"==typeof bootstrap)bootstrap("fernet",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeFernet=e}else"undefined"!=typeof window?window.fernet=e():global.fernet=e()})(function(){var define,ses,bootstrap,module,exports; +return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { + if (timeDiff > this.ttl) { + throw new Error("Invalid Token: TTL"); + } + + if (((currentTime / 1000) + this.maxClockSkew) < timeInt) { + throw new Error("far-future timestamp"); + } + } + + this.ivHex = tokenString.slice(timeOffset, ivOffset); + this.iv = fernet.Hex.parse(this.ivHex); + this.cipherTextHex = tokenString.slice(ivOffset, hmacOffset); + this.cipherText = fernet.Hex.parse(this.cipherTextHex); + this.hmacHex = tokenString.slice(hmacOffset); + var decodedHmac = fernet.createHmac(this.secret.signingKey, fernet.timeBytes(this.time), this.iv, this.cipherText); + var decodedHmacHex = decodedHmac.toString(fernet.Hex); + + var accum = 0 + for (var i = 0; i < 64; i++) { + accum += decodedHmacHex.charCodeAt(i) ^ this.hmacHex.charCodeAt(i) + } + if (accum != 0) throw new Error("Invalid Token: HMAC"); + + this.message = fernet.decryptMessage(this.cipherText, this.secret.encryptionKey, this.iv) + return this.message; + } + } + + return Token; +} + +//exports = module.exports = Token; + +},{"../fernet":1}],4:[function(require,module,exports){ +(function (exports) { + 'use strict'; + + var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + function b64ToByteArray(b64) { + var i, j, l, tmp, placeHolders, arr; + + if (b64.length % 4 > 0) { + throw 'Invalid string. Length must be a multiple of 4'; + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + placeHolders = b64.indexOf('='); + placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0; + + // base64 is 4/3 + up to two characters of the original data + arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders); + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]); + arr.push((tmp & 0xFF0000) >> 16); + arr.push((tmp & 0xFF00) >> 8); + arr.push(tmp & 0xFF); + } + + if (placeHolders === 2) { + tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4); + arr.push(tmp & 0xFF); + } else if (placeHolders === 1) { + tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2); + arr.push((tmp >> 8) & 0xFF); + arr.push(tmp & 0xFF); + } + + return arr; + } + + function uint8ToBase64(uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length; + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; + }; + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]); + output += tripletToBase64(temp); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1]; + output += lookup[temp >> 2]; + output += lookup[(temp << 4) & 0x3F]; + output += '=='; + break; + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]); + output += lookup[temp >> 10]; + output += lookup[(temp >> 4) & 0x3F]; + output += lookup[(temp << 2) & 0x3F]; + output += '='; + break; + } + + return output; + } + + module.exports.toByteArray = b64ToByteArray; + module.exports.fromByteArray = uint8ToBase64; +}()); + +},{}],5:[function(require,module,exports){ +// UTILITY +var util = require('util'); +var Buffer = require("buffer").Buffer; +var pSlice = Array.prototype.slice; + +function objectKeys(object) { + if (Object.keys) return Object.keys(object); + var result = []; + for (var name in object) { + if (Object.prototype.hasOwnProperty.call(object, name)) { + result.push(name); + } + } + return result; +} + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.message = options.message; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (value === undefined) { + return '' + value; + } + if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) { + return value.toString(); + } + if (typeof value === 'function' || value instanceof RegExp) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (typeof s == 'string') { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +assert.AssertionError.prototype.toString = function() { + if (this.message) { + return [this.name + ':', this.message].join(' '); + } else { + return [ + this.name + ':', + truncate(JSON.stringify(this.actual, replacer), 128), + this.operator, + truncate(JSON.stringify(this.expected, replacer), 128) + ].join(' '); + } +}; + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!!!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (typeof actual != 'object' && typeof expected != 'object') { + return actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isUndefinedOrNull(value) { + return value === null || value === undefined; +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + try { + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (expected instanceof RegExp) { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail('Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail('Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +},{"buffer":9,"util":7}],6:[function(require,module,exports){ +var process=require("__browserify_process");if (!process.EventEmitter) process.EventEmitter = function () {}; + +var EventEmitter = exports.EventEmitter = process.EventEmitter; +var isArray = typeof Array.isArray === 'function' + ? Array.isArray + : function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]' + } +; +function indexOf (xs, x) { + if (xs.indexOf) return xs.indexOf(x); + for (var i = 0; i < xs.length; i++) { + if (x === xs[i]) return i; + } + return -1; +} + +// By default EventEmitters will print a warning if more than +// 10 listeners are added to it. This is a useful default which +// helps finding memory leaks. +// +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +var defaultMaxListeners = 10; +EventEmitter.prototype.setMaxListeners = function(n) { + if (!this._events) this._events = {}; + this._events.maxListeners = n; +}; + + +EventEmitter.prototype.emit = function(type) { + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events || !this._events.error || + (isArray(this._events.error) && !this._events.error.length)) + { + if (arguments[1] instanceof Error) { + throw arguments[1]; // Unhandled 'error' event + } else { + throw new Error("Uncaught, unspecified 'error' event."); + } + return false; + } + } + + if (!this._events) return false; + var handler = this._events[type]; + if (!handler) return false; + + if (typeof handler == 'function') { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + var args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + return true; + + } else if (isArray(handler)) { + var args = Array.prototype.slice.call(arguments, 1); + + var listeners = handler.slice(); + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + return true; + + } else { + return false; + } +}; + +// EventEmitter is defined in src/node_events.cc +// EventEmitter.prototype.emit() is also defined there. +EventEmitter.prototype.addListener = function(type, listener) { + if ('function' !== typeof listener) { + throw new Error('addListener only takes instances of Function'); + } + + if (!this._events) this._events = {}; + + // To avoid recursion in the case that type == "newListeners"! Before + // adding it to the listeners, first emit "newListeners". + this.emit('newListener', type, listener); + + if (!this._events[type]) { + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + } else if (isArray(this._events[type])) { + + // Check for listener leak + if (!this._events[type].warned) { + var m; + if (this._events.maxListeners !== undefined) { + m = this._events.maxListeners; + } else { + m = defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + console.trace(); + } + } + + // If we've already got an array, just append. + this._events[type].push(listener); + } else { + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + var self = this; + self.on(type, function g() { + self.removeListener(type, g); + listener.apply(this, arguments); + }); + + return this; +}; + +EventEmitter.prototype.removeListener = function(type, listener) { + if ('function' !== typeof listener) { + throw new Error('removeListener only takes instances of Function'); + } + + // does not use listeners(), so no side effect of creating _events[type] + if (!this._events || !this._events[type]) return this; + + var list = this._events[type]; + + if (isArray(list)) { + var i = indexOf(list, listener); + if (i < 0) return this; + list.splice(i, 1); + if (list.length == 0) + delete this._events[type]; + } else if (this._events[type] === listener) { + delete this._events[type]; + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + if (arguments.length === 0) { + this._events = {}; + return this; + } + + // does not use listeners(), so no side effect of creating _events[type] + if (type && this._events && this._events[type]) this._events[type] = null; + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + if (!this._events) this._events = {}; + if (!this._events[type]) this._events[type] = []; + if (!isArray(this._events[type])) { + this._events[type] = [this._events[type]]; + } + return this._events[type]; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (typeof emitter._events[type] === 'function') + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +},{"__browserify_process":30}],7:[function(require,module,exports){ +var events = require('events'); + +exports.isArray = isArray; +exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'}; +exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'}; + + +exports.print = function () {}; +exports.puts = function () {}; +exports.debug = function() {}; + +exports.inspect = function(obj, showHidden, depth, colors) { + var seen = []; + + var stylize = function(str, styleType) { + // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + var styles = + { 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] }; + + var style = + { 'special': 'cyan', + 'number': 'blue', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' }[styleType]; + + if (style) { + return '\u001b[' + styles[style][0] + 'm' + str + + '\u001b[' + styles[style][1] + 'm'; + } else { + return str; + } + }; + if (! colors) { + stylize = function(str, styleType) { return str; }; + } + + function format(value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (value && typeof value.inspect === 'function' && + // Filter out the util module, it's inspect function is special + value !== exports && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + return value.inspect(recurseTimes); + } + + // Primitive types cannot have properties + switch (typeof value) { + case 'undefined': + return stylize('undefined', 'undefined'); + + case 'string': + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return stylize(simple, 'string'); + + case 'number': + return stylize('' + value, 'number'); + + case 'boolean': + return stylize('' + value, 'boolean'); + } + // For some reason typeof null is "object", so special case here. + if (value === null) { + return stylize('null', 'null'); + } + + // Look up the keys of the object. + var visible_keys = Object_keys(value); + var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys; + + // Functions without properties can be shortcutted. + if (typeof value === 'function' && keys.length === 0) { + if (isRegExp(value)) { + return stylize('' + value, 'regexp'); + } else { + var name = value.name ? ': ' + value.name : ''; + return stylize('[Function' + name + ']', 'special'); + } + } + + // Dates without properties can be shortcutted + if (isDate(value) && keys.length === 0) { + return stylize(value.toUTCString(), 'date'); + } + + var base, type, braces; + // Determine the object type + if (isArray(value)) { + type = 'Array'; + braces = ['[', ']']; + } else { + type = 'Object'; + braces = ['{', '}']; + } + + // Make functions say that they are functions + if (typeof value === 'function') { + var n = value.name ? ': ' + value.name : ''; + base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']'; + } else { + base = ''; + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + value.toUTCString(); + } + + if (keys.length === 0) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return stylize('' + value, 'regexp'); + } else { + return stylize('[Object]', 'special'); + } + } + + seen.push(value); + + var output = keys.map(function(key) { + var name, str; + if (value.__lookupGetter__) { + if (value.__lookupGetter__(key)) { + if (value.__lookupSetter__(key)) { + str = stylize('[Getter/Setter]', 'special'); + } else { + str = stylize('[Getter]', 'special'); + } + } else { + if (value.__lookupSetter__(key)) { + str = stylize('[Setter]', 'special'); + } + } + } + if (visible_keys.indexOf(key) < 0) { + name = '[' + key + ']'; + } + if (!str) { + if (seen.indexOf(value[key]) < 0) { + if (recurseTimes === null) { + str = format(value[key]); + } else { + str = format(value[key], recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (isArray(value)) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = stylize('[Circular]', 'special'); + } + } + if (typeof name === 'undefined') { + if (type === 'Array' && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = stylize(name, 'string'); + } + } + + return name + ': ' + str; + }); + + seen.pop(); + + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.length + 1; + }, 0); + + if (length > 50) { + output = braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + + } else { + output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; + } + + return output; + } + return format(obj, (typeof depth === 'undefined' ? 2 : depth)); +}; + + +function isArray(ar) { + return Array.isArray(ar) || + (typeof ar === 'object' && Object.prototype.toString.call(ar) === '[object Array]'); +} + + +function isRegExp(re) { + typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]'; +} + + +function isDate(d) { + return typeof d === 'object' && Object.prototype.toString.call(d) === '[object Date]'; +} + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + +exports.log = function (msg) {}; + +exports.pump = null; + +var Object_keys = Object.keys || function (obj) { + var res = []; + for (var key in obj) res.push(key); + return res; +}; + +var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) { + var res = []; + for (var key in obj) { + if (Object.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +var Object_create = Object.create || function (prototype, properties) { + // from es5-shim + var object; + if (prototype === null) { + object = { '__proto__' : null }; + } + else { + if (typeof prototype !== 'object') { + throw new TypeError( + 'typeof prototype[' + (typeof prototype) + '] != \'object\'' + ); + } + var Type = function () {}; + Type.prototype = prototype; + object = new Type(); + object.__proto__ = prototype; + } + if (typeof properties !== 'undefined' && Object.defineProperties) { + Object.defineProperties(object, properties); + } + return object; +}; + +exports.inherits = function(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object_create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); +}; + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (typeof f !== 'string') { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(exports.inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': return JSON.stringify(args[i++]); + default: + return x; + } + }); + for(var x = args[i]; i < len; x = args[++i]){ + if (x === null || typeof x !== 'object') { + str += ' ' + x; + } else { + str += ' ' + exports.inspect(x); + } + } + return str; +}; + +},{"events":6}],8:[function(require,module,exports){ +exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isBE ? 0 : (nBytes - 1), + d = isBE ? 1 : -1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isBE ? (nBytes - 1) : 0, + d = isBE ? -1 : 1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],9:[function(require,module,exports){ +var assert = require('assert'); +exports.Buffer = Buffer; +exports.SlowBuffer = Buffer; +Buffer.poolSize = 8192; +exports.INSPECT_MAX_BYTES = 50; + +function Buffer(subject, encoding, offset) { + if (!(this instanceof Buffer)) { + return new Buffer(subject, encoding, offset); + } + this.parent = this; + this.offset = 0; + + var type; + + // Are we slicing? + if (typeof offset === 'number') { + this.length = coerce(encoding); + this.offset = offset; + } else { + // Find the length + switch (type = typeof subject) { + case 'number': + this.length = coerce(subject); + break; + + case 'string': + this.length = Buffer.byteLength(subject, encoding); + break; + + case 'object': // Assume object is an array + this.length = coerce(subject.length); + break; + + default: + throw new Error('First argument needs to be a number, ' + + 'array or string.'); + } + + // Treat array-ish objects as a byte array. + if (isArrayIsh(subject)) { + for (var i = 0; i < this.length; i++) { + if (subject instanceof Buffer) { + this[i] = subject.readUInt8(i); + } + else { + this[i] = subject[i]; + } + } + } else if (type == 'string') { + // We are a string + this.length = this.write(subject, 0, encoding); + } else if (type === 'number') { + for (var i = 0; i < this.length; i++) { + this[i] = 0; + } + } + } +} + +Buffer.prototype.get = function get(i) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this[i]; +}; + +Buffer.prototype.set = function set(i, v) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this[i] = v; +}; + +Buffer.byteLength = function (str, encoding) { + switch (encoding || "utf8") { + case 'hex': + return str.length / 2; + + case 'utf8': + case 'utf-8': + return utf8ToBytes(str).length; + + case 'ascii': + case 'binary': + return str.length; + + case 'base64': + return base64ToBytes(str).length; + + default: + throw new Error('Unknown encoding'); + } +}; + +Buffer.prototype.utf8Write = function (string, offset, length) { + var bytes, pos; + return Buffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length); +}; + +Buffer.prototype.asciiWrite = function (string, offset, length) { + var bytes, pos; + return Buffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length); +}; + +Buffer.prototype.binaryWrite = Buffer.prototype.asciiWrite; + +Buffer.prototype.base64Write = function (string, offset, length) { + var bytes, pos; + return Buffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length); +}; + +Buffer.prototype.base64Slice = function (start, end) { + var bytes = Array.prototype.slice.apply(this, arguments) + return require("base64-js").fromByteArray(bytes); +}; + +Buffer.prototype.utf8Slice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var res = ""; + var tmp = ""; + var i = 0; + while (i < bytes.length) { + if (bytes[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]); + tmp = ""; + } else + tmp += "%" + bytes[i].toString(16); + + i++; + } + + return res + decodeUtf8Char(tmp); +} + +Buffer.prototype.asciiSlice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var ret = ""; + for (var i = 0; i < bytes.length; i++) + ret += String.fromCharCode(bytes[i]); + return ret; +} + +Buffer.prototype.binarySlice = Buffer.prototype.asciiSlice; + +Buffer.prototype.inspect = function() { + var out = [], + len = this.length; + for (var i = 0; i < len; i++) { + out[i] = toHex(this[i]); + if (i == exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...'; + break; + } + } + return ''; +}; + + +Buffer.prototype.hexSlice = function(start, end) { + var len = this.length; + + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + + var out = ''; + for (var i = start; i < end; i++) { + out += toHex(this[i]); + } + return out; +}; + + +Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + start = +start || 0; + if (typeof end == 'undefined') end = this.length; + + // Fastpath empty strings + if (+end == start) { + return ''; + } + + switch (encoding) { + case 'hex': + return this.hexSlice(start, end); + + case 'utf8': + case 'utf-8': + return this.utf8Slice(start, end); + + case 'ascii': + return this.asciiSlice(start, end); + + case 'binary': + return this.binarySlice(start, end); + + case 'base64': + return this.base64Slice(start, end); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Slice(start, end); + + default: + throw new Error('Unknown encoding'); + } +}; + + +Buffer.prototype.hexWrite = function(string, offset, length) { + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + // must be an even number of digits + var strLen = string.length; + if (strLen % 2) { + throw new Error('Invalid hex string'); + } + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; i++) { + var byte = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(byte)) throw new Error('Invalid hex string'); + this[offset + i] = byte; + } + Buffer._charsWritten = i * 2; + return i; +}; + + +Buffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + switch (encoding) { + case 'hex': + return this.hexWrite(string, offset, length); + + case 'utf8': + case 'utf-8': + return this.utf8Write(string, offset, length); + + case 'ascii': + return this.asciiWrite(string, offset, length); + + case 'binary': + return this.binaryWrite(string, offset, length); + + case 'base64': + return this.base64Write(string, offset, length); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Write(string, offset, length); + + default: + throw new Error('Unknown encoding'); + } +}; + + +// slice(start, end) +Buffer.prototype.slice = function(start, end) { + if (end === undefined) end = this.length; + + if (end > this.length) { + throw new Error('oob'); + } + if (start > end) { + throw new Error('oob'); + } + + return new Buffer(this, end - start, +start); +}; + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function(target, target_start, start, end) { + var source = this; + start || (start = 0); + if (end === undefined || isNaN(end)) { + end = this.length; + } + target_start || (target_start = 0); + + if (end < start) throw new Error('sourceEnd < sourceStart'); + + // Copy 0 bytes; we're done + if (end === start) return 0; + if (target.length == 0 || source.length == 0) return 0; + + if (target_start < 0 || target_start >= target.length) { + throw new Error('targetStart out of bounds'); + } + + if (start < 0 || start >= source.length) { + throw new Error('sourceStart out of bounds'); + } + + if (end < 0 || end > source.length) { + throw new Error('sourceEnd out of bounds'); + } + + // Are we oob? + if (end > this.length) { + end = this.length; + } + + if (target.length - target_start < end - start) { + end = target.length - target_start + start; + } + + var temp = []; + for (var i=start; i= this.length) { + throw new Error('start out of bounds'); + } + + if (end < 0 || end > this.length) { + throw new Error('end out of bounds'); + } + + for (var i = start; i < end; i++) { + this[i] = value; + } +} + +// Static methods +Buffer.isBuffer = function isBuffer(b) { + return b instanceof Buffer || b instanceof Buffer; +}; + +Buffer.concat = function (list, totalLength) { + if (!isArray(list)) { + throw new Error("Usage: Buffer.concat(list, [totalLength])\n \ + list should be an Array."); + } + + if (list.length === 0) { + return new Buffer(0); + } else if (list.length === 1) { + return list[0]; + } + + if (typeof totalLength !== 'number') { + totalLength = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + totalLength += buf.length; + } + } + + var buffer = new Buffer(totalLength); + var pos = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; +}; + +// helpers + +function coerce(length) { + // Coerce length to a number (possibly NaN), round up + // in case it's fractional (e.g. 123.456) then do a + // double negate to coerce a NaN to 0. Easy, right? + length = ~~Math.ceil(+length); + return length < 0 ? 0 : length; +} + +function isArray(subject) { + return (Array.isArray || + function(subject){ + return {}.toString.apply(subject) == '[object Array]' + }) + (subject) +} + +function isArrayIsh(subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number'; +} + +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} + +function utf8ToBytes(str) { + var byteArray = []; + for (var i = 0; i < str.length; i++) + if (str.charCodeAt(i) <= 0x7F) + byteArray.push(str.charCodeAt(i)); + else { + var h = encodeURIComponent(str.charAt(i)).substr(1).split('%'); + for (var j = 0; j < h.length; j++) + byteArray.push(parseInt(h[j], 16)); + } + + return byteArray; +} + +function asciiToBytes(str) { + var byteArray = [] + for (var i = 0; i < str.length; i++ ) + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push( str.charCodeAt(i) & 0xFF ); + + return byteArray; +} + +function base64ToBytes(str) { + return require("base64-js").toByteArray(str); +} + +function blitBuffer(src, dst, offset, length) { + var pos, i = 0; + while (i < length) { + if ((i+offset >= dst.length) || (i >= src.length)) + break; + + dst[i + offset] = src[i]; + i++; + } + return i; +} + +function decodeUtf8Char(str) { + try { + return decodeURIComponent(str); + } catch (err) { + return String.fromCharCode(0xFFFD); // UTF 8 invalid char + } +} + +// read/write bit-twiddling + +Buffer.prototype.readUInt8 = function(offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return; + + return buffer[offset]; +}; + +function readUInt16(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return 0; + + if (isBigEndian) { + val = buffer[offset] << 8; + if (offset + 1 < buffer.length) { + val |= buffer[offset + 1]; + } + } else { + val = buffer[offset]; + if (offset + 1 < buffer.length) { + val |= buffer[offset + 1] << 8; + } + } + + return val; +} + +Buffer.prototype.readUInt16LE = function(offset, noAssert) { + return readUInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt16BE = function(offset, noAssert) { + return readUInt16(this, offset, true, noAssert); +}; + +function readUInt32(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return 0; + + if (isBigEndian) { + if (offset + 1 < buffer.length) + val = buffer[offset + 1] << 16; + if (offset + 2 < buffer.length) + val |= buffer[offset + 2] << 8; + if (offset + 3 < buffer.length) + val |= buffer[offset + 3]; + val = val + (buffer[offset] << 24 >>> 0); + } else { + if (offset + 2 < buffer.length) + val = buffer[offset + 2] << 16; + if (offset + 1 < buffer.length) + val |= buffer[offset + 1] << 8; + val |= buffer[offset]; + if (offset + 3 < buffer.length) + val = val + (buffer[offset + 3] << 24 >>> 0); + } + + return val; +} + +Buffer.prototype.readUInt32LE = function(offset, noAssert) { + return readUInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt32BE = function(offset, noAssert) { + return readUInt32(this, offset, true, noAssert); +}; + + +/* + * Signed integer types, yay team! A reminder on how two's complement actually + * works. The first bit is the signed bit, i.e. tells us whether or not the + * number should be positive or negative. If the two's complement value is + * positive, then we're done, as it's equivalent to the unsigned representation. + * + * Now if the number is positive, you're pretty much done, you can just leverage + * the unsigned translations and return those. Unfortunately, negative numbers + * aren't quite that straightforward. + * + * At first glance, one might be inclined to use the traditional formula to + * translate binary numbers between the positive and negative values in two's + * complement. (Though it doesn't quite work for the most negative value) + * Mainly: + * - invert all the bits + * - add one to the result + * + * Of course, this doesn't quite work in Javascript. Take for example the value + * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of + * course, Javascript will do the following: + * + * > ~0xff80 + * -65409 + * + * Whoh there, Javascript, that's not quite right. But wait, according to + * Javascript that's perfectly correct. When Javascript ends up seeing the + * constant 0xff80, it has no notion that it is actually a signed number. It + * assumes that we've input the unsigned value 0xff80. Thus, when it does the + * binary negation, it casts it into a signed value, (positive 0xff80). Then + * when you perform binary negation on that, it turns it into a negative number. + * + * Instead, we're going to have to use the following general formula, that works + * in a rather Javascript friendly way. I'm glad we don't support this kind of + * weird numbering scheme in the kernel. + * + * (BIT-MAX - (unsigned)val + 1) * -1 + * + * The astute observer, may think that this doesn't make sense for 8-bit numbers + * (really it isn't necessary for them). However, when you get 16-bit numbers, + * you do. Let's go back to our prior example and see how this will look: + * + * (0xffff - 0xff80 + 1) * -1 + * (0x007f + 1) * -1 + * (0x0080) * -1 + */ +Buffer.prototype.readInt8 = function(offset, noAssert) { + var buffer = this; + var neg; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return; + + neg = buffer[offset] & 0x80; + if (!neg) { + return (buffer[offset]); + } + + return ((0xff - buffer[offset] + 1) * -1); +}; + +function readInt16(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt16(buffer, offset, isBigEndian, noAssert); + neg = val & 0x8000; + if (!neg) { + return val; + } + + return (0xffff - val + 1) * -1; +} + +Buffer.prototype.readInt16LE = function(offset, noAssert) { + return readInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt16BE = function(offset, noAssert) { + return readInt16(this, offset, true, noAssert); +}; + +function readInt32(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt32(buffer, offset, isBigEndian, noAssert); + neg = val & 0x80000000; + if (!neg) { + return (val); + } + + return (0xffffffff - val + 1) * -1; +} + +Buffer.prototype.readInt32LE = function(offset, noAssert) { + return readInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt32BE = function(offset, noAssert) { + return readInt32(this, offset, true, noAssert); +}; + +function readFloat(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.readFloatLE = function(offset, noAssert) { + return readFloat(this, offset, false, noAssert); +}; + +Buffer.prototype.readFloatBE = function(offset, noAssert) { + return readFloat(this, offset, true, noAssert); +}; + +function readDouble(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.readDoubleLE = function(offset, noAssert) { + return readDouble(this, offset, false, noAssert); +}; + +Buffer.prototype.readDoubleBE = function(offset, noAssert) { + return readDouble(this, offset, true, noAssert); +}; + + +/* + * We have to make sure that the value is a valid integer. This means that it is + * non-negative. It has no fractional component and that it does not exceed the + * maximum allowed value. + * + * value The number to check for validity + * + * max The maximum value + */ +function verifuint(value, max) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value >= 0, + 'specified a negative value for writing an unsigned value'); + + assert.ok(value <= max, 'value is larger than maximum value for type'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +Buffer.prototype.writeUInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xff); + } + + if (offset < buffer.length) { + buffer[offset] = value; + } +}; + +function writeUInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffff); + } + + for (var i = 0; i < Math.min(buffer.length - offset, 2); i++) { + buffer[offset + i] = + (value & (0xff << (8 * (isBigEndian ? 1 - i : i)))) >>> + (isBigEndian ? 1 - i : i) * 8; + } + +} + +Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, true, noAssert); +}; + +function writeUInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffffffff); + } + + for (var i = 0; i < Math.min(buffer.length - offset, 4); i++) { + buffer[offset + i] = + (value >>> (isBigEndian ? 3 - i : i) * 8) & 0xff; + } +} + +Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, true, noAssert); +}; + + +/* + * We now move onto our friends in the signed number category. Unlike unsigned + * numbers, we're going to have to worry a bit more about how we put values into + * arrays. Since we are only worrying about signed 32-bit values, we're in + * slightly better shape. Unfortunately, we really can't do our favorite binary + * & in this system. It really seems to do the wrong thing. For example: + * + * > -32 & 0xff + * 224 + * + * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of + * this aren't treated as a signed number. Ultimately a bad thing. + * + * What we're going to want to do is basically create the unsigned equivalent of + * our representation and pass that off to the wuint* functions. To do that + * we're going to do the following: + * + * - if the value is positive + * we can pass it directly off to the equivalent wuint + * - if the value is negative + * we do the following computation: + * mb + val + 1, where + * mb is the maximum unsigned value in that byte size + * val is the Javascript negative integer + * + * + * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If + * you do out the computations: + * + * 0xffff - 128 + 1 + * 0xffff - 127 + * 0xff80 + * + * You can then encode this value as the signed version. This is really rather + * hacky, but it should work and get the job done which is our goal here. + */ + +/* + * A series of checks to make sure we actually have a signed 32-bit number + */ +function verifsint(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +function verifIEEE754(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); +} + +Buffer.prototype.writeInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7f, -0x80); + } + + if (value >= 0) { + buffer.writeUInt8(value, offset, noAssert); + } else { + buffer.writeUInt8(0xff + value + 1, offset, noAssert); + } +}; + +function writeInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fff, -0x8000); + } + + if (value >= 0) { + writeUInt16(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt16LE = function(value, offset, noAssert) { + writeInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt16BE = function(value, offset, noAssert) { + writeInt16(this, value, offset, true, noAssert); +}; + +function writeInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fffffff, -0x80000000); + } + + if (value >= 0) { + writeUInt32(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt32LE = function(value, offset, noAssert) { + writeInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt32BE = function(value, offset, noAssert) { + writeInt32(this, value, offset, true, noAssert); +}; + +function writeFloat(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.writeFloatLE = function(value, offset, noAssert) { + writeFloat(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeFloatBE = function(value, offset, noAssert) { + writeFloat(this, value, offset, true, noAssert); +}; + +function writeDouble(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) { + writeDouble(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) { + writeDouble(this, value, offset, true, noAssert); +}; + +},{"./buffer_ieee754":8,"assert":5,"base64-js":4}],10:[function(require,module,exports){ +var Buffer = require('buffer').Buffer; +var intSize = 4; +var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0); +var chrsz = 8; + +function toArray(buf, bigEndian) { + if ((buf.length % intSize) !== 0) { + var len = buf.length + (intSize - (buf.length % intSize)); + buf = Buffer.concat([buf, zeroBuffer], len); + } + + var arr = []; + var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; + for (var i = 0; i < buf.length; i += intSize) { + arr.push(fn.call(buf, i)); + } + return arr; +} + +function toBuffer(arr, size, bigEndian) { + var buf = new Buffer(size); + var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; + for (var i = 0; i < arr.length; i++) { + fn.call(buf, arr[i], i * 4, true); + } + return buf; +} + +function hash(buf, fn, hashSize, bigEndian) { + if (!Buffer.isBuffer(buf)) buf = new Buffer(buf); + var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); + return toBuffer(arr, hashSize, bigEndian); +} + +module.exports = { hash: hash }; + +},{"buffer":9}],11:[function(require,module,exports){ +var Buffer = require('buffer').Buffer +var sha = require('./sha') +var sha256 = require('./sha256') +var rng = require('./rng') +var md5 = require('./md5') + +var algorithms = { + sha1: sha, + sha256: sha256, + md5: md5 +} + +var blocksize = 64 +var zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(0) +function hmac(fn, key, data) { + if(!Buffer.isBuffer(key)) key = new Buffer(key) + if(!Buffer.isBuffer(data)) data = new Buffer(data) + + if(key.length > blocksize) { + key = fn(key) + } else if(key.length < blocksize) { + key = Buffer.concat([key, zeroBuffer], blocksize) + } + + var ipad = new Buffer(blocksize), opad = new Buffer(blocksize) + for(var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + var hash = fn(Buffer.concat([ipad, data])) + return fn(Buffer.concat([opad, hash])) +} + +function hash(alg, key) { + alg = alg || 'sha1' + var fn = algorithms[alg] + var bufs = [] + var length = 0 + if(!fn) error('algorithm:', alg, 'is not yet supported') + return { + update: function (data) { + if(!Buffer.isBuffer(data)) data = new Buffer(data) + + bufs.push(data) + length += data.length + return this + }, + digest: function (enc) { + var buf = Buffer.concat(bufs) + var r = key ? hmac(fn, key, buf) : fn(buf) + bufs = null + return enc ? r.toString(enc) : r + } + } +} + +function error () { + var m = [].slice.call(arguments).join(' ') + throw new Error([ + m, + 'we accept pull requests', + 'http://github.com/dominictarr/crypto-browserify' + ].join('\n')) +} + +exports.createHash = function (alg) { return hash(alg) } +exports.createHmac = function (alg, key) { return hash(alg, key) } +exports.randomBytes = function(size, callback) { + if (callback && callback.call) { + try { + callback.call(this, undefined, new Buffer(rng(size))) + } catch (err) { callback(err) } + } else { + return new Buffer(rng(size)) + } +} + +function each(a, f) { + for(var i in a) + f(a[i], i) +} + +// the least I can do is make error messages for the rest of the node.js/crypto api. +each(['createCredentials' +, 'createCipher' +, 'createCipheriv' +, 'createDecipher' +, 'createDecipheriv' +, 'createSign' +, 'createVerify' +, 'createDiffieHellman' +, 'pbkdf2'], function (name) { + exports[name] = function () { + error('sorry,', name, 'is not implemented yet') + } +}) + +},{"./md5":12,"./rng":13,"./sha":14,"./sha256":15,"buffer":9}],12:[function(require,module,exports){ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +var helpers = require('./helpers'); + +/* + * Perform a simple self-test to see if the VM is working + */ +function md5_vm_test() +{ + return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; +} + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); + +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn(q, a, b, x, s, t) +{ + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); +} +function md5_ff(a, b, c, d, x, s, t) +{ + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5_gg(a, b, c, d, x, s, t) +{ + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5_hh(a, b, c, d, x, s, t) +{ + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii(a, b, c, d, x, s, t) +{ + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} + +module.exports = function md5(buf) { + return helpers.hash(buf, core_md5, 16); +}; + +},{"./helpers":10}],13:[function(require,module,exports){ +// Original code adapted from Robert Kieffer. +// details at https://github.com/broofa/node-uuid +(function() { + var _global = this; + + var mathRNG, whatwgRNG; + + // NOTE: Math.random() does not guarantee "cryptographic quality" + mathRNG = function(size) { + var bytes = new Array(size); + var r; + + for (var i = 0, r; i < size; i++) { + if ((i & 0x03) == 0) r = Math.random() * 0x100000000; + bytes[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return bytes; + } + + if (_global.crypto && crypto.getRandomValues) { + whatwgRNG = function(size) { + var bytes = new Uint8Array(size); + crypto.getRandomValues(bytes); + return bytes; + } + } + + module.exports = whatwgRNG || mathRNG; + +}()) + +},{}],14:[function(require,module,exports){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var helpers = require('./helpers'); + +/* + * Calculate the SHA-1 of an array of big-endian words, and a bit length + */ +function core_sha1(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << (24 - len % 32); + x[((len + 64 >> 9) << 4) + 15] = len; + + var w = Array(80); + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + var e = -1009589776; + + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + var olde = e; + + for(var j = 0; j < 80; j++) + { + if(j < 16) w[j] = x[i + j]; + else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); + var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), + safe_add(safe_add(e, w[j]), sha1_kt(j))); + e = d; + d = c; + c = rol(b, 30); + b = a; + a = t; + } + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + e = safe_add(e, olde); + } + return Array(a, b, c, d, e); + +} + +/* + * Perform the appropriate triplet combination function for the current + * iteration + */ +function sha1_ft(t, b, c, d) +{ + if(t < 20) return (b & c) | ((~b) & d); + if(t < 40) return b ^ c ^ d; + if(t < 60) return (b & c) | (b & d) | (c & d); + return b ^ c ^ d; +} + +/* + * Determine the appropriate additive constant for the current iteration + */ +function sha1_kt(t) +{ + return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : + (t < 60) ? -1894007588 : -899497514; +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} + +module.exports = function sha1(buf) { + return helpers.hash(buf, core_sha1, 20, true); +}; + +},{"./helpers":10}],15:[function(require,module,exports){ + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var helpers = require('./helpers'); + +var safe_add = function(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +}; + +var S = function(X, n) { + return (X >>> n) | (X << (32 - n)); +}; + +var R = function(X, n) { + return (X >>> n); +}; + +var Ch = function(x, y, z) { + return ((x & y) ^ ((~x) & z)); +}; + +var Maj = function(x, y, z) { + return ((x & y) ^ (x & z) ^ (y & z)); +}; + +var Sigma0256 = function(x) { + return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); +}; + +var Sigma1256 = function(x) { + return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); +}; + +var Gamma0256 = function(x) { + return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); +}; + +var Gamma1256 = function(x) { + return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); +}; + +var core_sha256 = function(m, l) { + var K = new Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x9BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A7484AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3,0xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650A7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A3,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x34B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C87814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2); + var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); + var W = new Array(64); + var a, b, c, d, e, f, g, h, i, j; + var T1, T2; + /* append padding */ + m[l >> 5] |= 0x80 << (24 - l % 32); + m[((l + 64 >> 9) << 4) + 15] = l; + for (var i = 0; i < m.length; i += 16) { + a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3]; e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7]; + for (var j = 0; j < 64; j++) { + if (j < 16) { + W[j] = m[j + i]; + } else { + W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]); + } + T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]); + T2 = safe_add(Sigma0256(a), Maj(a, b, c)); + h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); + } + HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]); HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]); + HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]); HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]); + } + return HASH; +}; + +module.exports = function sha256(buf) { + return helpers.hash(buf, core_sha256, 32, true); +}; + +},{"./helpers":10}],16:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); + + + return CryptoJS.AES; + +})); +},{"./cipher-core":17,"./core":18,"./enc-base64":19,"./evpkdf":23,"./md5":26}],17:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + this._mode = modeCreator.call(mode, this, iv && iv.words); + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); + }()); + + +})); +},{"./core":18}],18:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); +},{}],19:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + return CryptoJS.enc.Base64; + +})); +},{"./core":18}],20:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + return CryptoJS.enc.Hex; + +})); +},{"./core":18}],21:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + return CryptoJS.enc.Latin1; + +})); +},{"./core":18}],22:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + return CryptoJS.enc.Utf8; + +})); +},{"./core":18}],23:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha1", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); + + + return CryptoJS.EvpKDF; + +})); +},{"./core":18,"./hmac":25,"./sha1":27}],24:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha256", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + return CryptoJS.HmacSHA256; + +})); +},{"./core":18,"./hmac":25,"./sha256":28}],25:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); + }()); + + +})); +},{"./core":18}],26:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + return CryptoJS.MD5; + +})); +},{"./core":18}],27:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } + + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); + + + return CryptoJS.SHA1; + +})); +},{"./core":18}],28:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + return CryptoJS.SHA256; + +})); +},{"./core":18}],29:[function(require,module,exports){ +require=(function(e,t,n,r){function i(r){if(!n[r]){if(!t[r]){if(e)return e(r);throw new Error("Cannot find module '"+r+"'")}var s=n[r]={exports:{}};t[r][0](function(e){var n=t[r][1][e];return i(n?n:e)},s,s.exports)}return n[r].exports}for(var s=0;s= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (expected instanceof RegExp) { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail('Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail('Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +},{"util":2,"buffer":3}],2:[function(require,module,exports){ +var events = require('events'); + +exports.isArray = isArray; +exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'}; +exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'}; + + +exports.print = function () {}; +exports.puts = function () {}; +exports.debug = function() {}; + +exports.inspect = function(obj, showHidden, depth, colors) { + var seen = []; + + var stylize = function(str, styleType) { + // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics + var styles = + { 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] }; + + var style = + { 'special': 'cyan', + 'number': 'blue', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' }[styleType]; + + if (style) { + return '\033[' + styles[style][0] + 'm' + str + + '\033[' + styles[style][1] + 'm'; + } else { + return str; + } + }; + if (! colors) { + stylize = function(str, styleType) { return str; }; + } + + function format(value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (value && typeof value.inspect === 'function' && + // Filter out the util module, it's inspect function is special + value !== exports && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + return value.inspect(recurseTimes); + } + + // Primitive types cannot have properties + switch (typeof value) { + case 'undefined': + return stylize('undefined', 'undefined'); + + case 'string': + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return stylize(simple, 'string'); + + case 'number': + return stylize('' + value, 'number'); + + case 'boolean': + return stylize('' + value, 'boolean'); + } + // For some reason typeof null is "object", so special case here. + if (value === null) { + return stylize('null', 'null'); + } + + // Look up the keys of the object. + var visible_keys = Object_keys(value); + var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys; + + // Functions without properties can be shortcutted. + if (typeof value === 'function' && keys.length === 0) { + if (isRegExp(value)) { + return stylize('' + value, 'regexp'); + } else { + var name = value.name ? ': ' + value.name : ''; + return stylize('[Function' + name + ']', 'special'); + } + } + + // Dates without properties can be shortcutted + if (isDate(value) && keys.length === 0) { + return stylize(value.toUTCString(), 'date'); + } + + var base, type, braces; + // Determine the object type + if (isArray(value)) { + type = 'Array'; + braces = ['[', ']']; + } else { + type = 'Object'; + braces = ['{', '}']; + } + + // Make functions say that they are functions + if (typeof value === 'function') { + var n = value.name ? ': ' + value.name : ''; + base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']'; + } else { + base = ''; + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + value.toUTCString(); + } + + if (keys.length === 0) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return stylize('' + value, 'regexp'); + } else { + return stylize('[Object]', 'special'); + } + } + + seen.push(value); + + var output = keys.map(function(key) { + var name, str; + if (value.__lookupGetter__) { + if (value.__lookupGetter__(key)) { + if (value.__lookupSetter__(key)) { + str = stylize('[Getter/Setter]', 'special'); + } else { + str = stylize('[Getter]', 'special'); + } + } else { + if (value.__lookupSetter__(key)) { + str = stylize('[Setter]', 'special'); + } + } + } + if (visible_keys.indexOf(key) < 0) { + name = '[' + key + ']'; + } + if (!str) { + if (seen.indexOf(value[key]) < 0) { + if (recurseTimes === null) { + str = format(value[key]); + } else { + str = format(value[key], recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (isArray(value)) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = stylize('[Circular]', 'special'); + } + } + if (typeof name === 'undefined') { + if (type === 'Array' && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = stylize(name, 'string'); + } + } + + return name + ': ' + str; + }); + + seen.pop(); + + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.length + 1; + }, 0); + + if (length > 50) { + output = braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + + } else { + output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; + } + + return output; + } + return format(obj, (typeof depth === 'undefined' ? 2 : depth)); +}; + + +function isArray(ar) { + return ar instanceof Array || + Array.isArray(ar) || + (ar && ar !== Object.prototype && isArray(ar.__proto__)); +} + + +function isRegExp(re) { + return re instanceof RegExp || + (typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]'); +} + + +function isDate(d) { + if (d instanceof Date) return true; + if (typeof d !== 'object') return false; + var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype); + var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__); + return JSON.stringify(proto) === JSON.stringify(properties); +} + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + +exports.log = function (msg) {}; + +exports.pump = null; + +var Object_keys = Object.keys || function (obj) { + var res = []; + for (var key in obj) res.push(key); + return res; +}; + +var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) { + var res = []; + for (var key in obj) { + if (Object.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +var Object_create = Object.create || function (prototype, properties) { + // from es5-shim + var object; + if (prototype === null) { + object = { '__proto__' : null }; + } + else { + if (typeof prototype !== 'object') { + throw new TypeError( + 'typeof prototype[' + (typeof prototype) + '] != \'object\'' + ); + } + var Type = function () {}; + Type.prototype = prototype; + object = new Type(); + object.__proto__ = prototype; + } + if (typeof properties !== 'undefined' && Object.defineProperties) { + Object.defineProperties(object, properties); + } + return object; +}; + +exports.inherits = function(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object_create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); +}; + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (typeof f !== 'string') { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(exports.inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': return JSON.stringify(args[i++]); + default: + return x; + } + }); + for(var x = args[i]; i < len; x = args[++i]){ + if (x === null || typeof x !== 'object') { + str += ' ' + x; + } else { + str += ' ' + exports.inspect(x); + } + } + return str; +}; + +},{"events":4}],5:[function(require,module,exports){ +exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isBE ? 0 : (nBytes - 1), + d = isBE ? 1 : -1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isBE ? (nBytes - 1) : 0, + d = isBE ? -1 : 1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],6:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; + +process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' + && window.setImmediate; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) }; + } + + if (canPost) { + var queue = []; + window.addEventListener('message', function (ev) { + if (ev.source === window && ev.data === 'process-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; + } + + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}],4:[function(require,module,exports){ +(function(process){if (!process.EventEmitter) process.EventEmitter = function () {}; + +var EventEmitter = exports.EventEmitter = process.EventEmitter; +var isArray = typeof Array.isArray === 'function' + ? Array.isArray + : function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]' + } +; +function indexOf (xs, x) { + if (xs.indexOf) return xs.indexOf(x); + for (var i = 0; i < xs.length; i++) { + if (x === xs[i]) return i; + } + return -1; +} + +// By default EventEmitters will print a warning if more than +// 10 listeners are added to it. This is a useful default which +// helps finding memory leaks. +// +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +var defaultMaxListeners = 10; +EventEmitter.prototype.setMaxListeners = function(n) { + if (!this._events) this._events = {}; + this._events.maxListeners = n; +}; + + +EventEmitter.prototype.emit = function(type) { + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events || !this._events.error || + (isArray(this._events.error) && !this._events.error.length)) + { + if (arguments[1] instanceof Error) { + throw arguments[1]; // Unhandled 'error' event + } else { + throw new Error("Uncaught, unspecified 'error' event."); + } + return false; + } + } + + if (!this._events) return false; + var handler = this._events[type]; + if (!handler) return false; + + if (typeof handler == 'function') { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + var args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + return true; + + } else if (isArray(handler)) { + var args = Array.prototype.slice.call(arguments, 1); + + var listeners = handler.slice(); + for (var i = 0, l = listeners.length; i < l; i++) { + listeners[i].apply(this, args); + } + return true; + + } else { + return false; + } +}; + +// EventEmitter is defined in src/node_events.cc +// EventEmitter.prototype.emit() is also defined there. +EventEmitter.prototype.addListener = function(type, listener) { + if ('function' !== typeof listener) { + throw new Error('addListener only takes instances of Function'); + } + + if (!this._events) this._events = {}; + + // To avoid recursion in the case that type == "newListeners"! Before + // adding it to the listeners, first emit "newListeners". + this.emit('newListener', type, listener); + + if (!this._events[type]) { + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + } else if (isArray(this._events[type])) { + + // Check for listener leak + if (!this._events[type].warned) { + var m; + if (this._events.maxListeners !== undefined) { + m = this._events.maxListeners; + } else { + m = defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + console.trace(); + } + } + + // If we've already got an array, just append. + this._events[type].push(listener); + } else { + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + var self = this; + self.on(type, function g() { + self.removeListener(type, g); + listener.apply(this, arguments); + }); + + return this; +}; + +EventEmitter.prototype.removeListener = function(type, listener) { + if ('function' !== typeof listener) { + throw new Error('removeListener only takes instances of Function'); + } + + // does not use listeners(), so no side effect of creating _events[type] + if (!this._events || !this._events[type]) return this; + + var list = this._events[type]; + + if (isArray(list)) { + var i = indexOf(list, listener); + if (i < 0) return this; + list.splice(i, 1); + if (list.length == 0) + delete this._events[type]; + } else if (this._events[type] === listener) { + delete this._events[type]; + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + if (arguments.length === 0) { + this._events = {}; + return this; + } + + // does not use listeners(), so no side effect of creating _events[type] + if (type && this._events && this._events[type]) this._events[type] = null; + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + if (!this._events) this._events = {}; + if (!this._events[type]) this._events[type] = []; + if (!isArray(this._events[type])) { + this._events[type] = [this._events[type]]; + } + return this._events[type]; +}; + +})(require("__browserify_process")) +},{"__browserify_process":6}],"buffer-browserify":[function(require,module,exports){ +module.exports=require('q9TxCC'); +},{}],"q9TxCC":[function(require,module,exports){ +function SlowBuffer (size) { + this.length = size; +}; + +var assert = require('assert'); + +exports.INSPECT_MAX_BYTES = 50; + + +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} + +function utf8ToBytes(str) { + var byteArray = []; + for (var i = 0; i < str.length; i++) + if (str.charCodeAt(i) <= 0x7F) + byteArray.push(str.charCodeAt(i)); + else { + var h = encodeURIComponent(str.charAt(i)).substr(1).split('%'); + for (var j = 0; j < h.length; j++) + byteArray.push(parseInt(h[j], 16)); + } + + return byteArray; +} + +function asciiToBytes(str) { + var byteArray = [] + for (var i = 0; i < str.length; i++ ) + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push( str.charCodeAt(i) & 0xFF ); + + return byteArray; +} + +function base64ToBytes(str) { + return require("base64-js").toByteArray(str); +} + +SlowBuffer.byteLength = function (str, encoding) { + switch (encoding || "utf8") { + case 'hex': + return str.length / 2; + + case 'utf8': + case 'utf-8': + return utf8ToBytes(str).length; + + case 'ascii': + case 'binary': + return str.length; + + case 'base64': + return base64ToBytes(str).length; + + default: + throw new Error('Unknown encoding'); + } +}; + +function blitBuffer(src, dst, offset, length) { + var pos, i = 0; + while (i < length) { + if ((i+offset >= dst.length) || (i >= src.length)) + break; + + dst[i + offset] = src[i]; + i++; + } + return i; +} + +SlowBuffer.prototype.utf8Write = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.asciiWrite = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.binaryWrite = SlowBuffer.prototype.asciiWrite; + +SlowBuffer.prototype.base64Write = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.base64Slice = function (start, end) { + var bytes = Array.prototype.slice.apply(this, arguments) + return require("base64-js").fromByteArray(bytes); +} + +function decodeUtf8Char(str) { + try { + return decodeURIComponent(str); + } catch (err) { + return String.fromCharCode(0xFFFD); // UTF 8 invalid char + } +} + +SlowBuffer.prototype.utf8Slice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var res = ""; + var tmp = ""; + var i = 0; + while (i < bytes.length) { + if (bytes[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]); + tmp = ""; + } else + tmp += "%" + bytes[i].toString(16); + + i++; + } + + return res + decodeUtf8Char(tmp); +} + +SlowBuffer.prototype.asciiSlice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var ret = ""; + for (var i = 0; i < bytes.length; i++) + ret += String.fromCharCode(bytes[i]); + return ret; +} + +SlowBuffer.prototype.binarySlice = SlowBuffer.prototype.asciiSlice; + +SlowBuffer.prototype.inspect = function() { + var out = [], + len = this.length; + for (var i = 0; i < len; i++) { + out[i] = toHex(this[i]); + if (i == exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...'; + break; + } + } + return ''; +}; + + +SlowBuffer.prototype.hexSlice = function(start, end) { + var len = this.length; + + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + + var out = ''; + for (var i = start; i < end; i++) { + out += toHex(this[i]); + } + return out; +}; + + +SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + start = +start || 0; + if (typeof end == 'undefined') end = this.length; + + // Fastpath empty strings + if (+end == start) { + return ''; + } + + switch (encoding) { + case 'hex': + return this.hexSlice(start, end); + + case 'utf8': + case 'utf-8': + return this.utf8Slice(start, end); + + case 'ascii': + return this.asciiSlice(start, end); + + case 'binary': + return this.binarySlice(start, end); + + case 'base64': + return this.base64Slice(start, end); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Slice(start, end); + + default: + throw new Error('Unknown encoding'); + } +}; + + +SlowBuffer.prototype.hexWrite = function(string, offset, length) { + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + // must be an even number of digits + var strLen = string.length; + if (strLen % 2) { + throw new Error('Invalid hex string'); + } + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; i++) { + var byte = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(byte)) throw new Error('Invalid hex string'); + this[offset + i] = byte; + } + SlowBuffer._charsWritten = i * 2; + return i; +}; + + +SlowBuffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + switch (encoding) { + case 'hex': + return this.hexWrite(string, offset, length); + + case 'utf8': + case 'utf-8': + return this.utf8Write(string, offset, length); + + case 'ascii': + return this.asciiWrite(string, offset, length); + + case 'binary': + return this.binaryWrite(string, offset, length); + + case 'base64': + return this.base64Write(string, offset, length); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Write(string, offset, length); + + default: + throw new Error('Unknown encoding'); + } +}; + + +// slice(start, end) +SlowBuffer.prototype.slice = function(start, end) { + if (end === undefined) end = this.length; + + if (end > this.length) { + throw new Error('oob'); + } + if (start > end) { + throw new Error('oob'); + } + + return new Buffer(this, end - start, +start); +}; + +SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) { + var temp = []; + for (var i=sourcestart; i this.length) { + throw new Error('oob'); + } + if (start > end) { + throw new Error('oob'); + } + + for (var i = start; i < end; i++) { + this[i] = value; + } +} + +function coerce(length) { + // Coerce length to a number (possibly NaN), round up + // in case it's fractional (e.g. 123.456) then do a + // double negate to coerce a NaN to 0. Easy, right? + length = ~~Math.ceil(+length); + return length < 0 ? 0 : length; +} + + +// Buffer + +function Buffer(subject, encoding, offset) { + if (!(this instanceof Buffer)) { + return new Buffer(subject, encoding, offset); + } + + var type; + + // Are we slicing? + if (typeof offset === 'number') { + this.length = coerce(encoding); + this.parent = subject; + this.offset = offset; + } else { + // Find the length + switch (type = typeof subject) { + case 'number': + this.length = coerce(subject); + break; + + case 'string': + this.length = Buffer.byteLength(subject, encoding); + break; + + case 'object': // Assume object is an array + this.length = coerce(subject.length); + break; + + default: + throw new Error('First argument needs to be a number, ' + + 'array or string.'); + } + + if (this.length > Buffer.poolSize) { + // Big buffer, just alloc one. + this.parent = new SlowBuffer(this.length); + this.offset = 0; + + } else { + // Small buffer. + if (!pool || pool.length - pool.used < this.length) allocPool(); + this.parent = pool; + this.offset = pool.used; + pool.used += this.length; + } + + // Treat array-ish objects as a byte array. + if (isArrayIsh(subject)) { + for (var i = 0; i < this.length; i++) { + if (subject instanceof Buffer) { + this.parent[i + this.offset] = subject.readUInt8(i); + } + else { + this.parent[i + this.offset] = subject[i]; + } + } + } else if (type == 'string') { + // We are a string + this.length = this.write(subject, 0, encoding); + } + } + +} + +function isArrayIsh(subject) { + return Array.isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number'; +} + +exports.SlowBuffer = SlowBuffer; +exports.Buffer = Buffer; + +Buffer.poolSize = 8 * 1024; +var pool; + +function allocPool() { + pool = new SlowBuffer(Buffer.poolSize); + pool.used = 0; +} + + +// Static methods +Buffer.isBuffer = function isBuffer(b) { + return b instanceof Buffer || b instanceof SlowBuffer; +}; + +Buffer.concat = function (list, totalLength) { + if (!Array.isArray(list)) { + throw new Error("Usage: Buffer.concat(list, [totalLength])\n \ + list should be an Array."); + } + + if (list.length === 0) { + return new Buffer(0); + } else if (list.length === 1) { + return list[0]; + } + + if (typeof totalLength !== 'number') { + totalLength = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + totalLength += buf.length; + } + } + + var buffer = new Buffer(totalLength); + var pos = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; +}; + +// Inspect +Buffer.prototype.inspect = function inspect() { + var out = [], + len = this.length; + + for (var i = 0; i < len; i++) { + out[i] = toHex(this.parent[i + this.offset]); + if (i == exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...'; + break; + } + } + + return ''; +}; + + +Buffer.prototype.get = function get(i) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this.parent[this.offset + i]; +}; + + +Buffer.prototype.set = function set(i, v) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this.parent[this.offset + i] = v; +}; + + +// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8') +Buffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + var ret; + switch (encoding) { + case 'hex': + ret = this.parent.hexWrite(string, this.offset + offset, length); + break; + + case 'utf8': + case 'utf-8': + ret = this.parent.utf8Write(string, this.offset + offset, length); + break; + + case 'ascii': + ret = this.parent.asciiWrite(string, this.offset + offset, length); + break; + + case 'binary': + ret = this.parent.binaryWrite(string, this.offset + offset, length); + break; + + case 'base64': + // Warning: maxLength not taken into account in base64Write + ret = this.parent.base64Write(string, this.offset + offset, length); + break; + + case 'ucs2': + case 'ucs-2': + ret = this.parent.ucs2Write(string, this.offset + offset, length); + break; + + default: + throw new Error('Unknown encoding'); + } + + Buffer._charsWritten = SlowBuffer._charsWritten; + + return ret; +}; + + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + if (typeof start == 'undefined' || start < 0) { + start = 0; + } else if (start > this.length) { + start = this.length; + } + + if (typeof end == 'undefined' || end > this.length) { + end = this.length; + } else if (end < 0) { + end = 0; + } + + start = start + this.offset; + end = end + this.offset; + + switch (encoding) { + case 'hex': + return this.parent.hexSlice(start, end); + + case 'utf8': + case 'utf-8': + return this.parent.utf8Slice(start, end); + + case 'ascii': + return this.parent.asciiSlice(start, end); + + case 'binary': + return this.parent.binarySlice(start, end); + + case 'base64': + return this.parent.base64Slice(start, end); + + case 'ucs2': + case 'ucs-2': + return this.parent.ucs2Slice(start, end); + + default: + throw new Error('Unknown encoding'); + } +}; + + +// byteLength +Buffer.byteLength = SlowBuffer.byteLength; + + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill(value, start, end) { + value || (value = 0); + start || (start = 0); + end || (end = this.length); + + if (typeof value === 'string') { + value = value.charCodeAt(0); + } + if (!(typeof value === 'number') || isNaN(value)) { + throw new Error('value is not a number'); + } + + if (end < start) throw new Error('end < start'); + + // Fill 0 bytes; we're done + if (end === start) return 0; + if (this.length == 0) return 0; + + if (start < 0 || start >= this.length) { + throw new Error('start out of bounds'); + } + + if (end < 0 || end > this.length) { + throw new Error('end out of bounds'); + } + + return this.parent.fill(value, + start + this.offset, + end + this.offset); +}; + + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function(target, target_start, start, end) { + var source = this; + start || (start = 0); + end || (end = this.length); + target_start || (target_start = 0); + + if (end < start) throw new Error('sourceEnd < sourceStart'); + + // Copy 0 bytes; we're done + if (end === start) return 0; + if (target.length == 0 || source.length == 0) return 0; + + if (target_start < 0 || target_start >= target.length) { + throw new Error('targetStart out of bounds'); + } + + if (start < 0 || start >= source.length) { + throw new Error('sourceStart out of bounds'); + } + + if (end < 0 || end > source.length) { + throw new Error('sourceEnd out of bounds'); + } + + // Are we oob? + if (end > this.length) { + end = this.length; + } + + if (target.length - target_start < end - start) { + end = target.length - target_start + start; + } + + return this.parent.copy(target.parent, + target_start + target.offset, + start + this.offset, + end + this.offset); +}; + + +// slice(start, end) +Buffer.prototype.slice = function(start, end) { + if (end === undefined) end = this.length; + if (end > this.length) throw new Error('oob'); + if (start > end) throw new Error('oob'); + + return new Buffer(this.parent, end - start, +start + this.offset); +}; + + +// Legacy methods for backwards compatibility. + +Buffer.prototype.utf8Slice = function(start, end) { + return this.toString('utf8', start, end); +}; + +Buffer.prototype.binarySlice = function(start, end) { + return this.toString('binary', start, end); +}; + +Buffer.prototype.asciiSlice = function(start, end) { + return this.toString('ascii', start, end); +}; + +Buffer.prototype.utf8Write = function(string, offset) { + return this.write(string, offset, 'utf8'); +}; + +Buffer.prototype.binaryWrite = function(string, offset) { + return this.write(string, offset, 'binary'); +}; + +Buffer.prototype.asciiWrite = function(string, offset) { + return this.write(string, offset, 'ascii'); +}; + +Buffer.prototype.readUInt8 = function(offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return; + + return buffer.parent[buffer.offset + offset]; +}; + +function readUInt16(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return 0; + + if (isBigEndian) { + val = buffer.parent[buffer.offset + offset] << 8; + if (offset + 1 < buffer.length) { + val |= buffer.parent[buffer.offset + offset + 1]; + } + } else { + val = buffer.parent[buffer.offset + offset]; + if (offset + 1 < buffer.length) { + val |= buffer.parent[buffer.offset + offset + 1] << 8; + } + } + + return val; +} + +Buffer.prototype.readUInt16LE = function(offset, noAssert) { + return readUInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt16BE = function(offset, noAssert) { + return readUInt16(this, offset, true, noAssert); +}; + +function readUInt32(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return 0; + + if (isBigEndian) { + if (offset + 1 < buffer.length) + val = buffer.parent[buffer.offset + offset + 1] << 16; + if (offset + 2 < buffer.length) + val |= buffer.parent[buffer.offset + offset + 2] << 8; + if (offset + 3 < buffer.length) + val |= buffer.parent[buffer.offset + offset + 3]; + val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0); + } else { + if (offset + 2 < buffer.length) + val = buffer.parent[buffer.offset + offset + 2] << 16; + if (offset + 1 < buffer.length) + val |= buffer.parent[buffer.offset + offset + 1] << 8; + val |= buffer.parent[buffer.offset + offset]; + if (offset + 3 < buffer.length) + val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0); + } + + return val; +} + +Buffer.prototype.readUInt32LE = function(offset, noAssert) { + return readUInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt32BE = function(offset, noAssert) { + return readUInt32(this, offset, true, noAssert); +}; + + +/* + * Signed integer types, yay team! A reminder on how two's complement actually + * works. The first bit is the signed bit, i.e. tells us whether or not the + * number should be positive or negative. If the two's complement value is + * positive, then we're done, as it's equivalent to the unsigned representation. + * + * Now if the number is positive, you're pretty much done, you can just leverage + * the unsigned translations and return those. Unfortunately, negative numbers + * aren't quite that straightforward. + * + * At first glance, one might be inclined to use the traditional formula to + * translate binary numbers between the positive and negative values in two's + * complement. (Though it doesn't quite work for the most negative value) + * Mainly: + * - invert all the bits + * - add one to the result + * + * Of course, this doesn't quite work in Javascript. Take for example the value + * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of + * course, Javascript will do the following: + * + * > ~0xff80 + * -65409 + * + * Whoh there, Javascript, that's not quite right. But wait, according to + * Javascript that's perfectly correct. When Javascript ends up seeing the + * constant 0xff80, it has no notion that it is actually a signed number. It + * assumes that we've input the unsigned value 0xff80. Thus, when it does the + * binary negation, it casts it into a signed value, (positive 0xff80). Then + * when you perform binary negation on that, it turns it into a negative number. + * + * Instead, we're going to have to use the following general formula, that works + * in a rather Javascript friendly way. I'm glad we don't support this kind of + * weird numbering scheme in the kernel. + * + * (BIT-MAX - (unsigned)val + 1) * -1 + * + * The astute observer, may think that this doesn't make sense for 8-bit numbers + * (really it isn't necessary for them). However, when you get 16-bit numbers, + * you do. Let's go back to our prior example and see how this will look: + * + * (0xffff - 0xff80 + 1) * -1 + * (0x007f + 1) * -1 + * (0x0080) * -1 + */ +Buffer.prototype.readInt8 = function(offset, noAssert) { + var buffer = this; + var neg; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (offset >= buffer.length) return; + + neg = buffer.parent[buffer.offset + offset] & 0x80; + if (!neg) { + return (buffer.parent[buffer.offset + offset]); + } + + return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1); +}; + +function readInt16(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt16(buffer, offset, isBigEndian, noAssert); + neg = val & 0x8000; + if (!neg) { + return val; + } + + return (0xffff - val + 1) * -1; +} + +Buffer.prototype.readInt16LE = function(offset, noAssert) { + return readInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt16BE = function(offset, noAssert) { + return readInt16(this, offset, true, noAssert); +}; + +function readInt32(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt32(buffer, offset, isBigEndian, noAssert); + neg = val & 0x80000000; + if (!neg) { + return (val); + } + + return (0xffffffff - val + 1) * -1; +} + +Buffer.prototype.readInt32LE = function(offset, noAssert) { + return readInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt32BE = function(offset, noAssert) { + return readInt32(this, offset, true, noAssert); +}; + +function readFloat(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.readFloatLE = function(offset, noAssert) { + return readFloat(this, offset, false, noAssert); +}; + +Buffer.prototype.readFloatBE = function(offset, noAssert) { + return readFloat(this, offset, true, noAssert); +}; + +function readDouble(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.readDoubleLE = function(offset, noAssert) { + return readDouble(this, offset, false, noAssert); +}; + +Buffer.prototype.readDoubleBE = function(offset, noAssert) { + return readDouble(this, offset, true, noAssert); +}; + + +/* + * We have to make sure that the value is a valid integer. This means that it is + * non-negative. It has no fractional component and that it does not exceed the + * maximum allowed value. + * + * value The number to check for validity + * + * max The maximum value + */ +function verifuint(value, max) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value >= 0, + 'specified a negative value for writing an unsigned value'); + + assert.ok(value <= max, 'value is larger than maximum value for type'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +Buffer.prototype.writeUInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xff); + } + + if (offset < buffer.length) { + buffer.parent[buffer.offset + offset] = value; + } +}; + +function writeUInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffff); + } + + for (var i = 0; i < Math.min(buffer.length - offset, 2); i++) { + buffer.parent[buffer.offset + offset + i] = + (value & (0xff << (8 * (isBigEndian ? 1 - i : i)))) >>> + (isBigEndian ? 1 - i : i) * 8; + } + +} + +Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, true, noAssert); +}; + +function writeUInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffffffff); + } + + for (var i = 0; i < Math.min(buffer.length - offset, 4); i++) { + buffer.parent[buffer.offset + offset + i] = + (value >>> (isBigEndian ? 3 - i : i) * 8) & 0xff; + } +} + +Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, true, noAssert); +}; + + +/* + * We now move onto our friends in the signed number category. Unlike unsigned + * numbers, we're going to have to worry a bit more about how we put values into + * arrays. Since we are only worrying about signed 32-bit values, we're in + * slightly better shape. Unfortunately, we really can't do our favorite binary + * & in this system. It really seems to do the wrong thing. For example: + * + * > -32 & 0xff + * 224 + * + * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of + * this aren't treated as a signed number. Ultimately a bad thing. + * + * What we're going to want to do is basically create the unsigned equivalent of + * our representation and pass that off to the wuint* functions. To do that + * we're going to do the following: + * + * - if the value is positive + * we can pass it directly off to the equivalent wuint + * - if the value is negative + * we do the following computation: + * mb + val + 1, where + * mb is the maximum unsigned value in that byte size + * val is the Javascript negative integer + * + * + * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If + * you do out the computations: + * + * 0xffff - 128 + 1 + * 0xffff - 127 + * 0xff80 + * + * You can then encode this value as the signed version. This is really rather + * hacky, but it should work and get the job done which is our goal here. + */ + +/* + * A series of checks to make sure we actually have a signed 32-bit number + */ +function verifsint(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +function verifIEEE754(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); +} + +Buffer.prototype.writeInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7f, -0x80); + } + + if (value >= 0) { + buffer.writeUInt8(value, offset, noAssert); + } else { + buffer.writeUInt8(0xff + value + 1, offset, noAssert); + } +}; + +function writeInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fff, -0x8000); + } + + if (value >= 0) { + writeUInt16(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt16LE = function(value, offset, noAssert) { + writeInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt16BE = function(value, offset, noAssert) { + writeInt16(this, value, offset, true, noAssert); +}; + +function writeInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fffffff, -0x80000000); + } + + if (value >= 0) { + writeUInt32(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt32LE = function(value, offset, noAssert) { + writeInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt32BE = function(value, offset, noAssert) { + writeInt32(this, value, offset, true, noAssert); +}; + +function writeFloat(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.writeFloatLE = function(value, offset, noAssert) { + writeFloat(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeFloatBE = function(value, offset, noAssert) { + writeFloat(this, value, offset, true, noAssert); +}; + +function writeDouble(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) { + writeDouble(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) { + writeDouble(this, value, offset, true, noAssert); +}; + +SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8; +SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE; +SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE; +SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE; +SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE; +SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8; +SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE; +SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE; +SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE; +SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE; +SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE; +SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE; +SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE; +SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE; +SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8; +SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE; +SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE; +SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE; +SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE; +SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8; +SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE; +SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE; +SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE; +SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE; +SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE; +SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE; +SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE; +SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE; + +},{"assert":1,"./buffer_ieee754":5,"base64-js":7}],7:[function(require,module,exports){ +(function (exports) { + 'use strict'; + + var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + function b64ToByteArray(b64) { + var i, j, l, tmp, placeHolders, arr; + + if (b64.length % 4 > 0) { + throw 'Invalid string. Length must be a multiple of 4'; + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + placeHolders = b64.indexOf('='); + placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0; + + // base64 is 4/3 + up to two characters of the original data + arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders); + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]); + arr.push((tmp & 0xFF0000) >> 16); + arr.push((tmp & 0xFF00) >> 8); + arr.push(tmp & 0xFF); + } + + if (placeHolders === 2) { + tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4); + arr.push(tmp & 0xFF); + } else if (placeHolders === 1) { + tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2); + arr.push((tmp >> 8) & 0xFF); + arr.push(tmp & 0xFF); + } + + return arr; + } + + function uint8ToBase64(uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length; + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; + }; + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]); + output += tripletToBase64(temp); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1]; + output += lookup[temp >> 2]; + output += lookup[(temp << 4) & 0x3F]; + output += '=='; + break; + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]); + output += lookup[temp >> 10]; + output += lookup[(temp >> 4) & 0x3F]; + output += lookup[(temp << 2) & 0x3F]; + output += '='; + break; + } + + return output; + } + + module.exports.toByteArray = b64ToByteArray; + module.exports.fromByteArray = uint8ToBase64; +}()); + +},{}],8:[function(require,module,exports){ +exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isBE ? 0 : (nBytes - 1), + d = isBE ? 1 : -1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isBE ? (nBytes - 1) : 0, + d = isBE ? -1 : 1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],3:[function(require,module,exports){ +function SlowBuffer (size) { + this.length = size; +}; + +var assert = require('assert'); + +exports.INSPECT_MAX_BYTES = 50; + + +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} + +function utf8ToBytes(str) { + var byteArray = []; + for (var i = 0; i < str.length; i++) + if (str.charCodeAt(i) <= 0x7F) + byteArray.push(str.charCodeAt(i)); + else { + var h = encodeURIComponent(str.charAt(i)).substr(1).split('%'); + for (var j = 0; j < h.length; j++) + byteArray.push(parseInt(h[j], 16)); + } + + return byteArray; +} + +function asciiToBytes(str) { + var byteArray = [] + for (var i = 0; i < str.length; i++ ) + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push( str.charCodeAt(i) & 0xFF ); + + return byteArray; +} + +function base64ToBytes(str) { + return require("base64-js").toByteArray(str); +} + +SlowBuffer.byteLength = function (str, encoding) { + switch (encoding || "utf8") { + case 'hex': + return str.length / 2; + + case 'utf8': + case 'utf-8': + return utf8ToBytes(str).length; + + case 'ascii': + return str.length; + + case 'base64': + return base64ToBytes(str).length; + + default: + throw new Error('Unknown encoding'); + } +}; + +function blitBuffer(src, dst, offset, length) { + var pos, i = 0; + while (i < length) { + if ((i+offset >= dst.length) || (i >= src.length)) + break; + + dst[i + offset] = src[i]; + i++; + } + return i; +} + +SlowBuffer.prototype.utf8Write = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.asciiWrite = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.base64Write = function (string, offset, length) { + var bytes, pos; + return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length); +}; + +SlowBuffer.prototype.base64Slice = function (start, end) { + var bytes = Array.prototype.slice.apply(this, arguments) + return require("base64-js").fromByteArray(bytes); +} + +function decodeUtf8Char(str) { + try { + return decodeURIComponent(str); + } catch (err) { + return String.fromCharCode(0xFFFD); // UTF 8 invalid char + } +} + +SlowBuffer.prototype.utf8Slice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var res = ""; + var tmp = ""; + var i = 0; + while (i < bytes.length) { + if (bytes[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]); + tmp = ""; + } else + tmp += "%" + bytes[i].toString(16); + + i++; + } + + return res + decodeUtf8Char(tmp); +} + +SlowBuffer.prototype.asciiSlice = function () { + var bytes = Array.prototype.slice.apply(this, arguments); + var ret = ""; + for (var i = 0; i < bytes.length; i++) + ret += String.fromCharCode(bytes[i]); + return ret; +} + +SlowBuffer.prototype.inspect = function() { + var out = [], + len = this.length; + for (var i = 0; i < len; i++) { + out[i] = toHex(this[i]); + if (i == exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...'; + break; + } + } + return ''; +}; + + +SlowBuffer.prototype.hexSlice = function(start, end) { + var len = this.length; + + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + + var out = ''; + for (var i = start; i < end; i++) { + out += toHex(this[i]); + } + return out; +}; + + +SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + start = +start || 0; + if (typeof end == 'undefined') end = this.length; + + // Fastpath empty strings + if (+end == start) { + return ''; + } + + switch (encoding) { + case 'hex': + return this.hexSlice(start, end); + + case 'utf8': + case 'utf-8': + return this.utf8Slice(start, end); + + case 'ascii': + return this.asciiSlice(start, end); + + case 'binary': + return this.binarySlice(start, end); + + case 'base64': + return this.base64Slice(start, end); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Slice(start, end); + + default: + throw new Error('Unknown encoding'); + } +}; + + +SlowBuffer.prototype.hexWrite = function(string, offset, length) { + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + + // must be an even number of digits + var strLen = string.length; + if (strLen % 2) { + throw new Error('Invalid hex string'); + } + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; i++) { + var byte = parseInt(string.substr(i * 2, 2), 16); + if (isNaN(byte)) throw new Error('Invalid hex string'); + this[offset + i] = byte; + } + SlowBuffer._charsWritten = i * 2; + return i; +}; + + +SlowBuffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + switch (encoding) { + case 'hex': + return this.hexWrite(string, offset, length); + + case 'utf8': + case 'utf-8': + return this.utf8Write(string, offset, length); + + case 'ascii': + return this.asciiWrite(string, offset, length); + + case 'binary': + return this.binaryWrite(string, offset, length); + + case 'base64': + return this.base64Write(string, offset, length); + + case 'ucs2': + case 'ucs-2': + return this.ucs2Write(string, offset, length); + + default: + throw new Error('Unknown encoding'); + } +}; + + +// slice(start, end) +SlowBuffer.prototype.slice = function(start, end) { + if (end === undefined) end = this.length; + + if (end > this.length) { + throw new Error('oob'); + } + if (start > end) { + throw new Error('oob'); + } + + return new Buffer(this, end - start, +start); +}; + +SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) { + var temp = []; + for (var i=sourcestart; i Buffer.poolSize) { + // Big buffer, just alloc one. + this.parent = new SlowBuffer(this.length); + this.offset = 0; + + } else { + // Small buffer. + if (!pool || pool.length - pool.used < this.length) allocPool(); + this.parent = pool; + this.offset = pool.used; + pool.used += this.length; + } + + // Treat array-ish objects as a byte array. + if (isArrayIsh(subject)) { + for (var i = 0; i < this.length; i++) { + this.parent[i + this.offset] = subject[i]; + } + } else if (type == 'string') { + // We are a string + this.length = this.write(subject, 0, encoding); + } + } + +} + +function isArrayIsh(subject) { + return Array.isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number'; +} + +exports.SlowBuffer = SlowBuffer; +exports.Buffer = Buffer; + +Buffer.poolSize = 8 * 1024; +var pool; + +function allocPool() { + pool = new SlowBuffer(Buffer.poolSize); + pool.used = 0; +} + + +// Static methods +Buffer.isBuffer = function isBuffer(b) { + return b instanceof Buffer || b instanceof SlowBuffer; +}; + +Buffer.concat = function (list, totalLength) { + if (!Array.isArray(list)) { + throw new Error("Usage: Buffer.concat(list, [totalLength])\n \ + list should be an Array."); + } + + if (list.length === 0) { + return new Buffer(0); + } else if (list.length === 1) { + return list[0]; + } + + if (typeof totalLength !== 'number') { + totalLength = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + totalLength += buf.length; + } + } + + var buffer = new Buffer(totalLength); + var pos = 0; + for (var i = 0; i < list.length; i++) { + var buf = list[i]; + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; +}; + +// Inspect +Buffer.prototype.inspect = function inspect() { + var out = [], + len = this.length; + + for (var i = 0; i < len; i++) { + out[i] = toHex(this.parent[i + this.offset]); + if (i == exports.INSPECT_MAX_BYTES) { + out[i + 1] = '...'; + break; + } + } + + return ''; +}; + + +Buffer.prototype.get = function get(i) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this.parent[this.offset + i]; +}; + + +Buffer.prototype.set = function set(i, v) { + if (i < 0 || i >= this.length) throw new Error('oob'); + return this.parent[this.offset + i] = v; +}; + + +// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8') +Buffer.prototype.write = function(string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = undefined; + } + } else { // legacy + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || 'utf8').toLowerCase(); + + var ret; + switch (encoding) { + case 'hex': + ret = this.parent.hexWrite(string, this.offset + offset, length); + break; + + case 'utf8': + case 'utf-8': + ret = this.parent.utf8Write(string, this.offset + offset, length); + break; + + case 'ascii': + ret = this.parent.asciiWrite(string, this.offset + offset, length); + break; + + case 'binary': + ret = this.parent.binaryWrite(string, this.offset + offset, length); + break; + + case 'base64': + // Warning: maxLength not taken into account in base64Write + ret = this.parent.base64Write(string, this.offset + offset, length); + break; + + case 'ucs2': + case 'ucs-2': + ret = this.parent.ucs2Write(string, this.offset + offset, length); + break; + + default: + throw new Error('Unknown encoding'); + } + + Buffer._charsWritten = SlowBuffer._charsWritten; + + return ret; +}; + + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || 'utf8').toLowerCase(); + + if (typeof start == 'undefined' || start < 0) { + start = 0; + } else if (start > this.length) { + start = this.length; + } + + if (typeof end == 'undefined' || end > this.length) { + end = this.length; + } else if (end < 0) { + end = 0; + } + + start = start + this.offset; + end = end + this.offset; + + switch (encoding) { + case 'hex': + return this.parent.hexSlice(start, end); + + case 'utf8': + case 'utf-8': + return this.parent.utf8Slice(start, end); + + case 'ascii': + return this.parent.asciiSlice(start, end); + + case 'binary': + return this.parent.binarySlice(start, end); + + case 'base64': + return this.parent.base64Slice(start, end); + + case 'ucs2': + case 'ucs-2': + return this.parent.ucs2Slice(start, end); + + default: + throw new Error('Unknown encoding'); + } +}; + + +// byteLength +Buffer.byteLength = SlowBuffer.byteLength; + + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill(value, start, end) { + value || (value = 0); + start || (start = 0); + end || (end = this.length); + + if (typeof value === 'string') { + value = value.charCodeAt(0); + } + if (!(typeof value === 'number') || isNaN(value)) { + throw new Error('value is not a number'); + } + + if (end < start) throw new Error('end < start'); + + // Fill 0 bytes; we're done + if (end === start) return 0; + if (this.length == 0) return 0; + + if (start < 0 || start >= this.length) { + throw new Error('start out of bounds'); + } + + if (end < 0 || end > this.length) { + throw new Error('end out of bounds'); + } + + return this.parent.fill(value, + start + this.offset, + end + this.offset); +}; + + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function(target, target_start, start, end) { + var source = this; + start || (start = 0); + end || (end = this.length); + target_start || (target_start = 0); + + if (end < start) throw new Error('sourceEnd < sourceStart'); + + // Copy 0 bytes; we're done + if (end === start) return 0; + if (target.length == 0 || source.length == 0) return 0; + + if (target_start < 0 || target_start >= target.length) { + throw new Error('targetStart out of bounds'); + } + + if (start < 0 || start >= source.length) { + throw new Error('sourceStart out of bounds'); + } + + if (end < 0 || end > source.length) { + throw new Error('sourceEnd out of bounds'); + } + + // Are we oob? + if (end > this.length) { + end = this.length; + } + + if (target.length - target_start < end - start) { + end = target.length - target_start + start; + } + + return this.parent.copy(target.parent, + target_start + target.offset, + start + this.offset, + end + this.offset); +}; + + +// slice(start, end) +Buffer.prototype.slice = function(start, end) { + if (end === undefined) end = this.length; + if (end > this.length) throw new Error('oob'); + if (start > end) throw new Error('oob'); + + return new Buffer(this.parent, end - start, +start + this.offset); +}; + + +// Legacy methods for backwards compatibility. + +Buffer.prototype.utf8Slice = function(start, end) { + return this.toString('utf8', start, end); +}; + +Buffer.prototype.binarySlice = function(start, end) { + return this.toString('binary', start, end); +}; + +Buffer.prototype.asciiSlice = function(start, end) { + return this.toString('ascii', start, end); +}; + +Buffer.prototype.utf8Write = function(string, offset) { + return this.write(string, offset, 'utf8'); +}; + +Buffer.prototype.binaryWrite = function(string, offset) { + return this.write(string, offset, 'binary'); +}; + +Buffer.prototype.asciiWrite = function(string, offset) { + return this.write(string, offset, 'ascii'); +}; + +Buffer.prototype.readUInt8 = function(offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + return buffer.parent[buffer.offset + offset]; +}; + +function readUInt16(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (isBigEndian) { + val = buffer.parent[buffer.offset + offset] << 8; + val |= buffer.parent[buffer.offset + offset + 1]; + } else { + val = buffer.parent[buffer.offset + offset]; + val |= buffer.parent[buffer.offset + offset + 1] << 8; + } + + return val; +} + +Buffer.prototype.readUInt16LE = function(offset, noAssert) { + return readUInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt16BE = function(offset, noAssert) { + return readUInt16(this, offset, true, noAssert); +}; + +function readUInt32(buffer, offset, isBigEndian, noAssert) { + var val = 0; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + if (isBigEndian) { + val = buffer.parent[buffer.offset + offset + 1] << 16; + val |= buffer.parent[buffer.offset + offset + 2] << 8; + val |= buffer.parent[buffer.offset + offset + 3]; + val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0); + } else { + val = buffer.parent[buffer.offset + offset + 2] << 16; + val |= buffer.parent[buffer.offset + offset + 1] << 8; + val |= buffer.parent[buffer.offset + offset]; + val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0); + } + + return val; +} + +Buffer.prototype.readUInt32LE = function(offset, noAssert) { + return readUInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readUInt32BE = function(offset, noAssert) { + return readUInt32(this, offset, true, noAssert); +}; + + +/* + * Signed integer types, yay team! A reminder on how two's complement actually + * works. The first bit is the signed bit, i.e. tells us whether or not the + * number should be positive or negative. If the two's complement value is + * positive, then we're done, as it's equivalent to the unsigned representation. + * + * Now if the number is positive, you're pretty much done, you can just leverage + * the unsigned translations and return those. Unfortunately, negative numbers + * aren't quite that straightforward. + * + * At first glance, one might be inclined to use the traditional formula to + * translate binary numbers between the positive and negative values in two's + * complement. (Though it doesn't quite work for the most negative value) + * Mainly: + * - invert all the bits + * - add one to the result + * + * Of course, this doesn't quite work in Javascript. Take for example the value + * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of + * course, Javascript will do the following: + * + * > ~0xff80 + * -65409 + * + * Whoh there, Javascript, that's not quite right. But wait, according to + * Javascript that's perfectly correct. When Javascript ends up seeing the + * constant 0xff80, it has no notion that it is actually a signed number. It + * assumes that we've input the unsigned value 0xff80. Thus, when it does the + * binary negation, it casts it into a signed value, (positive 0xff80). Then + * when you perform binary negation on that, it turns it into a negative number. + * + * Instead, we're going to have to use the following general formula, that works + * in a rather Javascript friendly way. I'm glad we don't support this kind of + * weird numbering scheme in the kernel. + * + * (BIT-MAX - (unsigned)val + 1) * -1 + * + * The astute observer, may think that this doesn't make sense for 8-bit numbers + * (really it isn't necessary for them). However, when you get 16-bit numbers, + * you do. Let's go back to our prior example and see how this will look: + * + * (0xffff - 0xff80 + 1) * -1 + * (0x007f + 1) * -1 + * (0x0080) * -1 + */ +Buffer.prototype.readInt8 = function(offset, noAssert) { + var buffer = this; + var neg; + + if (!noAssert) { + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to read beyond buffer length'); + } + + neg = buffer.parent[buffer.offset + offset] & 0x80; + if (!neg) { + return (buffer.parent[buffer.offset + offset]); + } + + return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1); +}; + +function readInt16(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt16(buffer, offset, isBigEndian, noAssert); + neg = val & 0x8000; + if (!neg) { + return val; + } + + return (0xffff - val + 1) * -1; +} + +Buffer.prototype.readInt16LE = function(offset, noAssert) { + return readInt16(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt16BE = function(offset, noAssert) { + return readInt16(this, offset, true, noAssert); +}; + +function readInt32(buffer, offset, isBigEndian, noAssert) { + var neg, val; + + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + val = readUInt32(buffer, offset, isBigEndian, noAssert); + neg = val & 0x80000000; + if (!neg) { + return (val); + } + + return (0xffffffff - val + 1) * -1; +} + +Buffer.prototype.readInt32LE = function(offset, noAssert) { + return readInt32(this, offset, false, noAssert); +}; + +Buffer.prototype.readInt32BE = function(offset, noAssert) { + return readInt32(this, offset, true, noAssert); +}; + +function readFloat(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.readFloatLE = function(offset, noAssert) { + return readFloat(this, offset, false, noAssert); +}; + +Buffer.prototype.readFloatBE = function(offset, noAssert) { + return readFloat(this, offset, true, noAssert); +}; + +function readDouble(buffer, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to read beyond buffer length'); + } + + return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.readDoubleLE = function(offset, noAssert) { + return readDouble(this, offset, false, noAssert); +}; + +Buffer.prototype.readDoubleBE = function(offset, noAssert) { + return readDouble(this, offset, true, noAssert); +}; + + +/* + * We have to make sure that the value is a valid integer. This means that it is + * non-negative. It has no fractional component and that it does not exceed the + * maximum allowed value. + * + * value The number to check for validity + * + * max The maximum value + */ +function verifuint(value, max) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value >= 0, + 'specified a negative value for writing an unsigned value'); + + assert.ok(value <= max, 'value is larger than maximum value for type'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +Buffer.prototype.writeUInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xff); + } + + buffer.parent[buffer.offset + offset] = value; +}; + +function writeUInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffff); + } + + if (isBigEndian) { + buffer.parent[buffer.offset + offset] = (value & 0xff00) >>> 8; + buffer.parent[buffer.offset + offset + 1] = value & 0x00ff; + } else { + buffer.parent[buffer.offset + offset + 1] = (value & 0xff00) >>> 8; + buffer.parent[buffer.offset + offset] = value & 0x00ff; + } +} + +Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) { + writeUInt16(this, value, offset, true, noAssert); +}; + +function writeUInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'trying to write beyond buffer length'); + + verifuint(value, 0xffffffff); + } + + if (isBigEndian) { + buffer.parent[buffer.offset + offset] = (value >>> 24) & 0xff; + buffer.parent[buffer.offset + offset + 1] = (value >>> 16) & 0xff; + buffer.parent[buffer.offset + offset + 2] = (value >>> 8) & 0xff; + buffer.parent[buffer.offset + offset + 3] = value & 0xff; + } else { + buffer.parent[buffer.offset + offset + 3] = (value >>> 24) & 0xff; + buffer.parent[buffer.offset + offset + 2] = (value >>> 16) & 0xff; + buffer.parent[buffer.offset + offset + 1] = (value >>> 8) & 0xff; + buffer.parent[buffer.offset + offset] = value & 0xff; + } +} + +Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) { + writeUInt32(this, value, offset, true, noAssert); +}; + + +/* + * We now move onto our friends in the signed number category. Unlike unsigned + * numbers, we're going to have to worry a bit more about how we put values into + * arrays. Since we are only worrying about signed 32-bit values, we're in + * slightly better shape. Unfortunately, we really can't do our favorite binary + * & in this system. It really seems to do the wrong thing. For example: + * + * > -32 & 0xff + * 224 + * + * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of + * this aren't treated as a signed number. Ultimately a bad thing. + * + * What we're going to want to do is basically create the unsigned equivalent of + * our representation and pass that off to the wuint* functions. To do that + * we're going to do the following: + * + * - if the value is positive + * we can pass it directly off to the equivalent wuint + * - if the value is negative + * we do the following computation: + * mb + val + 1, where + * mb is the maximum unsigned value in that byte size + * val is the Javascript negative integer + * + * + * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If + * you do out the computations: + * + * 0xffff - 128 + 1 + * 0xffff - 127 + * 0xff80 + * + * You can then encode this value as the signed version. This is really rather + * hacky, but it should work and get the job done which is our goal here. + */ + +/* + * A series of checks to make sure we actually have a signed 32-bit number + */ +function verifsint(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); + + assert.ok(Math.floor(value) === value, 'value has a fractional component'); +} + +function verifIEEE754(value, max, min) { + assert.ok(typeof (value) == 'number', + 'cannot write a non-number as a number'); + + assert.ok(value <= max, 'value larger than maximum allowed value'); + + assert.ok(value >= min, 'value smaller than minimum allowed value'); +} + +Buffer.prototype.writeInt8 = function(value, offset, noAssert) { + var buffer = this; + + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7f, -0x80); + } + + if (value >= 0) { + buffer.writeUInt8(value, offset, noAssert); + } else { + buffer.writeUInt8(0xff + value + 1, offset, noAssert); + } +}; + +function writeInt16(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 1 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fff, -0x8000); + } + + if (value >= 0) { + writeUInt16(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt16LE = function(value, offset, noAssert) { + writeInt16(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt16BE = function(value, offset, noAssert) { + writeInt16(this, value, offset, true, noAssert); +}; + +function writeInt32(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifsint(value, 0x7fffffff, -0x80000000); + } + + if (value >= 0) { + writeUInt32(buffer, value, offset, isBigEndian, noAssert); + } else { + writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert); + } +} + +Buffer.prototype.writeInt32LE = function(value, offset, noAssert) { + writeInt32(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeInt32BE = function(value, offset, noAssert) { + writeInt32(this, value, offset, true, noAssert); +}; + +function writeFloat(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 3 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 23, 4); +} + +Buffer.prototype.writeFloatLE = function(value, offset, noAssert) { + writeFloat(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeFloatBE = function(value, offset, noAssert) { + writeFloat(this, value, offset, true, noAssert); +}; + +function writeDouble(buffer, value, offset, isBigEndian, noAssert) { + if (!noAssert) { + assert.ok(value !== undefined && value !== null, + 'missing value'); + + assert.ok(typeof (isBigEndian) === 'boolean', + 'missing or invalid endian'); + + assert.ok(offset !== undefined && offset !== null, + 'missing offset'); + + assert.ok(offset + 7 < buffer.length, + 'Trying to write beyond buffer length'); + + verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + + require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian, + 52, 8); +} + +Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) { + writeDouble(this, value, offset, false, noAssert); +}; + +Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) { + writeDouble(this, value, offset, true, noAssert); +}; + +SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8; +SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE; +SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE; +SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE; +SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE; +SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8; +SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE; +SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE; +SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE; +SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE; +SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE; +SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE; +SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE; +SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE; +SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8; +SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE; +SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE; +SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE; +SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE; +SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8; +SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE; +SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE; +SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE; +SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE; +SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE; +SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE; +SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE; +SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE; + +},{"assert":1,"./buffer_ieee754":8,"base64-js":9}],9:[function(require,module,exports){ +(function (exports) { + 'use strict'; + + var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + function b64ToByteArray(b64) { + var i, j, l, tmp, placeHolders, arr; + + if (b64.length % 4 > 0) { + throw 'Invalid string. Length must be a multiple of 4'; + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + placeHolders = b64.indexOf('='); + placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0; + + // base64 is 4/3 + up to two characters of the original data + arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders); + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length; + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]); + arr.push((tmp & 0xFF0000) >> 16); + arr.push((tmp & 0xFF00) >> 8); + arr.push(tmp & 0xFF); + } + + if (placeHolders === 2) { + tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4); + arr.push(tmp & 0xFF); + } else if (placeHolders === 1) { + tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2); + arr.push((tmp >> 8) & 0xFF); + arr.push(tmp & 0xFF); + } + + return arr; + } + + function uint8ToBase64(uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length; + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; + }; + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]); + output += tripletToBase64(temp); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1]; + output += lookup[temp >> 2]; + output += lookup[(temp << 4) & 0x3F]; + output += '=='; + break; + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]); + output += lookup[temp >> 10]; + output += lookup[(temp >> 4) & 0x3F]; + output += lookup[(temp << 2) & 0x3F]; + output += '='; + break; + } + + return output; + } + + module.exports.toByteArray = b64ToByteArray; + module.exports.fromByteArray = uint8ToBase64; +}()); + +},{}]},{},[]) +;;module.exports=require("buffer-browserify") + +},{}],30:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; + +process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' + && window.setImmediate; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) }; + } + + if (canPost) { + var queue = []; + window.addEventListener('message', function (ev) { + var source = ev.source; + if ((source === window || source === null) && ev.data === 'process-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; + } + + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}],31:[function(require,module,exports){ + +module.exports = require('./lib/urlsafe-base64'); +},{"./lib/urlsafe-base64":32}],32:[function(require,module,exports){ +var Buffer=require("__browserify_Buffer").Buffer;/*! + * urlsafe-base64 + */ + +/** + * Module Dependencies + */ + +// None yet! + +/** + * Library version. + */ + +exports.version = '1.0.0'; + +/** + * .encode + * + * return an encoded Buffer as URL Safe Base64 + * + * Note: This function encodes to the RFC 4648 Spec where '+' is encoded + * as '-' and '/' is encoded as '_'. The padding character '=' is + * removed. + * + * @param {Buffer} buffer + * @return {String} + * @api public + */ + +exports.encode = function encode(buffer) { + + return buffer.toString('base64') + .replace(/\+/g, '-') // Convert '+' to '-' + .replace(/\//g, '_') // Convert '/' to '_' + .replace(/=+$/, ''); // Remove ending '=' + +}; + +/** + * .decode + * + * return an decoded URL Safe Base64 as Buffer + * + * @param {String} + * @return {Buffer} + * @api public + */ + +exports.decode = function decode(base64) { + + // Add removed at end '=' + base64 += Array(5 - base64.length % 4).join('='); + + base64 = base64 + .replace(/\-/g, '+') // Convert '-' to '+' + .replace(/\_/g, '/'); // Convert '_' to '/' + + return new Buffer(base64, 'base64'); + +}; + +/** + * .validate + * + * Validates a string if it is URL Safe Base64 encoded. + * + * @param {String} + * @return {Boolean} + * @api public + */ + +exports.validate = function validate(base64) { + + return /^[A-Za-z0-9\-_]+$/.test(base64); + +}; +},{"__browserify_Buffer":29}]},{},[1]) +(1) +}); +; \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 878017e..125f1fd 100644 --- a/templates/index.html +++ b/templates/index.html @@ -119,7 +119,7 @@

- +
diff --git a/templates/view.html b/templates/view.html index 32c9fc9..a700f6e 100644 --- a/templates/view.html +++ b/templates/view.html @@ -95,7 +95,9 @@ {% else %}

{% endif %} -

{{ paste.title }}

+
+

{{ paste.title }}

+
Format: {{ paste.language }}
Date: {{ paste.timestamp }}
{% if paste.expiration is defined and paste.expiration != "" %} @@ -123,6 +125,13 @@
{% endif %} + + +
@@ -132,7 +141,7 @@
-
{{ paste.content }}
+
{{ paste.content }}
@@ -173,21 +182,28 @@ + + - - - + +

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%0ArW) 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 GFa8&JqLW-Q8USC`wAVB8bD#ozfiw(t?sA-3`Bc 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 literal 0 HcmV?d00001 diff --git a/static/img/language/Light/ruby.png b/static/img/language/Light/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..194b890a1806e4cc4c5b3e45e5211f1f9a5244a3 GIT binary patch literal 57750 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