JSAN_h\ J_aLvgE_T# ] ! prototypelengthname argumentscallerisArrayArray55 - 66W! Wd8.!.. dD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\router\index.js' !d*! layerErrord8< 1#M A&S(A*8"8" __filenamed8< _38181 getPathname&8< ! z next"" @? g #5D"  ?kf 2err K?#lroute##KL#l##(#:B}  slashAdded S Sz;/** * Dispatch a req, res into the router. * @private */ handleX" "  X Xg vq use strict# # \#aRoute" d[iul./route# require k[###\#mLayer" p[iul./layer# kl###\#&wmethods"& z[iulz#8 kl#0#0#"!\#Hmixin"H [iul utils-merge#X kl#P#P#D#\#l*debug"l [iulexpress:router#iul#|kl#t#t#t"#h/\#& deprecate"  [iulexpress# iuldepd#kl####+\#"flatten" [iul array-flatten#kl###'\#parseUrl" [iulparseurl# kl####\#?# objectRegExp"?  [#N^\[object (\S+)\]$#;(\#hslice"h [""u    [#p#p#p#d"\#$toString" [" " Object [####)\#Qproto"Q [f =exports"_module [#Y#Yyz ""r  g  #opts" f 9options ### #z router""  g viureq #res  #@  @#X"## ###(# # #@ #Hvf = __proto__"  # #  [## # vf =params".#(#( #8#(#(vf =_params"D#>#>eu#O#>#>vf = caseSensitive"[#U#U"p#l#l#U)#U*vf = mergeParams" ##"" ###%#&vf =strict"## )"## ##vf =stack"## e######|t#s #j#j#Y#M\vf =param"h #c #c yz/** * Map the given param placeholder `name`(s) to the given callback. * * Parameter mapping is used to provide pre-conditions to routes * which use normalized placeholders. For example a _:user_id_ parameter * could automatically load a user's information from the database without * any additional code, * * The callback uses the same signature as middleware, the only difference * being that the value of the placeholder is passed, in this case the _id_ * of the user. Once the `next()` function is invoked, just like middleware * it will continue on to execute the route, or subsequent parameter functions. * * Just like in middleware, you must either respond to the request or call next * to avoid stalling the request. * * app.param('user_id', function(req, res, next, id){ * User.find(id, function(err, user){ * if (err) { * return next(err); * } else if (!user) { * return next(new Error('failed to load user')); * } * req.user = user; * next(); * }); * }); * * @param {String} name * @param {Function} fn * @return {app} for chaining * @public */ ::"z "  : :[= g  } f 2#   =# lfunction# # g viul-router.param(fn): Refactor to use path params# / [# # :# ;JviuG# push" " # # # # # J#" J# nC# A#P \"P  ="] #Y #Y #L A#m blen"m  e="y _#s #s #i A# iret"  l=# A} f 2iul# G# # l:# # g viuf %f %f %f %l router.param(# iuG#  stringify" JSON  [[# # # # &l, fn): Use router.param(# # Ciuiul?# substr" G# # # " # # # # dl , fn) instead# # vR# # # vvf =G#2 iul?#E "= G#9 #9 #9 #2 #2 v# n# Ax m f 4i =#` ef#d #` #i  !#k #Y "Y l#] #U g } f =lm#x iuG# fn  =# iu# _#~ #~ #~ #x g vf =# lm# # # # #t 6#n @#P ^A} f 1lI# #  # # g # Diuf %f %f %linvalid param() call for # G#9 # "l, got #@ # -#K # 2Error  [[# # =# N# kAviu# X" |f =iuG#d "\ #X #X #X f 9iuG#x "p #l #l #l e# #l #X +#W -#W 2#W 6#W 7A# # A# =#  G=#  =#q .#q .#c <#c =\vf =X" # # yV# # # \vf =process_params"##yz 4paramVal">  7#: #N 9paramCallbacks"N  <#J #d > paramCalled"d  A#` z :" "  :C g  } K KC# g # iuKI#  # # J# G# (E} f 7 ## "!    #!#! # g #!iQ#!!#!!Y#!R# 3Evf =, ,-#4! l#A!#4!#4!Evf =2 23#H!iu#S! !U#S! X#N!#N! #H!#H!E} #b! #2f#c!g #p!iQ#w!#w!o#h!l#^!&Evf = (#!"!2f#!#!#!#!Evf =7 78#!iuw#!"!   #!#! #!#!#!Evf =< <=#!iuw#! #!#! #!#!Evf =A AB#! iuw#!called   #!#! #!#!E} f 9f 27}#" undefined   [[[#" #"#"" #<##"#")g #;"i:D#B"#B"#3"#"LE} f 8A#" |f 9f 2match""A#" #"7}#"#"|f 8error""A#" #"f 3""A#" #"lN#"#"#"2#"4#"\#"^#"mg vf =iuw#4#",##)##)# #)#value"G#A#<# #<##)#$#)#%#j# iu"#A#w# #w#:D#q##q## ##"Evf =iuw###### f =A## ##G## ##l######7}######7}####U##d##eEvi paramCallback  #$ #$#$E# NC# K IC# bz ">$ "K$  g #[$!"[$ iu#o$  !, ,-#o$ < <=#`$#`$#W$&vf ="$A AB#$ #$iu"$2 23#$#$"$ #$#$ #$#$(#$)} K K#$g vf ="$A#$ #$K#%#$#$viuK#%: : :#%#% #% #$%#$[#$d} #;% ##<%g #@%i:#G%#G%#@%#7%#U%l % g viue & & #% #% #%#% #%#%& 'g viu#d%   #i%#n% 7 78#}%"%2#%#%#a%#a%/#a%0,#Y%>#Q$t#L$K #5$vi:#%#%#%#@#! #( #0 #5 4#: # # ##\vf =use"'#'#' yz/** * Use the given middleware function, with optional path, defaulting to "/". * * Use (like `.all`) will run for any http METHOD, but it will not add * handlers for those methods so OPTIONS requests will not consider `.use` * functions even if they could respond. * * The other difference is that _route_ path is stripped and not visible * to the handler function. The main effect of this feature is that mounted * handlers can operate without any code changes regardless of the "prefix" * pathname. * * @public */ II"'"( I I[L g #( Roffset"( ULl#(# (P# ( Xpath" ( [Ll/#'(#(P} f 3#o(   L#v(lI#}( #o(g #(garg"( jLc#(#( eg vf =jk#(iul#(jk#(#(#( #( n#(m#(Jef 8iujk#( "(   [#(#( #(f 3"(jk#(#( l#(#(#(&} f 3#)  jk#)lI#") #)g vf =UV#6)l?#?)#6) #6) vf =[\#H)c#O)#H) #H) #.)*#)Ie#(_#k(P#d)2 callbacks"d)  Liuiu L#) UV#)call"}) [#x)#x) #x) [#p)#p)&#`)7P} f 2")#) #)l#)#)g #)Biul*Router.use() requires middleware functions#), TypeError  [[#) #);#)L#)hPx 1*f 4 L#*"$*#* #*#*#-* !#-*#*"*l#*# * g #<*"<*ciu#K*#A* #A* #8*} f 3#X*  c#_*lI#f* #X*g #z*Ziuf %l4Router.use() requires middleware function but got a #*6iuc#*gettype  [[#*#* #*D#* #*S#r*h#T*viul use %s %s#+ [\# +f 9"+c#+#+l #+ #+ [#*#*2#*3#7+o"7+ Liu[\#I+#O+R#W+ sensitive#W+ "f+#b+#b+#|+ )#|+l#+#+ end#+l#+c#+p pq[#C+#?+g#3+tvf =N"+#+#+  [#+ #+#+viu#+X"+0"+#+#+ #+#+#+#2*#*P#+ #+P#(L#( cL#'#'#'#'\vf =N"-#-#- yz/** * Create a new Route for the given path. * * Each route contains a separate middleware stack and VERB handlers. * * See the Route api documentation for details on adding handlers * and middleware to routes. * * @param {String} path * @return {Route} * @public */ NN")-".- N N[ g #=-N"=- Niu[ [#O-d de[#I-#E-#9-#]-("]- iu[%#o-#u-O#{-#{- "-#-#-#-)#-)"-#-#- #- #-l#-iuN#-bind"-dispatch"- N#-#-#-#-p pq[#i-#e-|#Y-vf =N"-+#-#- N#-#-#-viu+#.X".0".#-#- #-#-#-#. N#.#5-#/-[ %# -# -#-#-\viuyz ""p. g vf =iumethod bZ#. [#|.#|. yz "". g #.jN". Ngiu[ [g#.N".#.#. #.#.hviuNm#.iu g#. l?#.".  [[#.#. #.apply".iub bcZ#.Nm#.#. #.#.4#.5h#. #/h#.qg#.[ qg#.#.#|.#|.[#x.Z#q.b cZ#h.#h.forEach"_.iulall#Y.concat"Q.z{#J.#J.#J.#J.#J.#J.\z  appendMethods"B/ "O/  g x /f 4 #t/"/addition  #x/#x/#t/#/ !#/#m/"m/l#q/#i/ g #/b"/ biu#/#/#/ #/} f 2iub#/indexOf"/list #/#/ #/#/ &l?#/#/g viub#/X"/#/#/ #/#/#/ #/A#/i#d/#`/#P/ #V/ #9/\z 8"0 "*0 8 g #40T a0 g #s0  [[#z0 #m0#h0K  K Kg #>0pathname"R0 iu #N0 [#E0#E0 #E0#80(#00Z#+0 #0t\z "0"0  g #0type"0 #0  obj #0#0} f 3#0lobject#0#0g #0 #1#0#0-#21;iu [#Y1 l$1#g1replace"P1iu#G1"A1 [#91#91 #91#91#913#0#0 #0\z`/** * Match path to a layer. * * @param {Layer} layer * @param {string} path * @private */  matchLayer"1 "1    g #1I 2 g #22 K K K #92#,2#'2K g #2iu[  [ #2"2  # 2# 2 # 2#1##1O #1 $ #1[ ! #1p\z ""q2 "|2 "( g  } f 9f 3#2  parent  1(#2l#2#2#2 #12#2#2%g #2 (#26#2,#2C*#2;"2 (iu# 312#3 [#3#3#2*} f 9#>3 #|f ;l#@3:#E3#@3 #?3 #P3 #|f ;l#R312#W3#R3 #Q3 #>3 g #f3iu>#s3:#x3D#m3#m3Q#`3$E#:3J*#3Y"3 (l#3#3 *#3^o"3 a(l#3#3 *g v#3 !\#3#3e#3d#3"*f ;\#3:#3#3 g v#3 !ab#3#3n#3m#3"*f ;ab#312#3#3 x T4f 7\#H4l#M4#H4#P4 "\#P4v#C4 "\#C4#C4vg vf =iuf %\#b4ab#f4#b4:#[4#[4 iu\#r4:#k4#k4 #[4#[4} f 4\#4ab#4#4g v#4 iu\#4:#4#4 #4#4#4*#U4v#>4*#4iu>#4:#4D#4#4*#2m(#}2 :(#21 2(#h2\z restore")5"05   g #B5'props"B5 iuf &"]5 #T5 #T5l@#g5#T5   [#N5#J5#>5,#q5&vals"q5 iuf &"5#5 #5l@#5#5 #|5#x5#m5+x 5f 4 #5"5#5#5 #5#5 !#5#5"5l#5#5 g vf =iu#5#5#5iuf %#5l@#5#5#5 #5#5#5vf =iu#5#5#5iuiu#5#5#5  #5#5 #5#5#5C#5j# 6yz ""6 g x ^6f 4 #H6"Q6 #L6#L6 #H6#Z6 !#Z6#A6"A6l#E6#=6 g vf =iuiu#q6#k6#k6 #g6#g6 iu#|6 #w6#w6#g6#g6#_6&#86M#6!iu#6 #6 "6  #6#6#6#6#6K  K#6#6#:5y#15 #55 # 5\z sendOptionsResponse"6"6  g #7| b7 g viuK K K"#y7@ @  @#t7#t7 #t7 "#n7!#i7K (!g #70body"7 3iul,#(7join""7  #7#7 #7#7.viulAllow#:734#C7set"57 #27#27#27#27.viu34#W7send"Q7F#N7#N7#N7#N7.# 7W!#7#6 F#6 <#6@ ,#6\z wrap"7"7  SR g #7yz proxy"7"7 Z ZRY g #7&_args"7 bYiuf %"7 Y#7 #7l?#7#7     [[#7#7#7+]vf =iul#8bc#8#8old u uRR# 8#8 #8]x K8f 4 Y#>8e eY#B8#>8#G8 !{#G8#8"8{l##8#&8e"&8}"58i#,8 #,8#8 xg vf =iuf %{#Y8l?#]8#Y8bc#T8#T8 iu{#l8i#b8 #b8 #T8#T8#L8)x#8_]viu#8bc#8"}8   RR#{8#{8#{8#{8]#7Y#7#7U#7R#7u wR#7 R#7\#8[     8 \  " D h       * 6 : ; d        = H L M ~        % & < S          ; >    + . y   a d     9 L h          5 S ^ b c   * . / J g . I M N p  P T U  " # V W  _ n         . H I l        e      $ % A \            B \ b c      # $ C b            < K Z i j      $ E o w x          % Y p        ? q y z         4 S Y Z        , B b c       ( ] e f       I J    ) D         L       ! 7 m z           B ^ _          - 8 H ^ q r ! )! /! 0! D! Y! Z! j! ! ! ! ! ! ! ! " 5" K" Q" R" " " # ## O# P# d# # # # # # # # # # $ $ $ 3$ S$ ~$ $ $ $ $ $ $ % % ,% 2% 3% P% Q% [% % % % % % % % % % % '& *& q& & & & 1' }' ' ' ' ' ' ' ( ( ,( -( F( i( ( ( ( ( ( ( ( ) 0) B) S) Y) ]) ^) ) ) ) * * * 4* O* P* t* * * * * .+ /+ Q+ v+ + + + + + + + + + + + + + ), ,, r, u, , , , , - - - - 7- V- W- w- - - - - - - - . &. ). *. J. z. . . . / / / / 9/ b/ / / / / / / / / 0 20 :0 ]0 o0 0 0 0 0 0 0 0 0 0 1 1 1 01 L1 n1 p1 q1 u1 1 1 1 1 1 1 1 1 1 2 .2 >2 B2 D2 E2 h2 2 2 2 2 2 2 3 3 83 b3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 <4 W4 v4 w4 4 4 4 4 4 4 4 4 4 5 <5 k5 5 5 5 5 6 6 6 6 46 a6 6 6 6 6 6 6 6 6 7 7 .7 J7 ^7 p7 7 7 7 7 7 7 7 7 7 8 N8 p8 v8 w8 8 8 8#8V g # self"  V# # viuldispatching %s %s#+ b"C  V#@ #@ url"O #L #L  [#% #% /#% 0#] !search"]  Vf %l?#f iul?#z "q "m #j #j #j #j #f #Y &# 1 pathlength"  Vk# " " # # # f &# l?# # # $# 6# Mfqdn"  Vf 8f 3iul# " # # # l^# # f %l?# iul://#" iul# # " " # # # # # %# ,# 0# F# R#I protohost"  Vk# l5#[iul#6iul^#If %l@#N#R#N"@"<#9#9#9#9"."*#'#'#'#'1# =#N#eidx"e  Vl#k#a #t  removed"t Vl5#~#p#S" Ul### paramcalled"  V### " Ve###4"0"4 0V0"@#<#< #0#r( parentParams"r  +V"## #n#/ parentUrl"  2Vf 9baseUrl"## l5###"#59" Viuout  @V##l6# l@#l#  [[##.#:vf =@" ##@ @V###} f 2b"n#k#k lOPTIONS#z #kg vf =<#iu<#yz ""  g } f 9K  K^#f 2"   VV##l###g #iuKd#u u^##k#a#1_viu    VVV#h# ur#    [[[[##&#'_#m^#u r^#K d^##S S S[[####U#O#gvf =6"F#C#C 23#Q #C#Cvf = originalUrl"a #^#^f 9"s #p#p"###p#^,#^-vi@N###?z  trim_prefix" "$  g #c" iu" layerPath  # #[  [###} f 8f 8#f 3l^## # #f 3l.#%#-#% #g #0iu  #< @ @NV#7#7#0#9} f 3"# #l##g viultrim prefix (%s) from url %s## "" V## [##9#:vf = V#/#9 #/#/vf ="M#J#Jf % V#T iuf %"x#o #o"###o!"g"c#`#`#`#`1#T=#JG#JH} f 8# # V#f 3iul#"### l^###g vf ="##f %l^#"### ##vf =S SUV# l####E#fvf =6"U#R#R f %2 23V#` |kf 2iuf &"|#u#ul?##u#m#ml^##m##iul#f &"##l?## substring" ###(#mh#lj#`v#R#R##viul %s %s : %s# " ## # " ####;#<} s#) g viu# yV#@#handle_request"&###$#%-#x3+g viu#P #\4#a@#f handle_error"B &#=#=#=.#=/9#5=+#%## &#  #  #[ ## V#  V#  yV# @ AV# V# g vf ="( V#%#%iul?#>"6"2T#/#/#/#/#%#%Nvf =ST#H l#U#H#HN#DQ# TB} f 3" V##l##g vf =6"T## 2 23V# ##evf ="T##f %f % V# c##iu"t# #""T#### #6#@#Aevf =c#l5## # e#_#B} f 7    V#K"W0 0%V#R#R #Kg viu <V#uG#{  setImmediate   [[[#h #h#h##`;#GTB#[" [?iuT#8 8 8 8[[[# ##B} f 0[#l## g #iuG# ###&#8B#D"D ?#@ B#S"S ?#O B#bN"b N?#^ Bg  vf =#iu# ! #0## ##vf =#iu#[#   [[[# ### vf =N#N"## ##} f 3#  # lboolean# #g vf =G#M f 9G#Z #h#Z#M #M!#"T#t} f 3#l##g n" # ##~/} # #N#g n" # #J#V} G# g vf =#al#i#a #an" #x ##f#v#b" b?b"T## ##* has_method"   ?iub#_handles_method"N####/} f 8#  #  # f 2b#'lT#2 #'##g viu  V#Ui_options"c N#^#^#^   [[[#G #G(#G) #=; #d} f 8#  #  # f 3b#lHEAD### g vf =#l## #& n" # & #2 #X#m#nBf 8f 3#ul##uf 4 #"0## ##u$} f 3#"l#,#"g #:iuG#F #A#A9 #2&5 #:B} N#g vf =N"T## N###B # @ #+Bvf ="T## k""  V##"9#4#4 iu"## + +,V# " " " "[[[# #'#U#b#cB#J] "J  ?["[#V#V #FBviu# V# T# yV#yz "" g } K Km #g #iuf 9 G?# Kr ##@ @A?##s #1p #:n } N N?#g #0,iu TV#L k V#Q@} #V7"< ?#7#7#7$ #&>~ #In viu #xz #  ` ?# [ [?#   VVV#l #l/#l0n #m #K r m ##"P ####B#?#K L?# ??[[[d!&8<2[[   [sa 66W !W d8< [  ! @ constructorEmpty55 - 66W!W d8.!.. dD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\router\layer.js'  !d !d8<  K  77    8 8 &8<  ! z p"" p g  } # #|f :#p #"##g #0$iu[ [ #A   #G   #Pp #;#7 #*. # L viulnew %s#b[ #l  g  vq`# #  #&  pathRegexp"    iulpath-to-regexp#k k ###+ #0 " iulexpress:router:layer#+iul#"k ###(#5 #s0 hasOwnProperty"s    ""   ####o5 vf ="  ##p p ###  vf =C"@ "6 p) #1#1#1yz/** * Handle the error for the layer. * * @param {Error} error * @param {Request} req * @param {Response} res * @param {function} next * @api private */ CC"Y "e C C 0 g #6 " 0 X"## #4 } f 3"9 ## l@##g #iu 0 #@  @0 ## A #A< #V4 #I4  g viuK K K0 K #4@ @I 0 #/#/ #/ K #)J #$K Q J g viuG #  0 #  0 # @I #9 ###V #$J #}0 #f G 0 #m ] 0 #r _ 0 #w@ I 0 #P#P#1#1 vf =7"" p) ###yz/** * Handle the request for the layer. * * @param {Request} req * @param {Response} res * @param {function} next * @api private */ X7"" X X m g #s " m X" ## #q } f 6"2v #0#0 l@#<#0 g #ki@  @m #r#r~ #?>y #,Qq #Bq  g viuK K Km  #@ @ m ## #  # #K   g viu m #  m #@ #v ### # #m #  m #  m # @  m #### vf ="d"Z p) #U#U#Uyz/** * Check if this route matches `path`, if so * populate `.params`. * * @param {String} path * @return {Boolean} * @api private */ "v"{    g  } f 0[ [ #l## g vf ="##     # ## vf =["##  # ## # l# #o # }  fast_slash" regexp"## #g vf ="n#j#j #x#j#j vf =["## l5### # l# #'} #  # m"   iu[ #exec" "## ### } # #  #g vf ="##  # ## vf =["##  # ## # l#  #O #W vf ="< #8 #8 #F #8 #8  vf =["P #L #L iul#Z   #X #X #L #L  #e   "e     "p #l #l #a  #}  "}   " # # #y  x f 4  # "   # # # #  ! # #  "  l?# #  g #  2"  2 iuf & # l?# #   # # #  # " prop"  %  " 2 # # #  # ) val"  ,  iuiu #   # #  decode_param 5  5   # # #  } f 9f 3, - #  #" # #/ $ #|iu #E % & #M "?      #1 #1 #1 !#0 ## 9g vf =iu% & #d  #] #] , - #l #] #] F #U !8 # ` #  #  #~ l#  #  #|[   #m#m#U7#U8 zX/** * Decode param value. * * @param {string} val * @return {string} * @private */ 5 " "  5 S g } f 9f 3#  ,  , S # lstring# # f 2"* , ] #' #' l#6 #' # +g #? , ] #F d #9 X # FV #R V g } f :K K KS i # URIError q  q  q    # # g vf =message" Kn # # f %f %lFailed to decode param '# ,  , ] S # # !l'# # (# 6# 7u vf =status" Kn # # f = statusCode" Kn # # ly@# # # !# "u # nk # i ## i Kn #) # h # K n h g #\ iu, ] #v decodeURIComponent      #c #c  #V )h # /S # , ] S # J #4       8 \  D E I ^ j n o           , U Y Z s       8 9 e            , 0 1           + : > A B F k n        ) * A g z ~             + @ P T U         ) f |          # $ 6 J ^ _ w   W q w { |  ; K O P X |    . 2 4 #4  #\#\#\ #y "y  f 9 ### #u vf =X"##  ### vf ="## f 9" ##l# ##$#% vf ="##    # ## vf =["##  # ## vf = "## iu[ #f = "%#!#! e#-#! #1     # #&#4#5 } f 8f 2[ #?l^#H#? f 2"S #O#Ol#\#O#?"g vf = "t  "m#i#i #il##i#i #c( #;P # #[   #   #   #         d!&8<  !            sbU 66W!W d8.!.  !       sa 66W!W d8<     s  t!t#U##1X 66W !CW d8.!.. dD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\router\route.js'  !d !&8< 2z/** * Add a handler for all HTTP verbs to this route. * * Behaves just like middleware and can respond or call `next` * to continue processing. * * You can use multiple `.all` call to add multiple handlers. * * function check_something(req, res, next){ * next(); * }; * * function validate_user(req, res, next){ * next(); * }; * * route * .all(validate_user) * .all(check_something) * .get(function(req, res, next){ * res.send('hello world'); * }); * * @param {function} handler * @return {Route} for chaining * @api public */ "g "j   g vq`# # ) #0- " ( iulexpress:router:route#iul#k k( ###(#5) #": " ( iul#.k9 #&#&#') #DB p"D p( iulu#T k9 #L#L#@) #dJ z"d z( iulz#v k9 #n#n#`!) #R " ( ""    ( ####") #$Z " ( " "  ( ####)) vf ="( ( #"#"d d( #3#"#") zZ/** * Initialize `Route` with the given `path`, * * @param {String} path * @public */ d"" di g vf =["## [ [i ###l vf =0"## e###l viul #[s # 0 ( ###l vf =z"### #.##l #i #[ s i #) vf = "" dh #|#|#|yzE/** * Determine if the route handles a given method. * @private */   ""    (  g } _all"z"## #g # l# # #- # "  i toLowerCase" b b ####  } f 8f 2 #lhead#%##/ #iul #=z"4#0#0 #0#(g vf = #Llget#S#L #L  #F #E #a#iuiu #}z"t#p#p #pBoolean    ( ( #h#h # #b   ###| #| ) vf = " " dh ###yz=/** * @return {Array} supported HTTP methods * @private */   ""    (  g ## z" z iuz"##  " a ( # #  # #( } f 8 "Rz"J#F#F #F#Z # "gz"_#[#[ #[#F&g viul #X"{z #t#t #t#t #n #BK x f 4  #"z #### ! ## " l##  g vf =iu #z ## i toUpperCase" iu #z ## ###%#& #G #p #z #  # #3#3#N#O) vf =B"b "X dh #S#S#Syz8/** * dispatch req, res into this route * @private */ BB"w" B B(  g #  "   l##  # 0" 0 0"## # } f 2"0 ## l##g #i   ##' #" #0 #!- b" b i " b"  ## ###& } f 8f 2b0 #l #)##3 #iul #Az"8#4#4 #4#*g vf =b0 #Pl #Y#P#PA #J6 #I vf =N"j5 #g#g #s#g#g vi@ @ #|#|#| z @"" @P g } f 8K KP #f 2KW #lN###g #i ,  ##[ #T #8R #a " P iu# !     #0 0  ## #R } # #d #g #iuKW #` ## o #l #+R } f 8b"6d #1#1 f 3b"Fd #A#A b b0  #R#A#1'g #biuKW #n@Q #i#i  #Zv #-LR } KW #g viu 5  #     #@Q #7"d ###$#% #3 g viuKW # # #@Q #C" d ###'#( #6 #xR #aP #K W P #t #m # 5  #   # ,  #n#n#S#S) vf ="W "M dh #H #H #H y$ #^ #H #H ) viuyz ""`  g vf =iub b #| "q d dh ( #l #l #l yz ""  g # ( handles"    iuiu  # "   U ( ( # # #   = ( ( # # # - x f 4  # "   # # # #  ! # #  "  l# #  g #  X"  X iu #  ## #  } f 3#  X #%lI#0 #g #J "J  iuX #_"Y  ] ( ( #Q#Q #Q#F! #tL msg"t   f %f %f %lRoute.#zb b  ##zl)() requires callback functions but got a #+#z? ##zF#pQ # iu  #   ( ( ( ###< # viul%s %s#b#[" ##   0 ( ( ##!#" #"  iul^#+#0X #4p p pE ( ( #%#%## vf =b"H#C#C b#R#C#C vf =iub#nz"e#a#a #al#x#a#a viu#X"0"## ### #  #  # # # ' # 1# 1#l K#l L #h R #a b   #X b#X b"O zM #H #H #H s#H t) #(      8 \  @ `              ! " : ; ? l o            2 4 5 9 k w { |        H Z ^ _          $ % @ p             B N R S         L ` d e y z          " ( ) \ t z {         7 : y    ! N ] e h s  4 C G H o  ;  0 4 5 D G H j   > h       = Z [ ~      #$ g #u (G "u   $ iuiu $ # "  U ( # # #  = ( # # #q -Ex f 4 $ # "  J# # # #  !Y# # ^" Yl# # Vg # dX"  X$ iuY#  J# # # b} f 3#  Xg# lI# # g # s"  $ iuXg#2 ",  ] ( #$ #$ #$ # !q#E A} "E   $ f %l2Route.all() requires callback functions but got a #K 4v# #K ;#A Fq# qiu #   ( ( # # # l# b# "  $ iul^# # Xg# p pE ( # # # #bvf =b" # #   ( ( # # # bvf = " z" # # # l# # # bviu#( X"" 0" # # # # # b# hV# E#7 #> E#m $ #^ $ ( (   i d![&8< 2i i ( (  sa 66W!Wd8< 2( (  s  ( (  d!b&8< 2  ( (  d!&8<  1#  t!t# # #T888    &8<  1#tL1#3888   X&8<  1#  t!t#4#_#%888   d8<  1# ?a 66W!Wd8<  X 66W! Wd8<  8 8  [W8<  888 zW8<  888 0W 8<  8$8$8$  77)) 88 W.d8<   8282  77666 P9 66W!zW?8<  8C8C8C 0WH8<  8L8L8L WQd8<  8U8U [WY8<  8]8]8]  77bb 9d8<  :8g8g 88&8<  1#4#C#Ps 66W !CWy8<  ! P P P ( ( ( P d!&8<  ! P P P ( ( (  sb d8.!.  m m m     m d!X&8<  a 66W!Wd8<  X 66W!XW8< 2m m     s  888  Wd8<  88  77 88 Wd8<   88  77 P 66W!XW8< 2 888 Wd8<  88  77 Xd888 bc!bba 66W!Wd8<  X 66W! Wd8<  88  77 88 W d8<   88  77 P 66W!Wd8<  8!8!  77%% @ Z t!t###r#/##  Z t!t###i#| (d888 bc!bb cd8.!. 2 0 0 0     0 d!&8< 20 0    ;; saC 66W!WId8<  XO 66W!XWU8< 2B: 8Y8Y8Y  W_d8<  D8c8c  77gg C8M8M Wld8<   8p8p  77ttt Pw 66W!XW}8< 2B: 888 Wd8<  O88  77 Cwd888 bc!bbs c:d8<  !P P ( (  s  ( (  d!&8<  !  t!t###g#888   &8<  !  t!t###888   b&8<  ! 1#!4##R888  / @&8<  !  t!t###i#|888  P &8<  ! 4##888   0&8<  ! 1#4##@>x >9=  ! s99 66W!XW8< # 888 W8<  888 Wd8<  E ! everyfilter: lastIndexOfmappopXreduce reduceRightreverseshiftsomesortsplicetoLocaleStringunshift 66W!Wd8<. 566d! ! ! ! (*&`"3M$ '!  Date EvalErrorFunctionInfinityMathNumber RangeErrorReferenceErrorRegExpString SyntaxErrorq  decodeURI  encodeURIencodeURIComponentescapeevalisFiniteisNaN parseFloatparseIntunescapekGLOBALglobalrootconsoleprocess setTimeout clearTimeout setInterval 66W5!*WHd8< 8L8L6WPd8< BV*Evaluates JavaScript code and executes it. ! 6556--3A String value that contains valid JavaScript code.xX 66W!Wdd8< (8h8h Wld8< (8p8pWtd8< Tz?8x8xW~d8< _688Wd8< X 66W! Wd8< V88 77W88 77P 66W!Wd8< 88 7768T8TthyW8<. ' !d!.d8< 388d8<g #" # vf =setName" # # yz ""&  g vf = #8thyName #?#8#8#0#' #-#-# ?# ?vf =sayHello"S #L#Lyz ""h g viuf %lHello #} ##}log"x? ? ?#q#q #q#q#j'#_2#_2#LE#LE#   4 I L m #d!&8< !  b_ yehuiK 66W!Wd8.!. 1# a 66W!W"d8< X( 66W! W.d8< 8282 77668&8&W;d8<  8?8? 77CCCPF 66W!WLd8< (8P8P 77TTFd888 bc!b c d8<. N' !d!d8<` NRi N66W!Wod8<` NKu N 77ww`BD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\app.js8s8s` 77}}`zcd hellod8<`g #Hello" iul./hello# k k###vf = #i## ##viulBYVoid#"## ##vi" #####  ,  7 ]  E k      8 J i y        2 U }       % C [ ]    # N1#4##P 66W!Wd8.!.` N1#. ' !d!.d8< 388d8< K  77DD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\hello.js88 __dirnamed8< _;D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp188d8<g z " "  g #" # vf ="+#'#' yz ""?  g vf = #T #[#T#T#I!#@ #64#64#'C#'Dvf ="u #q#q yz "" g viuf %l# ##"? ? ? ?## ###/#;#;#qK#qL##s#vf =" ## ####    # L e m #d!&8<2d!#a& 66W!W,d8< X2 66W! W8d8< '8<8< 77@@&8080WEd8<  8I8I 77MMMPP 66W!WVd8< 28Z8Z 77^^Pd888 bc!bb :c $$$ fd8<` N8l8l d8< 8s8s&& ax 66W!W~d8< X 66W!W8<` N888 Wd8< y88W8<` N888 77x88Wd8<  88 77`Z`1# NZ1# d888 bc!bb :c  d8<` N88  &8888 d8< 88xxw wj# d8< 88$ &wi 1#8 8 8  d!&8<2 a 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  8 8  77P 66W!Wd8< 88 77  d888 bc!bb_* 槺c  (d8<` N8080  &8<- 1#[*888888   d8< 1#T*8B8B j j b b@d8< 1#T*8I8Id8< 8P8Pww. w- 1#[*888 ?d8< 8[8[$wxd8< 8a8a !$? ! '  y 1#Rk 66W!Wqd8.!.` N1# 1#y8u8u 77}}88&8< 1#y888 d8< 1#T*88efl6:`  N6 !kryWd8< 88'F2-9QWWd8.!.` N1# 1#q '88 .1!.. hD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\middleware\query.js' !d!d8< K  7788.d8< 388d8< 1#"88d8<g vq`# # #" iul# k k#####qs" iul# k## #vf ="b #\#\yzG/** * @param {Object} options * @return {Function} * @api public */ query"v"{    g #%" iuf 9 #l##create"  ## ##*# queryparse"  parse" ###} f 2# #lI# #g vf =# # ##vf =#  # ###5 #X} f 3#4#= #4g } f 2 allowDots"V #R#R#e #Rg vf ='"| #x#xl##x#x*#p%$#NG"} f 2allowPrototypes"### #"g vf =4"##l###7#*1#R"#H#0#yz ""  @ g } #$  #"( @#%#% g #<K, "< , @"OiuH#K  #B#B #B#8Ivf ="`H#]#] iu, N#t #y #i #i#]!#]"I#0UD# eBvi@  @@###B#|@#  H@#   @@#@ d@####| #m,#m,#\=#\>#  3   8 \    2 H W [ \       ) - . J r          2 W      #d!&8< ! oqqq sb d8.!. a 66W!W8<LL[[ Ld !&8< 1#* t!t#*#-*#K*888 [&8< 1# ( 4# +#I+_^888 ZI&8< a 66W!Wd8< X 66W!W8< 888 Wd8< 880W8< 888 7788Wd8<  88 77P 66W!W8< 888Wd8< 880W8< 888 77I?d8< 1#) 8 8 d8.!.. cD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\application.js' !d!&8<z/** * Proxy `Router#use()` to add middleware to the app router. * See Router#use() documentation for details. * * If the _fn_ parameter is an express app, then it will be * mounted at the _route_ specified. * * @public */ II"k"n I Ig (vq`# # "#&& finalhandler"  )!iul)#k k!###+"#0Router" 3!iul./router## k/###!"#4:z"4 z!iulz#F k/#>#>#0!"#V)B middleware"V  E!iul./middleware/init#kk/#c#c#R."#%L" !iul./middleware/query#k/###*"#/U" !iulexpress:application#iul#k/###'#4"#aView" d!iul./view#k/###"#khttp" n!iuln#k/# # #"#,t compileETag"  w!w"? iul./utils#5 k/#-#-#-#1"#Q:compileQueryParser"Q !"xiul}#n k/#f#f#f%#M?"#. compileTrust"  !" iul}# k/####3"#&"  !iul# iul#k/####+"#"" !iul#k/###'"#merge" !iul#) k/#!#!##"#=!resolve"= !"Viul[#Ok/#G#G#G#9&"#d"d !"{"q    !#l#l#l#`""##app" !f = !#f =" !######("#8trustProxyDefaultSymbol" !l@@symbol:trust_proxy_default#8#="vf =init"##yz/** * Initialize the server. * * - setup default configuration * - setup default middleware * - setup route reflection methods * * @private */ " "  ! g vf =cache"## ####vf =engines"-#)#) #8#)#)vf =settings"B #>#> #N#>#>videfaultConfiguration"Y#U#U#U#U#a#q#q#|#}"vf ="##yz# " ## ##$v#& iulz#" ## ##'#z`k#ivf =" request"## #" 1}# # #'#(ivf ="0 response"' ## ## ## "C 1}#= #= ## )## *ivf ="^ "V #R #R #R "q 1}#k #k #R '#R (ivf =" " # # # " 1}# # # )# *i#e#1 }e##on"####vf =locals" # # iul# " U# # # # !# "vf = mountpath" # # l^# # # vf ="E "> #: #: #: "U #Q #Q #: $#: %viulview# d de!# D" #~ #~ #~ #~ viulviews# iul#  !# # D" # # # ## $viuljsonp callback name# lcallback# D" # # # +# ,} f 2# l production# # g viul view cache# " # # # # # $# >viu#G l#M #W #]  #] yz  ""j  g #u iull'app.router' is deprecated! Please see the 3.x to 4.x migration guide for details on how to update your app.# q   !!!# #{ |#m #b #b S"7 U#1 #1 #1 #1 ##7#7#R#S"vf = lazyrouter" # # yz/** * lazily adds the base router if it has not yet been added. * * We cannot add the base router in the defaultConfiguration because * it reads app settings which might be set after that has run. * * @private */ " "   ! g } #  #_router" # # g vf ="- #) #) iu#C q#K 5#K iulcase sensitive routing#g enabled"^ #Z #Z #Z &# &)# iulstrict routing# /" # # # 3 34!#< #8 }#) #) viuiuiulquery parser fn#  " # # #  O!# # "I" " # # # # 4# 5viuiu#"E EF!# ##I"" # # # # '# (## # # # .# .# ?# @"vf =X"## yz/** * Dispatch a req, res pair into the application. Starts pipeline processing. * * If no callback is provided, then default error handlers will respond * in the event of an error bubbling through the stack. * * @private */ XX"&", X X!\ g #Ib"I \"V#R#R #E`#zkh"z \f 9  \#iu \#  \##@##iul# "####onerror#iu#@"logerror  !!## #) )*!# #X#d#vp`} # #e#g viulno routes defined on app# X!# # !# "vik#3#3#3#?#D#Q`viur#\t#ak#fX"Te#N#N #N#N`#A-\#- r\#2 t\#7 n\#Q#Q#^#_"vf =I"[#X#Xy#b#X#X"vf =N"## yz/** * Proxy to the app `Router#route()` * Returns a new `Route` instance for the _path_. * * Routes are isolated middleware stacks for specific paths. * See the Route api docs for details. * * @public */ NN"" N N! g vi" ##### iu[ [#N""# #  # # #;#[ #P#P#\#]"vf =engine"## yz /** * Register the given template engine callback `fn` * as `ext`. * * By default will `require()` the engine based on the * file extension. For example if you try to render * a "foo.jade" file Express will invoke the following internally: * * app.engine('jade', require('jade').__express); * * For engines that do not provide `.__express` out of the box, * or if you wish to "map" a different extension to the template engine * you may use this method. For example mapping the EJS template engine to * ".html" files: * * app.engine('html', require('ejs').renderFile); * * In this case EJS provides a `.renderFile()` method with * the same signature that Express expects: `(path, options, callback)`, * though note that it aliases this method as `ejs.__express` internally * so if you're using ".ejs" extensions you dont need to do anything. * * Some template engines do not follow this convention, the * [Consolidate.js](https://github.com/tj/consolidate.js) * library was created to map all of node's popular template * engines to follow this convention, thus allowing them to * work seamlessly within Express. * * @param {String} ext * @param {Function} fn * @return {app} for chaining * @public */ ""   ! g } f 3#1    #8lI#? #1g #Q.iulcallback function required#a  !#[#W'#K8#-V#4 extension"  kf 3iul#ext ##l###f %l### #(#9vf =iu# "## ##### ##)#  #% # # ##"vf =:"-#*#* yz/** * Proxy to `Router#param()` with one added api feature. The _name_ parameter * can be an array of names. * * See the Router#param() docs for more details. * * @param {String|Array} name * @param {Function} fn * @return {app} for chaining * @public */ ::"?"D  : :! g vi"W #S#S#S#S} iu #{ "r   !#m#m #mg x f 4 #"## ## !## "l## g viuiu###  #:"## ##$#&#L# ##h#iviu#.#:""## #### ##O#E #K .#6#6#*#*"vf =D"K #H #H yz/** * Assign `setting` to `val`, or return `setting`'s value. * * app.set('foo', 'bar'); * app.get('foo'); * // => "bar" * * Mounted servers inherit their parent server's settings. * * @param {String} setting * @param {*} [val] * @return {Server} for chaining * @public */ DD"[ "^  D D!E g } f 2"~  E#u #u l?# #u g # iusetting WE# " # # # Q# @K#q \Iviulset "%s" to %o# WX# ,   , E#  X!# # %# &Ivf =iuWX#!"! # !# ! # !, b##!# !# !I#I!I Z!#`!Fm k!l#e!g viuletag fn#|! iu, b#!w wx!#! #!D"w!#s!#s!#s!%#s!&qh" #!q#s!3o#!]m !l-#!g viulC#!iu, b#! !#!#!D"!#!#!#!4#!5h" #"#!B# "m "l>#" g viulz#0"iu, b#O" !#B" #B"D"+"#'"#'"#'"-#'".viu"" #"#"  !#"#":#"M#" l#"#" #"l#"S"" V!#"#"#"y#"zh" ###'"WX#Q!## ##I#m E#_ W XE#h , bE#R #R #H #H "vf =["H$#E$#E$yz/** * Return the app's absolute pathname * based on the parent(s) that have * mounted it. * * For example if the application was * mounted as "/admin", which itself * was mounted as "/blog" then the * return value would be "/blog/admin". * * @return {String} * @private */ [["Y$"]$ [ [! g #d$Fk1"o$#k$#k$ l5#$f %i["$1"$#}$#}$ #}$#}$"$ #$#$#}$##k$>#`$L#P$\#P$\#E$g#E$h"vf =/"%#%#% yz/** * Check if `setting` is enabled (truthy). * * app.enabled('foo') * // => false * * app.enable('foo') * app.enabled('foo') * // => true * * @param {String} setting * @return {Boolean} * @public */ //"%"%  / /! g #%"iuiuW W#%D"%#%#%#%     !!#%#%#%(#%W #%B#%B#%P#%Q"vf =disabled"& #&#& yz/** * Check if `setting` is disabled. * * app.disabled('foo') * // => true * * app.enable('foo') * app.disabled('foo') * // => false * * @param {String} setting * @return {Boolean} * @public */ "&"&   ! g #&#& #iuW W#'D"'#&#&#&#& #&W #&;#&;#&J#&K"vf ="{'#x'#x' yzc/** * Enable `setting`. * * @param {String} setting * @return {app} for chaining * @public */ "'"'   ! g #'iuW W#'l#'D"'#'#'#'#'%#'W  #'>#'>#x'K#x'L"vf =disable"/(#,(#,( yzd/** * Disable `setting`. * * @param {String} setting * @return {app} for chaining * @public */ "C("J(   ! g #X( iuW W#h(l#q(D"c(#_(#_(#_(#T(&#K(W ##:(@#:(@#,(N#,(O"viuyz ""( g vf =iub b-#( !#(#( yz ""( g } f 8f 2b b5-#)l #)#)f 2"#) 9#) #)l?#/)#)#)*g #T)iu[ [9#d)D"_)#[)#[)#[)G#2)><#)n:vi"z) #v)#v)#v)#v):#) TN") N9iu[M#)N")")#)#) #)#)#)%:viuNW#)iuE#) l?#)")  !!#)#) #)")iub@#)NW#)#) #)#)4#)5:#) #):#(9#([ M9#(#(#("#(#.#()-#(b 5-#(9#(9"(z=#(#(#(J#(K"vf ="*#*#*yz/** * Special-cased "all" method, applying the given route `path`, * middleware, and callback to _every_ HTTP method. * * @param {String} path * @param {Function} ... * @return {app} for chaining * @public */ "*"*  !| g vi"+ #+#+#+#+#+ N"+ N|iu[ [|#9+N"2+"*+#&+#&+ #&+#&+#+%#F+b"F+ b|iu |#X+ l?#c+"R+ !#M+#M+ #M+#B+$x +f 4 |#z+"+z z=!#~+#~+#z+#+ !#+#s+"s+l#w+#o+ g viuN#+b#+"+iuiu#+z#+#+ N#+#+#+#+$#+%#+/#j+X#+ #+#+|#*[ |#*#*#*#*"vf =del"+#+#+iudelete",# ,# , lapp.del: Use app.delete instead#,!I", #+ #+#+A#+K#+L"vf =render"-#-#- yz/** * Render the given view `name` name with `options` * and a callback accepting an error and the * rendered template string. * * Example: * * app.render('email', { name: 'Tobi' }, function(err, html){ * // ... * }) * * @param {String} name * @param {String|Function} options or fn * @param {Function} callback * @public */ "-"-  ! g #-"- "-#-#- #-#-"-   #-#-# ." . ".#.#. #.#*."*.   #1.#&.#@. renderOptions"@.  #P.#<.#Z."Z. #V. } f 2#. #.lI#. #.g vf =#.#.#.#.vf =#.#.#. #. #.(#.Kviu#. "/# /# /  !#.#.!#."} _locals">/#:/#:/ g viu#T/ "g/#c/#c/ #N/#N/"#N/##H/-#6/?viu#/ #/#/#/#/} f 0"/#/ #/l#/#/g vf =" 0#/ #/iul# 0 /"0#0#0 #0#/0#/1(#/;##/\} "Y0#L0 #L0g vf =#g0iu #t0#n0#n0 #g0#g06#a03#H06} #0 ##0g #0Ed"0 diul#0 "0#0#0#0#0Cvf =#0iu>#0#0k#0& defaultEngine#0 iul view engine#0  "0#0#0#0# 1># 1iul#1 "1#1#1#1#*1#*1#31dH#0#0{#0#0C} #L1  #["Q1#M1#M1 g #d1pdirs"d1 skf 8iu>"}1#y1#y1  "p1   !#k1#k1 #k1f 6"1>"1#1#1 #1l?#1#1#k10f %f %l directory "#2 >"-2#)2#)2 #2l"#52#2f %f %f %f %l directories "#1iul", "#1:"1iul#1#1 &l?#1"1>"1#1#1 #1#1#1#1##15l" or "#1#1@iuf &"1>"1#1#1 #1l?#2#1>"1#1#1 #1#1bl# 2#1h#k1#`1n#C2HK"C2 Kiuf %f %f %lFailed to lookup view "#S2>#o2#S2 l " in views #v2 #S20st#2#S27  !#M2#I2B#?2Mnvf ="2K#2#2#2#2#2n#2iuK#2#2#2 n#X1ij#H1yC} "2#2 #2g vf =iu>#3#2#2 # 3#2#2#2!#2:C#0@#0viu#63#<3 #K3 tryRender  !!#,3 #,3$#,3%#-#- >#- #- #-#-#-#-"vf =listen"u5#r5#r5 yz/** * Listen for connections. * * A node `http.Server` is returned, with this * application (which is a `Function`) as its * callback. If you wish to create both an HTTP * and HTTPS server you may do so with the "http" * and "https" modules as shown here: * * var http = require('http') * , https = require('https') * , express = require('express') * , app = express(); * * http.createServer(app).listen(80); * https.createServer({ ... }, app).listen(443); * * @return {http.Server} * @public */ "5"5  ! g #5 server"5 iu#5 createServer"5 n no!#5#5#5#5%#5.iu#5 #5 "5"5#5#5 #5#5&#5\#5n#5n#r5{#r5|"zN/** * Log error using console.error. * * @param {Error} err * @private */ "I6"Q6  g } f 3iul#6 "6#|6#|6#|6ltest#6#|6g viuf 90"6K K#6#6 i"6 K#6#6 #6#6"6? ? ?!!#6#6 #6*#6+#6+#x6K#W6n#R6K #@6"z,/** * Try rendering a view. * @private */ "6 "7   g #%7R# S7 g viuK K K &#n7     #e7#e7 #e7&#_7%#Z7K ,%g viu   #;70#D7"37  #/7#/7 #/7#/72#)7)%#!7X #7 < #7 8 #7 0 #6"#z7!     8 \  0 R      M     9 `              X Y ] w z         ' < R S r u v z      $ % ; Z v      ! c {        8 |       N { # $ 8 ` a | * . / Y o   J M  % E  # & ' + y |       C ` a t        / ; G K L m p q u     E H S W X u         = Q W X u          [ _ ` r       % + , R k      / U |              O R         $ ' ( , ` m p    ! W Z   - ? B x {   H     D          + M               $ r        % ) * Q f g              $ _ b         8 C G H o ! (! )! G! \! m! ! ! ! ! " !" V" W" " " " " # # # # # ## &# '# +# Q# u# # # # # # $ $ 4$ @$ D$ E$ b$ w$ $ $ $ $ $ $ $ $ % % '% @% Q% T% o% % % % % % % % % % & & +& <& ?& W& q& & & & & & & & & ' ' ' ' ,' /' J' h' s' w' x' ' ' ' ' ' ' ' ' ( '( +( ,( V( y( |( }( ( ( ( ( ( ( 4) N) k) q) r) ) ) ) ) ) * * * * M* * * * * * * * * + + + @+ g+ h+ + + + + + + + + + <, =, A, u, , , , , , - !- *- -- E- o- - - - - - - . $. :. T. `. a. . . . . . . . / / 4/ J/ r/ v/ w/ / / / / / /0 30 40 F0 c0 {0 0 0 0 0 0 0 0 1 $1 ;1 C1 D1 Z1 1 2 92 2 2 2 2 2 2 2 3 3 3 3 *3 R3 U3 V3 Z3 u3 x3 3 3 4 74 ]4 `4 4 4 4 4 4 5 F5 I5 b5 m5 q5 r5 5 5 5 5 5 5 6 6 /6 ;6 ?6 @6 Y6 v6 6 6 6 6 6 6 6 6 #7 +7 O7 a7 t7 x7 z7#z7 g  #{ FU"{ Ul##wD# K[" [l^##D} f 3#   #lI# #g #Xj" jT## Vg vf =j[#Ciul#Mj[#I#I#C #C ^#;]# JVf 8iuj[#! "   !## #f 3",j[#)#) l#8#)#&} f 3#}  j[#lI# #}g vf =UI#l?## # wvf =[N#T## # w#*r#yIV#P#D#,fns" iuiu # UI#" !## # !##&#1D} f 2"## l##g #?iul'app.use() requires middleware functions#/)  !!#% #!8#I#_Dvi"x #t#t#t#tD#" "## #Dviuyz "" g } f 9f 9# # ##  #X"## ## #D"###g #iu[ [N## I" ## ##*#Lviul.use app under %s#6[#K  X!!#0#0 #0!vf ="X #V#V [#e#V#Vvf =1"q#o#o #{#o#oviu[#yz  mounted_app" "   g #orig" " ###viu#  #yz ""' g vf =":  #7#7 "K #G#G #7#7vf ="`  #]#] "q #m#m #]#]viuK K#@ @  @## # #-i#(K  #x#xX"  # #  # # ## # #@ ##I"## ##viulc##emit"###### #$#$#"## #7#8D# #D#s~#o T#b!! d8< 1#U4 66W!W:8<!!,, r 8>8>8>/WDd8< 1#% aK 66W!WQd8< XW 66W!DW]8<!!,d!W&8<c 1#%8h8h8h /&8< K8p8p8p ...cLd888d sL@ 8a8a8a W|d8< K88 77L8U8UWd8<  88 77P 66W!DW8<c 888Wd8< W88 77/d888c 8H8HWd8< 1#- a 66W!Wd8< X 66W!/W8<!!,d !&8< 888 &8< 4#0#63888 &8< 1#-4#n0#2888 &8< 1#-888 &8< 1#-4#2#K3888 d&8< 1#01#0888 Gs&8< 1#d11#238 8 8  r&8< 1# .1#31888 &8< 1#*. t!t#/#c/#:/888 &8<  t!t#.#.#1.8%8%8% &8< 1#@. t!t#<3 #2 #L0 #/ #/ #/ #T/ #. U1 66W!W78< 1#/8;8;8; 77AA8-8-8- &8<  t!t#3#o2#0#t08I8I8I K&8< 1#C2H4#2#2PU 66W!W[d8< 1#28_8_codeWed8<. `D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\response.js'k !d*!ed8<j 1#8s8scontentDisposition&8<j2z/** * Transfer the file at the given `path` as an attachment. * * Optionally providing an alternate attachment `filename`, * and optional callback `callback(err)`. The callback is invoked * when the data transfer is complete, or when an error has * ocurred. Be sure to check `res.headersSent` if you plan to respond. * * This method uses `res.sendfile()`. * * @public */ download"i2"q2  g -vq`# # #3x" xiulcontent-disposition#k k###8#&"  iul# iul#k####+#'# escapeHtml"'  iul escape-html#< k#4#4##(#Pn"P niuln#_k#W#W#L#l* isAbsolute"l  " iul}# k#y#y#y#h/## onFinished"  iul on-finished# k###(#[" [iul[#k####" iul# k#####'sign" "'iulcookie-signature#k# # #  #,#20 normalizeType"2  "Tiul}#J k#B#B#B #.5#h2normalizeTypes"h "iul}# k#y#y#y!#d7#* setCharset"  " iul}# k####/# statusCodes"   STATUS_CODES" n###$#cookie" iul#k####L" LiulL#$k####1extname"1 "?[#;#; #-#Mmime"M   "XL#T#T #I#c$"c "q[#m#m #_#*vary" -iul-#k###{#E3" f =" ###.#(# " ServerResponse"n####?#J#2!C charsetRegExp"2  F#B;\s*charset\s*=#.&vf = "6## yz_/** * Set status `code`. * * @param {Number} code * @return {ServerResponse} * @public */   ""    O g vf = " ##d dO###S# #S#,O#d ZO#B#B#O#Pvf =links"!6## yz/** * Set Link header field with the given `links`. * * Examples: * * res.links({ * next: 'http://api.example.com/users?page=2', * last: 'http://api.example.com/users?page=5' * }); * * @param {Object} links * @return {ServerResponse} * @public */ b""2 g #Ailink"A lef 9iulLink#Q "L#H#H#Hl5#\#H#="g} lm#fg vf >lm#ll, #t#l #l x#l v#bg#|iulr#f %lm#iul~#:"iuyz "" g #1f %f %f %f %l<#iurel #b b bee## #l>; rel="# ####l##)#;# #H#H"iub# "  ## ###`#e#k#rD"###g#9e#3b e#*#*##vf =L"6##yz/** * Send a response. * * Examples: * * res.send(new Buffer('wahoo')); * res.send({ some: 'json' }); * res.send('

some html

'); * * @param {string|number|boolean|object|Buffer} body * @public */ LL"" L g # chunk" 3 3###)encoding") #% #9e"9 e#5#D"D "N#J#J#@#Z"Z #V #u"u "#{#{#q} f 2" # #l@##g } f 8f 3# iul# # # lnumber# # f 2#  iul?#+ #! #! l#2 # #Dg viulAres.send(status, body): Use res.status(status).send(body) instead# C # # N# Ovf = "' ## ## iul#? #5 #5 ## ## vf =#I iul?#[ #Q #Q #I #I # g viulAres.send(body, status): Use res.status(status).send(body) instead#N C#D #D N#D O vf = " # # iul?# # # # #  #< #r##} f 8f 2#  # l# # f 2" # # l?# # # 3g } #+  #iul Content-Type#5  "0 #, #, #, g viultxt#X "R #N #N #N #N / #F ' #' >% viul4res.send(status): Use res.sendStatus(status) instead#u 6#k #k A#k B% vf = " # # # # # % vf =# iu#  # # # # % #  # E#   #/ eK < l_ #4 g } #H  #iul, #R  "M #I #I #I g viulhtml#w "q #m #m #m #m X #c $Q #D CO h" # O #D PM # K l# g # b # K l# g # f # K l# g }  f 2# l# # g } iu# isBuffer" Buffer {  { # # # g # iu# json" # # # ~ # *t g } #6  #iul, #@  "; #7 #7 #7 g viulbin#g "a #] #] #] #]  #Q ' #2 F #( Xt # r # n g vf =# l5# # #  # n # l h" # l # j #  # } f 2#  # l_ # # g vf =#lutf8### vf =#iul, #- "(#$#$#$##  } f 2#k  #rl_ #{#kg viul, #iu#lutf-8# # #D"###3#4 #B #g` # # } f 3#  # #g } # #iu# y " { | ###g vf =#qiu##{ | #}#y#q##q$ vf =# # ## #( #  vf =e#"## ## viulContent-Length#e#D"####  # # # " # # 6  generateETag"    f 8f 3e#/ #7 #/iulw#L  "G#D#D#D#/'#;} f 8f 2#^   #e lI#v #^"# #iulETag# "####^7g } |f = #iu##  # ##$#&g viul!# #D"####!#%!#Q!#[!#Z} fresh" # #  g vf = " ##ls@#&##+!#'!#%} f 9f 0li@#P "[ #W#W#Pf 0ls@#j "u #q#q#j#P0g viul, # removeHeader" ###!#"D")#%#%#%,#%-!#7!#Vw!#Ziu3!#kL"e#a#a #aw!#ss!#n ~!s!#`#`#U#Uvf =jsonp"=6#:#: yz/** * Send JSON response with JSONP callback support. * * Examples: * * res.jsonp(null); * res.jsonp({ user: 'tj' }); * * @param {string|number|boolean|object} obj * @public */ !!"O"T ! !! g  #b ", "b , ! !#h#^"} f 2" !# #l@##g } f 2# iul?#"# # l## g viulAres.jsonp(status, obj): Use res.status(status).jsonp(obj) instead#C # #N#O"vf = " ##iul#"# # ##"vf =, "# iul?#"# # # # "#"g viul@res.jsonp(obj, status): Use res.status(status).json(obj) instead#B#"# #M#N3"vf = "a #]#]iul?#y"#o #o #]#]3"#"#K"# "#"#?C""? !"I#E#E#;"#U#I"!"U !!iul!#h "cF"#`#`#`#Q("#R"!" !!iul!#  "F"####|$"#,["3" 3!iu, "#!L"#!U"#"  !###%#1"#9g"" !iuiul# "F"###""####.#>"} #/ #iul, #9 "4#0#0#0g viulX-Content-Type-Options#Ylnosniff#s D"T#P#P#P-#P.|"viul, #l!#D"###,#-|"#Jju"#+"} iuj"# "     ## #g vf =j"#iul#j"## ##"#!"#>"} f 8f 2# j"#$l_ #1#f 3"Ej"#=#=l#Q#=#5g vf =charset"^#Z#Z l #i#Z#Z"viul"#l"# D"z#v#v#v-#v."viul, #ltext/javascript#D"###+#,"vf =j"#iu# [^\[\]\w$.]gl5#("j"###$#/#0"vf =3^"#riu# \u2029"l"# "iu# \u2028"l"# "3^"#y#y#y)#y8#yN#rU#rV"vf =3^"#]f %f %f %f %f %f %l /**/ typeof #dj"#u#dl === 'function' && ##d3j"##d>l(##dD3^"##dKl);##dR#]Y#]Z"#Tg"#"#iu3^"#L"## #"#Z~!#U  "!#F#F#:#:vf = sendStatus" 6##yz/** * Send given HTTP status code. * * Sets the response status to `statusCode` and the body of the * response to the standard description from node's http.STATUS_CODES * or the statusCode number if no description. * * Examples: * * res.sendStatus(200); * * @param {number} statusCode * @public */ """1 ";  " "" g #P4#3"P 3"f 9iu   "#c  #W #Wiu  ##y 0 0 0#r#r#W-#L9#vf = " ##  ## ###viul5 #"## ####iu3##L"## ###H"#<   #"#(#(##vf =sendFile"2% 6#/%#/% yz /** * Transfer the file at the given `path`. * * Automatically sets the _Content-Type_ response header field. * The callback `callback(err)` is invoked when the transfer is complete * or when an error occurs. Be sure to check `res.sentHeader` * if you wish to attempt responding, as the header and some data * may have already been transferred. * * Options: * * - `maxAge` defaulting to 0 (can be string converted by `ms`) * - `root` root directory for relative filenames * - `headers` object of headers to serve with file * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them * * Other options are passed along to `send`. * * Examples: * * The following example illustrates how `res.sendFile()` may * be used as an alternative for the `static()` middleware for * dynamic situations. The code backing `res.sendFile()` is actually * the same code, so HTTP cache support etc is identical. * * app.get('/user/:uid/photos/:file', function(req, res){ * var uid = req.params.uid * , file = req.params.file; * * req.user.mayViewFilesFrom(uid, function(yes){ * if (yes) { * res.sendFile('/uploads/' + uid + '/' + file); * } else { * res.send(403, 'Sorry! you cant see that.'); * } * }); * }); * * @public */ *#*#"G%"O% *# *#-# g  #q%3#"q% -#  -##x%#m%1##%9#"% -#"%#%#%#%1##% ?#"% -##%#%1##%D#@"% @-#@"%<##%#%#%1##%J#"% -#f 9  -##%#%#% #%1#} #% #[ [-##%g #%AV#iul)path argument is required to res.sendFile#&+  #% #%:#%KR##%V1#} f 2#b& P##i&lI#u& #b&g vf =6##&P##&#&#&e#vf =M##&#&#& #& e##&(`##^&K1#} f 8#&  #>"&M##&#& #& #iu[U##& #& #&#&g #&Mz#iul5path must be absolute or specify root to res.sendFile#&7^##& #&F#&Wo##&|1##I'#"I' -#iu[U##^'3 3 3#T' #T'#E'1##k' #file"k' #-#iu<##w'##|'M##'L L#r'#r'#g'%1#viuB##'###'M##'yz ""' g }  6#-##'g #'iuK K##'##'#' ##'##'#} f 8K##'f 2d"'K##'#'lEISDIR#(#'#'g #(i@ @G#-##(#(##(##'0#} f 8f 8K##J(f 3d"T(K##Q(#Q(l ECONNABORTED#^(#Q(#J("f 3syscall"s(K##p(#p( lwrite#(#p(#J(=g viuK##(@##(#( #( ##(##F([##'##'K ###'#'sendfile # ##'#'#' 1##i%@-##P%[ U#-##V% P#-##_% 8#-##>%k#>%k#/%z#/%{vf =#". 6#.#. yz /** * Transfer the file at the given `path`. * * Automatically sets the _Content-Type_ response header field. * The callback `callback(err)` is invoked when the transfer is complete * or when an error occurs. Be sure to check `res.sentHeader` * if you wish to attempt responding, as the header and some data * may have already been transferred. * * Options: * * - `maxAge` defaulting to 0 (can be string converted by `ms`) * - `root` root directory for relative filenames * - `headers` object of headers to serve with file * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them * * Other options are passed along to `send`. * * Examples: * * The following example illustrates how `res.sendfile()` may * be used as an alternative for the `static()` middleware for * dynamic situations. The code backing `res.sendfile()` is actually * the same code, so HTTP cache support etc is identical. * * app.get('/user/:uid/photos/:file', function(req, res){ * var uid = req.params.uid * , file = req.params.file; * * req.user.mayViewFilesFrom(uid, function(yes){ * if (yes) { * res.sendfile('/uploads/' + uid + '/' + file); * } else { * res.send(403, 'Sorry! you cant see that.'); * } * }); * }); * * @public */ #"". g #;.#";. #  ##B.#7.##R.#"R. #"\.#X.#X.#N.##h. #"h. ##n.#d.##z.#@"z. @#@".##.#.#v.##.#". #f 9  ##.#.#. #.#} f 2#. $#.lI#. #.g vf =##.$#.#.#.$vf =## /#/# / # / $#.($#.K##9/$#"9/ ##iu##E/[ [##J/##P/L L#@/#@/#5/!#viu##q/#$#v/##|/yz ""/ g }  ###/g #/iuK K%$#/*$#/#/ +$#/($#/&$} f 8K1$#/f 2d"/K1$#/#/l##/#/#/g #/i@ @###/#/:$#/3$#/0&$} f 8f 8K1$#0f 3d"0K1$#0#0l ECONNABORT#(0 #0#0 f 3#";0K1$#80#80 l##H0#80#0;g viuK1$#^0@?$#Y0#Y0 #Y0 M$#Q0@$#0Y&$#/%$#/K 1$%$#/#/# ###h/#h/#h/##3.>##.[ $## . $##). ###.a#.a#.p#.qvf =#"w0 6#t0#t0 iu#"0 6#0#0 l&res.sendfile: Use res.sendFile instead#0(I"0 #0 #0#0L#t0[#t0\vf ="T2 6#Q2#Q2 y#`2#Q2#Q2vf = contentType"5 6#5#5f ="56#5#5yz p$"5 "5 p$ p$v$ g #6@{$ct"6 ~$v$kf 2iul^# 6"6 v$#6#6 #6#)6 &l?#*6#6$#J6iu$#>6lookup"66   !#26#26 #26#6;# 6Ey$#S6$iul, #c6~$$#s6D"^6#Z6#Z6#Z6y$#6sv$#6 $v$#5#5#5#5#5vf =format"<6#<#< yz /** * Respond to the Acceptable formats using an `obj` * of mime-type callbacks. * * This method uses `req.accepted`, an array of * acceptable types ordered by their quality values. * When "Accept" is not present the _first_ callback * is invoked, otherwise the first match is used. When * no match is performed the server responds with * 406 "Not Acceptable". * * Content-Type is set for you, however if you choose * you may alter this within the callback using `res.type()` * or `res.set('Content-Type', ...)`. * * res.format({ * 'text/plain': function(){ * res.send('hey'); * }, * * 'text/html': function(){ * res.send('

hey

'); * }, * * 'appliation/json': function(){ * res.send({ message: 'hey' }); * } * }); * * In addition to canonicalized MIME types you may * also use extnames mapped to these types: * * res.format({ * text: function(){ * res.send('hey'); * }, * * html: function(){ * res.send('

hey

'); * }, * * json: function(){ * res.send({ message: 'hey' }); * } * }); * * By default Express passes an `Error` * with a `.status` of 406 to `next(err)` * if a match is not made. If you provide * a `.default` callback it will be invoked * instead. * * @param {Object} obj * @return {ServerResponse} for chaining * @public */ $""< g  #&<$"&< $"0<#,<#,<#"<$#<<$@"<< @$@"F<$#C<#C<#8<$#T<$"T< $default"\< $#Y<#Y< #P<$} $#l<g v#p< $"z<$#w<#w< #p<$#p<$#h<$#<$ "<  $iu$#< "< #<#< #<#<$#<9$2"< 2$kf 6"< $#<#< l#<#<l#<iu $#<accepts"<$#<#< #<#<3#<>$viulAccept#<-"<#<#< #<#<$} f=2$#=g } =$#o=g #=!$K"= K$iulNot Acceptable#=  #=#=#=&$vf = "=K$#=#= f = "= K$#=#=l`y@#=#=#=!#="$vf =types"=K$#=#= iuyz "" > g #>">a a%#>#>%#>%#>a  %%#>#>">iu $#= #=#=#=#=7#=C#=D$viuK$#.>@$#)>#)> #)> $#=$g vi$#y=#y=#y=%#s=$#k=$#k=$g viul, #=":=iu2$#6= #(= #(=#(=D"=#=#=#=2#=3%viu$#P=#U=@$#[=iu2$#K=$#G=#G=#G=#G=%# =\$#=7$#;> #B>$#<+$#< $$#<8#<8# 6#>#>yz/** * Set _Content-Disposition_ header to _attachment_ with optional `filename`. * * @param {String} filename * @return {ServerResponse} * @public */ =%=%"? " ?  =% =%@% g } filename H%@%# ?g viuiuH%I%#B? #:?#:?"4?#0?#0? #0?#0?J%#*?'F%#?5D%viulContent-Disposition#^?iuH%I%#?x x#u?#u?D"Y?#U?#U?#U?=#U?>D%#? #?D%#?@%#?H% I%@%#>#>#>#>vf =append"/A6#,A#,A yz/** * Append additional header `field` with value `val`. * * Example: * * res.append('Link', ['', '']); * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); * res.append('Warning', '199 Miscellaneous warning'); * * @param {String} field * @param {String|Array} val * @return {ServerResponse} for chaining * @public */ i%i%"BA"HA  i% i%l% g #]Ar%prev"]A u%l%iufield z%l%#mA "hA#dA#dA#dA#YAp%#{A ~%"{A l%,   , l%#A#wAp%} u%v%#Ag vf =%#Akiuu%v%#A "A   "#A#A #Akiu, %#B "A %#A#A #Aeuu%v%#'B, %#-B#&B iu, %#B"Beuu%v%# B# B# B # B#A;iu, %#A"Au%v%#A#A #A#Aj#Ar#As%#A%#Ap%#:Biuz%{%#JB%#QBD"EB#AB#AB#ABp%#UAl%#IAz% {%l%#PA, %l%#9A!#9A!#,A.#,A/vf =D"C6#C#Cf =header"C6#C#C yz %%"D" D  % %% g } Ef 2"*D %#!D #!Dl@#6D#!Dg wz% z%%#E#E%2"E 2%#E%g viu2%#Eiu2%#Ez%%#E#E D"E#E#E#E#E%#E(%#E?%#EI%g #CDF%"CD %kiu,   , %#YD "PD   "#KD#KD #KDiu, %#D0 0##~D#~D iu0%#nD"iD, %#fD#fD#fD#KD>#?DK%} f 8f 2i "D z%%#D#D#Dl content-type#D#D&#D #iu%#D "DF FG#D #D#D#DDg # E3&"" E "%iuiul#9Eiul;#4Esplit"-E%#(E#(E #(E#(E$" Echarsets"E    !#E#E #E#E)#E8&} "&#HEg vf >%#QEf %l ; charset=#ZE i "pE "&#iE#iE#iE#ZE$#QE-#QE.&#QE.&#DE;&#D%#D%viuz%%#E%#E setHeader"E #E#E#E#E%#9Ds%#D%#E #F%#D%# Dz% %%#D, %%#C#C#C#C&#C'vf = "wF6#tF#tFyzc/** * Get value for header `field`. * * @param {String} field * @return {String} * @public */  ""F g #Fiuz% z%8&#F getHeader"F #F#F#F:&#F#8&#Fz% @&8&#~F2#~F2#tF<#tF=vf = clearCookie"AG 6#>G#>Gyz/** * Clear cookie `name`. * * @param {String} name * @param {Object} options * @return {ServerResponse} for chaining * @public */ I&I&"YG "dG I& I&L& g #|G:R&"|G L&iu#G##Gexpires#Giul?#G' ' '#G#G #G [#Gl^#G  L&#G #G#G3#xG?P&#G#iu L&#Gl5#GU&#G"G#G#G #GP&#tGlL&#eG n&L&#kG g&L&#PG#PG#>G#>Gvf ="LJ6#IJ#IJ yz/** * Set cookie `name` to `value`, with the given `options`. * * Options: * * - `maxAge` max-age in milliseconds, converted to `expires` * - `signed` sign the cookie * - `path` defaults to "/" * * Examples: * * // "Remember Me" for 15 minutes * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); * * // save as above * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) * * @param {String} name * @param {String|Object} value * @param {Options} options * @return {ServerResponse} for chaining * @public */ ""_J g  #~J&"~J {&iu#J  {&#J #J#J#zJ}&#J&secret"J &{&&"J"J#J#J#J#J}&#J&signed"J &{&&"J&#J#J #J}&} f 8&&#J#J #&&#J#Jg #JF&iul2cookieParser("secret") required for signed cookies#K4 $#J#J?#JP&#Jg}&#GKV&, "GK , {&kf 2#MK    {&#TKl#^K#MKiu&#K0 0##K#K f %lj:#mKiu&#K"xK  !#tK#tK#tK#mK#MKP#CK[}&} &&#Kg vf =, &#Kf %ls:#Kiu, &#K&&#K #K#K#K#K#K&#K)&#K5}&} f ;lmaxAge#K&#K#Kg vf =\&"K&#K#K iuf %inow"L' 'b&#L#L#L &" L&#L#L #L'&# L#L"#K1#K2&vf A&"2L&#.L#.L l@@#=L#.L#.L&#KU&#Kk}&} f 0["RL&#NL#NL l#[L#NLg vf =["kL&#gL#gL l^#sL#gL#gL&#aL&#JL1}&viul Set-Cookie#L iu {&#Liu, &#L0&#L#L &#L serialize"L   #L#L#L)i%"L#L#L #LD#LE}&#L #L}&#vJ`{&#`J &{&#fJ &{&#mJ &{&#VJ#VJ#IJ#IJvf =location"BN 6#?N#?N yz/** * Set the location header to `url`. * * The given `url` can also be "back", which redirects * to the _Referrer_ or _Referer_ headers or "/". * * Examples: * * res.location('/foo/bar').; * res.location('http://example.com'); * res.location('../login'); * * @param {String} url * @return {ServerResponse} for chaining * @public */ ''"WN"_N ' '' g #mN 'loc"mN '' '#sN#iN'} f 2"'#Nlback#N#Ng vf =' '#Nf 9iulReferrer#N  "N"N#N#N#N #Nl^#N#N#N%#N&('#N0#'#ND'viulLocation#O ' '#OD"O#N#N#N#N'#O #"O'#eN'#`N "''#NN#NN#?N#?Nvf =redirect"P 6#P#P yz/** * Redirect to the given `url` with optional response `status` * defaulting to 302. * * The resulting `url` is determined by `res.location()`, so * it will play nicely with mounted apps, relative paths, * `"back"` etc. * * Examples: * * res.redirect('/foo/bar'); * res.redirect('http://example.com'); * res.redirect(301, 'http://example.com'); * res.redirect('../login'); // /blog/post/1 -> /blog/login * * @public */ E'E'"Q"Q E' E'H' g  #Q N'address"Q Q'H' H'#&Q#QL'#1QU'3"1Q 3H'#-Q L'#=Q Y' "=Q  H'lr@#FQ#9QL'} f 2"sQ H'#jQ #jQl@#Q#jQg } Qf 2#Q iul#Qb'#Q #Q l#Q#Q g viul@res.redirect(url, status): Use res.redirect(status, url) instead#RB #Q #QM#QNn'vf = \'#SRiul?#fRb'#\R #\R #SR#SRn'#Qyf'g vf = \'#Qiul#Qb'#Q #Q #Q#Q~'vf =Q'R'#Qiul?#Qb'#Q #Q #Q#Q~'#QBf'#Qd'#Q^'#fQ L'viuQ'R'#R'"R #R#R #R#RL'vf =Q'R'#Riul:'#R  "R#R#R#R#R#RL'viu#SF# Sdtext# Syz '""S g vf =3 3X'H'#!Sf %f %iu   \'H'#4S  #(S #(Sl. Redirecting to #>S#(S)iuQ' Q'R'H'#^S3 3 3##TS #TS#(S>#!SE#!SF'#ST'#S^#S^#tS^ #tSyz ^ ""S g #S'u"S ''iuQ' Q'R'H'#S  #S #S#S'vf =3 3X'H'#Sf %f %f %f %f %f %l

#Siu   \'H'#S '#S #S#Sl. Redirecting to #S#SE''#S#SIl

#T #SV#S]#S^'#S'#zS#zS#T+$#Tyz $""+T g vf =3 3X'H'#5Tl5#) g vf =( (((#\ l#]#\#\A)#\>)#\.(z onfinish"%]"-] I)H) g } f 8K KH)#=]f 2d"G]KP)#D]#D]l ECONNRESET#Q] #D]#=] g #_]i( ( (((#f] #f] V)#_]M)#9]9K)} KP)#{]g #]iuKP)#]  ((#]#] _)#]])#w]K)}  ((#]g #]k)#]h)#]K)viuyz ""] g } f 8f 3( ( ((((#] l#]#]#] # j)(#]#]g vi( ([)(#] #] #] )#^)#].u)#]Ps)} ~)#-^g #3^)#3^)#)^s)vf =~)#A^l#H^#A^ #A^ s)vi  (((#T^#T^ #T^ s)#]r)#]#]   #] #]#]K)#3]8H)#.]K P)H)#]O(z onstream"^"^ )) g vf =( (((#^ l#^#^#^)#^)#~^/(viul directory#^ ( ((#^ "^#  #(#^#^#^!#^"(viul#^,) ,)(#^"^#)#^#^#^#^(viul#^g)#_"^#)#^#^#^#^(viul##_?) ?)(#_"_#)# _# _# _# _(viulstream#/_) )(#9_"+_#)#'_#'_#'_#'_(viu (#Q_I) I)(#V_ #F_ #F_#F_(} headers"o_  (#h_#h_g viul)#_ yz )"_"_ ) )() g #_)"_ ))"_  )((#_#_#_)#_) "_  )iu)#` " `   #`#` #`#_)x D`f 4 )#/`"7` )#3`#3` #/`#@` !)#@`#(`*"(`)l#,`#$` )g #S`  *k"S`  *)iu)#\` )#W`#W`#O`*viu **#v`iu **#}`)#y`#y`,&"k`  )#h`#h` #h`#h`*#E`D)#`j)#_)#_ *)#_#_"_#)#_#_#_#_)#y_)#d_1(viu)#`pipe"`#)#`#` #`#`(#Z2(#dZ )(#iZ# )(#oZ )(#xZ ((#RZb#`     8 m } # L h     . d     - I _ {             ) - . U V Z p s            > A N Q c          ; ` z       % ( 5 8 ^         # 3 > T ` a o      >  C _ e i j # H ` f g + > e * S o y   > ? c        * k           X        + , J        4 N ^ i x               E P T U u       o     6 < @ A O e      ! S W X r u v z        * 5 9 : \ m n     W }     & * + 9 O z     ) L           V r     - . n ~     Y          B            J           K ! :! =! I! L! ! ! ! T" W" " " " " " # \# # # # # $ "$ Y$ o$ $ $ $ % % % % *% .% /% k% % % % % % % % 3& 7& 8& \& & & & & & & &' *' +' C' e' ' ' ' ' ' ( ( B( ( ( ( ( ( ( ( ( ( ) f) ) ) * * * * b* * * &+ )+ V+ Y+ f+ i+ + + ., i, l, , , , , +- A- |- - - - - - - - . . 5. L. b. t. . . . . . / / / / 3/ W/ X/ f/ / / / / 0 S0 d0 j0 p0 s0 t0 0 0 0 0 1 1 P1 1 1 2 2 >2 A2 L2 P2 Q2 2 2 2 2 2 3 3 /3 33 43 c3 u3 3 3 3 3 3 4 >4 A4 B4 F4 4 4 4 4 4 5 $5 =5 b5 z5 }5 5 5 5 5 5 5 6 ,6 D6 P6 Q6 x6 {6 |6 6 6 6 6 7 77 l7 7 7 7 7 '8 d8 8 8 8 8 8 8 8 9 .9 99 <9 c9 9 9 9 9 9 : : : 1: L: W: Z: t: : : : : : : : : %; O; y; ; ; ; ; ; ; < < < 6< M< N< f< < < < < < < < < < = C= b= u= = = = = %> 4> 8> 9> H> K> L> P> > > > > > > > ? ,? N? R? S? ? ? ? ? ? ? ? ? ? ? C@ @ @ @ @ @ A 'A +A ,A WA uA A A A A A B 3B 7B 8B YB \B ]B aB B B B B B B C LC OC mC pC C C C C C C C D ;D ^D vD D D D D >E E E E E E E E E E F F F F 4F 7F PF dF oF sF tF F F F F F F F F G .G 9G =G >G vG G G G G G G "H %H 1H 4H wH H H H H H H WI ZI qI I I I I J 9J DJ HJ IJ xJ J J J J J N ?N gN xN yN N N N N N N O (O +O ,O 0O oO O O O O P P P #P CP mP P P P P P P Q +Q 7Q KQ LQ dQ Q Q Q Q Q MR jR pR tR uR R R R R R S S hS oS pS S S T T T /T @T FT LT MT ZT vT T T T T T U U U U U NU nU qU U U U U U U V *#2lI#2 #2g vf =6*# 3H%>*#3# 3# 3D*vf =<*#"3l#)3#"3 #"3 D*#3+?*#2O1*#i3KN*)"i3 )#s3A#y37Z%#y3iuf 9<*#3[ [#3#3 x x#3#3 #e3P1*#3^*fullPath"3 a*iu[[*#3 '#3#3 #31*#4;iua*b*#4#!4##4)##4)Q*#,46*#74*#" 4 # 4# 4 # 431*#2#r2[ [*#x2H% >*#2 8*#`2opOd! &8<j a* 66W!W*d8<j X* 66W! W*d8<j *8*8*j 77**j*8*8*jW*d8<j  8*8*j 77***jP* 66W! W*d8<j 1#8*8*jW*d8<j *8*8*j 77**j *d8<j *8*8*OOx*z*z* 3s*x*x* 2sO 8~*8~*8~* jOd&8<j* 1#8*8*8* j^x*x*x***d888ed!b&8<j2eex*** 4sa* 66W!W*d8<j X* 66W! W*d8<j *8*8*j W*8<j* 8+8+8+jDW+8<j* 8 +8 +8 +j 77++j*8*8*jW+d8<j  8+8+j 77+++jP+ 66W!DW%+8<j* 8)+8)+8)+j W.+8<j* 82+82+82+jW7+d8<j *8;+8;+j 77?+?+jb+d888*e *x*d!&8<jF+ 4##8K+8K+8K+ j***F+aQ+ 66W!WW+d8<j X]+ 66W! Wc+d8<j R+8g+8g+j 77k+k+jQ+8[+8[+jWp+d8<j  8t+8t+j 77x+x+x+jP{+ 66W!W+d8<j ]+8+8+j 77++j{+d8<j 38+8+F+ d888G+ 5sQ+* 4##8*8*8* jl&8<j* 1#A t!t##l#f38+8+8+ jkx*x*x*G+**d888d !L&8<j a+ 66W!W+d8<j X+ 66W !W+8<jx*++ 6s+* 8+8+8+j W+8<j+ 8+8+8+jW+8<j+ 8+8+8+jW+8<j+ 8+8+8+jC!W+8<j+ 8+8+8+jDW+8<j+ 8+8+8+j W+d8<j +8+8+j W+8<j+ 8,8,8,j W,8<j+ 8 ,8 ,8 ,jW,8<j+ 8,8,8,j 77,,j+8+8+jW,d8<j  8#,8#,j 77',',',jP*, 66W !DW0,8<j+ 84,84,84,j W9,d8<j+  t!t## ## # 4#W#q8=,8=,jWC,8<j+ 8G,8G,8G,jWL,8<j+ 8P,8P,8P,jWU,8<j+ 8Y,8Y,8Y,jW^,d8<j +8b,8b,jC!Wf,8<j+ 8j,8j,8j,j Wo,8<j+ 8s,8s,8s,j Wx,8<j+ 8|,8|,8|,jW,8<j+ 8,8,8,j 77,,jL*,?,+d8<j+  t!t# #Q #5 # #! # # ,8,8,d8<j +,8,8,+ 8+8+8+ j&8888 j &8888 j&8<j+ 1#D4# #8,8,8, j &8<j+ 1# 64#e # 8,8,8, j e&8<j+ 1#/8,8,8, j&8<j+ 1# t !t##### ## # # # # # # 8,8,8, j&8<j+ 1#u1#D8,8,8, j3&8<j+ 1#8,8,8, jm!,&8<j+  t!t###8,8,8, jx*x*x* d8<j 1#I 8,8,+++ ] ]  d8<j 1# 8,8,+++  d8<j 1# 38,8,+++    d8<j 1#_- 8-8-+++ d8<j+ 1#4#r#8 -8 -,,,   < < q q   d8<j 1#q8-8-+++ d8<j 1#"8-8----         ed8<j+ 1#1#8&-8&-+++     d8<j+ 1#1#8/-8/-+++     d8<j 1#388-88-+++    ++d888s!d! &8<j aG- 66W!WM-d8<j XS- 66W!LWY-8<js!s!x*A-A- 7sH-* 8]-8]-8]-j Wc-d8<j G-8g-8g-jWk-8<j_- 8o-8o-8o-j Wt-8<j_- 8x-8x-8x-jDW}-8<j_- 8-8-8-j 77--jH-8Q-8Q-jW-d8<j  8-8-j 77---jP- 66W!LW-8<j_- 8-8-8-j W-d8<j 4#u#8-8-jW-8<j_- 8-8-8-j W-8<j_- 8-8-8-jW-d8<j S-8-8-jDW-8<j_- 8-8-8-j 77--j -?-H-d8<j_-  t!t#( # # # # -8-8-d888_-s! 8E-8E-8E- js!3&8<j_- 1#,1#k38-8-8- j!!&8<j_- 1#1#8-8-8- j!-, &8<j_- 1#{ 1#8-8-8- j{!&8<j_- 1#U4#v#8.8.8. j!!&8<j_- 1#k#1#8 .8 .8 . j!&8<j_- 1#8.8.8. j!x*x*x* , d8<j 1#"8.8.A-A-A- q q 4 4_-H-d888!d !3&8<j!!x*&.&. 8sa-. 66W!W3.d8<j X9. 66W!LW?.8<j,. 8C.8C.8C.j WH.d8<j ..8L.8L.jWP.8<j,. 8T.8T.8T.j WY.8<j,. 8].8].8].jDWb.8<j,. 8f.8f.8f.jWk.8<j,. 8o.8o.8o.j 77t.t.j-.87.87.jWy.d8<j  8}.8}.j 77...jP. 66W!W.d8<j 9.8.8.j W.d8<j 4#]#8.8.jW.8<j,. 8.8.8.jDW.8<j,. 8.8.8.jLW.8<j,. 8.8.8.jW.8<j,. 8.8.8.j W.8<j,. 8.8.8.j"W.d8<j 1#Z _. 8.8.j 77..j!.?.-.d8<j,.  t!t# # #o # # .8.8.d888,.! * 1#,4#y#38*.8*.8*. j]"!&8<j,. 1#1#8.8.8. jT"., &8<j,. 1#b 1#8.8.8. j"&8<j,. 1#? t!t###`8.8.8. jE"&8<j,. 1#9 t!t##=#$##8/8/8/ ji"!&8<j,. 1#U#1#8/8/8/ jK"!&8<j ..8/8/8/ j!&8<j,. 1#h8/8/8/ j"x*x*x* , d8<j 1# 8(/8(/&.&.&.     d8<j 1#80/80/&.&.&.     d8<j,. 1#4#u#88/88/&.&.&. 3d8<j,. 1#r1#8B/8B/5/5/5/ 3d8<j 1#]38L/8L/?/?/?/           + +,.-.d888"d!3&8<j""x*U/U/ 9sa\/ 66W!Wb/d8<j Xh/ 66W!LWn/8<j[/ 8r/8r/8r/j Ww/d8<j ]/8{/8{/jW/8<j[/ 8/8/8/j 77//j\/8f/8f/jW/d8<j  8/8/j 77///jP/ 66W!LW/8<j[/ 8/8/8/j W/d8<j 1#8/8/jW/8<j[/ 8/8/8/jW/d8<j h/8/8/j 77//j"/d888[/" * 1#P41#8Y/8Y/8Y/ j# &8<j[/  t!t# #y #c 8/8/8/ j&#"&8<j ]/8/8/8/ j"x*x*x*[/\/d888-#d !#&8<j-#-#x*// :sa/ 66W!W/d8<j X/ 66W!W/8<j/ 8/8/8/j W0d8<j /8080j 77 0 0j/8/8/jW0d8<j  8080j 77000jP0 66W!W 08<j/ 8$08$08$0jW)0d8<j /8-08-0j 771010j*#0d888/-# * 1#k' 1#'8/8/8/ j#&8<j/ 1#I'1#|'38?08?08?0 j#[&8<j/  t!t#^'#&#%8H08H08H0 j#&8<j/ 1#x%8P08P08P0 j#&8<j ! ###x*#d!K&8<j ![0 ###x*\0\0\0 sbU KYd8<j (((x*(d!K&8<j2((x*k0k0 Qsas0 66W!Wy0d8<j X0 66W! W0d8<j t08080j 7700js08}08}0jW0d8<j  8080j 77000jP0 66W!W0d8<j 08080j 7700j(0jZj4#f] #] 0d888 bc!bb cj0d8<j2H)H)x*H)d!K&8<j0  t!t#]#{]#D]#=]808080 j)(d !#&8<j ! (((x*000 sbP0 66W!W08<j##x*#d !#&8<j0 1#9/1#v/808080 j$[&8<j0 1#J/808080 jY$&8<j0 1#B.808080 j[$&8<j ! %$%$%$x*%$d!K&8<j !1 %$%$%$x*111 sbe0 KYd8<jj0 8 18 1  1K1&8<j1  t!t#^0#80#0#0#/#/#/U818181 jU$d888a1 66W!W$1d8<j X*1 66W! W01d8<j 1841841j 778181j18(18(1jW=1d8<j  8A18A1j 77E1E1E1jPH1 66W!WN1d8<j *18R18R1j 77V1V1jH1jZj4#O[#`\ Y1d888 bc!bb c1d8<j )))x*)d!K&8<j2))x*i1i1 Ssaq1 66W!Ww1d8<j X}1 66W! W1d8<j r18181j 7711jq18{18{1jW1d8<j  8181j 77111jP1 66W!W1d8<j }18181j 7711j1jZj4#_#] 1d888 bc!bb ch1d8<j0 8181p1) ((x*00 Psa1 66W!W1d8<j X1 66W! W1d8<j 18181j 7711j18181jW1d8<j  8181j 77111jP1 66W!W1d8<j 18181j 7711j#1jZj4#'#h/ 1d888 bc!b0c0d8<j0 8282b0U 2 66W!)W28<j (((x*000 s2d8<j/ 8282  0I)&8<j !021 1#V_a%2 66W!W+2d8<j X12 66W! W72d8<j %28;28;2j 77?2?2j&28/28/2jWD2d8<j  8H28H2j 77L2L2L2jPO2 66W!WU2d8<j 128Y28Y2j 77]2]2jI)O2jZj1#V_ `2d8880H) 8!28!28!2 jH)&8<j2 1#V_%28l28l28l2 jH) 0&8<j !0201 4#_#]r18u28u28u2 j)&8<j2 1#_r18~28~28~2 j) 0(&8<jr)r)x*r)d!000 d8<j 1#A^*8282222 e^ e^ L^ L^2a2 66W!W2d8<j X2 66W! W2d8<j 28282j 7722j28282jW2d8<j  8282j 77222jP2 66W!W2d8<j 28282j 7722j2d8882r) d8882 Ws20 1#] 828282 j(&8888 j( 0(&8<j202 4#f] #] t0828282 j(&8<j t0828282 j( 0&8<j !021 4#Q_#`00828282 j**&8<j2 4#Q_#`0828282 j** 0,)&8<j !021 1#^a 3 66W!W3d8<j X3 66W! W3d8<j  38"38"3j 77&3&3j 38383jW+3d8<j  8/38/3j 77333333jP63 66W!W<3d8<j 38@38@3j 77D3D3j,)63jZj1#^ G3d888+)+)x*+)d!000 d8<j 1#\*8U38U3O3O3O3 \ \ \ \N3 3d888O3 Ts 31+) 838383 j+)&8<j2 1#^ 38c38c38c3 j+) 0)&8<j !021 1#9_ap3 66W!Wv3d8<j X|3 66W! W3d8<j p38383j 7733jq38z38z3jW3d8<j  8383j 77333jP3 66W!W3d8<j |38383j 7733j)3jZj1#9_ 3d888))x*)d!000 (d8<j 1#^ *8383333 ^ ^ ^ ^3q3d8883 Xsq31) 8l38l38l3 j)&8<j2 1#9_p3838383 j) 0?)&8<j !021 1#_a3 66W!W3d8<j X3 66W! W3d8<j 38383j 7733j38383jW3d8<j  8383j 77333jP3 66W!W4d8<j 38484j 77 4 4j?)3jZj1#_ 4d888>)>)x*>)d!000 (d8<j 1#\ &8484444 ] ] ] ]43d8884 Us31>) 838383 j>)&8<j2 1#_38+48+48+4 j>) 0(&8<j !021 1#^ a84 66W!W>4d8<j XD4 66W! WJ4d8<j 848N48N4j 77R4R4j948B48B4jWW4d8<j  8[48[4j 77_4_4_4jPb4 66W!Wh4d8<j D48l48l4j 77p4p4j(b4jZj1#^ s4d888((x*(d!K&8<jz4 1#[4#[#\U848484 j)000 d8<j 1#[*8484{4{4{4 \ \ [ [z494d888{4 Rs941( 844844844 j(&8<j2 1#^ 84848484 j( 0&8<j !h1j020N3p1z4r0 1#Z t!t#-^#]#]#\#=\#[#Z&848484 j(&8<j 1#Z &848484 j( 0&8<j !h1j02N3p1z4r0  t!t#T^#\#`\#[#O[a4 66W!W4d8<j X4 66W! W4d8<j 48484j 7744j48484jW4d8<j  8484j 77444jP4 66W!W4d8<j 48484j 7744j4jZj4#O[#`\ 4d888 bc!bbb1 c[0d8<jh1 8585d0cc0f0##x*\0\0 ;s4/# 1848484 j-*&8<j 48 58 58 5 j-* 0&8<j !02))x*)d!&8<j5 1#h`858585 j*&8<j5 1#_4#`#y`8#58#58#5 j) *&8<j5 1#S` 4#v`#}`8,58,58,5 j *)&8<j a75 66W!W=5d8<j XC5 66W! WI5d8<j 758M58M5j 77Q5Q5j858A58A5jWV5d8<j  8Z58Z5j 77^5^5^5jPa5 66W!Wg5d8<j C58k58k5j 77o5o5j)a5d8885) 855855855 j) &8<j5 1#_4#W`#3`@5>>9=j5 9595)>999 66W!W58<j5 858585jW5d8<j 8585j 7755j8{58{58{5 j)&8<j5 1#(` t!t#/`#@`#\`858585 j*000585d8885 Ys8511 4#h_#_ 2U5 66W!)W58<j0 858585j 7755j$858585 j,*&8<j2 1#h_ 2858585 j,* 0#0&8<j2  t!t#`#_#'_# _#^#^#^858585 j+*d88811** 828282j>W58<j/ 858585j 7755jQ#4 -c221( *h1 1#i\8m18m18m1 j*)000 d8<j 1#O\*8585i1i1i1 r\ r\ Z\ Z\p1q1d888i1i1 s11  i1Kk1&8<jh1 1#i\868686 j*) 55d8<j 1#O\*8686d888q1q111 8f18f1 1c1 1%$%$x*11 =s10%$ 1006  t!t#^0#80#0#0#/#/#/U818181 jU$00061d88811 sa1d1  1K1&8<j1  t!t#^0#80#0#0#/#/#/8'68'68'6 jU$d888110016 1#;.4#/#/808080 j#@&8<j !116 1#z.4#/#Y0886886886 j#&8<j0 1#.4#P/#|/58B68B68B6 j#&8<j0  t!t#.#.#.8K68K68K6 jZ$&8<j0 1#R.4#.#E/8S68S68S6 j#&8<j0 1#h. 1#q/08\68\68\6 j#x*x*x* d8<j 1#.8g68g6000 d8<j 1# /Us6  77u6u6j$8p68p6d6d6d6 / / / / / / / /10az6 66W!W6d8<j X6 66W!W68<j0 868686j W6d8<j {68686j 7766jz68686jW6d8<j  8686j 77666j00d8880# d8880 ) 0(24&8<j0 1#^ 848 78 78 7 j( 04&8<j 1#Z &878787 j( 04&8<j 1878787 j-* 05&8<j0 1#h_58%78%78%7 j,* 0#0&8<j0  t!t#`#_#'_# _#^#^#^8.78.78.7 j+*d88811**21  t!t#`#_#'_# _#^#^#^808080 j+*544(24?)3)j3,)32(2(2s2I)2x*x*x*k0{4i1O3403511d8880020&2d8880 Vs&212 8080r0( 1j0 1#["4#0[#X[U8o08o08o0 j(000 d8<j 1#Z*8Q78Q7k0k0k0 a[ a[ Z Zr0s0d888k0k0 s00  k0Km0&8<jj0 1#["4#0[#X[U8^78^78^7 j( N7O7d8<j 1#Z*8h78h7d888s0s011 8h08h0  \0K^0&8<jc0  t!t#(#p(#Q(#J(#'#'#'U8w78w78w7 j#d88844//5  t!t#(#p(#Q(#J(#'#'#'U8`08`08`0 j#///54d888\0\0 s44  \0K^0&8<j[0  t!t#(#p(#Q(#J(#'#'#'878787 j#d88844//c05 1#q%4#'#'8X08X08X0 j5#@&8<j ![0c05 1#%4#(#(878787 jF#&8<j/ 1#% t!t#'#'#& 2878787 jL#&8<j/  t!t#&#i&#%878787 j#&8<j/ 1#%4#%#w'878787 j;#&8<j/ 1#% 1#'0878787 jA#*#&8<j /878787 j-#x*x*x* d8<j 1#&8787/// d8<j 1#&U7  7777jn#8787777 & & & & %' %' & &\0//d8880d![&8<j~ 4#3#3878787 ju*&8<j~ 1#2878787 jw*&8<j~ 1#21#74878787 j5*H%&8<j~  t!t#3#2#2888888 jv*)&8<j~ 1#i3K1#,4U8 66W!Z%W8d8<j 1#s3A8888j 77#8#8jR*888888 jP*a*&8<j~ 1#31#438+88+88+8 j`*&8<j~ 1#21#3848848848 j;*&8<j a?8 66W!WE8d8<j XK8 66W!*#WQ88<j~ 8U88U88U8j WZ8d8<j ?88^88^8j 77b8b8j@88I88I8jWg8d8<j  8k88k8j 77o8o8o8jPr8 66W!*#Wx88<j~ 8|88|88|8jW8d8<j K88888j 7788jr8d888~ 8=88=88=8 jx*x*x* d8<j 1# 38888777 d8<j 1#"3(8888888 23 23 -3 -3 =4 =4 3 3~@8d888v$d!~$&8<jv$v$x*88 ?sa8 66W!W8d8<j X8 66W!DW88<j8 888888j W8d8<j 88888j 7788j88888jW8d8<j  8888j 77888jP8 66W!DW88<j8 888888jW8d8<j 88888j 7788jp$8d8888v$ * 1#6@1#s6888888 j}$&8<j8  t!t#J6#>6#6898989 j$p$&8<j 8898989 jv$x*x*x*88d888$d!@&8<j$$x*99 @sa 9 66W!W&9d8<j X,9 66W! W29d8<j !9869869j-W:98<j9 8>98>98>9jDWC98<j9 8G98G98G9jWL98<j9 8P98P98P9j 77U9U9j 98*98*9jWZ9d8<j  8^98^9j 77b9b9b9jPe9 66W!Wk98<j9 8o98o98o9j-Wt98<j9 8x98x98x9jW}9d8<j ,98989jDW98<j9 898989j 7799j$e9d8<j f989899$ * 1#<<4#[=#)>898989 j$&8<j9 1#&< t!t#P=#<#C<898989 j$K&8<j9 1#=! t!t#.>#=#=#=U898989 j$ &8<j9 1#< t!t#=#<#<@9>>9=. ]D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\utils.js'9 !d!&8<9g vq`# # 9#39x" x9iul#k k9###89#%9p$"  p$9iul%#k9# # #*9#*&9"*  9iul#F iul#>k9#6#6#6#&+9#V"9"V 9iul#hk9#`#`#R'9#~9 "~  9 "iulL#k9####z 9##9basename" 999" iul[#k9####(9#:" 9iul#k9###9#! : proxyaddr"   :9iul proxy-addr# k9###&9# :"  9iul#k9## #9##$: querystring"#  :9iul:#9 k9#1#1#)9vf =" 9## yz/** * Return strong ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ "" g # H/:buf"  2:+:k# #iu3 3+:#!y " {  {  { 99###39:#Niu39:#8  +:#>{ <:#1#-#B#M-:#W iu2:3:#c#h #i #il#o :9#^#^-:#w+:#3 9:+:# C:+:####9vf =wetag"):# #  yz/** * Return weak ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ V:V:"""' V: V:9Y: g #?H_:2:"? 2:Y:k#E #iu3 3Y:#Vy "L {  { =:9#F#F#F3h:#iu3h:#m  Y:#s{ k:#f#b#EB#;M]:#iu2:b:## # #l# :9##]:#7vY:#(3 h:Y:#. q:Y:### # 9vf ="# ):##yzj/** * Check if `path` looks absolute. * * @param {String} path * @return {Boolean} * @api private */ ""9 g } f 0l^#Giul#S[ [:#N#N#Gg #W l#^:#W :#C :} f 8f 0lu#jiul?#v[:#q#q#jf 0l\#|iul@#[:###|#j!g # l#:# :#f3:} f 0l\\#iul#l@#" [:####g # l#:# :#0:#?:#:[ ::#1#1##9vf ="Z):#S#Siu9#xl3utils.flatten: use array-flatten npm module instead#5I"n 9#e #e#eT#Sf#Sg9vf ="R):#K#Kyz/** * Normalize the given `type`, for example "html" becomes "text/html". * * @param {String} type * @return {Object} * @api private */ ""k g #ubk#| $iul^#" :#}#} #}#(##iu:#$"   99## ## ##iu:# acceptParams : :99# ##|Z:#qh:#l ::#cv#cv#K#K9vf ="h):#a#ayz/** * Normalize `types`, for example "html" becomes "text/html". * * @param {Array} types * @return {Array} * @api private */ "" g #:l" l:e## :x f 4 :#"% %:## ## !:##;":l## :g viuiuiu:#%;##" ):9###X"l:###)#*;#4:#[:# l:# :#:#% ;:#z#z#a#a9vf =x" ):# # iux9# lDutils.contentDisposition: use content-disposition npm module instead#- FI" 9# # # p# # 9z/** * Parse accept params `str` returning an * object with `.value`, `.quality` and `.params`. * also includes `.originalIndex` for stable sorting * * @param {String} str * @return {Object} * @api private */ :"Y "e  :&; g #z +;parts"z  .;&;iu#  *; *&" ( (&;# # # #v );# G7;l"  l&;# A# # iul# .;/;# # # quality# l?# # # # #  originalIndex# index  N;&;# # L);x  f 4 &;# " .;/;# # # #  !S;# # X;" S;l?# # P;g # ^;pms"  a;&;iu#.  *= *&"' iuS;#% .;/;# # # # # "\;}  f 0lq#@ iul#K a;b;#G #G #@ g vf =iuiul# a;b;# # " l:;# # # iul?# a;b;# # # # t;# *l;g vf =E;"Z l:;#W #W iuiul?#t a;b;#p #p 9 9 999#e #e #W #W !;#O /l;#< r\;# P;# );# l:;# );#r Q&;#f ( 6;&;#k N; O;&;#P s9vf =w"L ):#E #E yz~/** * Compile "etag" value to function. * * @param {Boolean|String|Function} val * @return {Function} * @api private */ w""c  g #q ;"q  ;#m ;} f 2#|  ,  , ;# lI# #| g # , ;# ;# ;#x 4;# ); # 1; l# g vf =;# V:"  ):9# # # # ;h" # ;# ;# ; l# g h" # ;# ;#4; #lstrong#g vf =;#+"7;#0#0 #+#+;h" #D;#+;#O3; Zl#Tg vf =;#bV:"n;#g#g #b#b;h" #|;#b ;#N; g #?;iuf %l!unknown value for etag function: ##, ;##)  99# #8#?;, ;# # ;#;#i ;#d , ;;#[ #[ #E #E 9vf ="r):#k#kyz~/** * Compile "query parser" value to function. * * @param {String|Function} val * @return {Function} * @api private */ ""  9; g #;" ;#;} f 2#  ,  , ;#lI# #g # , ;#;#;#4;#_; #5< l#g vf =;# "$: : :9# ###<h" #2<#$<#=.< Gl#Bg vf =;#O newObject < <99#T #O#O<h" #e<#O<#pB< l/#u g vf =;#parseExtendedQueryString "< "<99###<h" #<#+<#9< lsimple#g vf =;# ": <# ###)<h" #)<#$&<#V< g #G2<iuf %l)unknown value for query parser function: #+, ;#F#1 ;9# # @#G1<, ;##S ;#Z;#;#, ;;###k#k9vf =" ):##yz/** * Compile "proxy trust" value to function. * * @param {Boolean|String|Number|Array|Function} val * @return {Function} * @api private */ "" g } f 2#"  ,  , G<#)lI#1 #"g #= , O<#DQ<#= K<#*I<} f 2, O<#Pl#X#P g #!yz "" g # l#^<#]<##Y<#^KU<#L]I<} f 2#  , O<#l##g #(yz "" g # f 4  k<#,  ,  , O<G<G<##l<#k<#a  w<k<k<# q<k<# # g<#Tb<#qI<} f 2#&  , O<#-l_ #5#&g vf =, O<#kiu#{ *, *&"t, O<#q#q #q#k#k<#?Iz<#"fI<#$iuf 9, O<#e## compile" :  ::9# ##I<#G<#, O<G<# # ##9vf ="Q ):#J#Jyz/** * Set the charset in a given Content-Type string. * * @param {String} type * @param {String} charset * @return {String} * @api private */ "h "r  9< g } f 9# # <## #"  "<##g # <#<#<#-<# <parsed" <<iu<# "p$ p$99# ###%<vf ="" parameters" <<###"<####$<#:"iu<<#T$"Lp$<#A #A#A<#<#s <<#y" <<#_#_#J#J9zU/** * Parse an extended query string with qs. * * @return {Object} * @private */ "<"" "<< g #Liu( (<##5#'# l# #4#l#% " :9###D<#R<#( <<#y9zJ/** * Return new empty object. * * @return {Object} * @api private */ <" " << g # #<#<#%9#9  ,   8 m } & R z      I J N p s        ' H T U x { |          9 \ }              A d        + > N R S       " 6 F J K s        ! 9 L \ ` a         V + v w {  ' ; K O P t  8 Q y  0 @ D E k u v   % > K \ v            @ V f j k          , 9 I _ l        L P Q ^ ` a e         I J `          A g           ! 5 E I J          & ' 8 ] ` a e          * 0 2 3 7 S V j z ~    #999 +:d!3&8<9+:+:99<<< $sa< 66W!W<d8<9 X< 66W! W=d8<9 <8=8=9 77 = =9<8<8<9W=d8<9  8=8=9 77===9P= 66W!W"=d8<9 <8&=8&=9 77*=*=9=d888<+: 9  t!t#N#8#!8<8<8< 9Q:&8<9< 1#>87=87=87= 9R:2:&8<9< 1# H1#c8?=8?=8?= 91:<<<<<d888Y:d!3&8<9Y:Y:99<J=J= %saQ= 66W!WW=d8<9 X]= 66W! Wc=d8<9 R=8g=8g=9 77k=k=9Q=8[=8[=9Wp=d8<9  8t=8t=9 77x=x=x=9P{= 66W!W=d8<9 ]=8=8=9 77==9V:{=d888P=Y: 9  t!t##m#V8N=8N=8N= 9:V:&8<9 R=8=8=8= 9Y:&8<9P= 1#s8=8=8= 9:2:&8<9P= 1#?H1#8=8=8= 9a:<<<P=Q=d888:d![&8<92::99<== &sa= 66W!W=d8<9 X= 66W! W=d8<9 =8=8=9 77==9=8=8=9W=d8<9  8=8=9 77===9P= 66W!W=d8<9 =8=8=9 77==9=jZj1#& =d8<9 *8=8= bc!bb c :::999<=== s=d8.!.j/ 9 *8>8>  =[=&8<9>  t!t###q#N8 >8 >8 > 9:d888==99>=: 9>  t!t###q#N8=8=8= 9:<<<==d888:d!&8<9 ! :::999<>>> sb& !d8.!.j9 9 U.> 66W!W4>d8<9 1#(U;>  77=>=>9:88>88>9WB>d8.!.j9 9 1#(8F>8F>9 77L>L>9:UO> 66W!WU>d8.!.j9 9 1# A8Y>8Y>9L;W_>d8<9 1# A8c>8c>9Wh>d8<9 ! &;&;&;999<&;d!(&8<9 !o> &;&;&;999<p>p>p> sb d8<92::99<>> 'sa> 66W!W>d8<9 X> 66W! W>d8<9 >8>8>9 77>>9>8>8>9W>d8<9  8>8>9 77>>>9P> 66W!W>d8<9 >8>8>9 77>>9>jZj1#(= >d8<9 .>O>8>8> bc!b&>c%>(>bK> 66W !W>d8<9 1#S8>8>9V:W>d8<92;;99<;d!, &8<92> ;;;999<>>> sb d8<EE!!,Ed!d8<> 1#u ?>a> 66W!W>d8< X? 66W! W ?d8< >8?8?W?8<> 8?8?8?DW?8<> 8?8?8? 77$?$?>8?8?W)?d8<  8-?8-? 771?1?1?P4? 66W!W:?8<> 8>?8>?8>?WC?d8< ?8G?8G?DWK?8<> 8O?8O?8O? 77T?T?D4?>>d8< 5?8Y?8Y?>E 8>8>, &8<>  t!t#O"#!#!##!# 8a?8a?8a? D&8< >8i?8i?8i? EW&8<>  t!t#!# # 8p?8p?8p? ...>>d888> s>@ 8>8>  >&8<92>> 1#8?8?8? 9;&8<9> 1#8?8?8? 9; >, >&8<9>  t!t## # 8?8?8? 9;  d8<9 1# R=8?8?>>> + + ?d8<9 1# R=8?8?  d8<9 1#+<8?8?>>> b b < <?d8<9 1#+<8?8?  d8<9 1#bR=8?8?>>>   t t?d8<9 1#bR=8?8?d888a? 66W!W?d8<9 X? 66W! W?d8<9 ?8?8?9 77??9?8?8?9W?d8<9  8?8?9 77???9P? 66W!W?d8<9 ?8@8@9 77@@9w?Z1#! @d888 bc!b>c>>>; ?99  t!t## # 8>8>8> 9;~?<<<???>?d888> *s?9> 1#  4# #g R=8>8>9W@d8<92>> 1# 1#0 <8!@8!@9W(@d8.!.j* 1#B 92::99<:d!&8<921@ :::999<2@2@2@ sb9 ?d8.!.j9 9 @A@:>9=9 .>O>9E@9E@ 66W!WN@8<j9 8R@8R@8R@9XWW@8<921@9@ 8[@8[@8[@9Wa@d8<9 8e@8e@9 77i@i@98>@8>@  2@l&8<921@9@ 1#4## A@8r@8r@8r@ 9:&8<99@ 1#4## A@8|@8|@8|@ 9: 2@%&8<921@9@ 4##98@8@8@ 9;&8<99@ 4##98@8@8@ 9; 2@4@&8<99@ 1# t!t###8@8@8@ 9;d888a@ 66W!W@d8<9 X@ 66W! W@d8<9 @8@8@9 77@@9@8@8@9W@d8<9  8@8@9 77@@@9P@ 66W!W@d8<9 @8@8@9 77@@9@jZj1#= @d8<9 A@8@8@ bc!b:@c9@<@1@: @99 1# t!t###86@86@86@ 9;%@lp@<<<1@@d8882@ (s@99@ 1#K1#>8,@8,@9W@d8.!.j* 1#9 1#Ja@ 66W!WAd8<9 X A 66W! WAd8<9 @8A8A9 77AA9A8 A8 A9WAd8<9  8"A8"A9 77&A&A&A9P)A 66W!W/Ad8<9  A83A83A9 777A7A9)AjZj1# :Ad888 bc!bb. Lc <<<999<<d!"&8<92<<99<FAFA /sA9EA 4##.8JA8JA8JA 9<&8<92MAEA  t!t###8TA8TA8TA 9<<&8<92MAEA 1# 4##T8]A8]A8]A 9<&8<9 @8gA8gA8gA 9<<<<MAAd888FAFA sBAd8<j+ 8rA8rA  FAeA&8<9 @8zA8zA8zA 9< FA<[A&8<9EA 1# 4##T8A8A8A 9< FARA&8<9EA  t!t###8A8A8A 9< FA"HA&8<9EA 4##.8A8A8A 9<d888AA99pAMA< 8@8@9wWA8.!.9 1#E ?@ 1#-8A8A8A9WA8.!.9 1#aA 66W!WAd8<9 XA 66W! WAd8<9 A8A8A9 77AA9A8A8A9WAd8<9  8A8A9 77AAA9PA 66W!WAd8<9 A8A8A9 77AA9AZ1#B" Ad8<9 aA 66W!WAd8<9 XB 66W! W Bd8<9 A8 B8 B9 77BB9A8B8B9WBd8<9  8B8B9 77BBB9P!B 66W!W'Bd8<9 B8+B8+B9 77/B/B9!Bd8<9 *84B84B]<]<99<]<d!G<d!, &8<9 ! G<G<G<999<;B;B;B sb d8.!.9 AaJB 66W!WPBd8<9 XVB 66W! W\Bd8<9 JB8`B8`B9 77dBdB9KB8TB8TB9WiBd8<9  8mB8mB9 77qBqBqB9PtB 66W!WzBd8<9 VB8~B8~B9 77BB9tBd888k<k<99<k<d!w<&8888 9v<&8<9B 1#8B8B8B 9y<;B;B;BBKBd888B .sKBG<G<99<;B;B ,sA9k< > 8GB8GB  ;B, =B&8<9BB  t!t##q#-##P#D#)8B8B8B 9<  , d8<9 1#k8B8B;B;B;B    , Bd8<9 1#k8B8Bd888AA99BB  t!t###q#-##P#D#)8?B8?B8?B 9<<<<9BBBBAd888;B;B8BAd8889B -sAB]< JB8A8A bc!bCBcBBEBBG< @ 1#8A8A8A9WBd8.!.j* 1#y9 1#=8B8B9WB8.!.9 1#kaB 66W!WBd8<9 XB 66W! WBd8<9 B8B8B9 77CC9B8B8B9WCd8<9  8 C8 C9 77CCC9PC 66W!WCd8<9 B8C8C9 77CC9CZ1#! "Cd888 bc!bb c ;;;999<;d!&8<9 B82C82C82C 9;, &8<92;;99<.C.C +sB9-C  t!t#F##89C89C89C 9A<&8<92 85E85E  .CAC&8<9-C 1#Z8=E8=E8=E 9; .C, 7C&8<9-C  t!t#F##8FE8FE8FE 9A< .C0C&8<9 B8OE8OE8OE 9; KCLCd8<9 1#QC8WE8WE vDwDd8<9 1#O|D8_E8_E DDd8<9 1#D8gE8gE 'E(Ed8<9 1#QC8oE8oEd888BB993E>> s>d8<921@9@ .>O>8E8E  > >&8<9E  t!t###}8E8E8E 9:d8<9 >8E8E>>99E>: 9E O>8|>8|>  p>a;&8<9 !o>w>&;&;99<p>p> )saE 66W!WEd8<9 XE 66W! WEd8<9 E8E8E9 77EE9E8E8E9WEd8<9  8E8E9 77EEE9PE 66W!WEd8<9 E8E8E9 77EE9:E9Z91# Ed8<9 O>8E8E bc!bb& !co>d8<92%>> O>8F8Fx>cw>z>E&; 9 1#  t!t# # #p #G 8E8E8E 9`;&8<9w> 1#  t!t# # #p #G 8F8F8F 9`; p>l&8<9 !o>w>E 1# G t!t# # #W O>8F8F8F 99;&8<9w> 1# G t!t# # #W O>8#F8#F8#F 99; p>N;&8<9 !o>w>E 1# 8-F8-F8-F 9;&8<9w> 1# 86F86F86F 9; p>.;&8<9 !o>w>E 1#z  t!t# # # 8?F8?F8?F 9-;&8<9w> 1#z  t!t# # # 8IF8IF8IF 9-; p>&8<9 !o>w>E 1#  t!t# # #% z8SF8SF8SF 9Z;&8<9w> 1#  t!t# # #% z8]F8]F8]F 9Z; p>(r>&8<9w> 1# 8gF8gF8gF 9;d888EE99E 1# &8t>8t>8t> 9;QF.;=FN;+FlFa;E<<<EEd888p>p> sEF  p>a;E&8<9o> 1#  t!t# # #p #G 8}F8}F8}F 9`; p>lF&8<9o> 1# G t!t# # #W O>8F8F8F 99; p>N;+F&8<9o> 1# 8F8F8F 9; p>.;=F&8<9o> 1#z  t!t# # # 8F8F8F 9-; p>QF&8<9o> 1#  t!t# # #% z8F8F8F 9Z; p>(r>&8<9o> 1# &8F8F8F 9;d888EE99w>E 1# A1# UF  77FF9I;8l>8l>9E;WFd8<9 4# A#W z8F8F9 77FF9;;8*>8*>  > >&8<9%>  t!t###}&8F8F8F 9:d888>>99E>  t!t###}&8">8">8"> 9:<<<>>d8<9 >8F8F2@p>>.C;BFAED !<D<E<FA<Bk<B]<9BG<;B,<'E<D<vD<KC;.C;?;?;?;>&;p>:2@:>:=Y:J=+:< !< @F<>999 66W!WFd8<9 8F8F9 77FF9: A@< D< |D W3'4 UG 66W!'W Gd8<9 1#5&8G8G94WGd8<9 1#5*8G8G9 77GG9<< G< D< @k< JB]< AG< A; B; ?I; F *uuE;L; O>;; O>&; E: @: ;> Ǭz= .>: .>: >: =w: U8G 66W!W>Gd8<9 4#h # &*8BG8BG9 77HGHG9I:Y: R= yH 8GI: 8G+: <9< #s 1#V"1#x898989 99 :&8<92BBB 1#!1# 8XG8XG8XG 9 :d8<9  t!t###O##b#+# D<QCR=|D8bG8bG &8<9 !%>E> 1#~1#8jG8jG8jG 99d8<9 !>9@>1@9  t!t#g#0# ##J##k#E # #a#K#S## #>8tG8tG:&8<92E> 1# E8G8G8G 9&;d8<9 _GTD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib8G8G&8<9E 1# 1#8G8G8G 9:d8<9 RG 66W!WGd8.!.@  t!t##f#-. \D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\view.js'G !d!&8<Gz/** * Initialize a new `View` with the given `name`. * * Options: * * - `defaultEngine` the default template engine name * - `engines` template engine require() cache * - `root` root path for view lookup * * @param {string} name * @param {object} options * @public */ d"" dG g  #G" Gf 9  G### #Gvf =X"##X"G###'#(Gvf ="##iu G#  g vq`# # G#(G" Giul express:view#iul#k kG### #-G#G[" [Giul[##kG###G#0Gfs"0 GGiulG#=kG#5#5 #,G#HGutils"H HGiul}#X kG#P#P#DG#Hdirname"  HG H"[G## #G# H9" 9G9" [G## #G#H"G"[G## #G#H:" :G:"[G## #G#H" G" [G# #  #Gvf ="E G#?#?d dG#P#?#?GGvf =$"" d*H###yzQ/** * Lookup view by the given `name` * * @param {string} name * @private */ $$"" $ $G1H g #7H[" [1H#  5H#;Hroots" >H1Hiu>"3#/#/ "'e#%#% #%#!5Hviul lookup "%s"#D  1H#S GG#>#>#>5Hx f 8f 4 1H#m"v>H?H#q#q #m# #[:H##m# !SH##fZH"fSHl#j#b OHg #`H>" >1HiuSH#>H?H###^H#hH'" '1Hiu>cH#LH# !HG###^H#rHdir" uH1Hiu'kH# H  H HG## #^H#|H#" #1Hiu'kH#9 9HG## #^Hvf =[:H#;iuuHvH#O#H#T"F#B#B #B#;#;^H#OH#]5H#b [:H#i5H# g1H# LH1H#}#}##Gvf ="" d*H###yzq/** * Render with the given options. * * @param {object} options * @param {function} callback * @private */ " "   GH g viul render "%s"#+ ["> #: #:  GG#% #% #% Hviu["X #T #T  H#_   H#h "L #H #H #H )#H *H#! SH#  HH#  HH#v#v##Gvf =" " d*H# # # yzu/** * Resolve the file within the given directory. * * @param {string} dir * @param {string} file * @private */ " "  !HH g #+ H"+  H"5 #1 #1 #' H#T H["T  [HiuuH uHH#` #  #H#e : :HG#[ #[ #P H#r Hstat"r  HHiu[H# tryStat H HGG#y #y #n H} f 8HH# iisFile" HH# # # # g # [H# H# H# 1Hvf =[H# iuuHH# iu#H# H# 9 9HG# # f %lN;# H# # :H# # -# 4# 5Hvf =HH# iu[H# HH# # # # H} f 8HH#- iH"9 HH#5 #5 #5 #- g #J [H#Q I#D I#) 1H## 9H# uH HH# # HH# U# U# n# oGz]/** * Return a stat, maybe. * * @param {string} path * @return {fs.Stats} * @private */ H" "  H I g viul stat "%s"# [ [ I#  GG# # # I# MI  g #.    GGG#5 I#( I#% &  & & IIIg # iu[I# statSync" G GGG# # # &I# #I# p I# [ I I# G#F G     8 \  , D d e i ~           / : > ? V W [       0 3 K f q u v       & ' Q        3 T p q         & N O `             ; < Z [         7 [ _ ` o r s w        # F s v w { % ; < N l  & ' F W [ ^ _ c |   * @ D F #F G## ##Gvf ="## G###Gvf =>"## >"G## ##G} f 8#-  #"2#.#.#: #X"?#;#;#- g #URHIiul>No default engine was specified and no extension was provided.#e@  GG#_#[K#O\@I#)G#RIfileName" UIGG##G} #  #"##g vf ="# # kf 3iul#(X"###l#/#X"`#\#\f %l#;X"E#A#A#;#Y# d# e\Ivf >UIVI#u"###u#u\I#XI#G} # #iu"##"G## #g vf =iu"##"G## # __express" iuiul?#""####k kGG###%#>#?}I#\uI#yGvf =",#(#( iu"G#C#C":G#6#6 #6#($#(%Gvf =["f#b#b iuUIVI#z$"r#n#n #n#b!#b"G#G# GG# GG#vGGGGGGGd!&8<GG 1# t!t#6####UI 66W!XWI8<GG 8I8I8IGWI8<GG 8I8I8IG>WI8<GG 8I8I8IG 77IIGG8I8I8I GGUI&8<GG 1#4#u#z8I8I8I GTI&8<GG 1#8I8I8I GI&8<GG  t!t###8I8I8I GIIIIGaI 66W!WId8<GGGII r  t!t# ##XJ 66W !>WJ8<G21H1HGGI1Hd !#&8<G2J 1H1H1HGGGIJJJ {sbPJ 66W !>WJd8<G2JJ 1# 8#J8#JG[W)Jd8<GHHGGIHd!&8<G/J 1#h 84J84J84J GH&8<G a>J 66W!WDJd8<G XJJ 66W! WPJd8<G >J8TJ8TJG[WXJ8<G/J 8\J8\J8\JGWaJ8<G/J 8eJ8eJ8eJG 77jJjJG?J8HJ8HJGWoJd8<G  8sJ8sJG 77wJwJwJGPzJ 66W![WJ8<G/J 8J8J8JGWJd8<G JJ8J8JGWJ8<G/J 8J8J8JG 77JJGzJd888/JH 8WK8<G2JJ 8K8K8KG 77KKGK8K8KG>WK8<G2JJ 8L8L8LG 77 L LG$8K8KJ r KI 4##  t!t#1 #C######.38J8JG$WL8<GG 8L8L8LG 77LLGd NwK  J>H&8<G2JJ 1#4##q@'LEH>9=G2JJ 9+L9+L 66W!W4L8<G2JJ 88L88L88LGW>Ld8<G 8BL8BLGWFL8<G2JJ 8JL8JL8JLG 77PLPLG8"L8"L8"L G=H&8<GJ 1#4##q'L8XL8XL8XL G=H J$&8<G K8bL8bL8bL G1H&8<G K8iL8iL8iL G1H JuH&8<G2JJ 1#1#O38qL8qL8qL GtH&8<GJ 1#1#O38{L8{L8{L GtH J&8<G2JJ 4#S#8L8L8L GH&8<GJ 4#S#8L8L8L GH J>&8<G2JJ 1#1#8L8L8L GbH&8<GJ 1#1#8L8L8L GbH J'&8<G2JJ 1#4##38L8L8L GjH&8<GJ 1#4##38L8L8L GjH J[&8<G2JJ 4##i8L8L8L G9H&8<GJ 4##i8L8L8L G9H J&8<G2JJ 1#f t!t#m##8L8L8L G\H&8<GJ 1#f t!t#m##8L8L8L G\H J#J&8<GJ 1#1#T38L8L8L G~H  [d8<G 1#;38L8LJJJ n n Y Y[Ld8<G 1#;38L8Ld8<G J8L8LKKII 1#1#T38J8J8J G~HL[L'L>LLuHoL$`L>H LIIILJKd8<G J8 M8 MJ rKIJ 8 J8 J8 JG[WM8<G/J 8M8M8MGWMd8<G2JJ 1# 1#B K8M8MGXW%M8<GG 8)M8)M8)MGW.Md8<G 1#>J82M82MG W7Md8<G I8;M8;MGW?M8<G/J 8CM8CM8CMGWHM8<G2GJ 8LM8LM8LMG$WRMd8<GG 1#1#nK8VM8VMG 77\M\MGI8I8IGWaMd8<G  8eM8eMG 77iMiMiMGJJZ1#  GZG t!t# ###P lMd888GG d888J0JJ Id![&8<G2 I IGGIyMyM raM 66W!WMd8<G XM 66W! WMd8<G M8M8MG 77MMGM8M8MGWMd8<G  8M8MG 77MMMGPM 66W!WMd8<G M8M8MG 77MMGHMGZG4#y #  Md8<G "8M8M bc!bb3 ^(c  I I IGGGIyMyMyM |sMd8<GJ "8M8M  yM[{M&8<GM 4# # 38M8M8M G1Id888MMIIMM I IM 4# # 38}M8}M8}M G1IIIIMMd888 ! IyMH}KHsKHJH0JHL1HJGI !EH 'L I MH  KH >J1H KG IG IGII rII 1#1#\MReturn the extension of the path, from the last '.' to end of string in the last portion of the path. If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. Examples: path.extname('index.html') // returns '.html' path.extname('index.') // returns '.' path.extname('index') // returns '' ! 55--5pM 66W!WMd8<. [CNThis module contains utilities for handling and transforming file paths. Almost all these methods perform only string transformations. The file system is not consulted to check whether paths are valid. Use require('path') to use this module. The following methods are provided: 66W!W Nd8.!.N KN 66W!WNd8.!.N MGI 1# j* 1#; 8N8NNW#Nd8.!.N \)NResolves to to an absolute path. If to isn't already absolute from arguments are prepended in right to left order, until an absolute path is found. If after using all from paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. Non-string arguments are ignored. Another way to think of it is as a sequence of cd commands in a shell. path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile') Is similar to: cd foo/bar cd /tmp/file/ cd .. cd a/../subfile pwd The difference is that the different paths don't need to exist and may also be files. Examples: path.resolve('/foo/bar', './baz') // returns '/foo/bar/baz' path.resolve('/foo/bar', '/tmp/file/') // returns '/tmp/file' path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif') // if currently in /home/myself/node, it returns '/home/myself/node/wwwroot/static_files/gif/image.gif' ! 55--5from-5to+N 66W!W8Nd8<N _>N88lQ8lQ8lQ GGHd8<G 1# "8vQ8vQH&8<G 1#H>8}Q8}Q8}Q GG[&8<GI  t!t# #;# t!t# ####N38Q8Q8Q GGd8<GI 1#?RQ 66W!WQd8.!.G 1#?cQI@ 1#8Q8QG 77QQGGI8Q8Q:&8<GJ 1#4#[ # O8Q8Q8Q GHd&8<GI  t!t# ###PI8Q8Q8Q GG9&8<G !JJJ 1#4## `P8Q8Q8Q GH.d8<G 38Q8Q&8<G2JJ 1#1#)N8Q8Q8Q G H H&8<G2JJ 1#1#N8Q8Q8Q GHd8<G G8Q8QG&8<G2MM 1#01# KQ 66WG!mkdirWQd8<. GCQFile I/O is provided by simple wrappers around standard POSIX functions. To use this module do require('fs'). All the methods have asynchronous and synchronous forms. The asynchronous form always take a completion callback as its last argument. The arguments passed to the completion callback depend on the method, but the first argument is always reserved for an exception. If the operation was completed successfully, then the first argument will be null or undefined. When using the synchronous form any exceptions are immediately thrown. You can use try/catch to handle exceptions or allow them to bubble up. Here is an example of the asynchronous version: var fs = require('fs'); fs.unlink('/tmp/hello', function (err) { if (err) throw err; console.log('successfully deleted /tmp/hello'); }); Here is the synchronous version: var fs = require('fs'); fs.unlinkSync('/tmp/hello') console.log('successfully deleted /tmp/hello'); With the asynchronous methods there is no guaranteed ordering. So the following is prone to error: fs.rename('/tmp/hello', '/tmp/world', function (err) { if (err) throw err; console.log('renamed complete'); }); fs.stat('/tmp/world', function (err, stats) { if (err) throw err; console.log('stats: ' + JSON.stringify(stats)); }); It could be that fs.stat is executed before fs.rename. The correct way to do this is to chain the callbacks. fs.rename('/tmp/hello', '/tmp/world', function (err) { if (err) throw err; fs.stat('/tmp/world', function (err, stats) { if (err) throw err; console.log('stats: ' + JSON.stringify(stats)); }); }); In busy processes, the programmer is strongly encouraged to use the asynchronous versions of these calls. The synchronous versions will block the entire process until they complete--halting all connections. Relative path to filename can be used, remember however that this path will be relative to process.cwd(). Most fs functions let you omit the callback argument. If you do, a default callback is used that ignores errors, but prints a deprecation warning. IMPORTANT: Omitting the callback is deprecated. v0.12 will throw the errors as exceptions. 66W!WQd8.!.GI 1#5 Q Q8R8RQ 77 R R RQGd!d8<Q 38R8Rd8<Q Q8R8R.d8<Q _RG8R8Rd8<Q Q8$R8$R ! !Q6:G I 6,R R !QQRH1R Objects returned from fs.stat(), fs.lstat() and fs.fstat() and their synchronous counterparts are of this type. * stats.isFile() * stats.isDirectory() * stats.isBlockDevice() * stats.isCharacterDevice() * stats.isSymbolicLink() (only valid with fs.lstat()) * stats.isFIFO() * stats.isSocket() For a regular file util.inspect(stats) would return a string very similar to this: { dev: 2114, ino: 48064969, mode: 33188, nlink: 1, uid: 85, gid: 100, rdev: 0, size: 527, blksize: 4096, blocks: 8, atime: Mon, 10 Oct 2011 23:24:11 GMT, mtime: Mon, 10 Oct 2011 23:24:11 GMT, ctime: Mon, 10 Oct 2011 23:24:11 GMT } Please note that atime, mtime and ctime are instances of [Date][MDN-Date] object and to compare the values of these objects you should use appropriate methods. For most general uses [getTime()][MDN-Date-getTime] will return the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC and this integer should be sufficient for any comparison, however there additional methods which can be used for displaying fuzzy information. More details can be found in the [MDN JavaScript Reference][MDN-Date] page. ! Stats, 66W!W;Rd8<Q _AR5R8?R8?RQWERd8<Q (8IR8IRQWMRd8<Q  8QR8QRQWURd8<Q X[R 66W! WaRd8<Q 1R8eR8eRQ 77iRiRQ2R8YR8YRQWnRd8<Q z8rR8rRQ WvRd8<Q (8zR8zRQ 77~R~R~R~RQPR 66W!WRd8<Q [R8R8RQ 77RRQ5RRRNR[RVRbRRRoRV VVFVWaVd8<Q U8eV8eVQBiVpAsynchronous truncate(2). No arguments other than a possible exception are given to the completion callback. ! truncate55mV--5[-5e-5kV 66W!WxVd8<Q _~VmV8|V8|VQWVd8<Q (8V8VQWVd8<Q  8V8VQWVd8<Q XV 66W! WVd8<Q iV8V8VQ 77VVQjV8V8VQWVd8<Q z8V8VQ WVd8<Q (8V8VQ 77VVVQPV 66W!WVd8<Q V8V8VQ 77VVQmVVVVVVVVVyVVVWVd8<Q iV8V8VQBVSynchronous truncate(2). !  truncateSync55V--5[-5eV 66W!WVd8<Q _VV8V8VQWVd8<Q (8V8VQWVd8<Q  8V8VQWVd8<Q XW 66W! W Wd8<Q V8W8WQ 77WWQV8W8WQWWd8<Q z8W8WQ W Wd8<Q (8$W8$WQ 77(W(W(WQP+W 66W!W1Wd8<Q W85W85WQ 779W9WQV+WVWW W,W2WWVV!WWXoXWXd8<Q #X8X8XQBXSynchronous fchown(2). !  fchownSync55X--5U-5NW-5PWX 66W!WXd8<Q _XX8X8XQWXd8<Q (8X8XQWXd8<Q  8X8XQWXd8<Q XX 66W! WXd8<Q X8X8XQ 77XXQX8X8XQWXd8<Q z8X8XQ WXd8<Q (8X8XQ 77XXXQPX 66W!WXd8<Q X8X8XQ 77XXQXXXXXXXXXXXXWXd8<Q X8X8XQBYnAsynchronous lchown(2). No arguments other than a possible exception are given to the completion callback. ! lchown55Y--5[-5NW-5PW-5Y 66W!WYd8<Q _YY8Y8YQWYd8<Q (8Y8YQW"Yd8<Q  8&Y8&YQW*Yd8<Q X0Y 66W! W6Yd8<Q Y8:Y8:YQ 77>Y>YQY8.Y8.YQWCYd8<Q z8GY8GYQ WKYd8<Q (8OY8OYQ 77SYSYSYQPVY 66W!W\Yd8<Q 0Y8`Y8`YQ 77dYdYQYVY#Y0Y+Y7YWY]YDYYYLYWgYd8<Q Y8kY8kYQBoYSynchronous lchown(2). !  lchownSync55sY--5[-5NW-5PWqY 66W!W~Yd8<Q _YsY8Y8YQWYd8<Q (8Y8YQWYd8<Q  8Y8YQWYd8<Q XY 66W! WYd8<Q oY8Y8YQ 77YYQpY8Y8YQWYd8<Q z8Y8YQ WYd8<Q (8Y8YQ 77YYYQPY 66W!WYd8<Q Y8Y8YQ 77YYQsYYYYYYYYYYYYWYd8<Q oY8Y8YQBYmAsynchronous chmod(2). No arguments other than a possible exception are given to the completion callback. ! chmod55Y--5[-5mode-5Y 66W!WYd8<Q _YY8Y8YQWYd8<Q (8Y8YQWYd8<Q  8Z8ZQWZd8<Q X Z 66W! WZd8<Q Y8Z8ZQ 77ZZQY8 Z8 ZQW Zd8<Q z8$Z8$ZQ W(Zd8<Q (8,Z8,ZQ 770Z0Z0ZQP3Z 66W!W9Zd8<Q  Z8=Z8=ZQ 77AZAZQY3ZZ ZZZ4Z:Z!ZYY)ZWDZd8<Q Y8HZ8HZQBLZSynchronous chmod(2). !  chmodSync55PZ--5[-5YNZ 66W!WZZd8<Q _`ZPZ8^Z8^ZQWdZd8<Q (8hZ8hZQWlZd8<Q  8pZ8pZQWtZd8<Q XzZ 66W! WZd8<Q LZ8Z8ZQ 77ZZQMZ8xZ8xZQWZd8<Q z8Z8ZQ WZd8<Q (8Z8ZQ 77ZZZQPZ 66W!WZd8<Q zZ8Z8ZQ 77ZZQPZZmZzZuZZZZZ[ZeZZWZd8<Q LZ8Z8ZQBZnAsynchronous fchmod(2). No arguments other than a possible exception are given to the completion callback. ! fchmod55Z--5U-5Y-5Z 66W!WZd8<Q _ZZ8Z8ZQWZd8<Q (8Z8ZQWZd8<Q  8Z8ZQWZd8<Q XZ 66W! WZd8<Q Z8Z8ZQ 77ZZQZ8Z8ZQWZd8<Q z8Z8ZQ W[d8<Q (8[8[Q 77 [ [ [QP[ 66W!W[d8<Q Z8[8[Q 77[[QZ[ZZZZ[[ZZZ[W[d8<Q Z8#[8#[QB'[Synchronous fchmod(2). !  fchmodSync55+[--5U-5Y)[ 66W!W5[d8<Q _;[+[89[89[QW?[d8<Q (8C[8C[QWG[d8<Q  8K[8K[QWO[d8<Q XU[ 66W! W[[d8<Q '[8_[8_[Q 77c[c[Q([8S[8S[QWh[d8<Q z8l[8l[Q Wp[d8<Q (8t[8t[Q 77x[x[x[QP{[ 66W!W[d8<Q U[8[8[Q 77[[Q+[{[H[U[P[\[|[[i[6[@[q[W[d8<Q '[8[8[QB[Asynchronous lchmod(2). No arguments other than a possible exception are given to the completion callback. Only available on Mac OS X. ! lchmod55[--5[-5Y-5[ 66W!W[d8<Q _[[8[8[QW[d8<Q (8[8[QW[d8<Q  8[8[QW[d8<Q X[ 66W! W[d8<Q [8[8[Q 77[[Q[8[8[QW[d8<Q z8[8[Q W[d8<Q (8[8[Q 77[[[QP[ 66W!W[d8<Q [8[8[Q 77[[Q[[[[[[[[[[[[W[d8<Q [8[8[QB\Synchronous lchmod(2). !  lchmodSync55\--5[-5Y\ 66W!W\d8<Q _\\8\8\QW\d8<Q (8\8\QW"\d8<Q  8&\8&\QW*\d8<Q X0\ 66W! W6\d8<Q \8:\8:\Q 77>\>\Q\8.\8.\QWC\d8<Q z8G\8G\Q WK\d8<Q (8O\8O\Q 77S\S\S\QPV\ 66W!W\\d8<Q 0\8`\8`\Q 77d\d\Q\V\#\0\+\7\W\]\D\\\L\Wg\d8<Q \8k\8k\QBo\Asynchronous stat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object. See the fs.Stats section below for more information. ! H55H--5[-5q\ 66W!W|\d8<Q _\H8\8\QW\d8<Q (8\8\QW\d8<Q  8\8\QW\d8<Q X\ 66W! W\d8<Q o\8\8\Q 77\\Qp\8\8\QW\d8<Q z8\8\Q W\d8<Q (8\8\Q 77\\\QP\ 66W!W\d8<Q \8\8\Q 77\\QH\\\\\\\\}\\\W\d8<Q o\8\8\QB\Asynchronous lstat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object. lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to. ! lstat55\--5[-5\ 66W!W\d8<Q _\\8\8\QW\d8<Q (8\8\QW\d8<Q  8\8\QW]d8<Q X ] 66W! W]d8<Q \8]8]Q 77]]Q\8]8]QW]d8<Q z8 ]8 ]Q W$]d8<Q (8(]8(]Q 77,],],]QP/] 66W!W5]d8<Q  ]89]89]Q 77=]=]Q\/]\ ]]]0]6]]\\%]W@]d8<Q \8D]8D]QBH]Asynchronous fstat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object. fstat() is identical to stat(), except that the file to be stat-ed is specified by the file descriptor fd. ! fstat55L]--5U-5J] 66W!WV]d8<Q _\]L]8Z]8Z]QW`]d8<Q (8d]8d]QWh]d8<Q  8l]8l]QWp]d8<Q Xv] 66W! W|]d8<Q H]8]8]Q 77]]QI]8t]8t]QW]d8<Q z8]8]Q W]d8<Q (8]8]Q 77]]]QP] 66W!W]d8<Q v]8]8]Q 77]]QL]]i]v]q]}]]]]W]a]]W]d8<Q H]8]8]QB]9Synchronous stat(2). Returns an instance of fs.Stats. ! -I55-I--5[] 66W!W]d8<Q _]-I8]8]QW]d8<Q (8]8]QW]d8<Q  8]8]QW]d8<Q X] 66W! W]d8<Q ]8]8]Q 77]]Q]8]8]QW]d8<Q z8]8]Q W]d8<Q (8^8^Q 77^^^QP^ 66W!W ^d8<Q ]8^8^Q 77^^Q-I^]]]]^^]]]]W^d8.!.G2MM 1# Q ]8^8^QB#^:Synchronous lstat(2). Returns an instance of fs.Stats. !  lstatSync55'^--5[%^ 66W!W0^d8<Q _6^'^84^84^QW:^d8<Q (8>^8>^QWB^d8<Q  8F^8F^QWJ^d8<Q XP^ 66W! WV^d8<Q #^8Z^8Z^Q 77^^^^Q$^8N^8N^QWc^d8<Q z8g^8g^Q Wk^d8<Q (8o^8o^Q 77s^s^s^QPv^ 66W!W|^d8<Q P^8^8^Q 77^^Q'^v^C^P^K^W^w^}^d^1^;^l^W^d8<Q #^8^8^QB^:Synchronous fstat(2). Returns an instance of fs.Stats. !  fstatSync55^--5U^ 66W!W^d8<Q _^^8^8^QW^d8<Q (8^8^QW^d8<Q  8^8^QW^d8<Q X^ 66W! W^d8<Q ^8^8^Q 77^^Q^8^8^QW^d8<Q z8^8^Q W^d8<Q (8^8^Q 77^^^QP^ 66W!W^d8<Q ^8^8^Q 77^^Q^^^^^^^^^^^^W^d8<Q ^8^8^QB^lAsynchronous link(2). No arguments other than a possible exception are given to the completion callback. ! l55l--5srcpath-5dstpath-5^ 66W!W _d8<Q __l8_8_QW_d8<Q (8_8_QW_d8<Q  8!_8!_QW%_d8<Q X+_ 66W! W1_d8<Q ^85_85_Q 779_9_Q^8)_8)_QW>_d8<Q z8B_8B_Q WF_d8<Q (8J_8J_Q 77N_N_N_QPQ_ 66W!WW_d8<Q +_8[_8[_Q 77____QlQ__+_&_2_R_X_?_ __G_Wb_d8<Q ^8f_8f_QBj_Synchronous link(2). ! linkSync55n_--5_-5_l_ 66W!Wx_d8<Q _~_n_8|_8|_QW_d8<Q (8_8_QW_d8<Q  8_8_QW_d8<Q X_ 66W! W_d8<Q j_8_8_Q 77__Qk_8_8_QW_d8<Q z8_8_Q W_d8<Q (8_8_Q 77___QP_ 66W!W_d8<Q _8_8_Q 77__Qn_________y___W_d8<Q j_8_8_QB_Asynchronous symlink(2). No arguments other than a possible exception are given to the completion callback. type argument can be either 'dir', 'file', or 'junction' (default is 'file'). It is only used on Windows (ignored on other platforms). Note that Windows junction points require the destination path to be absolute. When using 'junction', the destination argument will automatically be normalized to absolute path. ! symlink55_--5_-5_-5-5_ 66W!W_d8<Q ___8_8_QW_d8<Q (8_8_QW_d8<Q  8_8_QW`d8<Q X` 66W! W `d8<Q _8`8`Q 77``Q_8`8`QW`d8<Q z8`8`Q W"`d8<Q (8&`8&`Q 77*`*`*`QP-` 66W!W3`d8<Q `87`87`Q 77;`;`Q_-`_```.`4``__#`W>`d8<Q _8B`8B`QBF`Synchronous symlink(2). !  symlinkSync55J`--5_-5_-5H` 66W!WU`d8<Q _[`J`8Y`8Y`QW_`d8<Q (8c`8c`QWg`d8<Q  8k`8k`QWo`d8<Q Xu` 66W! W{`d8<Q F`8`8`Q 77``QG`8s`8s`QW`d8<Q z8`8`Q W`d8<Q (8`8`Q 77```QP` 66W!W`d8<Q u`8`8`Q 77``QJ``h`u`p`|````V````W`d8<Q F`8`8`QB`RAsynchronous readlink(2). The callback gets two arguments (err, linkString) . ! readlink55`--5[-5` 66W!W`d8<Q _``8`8`QW`d8<Q (8`8`QW`d8<Q  8`8`QW`d8<Q X` 66W! W`d8<Q `8`8`Q 77``Q`8`8`QW`d8<Q z8`8`Q W`d8<Q (8a8aQ 77aaaQPa 66W!Wad8<Q `8a8aQ 77aaQ`a```` aa````Wad8<Q `8a8aQB!aFSynchronous readlink(2). Returns the symbolic link's string value. !  readlinkSync55%a--5[#a 66W!W.ad8<Q _4a%a82a82aQW8ad8<Q (8d8>dQWBdd8<Q XHd 66W! WNdd8<Q d8Rd8RdQ 77VdVdQd8Fd8FdQW[dd8<Q z8_d8_dQ Wcdd8<Q (8gd8gdQ 77kdkdkdQPnd 66W!Wtdd8<Q Hd8xd8xdQ 77|d|dQQnd;dHdCdOdodud\d)d3dddQBdSynchronous mkdir(2). !  mkdirSync55d--5[-5Yd 66W!Wdd8<Q _dd8d8dQWdd8<Q (8d8dQWdd8<Q  8d8dQWdd8<Q Xd 66W! Wdd8<Q d8d8dQ 77ddQd8d8dQWdd8<Q z8d8dQ Wdd8<Q (8d8dQ 77dddQPd 66W!Wdd8<Q d8d8dQ 77ddQddddddddddddWdd8<Q d8d8dQBdAsynchronous readdir(3). Reads the contents of a directory. The callback gets two arguments (err, files) where files is an array of the names of the files in the directory excluding '.' and '..'. ! readdir55d--5[-5d 66W!Wdd8<Q _ed8d8dQWed8<Q (8e8eQW ed8<Q  8e8eQWed8<Q Xe 66W! W ed8<Q d8$e8$eQ 77(e(eQd8e8eQW-ed8<Q z81e81eQ W5ed8<Q (89e89eQ 77=e=e=eQP@e 66W!WFed8<Q e8Je8JeQ 77NeNeQd@e eee!eAeGe.ede6eWQed8<Q d8Ue8UeQ]YeQSynchronous readdir(3). Returns an array of filenames excluding '.' and '..'. !  readdirSync55]e--5[[e 66W!Wfed8<Q _le]e8je8jeQWped8<Q (8te8teQWxed8<Q  8|e8|eQWed8<Q Xe 66W! Wed8<Q Ye8e8eQ 77eeQZe8e8eQWed8<Q z8e8eQ Wed8<Q (8e8eQ 77eeeeQPe 66W!Wed8<Q e8e8eQ 77eeQ]eee FsReadDirSyncyeeeeeeegeqeeWed8<Q Ye8e8eQBenAsynchronous close(2). No arguments other than a possible exception are given to the completion callback. ! T55T--5U-5e 66W!Wed8<Q ,T8e8eQWed8<Q (8e8eQWed8<Q  8e8eQWed8<Q Xe 66W! Wed8<Q e8e8eQ 77eeQe8e8eQWfd8<Q z8f8fQ W fd8<Q (8f8fQ 77fffQPf 66W!Wfd8<Q e8 f8 fQ 77$f$fQTfeeeefffee fW'fd8<Q e8+f8+fQB/fSynchronous close(2). !  closeSync553f--5U1f 66W!WioiBih !  futimesSync55i--5U-5g-5gh 66W!Wid8<Q _ii8i8iQWid8<Q (8i8iQWid8<Q  8i8iQWid8<Q Xi 66W! Wid8<Q i8i8iQ 77iiQi8i8iQWid8<Q z8i8iQ Wid8<Q (8i8iQ 77iiiQPi 66W!Wid8<Q i8i8iQ 77iiQiiiiiiiiiiiiWid8<Q i8i8iQBimAsynchronous fsync(2). No arguments other than a possible exception are given to the completion callback. ! fsync55i--5U-5i 66W!Wjd8<Q _ ji8 j8 jQWjd8<Q (8j8jQWjd8<Q  8j8jQW!jd8<Q X'j 66W! W-jd8<Q i81j81jQ 775j5jQi8%j8%jQW:jd8<Q z8>j8>jQ WBjd8<Q (8Fj8FjQ 77JjJjJjQPMj 66W!WSjd8<Q 'j8Wj8WjQ 77[j[jQiMjj'j"j.jNjTj;jjjCjW^jd8<Q i8bj8bjQBfjSynchronous fsync(2). !  fsyncSync55jj--5Uhj 66W!Wsjd8<Q _yjjj8wj8wjQW}jd8<Q (8j8jQWjd8<Q  8j8jQWjd8<Q Xj 66W! Wjd8<Q fj8j8jQ 77jjQgj8j8jQWjd8<Q z8j8jQ Wjd8<Q (8j8jQ 77jjjQPj 66W!Wjd8<Q j8j8jQ 77jjQjjjjjjjjjjtj~jjWjd8<Q fj8j8jQBjWrite buffer to the file specified by fd. offset and length determine the part of the buffer to be written. position refers to the offset from the beginning of the file where this data should be written. If position is null, the data will be written at the current position. See pwrite(2). The callback will be given three arguments (err, written, buffer) where written specifies how many bytes were written from buffer. Note that it is unsafe to use fs.write multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream is strongly recommended. On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file. ! #55#--5U-5buffer-5U-5-5position-5j 66W!Wjd8<Q _j#8j8jQWjd8<Q (8j8jQWjd8<Q  8j8jQWjd8<Q Xk 66W! W kd8<Q j8k8kQ 77kkQj8k8kQWkd8<Q z8k8kQ W kd8<Q (8$k8$kQ 77(k(k(kQP+k 66W!W1kd8<Q k85k85kQ 779k9kQ#+kjkk k,k2kkjj!kWpDp+pop3pWNpd8<Q o8Rp8RpQBVpWatch for changes on filename. The callback listener will be called each time the file is accessed. The second argument is optional. The options if provided should be an object containing two members a boolean, persistent, and interval. persistent indicates whether the process should continue to run as long as files are being watched. interval indicates how often the target should be polled, in milliseconds. The default is { persistent: true, interval: 5007 }. The listener gets two arguments the current stat object and the previous stat object: fs.watchFile('message.text', function (curr, prev) { console.log('the current mtime is: ' + curr.mtime); console.log('the previous mtime was: ' + prev.mtime); }); These stat objects are instances of fs.Stat. If you want to be notified when the file was modified, not just accessed you need to compare curr.mtime and prev.mtime. !  watchFile55Zp--5H%-5-5listenerXp 66W!Wfpd8<Q _lpZp8jp8jpQWppd8<Q (8tp8tpQWxpd8<Q  8|p8|pQWpd8<Q Xp 66W! Wpd8<Q Vp8p8pQ 77ppQWp8p8pQWpd8<Q z8p8pQ Wpd8<Q (8p8pQ 77pppQPp 66W!Wpd8<Q p8p8pQ 77ppQZppypppppppgpqppWpd8<Q Vp8p8pQBpStop watching for changes on filename. If listener is specified, only that particular listener is removed. Otherwise, all listeners are removed and you have effectively stopped watching filename. Calling fs.unwatchFile() with a filename that is not being watched is a no-op, not an error. !  unwatchFile55p--5H%-5app 66W!Wpd8<Q _pp8p8pQWpd8<Q (8p8pQWpd8<Q  8p8pQWpd8<Q Xp 66W! Wpd8<Q p8p8pQ 77qqQp8p8pQWqd8<Q z8 q8 qQ Wqd8<Q (8q8qQ 77qqqQPq 66W!Wqd8<Q p8#q8#qQ 77'q'qQpqppppq qqppqW*qd8<Q p8.q8.qQB2qWatch for changes on filename, where filename is either a file or a directory. The returned object is a fs.FSWatcher. The second argument is optional. The options if provided should be an object containing a boolean member persistent, which indicates whether the process should continue to run as long as files are being watched. The default is { persistent: true }. The listener callback gets two arguments (event, filename). event is either 'rename' or 'change', and filename is the name of the file which triggered the event. ! watch556q--5H%-5-5ap4q 66W!WAqd8<Q _Gq6q8Eq8EqQWKqd8<Q (8Oq8OqQWSqd8<Q  8Wq8WqQW[qd8<Q Xaq 66W! Wgqd8<Q 2q8kq8kqQ 77oqoqQ3q8_q8_qQWtqd8<Q z8xq8xqQ W|qd8<Q (8q8qQ 77qqqQPq 66W!Wqd8<Q aq8q8qQ 77qqQ6qqTqaq\qhqqquqBqLq}qWqd8<Q 2q8q8qQBqTest whether or not the given path exists by checking with the file system. Then call the callback argument with either true or false. Example: fs.exists('/etc/passwd', function (exists) { util.debug(exists ? "it's there" : "no passwd!"); }); ! exists55q--5[-5q 66W!Wqd8<Q _qq8q8qQWqd8<Q (8q8qQWqd8<Q  8q8qQWqd8<Q Xq 66W! Wqd8<Q q8q8qQ 77qqQq8q8qQWqd8<Q z8q8qQ Wqd8<Q (8q8qQ 77qqqQPq 66W!Wqd8<Q q8q8qQ 77rrQqqqqqqqqqqqqWrd8<Q q8 r8 rQ\ r%Synchronous version of fs.exists. !  existsSync55r--5[r 66W!Wrd8<Q _ rr8r8rQW$rd8<Q (8(r8(rQW,rd8<Q  80r80rQW4rd8<Q X:r 66W! W@rd8<Q  r8Dr8DrQ 77HrHrQr88r88rQWMrd8<Q z8Qr8QrQ WUrd8<Q (8Yr8YrQ 77]r]r]r]rQP`r 66W!Wfrd8<Q :r8jr8jrQ 77nrnrQr`r`r*-r:r5rArargrNrr%rVrWqrd8<Q  r8ur8urQ\yrReturns a new ReadStream object (See Readable Stream). options is an object with the following defaults: { flags: 'r', encoding: null, fd: null, mode: 0666, autoClose: true } options can include start and end values to read a range of bytes from the file instead of the entire file. Both start and end are inclusive and start at 0. The encoding can be 'utf8', 'ascii', or 'base64'. If autoClose is false, then the file descriptor won't be closed, even if there's an error. It is your responsiblity to close it and make sure there's no file descriptor leak. If autoClose is set to true (default behavior), on error or end the file descriptor will be closed automatically. An example to read the last 10 bytes of a file which is 100 bytes long: fs.createReadStream('sample.txt', {start: 90, end: 99}); ! createReadStream55}r--5[-5{r 66W!Wrd8<Q _r}r8r8rQWrd8<Q (8r8rQWrd8<Q  8r8rQWrd8<Q Xr 66W! Wrd8<Q yr8r8rQ 77rrQzr8r8rQWrd8<Q z8r8rQ Wrd8<Q (8r8rQ 77rrrrQPr 66W!Wrd8<Q r8r8rQ 77rrQ}rrrRrrrrrrrrrrWrd8<Q yr8r8rQ\rReturns a new WriteStream object (See Writable Stream). options is an object with the following defaults: { flags: 'w', encoding: null, mode: 0666 } options may also include a start option to allow writing data at some position past the beginning of the file. Modifying a file rather than replacing it may require a flags mode of r+ rather than the default mode w. ! createWriteStream55r--5[-5r 66W!Wrd8<Q _rr8r8rQWrd8<Q (8s8sQWsd8<Q  8 s8 sQWsd8<Q Xs 66W! Wsd8<Q r8s8sQ 77"s"sQr8s8sQW'sd8<Q z8+s8+sQ W/sd8<Q (83s83sQ 777s7s7s7sQP:s 66W!W@sd8<Q s8Ds8DsQ 77HsHsQr:s:sSssss;sAs(srr0sWKsd8<Q r8Os8OsQ   d8Q8QQPhhH\SS3ff_?`#=kHWW]ee%aasYYdReWXmVVlbb-I^T(fHkkp+q\A]rLsSTXXklcdoOp[[V=W+[[n__PZZfgjjjZpp5RRaab6qqYhYi_j}rr\h\)llqr^^RRL]]grgddrrr'^^iijmmUUYEZJ``h!ilc_TUVbVb:c`aEccllo}o'XXZ [mJpJJJEJQJ{JJ K2KKK%K=KLKMMMMMMMSM/MMIJJJI JIM&MIJL*JLKJ'L?LGLKKJ5LJYJMJbJ@MCKKKKGI . !.. gD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\middleware\init.js'ns !d!.d8<ms 38vs8vsd8<msg vq`# # svf =" s## yz/** * Initialization middleware, exposing the * request and response to each other, as well * as defaulting the X-Powered-By header field. * * @param {Function} app * @return {Function} * @api private */ "" g #Ayz  expressInit" " s sss g } iul#/"  ss## #g viul X-Powered-By# lExpress# ,&"   s## #(#)s#)s#Jsvf ="- s#*#*s#4#* #*svf ="@s#=#=s#G#= #=svf =@"Ss#P#P@  @s#[#P#Psvf ="i s#f#f "ys#v#v #f#fsvf =" s## " s## ##svf ="s## f 9"s## iul#"   sss## ##!#.#/svi@s###s#s# ss# ss#@ ss#9#9s#Gs# ss#T#T#c#ds#s  $   8 \  C F _ u      & 9 L a b         #srssssd!&8<msssssssd!&8<mss  t!t#f#P#G#*8s8s8s mss@&8<mss 4#[#8s8s8s msss&8<ms at 66W!Wt8< 8 t8 t8 tmsWt8< 8t8t8tmsWtd8<ms  8t8tmsW!td8<ms X't 66W! W-td8<ms t81t81tms 775t5tmst8%t8%tms 7; !7 ???[[[ uuu sb( M!d8< ! [[[ d!&8< !w [[[ www sb( M!d8<v 8w8w  w&8< !ww[[ ww bsaw 66W!Wwd8< Xw 66W! Wwd8< w8w8w 77www8w8wWwd8<  8w8w 77wwwPw 66W!Wwd8< w8x8x 77xxwZ1#l  xd888 bc!bb(" (cwd8<2uu 8x8xwcwww VV[[ Vd!&8< !>w ???[[[ uuu sb d8<2x VVV[[[ xxx sbu d8<[[ d!&8<4x 1#89x89x89x @&8<4x 1#8Ax8Ax8Ax &8<4x 1#8Ix8Ix8Ix    4xud8885x \su 82x82x  xS&8< !>w%xu 1#1# &8Yx8Yx8Yx &8< 1#&8cx8cx8cx  x&8<  !wuu>ww%x-xwvux  t&!t##\##R####J#`##L#########%#/#^##p#C#k#####'#9# # # #j #L #@ 8lx8lx8lx K&8<-x  t!t#^##p#C#k#####'#9# # # #j #L #@ 8ux8ux8ux K x&8<2x-x 1# 11# z8~x8~x8~x &8<-x 1# 11# z8x8x8x  x&8< !w>ww%xwu 1#I t!t#o #T # # 38x8x8x &8< 1#I38x8x8x  xX&8< ax 66W!Wxd8< Xx 66W! Wxd8< x8x8xWx8< v 8x8x8xWx8< !>w%xu 8x8x8x0Wx8<2x-x 8x8x8x"Wx8< !>w%xu 8x8x8x 77xxx8x8xWxd8<  8x8x 77xxxPx 66W!Wx8< !>w%xu 8y8y8yWy8< v 8 y8 y8 yWyd8< x8y8y0Wy8<2x-x 8y8y8y"W#y8< !>w%xu 8'y8'y8'y 77-y-yXxd888 bc!b.xc-x0xxV 8x8x8x V&8< x8;y8;y8;y V x+&8< !>w%xu 1#r1# 8Cy8Cy8Cy *&8< 1#r8My8My8My * x&8<  !wuu>ww%xwvu^^[[ ^d!u&8<Yy 4##8^y8^y8^y K&8<Yy 4##8fy8fy8fy  d8< 1#ary 66W!Wxyd8< X~y 66W! Wyd8< ry8y8y 77yysy8|y8|yWyd8<  8y8y 77yyyPy 66W!Wyd8< ~y8y8y 77yyZy?ysyd8<YY[[ Yd!e&8<y 1#&81#B88y8y8y &8<y 1#8 t!t#>8#G8#Y8#l88y8y8y Z&8< ry8y8y8y Yb&8<y 1#7& t!t#8#T8#8@y>>999d>999 66W!Wyd8< 8y8y 7; !z7yyy8y8y8y ayRd!u&8<y 1# 8ay 66W!Wzd8< Xz 66W! Wzd8< y8z8z 77zzy8z8zWzd8<  8z8z 77#z#z#zP&z 66W!W,zd8< z80z80z 774z4z&zZ t!t#A##u# 7z?:zyd8<2[[ d!K&8< (8Fz8Fz8Fz &8<2Az [[[ BzBzBz sb( M!d8< !>w%xu 8Uz8Uz  Bz>9=2AzPz 9z9z>999 66W!Wzd8< 8z8z 7; !7zzz8z8z8z &8<z 1#q5&1#5z8z8z8z  zz&8< !PzzAzyz 4#5#g68z8z8z &8<z 1#58z8z8z  zz&8<2AzPz 1#68z8z8z &8888  zz&8<2yzz 1#5 t!t#5#5#5#5#5#58z8z8z &8<z 1#5 t!t#5#5#5#5#5#58z8z8z  zz|z&8<z 1#B5' t!t#5#5#5@{>>9= !PzzAzyz z9{9{>9= z9{9{ 66W!W{8< !PzzAzyz 8{8{8{W {d8< 8${8${ 7; !z7*{({({8z8z8z d888a5{ 66W!W;{d8< XA{ 66W! WG{d8< 6{8K{8K{ 77O{O{5{8?{8?{WT{d8<  8X{8X{ 77\{\{\{P_{ 66W!We{d8< A{8i{8i{ 77m{m{_{Z1# p{?s{5{d8<2yzz  t!t#5 #5 #T5 t{8w{8w{d8< y8{8{ bc!bzczzyz 5{[[  Zs{Azyz 1#B5' t!t#L6#k6#5#5#5{8~z8~z8~z zzu{zz   Bzyz5{d888zz os5{{yz 1#A6 t!t#H6#Z6#q6#|68Mz8Mz8Mz z8>zd888 bc!bQzcPzSzAz 8y8y8y &8<y 1#{8a{ 66W!W{d8< X{ 66W! W{d8< {8{8{ 77{{{8{8{W{d8<  8{8{ 77{{{P{ 66W!W{d8< {8{8{ 77{{{d888Yy^ 8{8{8{    yRR[[ yy rsa{ 66W!W{d8< X{ 66W! W|d8< {8|8| 77||{8{8{W |d8<  8|8| 77|||P| 66W!W|d8< {8"|8"| 77&|&|S|Z1# )|d8< ry8.|8.| bc!bby{ c RRR[[[ yyy s3|d8<2x-x ry89|89|  y{&8< {8B|8B|8B|  yuy&8< y8J|8J|8J| d888{{{{7|b{ uc RRR[[[ yyy sS|d8<2x-x ry8Y|8Y|  y{&8< {8b|8b|8b|  yuy&8888 d888{{{{W|{R {{d888yyysyd888y sssy{  t!t#b8 #,8 #7 y8y8yd888yY 8oy8oyxxxZy    lylyYy{d888Zy _s{x  t!t##a#Q##8Vy8Vy8Vy L&8888 L x&8< !>w%xuYy 1# t!t#U# #@|!>9= _| _|_ALL9|9| 66W!W|8<Yy 8|8|8|W|8<2 [[[ d!&8< ! [[[ ||| sb|@|>>9.!.|  2  ( (  d!&8< 2|    ( ( ( ||| sb"P| 66W! W|8< !u>w%x 8|8|8| [W|d8<  1# 8|8| zW|d8<  !|    ( ( (  d!b&8< 2  ( ( || sa} 66W!W }d8<  X} 66W!zW}8< 2}| 8}8}8}  W}d8<  }8#}8#}  77'}'} }8 }8 } W,}d8<   80}80}  774}4}4} P7} 66W!zW=}8< 2}| 8A}8A}8A} WG}d8<  }8K}8K}  77O}O}  7}d8<  *8T}8T} bc!bb| k9c|d8.!.  * !u>w%x 8^}8^}} | 1#8|8|8|    &8<  }8j}8j}8j}   &8< 2}| 1#4##}8q}8q}8q}    d8<  1#L_} 8}}8}}|||   X X}}d8<  |"8}8}|| sY}\}  |o}&8< | 1#4##}8}8}8}    | h}&8<  }8}8}8}    |b|&8< | 1#8}8}8}    z}{}d8<  1#L}8}8}d8<  "|8}8}}}# |} 1# t!t# #4 #[ #F # #p #0 # U} 66W! W}8<  !|||} 8}8}8}  W}8< 2}| 1# 1#*8}8}8}  W}8< 2|| 8}8}8}  7;  !|} !7}}}  8|8| W}d8<  X} 66W! W}d8.!. !u>w%x 1#^  1#a} 66W!W~d8<  X ~ 66W!zW~8< 2|| 8~8~8~  W~d8<  }8~8~  77!~!~ }8~8~ W&~d8<   8*~8*~  77.~.~.~ P1~ 66W!zW7~8< 2|| 8;~8;~8;~ WA~d8<   ~8E~8E~  77I~I~  1~d8<  |8N~8N~ bc!b|c|d8.!.  | !u>w%x 8V~8V~| 8}8} zW^~8<  !||# |} 8b~8b~8b~  Wh~d8<  8l~8l~ Wp~d8<  1#H aw~ 66W!W}~d8<  X~ 66W! W~d8<  w~8~8~ zW~8< # 8~8~8~ 0W~8< # 8~8~8~  77~~ x~8~8~ W~d8<   8~8~  77~~~ P~ 66W!zW~8< # 8~8~8~ W~d8<  ~8~8~ 0W~8< # 8~8~8~  77~~ ~?~x~d8< # 1# ~8~8~d8<  ~|8~8~# $ 8t~8t~  W~d8.!. !u>w%x 1#  1#|}8~8~ 0W~8< 2# 8~8~8~ BW~d8.!.[[ d!N&8< 1#=- t!t#.#-#-#-|8 8 8   [&8< 4#O-#o-888 U&8< 1#]-4#-#.s888 *   a! 66W!W'd8< X- 66W!W38< 878787 W<d8< "8@8@0WD8< 8H8H8H)WM8< 8Q8Q8Q 77VV!8+8+W[d8<  8_8_ 77cccPf 66W!Wl8< 8p8p8pWud8< -8y8y0W}8< 888)W8< 888 77Nfd8< |88 d888 gs!{ 1#-  1#Sa 66W!Wd8<   88 @W8< 888 Wd8<  X 66W! Wd8<  88 zW8<  888 0W8<  888  77 88  77 P 66W!zW8<  888 Wd8<  88 0W8<  888  77 Bd888 88  77   8}8}  W8< !u>w%x 888 0Wd8< 2# 1# 4# # 8 8  BW'8< 8+8+8+  7700 d k9T~  |z&8< 2|| 1## t!t# ####t|878787   &8< | 1## t!t# ####t|8A8A8A    | &8<  }8K8K8K   &8<  }8R8R8R    ||&8< | 1# t!t####8Z8Z8Z   d8<  "|8c8c}} 1# t!t####8|8|8|    Iz5|}d8<  |"8o8o| s}| ||9|9| >9=  _| |9y9y 66W!XW8< 2|| 888 W8.!.|  2|| 888 Wd8<  88  7;  !|7  d8< !u%x>w 88  |&8< !||[[ || jsa 66W!Wd8< X€ 66W! WȀd8< 8̀8̀ 77ЀЀ88WՀd8<  8ـ8ـ 77݀݀݀P 66W!Wd8< €88 77Z1#G d888 bc!b|c|b| #c|d8< !>w%xu 88 { 4#/#x/|888 &8<| 4#/#x/|8 8 8  |b&8< !|| 1#/4#/#/||888 &8<| 1#/4#/#/||888  |&8< !|| 4#/#/|8)8)8) &8<| 4#/#/|828282  ||&8<| 1#m/ t!t#t/#/#/8;8;8; d888{{| 1#m/ t!t#t/#/#/8|8|8| 'b   d888|| s  |&8<| 4#/#x/8S8S8S  |b&8<| 1#/4#/#/8\8\8\  |'&8<| 4#/#/|8f8f8f  ||&8<| 1#m/ t!t#t/#/#/8o8o8o d888{{| 8|8|8|XW}8<2|| 888:W8< [[[ d!3&8<2[[  qsa 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  88 77P 66W!WƁd8< 8ʁ8ʁ 77΁΁Z1# сd888 bc!bb| #cd8<Yy 8ށ8ށ { 1#74#C7#W73888 2&8<2 4#27#N7888 O@&8<2 1#t7888 Q&8<2 1#7|888 P   d888 sف܁  &8< 1#7|8 8 8 P @&8< 1#t7888 Q &8< 4#27#N7888 O 3&8< 1#74#C7#W738%8%8% 2d888{{ 888W3d8< 8787 77;;8|8|8| &8< 1# |8C8C8C  x&8< !ww-xwx 1# M t!t##R# z8L8L8L &8<-x 1# M4# #Rz8V8V8V  x&8< !uuv 1#l w8`8`8` &8< w8i8i8i  x@&8< !wuuw-xwvx  t!t##f#7#V###au 66W!W{d8< X 66W! Wd8< u88 77v88Wd8<  88 77P 66W!Wd8< 88 77@Z t!t##f#7#V### d888 bc!bb c>d8<w 88wcww&xc%x(xu? 8q8q8q ?&8<-x 4##u8Ȃ8Ȃ8Ȃ ? x&8< !>w%xu 1#1# v8т8т8т &8< 1#v8ۂ8ۂ8ۂ  x &8< !>w%xu 1#e t!t###K888  &8< 1#e888   x0&8< !>w%xu 1#4 t!t###R@2>9= !u>w%x s99 66W!XW 8< 8 8 8 W8< !u>w%x 888Wd8< 8 8  77$$888 $&8< 1#48,8,8, $ x&8< !>w%x-xux 1# t!t###<xu858585 &8<-x 1# 1#<xu8@8@8@  x&8< !>w%x-xux 1#5 t!t#A##u#y8K8K8K ;&8<-x 1#51#y8U8U8U ; x&8<2x-x 1#] !4# # z8_8_8_ &8<-x 1#] !4# # z8i8i8i  x2&8<  !w>ww%x-xwux 1# t!t#` # #Q 38s8s8s 1&8<-x 1#1#Q 38}8}8} 1 x@&8<2x-x 1#888 M&8<-x 1#888 M x x&8< 1#t 3888  lymyd8< 1#ry88d8< u88xx{{ 8*x8*x  u&8< !uu>w%xvu 1#5 t!t# # #F # #Z # #{ (888 F&8<%x 1#5 t!t#F # #Z # #{ (888 F ub&8< !>w%xu 1# t!t##'#8ǃ8ǃ8ǃ &8<%x 1# t!t##'#8у8у8у  uN&8< !uu>w%xvu  t!t###8ۃ8ۃ8ۃ &8<%x 4##888  u&8< !uu>w%xvu  t!t#x#7##V#4#888 &8<%x  t!t##V#4#888  uK&8< !>w%xu 4##(888  &8<%x 4##888   u&8< !>w%xu 4#u#"888 &8<%x 4#u#"888  u[&8< !uu>w%xvu 1# t!t###"8#8#8# &8<%x 1#4##"8-8-8-  u &8< !>w%xu 1#*4# # *878787 &8<%x 1#*4# # *8A8A8A  uu&8< 1#J8K8K8K _   Sd8< 1#H &8U8Uuuu   Z ZSSd8< 1#H &8\8\  d8< 1#38e8euuu    cd8< 1#38l8l  d8< !>w%xu 1#4##s8u8uuuu d8< !>w%xu 1# t!t##h# &*88rrr Nd8< !>w%xu 1# t!t#^##"|88}}} d8< 1#M &(*88 v v m m d8< 1#a&88   n n d8< 1#&88             @ @  sd8<%x 1#4##s88 }~d8<%x 1# t!t##h# &*88 Nd8<%x 1# t!t#^##|8Ä8Ä d8< 1#M &(*8̄8̄ d8< 1#a&8Մ8Մ d8< 1#&8݄8݄d888vvxxu 1#t 4##38"x8"x8"x @2q]I30 ς@o^J|Ty+AyXxx|xjxSWx   lyuwxxd8< u88x ^sx{  t!t##=#8w8w8w F&8<w  t!t##=#888 F w[&8< !www 1#"888 I&8<w 1#8 8 8 I w&8< !www  t!t# #9 # # # 888 H&8<w  t!t# #9 # # # 888 H w&8< !www  t!t#P #) #< (8%8%8% G&8<w  t!t#P #) #< (8.8.8. G ww&8<w 1# t!t#-# #878787   d8< !www 1#/ t!t####u#m#8B8Bwww Sd8< 1# *8M8M???       B B@d8<w 1#/ t!t####u#m#8T8T JSKd8< 1# *8]8]d888wwxxw 1# t!t#-# #8w8w8w #[wxxx?wwd888ww sxx  ww&8<w  t!t##=#8t8t8t F w[&8<w 1#"8}8}8} I w&8<w  t!t# #9 # # # 888 H w#&8<w  t!t#P #) #< (888 G ww&8<w 1# t!t#-# #888  ?@d8<w 1#/ t!t####u#m#88 JSKd8< 1# *88d888wwxxuuwv 8w8w  u&8<w 1#5 t!t#F # #Z # #{ (888 F ubŃ&8<w 1# t!t##'#8ą8ą8ą  uNك&8<w 4##8΅8΅8΅  u&8<w  t!t##V#4#8ׅ8ׅ8ׅ  uK&8<w 4##(888   u&8<w 4#u#"888  u[!&8<w 1#4##"888  u 5&8<w 1#*4# # *888  uu&8< 1#J888 _  RSSd8< 1#H &88 bcd8< 1#388 rsd8<w 1#4##s88 }~d8<w 1# t!t##h# &*8(8( Nd8<w 1# t!t#^##"|8282 d8< 1#M &(*8<8< d8< 1#a&8E8E d8< 1#&8M8Md888vvxx%x 8w8w v 8Zw8Zw8Zw    uu v]wd8< xu8^8^!v cs]w{u v 8u8u  uKu&8<u 4# # 8i8i8i   ,d8< 1#4! 8s8suuu 2d8< !uuu 1#H!4#c!#!8|8|ppp d8< !uuu 1#! t!t###4##!#!#!88yyy 7d8< !uuu 1#! t!t#####"#"88 <d8< !uuu 1#!1##"88 Ad8< !uuu 1#! t!t#w# #<# #" #" #" #" 88 Ad8< 1## U 66W!Wd8< 1##G(88Wņd8< 1##G8Ɇ8ɆWΆd8< 1##G8҆8҆ 77׆׆88 $ $ # # $ $ ! ! $ $ ! ! $ $ ! ! $ $ ! ! $ $ W! W! $ $ B! B!,qd8< 1#4! 8ކ8ކ y2zd8<u 1#H!4#c!#!88 d8<u 1#! t!t###4##!#!#!88 7d8<u 1#! t!t#####"#"88 <d8<u 1#!1##"88 Ad8<u 1#! t!t#w# #<# #" #" #" #" 8 8  Ad8< 1## 88d888ww v vu 8u8u  uK&8< !uuu  t!t#%#%#$8"8"8" <&8<u  t!t#%#%#$8+8+8+ < uu&8<u 1#[$!4#<%#a%848484 d888uu v vu 1#[$!4#<%#a%8u8u8u K !v!v!vuud888uu svv  uK &8<u  t!t#%#%#$8L8L8L < uu&8<u 1#[$!4#<%#a%8U8U8U d888uu v vuuuuu 8u8u  uKu&8<u 4# # 8f8f8f  p,qd8< 1#4! 8o8o y2zd8<u 1#H!4#c!#!8w8w d8<u 1#! t!t###4##!#!#!88 7d8<u 1#! t!t#####"#"88 <d8<u 1#!1##"88 Ad8<u 1#! t!t#w# #<# #" #" #" #" 88 Ad8< 1## 88d888ww v vuu 4# # 8u8u8u !v!v!vpuwd888u dsw vuu 8u8u  uKu&8<u 4##888  d888;v;vuuv 4##8u8u8u  uuuv;vd888uu s}vv  uKu&8<u 4##8҇8҇8҇  d888;v;vuuuv 1#J1# 8u8u8u _  5[!KNكbŃxxxRbruuvd888u `svx>w%x 1#8u8u)Wd8< 1# 88Wd8< v 1#( 1#Q v88IW8<t 888XW8<4x 8 8 8 Wd8< 1#   88Wd8< 1#U88W!d8< 1#>@(>999 66W!W2d8< 8686 77::8%8%W?8< !u>w%x 8C8C8C0WId8< !x-x 1# 4#< #+ 8M8MWTd8< XZ 66W! W`d8< u8d8d 77hhu8X8X 77mmmPp 66W!Wvd8< Z8z8z 77~~pZ t !t###<######U#>#(#  d8884x 8'u8'u8'u 77K 66W!W8.!.ms 1# itt 1#888ms 77msos Tjc ssssssssss std8.!.ms tt 88  ss&8<ms t888 mssd8<ms 88htht~s~sgts ~s  t!t##v#t8s8s8s mssssssgthtd8<ms 8ˆ8ˆ !ssss !s ts itmss s 1#8|s8|sd8<ms _ш_D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\middleware8ψ8ψd8<ms Rڈ 66W!Wd8.!.ms @ 1#c88ms 77msoss8؈8؈sƈLjms~sosۈ6: @ 6s !ڈittttot{ttttt't"t.tAtGttts~s ls   G9j. _D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\request.js' !d!hostd8< 1#%88 :&8<2z ip""    g #vq`# # #$" $iul$# k k###!#&"  iul#$ iul#k####+#4)isIP"4 ,,"Iiulnet#Ck#;#;#;#0#T4typeis"T 7iultype-is#e k#]#]#P #u>n"u niuln#k#|#|#q#F)!" )!iul)!#k####$N parseRange"  Qiul range-parser#k###)#X "  iul# k### #!` :"   :iul:# k###&#APh"A f = #Gf ="W #Q#Q#b/#f)#f " IncomingMessage"unA#q#q#q#Q@#GJ#=Uvf = "@k#=#=f =%"Jk#G#G yz %%"]"c % % g #rlc"r i "{  #w#w#w#n# # lreferer# g ##T lreferrer# g #=f 9" )"## #")"## ##5#=# ' g #iu#0)"'#### #####j#d #T#T#G#=#=vf =$"s k#p #p yz /** * To do: update docs. * * Check if the given `type(s)` is acceptable, returning * the best match when true, otherwise `undefined`, in which * case you should respond with 406 "Not Acceptable". * * The `type` value may be a single MIME type string * such as "application/json", an extension name * such as "json", a comma-delimited list such as "json, html, text/plain", * an argument list such as `"json", "html", "text/plain"`, * or an array `["json", "html", "text/plain"]`. When a list * or array is given, the _best_ match, if any is returned. * * Examples: * * // Accept: text/html * req.accepts('html'); * // => "html" * * // Accept: text/*, application/json * req.accepts('html'); * // => "html" * req.accepts('text/html'); * // => "text/html" * req.accepts('json, text'); * // => "json" * req.accepts('application/json'); * // => "application/json" * * // Accept: text/*, application/json * req.accepts('image/png'); * req.accepts('png'); * // => undefined * * // Accept: text/*;q=.5, application/json * req.accepts(['html', 'json']); * req.accepts('html', 'json'); * req.accepts('html, json'); * // => "json" * * @param {String|Array} type(s) * @return {String|Array|Boolean} * @public */ $""  g # accept"  iu# $ $# # # # -iu#  # " %" # # # # %# Q#~ [#~ [#p i#p jvf =acceptsEncodings"_ k#\ #\ yz~/** * Check if the given `encoding`s are accepted. * * @param {String} ...encoding * @return {String|Array} * @public */ Љ""{  g # ׉"  Ӊiu# $ $# # # Չ# 1iuډ#  Ӊ# "  encodings" ډ# # # # )Չ#} UӉ#s _#s _#\ v#\ wvf =acceptsEncoding" k# # iuЉ" k# # l1req.acceptsEncoding: Use acceptsEncodings instead# 3I" !# # # _# u# vvf =acceptsCharsets" k# # yz/** * Check if the given `charset`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...charset * @return {String|Array} * @public */ ""&  g #0 "0  iu#A $ $#9 #9 #, #J 0iu#g  #o "` &"W #Q #Q #Q #Q (#( T# ^# ^# t# uvf =acceptsCharset" k# # iu" k# # l/req.acceptsCharset: Use acceptsCharsets instead# 1I" !# # # \# q# rvf =acceptsLanguages"k##yz/** * Check if the given `lang`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...lang * @return {String|Array} * @public */ #"" g #*" &iu#$ $## #(#1iu-#  &# " languages" -####)(#U&#_#_#v#wvf =acceptsLanguage"$k#!#!iu#"Mk#J#Jl1req.acceptsLanguage: Use acceptsLanguages instead#b3I"@ !#7 #7#7_#!u#!vvf =range"k## yz/** * Parse Range header field, * capping to the given `size`. * * Unspecified ranges such as "0-" require * knowledge of your resource length. In * the case of a byte range this is of course * the total number of bytes. If the Range * header field is not given `null` is returned, * `-1` when unsatisfiable, `-2` when syntactically invalid. * * NOTE: remember that ranges are inclusive, so * for example "Range: users=0-3" should respond * with 4 users when available, not 3. * * @param {Number} size * @return {Array} * @public */ M"" g #TM" MPiulRange# "####R} # #MW#g # a# ^#R#iusize hP#(MW#.Q QR# #R#\P#h iP#j#j#v#wvf =:"k## yz/** * Return the value of param `name` when present or `defaultValue`. * * - Checks route placeholders, ex: _/user/:id_ * - Checks body params, ex: id=12, {"id":12} * - Checks query string params, ex: ?id=12 * * To utilize request bodies, `req.body` * should be an object. This can be done by using * the `bodyParser()` middleware. * * @param {String} name * @param {Mixed} [defaultValue] * @return {String} * @public */ ::""  : :t g  #)z") tf 9"6#2#2 #A#2#%x#K3"K 3tf 93"V#R#R #_#R#Gx#i"i tf 9"u#q#q ##q#ex#@b" btkf 2" t# #l?##l name, default#l##9#Exviuf %f %l req.param(# b##l1): Use req.params, req.body, or req.query instead#3#I !# #T#Ux} f 8f 1l#+iu t#:}#3#3 #+iu#Y "I}#C#C#C#+3g #`iu#n}#g#g #`#'Mx} f 1l#{iu#3## #{g #iu#3## NJ##w*x} f 1l#iu### #g #iu### Պ#Ί#,x# defaultValue  ފt# x#!t#  t# ފ ߊt####vf =is";k#8#8yz/** * Check if the incoming request contains the "Content-Type" * header field, and it contains the give mime `type`. * * Examples: * * // With Content-Type: text/html; charset=utf-8 * req.is('html'); * req.is('text/html'); * req.is('text/*'); * // => true * * // When Content-Type is application/json * req.is('json'); * req.is('application/json'); * req.is('application/*'); * // => true * * req.is('html'); * // => false * * @param {String|Array} types... * @return {String|false|null} * @public */ "J"L   g #\ arr"\ % %#b#X} # #iu%# "     ## #g vf =#iu" # # ###!#"x f 4 #"## ## ! ##" l##  g vf =iu ###iu ##  #  ###$ #I#z##&iu#4#:7 78#-#-#T#M% #A#A#8 #8 viuk#lprotocol# yz 0"" 0 02 g #<7" 2k encrypted"  connection" ###ln#lhttps# #4#A5#(&Dtrust"( G2iulz#= "8"4#0#0#0 #0#$+5} #W( #iu remoteAddress"m?"b #^#^#^l#}GH#X#X'g # :#Y#O#SE5vf =:#f 9iulX-Forwarded-Proto# "# # # :#+# &#.#/5#4!iul#Riu#G \s*,\s*&"@:#;#; #;#;5#{2## defineGetter s# ##viuk#lsecure#yz z"" z z| g #!f 20" ## lC###'|#8#8st# #U#Vviuk#l #y #_st# #x#yviuk#lips#yz ""   g #&G" Giulz# ""### ##+#"addrs" iu#G#" :  :c# # ##'# i" iul?# " # # # # # #~##st#| #|#|viuk#2"l subdomains#7" yz "N" "X"   g #c"ŋhostname"c" ȋȋ"r" #n"#n" #_"Ë} #"  #ȋɋ#"g #" e#"ϋ#" ̋#"Ë#")ӋU"" Uiul6#" """"#"#"#" #" #".Ë#"Q݋""  k#" #iuȋɋ#", ,-#"#"euȋɋ#### i"#iul##&""ȋɋ#"#"#"#"#"#"D#"VË#(# iuU֋#@#"9##/# #/##/#Ë#["#E"#E"st#%" #%"&#%"'viuk##l[##yz ["#"# [ [ g ##"# iu##   [#### ####"##2##2st## ##M##Nviuk#$lȋ#$ yz ȋ"$"$ ȋ ȋ g # %&G" % Giulz#% "%"%#%#%#% #%#%+#7%#!"7% iulX-Forwarded-Host#G% "B%#>%#>%#>%#3%(} f 9#c% #$#d%#l%( #iuT"%?"w% #s%#s%#s%l#%G#m%#m%'#c%1g vf =$#%iulHost#% "%#%#%#%#%#%7#%"+#_%Y} #% #$#%g #%E#%B#%#%<HU"% Ukf 2iul#%$#%#%l[#&#%l#+&f %iul]#&"&$#&#& #&l?##&#&#%3#%A#4&!]N;"4& N;iulu#I&UK#N&"@&$#<&#<& #<&#0&&#Z&>kf 3N;`#a&#k& &l?#l&#a& $#&iul#&N;`#&"x& $#t&#t&#t&#a&6#%#$#$st#$ #$#$viuk#&l#&iuyz " '"'  } g #'ȋ" ' #'#' #'}#'*#'*l"req.host: Use req.hostname instead#.'$I"& !#& #&#&dst#& #&#&viuk#'l)!#'yz ""' g #(b"( bb"(#(#( #(##(s"#(  "/( "+(#'(#'(#'(#(} f 8f 1lGET#w(b#(#w(f 1l% #(b#(#(#w(#g #( l#(#( #s(6} f 9|f 8f 7#(li@#(#(f 4#(lr@#(#(#(#(f 0ls@#(#(#(#(!g #(6iu)")# )# ) |f 9_headers"#) ")#)#)#)#0)#)#))! )!I#)#).#(@#(g#=) l#D)#'M#'W#'Wst#' #'s#'tviuk#)lstale#)yz ӌ"*"* ӌ ӌՌ g #*# *  #)!"%*#!*#!* ،#*Ռ#*)#*)st#) #)E#)Fviuk#*lxhr#*yz "*"*   g #*(, "* , f 9iulX-Requested-With#* "*#*#*#*l5#*#*"#*-#*.f 2i "* , #*#*#*lxmlhttprequest#+#*&#*d#*r#*rst#* #*#*z/** * Helper function for creating a getter on an object. * * @param {Object} obj * @param {String} name * @param {Function} getter * @private */ s"+ "+ s g viu #+  #+#,C# ,M# , l#,##, enumerable##, l#/,#9,  #9,getter  #>,S"+  #+#+#+e#+f#+l#+ #+  #+ #+s#L,#N,     8 \  0 P q       " 8 < = d          , / O i l          - 8 < = G l         5 9 < = A X [     ? p   5 q t         . O h       5 P g j    > ` k o p   2 L W [ \   L M Q    * H { ~  % ` c ~         ! `        1 _     + \           6 9 : >       > p         # E c      $ % u        . e h u x       E ]         ( 3 7 8 V i j       # $ @ C D H x    ! $ U          " P Q       2 V Z [ _ r u            L O          7 ; < @     < V Y l w { |    ! % & * L O 4! 7! t! ! ! " " " $" %" ]" }" ~" " " " " # %# &# I# M# N# R# # # # # # # # # # # # .$ 1$ e$ $ $ $ $ $ $ $ % 1% \% ]% % % % % % % % & %& .& W& X& n& & & & & & & ' +' V' W' [' ' ' ' ' ' ' ' ' ( ( <( =( q( ( ( ( ( 6) :) ;) K) O) P) T) z) ) ) ) ) ) ) ) * -* 1* 2* 6* g* j* * * * * * * + + + "+ Y+ \+ s+ + + + + + , , 5, E, K, N,#N, g #&'G" G iulz# ""### ##+%#iu#)G*#/ :  :c# #%#R #_  d8< 1#GU@ 66W!WFd8< 1# 8J8JЉWOd8<88 r 1#\ 1# aX 66W!W^d8< Xd 66W! Wjd8< X8n8n 77rrY8b8bWwd8<  8{8{ 77P 66W!Wd8< d88 77Љ?Yd8<ӉӉ8Ӊd!&8< 1# 4# # 888 ى:::Yd888 rYU 1# 88d888Ӊ 8S8SWd8<  a 66W!Wd8< Xō 66W! Wˍd8< 8ύ8ύWӍ8<2282d!0&8< 8ލ8ލ8ލ 2&8<ٍ 1#<4##+_n_C888 9G&8<ٍ 1#(&1#X888 F::: d8<ٍ 1#1#;88ڍڍڍ W W 0 0ٍd888ڍ rU 8׍8׍8׍ W 8<ٍ 888?W8<ٍ 888 778Í8ÍW#d8<  8'8' 77+++P. 66W!?W48<ٍ 888888W=8<ٍ 8A8A8A WF8<ٍ 8J8J8JWOd8< ō8S8S 77WW0.Z1#>, Zd8< 8_8_ٍ2 ad 66W!Wjd8< Xp 66W! Wv8<8d!, &8<| 1#*(1#*3888 &8< d888 :::|ed888} reU 8z8z8z Wd8< d88 77e8n8nWd8<  88 77P 66W! W8<| 888Wd8< p88 77ŎŎZ1#>, Ȏd8< _Ў38͎8͎| aԎ 66W!Wڎd8< X 66W! Wd8< Ԏ88)W8<8d!b&8< 1#(4#(#(888 &8< 1##( t!t#(#(#(888 :::Վd888 rՎU 888bW8< 888W8< 888 77""Վ8ގ8ގW'd8<  8+8+ 77///P2 66W!W88< 8<8<8<)WA8< 8E8E8EWJd8< 8N8NbWR8< 8V8V8V 77[[2Z1#>, ^d8< &8c8c ag 66W!Wmd8< Xs 66W!)!Wy8<ՌՌ8Ռd!ӌ&8< g888 Ռ:::hd888 rhU 8}8}8} Wd8< g88 77h8q8qWd8<  88 77P 66W!)!W8< 888Wd8< s88 77ӌZ1#>, d888Ռ aɏ 66W!WϏd8< XՏ 66W! Wۏd8< ɏ8ߏ8ߏW8<8d!N;&8< 1#4&!4#a&#&888 _ȋ&8< ɏ888 G&8< 1# %&1#m%888 &8< 1#7%# t!t#&#t&#<&#&#%#%#d%888 #U&8< 1#%<1#N&888 J::: d8< 1#%88 m& m& % %ʏd888 rʏU 888 W'8< 8+8+8+?W08< 848484 7799ʏ8ӏ8ӏW>d8<  8B8B 77FFFPI 66W!?WO8< 8S8S8SWX8< 8\8\8\ Wa8< 8e8e8eWjd8< Տ8n8n 77rrȋIZ1#>, ud888 a| 66W!Wd8< X 66W!ȋW8<8d!&8< 1#"Q1#/# @>>999>999 66W!W8< 888Wd8< 88 77888 ߋȋ&8< 1#c" t!t###"#"#"8Ő8Ő8Ő NjU&8< 1#")1#@#8ΐ8ΐ8ΐ Ջ:::}d888 r}U 888 Wܐd8< |88W8< 888 77}88Wd8<  88 77P 66W!ȋW8< 888W 8< 888Wd8< 88 77Z1#>,  d8< @(ҋ>999 66W!W2d8< 8686 77::8%8% a? 66W!WEd8< XK 66W!WQ8<8d!&8< ?8\8\8\ G&8<W 1#&1#8c8c8c &8<W 1#"1# 8l8l8l :::W@d888X r@U 8U8U8U Wzd8< ?8~8~ 77@8I8IWd8<  88 77P 66W!W8<W 888Wd8< K88 77Z1#>, d888W a 66W!Wd8< X 66W!0Wő8<||8|d!z&8< 8Б8Б8Б |:::ˑd888̑ rU 8ɑ8ɑ8ɑ Wܑd8< 88 7788Wd8<  88 77P 66W!0W8<ˑ 888Wd8< 88 77  zZ1#>, d888ˑ| a 66W!Wd8< X! 66W!W'8< 8+8+8+ W0d8< 8484 778888W=d8<  8A8A 77EEEPH 66W!WN8< 8R8R8RWWd8< !8[8[ 77__ HZ1#>, bd888  88%Wkd8< 1#G ar 66W!Wxd8< X~ 66W!)W8<8d!&8< 1#r1#0888 %&8< r888 &8< 1#w888 :::sd888 rsU 888 Wd8< r88 77s8|8|Wd8<  88 77PĒ 66W!)Wʒ8< 8Β8Β8ΒWӒd8< ~8ג8ג 77ےے%Ēd888 8o8ozWd8<  Ԏdgɏ|?88Wd8<U 1# 1# a 66W!Wd8< X 66W! Wd8< 8 8  7788Wd8<  88 77P 66W!W%d8< 8)8) 77--?0d8<8d!2&8<6 1#0 4#g #Q 8;8;8; :::6d8887 rU 1#o 18484d8886 88@WOd8< 1#!8S8SWXd8< 1#b/X_ 66W !AWed8<. nCkTo use the HTTP server and client one must require('http'). The HTTP interfaces in Node are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly chunk-encoded, messages. The interface is careful to never buffer entire requests or responses--the user is able to stream data. HTTP message headers are represented by an object like this: { 'content-length': '123', 'content-type': 'text/plain', 'connection': 'keep-alive', 'accept': '*/*' } Keys are lowercased. Values are not modified. In order to support the full spectrum of possible HTTP applications, Node's HTTP API is very low-level. It deals with stream handling and message parsing only. It parses a message into headers and body but it does not parse the actual headers or the body. 66W!Wrd8.!.j Kx 66W !AW~d8.!.j HThis object is created internally by a HTTP server--not by the user. It is passed as the second parameter to the 'request' event. The response implements the [Writable Stream][] interface. This is an [EventEmitter][] with the following events: ! A, 66W!Wd8<j _A88jWd8<j (88jWd8<j  88jWd8.!.j* 1#j X 66W! Wd8<j 88jreW8<` z ""  g v"  œ###Ɠ#œ#  œœ# ˓œ#%œœg #aӓn"a nГiuln#pk kГ#h#h#]ѓviuyœ#%"~ n֓#z#z#z8#z9ѓviulp@#j"biuyz ""  g viuli@###, #l text/html#  writeHead"   ## #3#4viul

Node.js

#&#"## ##viul

Hello World

#H"C#@#@#@#@##  # ##" n֓######ѓviul&HTTP server is listening at port 3000.#~("y? ?Г#r#r #r5#r6ѓ#Г    7 ] z  < ` r #ГГœd!&8<`2œœГГ a #66W!Wd8<` # 8,8,`Wd8<` #8484` 77999`P #66W!Wd8<` #68F8F` 77JJ`<d888 bc!bbPT 66W!WZd8<j _8^8^j 77bbjyPe 66W!Wk8<` z ""  g viuli@###, #l# "   r## #3#4sviul##"## ##sviul#"# # # # s#r#  rr# r#rrg #cn"c niuln#rk k#j#j#_viulp@#5"-iuyr#" n######viul#I("D? ?#=#= #=5#=6#u    7 ] _ | ~  + = u#urd!&8<`2rr a '66W!Wd8<` ' 8Ô8Ô`Wd8<` '8˔8˔` 77ДДД`P '66W!Wd8<` '͔8ݔ8ݔ` 77`Ӕd888 bc!bbTe cqd8<` '88r q ' t!t# ##e888 '`&8<` 'T888 '`d888   &8<` 'T888 '` &8<`q ' t!t# ##e888 '`d888 '8o8o8oj#W8<`q '888jwW%8<` z ""  g v$"  ,###-#,#  ,,# 2,#$,,g #a:n"a n7iuln#pk k7#h#h#]8viuy,#$"~ n=#z#z#z7#z88viulp@#i"aiuyz ""  g viuli@###, #l# "   Q## #3#4Rviul#%#"_## ##Rviul#G"B_#?#?#?#?R#Q#  QQ# _Q##" n=######8viul#}("x? ?7#q#q #q5#q68#7    7 ] z  ; _ q #77,d!&8<`2,,77|| qa 66W!Wd8<`  88`Wd8<` 88` 77`P 66W!Wd8<` 88` 77`d888 bc!bbTe c+d8<`77 p 88, + 1#e888 `6&8<` T8ĕ8ĕ8ĕ `4d888|| t  |•&8<` T8ѕ8ѕ8ѕ `4 |~&8<`+ 1#e8ٕ8ٕ8ٕ `6d888 8)8)8)jC!W8<` z ""  g viuC!"   ######  # #1g #an"a niuln#pk k#h#h#]viuy#1"~ n#z#z#zD#zEviulp@#v"niuyz ""  g viuli@###, #l# "   ## #3#4viul#2#"+"#(#( #(#(viul#T"O"#L#L#L#L##  # "##" n######viul#("? ?#~#~ #~5#~6#    7 ] z $ H l ~ #d!&8<`2?? a $66W!Wd8<` $ 8Q8Q`Wd8<` $8Y8Y` 77^^^`P $66W!Wd8<` $[8k8k` 77oo`ad888 bc!bbTe cd8<` $8|8|F ~ $1#e8C8C8C $`&8<` $T888 $`FGd888?? wz  ?&8<` $T888 $` ?A&8<` $1#e888 $`d888GG~~ $888jW8<`q '888j writeContinueW8<` z ""  g v"  #####  # #0g #aȖn"a nŖiuln#pk kŖ#h#h#]Ɩviuy#0"~ n˖#z#z#zC#zDƖviulp@#u"miuyz ""  g viuli@###, #l# "   ߖ## #3#4viul#1#"*#'#' #'#'viul#S"N#K#K#K#K#ߖ#  ߖߖ# ߖ##" n˖######Ɩviul#("? ?Ŗ#}#} #}5#}6Ɩ#Ŗ    7 ] z # G k } #ŖŖd!&8<`2ŖŖ  wa !66W!Wd8<` ! 88`Wd8<` !8$8$` 77)))`P !66W!Wd8<` !&8686` 77::`,d888 bc!bbTe cd8<`ŖŖ v !8G8G I !1#e888 !`Ė&8<` !T8R8R8R !`–d888  zBE   P&8<` !T8_8_8_ !`–   &8<` !1#e8g8g8g !`Ėd888II !888jWtd8<j 8x8xjW|8<`ē #888j 77jA cēd8<`ГГ #88!œ ē #1#e888 #`ϓ&8<` #T888 #`͓!"d888 R  &8<` #T888 #`͓ &8<`ē #1#e888 #`ϓd888"" #8“8“8“jWd8.!.j BThis method signals to the server that all of the response headers and body have been sent; that server should consider this message complete. The method, response.end(), MUST be called on each response. If data is specified, it is equivalent to calling response.write(data, encoding) followed by response.end(). ! 55--5m-5 66W!W˗d8<j _ї8ϗ8ϗjW՗d8<j (8ٗ8ٗjWݗd8<j  88jWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z88j Wd8<j (8 8 j 77jP 66W!Wd8<j 88j 77j`q '1# 88j W&d8< \, !  55 - 66W!W6d8<j _< 8:8:jW@d8<j (8D8DjWHd8<j  8L8LjWPd8<j XV 66W! W\d8<j ,8`8`j 77ddj-8T8TjWid8<j z8m8mj Wqd8<j (8u8uj 77yyyyjP| 66W!Wd8<j V88j 77j ||E !  77j8*8*jAWd8<j BSets the Socket's timeout value to msecs. If a callback is provided, then it is added as a listener on the 'timeout' event on the response object. If no 'timeout' listener is added to the request, the response, or the server, then sockets are destroyed when they time out. If you assign a handler on the request, the response, or the server's 'timeout' events, then it is your responsibility to handle timed out sockets. ! A55A--5msecs-5 66W!Wd8<j _A88jWd8<j (88jWd8<j  88jWĘd8<j Xʘ 66W! WИd8<j 8Ԙ8Ԙj 77ؘؘj8Ș8ȘjWݘd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j ʘ88j 77jAB ! A55A--5-5 66W!W d8<j 88jWd8<j (88jWd8<j  8!8!jW%d8<j X+ 66W! W1d8<j 8585j 7799j8)8)jW>d8<j z8B8Bj WFd8<j (8J8Jj 77NNNjPQ 66W!WWd8<j +8[8[j 77__jAQ88j#Wd8<j* 8h8h8hj#Wmd8.!.j BsIf this method is called and response.writeHead() has not been called, it will switch to implicit header mode and flush the implicit headers. This sends a chunk of the response body. This method may be called multiple times to provide successive parts of the body. chunk can be a string or a buffer. If chunk is a string, the second parameter specifies how to encode it into a byte stream. By default the encoding is 'utf8'. Note: This is the raw HTTP body and has nothing to do with higher-level multi-part body encodings that may be used. The first time response.write() is called, it will send the buffered header information and the first body to the client. The second time response.write() is called, Node assumes you're going to be streaming data, and sends that separately. That is, the response is buffered up to the first chunk of body. Returns true if the entire data was flushed successfully to the kernel buffer. Returns false if all or part of the data was queued in user memory. 'drain' will be emitted when the buffer is again free. ! #55#--5-5u 66W!Wd8<j j88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j s88j 77jt88jWd8<j z88j Wd8<j (88j 77jPę 66W!Wʙd8<j 8Ι8Ιj 77ҙҙj#ę`q '1#8q8qjsendDateWڙd8< \ ! ٙ55ٙ- 66W!Wd8<j _ٙ88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z8!8!j W%d8<j (8)8)j 77----jP0 66W!W6d8<j  8:8:j 77>>jٙ00EA !  77DDj8ޙ8ޙjC!WId8.!.j BOpRemoves a header that's queued for implicit sending. Example: response.removeHeader("Content-Encoding"); ! C!55C!--5Q 66W!W[d8<j _aC!8_8_jWed8<j (8i8ijWmd8<j  8q8qjWud8<j X{ 66W! Wd8<j O88j 77jP8y8yjWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j {88j 77jC!` $1#8M8MjWd8.!.j BSends a response header to the request. The status code is a 3-digit HTTP status code, like 404. The last argument, headers, are the response headers. Optionally one can give a human-readable reasonPhrase as the second argument. Example: var body = 'hello world'; response.writeHead(200, { 'Content-Length': body.length, 'Content-Type': 'text/plain' }); This method must only be called once on a message and it must be called before response.end() is called. If you call response.write() or response.end() before calling this, the implicit/mutable headers will be calculated and call this function for you. Note: that Content-Length is given in bytes not characters. The above example works because the string 'hello world' contains only single byte characters. If the body contains higher coded characters then Buffer.byteLength() should be used to determine the number of bytes in a given encoding. And Node does not check whether Content-Length and the length of the body which has been transmitted are equal or not. ! 55--5 -5 reasonPhrase-5) 66W!W˚d8<j _њ8Ϛ8ϚjW՚d8<j (8ٚ8ٚjWݚd8<j  88jWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z88j Wd8<j (8 8 j 77jP 66W!Wd8<j 88j 77j`q '1#388jB&W&d8<j B,Reads out a header that's already been queued but not sent to the client. Note that the name is case insensitive. This can only be called before headers get implicitly flushed. Example: var contentType = response.getHeader('content-type'); ! B&55B&--5. 66W!W8d8<j _>B&8<8<jWBd8<j (8F8FjWJd8<j  8N8NjWRd8<j XX 66W! W^d8<j ,8b8bj 77ffj-8V8VjWkd8<j z8o8oj Wsd8<j (8w8wj 77{{{jP~ 66W!Wd8<j X88j 77jB&~8*8*jWd8.!.j BSends a HTTP/1.1 100 Continue message to the client, indicating that the request body should be sent. See the ['checkContinue'][] event on Server. ! 55- 66W!Wd8<j _88jWd8<j (88jWd8<j  88jWd8<j X› 66W! Wțd8<j 8̛8̛j 77ЛЛj88jW՛d8<j z8ٛ8ٛj Wݛd8<j (88j 77jP 66W!Wd8<j ›88j 77j` !1#88j headersSentWd8< \ ! 55- 66W!Wd8<j _88jWd8<j (88jW d8<j  8$8$jW(d8<j X. 66W! W4d8<j 8888j 77<<j8,8,jWAd8<j z8E8Ej WId8<j (8M8Mj 77QQQQjPT 66W!WZd8<j .8^8^j 77bbjTTEe !  77hhj88j addTrailersWnd8<j BtThis method adds HTTP trailing headers (a header but at the end of the message) to the response. Trailers will only be emitted if chunked encoding is used for the response; if it is not (e.g., if the request was HTTP/1.0), they will be silently discarded. Note that HTTP requires the Trailer header to be sent if you intend to emit trailers, with a list of the header fields in its value. E.g., response.writeHead(200, { 'Content-Type': 'text/plain', 'Trailer': 'Content-MD5' }); response.write(fileData); response.addTrailers({'Content-MD5': "7895bf4b8828b55ceaf47747b4bca667"}); response.end(); ! m55m--5)v 66W!Wd8<j _m88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j t88j 77ju88jWd8<j z88j Wd8<j (88j 77ÜÜÜjPƜ 66W!W̜d8<j 8М8Мj 77ԜԜjmƜ8r8rj,&Wٜd8<j BߜSets a single header value for implicit headers. If this header already exists in the to-be-sent headers, its value will be replaced. Use an array of strings here if you need to send multiple headers with the same name. Example: response.setHeader("Content-Type", "text/html"); or response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]); ! ,&55,&--5-5 66W!Wd8<j _,&88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j ߜ88j 77j8 8 jWd8<j z8#8#j W'd8<j (8+8+j 77///jP2 66W!W8d8<j  8<8<j 77@@j,&28ݜ8ݜj$WE8<`+ 8I8I8Ij 77NNj88jWSd8<j z8W8Wj W[d8<j (8_8_j 77ccccjfffj* 1#`g #amn"a njiuln#pk kj#h#h#]kviulp@# "iuyz ""  g viuli@###, #l# "   ~## #1#2viul##"## ##viul#"#####x~#  ~~# ~##"~ np#z#z#z#z#z#zkviul#4("/? ?j#(#( #(5#(6k#`j    7 ] z  ( `#`j 2 88jServerWd8<j H:This is an [EventEmitter][] with the following events: ! , 66W!Wd8<j _88jWŝd8<j (8ɝ8ɝjW͝d8<j  8ѝ8ѝjW՝d8<j X۝ 66W!Wd8.!.j BBegin accepting connections on the specified port and hostname. If the hostname is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY). To listen to a unix socket, supply a filename instead of port and hostname. Backlog is the maximum length of the queue of pending connections. The actual length will be determined by your OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on linux. The default value of this parameter is 511 (not 512). This function is asynchronous. The last parameter callback will be added as a listener for the ['listening'][] event. See also [net.Server.listen(port)][]. ! 55--5port-5ȋ-5backlog-5 66W!Wd8<j _88jWd8<j (88jW d8<j  88jW8<!!,d!&8< 1#5 4#5#5P" 66W!W(8.!.` ' 8,8,8,jW2d8<j ۝8686j 77::j888 d8< 1#5 ?EaG 66W!WMd8< XS 66W! WYd8< H8]8] 77aaG8Q8QWfd8<  8j8j 77nnnPq 66W!Wwd8< S8{8{ 77qF@d888 8B8B&8< H888 ...Gd888 sG@ 888jWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z88j Wd8<j (88j 77jPž 66W!WȞd8<j 8̞8̞j 77ООjžBӞThe handle object can be set to either a server or socket (anything with an underlying _handle member), or a {fd: } object. This will cause the server to accept connections on the specified handle, but it is presumed that the file descriptor or handle has already been bound to a port or domain socket. Listening on a file descriptor is not supported on Windows. This function is asynchronous. The last parameter callback will be added as a listener for the 'listening' event. See also net.Server.listen(). ! 55--5X-5՞ 66W!Wd8<j 88jWd8<j (88jWd8<j  88jW8< 888jWd8<j X 66W! W d8<j Ӟ88j 77jԞ88jWd8<j z88j W"d8<j (8&8&j 77***jP- 66W!W3d8<j 8787j 77;;j-B>՞ ! 55--5X-5՞ 66W!WJd8<j 8N8NjWRd8<j (8V8VjWZd8<j  8^8^jWb8< 8f8f8fjWkd8<j Xq 66W! Wwd8<j >8{8{j 77j?8o8ojWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j q88j 77jBStart a UNIX socket server listening for connections on the given path. This function is asynchronous. The last parameter callback will be added as a listener for the ['listening'][] event. See also [net.Server.listen(path)][]. ! 55--5[-5 66W!Wd8<j 88jWd8<j (88jWşd8<j  8ɟ8ɟjW͟8< 8џ8џ8џjW֟d8<j Xܟ 66W! Wd8<j 88j 77j8ڟ8ڟjWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j ܟ8 8 j 77j 1#5 ` '1#88j Wd8<j 88jmaxHeadersCountW"d8< \( ! !55!- 66W!W2d8<j _8!8686jW<d8<j (8@8@jWDd8<j  8H8HjWLd8<j XR 66W! WXd8<j (8\8\j 77``j)8P8PjWed8<j z8i8ij Wmd8<j (8q8qj 77uuuujPx 66W!W~d8<j R88j 77j!xxE !  77j8&8&jTWd8<j BRStops the server from accepting new connections. See [net.Server.close()][]. ! T55T--5 66W!Wd8<j ,T88jWd8<j (88jWd8<j  88jWd8<j X 66W! WǠd8<j 8ˠ8ˠj 77ϠϠj88jWԠd8<j z8ؠ8ؠj Wܠd8<j (88j 77jP 66W!Wd8<j 88j 77jT88jtimeoutWd8< \ ! 55- 66W!W d8<j _88jWd8<j (88jWd8<j  8!8!jW%d8<j X+ 66W! W1d8<j 8585j 7799j8)8)jW>d8<j z8B8Bj WFd8<j (8J8Jj 77NNNNjPQ 66W!WWd8<j +8[8[j 77__jQQEb !  77eej88jAWjd8<j BqSets the timeout value for sockets, and emits a 'timeout' event on the Server object, passing the socket as an argument, if a timeout occurs. If there is a 'timeout' event listener on the Server object, then it will be called with the timed-out socket as an argument. By default, the Server's timeout value is 2 minutes, and sockets are destroyed automatically if they time out. However, if you assign a callback to the Server's 'timeout' event, then you are responsible for handling socket timeouts. ! A55A--5-5s 66W!W~d8<j 88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j q88j 77jr88jWd8<j z88j Wd8<j (88j 77jP¡ 66W!Wȡd8<j 8̡8̡j 77ССjA¡Bӡs ! A55A--5-5s 66W!Wߡd8<j 88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j ӡ88j 77  jԡ88jWd8<j z88j Wd8<j (88j 77   jP# 66W!W)d8<j 8-8-j 7711jA#8n8nj 7766j8ٝ8ٝjW;d8<j z8?8?j WCd8<j (8G8Gj 77KKKKj###88jWPd8.!.j GV~Returns a new web server object. The requestListener is a function which is automatically added to the 'request' event. ! 55--5requestListenerXFFynFAn Te 66W!Wgd8<j _m8k8kjWqd8<j (8u8ujWyd8<j  8}8}jWd8<j X 66W! Wd8<j V88j 77jW88jWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j 88j 77j" 1#5` '1#8T8TjyWĢd8.!.j HʢAn IncomingMessage object is created by http.Server or http.ClientRequest and passed as the first argument to the 'request' and 'response' event respectively. It may be used to access response status, headers and data. It implements the [Readable Stream][] interface, as well as the following additional events, methods, and properties. ! y, 66W!WӢd8<j _٢y8ע8עjWݢd8<j (88jWd8<j  88jWd8.!.U 1#qj _88jWd8<j z88j Wd8<j (88j 77jUUUU 1#q`i 8Ȣ8Ȣj ClientRequestWd8<j H This object is created internally and returned from http.request(). It represents an in-progress request whose header has already been queued. The header is still mutable using the setHeader(name, value), getHeader(name), removeHeader(name) API. The actual header will be sent along with the first data chunk or when closing the connection. To get the response, add a listener for 'response' to the request object. 'response' will be emitted from the request object when the response headers have been received. The 'response' event is executed with one argument which is an instance of http.IncomingMessage. During the 'response' event, one can add listeners to the response object; particularly to listen for the 'data' event. If no 'response' handler is added, then the response will be entirely discarded. However, if you add a 'response' event handler, then you must consume the data from the response object, either by calling response.read() whenever there is a 'readable' event, or by adding a 'data' handler, or by calling the .resume() method. Until the data is consumed, the 'end' event will not fire. Also, until the data is read it will consume memory that can eventually lead to a 'process out of memory' error. Note: Node does not check whether Content-Length and the length of the body which has been transmitted are equal or not. The request implements the [Writable Stream][] interface. This is an [EventEmitter][] with the following events: ! , 66W!Wd8<j _%8#8#jW)d8<j (8-8-jW1d8<j  8585jW9d8<j X? 66W!setSocketKeepAliveWFd8<j BLiOnce a socket is assigned to this request and is connected [socket.setKeepAlive()][] will be called. ! E55E--5-5 initialDelayN 66W!WZd8<j _`E8^8^jWdd8<j (8h8hjWld8<j  8p8pjWtd8<j Xz 66W! Wd8<j L88j 77jM8x8xjWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j z88j 77jE8J8Jj setNoDelayWd8<j BfOnce a socket is assigned to this request and is connected [socket.setNoDelay()][] will be called. ! 55--5noDelay 66W!Wǣd8<j _ͣ8ˣ8ˣjWѣd8<j (8գ8գjW٣d8<j  8ݣ8ݣjWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z88j Wd8<j (88j 77   jP 66W!Wd8<j 88j 77j 88j W d8<j 8$8$jAW(d8<j B.fOnce a socket is assigned to this request and is connected [socket.setTimeout()][] will be called. ! A55A--5-50 66W!W;d8<j 8?8?jWCd8<j (8G8GjWKd8<j  8O8OjWSd8<j XY 66W! W_d8<j .8c8cj 77ggj/8W8WjWld8<j z8p8pj Wtd8<j (8x8xj 77|||jP 66W!Wd8<j Y88j 77jA8,8,jWd8<j BFinishes sending the request. If any parts of the body are unsent, it will flush them to the stream. If the request is chunked, this will send the terminating '0\r\n\r\n'. If data is specified, it is equivalent to calling request.write(data, encoding) followed by request.end(). ! 55--5m-5 66W!Wd8<j ї88jWd8<j (88jWd8<j  88jWd8<j Xä 66W! Wɤd8<j 8ͤ8ͤj 77ѤѤj88jW֤d8<j z8ڤ8ڤj Wޤd8<j (88j 77jP 66W!Wd8<j ä88j 77j88j#Wd8<j BSends a chunk of the body. By calling this method many times, the user can stream a request body to a server--in that case it is suggested to use the ['Transfer-Encoding', 'chunked'] header line when creating the request. The chunk argument should be a [Buffer][] or a string. The encoding argument is optional and only applies when chunk is a string. Defaults to 'utf8'. ! #55#--5-5 66W!Wd8<j j88jWd8<j (88jWd8<j  8#8#jW'd8<j X- 66W! W3d8<j 8787j 77;;j8+8+jW@d8<j z8D8Dj WHd8<j (8L8Lj 77PPPjPS 66W!WYd8<j -8]8]j 77aaj#S88jabortWgd8<j Bm*Aborts a request. (New since v0.3.8.) ! f55f-o 66W!Wxd8<j _~f8|8|jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j m88j 77jn88jWd8<j z88j Wd8<j (88j 77jP 66W!Wĥd8<j 8ȥ8ȥj 77̥̥jf8k8kj 77ѥѥj8=8=jW֥d8<j z8ڥ8ڥj Wޥd8<j (88j 77jP 66W!Wd8<j ?88j 77j88jW8<j* 888jcreW8<`g #an"a n iuln#pk k #h#h#]v"~n#z#z#zviulp@#9"1iuyz ""  g viuli@###, #l# "   $## #3#4%viul##"2## ##%viul#"2####%#$#  $$# 2$##" n######viul#M("H? ? #A#A #A5#A6#y     7 ] z  / A y#y  B 8 8 8 jWRd8<j GXNode maintains several connections per server to make HTTP requests. This function allows one to transparently issue requests. options can be an object or a string. If options is a string, it is automatically parsed with [url.parse()][]. Options: * host: A domain name or IP address of the server to issue the request to. Defaults to 'localhost'. * hostname: To support url.parse()hostname is preferred over host * port: Port of remote server. Defaults to 80. * localAddress: Local interface to bind for network connections. * socketPath: Unix Domain Socket (use one of host:port or socketPath) * method: A string specifying the HTTP request method. Defaults to 'GET'. * path: Request path. Defaults to '/'. Should include query string if any. E.G. '/index.html?page=12' * headers: An object containing request headers. * auth: Basic authentication i.e. 'user:password' to compute an Authorization header. * agent: Controls [Agent][] behavior. When an Agent is used request will default to Connection: keep-alive. Possible values:* undefined (default): use [global Agent][] for this host and port. * Agent object: explicitly use the passed in Agent. * false: opts out of connection pooling with an Agent, defaults request to Connection: close. http.request() returns an instance of the http.ClientRequest class. The ClientRequest instance is a writable stream. If one needs to upload a file with a POST request, then write to the ClientRequest object. Example: var options = { hostname: 'www.google.com', port: 80, path: '/upload', method: 'POST' }; var req = http.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); // write data to request body req.write('data\n'); req.write('data\n'); req.end(); Note that in the example req.end() was called. With http.request() one must always call req.end() to signify that you're done with the request - even if there is no data being written to the request body. If any error is encountered during the request (be that with DNS resolution, TCP level errors, or actual HTTP parse errors) an 'error' event is emitted on the returned request object. There are a few special headers that should be noted. * Sending a 'Connection: keep-alive' will notify Node that the connection to the server should be persisted until the next request. * Sending a 'Content-length' header will disable the default chunked encoding. * Sending an 'Expect' header will immediately send the request headers. Usually, when sending 'Expect: 100-continue', you should both set a timeout and listen for the continue event. See RFC2616 Section 8.2.3 for more information. * Sending an Authorization header will override using the auth option to compute basic authentication. ! 55--5-5ZFFyn  66W!Whd8<j _n8l8ljWrd8<j (8v8vjWzd8<j  8~8~jWd8<j X 66W! Wd8<j X88j 77jY88jWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j 88j 77j8V8Vj Wd8<j GǦSince most requests are GET requests without bodies, Node provides this convenience method. The only difference between this method and http.request() is that it sets the method to GET and calls req.end() automatically. Example: http.get("http://www.google.com/index.html", function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); }); !  55 --5-5ɦFFyn  66W!Wצd8<j }8ۦ8ۦjWߦd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j Ǧ88j 77jȦ88jWd8<j z8 8 j Wd8<j (88j 77jP 66W!W!d8<j 8%8%j 77))j 8Ŧ8Ŧj createClientW/d8<j B5This function is deprecated; please use [http.request()][] instead. Constructs a new HTTP client. port and host refer to the server to be connected to. ! .55.--5-57 66W!WBd8<j _H.8F8FjWLd8<j (8P8PjWTd8<j  8X8XjW\d8<j Xb 66W! Whd8<j 58l8lj 77ppj68`8`jWud8<j z8y8yj W}d8<j (88j 77jP 66W!Wd8<j b88j 77j.8383jAgentWd8<j H In node 0.5.3+ there is a new implementation of the HTTP Agent which is used for pooling sockets used in HTTP client requests. Previously, a single agent instance helped pool for a single host+port. The current implementation now holds sockets for any number of hosts. The current HTTP Agent also defaults client requests to using Connection:keep-alive. If no pending HTTP requests are waiting on a socket to become free the socket is closed. This means that node's pool has the benefit of keep-alive when under load but still does not require developers to manually close the HTTP clients using keep-alive. Sockets are removed from the agent's pool when the socket emits either a "close" event or a special "agentRemove" event. This means that if you intend to keep one HTTP request open for a long time and don't want it to stay in the pool you can do something along the lines of: http.get(options, function(res) { // Do stuff }).on("socket", function (socket) { socket.emit("agentRemove"); }); Alternatively, you could just opt out of pooling entirely using agent:false: http.get({hostname:'localhost', port:80, path:'/', agent:false}, function (res) { // Do stuff }) ! , 66W!Wd8<j _88jWd8<j (88jWd8<j  88jWŧd8<j X˧ 66W! maxSocketsWҧd8< \ا ! ѧ55ѧ- 66W!Wd8<j _ѧ88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j ا8 8 j 77j٧88jWd8<j z88j Wd8<j (8!8!j 77%%%%jP( 66W!W.d8<j 8282j 7766jѧ((E9 !  77<<j8֧8֧j WAd8<j 8E8EjsocketsWJd8< \P ! I55I- 66W!WZd8<j _`I8^8^jWdd8<j (8h8hjWld8<j  8p8pjWtd8<j Xz 66W! Wd8<j P88j 77jQ8x8xjWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j z88j 77jIE !  77j8N8NjrequestsWd8< \ ! 55- 66W!Wʨd8<j _Ш8Ψ8ΨjWԨd8<j (8ب8بjWܨd8<j  88jWd8<j X 66W! Wd8<j 88j 77j88jWd8<j z88j Wd8<j (8 8 j 77    jP 66W!Wd8<j 88j 77jE! !  77$$j88j 77))j8ɧ8ɧjW.d8<j z8282j W6d8<j (8:8:j 77>>>>jPA 66W!WGd8<j ˧8K8Kj 77OOjAA88j 77TTjnU 1#|j* 1#W` '1#j@ 1# 8v8vj 77aaajnd!d8<j 38h8hd8<j x8n8n.d8<j 8t8td8<j l8z8z ! !j6. !. @ j * `  ' U 6d !llxsΝ۝֝"3<ƝD ÞɞƟܟן >[qlxKSӞ.4#Ƞՠݠqáɡkӡ$*#(ERMYyf3=nb+&2RX? GeuT\›ɛ֛ޛޚ֚̚ʘŘјޘ+&2RX?Gߜ 39 (ڜ,KXS_l9Ct'On{v\fJsř˙ntǜ͜oޗ̗֗',IVQ]}j7Are!.)5U[BJAۙ 17&˧ƧBBH/79ӧا )/KPmzu[e!ݨ˨ը2?:!ץ *ߥ -(4TZAIäʤפߤmťyh.LYT`m<Du)ڣȣңLmzu[eGʢ_Wd8<j ʢ88jT[ԢޢŢB9Calls message.connection.setTimeout(msecs, callback). ! A55A--5-5 66W!Wd8<j 88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wéd8<j 8ǩ8ǩj 77˩˩j88jWЩd8<j z8ԩ8ԩj Wةd8<j (8ܩ8ܩj 77jP 66W!Wd8<j 88j 77jAĩѩ٩fB ! A55A--5-5 66W!Wd8<j 88jWd8<j (8 8 jWd8<j  88jWd8<j X 66W! W$d8<j 8(8(j 77,,j88jW1d8<j z8585j W9d8<j (8=8=j 77AAAjPD 66W!WJd8<j 8N8Nj 77RRjAD%EK2 :EU !  77XXjW[d8< \a !  httpVersion55d- 66W!Wld8<j _rd8p8pjWvd8<j (8z8zjW~d8<j  88jWd8<j X 66W! Wd8<j a88j 77jb88jWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j 88j 77jdU8_8_jamwEŪ !  77ȪȪjW˪d8< \Ѫ ! )55)- 66W!W۪d8<j _)8ߪ8ߪjWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j Ѫ88j 77  jҪ88jWd8<j z88j Wd8<j (88j 77jP! 66W!W'd8<j 8+8+j 77//j)!!Ū8Ϫ8ϪjѪ"(ܪE4 !  7777jW:d8< \@ ! trailers55C- 66W!WKd8<j _QC8O8OjWUd8<j (8Y8YjW]d8<j  8a8ajWed8<j Xk 66W! Wqd8<j @8u8uj 77yyjA8i8ijW~d8<j z88j Wd8<j (88j 77jP 66W!Wd8<j k88j 77jC48>8>j@^kfrLVE !  77jWd8< \ ! b55b- 66W!Wd8<j _b88jWīd8<j (8ȫ8ȫjW̫d8<j  8Ы8ЫjWԫd8<j Xګ 66W! Wd8<j 88j 77j8ث8ثjWd8<j z88j Wd8<j (88j 77jP 66W!Wd8<j ګ8 8 j 77jb88jͫګիūE !  77jWd8< \ ! 55- 66W!W)d8<j _/8-8-jW3d8<j (8787jW;d8<j  8?8?jWCd8<j XI 66W! WOd8<j 8S8Sj 77WWj 8G8GjW\d8<j z8`8`j Wdd8<j (8h8hj 77lllljPo 66W!Wud8<j I8y8yj 77}}joo88j<IDPpv]*4eE !  77jWd8< \ !  55 - 66W!Wd8<j <88jWd8<j (88jWd8<j  88jWd8<j X 66W! Wd8<j 88j 77ĬĬj88jWɬd8<j z8ͬ8ͬj WѬd8<j (8լ8լj 77٬٬٬٬jPܬ 66W!Wd8<j 88j 77j ܬܬ88jݬʬҬE !  77jWd8< \ ! socket55- 66W!Wd8<j _ 8 8 jWd8<j (88jWd8<j  88jW d8<j X& 66W! W,d8<j 8080j 7744j8$8$jW9d8<j z8=8=j WAd8<j (8E8Ej 77IIIIjPL 66W!WRd8<j &8V8Vj 77ZZjLL88j&!-MS:BVzhrQ5Ub]ivCM~0X{isSǦ" ئ¦)l&F}W_8<U 8c8c8cjWh8<U 8l8l8ljWq8<U 8u8u8ujΟce   8i8ijd\Љ`#r  )̪C;bi 77~~jˢ8\8\ Wd8< 1#=r88Wd8< 1# 88 Wd8<  dԎgɏ|?88Wd8< 1#8a 66W!Wd8< X 66W! Wd8< 88 7788Wĭd8<  8ȭ8ȭ 77̭̭̭Pϭ 66W!Wխd8< 8٭8٭ 77ݭݭϭ?d8<8d!&8< 1# t!t####888 %&8< 4#b#888 *&8< 888 &8< 1#\ 1#:888 ::: d8< 1#4##@>>999>999 66W!W!8< 8%8%8%W*d8< 8.8. 7; !742288 ? ?  d888 rU 4# #  88d888 88#WGd8<U 1#1#JaO 66W!WUd8< X[ 66W! Wad8< O8e8e 77iiP8Y8YWnd8<  8r8r 77vvvPy 66W!Wd8< [88 77#y?Pd8<&&8&d!&8< 1#4# #888 ,:::Pd888 rPU 1# 88d888& 8K8K)!Wd8<  dԎgɏ|?88MWd8< 1# a 66W!Wd8< XŮ 66W! Wˮ8<PP8Pd!h&8<Ѯ 1#(8֮8֮8֮ nM&8<Ѯ 1#4##.8ޮ8ޮ8ޮ V:::Ѯd888Ү rU 8Ϯ8Ϯ8Ϯ Wd8< 88 778î8îWd8<  88 77P 66W! W 8<Ѯ 888Wd8< Ů88 77Md888ѮP 88W$d8<  Ԏdgɏ|?8(8(ȋW-d8<  dԎgɏ|?8181$W6d8< 1#p a= 66W!WCd8< XI 66W! WOd8< =8S8S 77WW>8G8GW\d8<  8`8` 77dddPg 66W!Wmd8< I8q8q 77uu$g?x>d8<8d!z&8<~ 1# 4# # 888 :::~>d888 r>U 1# y8|8|d888~ 8:8:0Wd8<  Ԏdgɏ|?88ӌWd8<  dԎgɏ|?88Wd8<  Ԏdgɏ|?88Wd8<  dԎgɏ|?88:Wd8< 1# a¯ 66W!Wȯd8< Xί 66W!3Wԯ8<tt8td!&8<گ 1#) t!t#g#C#3U 66W! W8<گ 888 7;گ !78߯8߯8߯ |3&8<گ 1#K4##U  7;گ !7888 d8<گ 1# ?ï88b&8<گ 1#@1#3_888 &8<گ  t!t#####n#Y#:8#8#8# &8<گ 1#i4##U/  7;گ !73118+8+8+ :&8< ¯8<8<8< tފ&8<گ 1# 8C8C8C :::گïd888ۯ rïU 8د8د8د WPd8< ¯8T8TWX8<گ 8\8\8\Wa8<گ 8e8e8e 77jjï8̯8̯Wod8<  8s8s 77wwwPz 66W!3W8<گ 888W8<گ 888W8<گ 888Wd8< ί88 77:z d888گt 88 77s8=8=8887Үۯڍ̑ d!G&8< 1#&1#/888 ) &8< 888  ::: d888Xd![&8< aΰ 66W!W԰d8< Xڰ 66W! Wd8< ΰ88 77ϰ8ذ8ذWd8<  88 77P 66W!Wd8< ڰ88 77[d8888ȰȰ rϰU 8̰8̰8̰ ::: ϰd888}d!&8< a 66W!W!d8< X' 66W!ȋW-8<}}8 rU 818181 W7d8< 8;8; 77??8%8%WDd8<  8H8H 77LLLPO 66W!ȋWU8<3 8Y8Y8YW^d8< '8b8b 77ffOd8883} 888 }:::3d888}d!&8< ! 8ttt sb@_| Ed8<U 88  t&8< !{ 8ttt sb@_? |?d8<U 88  t&8< 1#>,?888   t&8< !{ 8ttt sb@_  d8<U 88  t&8< 1#>,888   t&8< 1#+@8ɱ8ɱ8ɱ  tv&8< 1#+8ұ8ұ8ұ d888aܱ 66W!Wd8< X 66W! Wd8< ݱ88 77ܱ88Wd8<  88 77P 66W!W d8< 88 77sZ t !t#* #) #' #& #$ ## #%" #| # # # d8<U 88 bc!bb@Pΰ .c ttt sb" .d888  t&8888   t&8888  tv&8888 d888ܱܱUU)b} Ec{b |?cb cb@_Nz 1Jyc 8ttt ~sbK 1Jyd8<U 8V8V  t&8<R 1#>,8^8^8^   t&8<R 1#+@8g8g8g  tv&8<R 1#+N8p8p8p d888ܱܱUUTb@_~0 Lc 8ttt }sb{ Ld8<U 88  t&8< 1#>,888   t&8< 1#+@888  tv&8< 1#+~888 d888ܱܱUU8tt rܱU ܱUUR 1#+@888 &8< 1#+@888  tv&8< 1#+888 d888ܱܱUUR 1#>, dԎgɏ|?888  &8<{ 1#>,|8˲8˲8˲   t&8<{ 1#+@8Բ8Բ8Բ  tv&8<{ 1#+8ݲ8ݲ8ݲ d888ܱܱUUR 1#+ N_ӌ_ȋ__)!_~8x8x8x :::ܱd888 N, N,   !t}Ռ}:ȰX |̑^2ڍ tۯPҮ&7Ӊl: ! ҋ (  3kM U 66W!W8< !{R 8 8 8 MWd8< 1#,C*88 Wd8< !{R 1#,C dԎgɏ|?88DW&8< !{R 8*8*8*W0d8< 1#,C*8484 7799   ݱ dՌ gȌ UA  77CCȌ Ԏ}  ɏ ΰ | ? | 2   /  t ¯P & O Ӊ X = r > @s @ rUW 1#!4# # 888 bd8< 1#8e8e.d8< 38l8ln&8<U 1#u1#qx8r8r8r @Q&8<Ѯ 1#$1# 8{8{8{ P &8< 1#1##888 Z,&8< 1#41#"BTests if input is an IP address. Returns 0 for invalid strings, returns 4 for IP version 4 addresses, and returns 6 for IP version 6 addresses. ! ,55,--5input 66W!Wd8<. 2CThe net module provides you with an asynchronous network wrapper. It contains methods for creating both servers and clients (called streams). You can include this module with require('net'); 66W!Wd8.!.U 1#; K 66W!SocketWd8< HThis object is an abstraction of a TCP or UNIX socket. net.Socket instances implement a duplex Stream interface. They can be created by the user and used as a client (with connect()) or they can be created by Node and passed to the user through the 'connection' event of a server. ! , 66W!Wɳd8< _ϳ8ͳ8ͳWӳd8< (8׳8׳W۳d8<  8߳8߳Wd8< X 66W!unrefWd8< BCalling unref on a socket will allow the program to exit if this is the only active socket in the event system. If the socket is already unrefd calling unref again will have no effect. ! 55- 66W!Wd8< _88W d8< (88Wd8<  88Wd8< X! 66W! W'd8< 8+8+ 77//88W4d8< z8888 W<d8< (8@8@ 77DDDPG 66W!WMd8< !8Q8Q 77UUG88refW[d8< BaOpposite of unref, calling ref on a previously unrefd socket will not let the program exit if it's the only socket left (the default behavior). If the socket is refd calling ref again will have no effect. ! Z55Z-c 66W!Wld8< _rZ8p8pWvd8< (8z8zW~d8<  88Wd8< X 66W! Wd8< a88 77b88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77Z8_8_AWŴd8< B˴Sets the socket to timeout after timeout milliseconds of inactivity on the socket. By default net.Socket do not have a timeout. When an idle timeout is triggered the socket will receive a 'timeout' event but the connection will not be severed. The user must manually end() or destroy() the socket. If timeout is 0, then the existing idle timeout is disabled. The optional callback parameter will be added as a one time listener for the 'timeout' event. ! A55A--5-5ʹ 66W!Wشd8< 8ܴ8ܴWd8< (88Wd8<  88Wd8< X 66W! Wd8< ˴88 77̴88W d8< z8 8  Wd8< (88 77P 66W!W"d8< 8&8& 77**A8ɴ8ɴresumeW0d8< B6,Resumes reading after a call to pause(). ! /55/-8 66W!WAd8< _G/8E8EWKd8< (8O8OWSd8<  8W8WW[d8< Xa 66W! Wgd8< 68k8k 77oo78_8_Wtd8< z8x8x W|d8< (88 77P 66W!Wd8< a88 77/8484 localAddressWd8< \ ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wŵd8< X˵ 66W! Wѵd8< 8յ8յ 77ٵٵ8ɵ8ɵW޵d8< z88 Wd8< (88 77P 66W!Wd8< ˵88 77E !  7788destroyW d8< BsEnsures that no more I/O activity happens on this socket. Only necessary in case of errors (parse error or so). !  55 - 66W!Wd8< _" 8 8 W&d8< (8*8*W.d8<  8282W6d8< X< 66W! WBd8< 8F8F 77JJ8:8:WOd8< z8S8S WWd8< (8[8[ 77___Pb 66W!Whd8< <8l8l 77pp b88Wud8< B{Half-closes the socket. i.e., it sends a FIN packet. It is possible the server will still send some data. If data is specified, it is equivalent to calling socket.write(data, encoding) followed by socket.end(). ! 55--5m-5} 66W!Wd8< ї88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< {88 77|88Wd8< z88 Wd8< (8Ŷ8Ŷ 77ɶɶɶP̶ 66W!WҶd8< 8ֶ8ֶ 77ڶڶ̶8y8y setEncodingWd8< BlSet the encoding for the socket as a Readable Stream. See [stream.setEncoding()][] for more information. ! ߶55߶--5 66W!Wd8< _߶88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 77  88W%d8< z8)8) W-d8< (8181 77555P8 66W!W>d8< 8B8B 77FF߶888 bufferSizeWLd8< \R ! K55K- 66W!W\d8< _bK8`8`Wfd8< (8j8jWnd8<  8r8rWvd8< X| 66W! Wd8< R88 77S8z8zWd8< z88 Wd8< (88 77P 66W!Wd8< |88 77KE !  778P8P bytesReadWd8< \· ! 55- 66W!W̷d8< _ҷ8з8зWַd8< (8ڷ8ڷW޷d8<  88Wd8< X 66W! Wd8< ·88 77÷88Wd8< z88 Wd8< (8 8  77P 66W!Wd8< 88 77  E# !  77&&88TW+d8< \1 ! T55T- 66W!W;d8< _AT8?8?WEd8< (8I8IWMd8<  8Q8QWUd8< X[ 66W! Wad8< 18e8e 77ii28Y8YWnd8< z8r8r Wvd8< (8z8z 77~~~~P 66W!Wd8< [88 77TE !  778/8/#Wd8< BSends data on the socket. The second parameter specifies the encoding in the case of a string--it defaults to UTF8 encoding. Returns true if the entire data was flushed successfully to the kernel buffer. Returns false if all or part of the data was queued in user memory. 'drain' will be emitted when the buffer is again free. The optional callback parameter will be executed when the data is finally written out - this may not be immediately. ! #55#--5m-5-5 66W!Wd8< j88Wd8< (88Wd8<  8¸8¸WƸd8< X̸ 66W! WҸd8< 8ָ8ָ 77ڸڸ8ʸ8ʸW߸d8< z88 Wd8< (88 77P 66W!Wd8< ̸88 77#88 remotePortWd8< \  ! 55- 66W!Wd8< _88W d8< (8$8$W(d8<  8,8,W0d8< X6 66W! W<d8<  8@8@ 77DD 8484WId8< z8M8M WQd8< (8U8U 77YYYYP\ 66W!Wbd8< 68f8f 77jj\\Em !  77pp8 8 Wud8< B{Construct a new socket object. options is an object with the following defaults: { fd: null type: null allowHalfOpen: false } fd allows you to specify the existing file descriptor of socket. type specified underlying protocol. It can be 'tcp4', 'tcp6', or 'unix'. About allowHalfOpen, refer to createServer() and 'end' event. ! 55--5} 66W!Wd8< ϳ88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< {88 77|88Wd8< z88 Wd8< (8Ĺ8Ĺ 77ȹȹȹP˹ 66W!Wѹd8< 8չ8չ 77ٹٹ˹8y8ypauseW߹d8< BnPauses the reading of data. That is, 'data' events will not be emitted. Useful to throttle back an upload. ! ޹55޹- 66W!Wd8< _޹88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 7788W#d8< z8'8' W+d8< (8/8/ 77333P6 66W!W<d8< 8@8@ 77DD޹688 setKeepAliveWJd8< BPEnable/disable keep-alive functionality, and optionally set the initial delay before the first keepalive probe is sent on an idle socket. enable defaults to false. Set initialDelay (in milliseconds) to set the delay between the last data packet received and the first keepalive probe. Setting 0 for initialDelay will leave the value unchanged from the default (or previous) setting. Defaults to 0. ! I55I--5-5UR 66W!W]d8< _cI8a8aWgd8< (8k8kWod8<  8s8sWwd8< X} 66W! Wd8< P88 77Q8{8{Wd8< z88 Wd8< (88 77P 66W!Wd8< }88 77I8N8N localPortWd8< \ ! 55- 66W!WǺd8< _ͺ8˺8˺WѺd8< (8պ8պWٺd8<  8ݺ8ݺWd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77    P 66W!Wd8< 88 77  E !  77!!88Q'W&d8< B,Returns the bound address, the address family name and port of the socket as reported by the operating system. Returns an object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' } ! Q'55Q'-. 66W!W7d8< _=Q'8;8;WAd8< (8E8EWId8<  8M8MWQd8< XW 66W! W]d8< ,8a8a 77ee-8U8UWjd8< z8n8n Wrd8< (8v8v 77zzzP} 66W!Wd8< W88 77Q'}8*8*;SWd8< \ ! ;S55;S- 66W!Wd8< RS88Wd8< (88Wd8<  88Wd8< X 66W! WĻd8< 8Ȼ8Ȼ 77̻̻88Wѻd8< z8ջ8ջ Wٻd8< (8ݻ8ݻ 77P 66W!Wd8< 88 77;SE !  7788connectWd8< BOpens the connection for a given socket. If port and host are given, then the socket will be opened as a TCP socket, if host is omitted, localhost will be assumed. If a path is given, the socket will be opened as a unix socket to that path. Normally this method is not needed, as net.createConnection opens the socket. Use this only if you are implementing a custom Socket. This function is asynchronous. When the ['connect'][] event is emitted the socket is established. If there is a problem connecting, the 'connect' event will not be emitted, the 'error' event will be emitted with the exception. The connectListener parameter will be added as an listener for the ['connect'][] event. ! 55--5[-5connectListener 66W!Wd8< _88Wd8< (8!8!W%d8<  8)8)W-d8< X3 66W! W9d8< 8=8= 77AA8181WFd8< z8J8J WNd8< (8R8R 77VVVPY 66W!W_d8< 38c8c 77ggYBj ! 55--5[-5 66W!Wvd8< 8z8zW~d8< (88Wd8<  88Wd8< X 66W! Wd8< j88 77k88Wd8< z88 Wd8< (88 77P 66W!Wd8< 8ļ8ļ 77ȼȼB˼ ! 55--5-5-5 66W!Wؼd8< 8ܼ8ܼWd8< (88Wd8<  88Wd8< X 66W! Wd8< ˼88 77̼88W d8< z8 8  Wd8< (88 77P 66W!W"d8< 8&8& 77**88W/d8< B5Disables the Nagle algorithm. By default TCP connections use the Nagle algorithm, they buffer data before sending it off. Setting true for noDelay will immediately fire off data each time socket.write() is called. noDelay defaults to true. ! 55--5£7 66W!WAd8< ͣ8E8EWId8< (8M8MWQd8<  8U8UWYd8< X_ 66W! Wed8< 58i8i 77mm68]8]Wrd8< z8v8v Wzd8< (8~8~ 77P 66W!Wd8< _88 778383 Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 8½8½ 77ƽƽ88isIPv6W̽d8< BҽMReturns true if input is a version 6 IP address, otherwise returns false. ! ˽55˽--5Խ 66W!W޽d8< _˽88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< ҽ88 77  ӽ88Wd8< z88 Wd8< (88 77!!!P$ 66W!W*d8< 8.8. 7722˽$8н8нW7d8< G= Creates a new TCP server. The connectionListener argument is automatically set as a listener for the ['connection'][] event. options is an object with the following defaults: { allowHalfOpen: false } If allowHalfOpen is true, then the socket won't automatically send a FIN packet when the other end of the socket sends a FIN packet. The socket becomes non-readable, but still writable. You should call the end() method explicitly. See ['end'][] event for more information. Here is an example of an echo server which listens for connections on port 8124: var net = require('net'); var server = net.createServer(function(c) { //'connection' listener console.log('server connected'); c.on('end', function() { console.log('server disconnected'); }); c.write('hello\r\n'); c.pipe(c); }); server.listen(8124, function() { //'listening' listener console.log('server bound'); }); Test this by using telnet: telnet localhost 8124 To listen on the socket /tmp/echo.sock the third line from the last would just be changed to server.listen('/tmp/echo.sock', function() { //'listening' listener Use nc to connect to a UNIX domain socket server: nc -U /tmp/echo.sock ! 55--5-5connectionListener?FF2  66W!WNd8< m8R8RWVd8< (8Z8ZW^d8<  8b8bWfd8< Xl 66W! Wrd8< =8v8v 77zz>8j8jWd8< z88 Wd8< (88 77P 66W!Wd8< l88 77P 66W!Wd8< X 66W !Q'Wd8< BReturns the bound address, the address family name and port of the server as reported by the operating system. Useful to find which port was assigned when giving getting an OS-assigned address. Returns an object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' } Example: var server = net.createServer(function (socket) { socket.end("goodbye\n"); }); // grab a random port. server.listen(function() { address = server.address(); console.log("opened server on %j", address); }); Don't call server.address() until the 'listening' event has been emitted. ! Q'55Q'- 66W!Wƾd8< =8ʾ8ʾWξd8< (8Ҿ8ҾW־d8<  8ھ8ھW޾d8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77Q' 88Wd8< B$Start a UNIX socket server listening for connections on the given path. This function is asynchronous. When the server has been bound, ['listening'][] event will be emitted. The last parameter callback will be added as an listener for the ['listening'][] event. ! 55--5[-5& 66W!W1d8< 8585W9d8< (8=8=WAd8<  8E8EWId8< XO 66W! WUd8< $8Y8Y 77]]%8M8MWbd8< z8f8f Wjd8< (8n8n 77rrrPu 66W!W{d8< O88 77uBThe handle object can be set to either a server or socket (anything with an underlying _handle member), or a {fd: } object. This will cause the server to accept connections on the specified handle, but it is presumed that the file descriptor or handle has already been bound to a port or domain socket. Listening on a file descriptor is not supported on Windows. This function is asynchronous. When the server has been bound, 'listening' event will be emitted. the last parameter callback will be added as an listener for the 'listening' event. ! 55--5X-5 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788WĿd8< z8ȿ8ȿ W̿d8< (8п8п 77ԿԿԿP׿ 66W!Wݿd8< 88 77׿B ! 55--5X-5 66W!Wd8< 88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 77  88W%d8< z8)8) W-d8< (8181 77555P8 66W!W>d8< 8B8B 77FF8BI Begin accepting connections on the specified port and host. If the host is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY). A port value of zero will assign a random port. Backlog is the maximum length of the queue of pending connections. The actual length will be determined by your OS through sysctl settings such as tcp_max_syn_backlog and somaxconn on linux. The default value of this parameter is 511 (not 512). This function is asynchronous. When the server has been bound, ['listening'][] event will be emitted. The last parameter callback will be added as an listener for the ['listening'][] event. One issue some users run into is getting EADDRINUSE errors. This means that another server is already running on the requested port. One way of handling this would be to wait a second and then try again. This can be done with server.on('error', function (e) { if (e.code == 'EADDRINUSE') { console.log('Address in use, retrying...'); setTimeout(function () { server.close(); server.listen(PORT, HOST); }, 1000); } }); (Note: All sockets in Node set SO_REUSEADDR already) ! 55--5-5-5-5K 66W!WXd8< 8\8\W`d8< (8d8dWhd8<  8l8lWpd8< Xv 66W! W|d8< I88 77J8t8tWd8< z88 Wd8< (88 77P 66W!Wd8< v88 778!8!Wd8< BCalling unref on a server will allow the program to exit if this is the only active server in the event system. If the server is already unrefd calling unref again will have no effect. ! 55- 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!W d8< 88 7788ZWd8< BOpposite of unref, calling ref on a previously unrefd server will not let the program exit if it's the only server left (the default behavior). If the server is refd calling ref again will have no effect. ! Z55Z- 66W!W(d8< r8,8,W0d8< (8484W8d8<  8<8<W@d8< XF 66W! WLd8< 8P8P 77TT8D8DWYd8< z8]8] Wad8< (8e8e 77iiiPl 66W!Wrd8< F8v8v 77zzZl88TWd8< BStops the server from accepting new connections and keeps existing connections. This function is asynchronous, the server is finally closed when all connections are ended and the server emits a 'close' event. Optionally, you can pass a callback to listen for the 'close' event. ! T55T--5 66W!Wd8< ,T88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77T88 Wd8< H}This class is used to create a TCP or UNIX server. A server is a net.Socket that can listen for new incoming connections. ! , 66W!Wd8< 88Wd8< (88Wd8<  8 8 Wd8< 88Wd8< z88 Wd8< (8#8# 77''''88maxConnectionsW-d8< \3 ! ,55,- 66W!W=d8< _C,8A8AWGd8< (8K8KWOd8<  8S8SWWd8< X] 66W! Wcd8< 38g8g 77kk48[8[Wpd8< z8t8t Wxd8< (8|8| 77P 66W!Wd8< ]88 77,E !  778181getConnectionsWd8< BAsynchronously get the number of concurrent connections on the server. Works when sockets were sent to forks. Callback should take two arguments err and count. ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788 connectionsW d8< \ ! 55- 66W!Wd8< _88W#d8< (8'8'W+d8<  8/8/W3d8< X9 66W! W?d8< 8C8C 77GG8787WLd8< z8P8P WTd8< (8X8X 77\\\\P_ 66W!Wed8< 98i8i 77mm__Ep !  77ss8 8  77xx88 77}}8;8;Wd8< 88createConnectionWd8< GCreates a TCP connection to port on host. If host is omitted, 'localhost' will be assumed. The connectListener parameter will be added as an listener for the ['connect'][] event. ! 55--5-5-5FF2  66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77GCreates unix socket connection to path. The connectListener parameter will be added as an listener for the ['connect'][] event. ! 55--5[-5  66W!Wd8< 8 8 Wd8< (88Wd8<  88W d8< X& 66W! W,d8< 8080 77448$8$W9d8< z8=8= WAd8< (8E8E 77IIIIIPL 66W!WRd8< &8V8V 77ZZLLLG] Constructs a new socket object and opens the socket to the given location. When the socket is established, the ['connect'][] event will be emitted. For TCP sockets, options argument should be an object which specifies: * port: Port the client should connect to (Required). * host: Host the client should connect to. Defaults to 'localhost'. * localAddress: Local interface to bind to for network connections. For UNIX domain sockets, options argument should be an object which specifies: * path: Path the client should connect to (Required). Common options are: * allowHalfOpen: if true, the socket won't automatically send a FIN packet when the other end of the socket sends a FIN packet. Defaults to false. See ['end'][] event for more information. The connectListener parameter will be added as an listener for the ['connect'][] event. Here is an example of a client of echo server as described previously: var net = require('net'); var client = net.connect({port: 8124}, function() { //'connect' listener console.log('client connected'); client.write('world!\r\n'); }); client.on('data', function(data) { console.log(data.toString()); client.end(); }); client.on('end', function() { console.log('client disconnected'); }); To connect on the socket /tmp/echo.sock the second line would just be changed to var client = net.connect({path: '/tmp/echo.sock'}, ! 55--5-5F_  66W!Wkd8< 8o8oWsd8< (8w8wW{d8<  88Wd8< X 66W! Wd8< ]88 77^88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788,Wd8.!.U 1#; 88isIPv4Wd8< BNReturns true if input is a version 4 IP address, otherwise returns false. ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 8 8  77  88Wd8< z88 Wd8< (88 77"""P% 66W!W+d8< 8/8/ 7733%88W8d8< G? ! 55--5[-5FF2  66W!WNd8< 8R8RWVd8< (8Z8ZW^d8<  8b8bWfd8< Xl 66W! Wrd8< ?8v8v 77zz@8j8jWd8< z88 Wd8< (88 77P 66W!Wd8< l88 77G_ ! 55--5-5F_G  66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77G ! 55--5-5-5G  66W!Wd8< 88Wd8< (88W#d8<  8'8'W+d8< X1 66W! W7d8< 8;8; 77??8/8/WDd8< z8H8H WLd8< (8P8P 77TTTTTPW 66W!W]d8< 18a8a 77eeWWWGh_ ! 55--5-5F_G  66W!Wud8< 8y8yW}d8< (88Wd8<  88Wd8< X 66W! Wd8< h88 77i88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77G ! 55--5[-5G  66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z8 8  Wd8< (88 77P 66W!W!d8< 8%8% 77))G, ! 55--5-5-5G  66W!W:d8< 8>8>WBd8< (8F8FWJd8<  8N8NWRd8< XX 66W! W^d8< ,8b8b 77ff-8V8VWkd8< z8o8o Wsd8< (8w8w 77{{{{{P~ 66W!Wd8< X88 77~~~8<8< 77288 772d!d8< 388d8< 88.d8< _288d8< 88 ! !6: U 6 !L Iivq}Ya$BOJVv|c2:k 9?&.ؿ޿ſͿ׾߾ ǾϾ 9FAMmsZ)1b.3P]Xdq>Hyp ,94@`fM$UܳʳԳ{̹ҹvjw˼# ټ&3.:Z`GO 9?&.̸ǸӸ{ͶӶ¶v/<7CciP'X  7=$,6Ta\huBL}1˴# ٴƴ5R_ZfsBJ{0Pp}x^hK,JWR^~k8Bs'!(HN5 =amw\MRo|w]g,1N[Vbo<Fwm )61=]cJ!R˵ƵҵߵںȺҺ#·߷ͷ׷Żһڻ=_lgsOW89hv~]|lt$1,8X^EM,KXS_l;Ct?_lgsOW" &!-MS: BWd8<  88X 66W! Wd8< 88 77Wd8< 88P 66W!Wd8< 88 77,Wd8< z88Wd8< (88Wd8< (88&,ҽ%+߽ͽ   _ ,88  77   Z1#" 888 +d8<U 1#QR 66W!W!d8.!. 1#QK)  77++@. _D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\express.js'/ !d !d8<. 1#K;  77==.0a@ 66W!WFd8<. 1#)@8J8J. applicationWQd8<. 1#KY  77[[48U8U.faviconWad8<. ag 66W!Wmd8<. Xs 66W! Wyd8<. g8}8}. 77.h8q8q.Wd8<.  88. 77.P 66W!Wd8<. s88. 77. d888z  "" g #iuf %f %lMost middleware (like #  z ""r g viu  g vq`# # #- EventEmitter"  " iulevents#k k####2# $"  iulmerge-descriptors#k### )#7 "7 iul ./application#Gk#?#?#3%#]!d"] diul./router/route#mk#e#e#Y&#3" 3iul8# k###!#" iul ./request# k####" iul ./response# k### vf =#f =" ##createApplication  #)#"#,#-zQ/** * Create an express application. * * @return {Function} * @api public */  ""   g #D"  yz "" g viu #  #@  @#X"  ## ###%# #  #@ "#>#>#Iviu#"  #  # l#! ##)#*viu#1 #6l#=3#+#+#+vf ="K#H#H #V#X#X  #c#h#h#m#H*#H+vf ="y #v#v ###  #####v+#v,vi"### # # ## #0vf =P" #####vf =" #####vf ="  ###,##vf =d"Z#S#S d#c#S#Svf =3"q#j#j3#{#j#jvf ="## iulS#k###-#.vf =static"##iul serve-static#k###(#)viuy#i6"`eul #Jl urlencoded#T l bodyParser#d lcompress#t l cookieSession#lsession# llogger#l cookieParser#l`# l responseTime#l errorHandler#l# lmethodOverride#lvhost#lcsrf#l)#' llimit#6l multipart#A l staticCache#P #F#F"#FZ#F[#  g   8 \  3 Y          < = A c f |         ) E F t            1 2 6 N R S j           A E F H R b r            % 4 ? N _ {   z    ##### #y##M# l#S"  #}#}#}#} #y&#s #i6##l) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.##   ####34 d8<. ! d!&8<. !  xsb_@>>9=. _ 99>9=. _99>9=. _99>9=. 99>9=. _99>9=. _ 9 9 >9=. _99>9=. _99>9=. _%`9#9#>9=. _-9+9+>9=. _59393>9=. 9;9;>9=. _C9A9A>9=. _K9I9I>9=. _S9Q9Q>9=. _[)9Y9Y>9=. _c9a9a>9=. _k9i9i>9=. _s9q9q>9=.  KkScs%5-C[9y9y 66W!W8<. r 888.Wd8<. 88. 77. >6d8<. 88  &8<. 1#888 .d8<. 88a 66W!Wd8<. X 66W! Wd8<. 88. 77.88.Wd8<.  88. 77.P 66W!Wd8<. 88. 77.d8<. 88 bc!bb  vc  zsb vd888  &8888 .d888b Ӽcd8<. 88b >6cb 4/c  wsb 4/d8<. 8"8"  &8<. 1#8*8*8* .d8<. 8282 b .c  vsb7 .d8<. 8A8A  &8<.= 1#8I8I8I .d8<. 8Q8Q?b ].bc  usbV ].bd8<. 8`8`  &8<.\ 1#8h8h8h .d8<. 8p8p^ r =\t 4## KkSc5%-C[s888 .d!hd888td8<. 88 ysb Ӽ  &8<. 1#888 .d8<. 88=\t 1# t!t####j#S###@88 d!&8<.2   rAd!&8<. 1#888 .'@&8<. 1#888 .)&8<. 1#888 .(a 66W!W8<. 888.XW8<. 888.Wd8<. 1#v U 66W!Wd8<. 4#V#88.Wd8<. 4#V#)U 66W!$Wd8<j 1#< !988jp$Wd8<j 1#588 8 ji%Wd8<j 1#,A a 66W!Wd8<j X! 66W! W'd8<j 8+8+j W/8<jl%l%x*l%d!u%&8<j5 1#]A t!t#'B# B#A#A#A8:8:8: jt%i%&8<j 8C8C8C jl%z%&8<j5 4#mA#JB8J8J8J j%, &8<j5  t!t#-B#B#B#A#A8R8R8R j%&8<j5 1#{A 1#QB8Z8Z8Z j%x*x*x* d8<j 1#A@i>>999>999%>999 66W!W|d8<j 88j 77j@>>999%>999 66W!W8<j5 888jWd8<j 88j 77j8e8e666 XB XB 1B 1B5d8886 Cs* 838383jDW8<j5 888j 77j88jWd8<j  88j 77jP 66W!DW8<j5 888j W8<j5 888jWd8<j !88j 77ji%d8885l% 88j"Wd8<j 1#]/88j%Wd8<j 1#C a 66W!W d8<j X 66W! Wd8<j 88jDW8<j%%x*%d!z%&8<j%  t!t#E#E#E#D8*8*8* j1&d8<j% 1#!D ?58282, &8<j%  t!t#D#fD#YD8;8;8; j2&&8<j% 1#CDF t!t#E#QE#(E#D8C8C8C j%"&8<j% 1# E34#HE#iE8L8L8L j&2&8<j% 1#E8U8U8U j%%&8<j 8]8]8] j%x*x*x*%d888& Ds* 8#8#8#j,&Wi8<j% 8m8m8mj 77rrj88jWwd8<j  8{8{j 77jP 66W!DW8<j% 888jWd8<j 88j,&W8<j% 888j 77j%60d8<j 88%% 88j=%Wd8<j 1#>a 66W!Wd8<j X 66W! Wd8<j 88jW8<j@%@%x*@%d!=%&8<j 888 j@%H%&8<j  t!t#?#B?# ?888 je%x*x*x*d888 Bs* 888jDW8<j 888j 77j88jWd8<j  88j 77jP 66W!DW 8<j 888jW8<j 888jWd8<j 8"8"j 77&&j=%d8<j 8+8+@% 88jLW1d8<j 1#+8585j W:d8<j 1#UG-8>8>jWCd8<j 1# X aJ 66W!WPd8<j XV 66W!LW\8<j((x*(d!(&8<jb 1#Y8g8g8g j(K&8<jb 4#Y#Y8o8o8o j( d8<jS(S(x*S(d !&8<jz 1#Z888 j(&8<jz  t!t#.Y# Y#X888 j(&8<jz 1#X888 j(&8<jz 1#xX1#Y888 jb(&8<j J888 jS(&8<jz 1#^X1#Z888 j[(&8<jz 1#X4#cY#$ZU 66W!Wd8<j 1#cY 88j 77jm(888 jh(&8<jb 1#X1#Y888 jp(&8<j2zb 1#X 4#rY#YP 66W!LW8<jb 888jW8<jz 888jWd8<j V88jW8<jz 888j 77j888 jv(x*x*x* d8<j 1#'Y8 8 {{{ d8<j 1#;YU  77j(88    IY IY DY DY Y Y 5Y 5YuzKd888{ NsK* 1#Y1#*Za% 66W!W+d8<j X1 66W! W7d8<j %8;8;j 77??j&8/8/jWDd8<j  8H8Hj 77LLLjPO 66W!WUd8<j 18Y8Yj 77]]jOjZj1#*Z `d888b( 8x8x{{{c 2Z 2Z Z Zuub&d888c Os&z 8`8`8`j Wqd8<j J8u8ujWy8<jz 8}8}8}jW8<jz 888j 77jK8T8TjWd8<j  88j 77jd888zS( 8G8Gj Wd8<j 1#tFa 66W!Wd8<j X 66W!B&W8<j8&8&x*8&d!z%&8<j 1#F888 jE&x*x*x*d888 Es* 888j Wd8<j 88j 77j88jWd8<j  88j 77jP 66W!B&W8<j 888jWd8<j 88j 77j d8888& 88jI&W d8<j 1#>Ga 66W!Wd8<j X 66W!W#8<jL&L&x*L&d!&8<j) 1#|G:1#G8.8.8. jT&I&&8<j 878787 jL&&8<j) 1#G8>8>8> ju&&8<j) 1#G8F8F8F jt&x*x*x*)d888* Fs* 8'8'8'j WSd8<j 8W8Wj 77[[j88jW`d8<j  8d8dj 77hhhjPk 66W!Wq8<j) 8u8u8ujWzd8<j 8~8~j 77jI&kd888)L& 88jWd8<j 1#5888jWd8<j 1#Q2 ?888jWd8<j 1#IJ a 66W!Wd8<j X 66W!i%W8<j{&{&x*{&d!&8<j  t!t#K#K#TK888 j'&8<j 1#J888 j'&8<j 1#~J t!t#L#gL#NL#.L#K#L#K#J888 j&, &8<j 1#GKV4#K#L3888 j&&&8<j 1#J4#J#K888 j&&&8<j 1#J4#J#K888 j&&8<j 1#L888 j 'x*x*x* , d8<j 1#K388 L L K Kd888 Gs* 888j W d8<j 88jW8<j 888j 77j88jW!d8<j  8%8%j 77)))jP, 66W!i%W28<j 868686jW;8<j 8?8?8?jWDd8<j 8H8Hj 77LLj,d8<j -8Q8Q{& 88jbWWd8<j 1# *8[8[jE'W`d8<j 1#P ag 66W!Wmd8<j Xs 66W!$Wy8<jH'H'x*H'd!&8<j 1#&Q888 j( &8<j !''x*'d!'&8<j 1#S4#S#S888 j' Q'd8<j2''x*'d! 3d8<j 1#!S88 mS mS fS fSa 66W!Wd8<j X 66W! Wd8<j 88j 77j88jWd8<j  88j 77jP 66W!Wd8<j 88j 77j'd888' d888 Js 1#R4#^S#S88'd! 3d8<j 1#5T388 ET ET >T >T''x* Lsa 66W!Wd8<j X 66W! Wd8<j 88j 77j8 8 jW d8<j  8$8$j 77(((jP+ 66W!W1d8<j  8585j 7799j$+d888' d888 U U R R 3d8<j 1#S38H8H T T T TaM 66W!WSd8<j XY 66W! W_d8<j N8c8cj 77ggjM8W8WjWld8<j  8p8pj 77tttjPw 66W!W}d8<j Y88j 77j^ wd888' d888 KsM 1#=Q t!t#S#4S#nT888 j['Q'&8<j 1#Q 1#R888 jP'3&8<j  t!t#5T#S#!S4#T#T3888 jW'd8<j  t!t#\R #Q #Q #Q #jQ ?h88E'&8<j g888 jH'x*x*x*  d8<j 1#Q88 Q'd8<j 1#Q88 Q Q Q Q SR SR Q Q  d8<j 1#SR88 R R hR hRhd888 Ish* 8}8}8}jW8<j 888jW8<j 888jDW8<j 888j Wd8<j g88j W8<j 888j'W8<j 888j 77  jh8q8qjWd8<j  88j 77jP 66W!W#d8<j s8'8'j W+d8<j 1#\T8/8/j'W48<j 888888jDW=8<j 8A8A8Aj$WF8<j 8J8J8JjWO8<j 8S8S8Sj WX8<j 8\8\8\jWa8<j 8e8e8ej 77jjjE'd888H' 8d8dj*#Wsd8<j 1#/% /8w8wj!W|d8<j 1#: ..88j-Wd8<j 1#Ua 66W!Wd8<j X 66W! Wd8<j 88j 77j88jWd8<j  88j 77jP 66W!Wd8<j 88j 77j-d8<j 88$($(x*$(d!z%&8<j  t!t#V#+V# V#V888 jM(x*x*x*d888 Ms*$( 88jWd8<j 1#.88jDWd8<j 1#C88j#Wd8<j* 4#. #t0 1#0 {688j Wd8<j 1# *88j'Wd8<j 1#?N a 66W!Wd8<j X 66W! Wd8<j  8 8 jDW$8<j''x*'d!&8<j* 4#sN#N8/8/8/ jA''&8<j* 1#mN 1#O878787 j''&8<j  8@8@8@ j'x*x*x* 'd8<j 1#N8I8I+++ 'O 'O N N* d888+ Hs * 8(8(8(jWU8<j* 8Y8Y8Yj 77^^j 88jWcd8<j  8g8gj 77kkkjPn 66W!Wt8<j* 8x8x8xjW}d8<j 88jDW8<j* 888j 77j'nd8<j o88*' 88j 77j;K  77jl@88. 77.@88.Wd8<.  88.Wd8<. 1#H 88.Wd8<. X 66W! Wd8<. 88. 77.88. 77.P 66W!Wd8<. 88. 77..Z. t !t####v##H#m#1# d888 d888 r 1#D t !t####v##H#m#1#888 .Ad888   : : !{   !  g b. M U 66W!W8<. !=\t 8 8 8 .MWd8<. 1#*88. Wd8<. !=\t 1#g88.DW%8<. !=\t 8)8)8). 77//.  M  t @   @.{{ rht 8e8e.W=d8<. g8A8A.WEd8<. g8I8I.WMd8<. g8Q8Q.WUd8<. g8Y8Y.W]d8<. g8a8a.Wed8<.  8i8i.Wmd8<. g8q8q.Wud8<. g8y8y.W}d8<. g88.dWd8<. 1#S K  77  88.Wd8<. 1#88.3Wd8<. 1#jK  77 88.Wd8<. g88.Wd8<. g88.Wd8<. X 66W! Wd8<. @88. 77.A88.Wd8<. g88.Wd8<. g88.)Wd8<. g88.Wd8<. g88.Wd8<. 1#88. Wd8<. g88.Wd8<. g8 8 .Wd8<. g88.Wd8<. g88.Wd8<. 1# a' 66W!W-d8< X3 66W! W9d8< '8=8= 77AA(8181WFd8<  8J8J 77NNNPQ 66W!WWd8< 38[8[ 77__QZ1#  bd8< 8g8g bc!bycx{oqq !s( 8#8#. 77ppp.Ps 66W!Wyd8<. 8}8}. 77. s.Z. t !t####j#S####) d8<. 88 8787d8<. 1#R 66W!Wd8.!.. 1#;@. YD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\index.js' !d!.d8< 388d8< K  7788d8< _PD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express88d8<g vq`# # vf =" ##iul ./lib/express#k k###)#*#     8 \ # ! ! r 1#R 66W!Wd8< 1#;@88 778866 ! ls  1#88. 77.088&8<. 1# $4##+888 .d&8<. 1#]!1#c8 8 8 .3&8<. 1#1#{ 888 .&8<.2 1#4#,#8!8!8! .&8<. 1#-1#  H0To access the EventEmitter class, require('events').EventEmitter. When an EventEmitter instance experiences an error, the typical action is to emit an 'error' event. Error events are treated as a special case in node. If there is no listener for it, then the default action is to print a stack trace and exit the program. All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when a listener is removed. !  listenerCount, 66W!4W:d8<. C@Many objects in Node emit events: a net.Server emits an event each time a peer connects to it, a fs.readStream emits an event when the file is opened. All objects which emit events are instances of events.EventEmitter. You can access this module by doing: require("events"); Typically, event names are represented by a camel-cased string, however, there aren't any strict restrictions on that, as any string will be accepted. Functions can then be attached to objects, to be executed when an event is emitted. These functions are called listeners. Inside a listener function, this refers to the EventEmitter that the listener was attached to. 66W!WGd8.!.. 1#`g #-S"  P"  iul#k kP####2Q#4]event"4 `PiV#@ #<#0Qviul some_event#Z yz ""q g viulsome_event occured.#"? ? ?PP#{#{ #{"#{#k#t-j#h9#h9"V`a#Q#Q#QQ#QRQviuyz "" g viulh# !"` `aP## ##}##|#/#/l@@#A AP# #A#BQ#P  #  7 ]  E k      8 J i y        0 Q w     #P  91#? K 66W!Wd8.!.. 1#`O 91#? 088? 77?8K8K? 77?d!d8<? 388d8<? 88.d8<? _88d8<? A88 ! !?6. !..  ` O 96 !AH0Wd8<?  88?X 66W !!Wd8.!.`||PP|d!a 966W!Wd8<` 988`Wd8<` 9 88` 77`P 966W!Wd8<` 98 8 ` 77  `d888| d888 O 91#? ]Execute each of the listeners in order with the supplied arguments. Returns true if event had listeners, false otherwise. ! !55!--5`-5arg1-5arg2 66W!W*d8<? _0!8.8.?W4d8<? (8888?W<d8<?  8@8@?WDd8<? XJ 66W! WPd8<? 8T8T? 77XX?8H8H?W]d8<? z8a8a? Wed8<? (8i8i? 77mmmm?Pp 66W!Wvd8<? J8z8z? 77~~?!ppEventEmitterEmit88? addListenerWd8<? ]Adds a listener to the end of the listeners array for the specified event. server.on('connection', function (stream) { console.log('someone connected!'); }); Returns emitter, so calls can be chained. ! 55--5`-5ap 66W!Wd8<? _88?Wd8<? (88?Wd8<?  88?Wd8<? X 66W! Wd8<? 88? 77?88?Wd8<? z88? Wd8<? (88? 77?P 66W!Wd8<? 88? 77?EventEmitterAddListener] ! 55--5`-5ap 66W!Wd8<? 88?Wd8<? (88?W d8<?  88?Wd8<? X 66W! Wd8<? 8#8#? 77''?88?W,d8<? z8080? W4d8<? (8888? 77<<<<?P? 66W!WEd8<? 8I8I? 77MM???EventEmitterAddListener88?onceWSd8<? BYAdds a one time listener for the event. This listener is invoked only the next time the event is fired, after which it is removed. server.once('connection', function (stream) { console.log('Ah, we have our first user!'); }); Returns emitter, so calls can be chained. ! R55R--5`-5ap[ 66W!Wfd8<? _lR8j8j?Wpd8<? (8t8t?Wxd8<?  8|8|?Wd8<? X 66W! Wd8<? Y88? 77?Z88?Wd8<? z88? Wd8<? (88? 77?P 66W!Wd8<? 88? 77?R8W8W?removeListenerWd8<? BRemove a listener from the listener array for the specified event. Caution: changes array indices in the listener array behind the listener. var callback = function(stream) { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback); Returns emitter, so calls can be chained. ! 55--5`-5ap 66W!Wd8<? _88?Wd8<? (88?Wd8<?  88?Wd8<? X 66W! Wd8<? 88? 77?88?Wd8<? z8 8 ? Wd8<? (88? 77?P 66W!Wd8<? 8#8#? 77''?88?removeAllListenersW-d8<? B3hRemoves all listeners, or those of the specified event. Returns emitter, so calls can be chained. ! ,55,--5`5 66W!W?d8<? _E,8C8C?WId8<? (8M8M?WQd8<?  8U8U?WYd8<? X_ 66W! Wed8<? 38i8i? 77mm?48]8]?Wrd8<? z8v8v? Wzd8<? (8~8~? 77?P 66W!Wd8<? _88? 77?,8181?Wd8.!.`O 91#QQ? ] ! 55--5`-5ap 66W!Wd8<? _88?Wd8<? (88?Wd8<?  88?Wd8<? X 66W! Wd8<? 88? 77?88?Wd8<? z88? Wd8<? (88? 77?P 66W!Wd8<? 88? 77?EventEmitterAddListener88? Wd8<? 08 8 ? listenersWd8<? BReturns an array of listeners for the specified event. server.on('connection', function (stream) { console.log('someone connected!'); }); console.log(util.inspect(server.listeners('connection'))); // [ [Function] ] !  55 --5` 66W!W d8<? _& 8$8$?W*d8<? (8.8.?W2d8<?  8686?W:d8<? X@ 66W! WFd8<? 8J8J? 77NN?8>8>?WSd8<? z8W8W? W[d8<? (8_8_? 77ccc?Pf 66W!Wld8<? @8p8p? 77tt? f88?&Wy8<`z "" g viulh# !"` ` `g #-"  " iul#k k####2#`"iu# ## viulh#7 yz ""N g viulq#d"_? ? ?#X#X #X"#X##Q-#E9#E9"3`#.#.#.Q#.Rviuy#<l@@#A A# #N#O#  #  7 ]  4 Z n     ' 9 X h         . T }    ### ##v&"`####0#<d!a -66W!Wd8<` - 88`Wd8<` -88` 77`P -66W!Wd8<` -88` 77`d888 d888 ( & -8}8}8}?setMaxListenersWd8<? BBy default EventEmitters will print a warning if more than 10 listeners are added for a particular event. 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. ! 55--5n 66W!W d8<? _88?Wd8<? (88?Wd8<?  8!8!?W%d8<? X+ 66W! W1d8<? 8585? 7799?8)8)?W>d8<? z8B8B? WFd8<? (8J8J? 77NNN?PQ 66W!WWd8<? +8[8[? 77__?Q88? 77dd?1Wgd8.!.. 1# ? 8k8k?Pq 66W!Ww8<`O 98{8{8{?!W8<` 9888?Wd8<? 88?&W8<` -888? 77 !*hd8<` 988?Wd8<? z88?Wd8<? _88?Wd8<? (88?Wd8<? (88?  @F-5YygqT 3R_Zfs@J{.+&2RX? G3@;GgmT!+\=JEQqw^+5fB6Return the number of listeners for a given event. ! 4554--5emitter-5` 66W!Wd8<? _488?Wd8<? (88?Wd8<?  88?Wd8<? X 66W! Wd8<? 88? 77?88?W d8<? z8 8 ? Wd8<? (88? 77?P 66W!W"d8<? 8&8&? 77**?4# ;xz   8>8>?h  770000?rrr.Z.1#  `Z`1#@ 9338,8,8, .d8<. G8=8=.d8<. 38C8C&8<.2 1#7 4##6Y48I8I8I .&8<.2 1#4##c)@8T8T8T . &8<. 1#)@8_8_8_ . .06:  6h !H;@ftzgsnzRG  &Vnvb>^F~N ls  1#8%8% 77qq888&8<2Uگ 1#& t!t# #& #7 # # 8x8x8x  )!&8< 1#1#)888 Hs&8<U  t !t#* #) #' #& #$ ## #%" #| # # # ݱ888 d8< 1#88d8< 1#G)@88d8< G88$&8< !6~ 1# t!t##9 # # 888 7&8< 1#T1#-888 6&8<U 1#AP t!t#*#)#'#&#$###2"#####8###!#J## # # # # #\ #p #=#G@888 j:U6:.  68 !)"@r~yŒԒ=]IDPhnyXxd_k &1Oo[VbzŮ¯pίɯQ{/ŭЭ֭$ō̍/Pݑ>!1IX?KF{|ݐΰڰհɏ?ՏЏ܏JkE'"8P_Ԏ(ێ3KAgsndpkݱ Yl7PGHP˒ ̮Yկb+"5>ԍG ƑO(R(3 Yb(P1V.S9Bzw1 '.%U ls . I 1#Pj*  t!t##y#B#y9 >8G8G9 7799<8G8Gp$&8<92MAEA 1#%4# #A 888 99&8<99 1#*&4#e # 888 999&8<9 1##`P888 99.d8<9 388x&8<99 1#31# 888 99"<&8<922@p>>.C;BFAEDFF999G6. !. @ G I j * 6'< !G>G<=<<==#=8GR=q=]=X=d=|=========>>>>>>>.>;>@@@@@@@EEEEEEEO>F???????BCBBBCCAAAAAAAABBA B"B(BJBjBVBQB]BuB{B@A AAA*A0ADDDDDDEG|DDDDDDDDABA@>B>)@E~E@?GC>5>A@b@X@V>Fi>`>FF GGO@99 ls 29@1@ 9999$>999 66W!W:8.!.j9 929@1@ 8>8>8>jWEd8<j 8I8Ij 77MMj898989 j$2&8<j9 1#<9 t!t#K=#6=#=&8U8U8U j$&8<j9 1#T< t!t#y=#o=#l<8^8^8^ j$&8<j9  t!t#G=#<#w<#Y<8g8g8g j9%x*x*x*%d!a&8<j%%x*nn Asau 66W!W{d8<j X 66W! Wd8<j v88j 77ju88jWd8<j  88j 77jP 66W!Wd8<j 88j 77jd888t% 9 1#>8r8r8r j %999tud8889 9d8886&*+{0 Q!)5)3)3)2r)2H)0D)4>)47)R3+)O3)5)i1(4({4(N7(k0(0(c(u(( S({$('''E''''x'''H'+'F'+&{&L&*8&%&%bl%6@%%n$9v$8K*8G*87%$1$m6 $d6#0#\0l#7h#7-#/"U/"I/"?/"5/"-/-"%/!&.!.s!A-S!5-!,- #- - -  - , ,D , ,+G+e*Oz* =!) 5% i% $ 9 @>>999>999 66W!W8<j* 888jWd8<j 88j 77j) 75) p3r) 2H) %2>) 3+)  3) r1( 84( t0( 1( %( m( S( J$( ' ' N'  cs'^ $ U 66W!^ Wd8<j 1#SFN8 8 j$Wd8<j 1#SF88j'Wd8<j 1#SF88j 77  j'' H' g'  & U'  77))j&{&  ej\&[ U0 66W![W6d8<j 1#G#8:8:j\&W?d8<j 1#G#PF 66W!WLd8< ER .! getDategetDay getFullYeargetHoursgetMilliseconds getMinutesgetMonth getSecondsgetTimegetTimezoneOffset getUTCDate getUTCDay getUTCHoursgetUTCMilliseconds getUTCMinutes getUTCMonth getUTCSecondsgetYearsetDate setFullYearsetHourssetMilliseconds setMinutessetMonth setSecondssetTime setUTCDatesetUTCFullYear setUTCHourssetUTCMilliseconds setUTCMinutes setUTCMonth setUTCSecondssetYear toDateString toGMTString toISOStringtoJSONtoLocaleDateString toLocaleTimeString toTimeString toUTCStringvalueOf 66W.! Wd8< B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77 B ! UTC &'55'--5 millisecondsQCreates a new date from milliseconds specified in UTC starting at January 1, 19705'--5 dateString,Creates a new date from the specified string5'--5year-5month-5day-5hours-5minutes-5seconds-5Creates a new date 66W! Wd8< \ zParses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970. !  55 --A string containing a datedateVal 66W!Wd8< (88 W#d8< (8'8'W+d8< z8/8/W3d8< mD8787W;d8< XA 66W! WGd8<  8K8K 77OO8?8? 77TTTTPW 66W!W]d8< A8a8a 77ee WW8 8 Wjd8< _p'8n8nWtd8< \zReturns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. ! 55-| 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< z88 77{88 77P 66W!Wd8< 88 778x8xWd8< (88Wd8< z88Wd8< R88&Wd8.!. \dReturns the number of milliseconds between midnight, January 1, 1970, and the current date and time. ! &55&- 66W!Wd8< (88 Wd8< (8 8 Wd8< z88Wd8< _&88W!d8< X' 66W! W-d8< 8181 77558%8% 77::::P= 66W!WCd8< '8G8G 77KK&==j 1#L 88 WRd8< (8V8V 77ZZZGGjZj t!t# L#L#G ]88kWbd8< \h;Sets the minutes value in the Date object using local time. ! k55k--+A numeric value equal to the minutes value.min-+A numeric value equal to the seconds value.sec-0A numeric value equal to the milliseconds value.msj 66W!W|d8< (88 Wd8< (88Wd8< z88Wd8< _k88Wd8< X 66W! Wd8< h88 77i88 77P 66W!Wd8< 88 77k8f8fjWd8< \@Sets the milliseconds value in the Date object using local time. ! j55j--/A numeric value equal to the millisecond value.w 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _j88Wd8< X 66W! Wd8< 88 7788 77P 66W!W$d8< 8(8( 77,,j88}W1d8< \7!Returns a time as a string value. ! }55}-9 66W!WBd8< (8F8F WJd8< (8N8NWRd8< z8V8VWZd8< _`}8^8^Wdd8< Xj 66W! Wpd8< 78t8t 77xx88h8h 77}}}}P 66W!Wd8< j88 77}38585uWd8< \QSets the seconds value in the Date object using Universal Coordinated Time (UTC). ! u55u--st-vw 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _u88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77u88VWd8< \+Gets the day of the week, using local time. ! V55V- 66W!Wd8< (8 8  Wd8< (88Wd8< z88W d8< _&V8$8$W*d8< X0 66W! W6d8< 8:8: 77>>8.8. 77CCCCPF 66W!WLd8< 08P8P 77TTVFF88pWYd8< \_NSets the year value in the Date object using Universal Coordinated Time (UTC). ! p55p--"A numeric value equal to the year.-A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.-.A numeric value equal to the day of the month.datea 66W!Wqd8< (8u8u Wyd8< (8}8}Wd8< z88Wd8< _p88Wd8< X 66W! Wd8< _88 77`88 77P 66W!Wd8< 88 77p8]8]aWd8< \MGets the hours value in a Date object using Universal Coordinated Time (UTC). ! a55a- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _a88Wd8< X 66W! Wd8< 88 77  88 77P 66W!Wd8< 88 77a88gW$d8< \*MSets the numeric day-of-the-month value of the Date object using local time. ! g55g--kl, 66W!W6d8< (8:8: W>d8< (8B8BWFd8< z8J8JWNd8< _Tg8R8RWXd8< X^ 66W! Wdd8< *8h8h 77ll+8\8\ 77qqqqPt 66W!Wzd8< ^8~8~ 77gtt8(8(~Wd8< B ! ~55~- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _~88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77~88vWd8< \ ! v55v- 66W!Wd8< (88 Wd8< (88Wd8< z8 8 Wd8< _v88Wd8< X 66W! W&d8< 8*8* 77..88 773333P6 66W!W<d8<  8@8@ 77DDv6688YWId8< \O2Gets the milliseconds of a Date, using local time. ! Y55Y-Q 66W!WZd8< (8^8^ Wbd8< (8f8fWjd8< z8n8nWrd8< _xY8v8vW|d8< X 66W! Wd8< O88 77P88 77P 66W!Wd8< 88 77Y8M8MqWd8< \OSets the hours value in the Date object using Universal Coordinated Time (UTC). ! q55q--)A numeric value equal to the hours value.-pq-st-vw 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _q88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 8 8  77  q88UWd8< \,Gets the day-of-the-month, using local time. ! U55U- 66W!W#d8< (8'8' W+d8< (8/8/W3d8< z8787W;d8< _AU8?8?WEd8< XK 66W! WQd8< 8U8U 77YY8I8I 77^^^^Pa 66W!Wgd8< K8k8k 77ooUaa88tWtd8< \zOSets the month value in the Date object using Universal Coordinated Time (UTC). ! t55t--lA numeric value equal to the month. The value for January is 0, and other month values follow consecutively.-A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.l| 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _t88Wd8< X 66W! Wd8< z88 77{88 77P 66W!Wd8< 88 77t8x8x Wd8< \WReturns a value as a string value appropriate to the host environment's current locale. !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _  88W d8< X 66W! Wd8< 88 77!!88 77&&&&P) 66W!W/d8< 8383 7777 ))388iW<d8< BB8Sets the hour value in the Date object using local time. ! i55i---pq-st-vwD 66W!WQd8< (8U8U WYd8< (8]8]Wad8< z8e8eWid8< _oi8m8mWsd8< Xy 66W! Wd8< B88 77C8w8w 77P 66W!Wd8< y88 77i8@8@|Wd8< \VReturns a time as a string value appropriate to the host environment's current locale. ! |55|- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _|88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77|388fWd8< \ +Gets the year minus 2000, using local time. ! f55f- 66W!Wd8< (88 Wd8< (8!8!W%d8< z8)8)W-d8< _3f8181W7d8< X= 66W! WCd8<  8G8G 77KK 8;8; 77PPPPPS 66W!WYd8< =8]8] 77aafSS88bWfd8< \lNGets the milliseconds of a Date object using Universal Coordinated Time (UTC). ! b55b-n 66W!Wwd8< (8{8{ Wd8< (88Wd8< z88Wd8< _b88Wd8< X 66W! Wd8< l88 77m88 77P 66W!Wd8< 88 77b8j8jnWd8< \0Sets the date and time value in the Date object. ! n55n--dA numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.time 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _n88Wd8< X 66W! W d8< 88 7788 77P 66W!W d8< 8$8$ 77((n88\W-d8< \34Gets the seconds of a Date object, using local time. ! \55\-5 66W!W>d8< (8B8B WFd8< (8J8JWNd8< z8R8RWVd8< _\\8Z8ZW`d8< Xf 66W! Wld8< 38p8p 77tt48d8d 77yyyyP| 66W!Wd8< f88 77\||8181{Wd8< \VReturns a date as a string value appropriate to the host environment's current locale. ! {55{- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _{88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77{388yWd8< \/Returns a date as a string value in ISO format. ! y55y- 66W!Wd8< (88 W d8< (88Wd8< z88Wd8< _ y88W$d8< X* 66W! W0d8< 8484 77888(8( 77====P@ 66W!WFd8< *8J8J 77NNy@@388mWSd8< \Y;Sets the seconds value in the Date object using local time. ! m55m--st-vw[ 66W!Wfd8< (8j8j Wnd8< (8r8rWvd8< z8z8zW~d8< _m88Wd8< X 66W! Wd8< Y88 77Z88 77P 66W!Wd8< 88 77m8W8WxWd8< B ! x55x- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _x88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 88 77x88hWd8< B2Sets the year of the Date object using local time. ! h55h--A numeric value for the year.-uA zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.-/A numeric value equal for the day of the month.l 66W!W/d8< (8383 W7d8< (8;8;W?d8< z8C8CWGd8< _Mh8K8KWQd8< XW 66W! W]d8< 8a8a 77ee8U8U 77jjjPm 66W!Wsd8< W8w8w 77{{hm88wWd8< \!Returns a date as a string value. ! w55w- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _w88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77w388^Wd8< \kGets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). ! ^55^- 66W!Wd8< (88 Wd8< (88Wd8< z88W d8< _^88Wd8< X 66W! W!d8< 8%8% 77))88 77....P1 66W!W7d8< 8;8; 77??^1188sWDd8< \JQSets the minutes value in the Date object using Universal Coordinated Time (UTC). ! s55s--pq-,A numeric value equal to the seconds value. t-vwL 66W!WYd8< (8]8] Wad8< (8e8eWid8< z8m8mWqd8< _ws8u8uW{d8< X 66W! Wd8< J88 77K88 77P 66W!Wd8< 88 77s8H8HWWd8< \ Gets the year, using local time. ! W55W- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _W88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77WB  ! W55W- 66W!Wd8< (88 Wd8< (8!8!W%d8< z8)8)W-d8< 8181W5d8< X; 66W! WAd8<  8E8E 77II 8989 77NNNPQ 66W!WWd8< ;8[8[ 77__WQ88dWdd8< \jGGets the month of a Date object using Universal Coordinated Time (UTC). ! d55d-l 66W!Wud8< (8y8y W}d8< (88Wd8< z88Wd8< _d88Wd8< X 66W! Wd8< j88 77k88 77P 66W!Wd8< 88 77d8h8hZWd8< \4Gets the minutes of a Date object, using local time. ! Z55Z- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _Z88Wd8< X 66W! Wd8< 8 8  77  88 77P 66W!Wd8< 88 77##Z88`W(d8< \.@Gets the day of the week using Universal Coordinated Time (UTC). ! `55`-0 66W!W9d8< (8=8= WAd8< (8E8EWId8< z8M8MWQd8< _W`8U8UW[d8< Xa 66W! Wgd8< .8k8k 77oo/8_8_ 77ttttPw 66W!W}d8< a88 77`ww8,8,XWd8< \+Gets the hours in a date, using local time. ! X55X- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _X88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77X88]Wd8< \$Gets the time value in milliseconds. ! ]55]- 66W!Wd8< (88 Wd8< (8 8 W d8< z88Wd8< _]88Wd8< X% 66W! W+d8< 8/8/ 77338#8# 778888P; 66W!WAd8< %8E8E 77II];;88[WNd8< \T!Gets the month, using local time. ! [55[-V 66W!W_d8< (8c8c Wgd8< (8k8kWod8< z8s8sWwd8< _}[8{8{Wd8< X 66W! Wd8< T88 77U88 77P 66W!Wd8< 88 77[8R8R_Wd8< \BGets the day-of-the-month, using Universal Coordinated Time (UTC). ! _55_- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< __88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 8 8  77  _88lWd8< \9Sets the month value in the Date object using local time. ! l55l---A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.l 66W!W&d8< (8*8* W.d8< (8282W6d8< z8:8:W>d8< _Dl8B8BWHd8< XN 66W! WTd8< 8X8X 77\\8L8L 77aaaaPd 66W!Wjd8< N8n8n 77rrldd88Wwd8< \}ZReturns a string representation of a date. The format of the string depends on the locale. ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< }88 77~88 77P 66W!Wd8< 88 7738{8{zWd8< \Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. ! z55z- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _z88W d8< X 66W! Wd8< 88 77  88 77%%%%P( 66W!W.d8< 8282 7766z((388rW;d8< \AVSets the milliseconds value in the Date object using Universal Coordinated Time (UTC). ! r55r--wC 66W!WMd8< (8Q8Q WUd8< (8Y8YW]d8< z8a8aWed8< _kr8i8iWod8< Xu 66W! W{d8< A88 77B8s8s 77P 66W!Wd8< u88 77r8?8?oWd8< \\Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). ! o55o--kl 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _o88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77o88Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88W!d8< z8%8%W)d8< _/8-8-W3d8< X9 66W! W?d8< 8C8C 77GG8787 77LLLPO 66W!WUd8< 98Y8Y 77]]O88eWbd8< \hIGets the seconds of a Date object using Universal Coordinated Time (UTC). ! e55e-j 66W!Wsd8< (8w8w W{d8< (88Wd8< z88Wd8< _e88Wd8< X 66W! Wd8< h88 77i88 77P 66W!Wd8< 88 77e8f8fcWd8< \IGets the minutes of a Date object using Universal Coordinated Time (UTC). ! c55c- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _c88Wd8< X 66W! Wd8< 88 77  88 77P 66W!Wd8< 88 77!!c88 77&&8P8P 77++'8C8Cj 7700jX&X& 0L& 8& % l% @% % v$ !9v$ 8 <c) U? 66W!)WEd8<j 1#!488I8Ij 77NNjl*l* ? bZ% 8R* 8 ?8%$ 1$ s6$ 5# {6# 4n# 7Q#  2-# /" ]/! ..s! G- + R+e *O * > ; j77 >s@8* 1#34#3#u?8{8{8{ j.d8<j 38q8q#&8<j2/0 4#'#h/18w8w8w j( &8<j28% 1#M4#26#E888 j[&8<j* 1#4#;#mN888 jd8<j* 1#R 66W!Wd8.!.j 1#. 1#88j 77jlx*88&8<j2) 1#4#G#J888 jF&8<j% 1#2!1#D 888 jE-&8<j 1#1#V888 j,&8<j~ 1#c1#3)N888 j&&8<j !021 1##1#F_ 888 jn&8<j* 1#P4##x888 jQ'd8<j 4#Q#R88d8<j 4##88d8<j  t !t#A^#\#O\#[#Z#Y#'Y# 3#.#&%*88d8<j  t!t#;Y# /#&7s688d8<j 88&8<j* 1#E t!t# X#U#P#?N#IJ#>G#tF#C#C#,A#>#<#5#5#Q2#t0#0#.#/%##:#U###8 8 8 j5, d8<j  t!t#K# #"388'd8<j 1#N88&8<j 1#1#L8"8"8" jL&8<j !0/* 1# t!t#@/#r'#T8+8+8+ j(d8<j 4#\ #^ &*8585&8<j9 1#h21#=@8=8=8= jd8<j  t!t##q# # #I 38F8Fd8<j 1#8M8Md8<j 1#Ai8T8T d8<j 4#Q#SR8\8\d8<j 4##-"8c8c&8<j/ 1#l*1#& =8k8k8k j&8<j 1#11#:?M8t8t8t jd8<j G8}8}&8<j+ 1#*1# @888 j&8<j 1#'1#K888 j3d8<j 4#r#]388&8<j 1#'#1#S 888 j&8<j ![/+ 1# t!t#S #(S #W # 888 jd8<j 1#88&8<j !,._-+* 1#& t !t#@V #Q # # # #! #k # #D #0 888 jd8<j 1#"3(88&8<j9 1#201#(= >888 jz**+A-&.U//07896&*+{0j*l6:.  6x* !********+*** +8+R+q+]+X+d+|+++ ,++++,_,,G--S-N-d----..z.9.4.I....]//h/c/x////0//00*0 274444444{66666065s61>1*1%111I1O1?8h8K8F8[8s888?8888888!9[9,9'939f9~9v|!(x 5aTl{0" -E' do~gsn$NmYT`x~! ,2JVQr%E1,8PV1111111t000z000084X4D4?4K4c4i4r11}1x1111 3,333373=33333334%2E212,282P2V22222222p33|3w333375W5C5>5J5b5h5X2;}t aD*/+*&++M,+D,+:,y, ,,,p,,1,++g,+V,+--l--u--~--Z-..Q..l..Z..c...@.////o/!0/5068Fy8R888l9M99F;u9;99D9 0i}j @7r$<3uV%5YGz,>bPz]55525* ls 2c01 4#0[#[ t!t#0#/#Q(#'_#_#8i8i#W8<j2c01 888 Wd8<j 1#= 88Wd8< E ! z  66W!Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88W!d8< z8%8%W)d8< 8-8-W1d8< X7 66W! W=d8< 8A8A 77EE8585 77JJJJPM 66W!WSd8< 78W8W 77[[MM388 W`d8< Bg !  55 - 66W!Wqd8< (8u8u Wyd8< (8}8}Wd8< z88Wd8< 88Wd8< X 66W! Wd8< g88 77h88 77P 66W!Wd8< 88 77 B ! captureStackTracestackTraceLimit55- 66W!Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 8 8  7788 77P 66W!Wd8< 8"8" 77&&88W+d8< _18/8/W5d8< (8989W=d8< TC$@8A8AWGd8< 8K8KWOd8< z8S8S WWd8< (8[8[ 77___VVZ1#  jZj t!t#[#[#J#=  Z 1# Z t!t#M2#[#  GZG1#_ .Z.1# b8d8ddWq8<j2c01 8u8u8uz W{d8< \ ! z 55z - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _z 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77z 388#W8<j2c01 888Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z8 8 Wd8< 88Wd8< X 66W! W"d8< 8&8& 77**88 77////P2 66W!W8d8< 8<8< 77@@22388 77EE88 WJd8<j 1#=8N8N%WSd8<j 1#= 8W8W 77\\8Q8Q8Q ... d8< 1#.8f8f d8< 1#.Ur  77tt8o8occc . . . . g0 g0 . . d8< 1#g08|8| 0 0 y0 y0 d8< 1#0 t !t# 3#2#)2#1#1#1#1#y1#M188 3 3 A1 A1d888 s@ 888 Wd8< 88W8< 888 W8< 888W8< 888W8< 888 7788Wd8<  88 77P 66W!/W8< 888 W8< 888W8< 888Wd8< 88W8< 888W8< 888 77d888 88Wd8< 1#x' a 66W!Wd8< X$ 66W!DW*8<!!,d!W&8<0 1#'858585 &8< 8=8=8= ...0d8881 s@ 8.8.8. WId8< 8M8M 77QQ8"8"WVd8<  8Z8Z 77^^^Pa 66W!DWg8<0 8k8k8kWpd8< $8t8t 77xxad8880 88Wd8< 1#r5 H88Wd8< 1#,( a 66W!Wd8< X 66W!DW8<!!,d!W&8< 1#h(888 (&8< 888 ...d888 s@ 888 Wd8< 88 7788Wd8<  88 77P 66W!DW8< 888Wd8< 88 77d888 88Wd8< 1#& a 66W!Wd8< X 66W!DW8<!!,d!W&8< 1#'888 &8< 8&8&8& ...d888 s@ 888 W2d8< 8686 77::8 8 W?d8<  8C8C 77GGGPJ 66W!DWP8< 8T8T8TWYd8<  8]8] 77aaJd888 88Wjd8< 1# t8n8nWsd8< 1#az 66W!Wd8< X 66W!W8<!!,d!&8< z888 ...{d888 r{@ 888 Wd8< z88 77{88Wd8<  88 77P 66W!W8< 888Wd8< 1#> U  7788Wd8< 1# U  7788Wd8< 88Wd8< 1#) U  7788 77d888 8w8wWd8< 1#a 66W!Wd8< X 66W!W8<!!,d!&8<  8)8)8) &8<$ 1#+ t!t# ##_4808080 ...ed!f&8< a@ 66W!WFd8< XL 66W! WRd8< @8V8VWZ8<ee!!,:: rA$ 8^8^8^Wd8<` 8h8h8hWm8<` 8q8q8qWv8<` 8z8z8z 77A8J8JWd8<  88 77P 66W!W8<` 888W8<` 888Wd8< L88W8<` 888W8<` 888 77fd888`e 8>8>8> e1&8<`  t!t# #k #= # #H888 %%%`Ad888d!%%%!!, ra 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  88 77P 66W!W d8< 88 77 d888 $d888$ d888% r @ 8"8"8" W$d8<  8(8(W,8<$ 808080DW58<$ 898989W>8<$ 8B8B8BWG8<$ 8K8K8K 77PP 88WUd8<  8Y8Y 77]]]P` 66W!Wf8<$ 8j8j8jWod8< 1# 8s8sWx8<$ 8|8|8|W8<$ 888Wd8<$ 1# 88Wd8< 88DW8<$ 888Wd8< 88 77`d888$ 8 8 Wd8< 1# a 66W!Wd8< X 66W!W8<!!,d!&8< 1#41# 3888 &8< 4#8#888 &8< 888 &8<  t!t###888 ...d888 r@ 888 Wd8< 88 7788W d8<  88 77P 66W!W8< 8 8 8 W%d8< 8)8) 77--d8< 8282 88NW8d8< 1# a? 66W!WEd8< XK 66W! WQd8< ?8U8UWY8<!!,d![&8<_ 1#8d8d8d N&8< ?8l8l8l ..._@d888` r@@ 8]8]8]Wx8<_ 8|8|8| 77@8I8IWd8<  88 77P 66W!W8<_ 888Wd8< K88W8<_ 888 77Nd888_ 8<8<Wd8< 1#+88IWd8< 1#Xa 66W!Wd8< X 66W! Wd8< 88W8< 888W8< 888 7788Wd8<  88 77P 66W!W 8< 888Wd8< 88W8< 8!8!8! 77&&I?)d8< 1# *8-8-d8< 8484 88XW:d8< 1# aA 66W!WGd8< XM 66W! WSd8< A8W8W W[8<\\!!,\d!X&8< A8f8f8f \&8<a 4##\8m8m8m &8<a 4##a8u8u8u &8<a 1#I4##N8}8}8} d&8<a 1#888 &8<a 1#zk4#3#f888 j...aBd888b rB@ 8_8_8_W8<a 888 77B8K8KWd8<  88 77P 66W! W8<a 888Wd8< M88W8<a 888 77Xd888a\ 8>8>DWd8< 1#H >88[Wd8< 1#E$a 66W!Wd8< X 66W! Wd8< 88W8<!!,d![&8< 888 ...d888 s@ 8 8 8 1W8< 8#8#8# 77((88W-d8<  8181 77555P8 66W!1W>8< 8B8B8BWG8< 8K8K8KWPd8< 8T8T 77XX[8d8< 38]8] 88Wcd8< 1#*aj 66W!Wpd8< Xv 66W! W|d8< j88W8<||!!,|d!d8< 1#X+ ?k88N&8< 1#+ 4#+#+888 &8< 1#s+ t!t#z+#+#+888 b&8< 1#F+1#+888 &8< j888 |[&8< 1#9+888 ...kd888 sk@ 888W8< 888 77k8t8tWd8<  88 77P 66W!W8< 888Wd8< v88W8< 888 77d8< 88| 8g8g:W d8< 1#* a 66W!Wd8< X 66W! W$d8< 8(8(W,8<!!,d!&8<2 1# t!t###878787 "&8<2 4##8@8@8@ ?:&8< 8H8H8H &8<2  t!t####{8O8O8O >...2d8883 s@ 808080:W\8<2 8`8`8`We8<2 8i8i8i 77nn88Wsd8<  8w8w 77{{{P~ 66W!:W8<2 888W8<2 888Wd8< 88W8<2 888 77:~d8< 882 88 778181,,,%tbd![&8<!!,d!&8<2!!,d!&8<!!,d!K&8< 1#888 a 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  88 77P 66W!Wd8< 8 8  77d888 d888 r 1#4#G#m888 &8<2  t!t#7##8"8"8" @&8< 1#8+8+8+ &8<2 4##]838383 &8< a> 66W!WDd8< XJ 66W! WPd8< >8T8T 77XX?8H8HW]d8<  8a8a 77eeePh 66W!Wnd8< J8r8r 77vvhd888 8<8<8< ?d888 r?  t!t# ##o#V# ###888 $a 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  88 77P 66W!Wd8< 88 77d888 d888 r 1# t!t##e#K#888 MI&8< 888 j&8< 1# t!t##I#)#!888 Z+&8< 1#,4##888 &8< 1#4##888 U&8< 1#{ 1#888 H&8<  t!t###888 +... jd8< 1#C8 8    O O Ud8< 1#z88 [d8< 1#88     Z Z  d888`3>d1-d!b&8<2--!!,## sa+ 66W!W1d8< X7 66W! W=d8< ,8A8A 77EE+8585WJd8<  8N8N 77RRRPU 66W!W[d8< 78_8_ 77ccUd888*- @99!!,9d!N&8<j 1#) 4#)#)8o8o8o Vd8<j 4#) #) ?{a} 66W!Wd8< X 66W! Wd8< ~88W8<j 888DW8<j 888W8<j 888 77}88Wd8<  88 77P 66W!DW8<j 888W8<j 888Wd8< 88W8<j 888 77|vd8< 88j9 8x8x[&8<j 4#d)#)888 r###j}d888k s}*  t!t#)#)#(8'8'8' t...k*+d888d!K&8<!!,   sa 66W!Wd8<  88@W 8<a 8$8$8$W)d8< X/ 66W! W58< 898989 W>d8< 8B8B 77FF8-8- 77KKKPN 66W! WT8< 8X8X8XW]d8< /8a8a 77eeNZ1# hd888 @ 4#6#6888 ...d888 d!&8<2  !!,ww sa 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  88 77P 66W!Wd8< 88 77Z1#,3 d888 bc!bb1 c    !!!,www sd8< 88  w&8<2~ 4#D7#e7888 @&8< 4#D7#e7888 @ w&8<2~ 1#;71888 ?&8< 1#;71888 ? wy&8< 1#/7888 >d888@@~  @ 1#/78{8{8{ >...~d888 z7 z7   "! w O9ylc|9k-#1dE>3`~za\bte:%. +!    H UX> U 66W!XWd8< 1#0k88Wd8< 1#0k8!8!>W&d8< 1#0k8*8* 77//TT  r 1 | j9 ~- ,    K  U? 66W!MWEd8< 4#a-#":*8I8IWNd8< 4#a-#":*&8R8R 77XXIE >   ?  >   aD Uf 66W!Wld8< 1#@8p8pWud8< 1#@8y8y 77~~uu f\ A `a9) U 66W!Wd8.!. [[[    sb,u jNd8.!. ut 88   &8<2  1#888 6&8< 1#888 6  &8< !4x  t !t######U#>#(# u888 &8<  t!t#####U#>#(# u888    &8< 1# t!t###lU 66W!W8<2  888"W8<2  888)W8<2  888 77888 d8< ,u88  {{  1#C q88"W8< 888)Wd8.!.  1#C q8 8  77&&  t  h/ U 66W!W8<$ 8#8#8# W(d8<$ 1#W 8,8,DW18<$ 858585 77:: e @ uqfM ?I ?      z 4 r@ 1#"1#888 d8< 1#.r8P8Pd&8<$ 1#1# cQI8W8W8W c&8<> 1#Q:1#!B8a8a8a &8< !>`$ 1#8 t!t#"##H38j8j8j Ud8< 1#z8t8tn&8< 1#1#5x8{8{8{ m&8< !>a$ 1#/ t!t# #0# #888 Wd8< 1#.88w&8<> 1#,1#! ?888 v&8<2@* 1## t!t#(#r5#-#+# ,#*#,(#x'#&#%#E$#H #*###X## ##4888 &8< 1#,3 888  &8<a 1#888 d8< 4#g0#088d8<@ 1#R 66W!Wd8.!.. 1#? 1#Y488 77,883&8<t 1#1#<  888 2&8<@ 1#&1#+ 888 E&8<t 1#V)1# 888 D.d8< 388&8< 1# t!t#/#N/#.888 &8<$ 1#=!1# )N888 d8< 1#Y488jd8< 1#C88d8< G88&8<> 1#.1#B" A8$8$8$ &8< !j 1#d t!t#M+#)#]2Returns a section of an array. ! 55--4The beginning of the specified portion of the array.start-2end The end of the specified portion of the array.4 66W!WBd8< (8F8F WJd8< (8N8NWRd8< z8V8VWZd8< _`8^8^Wd8.!. 2#   !j 2gg[[ gd!N&8<o 1#.4#.#.8t8t8t ld8<o 1#. ?a 66W!Wd8< X 66W!NW8<o 888 Wd8< 88 7788Wd8<  88 77P 66W!NW8<o 888Wd8< 88 77{d8< 88og 8}8}[&8<o 1#.888 Zd!b&8<2ZZ[[  hsa 66W!Wd8< X 66W! Wd8< 88 7788Wd8<  8 8  77P 66W!Wd8< 88 77d888Z {o 4#.#.888    pd888od888p is 8h8h8hW6d8< X< 66W! WBd8< 28F8F 77JJ38:8: 77OOOOPR 66W!WXd8< <8\8\ 77``RRZ4#x)#.  Z 4# #  Z t!t#M+#)# ccArraySliceFunction8-8-8- )&8<a 1#&1# 8o8o8o ([d8< 1#8x8x&8<t 1#%1# '888 Nz&8<2@ 1#4 t!t#~+#+#(888 <.@6:.  6, !DY4z V%a?@LGS ttttttuAMHTf*>^JEQio ?KFR &t%>*??> ?5?D?>.9QKWR}@ 3KZW$Jbq,K72>V\~{jvq}1rHgSNZrxE/*?O^tk;9 Ed;y6g?FO-pH) 2en[w$ututtt\v!m Zy-]f;??L??? H ^Qh+8'U6!@ ls t  ,uu88L 888 L&8< 1#d)2 t!t#* #A* #) 888 j&8< 1#( t!t#)#(#(#(t888 i&8< 1#7+o4#+#+s888 U&8< 1#( 1#)888 T&8< 1#<* t!t#+#+#*#_*#O)#(#v(t888     jd8< 1#(88 6) 6) ( ( Ud8< 1#6)z88 [d8< 1#H)t88 X) X) Q) Q) + + @) @)d8< ,uu88 fs{ 888W8< 888Wd8<  88Wd8< X  66W! Wd8< 88 778 8  7; !7!P% 66W!W+d8<  8/8/ 7733%Z t !t#+#+#*#_*#O)#)#(#(#(#(#v( 6d888@@o@d!&8< 8B8B8B @&8<=  t!t#]#K#%8I8I8I f@&8<= 1#8Q8Q8Q i, &8<= 1#<1#t8Y8Y8Y M&8888 gqqq=d888> "sm@ t 8}8}  q&8<= 1#1#i 8p8p8p &8< 1#8y8y8y  q&8<2mx  t!t# ##888 k&8<x  t!t# ##888 k q&8< '888 &8< '888  qs&8<x 1#% t!t###x#R#4888   d8< 1# 88qqq d8< 1#"88 , , ' '    d8< 1# 88 d8< 1#"88d888((=m 1#% t!t#y###x#R#48u8u8u nooo>m(d888 !@>q !@  'o s 1#\R 66W!Wd8.!.@ 1# 1#\'. 1#88 77o88d8< ш88d8< 1# 88&8<= 1#1#B888 &8<2mx 1#1#888 q6. !..   @ 6o !'G3.:RX &, ls ms  G9j.. ' !d!.d8<  38'8'd8<  K/  7711 ID:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\getpackage.js8-8-d8<  8989d8<  RA 66W!WGd8<  /8K8K  77OO 4#$ ! ! 8?8? somePackage&8< g #&`W"  W]iul ./somepackage#k k]###+^vi"8Wc#- #-#-#-^#A]   -#A]RR r 1#&1#- Ks 66W!Wy8.!.. ' !d!.d8<~ 388d8<~g vf =" ## yz "" g viulHello.#/"*? ? ?#### ##### #,#,#<#=#=    ;#=d! ra 66W!Wd8<~ X 66W! Wd8<~ 88~ 77~88~Wd8<~  88~ 77~P 66W!Wd8<~ 88~ 77~d888 bc!bbs sc  rd8< \ 88 d8<~ s88 d8<~ s88 ! ! ~ r 1#s88d8<~ _ GD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\somepackage8 8 d8<~ R  66W!W d8.!. \ 1#~ s8 8 ~ 77% % ~PD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\somepackage\index.js8 8   ~(  6:  \ 6.  !  s z   1#  \ 1#-8}8}8}~ 77: : ~( 8Z8Z8Z  bST \4B66R !A/H]\  ~. ' !d!.d8<E  38L 8L d8<E g z " " X  g #\ " X # Z vf ="+#'#' yz ""?  g vf = _ X #T e #[#T#Tf #I!e #@ m e #64#64#'C#'DZ vf ="u #q#q yz "" g viuf %l# _ X ##"? ? ? ?U U U ## ##v #/u #;#;#qK#qLZ #X #V s#V vf =" U ##  U ###V #U     # L e m #U H I X d!&8<E u u U U  u d!    a  66W!W d8<E  X  66W! W d8<E   8 8 E  77  E  8 8 E W d8<E   8 8 E  77   E P  66W!W d8<E   8 8 E  77  E  d888 u  d888   X X U U     a  66W!W d8<E  X  66W! W d8<E   8 8 E  77  E  8 8 E W d8<E   8 8 E  77   E P  66W!W d8<E  1#' a  66W!W d8<E  X!  66W! W' d8<E   8+ 8+ E  77/ / E  8 8 E W4 d8<E   88 88 E  77< < < E P?  66W!WE d8<E  ! 8I 8I E  77M M E ? d888e e U U  e d!&8<E T  1#[8Y 8Y 8Y  E o     d8<E  1#T8c 8c U U U  j j b bT  d888U    e  8 8 E Wn d8<E  1#q  8r 8r E Ww d8<E   8{ 8{ E  77  E  E ZE 1#  d888 X  T  1#8 8 8  E ^    U    d888 !u  i ` e U X   !u   e   X   E   1#K  66W!W d8<E  1#  8 8 E  77  E KD:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\singleobject.js8R 8R d8<E  8 8 d8<E  R  66W!W d8<E   8 8 E  77  E   8 8 &8<E T  1# 8 8 8  E X d8<E  1#T8 8    E T   66  !         x  5 !  ( @ F          o U T   . timersC kAll of the timer functions are globals. You do not need to require() this module in order to use them. 66W!W d8<  K  66W!ZW d8<  B If you had previously unref()d a timer you can call ref() to explicitly request the timer hold the program open. If the timer is already refd calling ref again will have no effect. ! Z55Z-  66W!W d8<  r8 8  W d8<  (8 8  W d8<   8 8  W d8<  X#  66W! W) d8<   8- 8-   771 1   8! 8!  W6 d8<  z8: 8:   W> d8<  (8B 8B   77F F F  PI  66W!WO d8<  # 8S 8S   77W W  ZI 8 8   clearIntervalW] d8<  Bc %Stops a interval from triggering. ! \ 55\ --5 intervalIde  66W!Wp d8<  _v \ 8t 8t  Wz d8<  (8~ 8~  W d8<   8 8  W d8<  X  66W! W d8<  c 8 8   77   d 8 8  W d8<  z8 8   W d8<  (8 8   77    P  66W!W d8<   8 8   77   \  8a 8a  AW d8<  B To schedule execution of a one-time callback after delay milliseconds. Returns a timeoutId for possible use with clearTimeout(). Optionally you can also pass arguments to the callback. It is important to note that your callback will probably not be called in exactly delay milliseconds - Node.js makes no guarantees about the exact timing of when the callback will fire, nor of the ordering things will fire in. The callback will be called as close as possible to the time specified. ! A55A--5-5delay-5j  66W!W d8<  8 8  W d8<  (8 8  W d8<   8 8  W d8<  X  66W! W d8<   8 8   77    8 8  W d8<  z8 8   W d8<  (8 8   77    P"  66W!W( d8<   8, 8,   770 0  A" 8 8  W5 d8<  B; The opaque value returned by setTimeout and setInterval also has the method timer.unref() which will allow you to create a timer that is active but if it is the only item left in the event loop won't keep the program running. If the timer is already unrefd calling unref again will have no effect. In the case of setTimeout when you unref you create a separate timer that will wakeup the event loop, creating too many of these may adversely effect event loop performance -- use wisely. ! 55-=  66W!WF d8<  8J 8J  WN d8<  (8R 8R  WV d8<   8Z 8Z  W^ d8<  Xd  66W! Wj d8<  ; 8n 8n   77r r  < 8b 8b  Ww d8<  z8{ 8{   W d8<  (8 8   77    P  66W!W d8<  d 8 8   77    89 89  clearImmediateW d8<  B 'Stops an immediate from triggering. !  55 --5 immediateId  66W!W d8<  _  8 8  W d8<  (8 8  W d8<   8 8  W d8<  X  66W! W d8<   8 8   77    8 8  W d8<  z8 8   W d8<  (8 8   77    P  66W!W d8<   8 8   77     8 8  W d8<  B To schedule the "immediate" execution of callback after I/O events callbacks and before setTimeout and setInterval . Returns an immediateId for possible use with clearImmediate(). Optionally you can also pass arguments to the callback. Immediates are queued in the order created, and are popped off the queue once per loop iteration. This is different from process.nextTick which will execute process.maxTickDepth queued callbacks per iteration. setImmediate will yield to the event loop after firing a queued callback to make sure I/O is not being starved. While order is preserved for execution, other I/O events may fire between any two scheduled immediate callbacks. ! 55--5-5j  66W!W d8<  _# 8! 8!  W' d8<  (8+ 8+  W/ d8<   83 83  W7 d8<  X=  66W! WC d8<   8G 8G   77K K   8; 8;  WP d8<  z8T 8T   WX d8<  (8\ 8\   77` ` `  Pc  66W!Wi d8<  = 8m 8m   77q q  c 8 8  BWv d8<  B| 'Prevents a timeout from triggering. ! B55B--5 timeoutId~  66W!W d8<  _ B8 8  W d8<  (8 8  W d8<   8 8  W d8<  X  66W! W d8<  | 8 8   77   } 8 8  W d8<  z8 8   W d8<  (8 8   77    P  66W!W d8<   8 8   77   B 8z 8z  CW d8<  B To schedule the repeated execution of callback every delay milliseconds. Returns a intervalId for possible use with clearInterval(). Optionally you can also pass arguments to the callback. ! C55C--5-5 -5j  66W!W d8<  _ C8 8  Wd8<  (88 Wd8<   8 8  Wd8<  X 66W! Wd8<   8 8   77$$  88 W)d8<  z8-8-  W1d8<  (8585  77999 P< 66W!WBd8<  8F8F  77JJ C<8 8   77OO  8 8   77TTT  d!d8<  38[8[d8<   8a8a.d8<  _i 8g8gd8<   8o8o ! ! 66W !c        # )      |           w   =C* 2 c        q {  ^ ; W d _ k   x G O  6   #  * J P 7   ?   0 = 8 D d j Q  ( Y                . C{ Node has a simple module loading system. In Node, files and modules are in one-to-one correspondence. As an example, foo.js loads the module circle.js in the same directory. The contents of foo.js: var circle = require('./circle.js'); console.log( 'The area of a circle of radius 4 is ' + circle.area(4)); The contents of circle.js: var PI = Math.PI; exports.area = function (r) { return PI * r * r; }; exports.circumference = function (r) { return 2 * PI * r; }; The module circle.js has exported the functions area() and circumference(). To export an object, add to the special exports object. Note that exports is a reference to module.exports making it suitable for augmentation only. If you are exporting a single item such as a constructor you will want to use module.exports directly instead. function MyConstructor (opts) { //... } // BROKEN: Does not modify exports exports = MyConstructor; // exports the constructor properly module.exports = MyConstructor; Variables local to the module will be private. In this example the variable PI is private to circle.js. The module system is implemented in the require("module") module. 66W!Wd8<z K  77z88z 77zd!d8<z 388d8<z 88.d8<z _88d8<z |88 ! !z66 !|  . addonsCAddons are dynamically linked shared objects. They can provide glue to C and C++ libraries. The API (at the moment) is rather complex, involving knowledge of several libraries: * V8 JavaScript, a C++ library. Used for interfacing with JavaScript: creating objects, calling functions, etc. Documented mostly in the v8.h header file (deps/v8/include/v8.h in the Node source tree), which is also available online. * libuv, C event loop library. Anytime one needs to wait for a file descriptor to become readable, wait for a timer, or wait for a signal to be received one will need to interface with libuv. That is, if you perform any I/O, libuv will need to be used. * Internal Node libraries. Most importantly is the node::ObjectWrap class which you will likely want to derive from. * Others. Look in deps/ for what else is available. Node statically compiles all its dependencies into the executable. When compiling your module, you don't need to worry about linking to any of these libraries. All of the following examples are available for download and may be used as a starting-point for your own Addon. 66W!Wd8< K  7788 77d!d8< 388d8< 88.d8< _88d8< 88 ! !66 !  . utilCRThese functions are in the module 'util'. Use require('util') to access them. 66W!Wd8< K 66W !putsWd8< B A synchronous output function. Will block the process and output all arguments to stdout with newlines after each argument. ! 55- 66W!Wd8< _88W"d8< (8&8&W*d8<  8.8.W2d8< X8 66W! W>d8<  8B8B 77FF8686WKd8< z8O8O WSd8< (8W8W 77[[[P^ 66W!Wdd8< 88h8h 77ll^8 8  Wqd8< BwReturns true if the given "object" is an Array. false otherwise. var util = require('util'); util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // false !  55 --5y 66W!Wd8< _ 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< w88 77x88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77 8u8uisDateWd8< BReturns true if the given "object" is a Date. false otherwise. var util = require('util'); util.isDate(new Date()) // true util.isDate(Date()) // false (without 'new' returns a String) util.isDate({}) // false ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 778 8 W"d8< z8&8& W*d8< (8.8. 77222P5 66W!W;d8< 8?8? 77CC588inspectWId8< BOReturn a string representation of object, which is useful for debugging. An optional options object may be passed that alters certain aspects of the formatted string: * showHidden - if true then the object's non-enumerable properties will be shown too. Defaults to false. * depth - tells inspect how many times to recurse while formatting the object. This is useful for inspecting large complicated objects. Defaults to 2. To make it recurse indefinitely pass null. * colors - if true, then the output will be styled with ANSI color codes. Defaults to false. Colors are customizable, see below. * customInspect - if false, then custom inspect() functions defined on the objects being inspected won't be called. Defaults to true. Example of inspecting all properties of the util object: var util = require('util'); console.log(util.inspect(util, { showHidden: true, depth: null })); ! H55H--5-5Q 66W!W\d8< _bH8`8`Wfd8< (8j8jWnd8<  8r8rWvd8< X| 66W! Wd8< O88 77P8z8zWd8< z88 Wd8< (88 77P 66W!Wd8< |88 77H8M8MWd8< BROutput with timestamp on stdout. require('util').log('Timestamped message.'); ! 55--5_  66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77   P  66W!Wd8< 88 77 88pumpW!d8< B'Read the data from readableStream and send it to the writableStream. When writableStream.write(data) returns falsereadableStream will be paused until the drain event occurs on the writableStream. callback gets an error as its only argument and is called when writableStream is closed or when an error occurs. !  55 --5readableStream-5writableStream-5) 66W!W7d8< _= 8;8;WAd8< (8E8EWId8<  8M8MWQd8< XW 66W! W]d8< '8a8a 77ee(8U8UWjd8< z8n8n Wrd8< (8v8v 77zzzP} 66W!Wd8< W88 77 }8%8%Wd8< BUSame as util.debug() except this will output all arguments immediately to stderr. ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788Wd8< BA synchronous output function. Will block the process and output string immediately to stderr. require('util').debug('message on stderr'); ! 55--5_  66W!W d8< _88Wd8< (88Wd8<  8"8"W&d8< X, 66W! W2d8< 8686 77::8*8*W?d8< z8C8C WGd8< (8K8K 77OOOPR 66W!WXd8< ,8\8\ 77``R88inheritsWfd8< ]lInherit the prototype methods from one constructor into another. The prototype of constructor will be set to a new object created from superConstructor. As an additional convenience, superConstructor will be accessible through the constructor.super_ property. var util = require("util"); var events = require("events"); function MyStream() { events.EventEmitter.call(this); } util.inherits(MyStream, events.EventEmitter); MyStream.prototype.write = function(data) { this.emit("data", data); } var stream = new MyStream(); console.log(stream instanceof events.EventEmitter); // true console.log(MyStream.super_ === events.EventEmitter); // true stream.on("data", function(data) { console.log('Received data: "' + data + '"'); }) stream.write("It works!"); // Received data: "It works!" ! e55e--5 -5superConstructorn 66W!Wzd8< _e8~8~Wd8< (88Wd8<  88Wd8< X 66W! Wd8< l88 77m88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77e UtilInherits8j8j$Wd8< BReturns a formatted string using the first argument as a printf-like format. The first argument is a string that contains zero or more placeholders. Each placeholder is replaced with the converted value from its corresponding argument. Supported placeholders are: * %s - String. * %d - Number (both integer and float). * %j - JSON. * % - single percent sign ('%'). This does not consume an argument. If the placeholder does not have a corresponding argument, the placeholder is not replaced. util.format('%s:%s', 'foo'); // 'foo:%s' If there are more arguments than placeholders, the extra arguments are converted to strings with util.inspect() and these strings are concatenated, delimited by a space. util.format('%s:%s', 'foo', 'bar', 'baz'); // 'foo:bar baz' If the first argument is not a format string then util.format() returns a string that is the concatenation of all its arguments separated by spaces. Each argument is converted to a string with util.inspect(). util.format(1, 2, 3); // '1 2 3' ! $55$--5$ 66W!Wd8< _$88Wd8< (88Wd8<  88Wd8< X 66W! W d8< 88 7788Wd8< z88 W d8< (8$8$ 77(((P+ 66W!W1d8< 8585 7799$+88printW?d8< BEA synchronous output function. Will block the process, cast each argument to a string then output to stdout. Does not place newlines after each argument. ! >55>-G 66W!WPd8< _V>8T8TWZd8< (8^8^Wbd8<  8f8fWjd8< Xp 66W! Wvd8< E8z8z 77~~F8n8nWd8< z88 Wd8< (88 77P 66W!Wd8< p88 77>8C8CisErrorWd8< BReturns true if the given "object" is an Error. false otherwise. var util = require('util'); util.isError(new Error()) // true util.isError(new TypeError()) // true util.isError({ name: 'Error', message: 'an error occurred' }) // false ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 8 8  7788isRegExpWd8< BReturns true if the given "object" is a RegExp. false otherwise. var util = require('util'); util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp('another regexp')) // true util.isRegExp({}) // false ! 55--5 66W!W(d8< _.8,8,W2d8< (8686W:d8<  8>8>WBd8< XH 66W! WNd8< 8R8R 77VV8F8FW[d8< z8_8_ Wcd8< (8g8g 77kkkPn 66W!Wtd8< H8x8x 77||n88 7788 77d!d8< 388d8< 88.d8< _88d8< 88 ! !66 ! ,2!,'3SY@ H +83?_eL#TEcpkwQ[@Oo|w]gJwr;HCOou\)3d 6<#+ 'JWR^~k8Bs"l{g  ?. domainCDomains provide a way to handle multiple different IO operations as a single group. If any of the event emitters or callbacks registered to a domain emit an error event, or throw an error, then the domain object will be notified, rather than losing the context of the error in the process.on('uncaughtException') handler, or causing the program to exit immediately with an error code. 66W!Wd8< K 66W!DomainWd8< HThe Domain class encapsulates the functionality of routing errors and uncaught exceptions to the active Domain object. Domain is a child class of [EventEmitter][]. To handle the errors that it catches, listen to its error event. ! , 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W !addWd8< BExplicitly adds an emitter to the domain. If any event handlers called by the emitter throw an error, or if the emitter emits an error event, it will be routed to the domain's error event, just like with implicit binding. This also works with timers that are returned from setInterval and setTimeout. If their callback function throws, it will be caught by the domain 'error' handler. If the Timer or EventEmitter was already bound to a domain, it is removed from that one, and bound to this one instead. ! 55--5 66W!W d8< _88Wd8< (88Wd8<  8!8!W%d8< X+ 66W! W1d8< 8585 77998)8)W>d8< z8B8B WFd8< (8J8J 77NNNPQ 66W!WWd8< +8[8[ 77__QBb ! 55--5 66W!Wmd8< 8q8qWud8< (8y8yW}d8<  88Wd8< X 66W! Wd8< b88 77c88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788@Wd8< BThe returned function will be a wrapper around the supplied callback function. When the returned function is called, any errors that are thrown will be routed to the domain's error event. Example var d = domain.create(); function readSomeFile(filename, cb) { fs.readFile(filename, 'utf8', d.bind(function(er, data) { // if this throws, it will also be passed to the domain return cb(er, data ? JSON.parse(data) : null); })); } d.on('error', function(er) { // an error occurred somewhere. // if we throw it now, it will crash the program // with the normal line number and stack message. }); ! @55@--5 66W!Wd8< _@88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788W d8< z88 Wd8< (88 77P 66W!W#d8< 8'8' 77++@B. ! @55@--5 66W!W9d8< 8=8=WAd8< (8E8EWId8<  8M8MWQd8< XW 66W! W]d8< .8a8a 77ee/8U8UWjd8< z8n8n Wrd8< (8v8v 77zzzP} 66W!Wd8< W88 77@}88enterWd8< BThe enter method is plumbing used by the run, bind, and intercept methods to set the active domain. It sets domain.active and process.domain to the domain, and implicitly pushes the domain onto the domain stack managed by the domain module (see domain.exit() for details on the domain stack). The call to enter delimits the beginning of a chain of asynchronous calls and I/O operations bound to a domain. Calling enter changes only the active domain, and does not alter the domain itself. Enter and exit can be called an arbitrary number of times on a single domain. If the domain on which enter is called has been disposed, enter will return without setting the domain. ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788runWd8< BRun the supplied function in the context of the domain, implicitly binding all event emitters, timers, and lowlevel requests that are created in that context. This is the most basic way to use a domain. Example: var d = domain.create(); d.on('error', function(er) { console.error('Caught error!', er); }); d.run(function() { process.nextTick(function() { setTimeout(function() { // simulating some various async stuff fs.open('non-existent file', 'r', function(er, fd) { if (er) throw er; // proceed... }); }, 100); }); }); In this example, the d.on('error') handler will be triggered, rather than crashing the program. ! 55--5 66W!Wd8< _88Wd8< (88W!d8<  8%8%W)d8< X/ 66W! W5d8< 8989 77==8-8-WBd8< z8F8F WJd8< (8N8N 77RRRPU 66W!W[d8< /8_8_ 77ccUBf ! 55--5 66W!Wqd8< 8u8uWyd8< (8}8}Wd8<  88Wd8< X 66W! Wd8< f88 77g88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788removeWd8< B]The opposite of domain.add(emitter). Removes domain handling from the specified emitter. ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 77  88Wd8< z88 Wd8< (88 77P" 66W!W(d8< 8,8, 7700"B3 ! 55--5 66W!W>d8< 8B8BWFd8< (8J8JWNd8<  8R8RWVd8< X\ 66W! Wbd8< 38f8f 77jj48Z8ZWod8< z8s8s Wwd8< (8{8{ 77P 66W!Wd8< \88 7788 Wd8< 88exitWd8< BThe exit method exits the current domain, popping it off the domain stack. Any time execution is going to switch to the context of a different chain of asynchronous calls, it's important to ensure that the current domain is exited. The call to exit delimits either the end of or an interruption to the chain of asynchronous calls and I/O operations bound to a domain. If there are multiple, nested domains bound to the current execution context, exit will exit any domains nested within this domain. Calling exit changes only the active domain, and does not alter the domain itself. Enter and exit can be called an arbitrary number of times on a single domain. If the domain on which exit is called has been disposed, exit will return without exiting the domain. ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788membersW d8< \ ! 55- 66W!Wd8< _88W#d8< (8'8'W+d8<  8/8/W3d8< X9 66W! W?d8< 8C8C 77GG8787WLd8< z8P8P WTd8< (8X8X 77\\\\P_ 66W!Wed8< 98i8i 77mm__Ep !  77ss8 8 disposeWyd8< BThe dispose method destroys a domain, and makes a best effort attempt to clean up any and all IO that is associated with the domain. Streams are aborted, ended, closed, and/or destroyed. Timers are cleared. Explicitly bound callbacks are no longer called. Any error events that are raised as a result of this are ignored. The intention of calling dispose is generally to prevent cascading errors when a critical part of the Domain context is found to be in an error state. Once the domain is disposed the dispose event will emit. Note that IO might still be performed. However, to the highest degree possible, once a domain is disposed, further errors from the emitters in that set will be ignored. So, even if some remaining actions are still in flight, Node.js will not communicate further about them. ! x55x- 66W!Wd8< _x88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77x8}8} interceptWd8< BThis method is almost identical to domain.bind(callback). However, in addition to catching thrown errors, it will also intercept Error objects sent as the first argument to the function. In this way, the common if (er) return callback(er); pattern can be replaced with a single error handler in a single place. Example var d = domain.create(); function readSomeFile(filename, cb) { fs.readFile(filename, 'utf8', d.intercept(function(data) { // note, the first argument is never passed to the // callback since it is assumed to be the 'Error' argument // and thus intercepted by the domain. // if this throws, it will also be passed to the domain // so the error-handling logic can be moved to the 'error' // event on the domain instead of being repeated throughout // the program. return cb(null, JSON.parse(data)); })); } d.on('error', function(er) { // an error occurred somewhere. // if we throw it now, it will crash the program // with the normal line number and stack message. }); ! 55--5 66W!Wd8< _88Wd8< (88W d8<  8 8 Wd8< X 66W! Wd8< 8!8! 77%%88W*d8< z8.8. W2d8< (8686 77:::P= 66W!WCd8< 8G8G 77KK=BN ! 55--5 66W!WYd8< 8]8]Wad8< (8e8eWid8<  8m8mWqd8< Xw 66W! W}d8< N88 77O8u8uWd8< z88 Wd8< (88 77P 66W!Wd8< w88 7788 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788Wd8< B Returns a new Domain object. ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X  66W! Wd8< 88 778 8 W d8< z8$8$ W(d8< (8,8, 77000P3 66W!W9d8<  8=8= 77AA3BD ! 55- 66W!WNd8< 8R8RWVd8< (8Z8ZW^d8<  8b8bWfd8< Xl 66W! Wrd8< D8v8v 77zzE8j8jWd8< z88 Wd8< (88 77P 66W!Wd8< l88 7788 7788 77d!d8< 388d8< 88.d8< _88d8< 88 ! !66 !"/*6V\CKfrz+&2RX? Gb~nv#)3O\Wcp?Gx$ .JWR^~k:Bs >D+3Njwr~Zbzp ,94@`fM$U 4:!)D_lgsOW  . jCPure JavaScript is Unicode friendly but not nice to binary data. When dealing with TCP streams or the file system, it's necessary to handle octet streams. Node has several strategies for manipulating, creating, and consuming octet streams. Raw data is stored in instances of the Buffer class. A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. The Buffer class is a global, making it very rare that one would need to ever require('buffer'). Converting between Buffers and JavaScript string objects requires an explicit encoding method. Here are the different string encodings. * 'ascii' - for 7 bit ASCII data only. This encoding method is very fast, and will strip the high bit if set. Note that when converting from string to buffer, this encoding converts a null character ('\0' or '\u0000') into 0x20 (character code of a space). If you want to convert a null character into 0x00, you should use 'utf8'. * 'utf8' - Multibyte encoded Unicode characters. Many web pages and other document formats use UTF-8. * 'utf16le' - 2 or 4 bytes, little endian encoded Unicode characters. Surrogate pairs (U+10000 to U+10FFFF) are supported. * 'ucs2' - Alias of 'utf16le'. * 'base64' - Base64 string encoding. * 'binary' - A way of encoding raw binary data into strings by using only the first 8 bits of each character. This encoding method is deprecated and should be avoided in favor of Buffer objects where possible. This encoding will be removed in future versions of Node. * 'hex' - Encode each byte as two hexadecimal characters. A Buffer object can also be used with typed arrays. The buffer object is cloned to an ArrayBuffer that is used as the backing store for the typed array. The memory of the buffer and the ArrayBuffer is not shared. NOTE: Node.js v0.8 simply retained a reference to the buffer in array.buffer instead of cloning it. While more efficient, it introduces subtle incompatibilities with the typed arrays specification. ArrayBuffer#slice() makes a copy of the slice while Buffer#slice() creates a view. 66W!Wd8< K 66W! SlowBufferWd8< HThis class is primarily for internal use. JavaScript programs should use Buffer instead of using SlowBuffer. In order to avoid the overhead of allocating many C++ Buffer objects for small blocks of memory in the lifetime of a server, Node allocates memory in 8Kb (8192 byte) chunks. If a buffer is smaller than this size, then it will be backed by a parent SlowBuffer object. If it is larger than this, then Node will allocate a SlowBuffer slab for it directly. ! , 66W!Wd8< _88Wd8< (88Wd8<  8 8 Wd8< X 66W! Wd8< 88 77""88W'd8< z8+8+ W/d8< (8383 777777P: 66W!W@d8< 8D8D 77HH::88{ WMd8< HSxThe Buffer class is a global type for dealing with binary data directly. It can be constructed in a variety of ways. !  isEncodingy ({ ,5{ --5h*Allocates a new buffer of size octets. 5{ --5h\5{ --5array4Allocates a new buffer using an array of octets. 5{ --5cd5{ --5(-5QAllocates a new buffer containing the given str. encoding defaults to 'utf8'. 5{ --5(-5l 66W !Wud8<  8y8yy W}d8< BTests if obj is a Buffer. ! y 55y --5 66W!Wd8< _y 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77y B ! y 55y --5 66W!Wd8< 88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 7788W#d8< z8'8' W+d8< (8/8/ 77333P6 66W!W<d8< 8@8@ 77DDy 688WId8< (8M8MWWQd8< BXRReturns true if the encoding is a valid encoding argument, or false otherwise. ! W55W--5Z 66W!Wdd8< _jW8h8hWnd8< (8r8rWvd8<  8z8zW~d8< X 66W! Wd8< X88 77Y88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77WBZ ! W55W--5Z 66W!Wd8< j88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P  66W!Wd8< 88 77W 8U8U Wd8< (8!8!(W%d8< B,Gives the actual byte length of a string. encoding defaults to 'utf8'. This is not the same as String.prototype.length since that returns the number of characters in a string. Example: str = '\u00bd + \u00bc = \u00be'; console.log(str + ": " + str.length + " characters, " + Buffer.byteLength(str, 'utf8') + " bytes"); // ½ + ¼ = ¾: 9 characters, 12 bytes ! (55(--5_ -5. 66W!W9d8< _?(8=8=WCd8< (8G8GWKd8<  8O8OWSd8< XY 66W! W_d8< ,8c8c 77gg-8W8WWld8< z8p8p Wtd8< (8x8x 77|||P 66W!Wd8< Y88 77(B. ! (55(--5_ -5. 66W!Wd8< ?88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77(8)8)Wd8< BReturns a buffer which is the result of concatenating all the buffers in the list together. If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. If the list has exactly one item, then the first item of the list is returned. If the list has more than one item, then a new Buffer is created. If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. ! 55--5-5 totalLength 66W!Wd8< _8 8 Wd8< (88Wd8<  88W"d8< X( 66W! W.d8< 8282 77668&8&W;d8< z8?8? WCd8< (8G8G 77KKKPN 66W!WTd8< (8X8X 77\\NB_ ! 55--5-5 66W!Wkd8< 8o8oWsd8< (8w8wW{d8<  88Wd8< X 66W! Wd8< _88 77`88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788Wd8< z88Wd8< _{ 88Wd8< X 66W%! readDoubleBEWd8< BReads a 64 bit double from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Example: var buf = new Buffer(8); buf[0] = 0x55; buf[1] = 0x55; buf[2] = 0x55; buf[3] = 0x55; buf[4] = 0x55; buf[5] = 0x55; buf[6] = 0xd5; buf[7] = 0x3f; console.log(buf.readDoubleLE(0)); // 0.3333333333333333 ! 55--5U-5noAssert 66W!Wd8< _88W d8< (8 8 W d8<  8 8 W d8< X  66W! W d8< 8 8  77$ $ 8 8 W) d8< z8- 8-  W1 d8< (85 85  779 9 9 P<  66W!WB d8<  8F 8F  77J J < BM  ! 55--5U-5 66W!WY d8< 8] 8] Wa d8< (8e 8e Wi d8<  8m 8m Wq d8< Xw  66W! W} d8< M 8 8  77  N 8u 8u W d8< z8 8  W d8< (8 8  77   P  66W!W d8< w 8 8  77   88 writeUInt8W d8< B Writes value to the buffer at the specified offset. Note, value must be a valid unsigned 8 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Example: var buf = new Buffer(4); buf.writeUInt8(0x3, 0); buf.writeUInt8(0x4, 1); buf.writeUInt8(0x23, 2); buf.writeUInt8(0x42, 3); console.log(buf); // !  55 --5-5U-5  66W!W d8< _  8 8 W d8< (8 8 W d8<  8 8 W d8< X  66W! W d8<  8 8  77   8 8 W d8< z8 8  W!d8< (8!8! 77 ! ! !P ! 66W!W!d8<  8!8! 77!!  !B!  !  55 --5-5U-5  66W!W*!d8<  8.!8.!W2!d8< (86!86!W:!d8<  8>!8>!WB!d8< XH! 66W! WN!d8< !8R!8R! 77V!V!!8F!8F!W[!d8< z8_!8_! Wc!d8< (8g!8g! 77k!k!k!Pn! 66W!Wt!d8< H!8x!8x! 77|!|! n!8 8 zW!d8< B!Returns a JSON-representation of the Buffer instance, which is identical to the output for JSON Arrays. JSON.stringify implicitly calls this function when stringifying a Buffer instance. Example: var buf = new Buffer('test'); var json = JSON.stringify(buf); console.log(json); // '[116,101,115,116]' var copy = new Buffer(JSON.parse(json)); console.log(copy); // ! z55z-! 66W!W!d8< 8!8!W!d8< (8!8!W!d8<  8!8!W!d8< X! 66W! W!d8< !8!8! 77!!!8!8!W!d8< z8!8! W!d8< (8!8! 77!!!P! 66W!W!d8< !8!8! 77!!z!8!8! readUInt8W!d8< B!Reads an unsigned 8 bit integer from the buffer at the specified offset. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Example: var buf = new Buffer(4); buf[0] = 0x3; buf[1] = 0x4; buf[2] = 0x23; buf[3] = 0x42; for (ii = 0; ii < buf.length; ii++) { console.log(buf.readUInt8(ii)); } // 0x3 // 0x4 // 0x23 // 0x42 ! !55!--5U-5! 66W!W!d8< _"!8"8"W"d8< (8 "8 "W"d8<  8"8"W"d8< X" 66W! W$"d8< !8("8(" 77,","!8"8"W1"d8< z85"85" W9"d8< (8="8=" 77A"A"A"PD" 66W!WJ"d8< "8N"8N" 77R"R"!D"BU"! ! !55!--5U-5! 66W!Wa"d8< "8e"8e"Wi"d8< (8m"8m"Wq"d8<  8u"8u"Wy"d8< X" 66W! W"d8< U"8"8" 77""V"8}"8}"W"d8< z8"8" W"d8< (8"8" 77"""P" 66W!W"d8< "8"8" 77""!"8!8! writeUInt16BEW"d8< B"Writes value to the buffer at the specified offset with specified endian format. Note, value must be a valid unsigned 16 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Example: var buf = new Buffer(4); buf.writeUInt16BE(0xdead, 0); buf.writeUInt16BE(0xbeef, 2); console.log(buf); buf.writeUInt16LE(0xdead, 0); buf.writeUInt16LE(0xbeef, 2); console.log(buf); // // ! "55"--5-5U-5" 66W!W"d8< _""8"8"W"d8< (8"8"W"d8<  8"8"W"d8< X" 66W! W"d8< "8"8" 77"""8"8"W#d8< z8#8# W #d8< (8 #8 # 77###P# 66W!W#d8< "8#8# 77"#"#"#B%#" ! "55"--5-5U-5" 66W!W2#d8< "86#86#W:#d8< (8>#8>#WB#d8<  8F#8F#WJ#d8< XP# 66W! WV#d8< %#8Z#8Z# 77^#^#&#8N#8N#Wc#d8< z8g#8g# Wk#d8< (8o#8o# 77s#s#s#Pv# 66W!W|#d8< P#8#8# 77##"v#8"8" readInt16BEW#d8< B#Reads a signed 16 bit integer from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Works as buffer.readUInt16*, except buffer contents are treated as two's complement signed values. ! #55#--5U-5# 66W!W#d8< _##8#8#W#d8< (8#8#W#d8<  8#8#W#d8< X# 66W! W#d8< #8#8# 77###8#8#W#d8< z8#8# W#d8< (8#8# 77###P# 66W!W#d8< #8#8# 77####B## ! #55#--5U-5# 66W!W$d8< #8$8$W $d8< (8 $8 $W$d8<  8$8$W$d8< X$ 66W! W%$d8< #8)$8)$ 77-$-$#8$8$W2$d8< z86$86$ W:$d8< (8>$8>$ 77B$B$B$PE$ 66W!WK$d8< $8O$8O$ 77S$S$#E$8#8#WX$d8< B_$Decodes and returns a string from buffer data encoded with encoding (defaults to 'utf8') beginning at start (defaults to 0) and ending at end (defaults to buffer.length). See buffer.write() example, above. ! 55--5-5;-5a$ 66W!Wm$d8< 8q$8q$Wu$d8< (8y$8y$W}$d8<  8$8$W$d8< X$ 66W! W$d8< _$8$8$ 77$$`$8$8$W$d8< z8$8$ W$d8< (8$8$ 77$$$P$ 66W!W$d8< $8$8$ 77$$$B$a$ ! 55--5-5;-5a$ 66W!W$d8< 8$8$W$d8< (8$8$W$d8<  8$8$W$d8< X$ 66W! W$d8< $8$8$ 77$$$8$8$W%d8< z8%8% W%d8< (8 %8 % 77%%%P% 66W!W%d8< $8%8% 77!%!%%8\$8\$ readUInt32BEW'%d8< B.%Reads an unsigned 32 bit integer from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Example: var buf = new Buffer(4); buf[0] = 0x3; buf[1] = 0x4; buf[2] = 0x23; buf[3] = 0x42; console.log(buf.readUInt32BE(0)); console.log(buf.readUInt32LE(0)); // 0x03042342 // 0x42230403 ! &%55&%--5U-50% 66W!W;%d8< _A%&%8?%8?%WE%d8< (8I%8I%WM%d8<  8Q%8Q%WU%d8< X[% 66W! Wa%d8< .%8e%8e% 77i%i%/%8Y%8Y%Wn%d8< z8r%8r% Wv%d8< (8z%8z% 77~%~%~%P% 66W!W%d8< [%8%8% 77%%&%%B%0% ! &%55&%--5U-50% 66W!W%d8< A%8%8%W%d8< (8%8%W%d8<  8%8%W%d8< X% 66W! W%d8< %8%8% 77%%%8%8%W%d8< z8%8% W%d8< (8%8% 77%%%P% 66W!W%d8< %8%8% 77%%&%%8+%8+% readUInt32LEW%d8< B%0% ! %55%--5U-50% 66W!W &d8< _&%8 &8 &W&d8< (8&8&W&d8<  8&8&W#&d8< X)& 66W! W/&d8< %83&83& 777&7&%8'&8'&W<&d8< z8@&8@& WD&d8< (8H&8H& 77L&L&L&PO& 66W!WU&d8< )&8Y&8Y& 77]&]&%O&B`&0% ! %55%--5U-50% 66W!Wl&d8< &8p&8p&Wt&d8< (8x&8x&W|&d8<  8&8&W&d8< X& 66W! W&d8< `&8&8& 77&&a&8&8&W&d8< z8&8& W&d8< (8&8& 77&&&P& 66W!W&d8< &8&8& 77&&%&B&0% ! %55%--5U-50% 66W!W&d8< &8&8&W&d8< (8&8&W&d8<  8&8&W&d8< X& 66W! W&d8< &8&8& 77&&&8&8&W&d8< z8'8' W'd8< (8 '8 ' 77'''P' 66W!W'd8< &8'8' 77''%'8%8%#W$'d8< B+'Writes string to the buffer at offset using the given encoding. offset defaults to 0, encoding defaults to 'utf8'. length is the number of bytes to write. Returns number of octets written. If buffer did not contain enough space to fit the entire string, it will write a partial amount of the string. length defaults to buffer.length - offset. The method will not write partial characters. buf = new Buffer(256); len = buf.write('\u00bd + \u00bc = \u00be', 0); console.log(len + " bytes: " + buf.toString('utf8', 0, len)); The number of characters written (which may be different than the number of bytes written) is set in Buffer._charsWritten and will be overwritten the next time buf.write() is called. ! #55#--5_ -5U-5-5-' 66W!W:'d8< j8>'8>'WB'd8< (8F'8F'WJ'd8<  8N'8N'WR'd8< XX' 66W! W^'d8< +'8b'8b' 77f'f','8V'8V'Wk'd8< z8o'8o' Ws'd8< (8w'8w' 77{'{'{'P~' 66W!W'd8< X'8'8' 77''#~'B'-' ! #55#--5_ -5U-5-5-' 66W!W'd8< j8'8'W'd8< (8'8'W'd8<  8'8'W'd8< X' 66W! W'd8< '8'8' 77'''8'8'W'd8< z8'8' W'd8< (8'8' 77'''P' 66W!W'd8< '8'8' 77''#'8('8('[index]W'd8< \' ! '55'- 66W!W(d8< 38 (8 (W (d8< (8(8(W(d8<  8(8(W(d8< X#( 66W! W)(d8< '8-(8-( 771(1('8!(8!(W6(d8< z8:(8:( W>(d8< (8B(8B( 77F(F(F(F(PI( 66W!WO(d8< #(8S(8S( 77W(W('I(I(EZ( !  77](](8'8' writeDoubleBEWc(d8< Bj(Writes value to the buffer at the specified offset with specified endian format. Note, value must be a valid 64 bit double. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Example: var buf = new Buffer(8); buf.writeDoubleBE(0xdeadbeefcafebabe, 0); console.log(buf); buf.writeDoubleLE(0xdeadbeefcafebabe, 0); console.log(buf); // // ! b(55b(--5-5U-5l( 66W!Wx(d8< _~(b(8|(8|(W(d8< (8(8(W(d8<  8(8(W(d8< X( 66W! W(d8< j(8(8( 77((k(8(8(W(d8< z8(8( W(d8< (8(8( 77(((P( 66W!W(d8< (8(8( 77((b((B(l( ! b(55b(--5-5U-5l( 66W!W(d8< ~(8(8(W(d8< (8(8(W(d8<  8(8(W(d8< X( 66W! W)d8< (8)8) 77))(8(8(W )d8< z8)8) W)d8< (8)8) 77)))P ) 66W!W&)d8< (8*)8*) 77.).)b( )8g(8g(readInt8W4)d8< B;)Reads a signed 8 bit integer from the buffer at the specified offset. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Works as buffer.readUInt8, except buffer contents are treated as two's complement signed values. ! 3)553)--5U-5=) 66W!WH)d8< _N)3)8L)8L)WR)d8< (8V)8V)WZ)d8<  8^)8^)Wb)d8< Xh) 66W! Wn)d8< ;)8r)8r) 77v)v)<)8f)8f)W{)d8< z8)8) W)d8< (8)8) 77)))P) 66W!W)d8< h)8)8) 77))3))B)=) ! 3)553)--5U-5=) 66W!W)d8< N)8)8)W)d8< (8)8)W)d8<  8)8)W)d8< X) 66W! W)d8< )8)8) 77)))8)8)W)d8< z8)8) W)d8< (8)8) 77)))P) 66W!W)d8< )8)8) 77))3))88)88) writeInt8W*d8< B *Writes value to the buffer at the specified offset. Note, value must be a valid signed 8 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Works as buffer.writeUInt8, except value is written out as a two's complement signed integer into buffer. ! *55*--5-5U-5 * 66W!W*d8< _**8*8*W"*d8< (8&*8&*W**d8<  8.*8.*W2*d8< X8* 66W! W>*d8<  *8B*8B* 77F*F* *86*86*WK*d8< z8O*8O* WS*d8< (8W*8W* 77[*[*[*P^* 66W!Wd*d8< 8*8h*8h* 77l*l**^*Bo* * ! *55*--5-5U-5 * 66W!W|*d8< *8*8*W*d8< (8*8*W*d8<  8*8*W*d8< X* 66W! W*d8< o*8*8* 77**p*8*8*W*d8< z8*8* W*d8< (8*8* 77***P* 66W!W*d8< *8*8* 77****8*8* readInt32LEW*d8< B*Reads a signed 32 bit integer from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Works as buffer.readUInt32*, except buffer contents are treated as two's complement signed values. ! *55*--5U-5* 66W!W*d8< _**8*8*W*d8< (8*8*W*d8<  8*8*W+d8< X+ 66W! W+d8< *8+8+ 77++*8+8+W+d8< z8+8+ W#+d8< (8'+8'+ 77++++++P.+ 66W!W4+d8< +88+88+ 77<+<+*.+B?+* ! *55*--5U-5* 66W!WK+d8< *8O+8O+WS+d8< (8W+8W+W[+d8<  8_+8_+Wc+d8< Xi+ 66W! Wo+d8< ?+8s+8s+ 77w+w+@+8g+8g+W|+d8< z8+8+ W+d8< (8+8+ 77+++P+ 66W!W+d8< i+8+8+ 77++*+B+* ! *55*--5U-5* 66W!W+d8< *8+8+W+d8< (8+8+W+d8<  8+8+W+d8< X+ 66W! W+d8< +8+8+ 77+++8+8+W+d8< z8+8+ W+d8< (8+8+ 77+++P+ 66W!W+d8< +8+8+ 77++*+8*8*W,d8< B ,Returns a new buffer which references the same memory as the old, but offset and cropped by the start (defaults to 0) and end (defaults to buffer.length) indexes. Negative indexes start from the end of the buffer. Modifying the new buffer slice will modify memory in the original buffer! Example: build a Buffer with the ASCII alphabet, take a slice, then modify one byte from the original Buffer. var buf1 = new Buffer(26); for (var i = 0 ; i < 26 ; i++) { buf1[i] = i + 97; // 97 is ASCII a } var buf2 = buf1.slice(0, 3); console.log(buf2.toString('ascii', 0, buf2.length)); buf1[0] = 33; console.log(buf2.toString('ascii', 0, buf2.length)); // abc // !bc ! 55--5;-5 , 66W!W,d8< `8,8,W,d8< (8#,8#,W',d8<  8+,8+,W/,d8< X5, 66W! W;,d8<  ,8?,8?, 77C,C, ,83,83,WH,d8< z8L,8L, WP,d8< (8T,8T, 77X,X,X,P[, 66W!Wa,d8< 5,8e,8e, 77i,i,[,Bl, , ! 55--5;-5 , 66W!Wx,d8< `8|,8|,W,d8< (8,8,W,d8<  8,8,W,d8< X, 66W! W,d8< l,8,8, 77,,m,8,8,W,d8< z8,8, W,d8< (8,8, 77,,,P, 66W!W,d8< ,8,8, 77,,,8,8,copyW,d8< B,Does copy between buffers. The source and target regions can be overlapped. targetStart and sourceStart default to 0. sourceEnd defaults to buffer.length. All values passed that are undefined/NaN or are out of bounds are set equal to their respective defaults. Example: build two Buffers, then copy buf1 from byte 16 through byte 19 into buf2, starting at the 8th byte in buf2. buf1 = new Buffer(26); buf2 = new Buffer(26); for (var i = 0 ; i < 26 ; i++) { buf1[i] = i + 97; // 97 is ASCII a buf2[i] = 33; // ASCII ! } buf1.copy(buf2, 8, 16, 20); console.log(buf2.toString('ascii', 0, 25)); // !!!!!!!!qrst!!!!!!!!!!!!! ! ,55,--5 targetBuffer-5 targetStart-5 sourceStart-5 sourceEnd, 66W!W,d8< _,,8,8,W,d8< (8,8,W,d8<  8-8-W-d8< X - 66W! W-d8< ,8-8- 77--,8-8-W-d8< z8!-8!- W%-d8< (8)-8)- 77------P0- 66W!W6-d8<  -8:-8:- 77>->-,0-BA-, ! ,55,--5,-5,-5,-5,, 66W!WO-d8< ,8S-8S-WW-d8< (8[-8[-W_-d8<  8c-8c-Wg-d8< Xm- 66W! Ws-d8< A-8w-8w- 77{-{-B-8k-8k-W-d8< z8-8- W-d8< (8-8- 77---P- 66W!W-d8< m-8-8- 77--,-8,8, writeUInt32LEW-d8< B-Writes value to the buffer at the specified offset with specified endian format. Note, value must be a valid unsigned 32 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Example: var buf = new Buffer(4); buf.writeUInt32BE(0xfeedface, 0); console.log(buf); buf.writeUInt32LE(0xfeedface, 0); console.log(buf); // // ! -55---5-5U-5- 66W!W-d8< _--8-8-W-d8< (8-8-W-d8<  8-8-W-d8< X- 66W! W-d8< -8-8- 77---8-8-W-d8< z8-8- W-d8< (8-8- 77---P. 66W!W.d8< -8 .8 . 77..-.B.- ! -55---5-5U-5- 66W!W .d8< -8$.8$.W(.d8< (8,.8,.W0.d8<  84.84.W8.d8< X>. 66W! WD.d8< .8H.8H. 77L.L..8<.8<.WQ.d8< z8U.8U. WY.d8< (8].8]. 77a.a.a.Pd. 66W!Wj.d8< >.8n.8n. 77r.r.-d.Bu.- ! -55---5-5U-5- 66W!W.d8< -8.8.W.d8< (8.8.W.d8<  8.8.W.d8< X. 66W! W.d8< u.8.8. 77..v.8.8.W.d8< z8.8. W.d8< (8.8. 77...P. 66W!W.d8< .8.8. 77..-.8-8- writeDoubleLEW.d8< B.l( ! .55.--5-5U-5l( 66W!W.d8< _..8.8.W.d8< (8.8.W/d8<  8/8/W/d8< X/ 66W! W/d8< .8/8/ 77//.8 /8 /W!/d8< z8%/8%/ W)/d8< (8-/8-/ 771/1/1/P4/ 66W!W:/d8< /8>/8>/ 77B/B/.4/BE/l( ! .55.--5-5U-5l( 66W!WR/d8< .8V/8V/WZ/d8< (8^/8^/Wb/d8<  8f/8f/Wj/d8< Xp/ 66W! Wv/d8< E/8z/8z/ 77~/~/F/8n/8n/W/d8< z8/8/ W/d8< (8/8/ 77///P/ 66W!W/d8< p/8/8/ 77//./B/l( ! .55.--5-5U-5l( 66W!W/d8< .8/8/W/d8< (8/8/W/d8<  8/8/W/d8< X/ 66W! W/d8< /8/8/ 77///8/8/W/d8< z8/8/ W/d8< (8/8/ 77///P/ 66W!W/d8< /8080 7700./8.8. writeInt32LEW 0d8< B0Writes value to the buffer at the specified offset with specified endian format. Note, value must be a valid signed 32 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Works as buffer.writeUInt32*, except value is written out as a two's complement signed integer into buffer. !  055 0--5-5U-50 66W!W!0d8< _'0 08%08%0W+0d8< (8/08/0W30d8<  870870W;0d8< XA0 66W! WG0d8< 08K08K0 77O0O008?08?0WT0d8< z8X08X0 W\0d8< (8`08`0 77d0d0d0Pg0 66W!Wm0d8< A08q08q0 77u0u0 0g0Bx00 !  055 0--5-5U-50 66W!W0d8< '08080W0d8< (8080W0d8<  8080W0d8< X0 66W! W0d8< x08080 7700y08080W0d8< z8080 W0d8< (8080 77000P0 66W!W0d8< 08080 7700 00B00 !  055 0--5-5U-50 66W!W0d8< '08080W0d8< (8080W0d8<  8080W0d8< X1 66W! W 1d8< 08181 771108181W1d8< z8181 W 1d8< (8$18$1 77(1(1(1P+1 66W!W11d8< 1851851 779191 0+18080 writeFloatBEW?1d8< BF1Writes value to the buffer at the specified offset with specified endian format. Note, behavior is unspecified if value is not a 32 bit float. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Example: var buf = new Buffer(4); buf.writeFloatBE(0xcafebabe, 0); console.log(buf); buf.writeFloatLE(0xcafebabe, 0); console.log(buf); // // ! >155>1--5-5U-5H1 66W!WT1d8< _Z1>18X18X1W^1d8< (8b18b1Wf1d8<  8j18j1Wn1d8< Xt1 66W! Wz1d8< F18~18~1 7711G18r18r1W1d8< z8181 W1d8< (8181 77111P1 66W!W1d8< t18181 7711>11B1H1 ! >155>1--5-5U-5H1 66W!W1d8< Z18181W1d8< (8181W1d8<  8181W1d8< X1 66W! W1d8< 18181 771118181W1d8< z8181 W1d8< (8181 77111P1 66W!W2d8< 18282 77 2 2>118C18C1 writeInt16LEW2d8< B2Writes value to the buffer at the specified offset with specified endian format. Note, value must be a valid signed 16 bit integer. Set noAssert to true to skip validation of value and offset. This means that value may be too large for the specific function and offset may be beyond the end of the buffer leading to the values being silently dropped. This should not be used unless you are certain of correctness. Defaults to false. Works as buffer.writeUInt16*, except value is written out as a two's complement signed integer into buffer. ! 2552--5-5U-52 66W!W%2d8< _+228)28)2W/2d8< (832832W72d8<  8;28;2W?2d8< XE2 66W! WK2d8< 28O28O2 77S2S228C28C2WX2d8< z8\28\2 W`2d8< (8d28d2 77h2h2h2Pk2 66W!Wq2d8< E28u28u2 77y2y22k2B|22 ! 2552--5-5U-52 66W!W2d8< +28282W2d8< (8282W2d8<  8282W2d8< X2 66W! W2d8< |28282 7722}28282W2d8< z8282 W2d8< (8282 77222P2 66W!W2d8< 28282 772222B22 ! 2552--5-5U-52 66W!W2d8< +28282W2d8< (8282W2d8<  8282W3d8< X 3 66W! W3d8< 28383 773328383W3d8< z8 38 3 W$3d8< (8(38(3 77,3,3,3P/3 66W!W53d8<  3893893 77=3=32/38282fillWC3d8< BJ3Fills the buffer with the specified value. If the offset (defaults to 0) and end (defaults to buffer.length) are not given it will fill the entire buffer. var b = new Buffer(50); b.fill("h"); ! B355B3--5-5U-5L3 66W!WX3d8< _^3B38\38\3Wb3d8< (8f38f3Wj3d8<  8n38n3Wr3d8< Xx3 66W! W~3d8< J38383 7733K38v38v3W3d8< z8383 W3d8< (8383 77333P3 66W!W3d8< x38383 7733B33B3L3 ! B355B3--5-5U-5L3 66W!W3d8< ^38383W3d8< (8383W3d8<  8383W3d8< X3 66W! W3d8< 38383 773338383W3d8< z8383 W3d8< (8383 77333P4 66W!W4d8< 38 48 4 7744B348G38G3 readInt32BEW4d8< B4* ! 4554--5U-5* 66W!W'4d8< _-448+48+4W14d8< (854854W94d8<  8=48=4WA4d8< XG4 66W! WM4d8< 48Q48Q4 77U4U448E48E4WZ4d8< z8^48^4 Wb4d8< (8f48f4 77j4j4j4Pm4 66W!Ws4d8< G48w48w4 77{4{44m4B~4* ! 4554--5U-5* 66W!W4d8< -48484W4d8< (8484W4d8<  8484W4d8< X4 66W! W4d8< ~48484 774448484W4d8< z8484 W4d8< (8484 77444P4 66W!W4d8< 48484 7744448484 readUInt16BEW4d8< B4Reads an unsigned 16 bit integer from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Example: var buf = new Buffer(4); buf[0] = 0x3; buf[1] = 0x4; buf[2] = 0x23; buf[3] = 0x42; console.log(buf.readUInt16BE(0)); console.log(buf.readUInt16LE(0)); console.log(buf.readUInt16BE(1)); console.log(buf.readUInt16LE(1)); console.log(buf.readUInt16BE(2)); console.log(buf.readUInt16LE(2)); // 0x0304 // 0x0403 // 0x0423 // 0x2304 // 0x2342 // 0x4223 ! 4554--5U-54 66W!W4d8< _448484W5d8< (8585W5d8<  8 58 5W5d8< X5 66W! W5d8< 48 58 5 77$5$548585W)5d8< z8-58-5 W15d8< (855855 77959595P<5 66W!WB5d8< 58F58F5 77J5J54<5BM54 ! 4554--5U-54 66W!WY5d8< 48]58]5Wa5d8< (8e58e5Wi5d8<  8m58m5Wq5d8< Xw5 66W! W}5d8< M58585 7755N58u58u5W5d8< z8585 W5d8< (8585 77555P5 66W!W5d8< w58585 7755458484 writeUInt32BEW5d8< B5- ! 5555--5-5U-5- 66W!W5d8< _558585W5d8< (8585W5d8<  8585W5d8< X5 66W! W5d8< 58585 775558585W5d8< z8585 W6d8< (8686 77666P 6 66W!W6d8< 58686 77665 6B6- ! 5555--5-5U-5- 66W!W)6d8< 58-68-6W16d8< (856856W96d8<  8=68=6WA6d8< XG6 66W! WM6d8< 68Q68Q6 77U6U668E68E6WZ6d8< z8^68^6 Wb6d8< (8f68f6 77j6j6j6Pm6 66W!Ws6d8< G68w68w6 77{6{65m68585 readUInt16LEW6d8< B64 ! 6556--5U-54 66W!W6d8< _668686W6d8< (8686W6d8<  8686W6d8< X6 66W! W6d8< 68686 776668686W6d8< z8686 W6d8< (8686 77666P6 66W!W6d8< 68686 776666B64 ! 6556--5U-54 66W!W6d8< 68686W6d8< (8787W7d8<  8 78 7W7d8< X7 66W! W7d8< 68787 77#7#768787W(7d8< z8,78,7 W07d8< (847847 77878787P;7 66W!WA7d8< 78E78E7 77I7I76;7BL74 ! 6556--5U-54 66W!WX7d8< 68\78\7W`7d8< (8d78d7Wh7d8<  8l78l7Wp7d8< Xv7 66W! W|7d8< L78787 7777M78t78t7W7d8< z8787 W7d8< (8787 77777P7 66W!W7d8< v78787 7777678686 readFloatBEW7d8< B7Reads a 32 bit float from the buffer at the specified offset with specified endian format. Set noAssert to true to skip validation of offset. This means that offset may be beyond the end of the buffer. Defaults to false. Example: var buf = new Buffer(4); buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x80; buf[3] = 0x3f; console.log(buf.readFloatLE(0)); // 0x01 ! 7557--5U-57 66W!W7d8< _778787W7d8< (8787W7d8<  8787W7d8< X7 66W! W7d8< 78787 777778787W7d8< z8787 W7d8< (8888 77888P 8 66W!W8d8< 78888 77887 8B87 ! 7557--5U-57 66W!W'8d8< 78+88+8W/8d8< (838838W78d8<  8;88;8W?8d8< XE8 66W! WK8d8< 88O88O8 77S8S888C88C8WX8d8< z8\88\8 W`8d8< (8d88d8 77h8h8h8Pk8 66W!Wq8d8< E88u88u8 77y8y87k88787 readDoubleLEW8d8< B8 ! ~855~8--5U-5 66W!W8d8< _8~88888W8d8< (8888W8d8<  8888W8d8< X8 66W! W8d8< 88888 778888888W8d8< z8888 W8d8< (8888 77888P8 66W!W8d8< 88888 7788~88B8 ! ~855~8--5U-5 66W!W8d8< 88888W8d8< (8989W9d8<  8 98 9W 9d8< X9 66W! W9d8< 88989 77!9!988989W&9d8< z8*98*9 W.9d8< (829829 77696969P99 66W!W?9d8< 98C98C9 77G9G9~899BJ9 ! ~855~8--5U-5 66W!WV9d8< 88Z98Z9W^9d8< (8b98b9Wf9d8<  8j98j9Wn9d8< Xt9 66W! Wz9d8< J98~98~9 7799K98r98r9W9d8< z8989 W9d8< (8989 77999P9 66W!W9d8< t98989 7799~898888 W9d8< S8989 writeFloatLEW9d8< B9H1 ! 9559--5-5U-5H1 66W!W9d8< _998989W9d8< (8989W9d8<  8989W9d8< X9 66W! W9d8< 98989 779998989W9d8< z8:8: W:d8< (8 :8 : 77 : : :P: 66W!W:d8< 98:8: 77::9:B!:H1 ! 9559--5-5U-5H1 66W!W.:d8< 982:82:W6:d8< (8::8::W>:d8<  8B:8B:WF:d8< XL: 66W! WR:d8< !:8V:8V: 77Z:Z:":8J:8J:W_:d8< z8c:8c: Wg:d8< (8k:8k: 77o:o:o:Pr: 66W!Wx:d8< L:8|:8|: 77::9r:B:H1 ! 9559--5-5U-5H1 66W!W:d8< 98:8:W:d8< (8:8:W:d8<  8:8:W:d8< X: 66W! W:d8< :8:8: 77:::8:8:W:d8< z8:8: W:d8< (8:8: 77:::P: 66W!W:d8< :8:8: 77::9:8989 readInt16LEW:d8< B:# ! :55:--5U-5# 66W!W:d8< _;:8:8:W;d8< (8 ;8 ;W ;d8<  8;8;W;d8< X; 66W! W!;d8< :8%;8%; 77););:8;8;W.;d8< z82;82; W6;d8< (8:;8:; 77>;>;>;PA; 66W!WG;d8< ;8K;8K; 77O;O;:A;BR;# ! :55:--5U-5# 66W!W^;d8< ;8b;8b;Wf;d8< (8j;8j;Wn;d8<  8r;8r;Wv;d8< X|; 66W! W;d8< R;8;8; 77;;S;8z;8z;W;d8< z8;8; W;d8< (8;8; 77;;;P; 66W!W;d8< |;8;8; 77;;:;B;# ! :55:--5U-5# 66W!W;d8< ;8;8;W;d8< (8;8;W;d8<  8;8;W;d8< X; 66W! W;d8< ;8;8; 77;;;8;8;W;d8< z8;8; W;d8< (8;8; 77<<<P< 66W!W <d8< ;8 <8 < 77<<:<8:8: writeInt32BEW<d8< B<0 ! <55<--5-5U-50 66W!W+<d8< _1<<8/<8/<W5<d8< (89<89<W=<d8<  8A<8A<WE<d8< XK< 66W! WQ<d8< <8U<8U< 77Y<Y<<8I<8I<W^<d8< z8b<8b< Wf<d8< (8j<8j< 77n<n<n<Pq< 66W!Ww<d8< K<8{<8{< 77<<<q<B<0 ! <55<--5-5U-50 66W!W<d8< 1<8<8<W<d8< (8<8<W<d8<  8<8<W<d8< X< 66W! W<d8< <8<8< 77<<<8<8<W<d8< z8<8< W<d8< (8<8< 77<<<P< 66W!W<d8< <8<8< 77<<<<8<8< readFloatLEW<d8< B<7 ! <55<--5U-57 66W!W<d8< _=<8<8<W=d8< (8=8=W =d8<  8=8=W=d8< X= 66W! W =d8< <8$=8$= 77(=(=<8=8=W-=d8< z81=81= W5=d8< (89=89= 77======P@= 66W!WF=d8< =8J=8J= 77N=N=<@=BQ=7 ! <55<--5U-57 66W!W]=d8< =8a=8a=We=d8< (8i=8i=Wm=d8<  8q=8q=Wu=d8< X{= 66W! W=d8< Q=8=8= 77==R=8y=8y=W=d8< z8=8= W=d8< (8=8= 77===P= 66W!W=d8< {=8=8= 77==<=B=7 ! <55<--5U-57 66W!W=d8< =8=8=W=d8< (8=8=W=d8<  8=8=W=d8< X= 66W! W=d8< =8=8= 77===8=8=W=d8< z8=8= W=d8< (8=8= 77===P> 66W!W>d8< =8 >8 > 77>><>8<8< writeInt16BEW>d8< B>2 ! >55>--5-5U-52 66W!W*>d8< _0>>8.>8.>W4>d8< (88>88>W<>d8<  8@>8@>WD>d8< XJ> 66W! WP>d8< >8T>8T> 77X>X>>8H>8H>W]>d8< z8a>8a> We>d8< (8i>8i> 77m>m>m>Pp> 66W!Wv>d8< J>8z>8z> 77~>~>>p>B>2 ! >55>--5-5U-52 66W!W>d8< 0>8>8>W>d8< (8>8>W>d8<  8>8>W>d8< X> 66W! W>d8< >8>8> 77>>>8>8>W>d8< z8>8> W>d8< (8>8> 77>>>P> 66W!W>d8< >8>8> 77>>>>8>8> writeUInt16LEW>d8< B>" ! >55>--5-5U-5" 66W!W>d8< _?>8>8>W?d8< (8?8?W ?d8<  8?8?W?d8< X? 66W! W ?d8< >8$?8$? 77(?(?>8?8?W-?d8< z81?81? W5?d8< (89?89? 77=?=?=?P@? 66W!WF?d8< ?8J?8J? 77N?N?>@?BQ?" ! >55>--5-5U-5" 66W!W^?d8< ?8b?8b?Wf?d8< (8j?8j?Wn?d8<  8r?8r?Wv?d8< X|? 66W! W?d8< Q?8?8? 77??R?8z?8z?W?d8< z8?8? W?d8< (8?8? 77???P? 66W!W?d8< |?8?8? 77??>?B?" ! >55>--5-5U-5" 66W!W?d8< ?8?8?W?d8< (8?8?W?d8<  8?8?W?d8< X? 66W! W?d8< ?8?8? 77???8?8?W?d8< z8?8? W?d8< (8?8? 77@@@P@ 66W!W @d8< ?8@8@ 77@@>@8>8>W@d8< \@ ! 55- 66W!W'@d8< _-@8+@8+@W1@d8< (85@85@W9@d8<  8=@8=@WA@d8< XG@ 66W! WM@d8< @8Q@8Q@ 77U@U@@8E@8E@WZ@d8< z8^@8^@ Wb@d8< (8f@8f@ 77j@j@j@j@Pm@ 66W!Ws@d8< G@8w@8w@ 77{@{@m@m@E~@ !  77@@8@8@ 77@@T88 77@@@@P@ 66W!W@d8< 8@8@ 77@@{ @@8Q8Q 77@@j88 77@@@jd!d8< 38@8@d8< 8@8@.d8< _@j8@8@d8< 8@8@ ! !66@ !Sv9@@JN+'K'X'S'_'''l';'C't'%''''''''''''_$~$$$$$$$n$v$$Y$$$$$$%%%$$ %!!!!!!!!!!!!,, ---1-7--,,&-,A-`-m-h-t----P-X-- ,(,5,0,<,\,b,I,, ,Q,,l,,,,,,,,y,,,!"""%"E"K"2"! ":"!U"r""z"""""b"j""L7i7v7q7}7777Y7a77667777<7B7)76717666666666664 5555=5C5*545254M5j5w5r5~5555Z5b55&&&&&''&&&'%`&}&&&&&&&m&u&&%&)&$&0&P&V&=& &&E&.%N%[%V%b%%%o%<%F%w%(%%%%%%%%%%%%;)[)h)c)o)))|)I)S))5)))))))))))):;;;";B;H;/;:;7;:;;;;;< <;;;;R;o;|;w;;;;;_;g;;#############$$$&$F$L$3$$ $;$?+\+i+d+p+++}+L+T++***+++/+5++**$++++++++++++4:4G4B4N4n4t4[4(424c44~44444444444Q=n={=v=====^=f==<< ===!=A=G=.=<=6======> >====77777 8877787888E8@8L8l8r8Y8(808a889999:9@9'988/9888888888888J9g9t9o9{9999W9_99    = C *  2 M j w r ~    Z b        !!   ! !;!H!C!O!o!u!\!+!3!d!> ???!?A?G?.?>?6?>Q?o?|?w?????_?g???????@ @????"""""###"" #"%#C#P#K#W#w#}#d#3#;#l#u...........------. .----.1.>.9.E.e.k.R.!.).Z.55555 66555656:6G6B6N6n6t6[6*626c6 *+*8*3*?*_*e*L**#*T**o********}***282E2@2L2l2r2Y2&202a2222 3330363322%3|22222222222>=>J>E>Q>q>w>^>+>5>f>>>>>>>>>>>>>x00000000000 0040A0<0H0h0n0U0"0,0]00011 1,121100!1<><K<F<R<r<x<_<,<6<g<<<<<<<<<<<<<!:?:L:G:S:s:y:`:/:7:h:9:::::::::::99999::999:F1g1t1o1{1111U1_11@111111121111.// //5/;/"/..*/.E/c/p/k/w////S/[/////////////j((((((((y(((d((((()!)'))(()J3k3x3s33333Y3c33D333333443333XweoR ~ 7=$,,LYT`m:Du&(#/OU< D_|ltZ(''(#((*(J(P(7(((?(~@@@:@G@B@N@n@t@[@(@2@c@;A(0  . )C@A stream is an abstract interface implemented by various objects in Node. For example a request to an HTTP server is a stream, as is [stdout][]. Streams are readable, writable, or both. All streams are instances of [EventEmitter][] You can load the Stream base classes by doing require('stream'). There are base classes provided for [Readable][] streams, [Writable][] streams, [Duplex][] streams, and [Transform][] streams. This document is split up into 3 sections. The first explains the parts of the API that you need to be aware of to use streams in your programs. If you never implement a streaming API yourself, you can stop there. The second section explains the parts of the API that you need to use if you implement your own custom streams yourself. The API is designed to make this easy for you to do. The third section goes into more depth about how streams work, including some of the internal mechanisms and functions that you should probably not modify unless you definitely know what you are doing. 66W!W@d8<@ K@ 66W!DuplexW@d8<@ H@Duplex streams are streams that implement both the [Readable][] and [Writable][] interfaces. See above for usage. Examples of Duplex streams include: * [tcp sockets][] * [zlib streams][] * [crypto streams][] ! @, 66W!W@d8<@ _@@8@8@@W@d8<@ (8@8@@WAd8<@  8A8A@W Ad8<@ XA 66W! WAd8<@ @8A8A@ 77AA@@8A8A@W#Ad8<@ z8'A8'A@ W+Ad8<@ (8/A8/A@ 773A3A3A3A@P6A 66W!WCd8<@  8BC8BC@WFCd8<@ XLC 66W! WRCd8<@ #C8VC8VC@ 77ZCZC@$C8JC8JC@W_Cd8<@ z8cC8cC@ WgCd8<@ (8kC8kC@ 77oCoCoC@PrC 66W!WxCd8<@ LC8|C8|C@ 77CC@krC8B8B@'*WCd8<@ BC This method pulls all the data out of a readable stream, and writes it to the supplied destination, automatically managing the flow so that the destination is not overwhelmed by a fast readable stream. Multiple destinations can be piped to safely. var readable = getReadableStreamSomehow(); var writable = fs.createWriteStream('file.txt'); // All the data from readable goes into 'file.txt' readable.pipe(writable); This function returns the destination stream, so you can set up pipe chains like so: var r = fs.createReadStream('file.txt'); var z = zlib.createGzip(); var w = fs.createWriteStream('file.txt.gz'); r.pipe(z).pipe(w); For example, emulating the Unix cat command: process.stdin.pipe(process.stdout); By default [end()][] is called on the destination when the source stream emits end, so that destination is no longer writable. Pass { end: false } as options to keep the destination stream open. This keeps writer open so that "Goodbye" can be written at the end. reader.pipe(writer, { end: false }); reader.on('end', function() { writer.end('Goodbye\n'); }); Note that process.stderr and process.stdout are never closed until the process exits, regardless of the specified options. ! '*55'*--5 destination-5C 66W!WCd8<@ _C'*8C8C@WCd8<@ (8C8C@WCd8<@  8C8C@WCd8<@ XC 66W! WCd8<@ C8C8C@ 77CC@C8C8C@WCd8<@ z8C8C@ WCd8<@ (8C8C@ 77CCC@PC 66W!WCd8<@ C8C8C@ 77CC@'*CBCC ! '*55'*--5C-5C 66W!WCd8<@ C8D8D@WDd8<@ (8 D8 D@W Dd8<@  8D8D@WDd8<@ XD 66W! W!Dd8<@ C8%D8%D@ 77)D)D@C8D8D@W.Dd8<@ z82D82D@ W6Dd8<@ (8:D8:D@ 77>D>D>D@PAD 66W!WGDd8<@ D8KD8KD@ 77ODOD@'*AD8C8C@WTDd8<@ B[D This is useful in certain cases where a stream is being consumed by a parser, which needs to "un-consume" some data that it has optimistically pulled out of the source, so that the stream can be passed on to some other party. If you find that you must often call stream.unshift(chunk) in your programs, consider implementing a [Transform][] stream instead. (See API for Stream Implementors, below.) // Pull off a header delimited by \n\n // use unshift() if we get too much // Call the callback with (error, header, stream) var StringDecoder = require('string_decoder').StringDecoder; function parseHeader(stream, callback) { stream.on('error', callback); stream.on('readable', onReadable); var decoder = new StringDecoder('utf8'); var header = ''; function onReadable() { var chunk; while (null !== (chunk = stream.read())) { var str = decoder.write(chunk); if (str.match(/\n\n/)) { // found the header boundary var split = str.split(/\n\n/); header += split.shift(); var remaining = split.join('\n\n'); var buf = new Buffer(remaining, 'utf8'); if (buf.length) stream.unshift(buf); stream.removeListener('error', callback); stream.removeListener('readable', onReadable); // now the body of the message can be read from the stream. callback(null, header, stream); } else { // still reading the header. header += str; } } } } ! 55--5]D 66W!WgDd8<@ _mD8kD8kD@WqDd8<@ (8uD8uD@WyDd8<@  8}D8}D@WDd8<@ XD 66W! WDd8<@ [D8D8D@ 77DD@\D8D8D@WDd8<@ z8D8D@ WDd8<@ (8D8D@ 77DDD@PD 66W!WDd8<@ D8D8D@ 77DD@DBD]D ! 55--5]D 66W!WDd8<@ mD8D8D@WDd8<@ (8D8D@WDd8<@  8D8D@WDd8<@ XD 66W! WDd8<@ D8D8D@ 77DD@D8D8D@WDd8<@ z8D8D@ WEd8<@ (8E8E@ 77 E E E@P E 66W!WEd8<@ D8E8E@ 77EE@ E8XD8XD@߶W Ed8<@ B'ECall this function to cause the stream to return strings of the specified encoding instead of Buffer objects. For example, if you do readable.setEncoding('utf8'), then the output data will be interpreted as UTF-8 data, and returned as strings. If you do readable.setEncoding('hex'), then the data will be encoded in hexadecimal string format. This properly handles multi-byte characters that would otherwise be potentially mangled if you simply pulled the Buffers directly and called buf.toString(encoding) on them. If you want to read the data as strings, always use this method. var readable = getReadableStreamSomehow(); readable.setEncoding('utf8'); readable.on('data', function(chunk) { assert.equal(typeof chunk, 'string'); console.log('got %d characters of string data', chunk.length); }) ! ߶55߶--5)E 66W!W3Ed8<@ 87E87E@W;Ed8<@ (8?E8?E@WCEd8<@  8GE8GE@WKEd8<@ XQE 66W! WWEd8<@ 'E8[E8[E@ 77_E_E@(E8OE8OE@WdEd8<@ z8hE8hE@ WlEd8<@ (8pE8pE@ 77tEtEtE@PwE 66W!W}Ed8<@ QE8E8E@ 77EE@߶wEBE)E ! ߶55߶--5)E 66W!WEd8<@ 8E8E@WEd8<@ (8E8E@WEd8<@  8E8E@WEd8<@ XE 66W! WEd8<@ E8E8E@ 77EE@E8E8E@WEd8<@ z8E8E@ WEd8<@ (8E8E@ 77EEE@PE 66W!WEd8<@ E8E8E@ 77EE@߶E8$E8$E@unpipeWEd8<@ BEThis method will remove the hooks set up for a previous pipe() call. If the destination is not specified, then all pipes are removed. If the destination is specified, but no pipe is set up for it, then this is a no-op. var readable = getReadableStreamSomehow(); var writable = fs.createWriteStream('file.txt'); // All the data from readable goes into 'file.txt', // but only for the first second readable.pipe(writable); setTimeout(function() { console.log('stop writing to file.txt'); readable.unpipe(writable); console.log('manually close the file stream'); writable.end(); }, 1000); ! E55E--5CE 66W!WEd8<@ _FE8F8F@WFd8<@ (8 F8 F@WFd8<@  8F8F@WFd8<@ XF 66W! W$Fd8<@ E8(F8(F@ 77,F,F@E8F8F@W1Fd8<@ z85F85F@ W9Fd8<@ (8=F8=F@ 77AFAFAF@PDF 66W!WJFd8<@ F8NF8NF@ 77RFRF@EDFBUFE ! E55E--5CE 66W!W`Fd8<@ F8dF8dF@WhFd8<@ (8lF8lF@WpFd8<@  8tF8tF@WxFd8<@ X~F 66W! WFd8<@ UF8F8F@ 77FF@VF8|F8|F@WFd8<@ z8F8F@ WFd8<@ (8F8F@ 77FFF@PF 66W!WFd8<@ ~F8F8F@ 77FF@EF8E8E@޹WFd8<@ BFThis method will cause a stream in flowing-mode to stop emitting data events. Any data that becomes available will remain in the internal buffer. This method is only relevant in flowing mode. When called on a non-flowing stream, it will switch into flowing mode, but remain paused. var readable = getReadableStreamSomehow(); readable.on('data', function(chunk) { console.log('got %d bytes of data', chunk.length); readable.pause(); console.log('there will be no more data for 1 second'); setTimeout(function() { console.log('now data will start flowing again'); readable.resume(); }, 1000); }) ! ޹55޹-F 66W!WFd8<@ 8F8F@WFd8<@ (8F8F@WFd8<@  8F8F@WFd8<@ XF 66W! WFd8<@ F8F8F@ 77FF@F8F8F@WFd8<@ z8F8F@ WGd8<@ (8G8G@ 77 G G G@P G 66W!WGd8<@ F8G8G@ 77GG@޹ G8F8F@ 77GG@QA8wA8wA@W$Gd8<@ z8(G8(G@ W,Gd8<@ (80G80G@ 774G4G4G4G@P7G 66W!W=Gd8<@ yA8AG8AG@ 77EGEG@IA7G7G8NA8NA@WritableWKGd8<@ HQGThe Writable stream interface is an abstraction for a destination that you are writing data to. Examples of writable streams include: * http requests, on the client * http responses, on the server * fs write streams * [zlib streams][] * [crypto streams][] * [tcp sockets][] * child process stdin * [process.stdout][], [process.stderr][] ! JG, 66W!WZGd8<@ _`GJG8^G8^G@WdGd8<@ (8hG8hG@WlGd8<@  8pG8pG@WtGd8<@ XzG 66W! WGd8<@ QG8G8G@WGd8<@ BGCall this method when no more data will be written to the stream. If supplied, the callback is attached as a listener on the finish event. Calling [write()][] after calling [end()][] will raise an error. // write 'hello, ' and then end with 'world!' http.createServer(function (req, res) { res.write('hello, '); res.end('world!'); // writing more now is not allowed! }); ! 55--5-5-5G 66W!WGd8<@ ї8G8G@WGd8<@ (8G8G@WGd8<@  8G8G@WGd8<@ XG 66W! WGd8<@ G8G8G@ 77GG@G8G8G@WGd8<@ z8G8G@ WGd8<@ (8G8G@ 77GGG@PG 66W!WGd8<@ G8G8G@ 77GG@GBGG ! 55--5-5-5G 66W!WGd8<@ ї8H8H@WHd8<@ (8 H8 H@WHd8<@  8H8H@WHd8<@ XH 66W! W#Hd8<@ G8'H8'H@ 77+H+H@G8H8H@W0Hd8<@ z84H84H@ W8Hd8<@ (8G%GZAdA-GKABBBBBCCCBBCB#C?CLCGCSCsCyC`C/C7ChC'EDEQELEXExE~EeE4EBAYBuBB}BBBBBeBmBBQGmGzGuGG=ICI*I[GeG2ILG]H|HHHHHHHlHtHHWHHHHHHIIHHHIGGGGGGGGGGGGGHHH$HDHJH1HHH9H@AA AA7A=A$A@@,A@VIrIIzIIIII`IjIIQI  . cryptoCIStability: 2 - Unstable; API changes are being discussed for future versions. Breaking changes will be minimized. See below. Use require('crypto') to access this module. The crypto module offers a way of encapsulating secure credentials to be used as part of a secure HTTPS net or http connection. It also offers a set of wrappers for OpenSSL's hash, hmac, cipher, decipher, sign and verify methods. 66W!WId8<I KI 66W!VerifyWId8<I HIClass for verifying signatures. Returned by crypto.createVerify. Verify objects are writable streams. The written data is used to validate against the supplied signature. Once all of the data has been written, the verify method will return true if the supplied signature is valid. The legacy update method is also supported. ! I, 66W!WJd8<I _JI8 J8 JIWJd8<I (8J8JIWJd8<I  8J8JIW"Jd8<I X(J 66W!verifyW/Jd8<I B5JVerifies the signed data by using the object and signature. object is a string containing a PEM encoded object, which can be one of RSA public key, DSA public key, or X.509 certificate. signature is the previously calculated signature for the data, in the signature_format which can be 'binary', 'hex' or 'base64'. If no encoding is specified, then a buffer is expected. Returns true or false depending on the validity of the signature for the data and public key. Note: verifier object can not be used after verify() method has been called. ! .J55.J--5-5 signature-5signature_format7J 66W!WEJd8<I _KJ.J8IJ8IJIWOJd8<I (8SJ8SJIWWJd8<I  8[J8[JIW_Jd8<I XeJ 66W! WkJd8<I 5J8oJ8oJI 77sJsJI6J8cJ8cJIWxJd8<I z8|J8|JI WJd8<I (8J8JI 77JJJIPJ 66W!WJd8<I eJ8J8JI 77JJI.JJ83J83JI WJd8<I I8J8JIupdateWJd8<I BJjUpdates the verifier object with data. This can be called many times with new data as it is streamed. ! J55J--5mJ 66W!WJd8<I _JJ8J8JIWJd8<I (8J8JIWJd8<I  8J8JIWJd8<I XJ 66W! WJd8<I J8J8JI 77JJIJ8J8JIWJd8<I z8J8JI WJd8<I (8J8JI 77JJJIPJ 66W!WKd8<I J8 K8 KI 77 K KIJJ8J8JI 77KKIJ8&J8&JIWKd8<I z8K8KI WKd8<I (8#K8#KI 77'K'K'K'KIP*K 66W!W0Kd8<I (J84K84KI 778K8KII*K*K8I8II createHmacW>Kd8<I \DKCreates and returns a hmac object, a cryptographic hmac with the given algorithm and key. It is a stream that is both readable and writable. The written data is used to compute the hmac. Once the writable side of the stream is ended, use the read() method to get the computed digest. The legacy update and digest methods are also supported. algorithm is dependent on the available algorithms supported by OpenSSL - see createHash above. key is the hmac key to be used. ! =K55=K--5 algorithm-52FK 66W!WRKd8<I _XK=K8VK8VKIW\Kd8<I (8`K8`KIWdKd8<I  8hK8hKIWlKd8<I XrK 66W! WxKd8<I DK8|K8|KI 77KKIEK8pK8pKIWKd8<I z8K8KI WKd8<I (8K8KI 77KKKKIPK 66W!WKd8<I rK8K8KI 77KKI=KKKPK 66W!WKd8<I XK 66W!digestWKd8<I BKCalculates the digest of all of the passed data to the hmac. The encoding can be 'hex', 'binary' or 'base64'. If no encoding is provided, then a buffer is returned. Note: hmac object can not be used after digest() method has been called. ! K55K--5K 66W!WKd8<I _KK8K8KIWKd8<I (8K8KIWKd8<I  8K8KIWKd8<I XK 66W! WKd8<I K8K8KI 77KKIK8K8KIWLd8<I z8L8LI W Ld8<I (8 L8 LI 77LLLIPL 66W!WLd8<I K8L8LI 77"L"LIKL8K8KI W'Ld8<I H-LTClass for creating cryptographic hmac content. Returned by crypto.createHmac. ! Hmac, 66W!W7Ld8<I _=L1L8;L8;LIWALd8<I (8EL8ELIWILd8<I  8ML8MLIWQLd8<I K8UL8ULIWYLd8<I z8]L8]LI WaLd8<I (8eL8eLI 77iLiLiLiLIKKK8+L8+LIJWnLd8<I BtLpUpdate the hmac content with the given data. This can be called many times with new data as it is streamed. ! J55J--5mvL 66W!WLd8<I J8L8LIWLd8<I (8L8LIWLd8<I  8L8LIWLd8<I XL 66W! WLd8<I tL8L8LI 77LLIuL8L8LIWLd8<I z8L8LI WLd8<I (8L8LI 77LLLIPL 66W!WLd8<I L8L8LI 77LLIJL8rL8rLI 77LLI.L8K8KI 77LLI1L8BK8BKI createVerifyWLd8<I \LxCreates and returns a verification object, with the given algorithm. This is the mirror of the signing object above. ! L55L--5LKL 66W!WLd8<I _LL8L8LIWLd8<I (8M8MIWMd8<I  8 M8 MIWMd8<I XM 66W! WMd8<I L8M8MI 77"M"MIL8M8MIW'Md8<I z8+M8+MI W/Md8<I (83M83MI 777M7M7M7MIP:M 66W!W@Md8<I M8DM8DMI 77HMHMIL:M:M+K8L8LIDecipherWNMd8<I HTMClass for decrypting data. Returned by crypto.createDecipher and crypto.createDecipheriv. Decipher objects are streams that are both readable and writable. The written enciphered data is used to produce the plain-text data on the the readable side. The legacy update and final methods are also supported. ! MM, 66W!W]Md8<I _cMMM8aM8aMIWgMd8<I (8kM8kMIWoMd8<I  8sM8sMIWwMd8<I X}M 66W! WMd8<I TM8M8MIfinalWMd8<I BMReturns any remaining plaintext which is deciphered, with output_encoding being one of: 'binary', 'ascii' or 'utf8'. If no encoding is provided, then a buffer is returned. Note: decipher object can not be used after final() method has been called. ! M55M--5output_encodingM 66W!WMd8<I _MM8M8MIWMd8<I (8M8MIWMd8<I  8M8MIWMd8<I XM 66W! WMd8<I M8M8MI 77MMIM8M8MIWMd8<I z8M8MI WMd8<I (8M8MI 77MMMIPM 66W!WMd8<I M8M8MI 77MMIMM8M8MIJWMd8<I BMUpdates the decipher with data, which is encoded in 'binary', 'base64' or 'hex'. If no encoding is provided, then a buffer is expected. The output_decoding specifies in what format to return the deciphered plaintext: 'binary', 'ascii' or 'utf8'. If no encoding is provided, then a buffer is returned. ! J55J--5m-5input_encoding-5MN 66W!W Nd8<I J8N8NIWNd8<I (8N8NIWNd8<I  8!N8!NIW%Nd8<I X+N 66W! W1Nd8<I M85N85NI 779N9NIM8)N8)NIW>Nd8<I z8BN8BNI WFNd8<I (8JN8JNI 77NNNNNNIPQN 66W!WWNd8<I +N8[N8[NI 77_N_NIJQN8M8MIsetAutoPaddingWeNd8<I BkNYou can disable auto padding if the data has been encrypted without standard block padding to prevent decipher.final from checking and removing it. Can only work if the input data's length is a multiple of the ciphers block size. You must call this before streaming data to decipher.update. ! dN55dN--5 auto_paddingmN 66W!WxNd8<I _~NdN8|N8|NIWNd8<I (8N8NIWNd8<I  8N8NIWNd8<I XN 66W! WNd8<I kN8N8NI 77NNIlN8N8NIWNd8<I z8N8NI WNd8<I (8N8NI 77NNNIPN 66W!WNd8<I N8N8NI 77NNIdNN8iN8iNI 77NNIUM8{M8{MIWNd8<I z8N8NI WNd8<I (8N8NI 77NNNNIPN 66W!WNd8<I }M8N8NI 77NNIMMNN8RM8RMI DiffieHellmanWNd8<I HOcThe class for creating Diffie-Hellman key exchanges. Returned by crypto.createDiffieHellman. ! N, 66W!W Od8<I _ON8O8OIWOd8<I (8O8OIWOd8<I  8"O8"OIW&Od8<I X,O 66W ! getGeneratorW3Od8<I B9OReturns the Diffie-Hellman prime in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned. ! 2O552O--5;O 66W!WEOd8<I _KO2O8IO8IOIWOOd8<I (8SO8SOIWWOd8<I  8[O8[OIW_Od8<I XeO 66W! WkOd8<I 9O8oO8oOI 77sOsOI:O8cO8cOIWxOd8<I z8|O8|OI WOd8<I (8O8OI 77OOOIPO 66W!WOd8<I eO8O8OI 77OOI2OO87O87OI getPublicKeyWOd8<I BOReturns the Diffie-Hellman public key in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned. ! O55O--5O 66W!WOd8<I _OO8O8OIWOd8<I (8O8OIWOd8<I  8O8OIWOd8<I XO 66W! WOd8<I O8O8OI 77OOIO8O8OIWOd8<I z8O8OI WOd8<I (8O8OI 77OOOIPO 66W!WOd8<I O8P8PI 77PPIOO8O8OI generateKeysW Pd8<I BPGenerates private and public Diffie-Hellman key values, and returns the public key in the specified encoding. This key should be transferred to the other party. Encoding can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned. !  P55 P--5P 66W!WPd8<I _#P P8!P8!PIW'Pd8<I (8+P8+PIW/Pd8<I  83P83PIW7Pd8<I X=P 66W! WCPd8<I P8GP8GPI 77KPKPIP8;P8;PIWPPd8<I z8TP8TPI WXPd8<I (8\P8\PI 77`P`P`PIPcP 66W!WiPd8<I =P8mP8mPI 77qPqPI PcP8P8PIgetPrimeWwPd8<I B}P;O ! vP55vP--5;O 66W!WPd8<I _PvP8P8PIWPd8<I (8P8PIWPd8<I  8P8PIWPd8<I XP 66W! WPd8<I }P8P8PI 77PPI~P8P8PIWPd8<I z8P8PI WPd8<I (8P8PI 77PPPIPP 66W!WPd8<I P8P8PI 77PPIvPP8{P8{PI computeSecretWPd8<I BPComputes the shared secret using other_public_key as the other party's public key and returns the computed shared secret. Supplied key is interpreted using specified input_encoding, and secret is encoded using specified output_encoding. Encodings can be 'binary', 'hex', or 'base64'. If the input encoding is not provided, then a buffer is expected. If no output encoding is given, then a buffer is returned. ! P55P--5other_public_key-5N-5MP 66W!WPd8<I _PP8P8PIWQd8<I (8Q8QIW Qd8<I  8 Q8 QIWQd8<I XQ 66W! WQd8<I P8!Q8!QI 77%Q%QIP8Q8QIW*Qd8<I z8.Q8.QI W2Qd8<I (86Q86QI 77:Q:Q:QIP=Q 66W!WCQd8<I Q8GQ8GQI 77KQKQIP=Q8P8PI WPQd8<I O8TQ8TQI setPublicKeyWYQd8<I B_QSets the Diffie-Hellman public key. Key encoding can be 'binary', 'hex' or 'base64'. If no encoding is provided, then a buffer is expected. ! XQ55XQ--5 public_key-5aQ 66W!WmQd8<I _sQXQ8qQ8qQIWwQd8<I (8{Q8{QIWQd8<I  8Q8QIWQd8<I XQ 66W! WQd8<I _Q8Q8QI 77QQI`Q8Q8QIWQd8<I z8Q8QI WQd8<I (8Q8QI 77QQQIPQ 66W!WQd8<I Q8Q8QI 77QQIXQQ8]Q8]QI setPrivateKeyWQd8<I BQSets the Diffie-Hellman private key. Key encoding can be 'binary', 'hex' or 'base64'. If no encoding is provided, then a buffer is expected. ! Q55Q--5 private_key-5Q 66W!WQd8<I _QQ8Q8QIWQd8<I (8Q8QIWQd8<I  8Q8QIWQd8<I XQ 66W! WRd8<I Q8R8RI 77 R RIQ8Q8QIWRd8<I z8R8RI WRd8<I (8R8RI 77RRRIP!R 66W!W'Rd8<I Q8+R8+RI 77/R/RIQ!R8Q8QI getPrivateKeyW5Rd8<I B;RReturns the Diffie-Hellman private key in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned. ! 4R554R--5=R 66W!WGRd8<I _MR4R8KR8KRIWQRd8<I (8UR8URIWYRd8<I  8]R8]RIWaRd8<I XgR 66W! WmRd8<I ;R8qR8qRI 77uRuRIW8>WI WBWd8<I (8FW8FWI 77JWJWJWIPMW 66W!WSWd8<I 'W8WW8WWI 77[W[WIVMW8V8VI createHashWaWd8<I \gWCreates and returns a hash object, a cryptographic hash with the given algorithm which can be used to generate hash digests. algorithm is dependent on the available algorithms supported by the version of OpenSSL on the platform. Examples are 'sha1', 'md5', 'sha256', 'sha512', etc. On recent releases, openssl list-message-digest-algorithms will display the available digest algorithms. Example: this program that takes the sha1 sum of a file var filename = process.argv[2]; var crypto = require('crypto'); var fs = require('fs'); var shasum = crypto.createHash('sha1'); var s = fs.ReadStream(filename); s.on('data', function(d) { shasum.update(d); }); s.on('end', function() { var d = shasum.digest('hex'); console.log(d + ' ' + filename); }); ! `W55`W--5LKiW 66W!WsWd8<I _yW`W8wW8wWIW}Wd8<I (8W8WIWWd8<I  8W8WIWWd8<I XW 66W! WWd8<I gW8W8WI 77WWIhW8W8WIWWd8<I z8W8WI WWd8<I (8W8WI 77WWWWIPW 66W!WWd8<I W8W8WI 77WWI`WWWS8eW8eWI getCiphersWWd8<I BWReturns an array with the names of the supported ciphers. Example: var ciphers = crypto.getCiphers(); console.log(ciphers); // ['AES-128-CBC', 'AES-128-CBC-HMAC-SHA1', ...] ! W55W-W 66W!WWd8<I _WW8W8WIWWd8<I (8W8WIWWd8<I  8W8WIWWd8<I XW 66W! WXd8<I W8X8XI 77 X XIW8W8WIWXd8<I z8X8XI WXd8<I (8X8XI 77!X!X!XIP$X 66W!W*Xd8<I W8.X8.XI 772X2XIW$X8W8WIpbkdf2W8Xd8<I B>XAsynchronous PBKDF2 applies pseudorandom function HMAC-SHA1 to derive a key of given length from the given password, salt and iterations. The callback gets two arguments (err, derivedKey). ! 7X557X--5T-5salt-5 iterations-5keylen-5@X 66W!WQXd8<I _WX7X8UX8UXIW[Xd8<I (8_X8_XIWcXd8<I  8gX8gXIWkXd8<I XqX 66W! WwXd8<I >X8{X8{XI 77XXI?X8oX8oXIWXd8<I z8X8XI WXd8<I (8X8XI 77XXXIPX 66W!WXd8<I qX8X8XI 77XXI7XX8]>]>]IPA] 66W!WG]d8<I ]8K]8K]I 77O]O]I\A]8\8\I randomBytesWU]d8<I B[]Generates cryptographically strong pseudo-random data. Usage: // async crypto.randomBytes(256, function(ex, buf) { if (ex) throw ex; console.log('Have %d bytes of random data: %s', buf.length, buf); }); // sync try { var buf = crypto.randomBytes(256); console.log('Have %d bytes of random data: %s', buf.length, buf); } catch (ex) { // handle error } ! T]55T]--5h-5]] 66W!Wh]d8<I _n]T]8l]8l]IWr]d8<I (8v]8v]IWz]d8<I  8~]8~]IW]d8<I X] 66W! W]d8<I []8]8]I 77]]I\]8]8]IW]d8<I z8]8]I W]d8<I (8]8]I 77]]]IP] 66W!W]d8<I ]8]8]I 77]]IT]]8Y]8Y]I 77]]II8I8II 77]]]IId!d8<I 38]8]d8<I I8]8].d8<I _]I8]8]d8<I I8]8] ! !I66] !6IIIRRRRkSSSSRRSRxSSSSSSSSSSSsSS$S1S,S8SXS^SESSSMSS-LJLKRL(LKKZL8LBLbLVtLLLLLLLLLLLoLKKKKKLLLKK LKTUTUTTT%UU U-U\UUUUUUVUUUUU?U\UiUdUpUUU}ULUTUU:UV0V=V8VDVdVjVQV V(VYVVTMpM}MxMMNNN^MhMNOMMN+N&N2NRNXN?NNNGNMMMMMMMMMMMMMkNNNNNNNNyNNNfNZ%ZY-ZZYY5ZZZ=Z\OZlZyZtZZZZZ\ZdZZJZZZZZZ [[ZZZ[ZIJ(J#JJ+K1KK JJ KIJJJJJKKJJJJJ5JXJeJ`JlJJJyJFJPJJ0JOO,O'OQQRRR OORNP0P=P8PDPdPjPQPP(PYP PP QQQQ>QDQ+QPQ3QP}PPPPPPPPPPPxP9OXOeO`OlOOOyOFOPOO4OOOOOOOOOOOOO;RZRgRbRnRRR{RHRRRR6R_QQQQQQQQnQxQQZQQQQQR"R(RRQQRQWWWWX%X+XXWWXWVW'W"W.WNWTW;WWWCWVT.T;T6TBTbThTOTT&TWT TgWWWWWWWWtW~WWbWDKeKrKmKyKKKKSK]KK?K{TTTTTTTTTTTvT\]]]"]B]H]/]\]7]\ Y@YMYHYTYtYzYaY.Y8YiYY[[[[[[[[[[[[YYYYYYYYYYYYLMMMM;MAM(MLL0ML \-\:\5\A\a\g\N\\%\V\\q\\\\\\\\\\\0[P[][X[d[[[q[>[H[y[+[>XdXqXlXxXXXXRX\XX9XXXXXXY YXXXXX[]{]]]]]]]i]s]]V]VVVVVVVVVVVV  . tlsC] Use require('tls') to access this module. The tls module uses OpenSSL to provide Transport Layer Security and/or Secure Socket Layer: encrypted stream communication. TLS/SSL is a public/private key infrastructure. Each client and each server must have a private key. A private key is created like this openssl genrsa -out ryans-key.pem 1024 All severs and some clients need to have a certificate. Certificates are public keys signed by a Certificate Authority or self-signed. The first step to getting a certificate is to create a "Certificate Signing Request" (CSR) file. This is done with: openssl req -new -key ryans-key.pem -out ryans-csr.pem To create a self-signed certificate with the CSR, do this: openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem Alternatively you can send the CSR to a Certificate Authority for signing. (TODO: docs on creating a CA, for now interested users should just look at test/fixtures/keys/Makefile in the Node source code) To create .pfx or .p12, do this: openssl pkcs12 -export -in agent5-cert.pem -inkey agent5-key.pem \ -certfile ca-cert.pem -out agent5.pfx * in: certificate * inkey: private key * certfile: all CA certs concatenated in one file like cat ca1-cert.pem ca2-cert.pem > ca-cert.pem 66W!W]d8<] K] 66W!createSecurePairW^d8<] \^Creates a new secure pair object with two streams, one of which reads/writes encrypted data, and one reads/writes cleartext data. Generally the encrypted one is piped to/from an incoming encrypted data stream, and the cleartext one is used as a replacement for the initial encrypted stream. * credentials: A credentials object from crypto.createCredentials( ... ) * isServer: A boolean indicating whether this tls connection should be opened as a server or a client. * requestCert: A boolean indicating whether a server should request a certificate from a connecting client. Only applies to server connections. * rejectUnauthorized: A boolean indicating whether a server should automatically reject clients with invalid certificates. Only applies to servers with requestCert enabled. tls.createSecurePair() returns a SecurePair object with [cleartext][] and encrypted stream properties. ! ^55^--5 credentials-5isServer-5 requestCert-5rejectUnauthorized ^ 66W!W^d8<] _!^^8^8^]W%^d8<] (8)^8)^]W-^d8<]  81^81^]W5^d8<] X;^ 66W! WA^d8<] ^8E^8E^] 77I^I^] ^89^89^]WN^d8<] z8R^8R^] WV^d8<] (8Z^8Z^] 77^^^^^^^^]Pa^ 66W!Wg^d8<] ;^8k^8k^] 77o^o^]^a^a^Pr^ 66W!Wx^d8<] X~^ 66W! W^d8<] H^%Returned by tls.createSecurePair. !  SecurePair, 66W!W^d8<] _^^8^8^]W^d8<] (8^8^]W^d8<]  8^8^]W^d8<] ~^8^8^]W^d8<] z8^8^] W^d8<] (8^8^] 77^^^^]s^s^s^8^8^] 77^^]^8|^8|^] 77^^]^8^8^]W^d8<] \^'Creates a new [tls.Server][]. The connectionListener argument is automatically set as a listener for the [secureConnection][] event. The options object has these possibilities: * pfx: A string or Buffer containing the private key, certificate and CA certs of the server in PFX or PKCS12 format. (Mutually exclusive with the key, cert and ca options.) * key: A string or Buffer containing the private key of the server in PEM format. (Required) * passphrase: A string of passphrase for the private key or pfx. * cert: A string or Buffer containing the certificate key of the server in PEM format. (Required) * ca: An array of strings or Buffers of trusted certificates in PEM format. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections. * crl : Either a string or list of strings of PEM encoded CRLs (Certificate Revocation List) * ciphers: A string describing the ciphers to use or exclude. To mitigate [BEAST attacks] it is recommended that you use this option in conjunction with the honorCipherOrder option described below to prioritize the non-CBC cipher. Defaults to AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH. Consult the [OpenSSL cipher list format documentation] for details on the format. ECDH (Elliptic Curve Diffie-Hellman) ciphers are not yet supported. `AES128-GCM-SHA256` is used when node.js is linked against OpenSSL 1.0.1 or newer and the client speaks TLS 1.2, RC4 is used as a secure fallback. **NOTE**: Previous revisions of this section suggested `AES256-SHA` as an acceptable cipher. Unfortunately, `AES256-SHA` is a CBC cipher and therefore susceptible to BEAST attacks. Do *not* use it. * handshakeTimeout: Abort the connection if the SSL/TLS handshake does not finish in this many milliseconds. The default is 120 seconds. A 'clientError' is emitted on the tls.Server object whenever a handshake times out. * honorCipherOrder : When choosing a cipher, use the server's preferences instead of the client preferences. Note that if SSLv2 is used, the server will send its list of preferences to the client, and the client chooses the cipher. Although, this option is disabled by default, it is recommended that you use this option in conjunction with the ciphers option to mitigate BEAST attacks. * requestCert: If true the server will request a certificate from clients that connect and attempt to verify that certificate. Default: false. * rejectUnauthorized: If true the server will reject any connection which is not authorized with the list of supplied CAs. This option only has an effect if requestCert is true. Default: false. * NPNProtocols: An array or Buffer of possible NPN protocols. (Protocols should be ordered by their priority). * SNICallback: A function that will be called if client supports SNI TLS extension. Only one argument will be passed to it: servername. And SNICallback should return SecureContext instance. (You can use crypto.createCredentials(...).context to get proper SecureContext). If SNICallback wasn't provided - default callback with high-level API will be used (see below). * sessionIdContext: A string containing a opaque identifier for session resumption. If requestCert is true, the default is MD5 hash value generated from command-line. Otherwise, the default is not provided. * secureProtocol: The SSL method to use, e.g. SSLv3_method to force SSL version 3. The possible values depend on your installation of OpenSSL and are defined in the constant [SSL_METHODS][]. Here is a simple example echo server: var tls = require('tls'); var fs = require('fs'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), // This is necessary only if using the client certificate authentication. requestCert: true, // This is necessary only if the client uses the self-signed certificate. ca: [ fs.readFileSync('client-cert.pem') ] }; var server = tls.createServer(options, function(cleartextStream) { console.log('server connected', cleartextStream.authorized ? 'authorized' : 'unauthorized'); cleartextStream.write("welcome!\n"); cleartextStream.setEncoding('utf8'); cleartextStream.pipe(cleartextStream); }); server.listen(8000, function() { console.log('server bound'); }); Or var tls = require('tls'); var fs = require('fs'); var options = { pfx: fs.readFileSync('server.pfx'), // This is necessary only if using the client certificate authentication. requestCert: true, }; var server = tls.createServer(options, function(cleartextStream) { console.log('server connected', cleartextStream.authorized ? 'authorized' : 'unauthorized'); cleartextStream.write("welcome!\n"); cleartextStream.setEncoding('utf8'); cleartextStream.pipe(cleartextStream); }); server.listen(8000, function() { console.log('server bound'); }); You can test this server by connecting to it with openssl s_client: openssl s_client -connect 127.0.0.1:8000 ! 55--5-5secureConnectionListener^ 66W!W^d8<] m8^8^]W^d8<] (8^8^]W^d8<]  8^8^]W_d8<] X_ 66W! W _d8<] ^8_8_] 77__]^8_8_]W_d8<] z8_8_] W"_d8<] (8&_8&_] 77*_*_*_*_]P-_ 66W!W3_d8<] _87_87_] 77;_;_]-_-_P>_ 66W!WD_d8<] XJ_ 66W!WP_d8<] BV_Begin accepting connections on the specified port and host. If the host is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY). This function is asynchronous. The last parameter callback will be called when the server has been bound. See net.Server for more information. ! 55--5-5-5X_ 66W!Wd_d8<] 8h_8h_]Wl_d8<] (8p_8p_]Wt_d8<]  8x_8x_]W|_d8<] X_ 66W! W_d8<] V_8_8_] 77__]W_8_8_]W_d8<] z8_8_] W_d8<] (8_8_] 77___]P_ 66W!W_d8<] _8_8_] 77__]_8T_8T_],W_d8< \_ ! ,55,- 66W!W_d8<] C8_8_]W_d8<] (8_8_]W_d8<]  8_8_]W_d8<] X_ 66W! W_d8<] _8_8_] 77__]_8_8_]W_d8<] z8`8`] W`d8<] (8`8`] 77 ` ` ` `]P` 66W!W`d8<] _8`8`] 77``],``E ` !  77#`#`]8_8_] W(`d8<] H.`This class is a subclass of net.Server and has the same methods on it. Instead of accepting just raw TCP connections, this accepts encrypted connections using TLS or SSL. ! , 66W!W7`d8<] 8;`8;`]W?`d8<] (8C`8C`]WG`d8<]  8K`8K`]WO`d8<] J_8S`8S`]WW`d8<] z8[`8[`] W_`d8<] (8c`8c`] 77g`g`g`g`]?_?_?_8,`8,`]Q'Wl`d8<] Br`Returns the bound address, the address family name and port of the server as reported by the operating system. See [net.Server.address()][] for more information. ! Q'55Q'-t` 66W!W}`d8<] =8`8`]W`d8<] (8`8`]W`d8<]  8`8`]W`d8<] X` 66W! W`d8<] r`8`8`] 77``]s`8`8`]W`d8<] z8`8`] W`d8<] (8`8`] 77```]P` 66W!W`d8<] `8`8`] 77``]Q'`8p`8p`]TW`d8<] B`Stops the server from accepting new connections. This function is asynchronous, the server is finally closed when the server emits a 'close' event. ! T55T-` 66W!W`d8<] ,T8`8`]W`d8<] (8`8`]W`d8<]  8`8`]W`d8<] Xa 66W! W ad8<] `8 a8 a] 77aa]`8a8a]Wad8<] z8a8a] Wad8<] (8"a8"a] 77&a&a&a]P)a 66W!W/ad8<] a83a83a] 777a7a]T)a8`8`] addContextW=ad8<] BCaAdd secure context that will be used if client request's SNI hostname is matching passed hostname (wildcards can be used). credentials can contain key, cert and ca. ! b(b8e8>e] 77BeBeBeBe]PEe 66W!WKed8<] e8Oe8Oe] 77SeSe]TEeEeEVe !  77YeYe]8d8d] 77^e^e]0b8Vb8Vb]Wced8<] z8ge8ge] Wked8<] (8oe8oe] 77sesesese]Pve 66W!W|ed8<] Xb8e8e] 77ee](bveve8-b8-b]WWed8<] BeReturns an array with the names of the supported SSL ciphers. Example: var ciphers = tls.getCiphers(); console.log(ciphers); // ['AES128-SHA', 'AES256-SHA', ...] ! W55W-e 66W!Wed8<] W8e8e]Wed8<] (8e8e]Wed8<]  8e8e]Wed8<] Xe 66W! Wed8<] e8e8e] 77ee]e8e8e]Wed8<] z8e8e] Wed8<] (8e8e] 77eee]Pe 66W!Wed8<] e8e8e] 77ee]We8e8e]^Wed8<] ^8e8e] CryptoStreamWed8<] Hf This is an encrypted stream. ! e, 66W!W fd8<] _fe8 f8 f]Wfd8<] (8f8f]Wfd8<]  8f8f]W#fd8<] X)f 66W! W/fd8<] f83f83f];SW7fd8< \=f ! ;S55;S- 66W!WGfd8<] RS8Kf8Kf]WOfd8<] (8Sf8Sf]WWfd8<]  8[f8[f]W_fd8<] Xef 66W! Wkfd8<] =f8of8of] 77sfsf]>f8cf8cf]Wxfd8<] z8|f8|f] Wfd8<] (8f8f] 77ffff]Pf 66W!Wfd8<] ef8f8f] 77ff];SffEf !  77ff]8;f8;f] 77ff]f8'f8'f]Wfd8<] z8f8f] Wfd8<] (8f8f] 77ffff]Pf 66W!Wfd8<] )f8f8f] 77ff]eff8e8e]Wfd8<] BfCreates a new client connection to the given port and host (old API) or options.port and options.host. (If host is omitted, it defaults to localhost.) options should be an object which specifies: * host: Host the client should connect to * port: Port the client should connect to * socket: Establish secure connection on a given socket rather than creating a new socket. If this option is specified, host and port are ignored. * pfx: A string or Buffer containing the private key, certificate and CA certs of the server in PFX or PKCS12 format. * key: A string or Buffer containing the private key of the client in PEM format. * passphrase: A string of passphrase for the private key or pfx. * cert: A string or Buffer containing the certificate key of the client in PEM format. * ca: An array of strings or Buffers of trusted certificates in PEM format. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections. * rejectUnauthorized: If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Default: true. * NPNProtocols: An array of strings or Buffers containing supported NPN protocols. Buffers should have following format: 0x05hello0x05world, where first byte is next protocol name's length. (Passing array should usually be much simpler: ['hello', 'world'].) * servername: Servername for SNI (Server Name Indication) TLS extension. * secureProtocol: The SSL method to use, e.g. SSLv3_method to force SSL version 3. The possible values depend on your installation of OpenSSL and are defined in the constant [SSL_METHODS][]. The callback parameter will be added as a listener for the ['secureConnect'][] event. tls.connect() returns a [CleartextStream][] object. Here is an example of a client of echo server as described previously: var tls = require('tls'); var fs = require('fs'); var options = { // These are necessary only if using the client certificate authentication key: fs.readFileSync('client-key.pem'), cert: fs.readFileSync('client-cert.pem'), // This is necessary only if the server uses the self-signed certificate ca: [ fs.readFileSync('server-cert.pem') ] }; var cleartextStream = tls.connect(8000, options, function() { console.log('client connected', cleartextStream.authorized ? 'authorized' : 'unauthorized'); process.stdin.pipe(cleartextStream); process.stdin.resume(); }); cleartextStream.setEncoding('utf8'); cleartextStream.on('data', function(data) { console.log(data); }); cleartextStream.on('end', function() { server.close(); }); Or var tls = require('tls'); var fs = require('fs'); var options = { pfx: fs.readFileSync('client.pfx') }; var cleartextStream = tls.connect(8000, options, function() { console.log('client connected', cleartextStream.authorized ? 'authorized' : 'unauthorized'); process.stdin.pipe(cleartextStream); process.stdin.resume(); }); cleartextStream.setEncoding('utf8'); cleartextStream.on('data', function(data) { console.log(data); }); cleartextStream.on('end', function() { server.close(); }); ! 55--5-5-5-5f 66W!Wfd8<] 8f8f]Wfd8<] (8f8f]Wfd8<]  8f8f]Wfd8<] Xg 66W! W gd8<] f8 g8 g] 77gg]f8g8g]Wgd8<] z8g8g] Wgd8<] (8"g8"g] 77&g&g&g]P)g 66W!W/gd8<] g83g83g] 777g7g])gB:gf ! 55--5-5-5-5f 66W!WHgd8<] 8Lg8Lg]WPgd8<] (8Tg8Tg]WXgd8<]  8\g8\g]W`gd8<] Xfg 66W! Wlgd8<] :g8pg8pg] 77tgtg];g8dg8dg]Wygd8<] z8}g8}g] Wgd8<] (8g8g] 77ggg]Pg 66W!Wgd8<] fg8g8g] 77gg]gBgf ! 55--5-5f 66W!Wgd8<] 8g8g]Wgd8<] (8g8g]Wgd8<]  8g8g]Wgd8<] Xg 66W! Wgd8<] g8g8g] 77gg]g8g8g]Wgd8<] z8g8g] Wgd8<] (8g8g] 77ggg]Pg 66W!Wgd8<] g8g8g] 77gg]g8f8f] 77hh]]8]8]] 77hhh]]d!d8<] 38 h8 hd8<] ]8h8h.d8<] _h]8h8hd8<] ]8 h8 h ! !]66h !(]]]^^~^^^r^y^^^^^e.`H`J_P`)`>_E_X`8`@```!bV_u__}_____e_m__Q_``a` a*a0aa``a`r````````~```m`CacapakawaaaaQa[aa>a `______``___`baaaaaaabaaaaff)f$f0ffff fffef8f=fXfef`flfffyfHfPff/bKbXbSbbwe}ede9bCble*bbbccc/c5ccbb$cbcccccd dcccccddddddddddddb`bebbbbbbbbpbzbbdd d=dJdEdQdqdwd^d+d5dfdVeddeee&eFeLe3ee e;ecBcGcbcocjcvccccRcZcceeeeeeeeeeee^^___._4__^^#_^:gYgfgagmgggzgIgQggfgggggggggggffgf g*g0ggffg^.^;^6^B^b^h^O^^&^W^^  .  stringdecoderC-hTo use this module, do require('string_decoder'). StringDecoder decodes a buffer to a string. It is a simple interface to buffer.toString() but provides additional support for utf8. var StringDecoder = require('string_decoder').StringDecoder; var decoder = new StringDecoder('utf8'); var cent = new Buffer([0xC2, 0xA2]); console.log(decoder.write(cent)); var euro = new Buffer([0xE2, 0x82, 0xAC]); console.log(decoder.write(euro)); 66W!W4hd8<+h K:h 66W! StringDecoderWAhd8<+h HGh?Accepts a single argument, encoding which defaults to utf8. ! @h, 66W!WPhd8<+h _Vh@h8Th8Th+hWZhd8<+h (8^h8^h+hWbhd8<+h  8fh8fh+hWjhd8<+h Xph 66W! Wvhd8<+h Gh8zh8zh+hW~hd8<+h Bhm8m 66W!Wmd8<i Im8m8miWmd8<i (8m8miWmd8<i  8m8miWmd8<i Xm 66W! Wmd8<i m8m8mi 77mmim8m8miWmd8<i z8m8mi Wmd8<i (8m8mi 77mmmiPm 66W!Wmd8<i m8m8mi 77mmi.mm83m83mi setBroadcastWmd8<i BnSets or clears the SO_BROADCAST socket option. When this option is set, UDP packets may be sent to a local interface's broadcast address. ! m55m--5;kn 66W!Wnd8<i _nm8n8niWnd8<i (8n8niW"nd8<i  8&n8&niW*nd8<i X0n 66W! W6nd8<i n8:n8:ni 77>n>nin8.n8.niWCnd8<i z8Gn8Gni WKnd8<i (8On8Oni 77SnSnSniPVn 66W!W\nd8<i 0n8`n8`ni 77dndnimVnBgnn ! m55m--5;kn 66W!Wrnd8<i n8vn8vniWznd8<i (8~n8~niWnd8<i  8n8niWnd8<i Xn 66W! Wnd8<i gn8n8ni 77nnihn8n8niWnd8<i z8n8ni Wnd8<i (8n8ni 77nnniPn 66W!Wnd8<i n8n8ni 77nnimn8n8niTWnd8<i BnBClose the underlying socket and stop listening for data on it. ! T55T-n 66W!Wnd8<i ,T8n8niWnd8<i (8n8niWnd8<i  8n8niWnd8<i Xn 66W! Wnd8<i n8o8oi 77ooin8n8niW od8<i z8o8oi Wod8<i (8o8oi 77oooiPo 66W!W$od8<i n8(o8(oi 77,o,oiTo8n8ni W1od8<i i85o85oisetMulticastTTLW:od8<i BAoSets the IP_MULTICAST_TTL socket option. TTL stands for "Time to Live," but in this context it specifies the number of IP hops that a packet is allowed to go through, specifically for multicast traffic. Each router or gateway that forwards a packet decrements the TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. The argument to setMulticastTTL() is a number of hops between 0 and 255. The default on most systems is 1. ! 9o559o--5>mCo 66W!WMod8<i _So9o8Qo8QoiWWod8<i (8[o8[oiW_od8<i  8co8coiWgod8<i Xmo 66W! Wsod8<i Ao8wo8woi 77{o{oiBo8ko8koiWod8<i z8o8oi Wod8<i (8o8oi 77oooiPo 66W!Wod8<i mo8o8oi 77ooi9ooBoCo ! 9o559o--5>mCo 66W!Wod8<i So8o8oiWod8<i (8o8oiWod8<i  8o8oiWod8<i Xo 66W! Wod8<i o8o8oi 77ooio8o8oiWod8<i z8o8oi Wod8<i (8o8oi 77oooiPo 66W!Wod8<i o8o8oi 77ppi9oo8>o8>oi addMembershipWpd8<i BpTells the kernel to join a multicast group with IP_ADD_MEMBERSHIP socket option. If multicastInterface is not specified, the OS will try to add membership to all valid interfaces. ! p55p--5multicastAddress-5multicastInterfacep 66W!Wpd8<i _#pp8!p8!piW'pd8<i (8+p8+piW/pd8<i  83p83piW7pd8<i X=p 66W! WCpd8<i p8Gp8Gpi 77KpKpip8;p8;piWPpd8<i z8Tp8Tpi WXpd8<i (8\p8\pi 77`p`p`piPcp 66W!Wipd8<i =p8mp8mpi 77qpqpipcpBtpp ! p55p--5p-5pp 66W!Wpd8<i #p8p8piWpd8<i (8p8piWpd8<i  8p8piWpd8<i Xp 66W! Wpd8<i tp8p8pi 77ppiup8p8piWpd8<i z8p8pi Wpd8<i (8p8pi 77pppiPp 66W!Wpd8<i p8p8pi 77ppipp8 p8 piZWpd8<i Bpc ! Z55Z-c 66W!Wpd8<i r8p8piWpd8<i (8p8piWpd8<i  8p8piWpd8<i Xq 66W! W qd8<i p8q8qi 77qqip8q8qiWqd8<i z8q8qi W qd8<i (8$q8$qi 77(q(q(qiP+q 66W!W1qd8<i q85q85qi 779q9qiZ+q8p8pidropMembershipW?qd8<i BFqOpposite of addMembership - tells the kernel to leave a multicast group with IP_DROP_MEMBERSHIP socket option. This is automatically called by the kernel when the socket is closed or process terminates, so most apps will never need to call this. If multicastInterface is not specified, the OS will try to drop membership to all valid interfaces. ! >q55>q--5p-5pHq 66W!WSqd8<i _Yq>q8Wq8WqiW]qd8<i (8aq8aqiWeqd8<i  8iq8iqiWmqd8<i Xsq 66W! Wyqd8<i Fq8}q8}qi 77qqiGq8qq8qqiWqd8<i z8q8qi Wqd8<i (8q8qi 77qqqiPq 66W!Wqd8<i sq8q8qi 77qqi>qqBqHq ! >q55>q--5p-5pHq 66W!Wqd8<i Yq8q8qiWqd8<i (8q8qiWqd8<i  8q8qiWqd8<i Xq 66W! Wqd8<i q8q8qi 77qqiq8q8qiWqd8<i z8q8qi Wqd8<i (8q8qi 77qqqiPq 66W!Wrd8<i q8r8ri 77rri>qq8Cq8Cqi 77 r rii8i8iiWrd8<i z8r8ri Wrd8<i (8r8ri 77"r"r"r"riP%r 66W!W+rd8<i i8/r8/ri 773r3ri%r%r8i8ii createSocketW9rd8<i \@rCreates a datagram Socket of the specified types. Valid types are udp4 and udp6. Takes an optional callback which is added as a listener for message events. Call socket.bind if you want to receive datagrams. socket.bind() will bind to the "all interfaces" address on a random port (it does the right thing for both udp4 and udp6 sockets). You can then retrieve the address and port with socket.address().address and socket.address().port. ! 8r558r--5-5Br 66W!WMrd8<i _Sr8r8Qr8QriWWrd8<i (8[r8[riW_rd8<i  8cr8criWgrd8<i Xmr 66W! Wsrd8<i @r8wr8wri 77{r{riAr8kr8kriWrd8<i z8r8ri Wrd8<i (8r8ri 77rrrriPr 66W!Wrd8<i mr8r8ri 77rri8rrr&r\rBr ! 8r558r--5-5Br 66W!Wrd8<i Sr8r8riWrd8<i (8r8riWrd8<i  8r8riWrd8<i Xr 66W! Wrd8<i r8r8ri 77rrir8r8riWrd8<i z8r8ri Wrd8<i (8r8ri 77rrrriPr 66W!Wrd8<i r8r8ri 77ssi8rrr&r8=r8=ri 77ssii8i8ii 77 s s siid!d8<i 38s8sd8<i i8s8s.d8<i _!si8s8sd8<i i8's8's ! !i66s !iiiiiii2o&r,rriiriij%j j,jLjRj9jjjAji\j}jjjjjjjmjujjll,l'l3lSlYl@lllHlkcllllllllqlyllnnnnno%o onnonjjjjjkkkjjkjn#n0n+n7nWn]nDnnnLnmgnnnnnnnnsn{nn6mVmcm^mjmmmwmDmNmm0mmmmmmmmmmmmAo`omohotooooNoXoo;oooooooooooo3kSk`k[kgkkktkAkKk|k-kkkkkkkkkkkkp0p=p8pDpdpjpQpp(pYpptpppppppppppFqfqsqnqzqqqqTq^qq@qqqqqqqrqqqqlllllm"m mllmlppqq q,q2qqpp!qp@r`rmrhrtrrrrNrXrr:rrrrrrrrrrrr  . dnsC4sUse require('dns') to access this module. All methods in the dns module use C-Ares except for dns.lookup which uses getaddrinfo(3) in a thread pool. C-Ares is much faster than getaddrinfo but the system resolver is more constant with how other programs operate. When a user does net.connect(80, 'google.com') or http.get({ host: 'google.com' }) the dns.lookup method is used. Users who need to do a large number of lookups quickly should use the methods that go through C-Ares. Here is an example which resolves 'www.google.com' then reverse resolves the IP addresses which are returned. var dns = require('dns'); dns.resolve4('www.google.com', function (err, addresses) { if (err) throw err; console.log('addresses: ' + JSON.stringify(addresses)); addresses.forEach(function (a) { dns.reverse(a, function (err, domains) { if (err) { throw err; } console.log('reverse for ' + a + ': ' + JSON.stringify(domains)); }); }); }); 66W!W;sd8<2s KAs 66W ! resolveMxWHsd8<2s BNsThe same as dns.resolve(), but only for mail exchange queries (MX records). addresses is an array of MX records, each with a priority and an exchange attribute (e.g. [{'priority': 10, 'exchange': 'mx.example.com'},...]). ! Gs55Gs--5-5Ps 66W!W[sd8<2s _asGs8_s8_s2sWesd8<2s (8is8is2sWmsd8<2s  8qs8qs2sWusd8<2s X{s 66W! Wsd8<2s Ns8s8s2s 77ss2sOs8ys8ys2sWsd8<2s z8s8s2s Wsd8<2s (8s8s2s 77sss2sPs 66W!Wsd8<2s {s8s8s2s 77ss2sGss8Ls8Ls2s resolveCnameWsd8<2s BsThe same as dns.resolve(), but only for canonical name records (CNAME records). addresses is an array of the canonical name records available for domain (e.g., ['bar.example.com']). ! s55s--5-5s 66W!Wsd8<2s _ss8s8s2sWsd8<2s (8s8s2sWsd8<2s  8s8s2sWsd8<2s Xs 66W! Wsd8<2s s8s8s2s 77ss2ss8s8s2sWsd8<2s z8s8s2s Wtd8<2s (8t8t2s 77 t t t2sPt 66W!Wtd8<2s s8t8t2s 77tt2sst8s8s2sW!td8<2s B'tResolves a domain (e.g. 'google.com') into an array of the record types specified by rrtype. Valid rrtypes are 'A' (IPV4 addresses, default), 'AAAA' (IPV6 addresses), 'MX' (mail exchange records), 'TXT' (text records), 'SRV' (SRV records), 'PTR' (used for reverse IP lookups), 'NS' (name server records) and 'CNAME' (canonical name records). The callback has arguments (err, addresses). The type of each item in addresses is determined by the record type, and described in the documentation for the corresponding lookup methods below. On error, err is an Error object, where err.code is one of the error codes listed below. ! 55--5-5rrtype-5)t 66W!W6td8<2s >N8:t8:t2sW>td8<2s (8Bt8Bt2sWFtd8<2s  8Jt8Jt2sWNtd8<2s XTt 66W! WZtd8<2s 't8^t8^t2s 77btbt2s(t8Rt8Rt2sWgtd8<2s z8kt8kt2s Wotd8<2s (8st8st2s 77wtwtwt2sPzt 66W!Wtd8<2s Tt8t8t2s 77tt2szt8%t8%t2s resolveSrvWtd8<2s BtThe same as dns.resolve(), but only for service records (SRV records). addresses is an array of the SRV records available for domain. Properties of SRV records are priority, weight, port, and name (e.g., [{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]). ! t55t--5-5t 66W!Wtd8<2s _tt8t8t2sWtd8<2s (8t8t2sWtd8<2s  8t8t2sWtd8<2s Xt 66W! Wtd8<2s t8t8t2s 77tt2st8t8t2sWtd8<2s z8t8t2s Wtd8<2s (8t8t2s 77ttt2sPt 66W!Wtd8<2s t8t8t2s 77tt2stt8t8t2s resolveNsWtd8<2s BuThe same as dns.resolve(), but only for name server records (NS records). addresses is an array of the name server records available for domain (e.g., ['ns1.example.com', 'ns2.example.com']). ! t55t--5-5u 66W!Wud8<2s _ut8u8u2sWud8<2s (8u8u2sW ud8<2s  8$u8$u2sW(ud8<2s X.u 66W! W4ud8<2s u88u88u2s 77N8{8{zW {d8<z (8{8{zW{d8<z  8{8{zW{d8<z X!{ 66W! W'{d8<z z8+{8+{z 77/{/{zz8{8{zW4{d8<z z88{88{z W<{d8<z (8@{8@{z 77D{D{D{zPG{ 66W!WM{d8<z !{8Q{8Q{z 77U{U{zG{8z8zz 77Z{Z{z8z8zz 77_{_{_{zd!d8<z 38f{8f{d8<z z8l{8l{.d8<z /8r{8r{d8<z z8x{8x{ ! !z66b{ !'zz zz@zMzHzTztzzzaz0z8zizzzzzzzzzzzzzzz{!{{({H{N{5{{ {={z  gC. punycodeC{Punycode.js is bundled with Node.js v0.6.2+. Use require('punycode') to access it. (To use it with other Node.js versions, use npm to install the punycode module first.) 66W!W{d8<{ K{ 66W! toUnicodeW{d8<{ B{Converts a Punycode string representing a domain name to Unicode. Only the Punycoded parts of the domain name will be converted, i.e. it doesn't matter if you call it on a string that has already been converted to Unicode. // decode domain names punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' ! {55{--5{ 66W!W{d8<{ _{{8{8{{W{d8<{ (8{8{{W{d8<{  8{8{{W{d8<{ X{ 66W! W{d8<{ {8{8{{ 77{{{{8{8{{W{d8<{ z8{8{{ W{d8<{ (8{8{{ 77{{{{P{ 66W!W{d8<{ {8{8{{ 77{{{{{8{8{{decodeW|d8<{ B |Converts a Punycode string of ASCII code points to a string of Unicode code points. // decode domain name parts punycode.decode('maana-pta'); // 'mañana' punycode.decode('--dqo34k'); // '☃-⌘' ! |55|--5_  | 66W!W|d8<{ _||8|8|{W!|d8<{ (8%|8%|{W)|d8<{  8-|8-|{W1|d8<{ X7| 66W! W=|d8<{  |8A|8A|{ 77E|E|{ |85|85|{WJ|d8<{ z8N|8N|{ WR|d8<{ (8V|8V|{ 77Z|Z|Z|{P]| 66W!Wc|d8<{ 7|8g|8g|{ 77k|k|{|]|8 |8 |{toASCIIWq|d8<{ Bw|Converts a Unicode string representing a domain name to Punycode. Only the non-ASCII parts of the domain name will be converted, i.e. it doesn't matter if you call it with a domain that's already in ASCII. // encode domain names punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' ! p|55p|--5y| 66W!W|d8<{ _|p|8|8|{W|d8<{ (8|8|{W|d8<{  8|8|{W|d8<{ X| 66W! W|d8<{ w|8|8|{ 77||{x|8|8|{W|d8<{ z8|8|{ W|d8<{ (8|8|{ 77|||{P| 66W!W|d8<{ |8|8|{ 77||{p||8u|8u|{encodeW|d8<{ B|Converts a string of Unicode code points to a Punycode string of ASCII code points. // encode domain name parts punycode.encode('mañana'); // 'maana-pta' punycode.encode('☃-⌘'); // '--dqo34k' ! |55|--5_ | 66W!W|d8<{ _||8|8|{W|d8<{ (8|8|{W}d8<{  8}8}{W }d8<{ X} 66W! W}d8<{ |8}8}{ 77}}{|8 }8 }{W"}d8<{ z8&}8&}{ W*}d8<{ (8.}8.}{ 772}2}2}{P5} 66W!W;}d8<{ }8?}8?}{ 77C}C}{|5}8|8|{ 77H}H}{{8{8{{ 77M}M}M}{{d!d8<{ 38T}8T}d8<{ {8Z}8Z}.d8<{ _b}{8`}8`}d8<{ {8h}8h} ! !{66P} !3{{{ |*|7|2|>|^|d|K||"|S|||}} }}6}<}#}||+}|{{{{{{{{{{{{w|||||||||||r|  . readlineCu}To use this module, do require('readline'). Readline allows reading of a stream (such as process.stdin) on a line-by-line basis. Note that once you've invoked this module, your node program will not terminate until you've closed the interface. Here's how to allow your program to gracefully exit: var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question("What do you think of node.js? ", function(answer) { // TODO: Log the answer in a database console.log("Thank you for your valuable feedback:", answer); rl.close(); }); 66W!W|}d8<s} K} 66W!createInterfaceW}d8<s} \}Creates a readline Interface instance. Accepts an "options" Object that takes the following values: * input - the readable stream to listen to (Required). * output - the writable stream to write readline data to (Required). * completer - an optional function that is used for Tab autocompletion. See below for an example of using this. * terminal - pass true if the input and output streams should be treated like a TTY, and have ANSI/VT100 escape codes written to it. Defaults to checking isTTY on the output stream upon instantiation. The completer function is given a the current line entered by the user, and is supposed to return an Array with 2 entries: * An Array with matching entries for the completion. * The substring that was used for the matching. Which ends up looking something like: [[substr1, substr2, ...], originalsubstring]. Example: function completer(line) { var completions = '.help .error .exit .quit .q'.split(' ') var hits = completions.filter(function(c) { return c.indexOf(line) == 0 }) // show all completions if none found return [hits.length ? hits : completions, line] } Also completer can be run in async mode if it accepts two arguments: function completer(linePartial, callback) { callback(null, [['123'], linePartial]); } createInterface is commonly used with process.stdin and process.stdout in order to accept user input: var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); Once you have a readline instance, you most commonly listen for the "line" event. If terminal is true for this instance then the output stream will get the best compatibility if it defines an output.columns property, and fires a "resize" event on the output if/when the columns ever change (process.stdout does this automatically when it is a TTY). ! }55}--5} 66W!W}d8<s} _}}8}8}s}W}d8<s} (8}8}s}W}d8<s}  8}8}s}W}d8<s} X} 66W! W}d8<s} }8}8}s} 77}}s}}8}8}s}W}d8<s} z8}8}s} W}d8<s} (8}8}s} 77}}}}s}P} 66W!W}d8<s} }8}8}s} 77}}s}}}}P} 66W!W}d8<s} X} 66W!TW~d8<s} B ~Closes the Interface instance, relinquishing control on the input and output streams. The "close" event will also be emitted. ! T55T- ~ 66W!W~d8<s} ,T8~8~s}W~d8<s} (8!~8!~s}W%~d8<s}  8)~8)~s}W-~d8<s} X3~ 66W! W9~d8<s}  ~8=~8=~s} 77A~A~s} ~81~81~s}WF~d8<s} z8J~8J~s} WN~d8<s} (8R~8R~s} 77V~V~V~s}PY~ 66W!W_~d8<s} 3~8c~8c~s} 77g~g~s}TY~8~8~s}/Wl~d8<s} Br~&Resumes the readline input stream. ! /55/-t~ 66W!W}~d8<s} G8~8~s}W~d8<s} (8~8~s}W~d8<s}  8~8~s}W~d8<s} X~ 66W! W~d8<s} r~8~8~s} 77~~s}s~8~8~s}W~d8<s} z8~8~s} W~d8<s} (8~8~s} 77~~~s}P~ 66W!W~d8<s} ~8~8~s} 77~~s}/~8p~8p~s} W~d8<s} H~SThe class that represents a readline interface with an input and output stream. !  Interface, 66W!W~d8<s} _~~8~8~s}W~d8<s} (8~8~s}W~d8<s}  8~8~s}W~d8<s} }88s}Wd8<s} z8 8 s} Wd8<s} (88s} 77s}}}}8~8~s} setPromptWd8<s} B"kSets the prompt, for example when you run node on the command line, you see > , which is node's prompt. ! 55--5prompt-5$ 66W!W0d8<s} _68484s}W:d8<s} (8>8>s}WBd8<s}  8F8Fs}WJd8<s} XP 66W! WVd8<s} "8Z8Zs} 77^^s}#8N8Ns}Wcd8<s} z8g8gs} Wkd8<s} (8o8os} 77ssss}Pv 66W!W|d8<s} P88s} 77s}v8 8 s}޹Wd8<s} BPPauses the readline input stream, allowing it to be resumed later if needed. ! ޹55޹- 66W!Wd8<s} 88s}Wd8<s} (88s}Wd8<s}  88s}Wd8<s} X 66W! Wd8<s} 88s} 77s}88s}Wd8<s} z88s} Wd8<s} (88s} 77s}P 66W!Wd8<s} 88s} 77s}޹88s}#Wd8<s} BWrites data to output stream. key is an object literal to represent a key sequence; available if the terminal is a TTY. This will also resume the input stream if it has been paused. Example: rl.write('Delete me!'); // Simulate ctrl+u to delete the line written previously rl.write(null, {ctrl: true, name: 'u'}); ! #55#--5m-52 66W!Wd8<s} j88s}W d8<s} (88s}Wd8<s}  88s}Wd8<s} X" 66W! W(d8<s} 8,8,s} 7700s}8 8 s}W5d8<s} z8989s} W=d8<s} (8A8As} 77EEEs}PH 66W!WNd8<s} "8R8Rs} 77VVs}#H88s}*W[d8<s} BaReadies readline for input from the user, putting the current setPrompt options on a new line, giving the user a new spot to write. Set preserveCursor to true to prevent the cursor placement being reset to 0. This will also resume the input stream used with createInterface if it has been paused. ! *55*--5preserveCursorc 66W!Wnd8<s} _t*8r8rs}Wxd8<s} (8|8|s}Wd8<s}  88s}Wd8<s} X 66W! Wd8<s} a88s} 77s}b88s}Wd8<s} z88s} Wd8<s} (88s} 77s}P 66W!Wd8<s} 88s} 77€€s}*8_8_s}questionWȀd8<s} B΀Prepends the prompt with query and invokes callback with the user's response. Displays the query to the user, and then invokes callback with the user's response after it has been typed. This will also resume the input stream used with createInterface if it has been paused. Example usage: interface.question('What is your favorite food?', function(answer) { console.log('Oh, so your favorite food is ' + answer); }); ! ǀ55ǀ--5-5Ѐ 66W!Wۀd8<s} _ǀ8߀8߀s}Wd8<s} (88s}Wd8<s}  88s}Wd8<s} X 66W! Wd8<s} ΀88s} 77  s}π88s}Wd8<s} z88s} Wd8<s} (88s} 77s}P! 66W!W'd8<s} 8+8+s} 77//s}ǀ!8̀8̀s} 7744s}~8}8}s} 7799s}~8}8}s}~W>d8<s} ~8B8Bs} 77FFs}t}8}8}s} 77KKKs}t}d!d8<s} 38R8Rd8<s} }8X8X.d8<s} _`t}8^8^d8<s} v}8f8f ! !s}66N !ov}}}}~~}~~}}~~?"CPKWw}d1;laoy\΀"(܀ɀr~~~~~~~~~~~~m~ ~&~3~.~:~Z~`~G~~~O~~")IO6 >}}}}}}}}}}}}  . replCsA Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. The REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out. By executing node without any arguments from the command-line you will be dropped into the REPL. It has simplistic emacs line-editing. mjr:~$ node Type '.help' for options. > a = [ 1, 2, 3]; [ 1, 2, 3 ] > a.forEach(function (v) { ... console.log(v); ... }); 1 2 3 For advanced line-editors, start node with the environmental variable NODE_NO_READLINE=1. This will start the main and debugger REPL in canonical terminal settings which will allow you to use with rlwrap. For example, you could add this to your bashrc file: alias node="env NODE_NO_READLINE=1 rlwrap node" 66W!Wzd8<q K 66W!;Wd8<q BReturns and starts a REPLServer instance. Accepts an "options" Object that takes the following values: * prompt - the prompt and stream for all I/O. Defaults to > . * input - the readable stream to listen to. Defaults to process.stdin. * output - the writable stream to write readline data to. Defaults to process.stdout. * terminal - pass true if the stream should be treated like a TTY, and have ANSI/VT100 escape codes written to it. Defaults to checking isTTY on the output stream upon instantiation. * eval - function that will be used to eval each given line. Defaults to an async wrapper for eval(). See below for an example of a custom eval. * useColors - a boolean which specifies whether or not the writer function should output colors. If a different writer function is set then this does nothing. Defaults to the repl's terminal value. * useGlobal - if set to true, then the repl will use the global object, instead of running scripts in a separate context. Defaults to false. * ignoreUndefined - if set to true, then the repl will not output the return value of command if it's undefined. Defaults to false. * writer - the function to invoke for each command that gets evaluated which returns the formatting (including coloring) to display. Defaults to util.inspect. You can use your own eval function if it has following signature: function eval(cmd, context, filename, callback) { callback(null, result); } Multiple REPLs may be started against the same running instance of node. Each will share the same global object but will have unique I/O. Here is an example that starts a REPL on stdin, a Unix socket, and a TCP socket: var net = require("net"), repl = require("repl"); connections = 0; repl.start({ prompt: "node via stdin> ", input: process.stdin, output: process.stdout }); net.createServer(function (socket) { connections += 1; repl.start({ prompt: "node via Unix socket> ", input: socket, output: socket }).on('exit', function() { socket.end(); }) }).listen("/tmp/node-repl-sock"); net.createServer(function (socket) { connections += 1; repl.start({ prompt: "node via TCP socket> ", input: socket, output: socket }).on('exit', function() { socket.end(); }); }).listen(5001); Running this program from the command line will start a REPL on stdin. Other REPL clients may connect through the Unix socket or TCP socket. telnet is useful for connecting to TCP sockets, and socat can be used to connect to both Unix and TCP sockets. By starting a REPL from a Unix socket-based server instead of stdin, you can connect to a long-running node process without restarting it. For an example of running a "full-featured" (terminal) REPL over a net.Server and net.Socket instance, see: https://gist.github.com/2209310 For an example of running a REPL instance over curl(1), see: https://gist.github.com/2053342 ! ;55;--5 66W!Wd8<q _;88qWd8<q (88qWd8<q  88qWd8<q X 66W! Wd8<q 88q 77ƁƁq88qWˁd8<q z8ρ8ρq WӁd8<q (8ׁ8ׁq 77ہہہqPށ 66W!Wd8<q 88q 77q;ށ88q 77qr8~8~q 77qrd!d8<q 388d8<q 88.d8<q _ r8 8 d8<q t88 ! !q66 !t{߁́ԁ  . vmCYou can access this module with: var vm = require('vm'); JavaScript code can be compiled and run immediately or compiled, saved, and run later. 66W!W%d8< K+ 66W!runInThisContextW2d8< B8vm.runInThisContext() compiles code, runs it and returns the result. Running code does not have access to local scope. filename is optional, it's used only in stack traces. Example of using vm.runInThisContext and eval to run the same code: var localVar = 123, usingscript, evaled, vm = require('vm'); usingscript = vm.runInThisContext('localVar = 1;', 'myfile.vm'); console.log('localVar: ' + localVar + ', usingscript: ' + usingscript); evaled = eval('localVar = 1;'); console.log('localVar: ' + localVar + ', evaled: ' + evaled); // localVar: 123, usingscript: 1 // localVar: 1, evaled: 1 vm.runInThisContext does not have access to the local scope, so localVar is unchanged. eval does have access to the local scope, so localVar is changed. In case of syntax error in code, vm.runInThisContext emits the syntax error to stderr and throws an exception. ! 1551--5d-5H%: 66W!WEd8< _K18I8IWOd8< (8S8SWWd8<  8[8[W_d8< Xe 66W! Wkd8< 88o8o 77ss98c8cWxd8< z8|8| Wd8< (88 77P 66W!Wd8< e88 7718686 createScriptWd8< \createScript compiles code but does not run it. Instead, it returns a vm.Script object representing this compiled code. This script can be run later many times using methods below. The returned script is not bound to any global object. It is bound before each run, just for that run. filename is optional, it's only used in stack traces. In case of syntax error in code, createScript prints the syntax error to stderr and throws an exception. ! 55--5d-5H% 66W!Wd8< _88Wd8< (88WĂd8<  8Ȃ8ȂŴd8< X҂ 66W! W؂d8< 8܂8܂ 778Ђ8ЂWd8< z88 Wd8< (88 77P 66W!Wd8< ҂88 77P  66W!Wd8< X 66W! Wd8< H!>A class for running scripts. Returned by vm.createScript. ! Script, 66W!W+d8< _1%8/8/W5d8< (8989W=d8<  8A8AWEd8< 8I8IWMd8< z8Q8Q WUd8< (8Y8Y 77]]]]   88runInNewContextWcd8< BiSimilar to vm.runInNewContext a method of a precompiled Script object. script.runInNewContext runs the code of script with sandbox as the global object and returns the result. Running code does not have access to local scope. sandbox is optional. Example: compile code that increments a global variable and sets one, then execute this code multiple times. These globals are contained in the sandbox. var util = require('util'), vm = require('vm'), sandbox = { animal: 'cat', count: 2 }; var script = vm.createScript('count += 1; name = "kitty"', 'myfile.vm'); for (var i = 0; i < 10 ; i += 1) { script.runInNewContext(sandbox); } console.log(util.inspect(sandbox)); // { animal: 'cat', count: 12, name: 'kitty' } Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, script.runInNewContext is quite useful, but safely running untrusted code requires a separate process. ! b55b--5sandboxk 66W!Wvd8< _|b8z8zWd8< (88Wd8<  88Wd8< X 66W! Wd8< i88 77j88Wd8< z88 Wd8< (88 77P 66W!Wƒd8< 8ƃ8ƃ 77ʃʃb8g8g1Wσd8< BՃSimilar to vm.runInThisContext but a method of a precompiled Script object. script.runInThisContext runs the code of script and returns the result. Running code does not have access to local scope, but does have access to the global object (v8: in actual context). Example of using script.runInThisContext to compile code once and run it multiple times: var vm = require('vm'); globalVar = 0; var script = vm.createScript('globalVar += 1', 'myfile.vm'); for (var i = 0; i < 1000 ; i += 1) { script.runInThisContext(); } console.log(globalVar); // 1000 ! 1551-׃ 66W!Wd8< K88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< Ճ88 77  փ88Wd8< z88 Wd8< (88 77!!!P$ 66W!W*d8< 8.8. 77221$8Ӄ8Ӄ 7777"88 77<<%88 createContextWBd8< BHvm.createContext creates a new context which is suitable for use as the 2nd argument of a subsequent call to vm.runInContext. A (V8) context comprises a global object together with a set of build-in objects and functions. The optional argument initSandbox will be shallow-copied to seed the initial contents of the global object used by the context. ! A55A--5 initSandboxJ 66W!WUd8< _[A8Y8YW_d8< (8c8cWgd8<  8k8kWod8< Xu 66W! W{d8< H88 77I8s8sWd8< z88 Wd8< (88 77P 66W!Wd8< u88 77A8F8F%Wd8< !88bWd8< Bvm.runInNewContext compiles code, then runs it in sandbox and returns the result. Running code does not have access to local scope. The object sandbox will be used as the global object for code. sandbox and filename are optional, filename is only used in stack traces. Example: compile and execute code that increments a global variable and sets a new one. These globals are contained in the sandbox. var util = require('util'), vm = require('vm'), sandbox = { animal: 'cat', count: 2 }; vm.runInNewContext('count += 1; name = "kitty"', sandbox, 'myfile.vm'); console.log(util.inspect(sandbox)); // { animal: 'cat', count: 3, name: 'kitty' } Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, vm.runInNewContext is quite useful, but safely running untrusted code requires a separate process. In case of syntax error in code, vm.runInNewContext emits the syntax error to stderr and throws an exception. ! b55b--5d-5q-5H% 66W!Wʄd8< |8΄8΄W҄d8< (8ք8քWڄd8<  8ބ8ބWd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77   P 66W!Wd8< 88 77b88 runInContextW"d8< B( vm.runInContext compiles code, then runs it in context and returns the result. A (V8) context comprises a global object, together with a set of built-in objects and functions. Running code does not have access to local scope and the global object held within context will be used as the global object for code. filename is optional, it's used only in stack traces. Example: compile and execute code in a existing context. var util = require('util'), vm = require('vm'), initSandbox = { animal: 'cat', count: 2 }, context = vm.createContext(initSandbox); vm.runInContext('count += 1; name = "CATT"', context, 'myfile.vm'); console.log(util.inspect(context)); // { animal: 'cat', count: 3, name: 'CATT' } Note that createContext will perform a shallow clone of the supplied sandbox object in order to initialize the global object of the freshly constructed context. Note that running untrusted code is a tricky business requiring great care. To prevent accidental global variable leakage, vm.runInContext is quite useful, but safely running untrusted code requires a separate process. In case of syntax error in code, vm.runInContext emits the syntax error to stderr and throws an exception. ! !55!--5d-5context-5H%* 66W!W7d8< _=!8;8;WAd8< (8E8EWId8<  8M8MWQd8< XW 66W! W]d8< (8a8a 77ee)8U8UWjd8< z8n8n Wrd8< (8v8v 77zzzP} 66W!Wd8< W88 77!}8&8& 778)8) 77d!d8< 388d8< +88.d8< _88d8< 88 ! !66 !c+&!>F N,6VՃ%+ЃiÃwd8Xe`lyFP3ۄ˄ӄ(JWR^~k8Bs#Hhup|V`Cł҂͂ق  .  child_processCNode provides a tri-directional popen(3) facility through the child_process module. It is possible to stream data through a child's stdin, stdout, and stderr in a fully non-blocking way. (Note that some programs use line-buffered I/O internally. That doesn't affect node.js but it means data you send to the child process is not immediately consumed.) To create a child process use require('child_process').spawn() or require('child_process').fork(). The semantics of each are slightly different, and explained below. 66W!Wąd8< Kʅ 66W!forkWхd8< B؅This is a special case of the spawn() functionality for spawning Node processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. See child.send(message, [sendHandle]) for details. By default the spawned Node process will have the stdout, stderr associated with the parent's. To change this behavior set the silent property in the options object to true. The child process does not automatically exit once it's done, you need to call process.exit() explicitly. This limitation may be lifted in the future. These child Nodes are still whole new instances of V8. Assume at least 30ms startup and 10mb memory for each new Node. That is, you cannot create many thousands of them. The execPath property in the options object allows for a process to be created for the child rather than the current node executable. This should be done with care and by default will talk over the fd represented an environmental variable NODE_CHANNEL_FD on the child process. The input and output on this fd is expected to be line delimited JSON objects. ! Ѕ55Ѕ--5 modulePath-5b-5څ 66W!Wd8< _Ѕ88Wd8< (88Wd8<  88Wd8< X 66W! W d8< ؅88 77م88Wd8< z88 W"d8< (8&8& 77***P- 66W!W3d8< 8787 77;;Ѕ-B>څ ! Ѕ55Ѕ--5-5b-5څ 66W!WKd8< 8O8OWSd8< (8W8WW[d8<  8_8_Wcd8< Xi 66W! Wod8< >8s8s 77ww?8g8gW|d8< z88 Wd8< (88 77P 66W!Wd8< i88 77Ѕ8Յ8Յ Wd8< BRuns a command in a shell and buffers the output. var exec = require('child_process').exec, child; child = exec('cat *.js bad_file | wc -l', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); } }); The callback gets the arguments (error, stdout, stderr). On success, error will be null. On error, error will be an instance of Error and err.code will be the exit code of the child process, and err.signal will be set to the signal that terminated the process. There is a second optional argument to specify several options. The default options are { encoding: 'utf8', timeout: 0, maxBuffer: 200*1024, killSignal: 'SIGTERM', cwd: null, env: null } If timeout is greater than 0, then it will kill the child process if it runs longer than timeout milliseconds. The child process is killed with killSignal (default: 'SIGTERM'). maxBuffer specifies the largest amount of data allowed on stdout or stderr - if this value is exceeded then the child process is killed. !  55 --5command-5-5 66W!Wd8< _ 88W†d8< (8Ɔ8ƆWʆd8<  8Ά8ΆW҆d8< X؆ 66W! Wކd8< 88 778ֆ8ֆWd8< z88 Wd8< (88 77P 66W!Wd8< ؆88 77   B !  55 --5-5-5 66W!Wd8< 8 8 W$d8< (8(8(W,d8<  8080W4d8< X: 66W! W@d8< 8D8D 77HH8888WMd8< z8Q8Q WUd8< (8Y8Y 77]]]P` 66W!Wfd8< :8j8j 77nn `88execFileWtd8< B{This is similar to child_process.exec() except it does not execute a subshell but rather the specified file directly. This makes it slightly leaner than child_process.exec. It has the same options. ! s55s--5#-5b-5-5} 66W!Wd8< _s88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< {88 77|88Wd8< z88 WŇd8< (8ɇ8ɇ 77͇͇͇PЇ 66W!Wևd8< 8ڇ8ڇ 77އއsЇB} ! s55s--5#-5b-5-5} 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X  66W! Wd8< 88 778 8 W d8< z8$8$ W(d8< (8,8, 77000P3 66W!W9d8<  8=8= 77AAs38x8xspawnWGd8< BN/Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array. The third argument is used to specify additional options, which defaults to: { cwd: undefined, env: process.env } cwd allows you to specify the working directory from which the process is spawned. Use env to specify environment variables that will be visible to the new process. Example of running ls -lh /usr, capturing stdout, stderr, and the exit code: var spawn = require('child_process').spawn, ls = spawn('ls', ['-lh', '/usr']); ls.stdout.on('data', function (data) { console.log('stdout: ' + data); }); ls.stderr.on('data', function (data) { console.log('stderr: ' + data); }); ls.on('close', function (code) { console.log('child process exited with code ' + code); }); Example: A very elaborate way to run 'ps ax | grep ssh' var spawn = require('child_process').spawn, ps = spawn('ps', ['ax']), grep = spawn('grep', ['ssh']); ps.stdout.on('data', function (data) { grep.stdin.write(data); }); ps.stderr.on('data', function (data) { console.log('ps stderr: ' + data); }); ps.on('close', function (code) { if (code !== 0) { console.log('ps process exited with code ' + code); } grep.stdin.end(); }); grep.stdout.on('data', function (data) { console.log('' + data); }); grep.stderr.on('data', function (data) { console.log('grep stderr: ' + data); }); grep.on('close', function (code) { if (code !== 0) { console.log('grep process exited with code ' + code); } }); Example of checking for failed exec: var spawn = require('child_process').spawn, child = spawn('bad_command'); child.stderr.setEncoding('utf8'); child.stderr.on('data', function (data) { if (/^execvp\(\)/.test(data)) { console.log('Failed to start child process.'); } }); Note that if spawn receives an empty options object, it will result in spawning the process with an empty environment rather than using process.env. This due to backwards compatibility issues with a deprecated API. The 'stdio' option to child_process.spawn() is an array where each index corresponds to a fd in the child. The value is one of the following: * 'pipe' - Create a pipe between the child process and the parent process. The parent end of the pipe is exposed to the parent as a property on the child_process object as ChildProcess.stdio[fd]. Pipes created for fds 0 - 2 are also available as ChildProcess.stdin, ChildProcess.stdout and ChildProcess.stderr, respectively. * 'ipc' - Create an IPC channel for passing messages/file descriptors between parent and child. A ChildProcess may have at most one IPC stdio file descriptor. Setting this option enables the ChildProcess.send() method. If the child writes JSON messages to this file descriptor, then this will trigger ChildProcess.on('message'). If the child is a Node.js program, then the presence of an IPC channel will enable process.send() and process.on('message'). * 'ignore' - Do not set this file descriptor in the child. Note that Node will always open fd 0 - 2 for the processes it spawns. When any of these is ignored node will open /dev/null and attach it to the child's fd. * Stream object - Share a readable or writable stream that refers to a tty, file, socket, or a pipe with the child process. The stream's underlying file descriptor is duplicated in the child process to the fd that corresponds to the index in the stdio array. * Positive integer - The integer value is interpreted as a file descriptor that is is currently open in the parent process. It is shared with the child process, similar to how Stream objects can be shared. * null, undefined - Use default value. For stdio fds 0, 1 and 2 (in other words, stdin, stdout, and stderr) a pipe is created. For fd 3 and up, the default is 'ignore'. As a shorthand, the stdio argument may also be one of the following strings, rather than an array: * ignore - ['ignore', 'ignore', 'ignore'] * pipe - ['pipe', 'pipe', 'pipe'] * inherit - [process.stdin, process.stdout, process.stderr] or [0,1,2] Example: var spawn = require('child_process').spawn; // Child will use parent's stdios spawn('prg', [], { stdio: 'inherit' }); // Spawn child sharing only stderr spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] }); // Open an extra fd=4, to interact with programs present a // startd-style interface. spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] }); If the detached option is set, the child process will be made the leader of a new process group. This makes it possible for the child to continue running after the parent exits. By default, the parent will wait for the detached child to exit. To prevent the parent from waiting for a given child, use the child.unref() method, and the parent's event loop will not include the child in its reference count. Example of detaching a long-running process and redirecting its output to a file: var fs = require('fs'), spawn = require('child_process').spawn, out = fs.openSync('./out.log', 'a'), err = fs.openSync('./out.log', 'a'); var child = spawn('prg', [], { detached: true, stdio: [ 'ignore', out, err ] }); child.unref(); When using the detached option to start a long-running process, the process will not stay running in the background unless it is provided with a stdio configuration that is not connected to the parent. If the parent's stdio is inherited, the child will remain attached to the controlling terminal. There is a deprecated option called customFds which allows one to specify specific file descriptors for the stdio of the child process. This API was not portable to all platforms and therefore removed. With customFds it was possible to hook up the new process' [stdin, stdout, stderr] to existing streams; -1 meant that a new stream should be created. Use at your own risk. See also: child_process.exec() and child_process.fork() ! F55F--5-5b-5P 66W!W\d8< _bF8`8`Wfd8< (8j8jWnd8<  8r8rWvd8< X| 66W! Wd8< N88 77O8z8zWd8< z88 Wd8< (88 77P 66W!Wd8< |88 77FBP ! F55F--5-5b-5P 66W!Wd8< b8Ĉ8ĈWȈd8< (8̈8̈WЈd8<  8Ԉ8ԈW؈d8< Xވ 66W! Wd8< 88 778܈8܈Wd8< z88 Wd8< (88 77P 66W!W d8< ވ88 77F8K8K ChildProcessWd8< HChildProcess is an [EventEmitter][]. Child processes always have three streams associated with them. child.stdin, child.stdout, and child.stderr. These may be shared with the stdio streams of the parent process, or they may be separate stream objects which can be piped to and from. The ChildProcess class is not intended to be used directly. Use the spawn() or fork() methods to create a Child Process instance. ! , 66W!W'd8< _-8+8+W1d8< (8585W9d8<  8=8=WAd8< XG 66W!stderrWNd8< \T ! M55M- 66W!W^d8< _dM8b8bWhd8< (8l8lWpd8<  8t8tWxd8< X~ 66W! Wd8< T88 77U8|8|Wd8< z88 Wd8< (88 77P 66W!Wd8< ~88 77ME !  778R8R disconnectWd8< BĉTo close the IPC connection between parent and child use the child.disconnect() method. This allows the child to exit gracefully since there is no IPC channel keeping it alive. When calling this method the disconnect event will be emitted in both parent and child, and the connected flag will be set to false. Please note that you can also call process.disconnect() in the child process. ! 55-Ɖ 66W!Wωd8< _Չ8Ӊ8ӉWىd8< (8݉8݉Wd8<  88Wd8< X 66W! Wd8< ĉ88 77ʼn88Wd8< z88 W d8< (88 77P 66W!Wd8< 88 77##8‰8‰stdinW)d8< \/ ! (55(- 66W!W9d8< _?(8=8=WCd8< (8G8GWKd8<  8O8OWSd8< XY 66W! W_d8< /8c8c 77gg08W8WWld8< z8p8p Wtd8< (8x8x 77||||P 66W!Wd8< Y88 77(E !  778-8-killWd8< BSend a signal to the child process. If no argument is given, the process will be sent 'SIGTERM'. See signal(7) for a list of available signals. var spawn = require('child_process').spawn, grep = spawn('grep', ['ssh']); grep.on('close', function (code, signal) { console.log('child process terminated due to receipt of signal '+signal); }); // send SIGHUP to process grep.kill('SIGHUP'); May emit an 'error' event when the signal cannot be delivered. Sending a signal to a child process that has already exited is not an error but may have unforeseen consequences: if the PID (the process ID) has been reassigned to another process, the signal will be delivered to that process instead. What happens next is anyone's guess. Note that while the function is called kill, the signal delivered to the child process may not actually kill it. kill really just sends a signal to a process. See kill(2) ! 55--5signal 66W!Wd8< _88Wd8< (88Wd8<  8Ê8ÊWNJd8< X͊ 66W! Wӊd8< 8׊8׊ 77ۊۊ8ˊ8ˊWd8< z88 Wd8< (88 77P 66W!Wd8< ͊88 77B ! 55--5 66W!Wd8< 88Wd8< (88Wd8<  8#8#W'd8< X- 66W! W3d8< 8787 77;;8+8+W@d8< z8D8D WHd8< (8L8L 77PPPPS 66W!WYd8< -8]8] 77aaS88pidWgd8< \m ! f55f- 66W!Wwd8< _}f8{8{Wd8< (88Wd8<  88Wd8< X 66W! Wd8< m88 77n88Wd8< z88 Wd8< (88 77P 66W!WËd8< 8Nj8Nj 77ˋˋfE΋ !  77ыы8k8k W֋d8< 8ڋ8ڋstdoutWߋd8< \ ! ދ55ދ- 66W!Wd8< _ދ88Wd8< (88Wd8<  88W d8< X 66W! Wd8< 88 778 8 W"d8< z8&8& W*d8< (8.8. 772222P5 66W!W;d8< 8?8? 77CCދ55EF !  77II88LWNd8< BUWhen using child_process.fork() you can write to the child using child.send(message, [sendHandle]) and messages are received by a 'message' event on the child. For example: var cp = require('child_process'); var n = cp.fork(__dirname + '/sub.js'); n.on('message', function(m) { console.log('PARENT got message:', m); }); n.send({ hello: 'world' }); And then the child script, 'sub.js' might look like this: process.on('message', function(m) { console.log('CHILD got message:', m); }); process.send({ foo: 'bar' }); In the child the process object will have a send() method, and process will emit objects each time it receives a message on its channel. There is a special case when sending a {cmd: 'NODE_foo'} message. All messages containing a NODE_ prefix in its cmd property will not be emitted in the message event, since they are internal messages used by node core. Messages containing the prefix are emitted in the internalMessage event, you should by all means avoid using this feature, it is subject to change without notice. The sendHandle option to child.send() is for sending a TCP server or socket object to another process. The child will receive the object as its second argument to the message event. Emits an 'error' event if the message cannot be sent, for example because the child process has already exited. Example: sending server object Here is an example of sending a server: var child = require('child_process').fork('child.js'); // Open up the server object and send the handle. var server = require('net').createServer(); server.on('connection', function (socket) { socket.end('handled by parent'); }); server.listen(1337, function() { child.send('server', server); }); And the child would the receive the server object as: process.on('message', function(m, server) { if (m === 'server') { server.on('connection', function (socket) { socket.end('handled by child'); }); } }); Note that the server is now shared between the parent and child, this means that some connections will be handled by the parent and some by the child. For dgram servers the workflow is exactly the same. Here you listen on a message event instead of connection and use server.bind instead of server.listen. (Currently only supported on UNIX platforms.) Example: sending socket object Here is an example of sending a socket. It will spawn two children and handle connections with the remote address 74.125.127.100 as VIP by sending the socket to a "special" child process. Other sockets will go to a "normal" process. var normal = require('child_process').fork('child.js', ['normal']); var special = require('child_process').fork('child.js', ['special']); // Open up the server and send sockets to child var server = require('net').createServer(); server.on('connection', function (socket) { // if this is a VIP if (socket.remoteAddress === '74.125.127.100') { special.send('socket', socket); return; } // just the usual dudes normal.send('socket', socket); }); server.listen(1337); The child.js could look like this: process.on('message', function(m, socket) { if (m === 'socket') { socket.end('You were handled as a ' + process.argv[2] + ' person'); } }); Note that once a single socket has been sent to a child the parent can no longer keep track of when the socket is destroyed. To indicate this condition the .connections property becomes null. It is also recommended not to use .maxConnections in this condition. ! L55L--5z -5 sendHandleW 66W!Wcd8<  j8g8gWkd8< (8o8oWsd8<  8w8wW{d8< X 66W! Wd8< U88 77V88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77LBW ! L55L--5z -5^W 66W!WČd8<  j8Ȍ8ȌW̌d8< (8Ќ8ЌWԌd8<  8،8،W܌d8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77L8R8R 778E8EW d8< z8$8$ W(d8< (8,8, 770000P3 66W!W9d8< G8=8= 77AA3388 77FF8ȅ8ȅ 77KKKd!d8< 38R8Rd8< ʅ8X8X.d8< _`8^8^d8< 8f8f ! !66N !ʅŅ:GB׋4:!(2)͊ȊԊ -(4TZAIUt|dlOՌ݌ Ō͌ĉЉډ */LYT`m:DuF 6<#+OTq~y_i΋hmċxNo|w]gHшވو Ɉˆ؆ӆ߆Æ-:5AagN%V{чׇƇu 4:!)؅.4#҅>\idp}LT  . assertCsoThis module is used for writing unit tests for your applications, you can access it with require('assert'). 66W!Wzd8<q K 66W !notEqualWd8<q BWTests shallow, coercive non-equality with the not equal comparison operator ( != ). ! 55--5actual-5expected-5z  66W!Wd8<q _88qWd8<q (88qWd8<q  88qWd8<q X 66W! WÍd8<q 8Ǎ8Ǎq 77ˍˍq88qWЍd8<q z8ԍ8ԍq W؍d8<q (8܍8܍q 77qP 66W!Wd8<q 88q 77q88qokWd8<q BUTests if value is truthy, it is equivalent to assert.equal(true, !!value, message); ! 55--5-5z -5r-5z  66W!W d8<q _88qWd8<q (88qWd8<q  8"8"qW&d8<q X, 66W! W2d8<q 8686q 77::q8*8*qW?d8<q z8C8Cq WGd8<q (8K8Kq 77OOOqPR 66W!WXd8<q ,8\8\q 77``qR88qifErrorWfd8<q BlTests if value is not a false value, throws if it is a true value. Useful when testing the first argument, error in callbacks. ! e55e--5n 66W!Wxd8<q _~e8|8|qWd8<q (88qWd8<q  88qWd8<q X 66W! Wd8<q l88q 77qm88qWd8<q z88q Wd8<q (88q 77qP 66W!WĎd8<q 8Ȏ8Ȏq 77̎̎qe8j8jq notDeepEqualWҎd8<q B؎"Tests for any deep inequality. ! ю55ю--5-5-5z ڎ 66W!Wd8<q _ю88qWd8<q (88qWd8<q  88qWd8<q X 66W! W d8<q ؎88q 77qَ88qWd8<q z88q W!d8<q (8%8%q 77)))qP, 66W!W2d8<q 8686q 77::qю,8֎8֎qfailW@d8<q BFlThrows an exception that displays the values for actual and expected separated by the provided operator. ! ?55?--5-5-5z -5operatorH 66W!WVd8<q _\?8Z8ZqW`d8<q (8d8dqWhd8<q  8l8lqWpd8<q Xv 66W! W|d8<q F88q 77qG8t8tqWd8<q z88q Wd8<q (88q 77qP 66W!Wd8<q v88q 77q?8D8DqthrowsWd8<q BExpects block to throw an error. error can be constructor, regexp or validation function. Validate instanceof using constructor: assert.throws( function() { throw new Error("Wrong value"); }, Error ); Validate error message using RegExp: assert.throws( function() { throw new Error("Wrong value"); }, /value/ ); Custom error validation: assert.throws( function() { throw new Error("Wrong value"); }, function(err) { if ( (err instanceof Error) && /value/.test(err) ) { return true; } }, "unexpected error" ); ! 55--5block-5-5z  66W!Wŏd8<q _ˏ8ɏ8ɏqWϏd8<q (8ӏ8ӏqW׏d8<q  8ۏ8ۏqWߏd8<q X 66W! Wd8<q 88q 77q88qWd8<q z88q Wd8<q (88q 77qP  66W!Wd8<q 88q 77q 88qnotStrictEqualWd8<q B%UTests strict non-equality, as determined by the strict not equal operator ( !== ) ! 55--5-5-5z ' 66W!W3d8<q _98787qW=d8<q (8A8AqWEd8<q  8I8IqWMd8<q XS 66W! WYd8<q %8]8]q 77aaq&8Q8QqWfd8<q z8j8jq Wnd8<q (8r8rq 77vvvqPy 66W!Wd8<q S88q 77qy8#8#q strictEqualWd8<q BPTests strict equality, as determined by the strict equality operator ( === ) ! 55--5-5-5z  66W!Wd8<q _88qWd8<q (88qWd8<q  88qWd8<q X 66W! Wǐd8<q 8ː8ːq 77ϐϐq88qWԐd8<q z8ؐ8ؐq Wܐd8<q (88q 77qP 66W!Wd8<q 88q 77q88q doesNotThrowWd8<q BGExpects block not to throw an error, see assert.throws for details. ! 55--5-5z  66W!Wd8<q _88qWd8<q (88qW d8<q  8$8$qW(d8<q X. 66W! W4d8<q 8888q 77<<q8,8,qWAd8<q z8E8Eq WId8<q (8M8Mq 77QQQqPT 66W!WZd8<q .8^8^q 77bbqT88qequalWhd8<q BnOTests shallow, coercive equality with the equal comparison operator ( == ). ! g55g--5-5-5z p 66W!W|d8<q _g88qWd8<q (88qWd8<q  88qWd8<q X 66W! Wd8<q n88q 77qo88qWd8<q z88q Wd8<q (88q 77qP‘ 66W!Wȑd8<q 8̑8̑q 77ББqg‘8l8lq deepEqualW֑d8<q BܑTests for deep equality. ! Ց55Ց--5-5-5z ޑ 66W!Wd8<q _Ց88qWd8<q (88qWd8<q  88qWd8<q X  66W! Wd8<q ܑ88q 77qݑ88qWd8<q z8!8!q W%d8<q (8)8)q 77---qP0 66W!W6d8<q  8:8:q 77>>qՑ08ڑ8ڑq 77CCqr8~8~q 77HHHqrd!d8<q 38O8Od8<q 8U8U.d8<q _]r8[8[d8<q t8c8c ! !q66K !t{Fivq}WaA,'3SY@ HnÑɑ}ičэٍܑ 17&ב؎ -3"ӎȐՐݐ%FSNZzg4>o ؏ ƏЏ!.)5U[BJlŎyg  . ttyCpThe tty module houses the tty.ReadStream and tty.WriteStream classes. In most cases, you will not need to use this module directly. When node detects that it is being run inside a TTY context, then process.stdin will be a tty.ReadStream instance and process.stdout will be a tty.WriteStream instance. The preferred way to check if node is being run in a TTY context is to check process.stdout.isTTY: $ node -p -e "Boolean(process.stdout.isTTY)" true $ node -p -e "Boolean(process.stdout.isTTY)" | cat false 66W!Wwd8<n K} 66W! setRawModeWd8<n B[Deprecated. Use tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode()) instead. ! 55--5Y 66W!Wd8<n _88nWd8<n (88nWd8<n  88nWd8<n X 66W! Wd8<n 88n 77ĒĒn88nWɒd8<n z8͒8͒n Wђd8<n (8Ւ8Ւn 77ْْْnPܒ 66W!Wd8<n 88n 77nܒ88nSWd8<n HA net.Socket subclass that represents the writable portion of a tty. In normal circumstances, process.stdout will be the only tty.WriteStream instance ever created (and only when isatty(1) is true). ! S, 66W!Wd8<n S88nWd8<n (8 8 nWd8<n  88nWd8<n X 66W! W"d8<n 8&8&ncolumnsW+d8< \1 ! *55*- 66W!W;d8<n _A*8?8?nWEd8<n (8I8InWMd8<n  8Q8QnWUd8<n X[ 66W! Wad8<n 18e8en 77iin28Y8YnWnd8<n z8r8rn Wvd8<n (8z8zn 77~~~~nP 66W!Wd8<n [88n 77n*E !  77n8/8/nrowsWd8< \ ! 55- 66W!Wd8<n _88nWd8<n (88nWd8<n  88nWœd8<n X˓ 66W! Wѓd8<n 8Փ8Փn 77ٓٓn8ɓ8ɓnWޓd8<n z88n Wd8<n (88n 77nP 66W!Wd8<n ˓88n 77nE !  77n88n 77  n88nWd8<n z88n Wd8<n (88n 77nP" 66W!W(d8<n 8,8,n 7700nS""88nRW5d8<n H;A net.Socket subclass that represents the readable portion of a tty. In normal circumstances, process.stdin will be the only tty.ReadStream instance in any node program (only when isatty(0) is true). ! R, 66W!WDd8<n R8H8HnWLd8<n (8P8PnWTd8<n  8X8XnW\d8<n Xb 66W! Whd8<n ;8l8lnisRawWqd8< \w ! p55p- 66W!Wd8<n _p88nWd8<n (88nWd8<n  88nWd8<n X 66W! Wd8<n w88n 77nx88nWd8<n z88n Wd8<n (88n 77ĔĔĔĔnPǔ 66W!W͔d8<n 8є8єn 77ՔՔnpǔǔEؔ !  77۔۔n8u8unWd8<n Bmode should be true or false. This sets the properties of the tty.ReadStream to act either as a raw device or default. isRaw will be set to the resulting mode. ! 55--5Y 66W!Wd8<n 88nWd8<n (88nWd8<n  88nW d8<n X 66W! Wd8<n 88n 77n88nW#d8<n z8'8'n W+d8<n (8/8/n 77333nP6 66W!W<d8<n 8@8@n 77DDn688n 77IIn<8`8`nWNd8<n z8R8Rn WVd8<n (8Z8Zn 77^^^^nPa 66W!Wgd8<n b8k8kn 77oonRaa8989nisattyWud8<n B{PReturns true or false depending on if the fd is associated with a terminal. ! t55t--5U} 66W!Wd8<n _t88nWd8<n (88nWd8<n  88nWd8<n X 66W! Wd8<n {88n 77n|88nWd8<n z88n W•d8<n (8ƕ8ƕn 77ʕʕʕnP͕ 66W!Wӕd8<n 8ו8וn 77ەەnt͕8y8yn 77no8{8{n 77nod!d8<n 388d8<n }88.d8<n _o88d8<n q88 ! !n66 !fq}x;Ub]ibhOEMW6 7=$,ؔrwȔΔ##),1N[Vbo<Fw˓Ɠғߓ{ΕԕÕvݒʒҒ  . zlibC You can access this module with: var zlib = require('zlib'); This provides bindings to Gzip/Gunzip, Deflate/Inflate, and DeflateRaw/InflateRaw classes. Each class takes the same options, and is a readable/writable Stream. Examples Compressing or decompressing a file can be done by piping an fs.ReadStream into a zlib stream, then into an fs.WriteStream. var gzip = zlib.createGzip(); var fs = require('fs'); var inp = fs.createReadStream('input.txt'); var out = fs.createWriteStream('input.txt.gz'); inp.pipe(gzip).pipe(out); Compressing or decompressing data in one step can be done by using the convenience methods. var input = '.................................'; zlib.deflate(input, function(err, buffer) { if (!err) { console.log(buffer.toString('base64')); } }); var buffer = new Buffer('eJzT0yMAAGTvBe8=', 'base64'); zlib.unzip(buffer, function(err, buffer) { if (!err) { console.log(buffer.toString()); } }); To use this module in an HTTP client or server, use the accept-encoding on requests, and the content-encoding header on responses. Note: these examples are drastically simplified to show the basic concept. Zlib encoding can be expensive, and the results ought to be cached. See Memory Usage Tuning below for more information on the speed/memory/compression tradeoffs involved in zlib usage. // client request example var zlib = require('zlib'); var http = require('http'); var fs = require('fs'); var request = http.get({ host: 'izs.me', path: '/', port: 80, headers: { 'accept-encoding': 'gzip,deflate' } }); request.on('response', function(response) { var output = fs.createWriteStream('izs.me_index.html'); switch (response.headers['content-encoding']) { // or, just use zlib.createUnzip() to handle both cases case 'gzip': response.pipe(zlib.createGunzip()).pipe(output); break; case 'deflate': response.pipe(zlib.createInflate()).pipe(output); break; default: response.pipe(output); break; } }); // server example // Running a gzip operation on every request is quite expensive. // It would be much more efficient to cache the compressed buffer. var zlib = require('zlib'); var http = require('http'); var fs = require('fs'); http.createServer(function(request, response) { var raw = fs.createReadStream('index.html'); var acceptEncoding = request.headers['accept-encoding']; if (!acceptEncoding) { acceptEncoding = ''; } // Note: this is not a conformant accept-encoding parser. // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 if (acceptEncoding.match(/\bdeflate\b/)) { response.writeHead(200, { 'content-encoding': 'deflate' }); raw.pipe(zlib.createDeflate()).pipe(response); } else if (acceptEncoding.match(/\bgzip\b/)) { response.writeHead(200, { 'content-encoding': 'gzip' }); raw.pipe(zlib.createGzip()).pipe(response); } else { response.writeHead(200, {}); raw.pipe(response); } }).listen(1337); 66W!Wd8<  K 66W! DeflateRawW!d8<  H'ACompress data using deflate, and do not append a zlib header. !  , 66W!W0d8<  _6 8484 W:d8<  (8>8> WBd8<   8F8F WJd8<  XP 66W! WVd8<  '8Z8Z  77^^ (8N8N Wcd8<  z8g8g  Wkd8<  (8o8o  77ssss Pv 66W!W|d8<  P88  77  vv8%8% gunzipWd8<  B(Decompress a raw Buffer with Gunzip. ! 55--52:-5 66W!Wd8<  _88 Wd8<  (88 Wd8<   88 Wd8<  X 66W! WÖd8<  8ǖ8ǖ  77˖˖ 88 WЖd8<  z8Ԗ8Ԗ  Wؖd8<  (8ܖ8ܖ  77 P 66W!Wd8<  88  77 88  inflateRawWd8<  B,Decompress a raw Buffer with InflateRaw. ! 55--52:-5 66W!W d8<  _88 Wd8<  (88 Wd8<   8 8  W$d8<  X* 66W! W0d8<  8484  7788 8(8( W=d8<  z8A8A  WEd8<  (8I8I  77MMM PP 66W!WVd8<  *8Z8Z  77^^ P88 InflateWdd8<  Hj Decompress a deflate stream. ! c, 66W!Wsd8<  _yc8w8w W}d8<  (88 Wd8<   88 Wd8<  X 66W! Wd8<  j88  77 k88 Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  8×8×  77ǗǗ c8h8h  createUnzipW͗d8<  \ӗ0Returns a new Unzip object with an options. ! ̗55̗--5՗ 66W!Wߗd8<  _̗88 Wd8<  (88 Wd8<   88 Wd8<  X 66W! Wd8<  ӗ8 8   77   ԗ88 Wd8<  z88  Wd8<  (88  77"""" P% 66W!W+d8<  8/8/  7733 ̗%%P6 66W!W<d8<  XB 66W! WHd8<  HNXDecompress either a Gzip- or Deflate-compressed stream by auto-detecting the header. ! Unzip, 66W!WXd8<  _^R8\8\ Wbd8<  (8f8f Wjd8<   8n8n Wrd8<  B8v8v Wzd8<  z8~8~  Wd8<  (88  77 7778L8L  77 O8@8@  77 R8ї8ї ZlibWd8<  HNot exported by the zlib module. It is documented here because it is the base class of the compressor/decompressor classes. ! , 66W!Wd8<  _88 Wd8<  (88 Wd8<   88 WØd8<  Xɘ 66W!resetWИd8<  B֘qReset the compressor/decompressor to factory defaults. Only applicable to the inflate and deflate algorithms. ! Ϙ55Ϙ-ؘ 66W!Wd8<  _Ϙ88 Wd8<  (88 Wd8<   88 Wd8<  X 66W! Wd8<  ֘8 8   77 ט88 Wd8<  z88  Wd8<  (8 8   77$$$ P' 66W!W-d8<  8181  7755 Ϙ'8Ԙ8Ԙ  W:d8<  8>8> flushWCd8<  BIFlush pending data. Don't call this frivolously, premature flushes negatively impact the effectiveness of the compression algorithm. ! B55B--5K 66W!WUd8<  _[B8Y8Y W_d8<  (8c8c Wgd8<   8k8k Wod8<  Xu 66W! W{d8<  I88  77 J8s8s Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  u88  77 B8G8G  77 8ǘ8ǘ Wd8<  z88  Wd8<  (88  77ÙÙÙÙ Pƙ 66W!W̙d8<  ɘ8Й8Й  77ԙԙ ƙƙ88 gzipWڙd8<  B Compress a string with Gzip. ! ٙ55ٙ--52:-5 66W!Wd8<  _ٙ88 Wd8<  (88 Wd8<   88 Wd8<  X  66W! Wd8<  88  77 8 8  W d8<  z8$8$  W(d8<  (8,8,  77000 P3 66W!W9d8<   8=8=  77AA ٙ38ޙ8ޙ createDeflateRawWGd8<  \M4Returns a new DeflateRaw object with an options. ! F55F--5O 66W!WYd8<  __F8]8] Wcd8<  (8g8g Wkd8<   8o8o Wsd8<  Xy 66W! Wd8<  M88  77 N8w8w Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  y88  77 Fw8K8K  createInflateWd8<  \1Returns a new Inflate object with an options. ! 55--5 66W!WŚd8<  _˚8ɚ8ɚ WϚd8<  (8Ӛ8Ӛ Wךd8<   8ۚ8ۚ Wߚd8<  X 66W! Wd8<  88  77 88 Wd8<  z88  Wd8<  (88  77 P  66W!Wd8<  88  77   88  createDeflateWd8<  \%1Returns a new Deflate object with an options. ! 55--5' 66W!W1d8<  _78585 W;d8<  (8?8? WCd8<   8G8G WKd8<  XQ 66W! WWd8<  %8[8[  77__ &8O8O Wdd8<  z8h8h  Wld8<  (8p8p  77tttt Pw 66W!W}d8<  Q88  77 wwP 66W!Wd8<  X 66W! Wd8<  H Compress data using deflate. ! Deflate, 66W!Wd8<  _88 Wd8<  (88 Wd8<   88 Wěd8<  8ț8ț W̛d8<  z8Л8Л  Wԛd8<  (8؛8؛  77ܛܛܛܛ 88  77 88  77 8#8# inflateWd8<  B)Decompress a raw Buffer with Inflate. ! 55--52:-5 66W!Wd8<  _88 W d8<  (8 8  Wd8<   88 Wd8<  X 66W! W%d8<  8)8)  77-- 88 W2d8<  z8686  W:d8<  (8>8>  77BBB PE 66W!WKd8<  8O8O  77SS E88  createGzipWYd8<  \_.Returns a new Gzip object with an options. ! X55X--5a 66W!Wkd8<  _qX8o8o Wud8<  (8y8y W}d8<   88 Wd8<  X 66W! Wd8<  _88  77 `88 Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  88  77 XPœ 66W!WȜd8<  XΜ 66W! WԜd8<  HڜCompress data using gzip. ! Gzip, 66W!Wd8<  _ޜ88 Wd8<  (88 Wd8<   88 Wd8<  Μ88 Wd8<  z8 8   Wd8<  (88  77 ÜÜÜ8؜8؜  77 ۜ8̜8̜  77   ޜ8]8] unzipW&d8<  B,'Decompress a raw Buffer with Unzip. ! %55%--52:-5. 66W!W9d8<  _?%8=8= WCd8<  (8G8G WKd8<   8O8O WSd8<  XY 66W! W_d8<  ,8c8c  77gg -8W8W Wld8<  z8p8p  Wtd8<  (8x8x  77||| P 66W!Wd8<  Y88  77 %8*8*  createGunzipWd8<  \0Returns a new Gunzip object with an options. ! 55--5 66W!Wd8<  _88 Wd8<  (88 Wd8<   88 Wd8<  Xŝ 66W! W˝d8<  8ϝ8ϝ  77ӝӝ 8Ý8Ý W؝d8<  z8ܝ8ܝ  Wd8<  (88  77 P 66W!Wd8<  ŝ88  77 P 66W!Wd8<  X 66W! Wd8<  HDecompress a gzip stream. ! Gunzip, 66W!Wd8<  _$8"8" W(d8<  (8,8, W0d8<   8484 W8d8<  8<8< W@d8<  z8D8D  WHd8<  (8L8L  77PPPP 88  77UU 88  77ZZ 88 deflateW`d8<  Bf#Compress a string with Deflate. ! _55_--52:-5h 66W!Wsd8<  _y_8w8w W}d8<  (88 Wd8<   88 Wd8<  X 66W! Wd8<  f88  77 g88 Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  8Þ8Þ  77ǞǞ _8d8d  deflateRawW͞d8<  BӞ&Compress a string with DeflateRaw. ! ̞55̞--52:-5՞ 66W!Wd8<  _̞88 Wd8<  (88 Wd8<   88 Wd8<  X 66W! Wd8<  Ӟ8 8   77 Ԟ88 Wd8<  z88  Wd8<  (88  77### P& 66W!W,d8<  8080  7744 ̞&8ў8ў ޜW9d8<  ڜ8=8= WAd8<  8E8E  InflateRawWJd8<  HP$Decompress a raw deflate stream. ! I, 66W!WYd8<  __I8]8] Wcd8<  (8g8g Wkd8<   8o8o Wsd8<  Xy 66W! Wd8<  P88  77 Q8w8w Wd8<  z88  Wd8<  (88  77 P 66W!Wd8<  y88  77 I8N8N createInflateRawWd8<  \4Returns a new InflateRaw object with an options. ! 55--5 66W!Wşd8<  _˟8ɟ8ɟ Wϟd8<  (8ӟ8ӟ Wןd8<   8۟8۟ Wߟd8<  X 66W! Wd8<  88  77 88 Wd8<  z88  Wd8<  (88  77 P  66W!Wd8<  88  77   88 Wd8<  8"8" RW&d8<  N8*8*  77..  88  77333  d!d8<  38:8:d8<  8@8@.d8<  _H 8F8Fd8<  8N8N ! ! 666 !#ɘĘ;Ǚ͙Ihup|V`D֘(.јڜΜ՜œɜ:19A)IBś͛՛jt~e'CPKWw}d1;l"PlytZdKNkBsI6={Yc'_~lvZŝ̝ٝ%DQLXx~e2<m ؚ ƚКMlytZdH؟ ƟПӗ&,Ηft~aӞ'-Ξ 4:!)ۙĖіٖ&FL3 ;*%1QW> F,LYT`m:Du'  . osC[pProvides a few basic operating-system related utility functions. Use require('os') to access this module. 66W!Wbd8<Y Kh 66W !tmpdirWod8<Y BuDReturns the operating system's default directory for temp files. ! n55n-w 66W!Wd8<Y _n88YWd8<Y (88YWd8<Y  88YWd8<Y X 66W! Wd8<Y u88Y 77Yv88YWd8<Y z88Y Wd8<Y (88Y 77àààYPƠ 66W!W̠d8<Y 8Р8РY 77ԠԠYnƠ8s8sYcpusWڠd8<Y B Returns an array of objects containing information about each CPU/core installed: model, speed (in MHz), and times (an object containing the number of milliseconds the CPU/core spent in: user, nice, sys, idle, and irq). Example inspection of os.cpus: [ { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 252020, nice: 0, sys: 30340, idle: 1070356870, irq: 0 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 306960, nice: 0, sys: 26980, idle: 1071569080, irq: 0 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 248450, nice: 0, sys: 21750, idle: 1070919370, irq: 0 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 256880, nice: 0, sys: 19430, idle: 1070905480, irq: 20 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 511580, nice: 20, sys: 40900, idle: 1070842510, irq: 0 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 291660, nice: 0, sys: 34360, idle: 1070888000, irq: 10 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 308260, nice: 0, sys: 55410, idle: 1071129970, irq: 880 } }, { model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', speed: 2926, times: { user: 266450, nice: 1480, sys: 34920, idle: 1072572010, irq: 30 } } ] ! ٠55٠- 66W!Wd8<Y _٠88YWd8<Y (88YWd8<Y  88YWd8<Y X  66W! Wd8<Y 88Y 77Y8 8 YWd8<Y z8"8"Y W&d8<Y (8*8*Y 77...YP1 66W!W7d8<Y  8;8;Y 77??Y٠18ޠ8ޠYloadavgWEd8<Y BKFReturns an array containing the 1, 5, and 15 minute load averages. ! D55D-M 66W!WVd8<Y _\D8Z8ZYW`d8<Y (8d8dYWhd8<Y  8l8lYWpd8<Y Xv 66W! W|d8<Y K88Y 77YL8t8tYWd8<Y z88Y Wd8<Y (88Y 77YP 66W!Wd8<Y v88Y 77YD8I8IYtotalmemWd8<Y B7Returns the total amount of system memory in bytes. ! 55- 66W!Wd8<Y _ǡ8š8šYWˡd8<Y (8ϡ8ϡYWӡd8<Y  8ס8סYWۡd8<Y X 66W! Wd8<Y 88Y 77Y8ߡ8ߡYWd8<Y z88Y Wd8<Y (88Y 77YP 66W!W d8<Y 88Y 77Y88YfreememWd8<Y B!6Returns the amount of free system memory in bytes. ! 55-# 66W!W,d8<Y _28080YW6d8<Y (8:8:YW>d8<Y  8B8BYWFd8<Y XL 66W! WRd8<Y !8V8VY 77ZZY"8J8JYW_d8<Y z8c8cY Wgd8<Y (8k8kY 77oooYPr 66W!Wxd8<Y L8|8|Y 77Yr88YȋWd8<Y B1Returns the hostname of the operating system. ! ȋ55ȋ- 66W!Wd8<Y 88YWd8<Y (88YWd8<Y  88YWd8<Y X 66W! Wd8<Y 88Y 77¢¢Y88YWǢd8<Y z8ˢ8ˢY WϢd8<Y (8Ӣ8ӢY 77עעעYPڢ 66W!Wd8<Y 88Y 77Yȋڢ88Y endiannessWd8<Y BHReturns the endianness of the CPU. Possible values are "BE" or "LE". ! 55- 66W!Wd8<Y _88YW d8<Y (8 8 YWd8<Y  88YWd8<Y X 66W! W%d8<Y 8)8)Y 77--Y88YW2d8<Y z8686Y W:d8<Y (8>8>Y 77BBBYPE 66W!WKd8<Y 8O8OY 77SSYE88YreleaseWYd8<Y B_)Returns the operating system release. ! X55X-a 66W!Wjd8<Y _pX8n8nYWtd8<Y (8x8xYW|d8<Y  88YWd8<Y X 66W! Wd8<Y _88Y 77Y`88YWd8<Y z88Y Wd8<Y (88Y 77YP 66W!Wd8<Y 88Y 77YX8]8]YplatformWģd8<Y Bʣ*Returns the operating system platform. ! ã55ã-̣ 66W!Wգd8<Y _ۣã8٣8٣YWߣd8<Y (88YWd8<Y  88YWd8<Y X 66W! Wd8<Y ʣ88Y 77Yˣ88YWd8<Y z8 8 Y Wd8<Y (88Y 77YP 66W!W!d8<Y 8%8%Y 77))Yã8ȣ8ȣYuptimeW/d8<Y B5)Returns the system uptime in seconds. ! .55.-7 66W!W@d8<Y _F.8D8DYWJd8<Y (8N8NYWRd8<Y  8V8VYWZd8<Y X` 66W! Wfd8<Y 58j8jY 77nnY68^8^YWsd8<Y z8w8wY W{d8<Y (88Y 77YP 66W!Wd8<Y `88Y 77Y.8383YWd8<Y B&Returns the operating system name. ! 55- 66W!Wd8<Y _88YWd8<Y (88YWd8<Y  88YWĤd8<Y Xʤ 66W! WФd8<Y 8Ԥ8ԤY 77ؤؤY8Ȥ8ȤYWݤd8<Y z88Y Wd8<Y (88Y 77YP 66W!Wd8<Y ʤ88Y 77Y88YnetworkInterfacesWd8<Y B Get a list of network interfaces: { lo0: [ { address: '::1', family: 'IPv6', internal: true }, { address: 'fe80::1', family: 'IPv6', internal: true }, { address: '127.0.0.1', family: 'IPv4', internal: true } ], en1: [ { address: 'fe80::cabc:c8ff:feef:f996', family: 'IPv6', internal: false }, { address: '10.0.1.123', family: 'IPv4', internal: false } ], vmnet1: [ { address: '10.99.99.254', family: 'IPv4', internal: false } ], vmnet8: [ { address: '10.88.88.1', family: 'IPv4', internal: false } ], ppp0: [ { address: '10.2.0.231', family: 'IPv4', internal: false } ] } ! 55-  66W!Wd8<Y _88YWd8<Y (8#8#YW'd8<Y  8+8+YW/d8<Y X5 66W! W;d8<Y  8?8?Y 77CCY 8383YWHd8<Y z8L8LY WPd8<Y (8T8TY 77XXXYP[ 66W!Wad8<Y 58e8eY 77iiY[88YarchWod8<Y Bu2Returns the operating system CPU architecture. ! n55n-w 66W!Wd8<Y _n88YWd8<Y (88YWd8<Y  88YWd8<Y X 66W! Wd8<Y u88Y 77Yv88YWd8<Y z88Y Wd8<Y (88Y 77åååYPƥ 66W!W̥d8<Y 8Х8ХY 77ԥԥYnƥ8s8sY 77٥٥YZ8f8fY 77ޥޥޥYZd!d8<Y 388d8<Y h88.d8<Y _Z88d8<Y \88 ! !Y66 !\hcuǠ͠p&FL3 ;ۢȢТʤŤѤޤʣ" ֣ţuǥͥp_}kuZ5S`[gtAK|0Kivq}WaFԡܡ¡̡!?LGSsy`-7h 28'۠ (50<\bI Q  . clusterC A single instance of Node runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node processes to handle the load. The cluster module allows you to easily create a network of processes that all share server ports. var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { // Workers can share any TCP connection // In this case its a HTTP server http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); } Running node will now share port 8000 between the workers: % NODE_DEBUG=cluster node server.js 23521,Master Worker 23524 online 23521,Master Worker 23526 online 23521,Master Worker 23523 online 23521,Master Worker 23528 online This feature was introduced recently, and may change in future versions. Please try it out and provide feedback. Also note that, on Windows, it is not yet possible to set up a named pipe server in a worker. 66W!W d8< K 66W! setupMasterWd8< B!setupMaster is used to change the default 'fork' behavior. The new settings are effective immediately and permanently, they cannot be changed later on. Example: var cluster = require("cluster"); cluster.setupMaster({ exec : "worker.js", args : ["--use", "https"], silent : true }); cluster.fork(); ! 55--5# 66W!W-d8< _38181W7d8< (8;8;W?d8<  8C8CWGd8< XM 66W! WSd8< !8W8W 77[["8K8KW`d8< z8d8d Whd8< (8l8l 77pppPs 66W!Wyd8< M8}8} 77sB# ! 55--5# 66W!Wd8< 388Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z8Ħ8Ħ WȦd8< (8̦8̦ 77ЦЦЦPӦ 66W!W٦d8< 8ݦ8ݦ 77Ӧ88ЅWd8< BPSpawn a new worker process. This can only be called from the master process. ! Ѕ55Ѕ--5 66W!Wd8< 88Wd8< (88W d8<  8 8 Wd8< X 66W! Wd8< 8!8! 77%%88W*d8< z8.8. W2d8< (8686 77:::P= 66W!WCd8< 8G8G 77KKЅ=BN ! Ѕ55Ѕ--5 66W!WYd8< 8]8]Wad8< (8e8eWid8<  8m8mWqd8< Xw 66W! W}d8< N88 77O8u8uWd8< z88 Wd8< (88 77P 66W!Wd8< w88 77Ѕ88Wd8< BWhen calling this method, all workers will commit a graceful suicide. When they are disconnected all internal handlers will be closed, allowing the master process to die graceful if no other event is waiting. The method takes an optional callback argument which will be called when finished. ! 55--5 66W!Wçd8< Չ8ǧ8ǧW˧d8< (8ϧ8ϧWӧd8<  8ק8קWۧd8< X 66W! Wd8< 88 778ߧ8ߧWd8< z88 Wd8< (88 77P 66W!W d8< 88 77B ! 55--5 66W!W#d8< Չ8'8'W+d8< (8/8/W3d8<  8787W;d8< XA 66W! WGd8< 8K8K 77OO8?8?WTd8< z8X8X W\d8< (8`8` 77dddPg 66W!Wmd8< A8q8q 77uug88WorkerW{d8< HA Worker object contains all public information and method about a worker. In the master it can be obtained using cluster.workers. In a worker it can be obtained using cluster.worker. ! z, 66W!Wd8< _z88Wd8< (88Wd8<  88Wd8< X 66W!Wd8< B When calling this function the worker will no longer accept new connections, but they will be handled by any other listening worker. Existing connection will be allowed to exit as usual. When no more connections exist, the IPC channel to the worker will close allowing it to die graceful. When the IPC channel is closed the disconnect event will emit, this is then followed by the exit event, there is emitted when the worker finally die. Because there might be long living connections, it is useful to implement a timeout. This example ask the worker to disconnect and after 2 seconds it will destroy the server. An alternative would be to execute worker.kill() after 2 seconds, but that would normally not allow the worker to do any cleanup if needed. if (cluster.isMaster) { var worker = cluster.fork(); var timeout; worker.on('listening', function(address) { worker.disconnect(); timeout = setTimeout(function() { worker.send('force kill'); }, 2000); }); worker.on('disconnect', function() { clearTimeout(timeout); }); } else if (cluster.isWorker) { var net = require('net'); var server = net.createServer(function(socket) { // connection never end }); server.listen(8000); server.on('close', function() { // cleanup }); process.on('message', function(msg) { if (msg === 'force kill') { server.close(); } }); } ! 55- 66W!Wd8< Չ8Ũ8ŨWɨd8< (8ͨ8ͨWѨd8<  8ը8ըW٨d8< Xߨ 66W! Wd8< 88 778ݨ8ݨWd8< z88 Wd8< (88 77P 66W!W d8< ߨ88 7788 Wd8< 88suicideW!d8< \' !  55 - 66W!W1d8< _7 8585W;d8< (8?8?WCd8<  8G8GWKd8< XQ 66W! WWd8< '8[8[ 77__(8O8OWdd8< z8h8h Wld8< (8p8p 77ttttPw 66W!W}d8< Q88 77 wwE !  778%8%Wd8< BThis function will kill the worker, and inform the master to not spawn a new worker. The boolean suicide lets you distinguish between voluntary and accidental exit. cluster.on('exit', function(worker, code, signal) { if (worker.suicide === true) { console.log('Oh, it was just suicide\' – no need to worry'). } }); // kill worker worker.kill(); This method is aliased as worker.destroy() for backwards compatibility. ! 55--5 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wǩd8< 8˩8˩ 77ϩϩ88Wԩd8< z8ة8ة Wܩd8< (88 77P 66W!Wd8< 88 77B ! 55--5 66W!Wd8< 88W d8< (88Wd8<  88Wd8< X! 66W! W'd8< 8+8+ 77//88W4d8< z8888 W<d8< (8@8@ 77DDDPG 66W!WMd8< !8Q8Q 77UUG88@WZd8< \` ! @55@- 66W!Wjd8< _p@8n8nWtd8< (8x8xW|d8<  88Wd8< X 66W! Wd8< `88 77a88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77@E !  77ĪĪ8^8^idWʪd8< \Ъ ! ɪ55ɪ- 66W!Wڪd8< _ɪ8ު8ުWd8< (88Wd8<  88Wd8< X 66W! Wd8< Ъ88 77Ѫ88W d8< z88 Wd8< (88 77P  66W!W&d8< 8*8* 77..ɪ  E1 !  77448Ϊ8ΪLW9d8< B@This function is equal to the send methods provided by child_process.fork(). In the master you should use this function to send a message to a specific worker. However in a worker you can also use process.send(message), since this is the same function. This example will echo back all messages from the master: if (cluster.isMaster) { var worker = cluster.fork(); worker.send('hi there'); } else if (cluster.isWorker) { process.on('message', function(msg) { process.send(msg); }); } ! L55L--5z -5^B 66W!WMd8<  j8Q8QWUd8< (8Y8YW]d8<  8a8aWed8< Xk 66W! Wqd8< @8u8u 77yyA8i8iW~d8< z88 Wd8< (88 77P 66W!Wd8< k88 77LBB ! L55L--5z -5^B 66W!Wd8<  j88Wd8< (88Wd8<  8«8«Wƫd8< X̫ 66W! Wҫd8< 8֫8֫ 77ګګ8ʫ8ʫW߫d8< z88 Wd8< (88 77P 66W!Wd8< ̫88 77L8=8= 7788W d8< z88 Wd8< (88 77P 66W!W#d8< 8'8' 77++z88 770088 77555d!d8< 38<8<d8< 8B8B.d8< _J8H8Hd8< 8P8P ! !668 !$ |@^kfrNV:̫ǫӫȩթݩ!(HN5 =Ҩߨڨ ¨ʨ1˪Ъ!'۪[`}ku"'DQLXx~e2<m!@MHTtza.8iԦڦɦ >D+3Njwr~Zbԧܧħ̧4A<HhnU$,]  `  1#' 88 77__88     ! !`8g8g.d8<` N38j8jd8<` Nu8p8p&8<` N1#1#y8v8v8v N`d8<` N1#88d8<` N88de`zj66 !iup  g #!myModule" iul ./module.js# k k# # #&viul#4"+########vi"G #?#?#?#?#S  &  7 ]  E k      8 J i y        2 U }       # ?#S I8_8_b :c  d8<`g #!" iul# k k# # #&vi"+#########5  %  7 ]  E k      8 J i y        2 U }       ##5 E88  &8< 1#?8Ҭ8Ҭ8Ҭ   d8< 1#8 8ܬ8ܬ J J F Fڬd8< 1#888d8< 88 ~ ` I1##88Wd8.!. 1#La 66W!Wd8< X 66W! W d8< 88 7788Wd8<  88 77!!!P$ 66W!W*d8< 8.8. 7722$d888 bc!bb :c d!>> d8< 8C8C>> :d8<` I8I8I d8< 8P8PG@ ` I1#?88WX8<`g #!b" _iul# k k_# # #&`v"+e#### ## `#-_  %  7 ]  E k      8 J i y        2 U }       ##-_ C8\8\8\ 77ttED:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\module.js ]  &8<  1#? 8|8|8|  ٬ڬd8< 1#8 88d8< 88 1#? 888 ٬d8< 88> !>٬ !   } 4# #L88d8< 88d8< R 66W!Wd8.!. ` I1# 88 77w88d8<2@= 1#81# 8í8í>w6:`  I6ͭ !<(#/GM %+Y  z ""&  g vf =  g #߭"ۭ# ݭvf =" ܭ# # yԭ#&# 8# 8ݭ#Cܭ   4 B#Cܭ#8  ܭܭ#=#8#8խ#0ԭ#'  ԭԭ#&ԭܭܭԭd!&8888  d8< 1#888 C C @ @ӭa 66W!Wd8< 8 8 Wd8<  88 77P 66W!Wd8<  8%8% 77))d888ӭԭ d888 .ܭܭ - 888W88<g #B" ?# @vf =" ?# # yz ""&  g vf = E?#8 L#?#8#8M#0L#' TL#-#-# ?# ?@vf ="S J#L#Lyz ""h g viuf %l#} E?##}"x? ? ???#q#q #q#q]#j'\#_2#_2#LE#LE@v ?##@#?   4 I L m #? u 8<8<8<{ Ws8.!.j2+ 92<P= 8w8w8w5Wd8< \ ! 5555- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _588Wd8< X 66W! Wd8< 88 77ŮŮ88 77ʮʮʮʮPͮ 66W!WӮd8< 8׮8׮ 77ۮۮ5ͮͮ388fuW8<`g #-"  " iul#k k####2#`" `i# ## viulh#7 yz ""N g viulq#d"_? ? ?#X#X #X"#X##Q-#E9#E9"3`#.#.#.Q#.Rviuyz "" g viulh# !"` `## #####/#/l@@#A A# #A#Bviu # settimeout $# ###  #  7 ]  4 Z n     ' 9 X h         . T }    # @ 2888>W,d8< $8080W48<`g #a>n"a n;iuln#pk k;#h#h#]<v|ju ;# ;### # <g viuli@###, #l# " N## #3#4Oviul##"N## ##Oviul#"N# # # # O#<#v;    7 ] z |  , > v#v; %888888&Wn8.!.g #x" u# vvf =" u# # yz ""&  g vf = {u#8 #?#8#8#0#' #-#-# ?# ?vvf ="S #L#Lyz ""h g viuf %l#} {u##}"x? ? ?uu#q#q #q#q#j'#_2#_2#LE#LEvv& &u##v#u   4 I L m #u q  !uuu 8r8r8r+Wd8< E !ELN10LN2LOG2ELOG10PISQRT1_2SQRT2randomabsacosasinatanceilcosexpfloorroundsinsqrttanatan2powmaxq 66W!ïWЯd8< \֯=Returns e (the base of natural logarithms) raised to a power. ! ï55ï--A numeric expression._د 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ï88Wd8< X  66W! Wd8< ֯88 77ׯ8 8  77P! 66W!W'd8<  8+8+ 77//ï!!8ԯ8ԯʯW4d8< \:BReturns the value of a base expression taken to a specified power. ! ʯ55ʯ--!The base value of the expression._-%The exponent value of the expression.y< 66W!WJd8< (8N8N WRd8< (8V8VWZd8< z8^8^Wbd8< _hʯ8f8fWld8< Xr 66W! Wxd8< :8|8| 77;8p8p 77P 66W!Wd8< r88 77ʯ8888ȯWd8< \ Returns the tangent of a number. ! ȯ55ȯ--ޯ_ 66W!Wd8< (88 Wd8< (88Wd8< z88WŰd8< _˰ȯ8ɰ8ɰWϰd8< Xհ 66W! W۰d8< 8߰8߰ 778Ӱ8Ӱ 77P 66W!Wd8< հ88 77ȯ88Wd8< 88Wd8< \ .Returns a pseudorandom number between 0 and 1. ! 55- 66W!Wd8< (88 Wd8< (8#8#W'd8< z8+8+W/d8< _58383W9d8< X? 66W! WEd8<  8I8I 77MM 8=8= 77RRRRPU 66W!W[d8< ?8_8_ 77ccUU8 8 Whd8< \nJReturns the smallest number greater than or equal to its numeric argument. ! 55--ޯ_p 66W!Wzd8< (8~8~ Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< n88 77o88 77P 66W!Wd8< 8±8± 77ƱƱ8l8lW˱d8< 8ϱ8ϱWӱd8< \ٱ3Returns the natural logarithm (base e) of a number. ! 55--ޯ_۱ 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X  66W! Wd8< ٱ88 77ڱ8 8  77P! 66W!W'd8<  8+8+ 77//!!8ױ8ױ¯W4d8< \:Returns the cosine of a number. ! ¯55¯--ޯ_< 66W!WFd8< (8J8J WNd8< (8R8RWVd8< z8Z8ZW^d8< _d¯8b8bWhd8< Xn 66W! Wtd8< :8x8x 77||;8l8l 77P 66W!Wd8< n88 77¯8888Wd8< 88įWd8< \GReturns the greatest number less than or equal to its numeric argument. ! į55į--ޯ_ 66W!Wd8< (88 Wd8< (88Wd8< z8Ų8ŲWɲd8< _ϲį8Ͳ8ͲWӲd8< Xٲ 66W! W߲d8< 88 778ײ8ײ 77P 66W!Wd8< ٲ88 77į88Wd8< \Returns the absolute value of a number (the value without regard to whether it is positive or negative). For example, the absolute value of -5 is the same as the absolute value of 5. ! 55--d8< \D>Returns the smaller of a set of supplied numeric expressions. ! q55q--_-F 66W!WQd8< (8U8U WYd8< (8]8]Wad8< z8e8eWid8< _oq8m8mWsd8< Xy 66W! Wd8< D88 77E8w8w 77P 66W!Wd8< y88 77q8B8BɯWd8< \p ! ɯ55ɯ--=A numeric expression representing the cartesian y-coordinate.E-=A numeric expression representing the cartesian x-coordinate._p 66W!Wd8< (88 Wd8< (8¶8¶Wƶd8< z8ʶ8ʶWζd8< _Զɯ8Ҷ8ҶWضd8< X޶ 66W! Wd8< 88 778ܶ8ܶ 77P 66W!Wd8< ޶88 77ɯ88Wd8< 8 8  7788 Wd8.!. 2}| 1#hc 1#% B !  55 - 66W!W)d8< (8-8- W1d8< (8585W9d8< z8=8=WAd8< _G 8E8EWKd8< EQ !  66W!WXd8< \^ ! 55- 66W!Whd8< (8l8l Wpd8< (8t8tWxd8< z8|8|Wd8< 88Wd8< X 66W! Wd8< ^88 77_88 77P 66W!Wd8< 88 7738\8\ Wd8< B !  55 - 66W!Wȷd8< (8̷8̷ Wзd8< (8Է8ԷWطd8< z8ܷ8ܷWd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 88 77 88Wd8< B ! 55- 66W!W'd8< (8+8+ W/d8< (8383W7d8< z8;8;W?d8< /8C8CWGd8< XM 66W! WSd8< 8W8W 77[[8K8K 77```Pc 66W!Wid8< M8m8m 77qqc88Wv8<92%>> 8z8z8z&W8<9o> 888 778O8O 77P 66W!Wd8< Q88 77  Z 1#h Z1#% 88Wd8.!. # 1# G2MM 1#5  !uu [[[ d!&8<2[[  ksa 66W!Wĸd8< Xʸ 66W! Wиd8< 8Ը8Ը 77ظظ8ȸ8ȸWݸd8<  88 77P 66W!Wd8< ʸ88 778Z1# d8< "88 bc!bb cd8< !>w%xu "88 { 1#N0888    d888 s  &8< 1#N0888 d888{{u  t!t#z0 #+ #" j+  t!t#7 # # 2mx  t!t# #e #= #    !         d !&8< 2     ,, sa4 66W!W:d8<  X@ 66W! WFd8<  58J8J WN8< 23+ 8R8R8R  WX8< 23+ 8\8\8\  Wb8< 23+ 8f8f8f  77ll 48>8> Wqd8<   8u8u  77yyy P| 66W! W8< 23+ 888  W8< 23+ 888 Wd8< 23+  t!t#8 # #j # 1# "U  77  U  77  88 Wd8<  @88 [Wd8<   t!t#L # # # "388  77 |d8<  &*8ù8ù bc!bb"s Qc+d8.!.  &*    [[[  d!&8< !ҹ    [[[ ӹӹӹ sb" X d8< !%xu>w 8߹8߹  ӹ[&8< !ҹڹ    [[[ ӹӹӹ sb d8<2u%x 88  ӹ[&8< 1#2888 ' ӹչ&8< 1# 2888 &d888a  66W!Wd8< X 66W! Wd8<  8"8" 77&& 88W+d8<  8/8/ 77333P6 66W!W<d8< 8@8@ 77DD6Z1# Gd8< &*8L8L bc!bbs" Qcҹd8< !u>w%x &*8W8W۹cڹݹc  [[ ӹӹ ms {   {{_ 1#2"888 '&8<ڹ 1#2"8f8f8f ' ӹչ&8<ڹ 1# 28o8o8o &d888  {{_ 1# 2s8׹8׹8׹ &[   _ d888ӹӹ sRU  ӹ[&8<ҹ 1#2"888 ' ӹչ&8<ҹ 1# 2s888 &d888  {{ 8ι8ι3  + 1#  t!t# # # # z808080   [&8< 23+ 4##"888  R % &8< 23+ 1# 4#M #d 888  $  &8< 23+ 1# t!t# # #X #888   , &8< 23+ 1# 4# #l 3888  +  &8< 23+ 1#e 1# @ͺ >9= 23+ 9Ѻ9Ѻ 66W!Wںd8<  8޺8޺  77 8Ⱥ8Ⱥ8Ⱥ   &8< 23+ 1#} 4#E #] "888   2&8< 23+ 1# 1# 888   &8<  5888      34d8<  s88,, sɹ̹  ,&8<  5888    ,2&8< + 1# 1# 888    ,&8< + 1#} 4#E #] "8 8 8     , ƺ&8< + 1#e 1# ͺ8+8+8+    ,, &8< + 1# 4# #l 3858585  +  , &8< + 1# t!t# # #X #8?8?8?    ,% &8< + 1# 4#M #d 8I8I8I  $  ,[&8< + 4##"8S8S8S  R  ,.&8< + 1#  t!t# # # # z8\8\8\   d8<  s8e8e44               sb s Gjd8.!. i s 8q8q   [&8<  !  i           sbU 66W!W8<  !           sbU 66W!W8<  !   888  77  x Id8.!.  s # 88   [x&8<  !    t!t#?##l#A888     &8<  !  i}           sbs 6Ѯd8< 2  s8Ȼ8Ȼ   [x&8<   t!t#?##l#A8ѻ8ѻ8ѻ     &8<  4#G#8ڻ8ڻ8ڻ     &8<  !  i}  t!t###Pt888   &8<   t!t###P888      &8<  1#y4#1#OU 66W!W8<  !  i} 888  77    888   d8<  s88     4#G# 888   &8<  !   4#G#888     &8<  !    t!t###P8(8(8(      &8<  !   1#y4#1#O828282   d8<  s8=8=     } 888  77DD # ad8.!. } s  8J8J   [x&8< }  t!t#?##l#A8S8S8S     &8< } 4#G#8\8\8\     &8< }  t!t###P8e8e8e      &8< } 1#y4#1#O8n8n8n   d8<  s8x8x      t!t#?##l#A8z8z8z   &8< i  t!t#?##l#A888     &8< i 4#G# 888     &8< i  t!t###P888      &8< i 1#y4#1#O 888   d8<  s88    }3  t!t#" # # # # # #  "88:Wd8< \ Converts A string to an integer. ! :55:--"A string to convert into a number.-A value between 2 and 36 that specifies the base of the number in numString. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal.radix 66W!Wżd8< (8ɼ8ɼ Wͼd8< (8Ѽ8ѼWռd8< z8ټ8ټWݼd8< _:88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 8 8  77:883Wd8.!. \BEncodes a text string as a valid Uniform Resource Identifier (URI) ! 3553--$A value representing an encoded URI.uri 66W!W*d8< (8.8. W2d8< (8686W:d8< z8>8>WBd8< _H38F8FWLd8< XR 66W! WXd8< 8\8\ 77``8P8P 77eeeePh 66W!Wnd8< R8r8r 77vv3hhjZj4#T' #TS yy3j2/ 4#T' #TS 88W8<`g #-"  " iul#k k####2#`" `i# ## viulh#7 yz ""N g viulq#d"_? ? ?#X#X #X"#X##Q-#E9#E9"3`#.#.#.Q#.Rviuyz "" g viulh# !"` `## #####/#/l@@#A A# #A#Bv ###  #  7 ]  4 Z n     ' 9 X h         . T }    # 5 0888AWǽd8.!. BͽRun callback cb after at leastms milliseconds. The actual delay depends on external factors like OS timer granularity and system load. The timeout must be in the range of 1-2,147,483,647 inclusive. If the value is outside that range, it's changed to 1 millisecond. Broadly speaking, a timer cannot span more than 24.8 days. Returns an opaque value that represents the timer. ! A55A--5cb-5wϽ 66W!W۽d8< 8߽8߽Wd8< (88Wd8<  88Wd8< X 66W! Wd8< ͽ88 77ν88W d8< z88 Wd8< (88 77P 66W!W%d8< 8)8) 77--A`Z`1# 90`O 91# 8˽8˽kW7d8.!. 4##  4##G2IG  t!t##P#5##U  t !t#####|#]#;##99  t !t#1######`#6# #{  t!t####t#P#0##@  t!t#G#!####f#-# ####c#>##j*  t!t#####y#B# ####y#W#4##` N1#.  t !t######e#?## \ 1#   t!t#n#L#&# 1# ]X ! k55k- 66W!Wbd8< (8f8f Wjd8< (8n8nWrd8< z8v8vWzd8< _k8~8~Wd8< X 66W! Wd8< X88 77Y88 77P 66W!Wd8< 88 77k Z t!t####t#P#0## jZj t!t#####y#B# ####y#W#4## 9Z9 t !t#1######`#6# # Z4##  Z t!t#n#L#&#  Z 4## Z t!t#G#!####f#-# ####c#>## Z t !t#####|#]#;## GZG t!t##P#5## .Z. t !t######e#?## Z1#  Z 1# `Z`1# NRequire8;8;(Wξd8< BԾ ! (55(- 66W!W޾d8< (88 Wd8< (88Wd8< z88Wd8< _(88Wd8< E ! 0 66W!W d8< B ! 55- 66W!Wd8< (8!8! W%d8< (8)8)W-d8< z8181W5d8< _;8989W?d8< XE 66W! WKd8< 8O8O 77SS8C8C 77XXXP[ 66W!Wad8< E8e8e 77ii[88 Wnd8< Bu !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< u88 77v88 77P 66W!Wd8< 8ſ8ſ 77ɿɿ Ծ8r8rWοd8< BԿ ! 55- 66W!W޿d8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! W d8< Կ88 77տ88 77P 66W!W d8< 8$8$ 77((8ҿ8ҿ0W-d8< B3 ! 0550- 66W!W=d8< (8A8A WEd8< (8I8IWMd8< z8Q8QWUd8< _[08Y8YW_d8< Xe 66W! Wkd8< 38o8o 77ss48c8c 77xxxP{ 66W!Wd8< e88 770{8181Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77388 7788 77P 66W!Wd8< 88 77(8Ҿ8Ҿ4Wd8< \REncodes a text string as a valid component of a Uniform Resource Identifier (URI). ! 4554--.A value representing an encoded URI component. uriComponent 66W!Wd8< (8 8  W$d8< (8(8(W,d8< z8080W4d8< _:48888W>d8< XD 66W! WJd8< 8N8N 77RR8B8B 77WWWWPZ 66W!W`d8< D8d8d 77hh4ZZ38 8 ,Wmd8< Bs !  MAX_VALUE MIN_VALUENaNNEGATIVE_INFINITYPOSITIVE_INFINITY78,55,- 66W !vWd8< 88wWd8< 88Wd8< (887Wd8< \/Determines whether a supplied number is finite. ! 7557- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _788Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 777*88 Wd8< (88yWd8< 88W d8< E !  toExponentialtoFixed  toPrecision 66W!Wd8< \"?Returns a string representing a number in fixed-point notation. ! 55-$ 66W!W-d8< (8181 W5d8< (8989W=d8< z8A8AWEd8< _K8I8IWOd8< XU 66W! W[d8< "8_8_ 77cc#8S8S 77hhhhPk 66W!Wqd8< U8u8u 77yykk38 8 W~d8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< /88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 7788 Wd8< B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8<  8 8 W d8< X 66W! Wd8< 88 77!!88 77&&&P) 66W!W/d8< 8383 7777 )88W<d8< BBReturns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits. ! 55--ENumber of significant digits. Must be in the range 1 - 21, inclusive. precisionD 66W!WPd8< (8T8T WXd8< (8\8\W`d8< z8d8dWhd8< _n8l8lWrd8< Xx 66W! W~d8< B88 77C8v8v 77P 66W!Wd8< x88 778@8@Wd8< \-Returns a string representation of an object. ! 55--`Specifies a radix for converting numeric values to strings. This value is only used for numbers. 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77388 Wd8< B  !  55 - 66W!Wd8< (88 Wd8< (8 8 W$d8< z8(8(W,d8< 8080W4d8< X: 66W! W@d8<  8D8D 77HH 8888 77MMMPP 66W!WVd8< :8Z8Z 77^^ Ps88Wcd8< \iIReturns a string containing a number represented in exponential notation. ! 55-k 66W!Wtd8< (8x8x W|d8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< i88 77j88 77P 66W!Wd8< 88 7738g8g 7788xWd8< 88Wd8< _,888Wd8< \`Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). ! 8558- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 88 8 Wd8< X 66W! Wd8< 88 77##88 77((((P+ 66W!W1d8< 8585 77998++&88W>d8< z8B8BzWFd8< 8J8J 77NNNPQ 66W!WWd8< 8[8[ 77__,Q8q8q<Wdd8< $8h8h Wld8.!.  1# !2@  t!t#k1#m##l !zyyz{  t!t#7#|5#N5#(#pj !%5,.  t!t#V#KD#A#A# 4## 8p8p.Wd8< B ! .55.- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _.88Wd8< E ! 0 66W!Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< ;88Wd8< X 66W! Wd8< 88 7788 77   P  66W!Wd8< 88 77 88 Wd8< B& !  55 - 66W!W0d8< (8484 W8d8< (8<8<W@d8< z8D8DWHd8< 8L8LWPd8< XV 66W! W\d8< &8`8` 77dd'8T8T 77iiiPl 66W!Wrd8< V8v8v 77zz l8#8#Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77880Wd8< B ! 0550- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< [8 8 Wd8< X 66W! Wd8< 88 77""88 77'''P* 66W!W0d8< 8484 77880*88W=d8< \C ! 55- 66W!WMd8< (8Q8Q WUd8< (8Y8YW]d8< z8a8aWed8< 8i8iWmd8< Xs 66W! Wyd8< C8}8} 77D8q8q 77P 66W!Wd8< s88 7738A8A 7788 77P 66W!Wd8< 88 77.889Wd8.!. \-Converts a string to a floating-point number. ! 9559--/A string that contains a floating-point number._  66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _988Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 7799Z91#e 9 !o>w>E 1#e 881W!d8< B' ! 1551- 66W!W1d8< (8585 W9d8< (8=8=WAd8< z8E8EWId8< _O18M8MWSd8< EY ! 0 66W!W`d8< Bf ! 55- 66W!Wpd8< (8t8t Wxd8< (8|8|Wd8< z88Wd8< ;88Wd8< X 66W! Wd8< f88 77g88 77P 66W!Wd8< 88 778d8d Wd8< B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77   P  66W!Wd8< 88 77  '88Wd8< B% ! 55- 66W!W/d8< (8383 W7d8< (8;8;W?d8< z8C8CWGd8< 8K8KWOd8< XU 66W! W[d8< %8_8_ 77cc&8S8S 77hhhPk 66W!Wqd8< U8u8u 77yyk8#8#0W~d8< B ! 0550- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< [88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77088Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 8 8 W d8< X 66W! Wd8< 88 77!!88 77&&&&P) 66W!W/d8< 8383 7777))388 77<<8W8W 77AAAPD 66W!WJd8< Y8N8N 77RR1D8%8%?WWd8.!.~2 1## 1#6`2jjPPjd!ca 966W!Wd8<` 98o8o`Wd8<` 9 8x8x` 77|||`P 966W!Wd8<` 9q88` 77`d888 bc!bbq 2c jjjPPPddd d8<` 988 d8<` 9q88ffOOcj d8<` 9q88d fO 91#{E   1#2@= 1#q E !infowarnuHtimeEndtracer 66W !Wd8< BSame as console.log. ! 55--5m 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 W d8< (88 77P 66W!Wd8< 8 8  77$$88W)d8< B/Same as console.error. ! 55--5m1 66W!W;d8< _A8?8?WEd8< (8I8IWMd8<  8Q8QWUd8< X[ 66W! Wad8< /8e8e 77ii08Y8YWnd8< z8r8r Wvd8< (8z8z 77~~~P 66W!Wd8< [88 778-8-Wd8< BMark a time. ! 55--5label 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788Wd8.!.~2 1##2#i 1#`2c 91#{"E   1# BPrints to stdout with newline. This function can take multiple arguments in a printf()-like way. Example: console.log('count: %d', count); If formatting elements are not found in the first string then util.inspect is used on each argument. See [util.format()][] for more information. ! 55--5m 66W!Wd8< 8!8!W%d8< (8)8)W-d8<  8181W5d8< X; 66W! WAd8< 8E8E 77II8989WNd8< z8R8R WVd8< (8Z8Z 77^^^Pa 66W!Wgd8< ;8k8k 77ooa2@= 1#q88rWwd8< B}lSame as [assert.ok()][] where if the expression evaluates as false throw an AssertionError with message. ! r55r--5 expression-5z  66W!Wd8< ]88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< }88 77~88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77r8{8{Wd8< B:Print a stack trace to stderr of the current position. ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  8 8 Wd8< X 66W! Wd8< 88 77""88W'd8< z8+8+ W/d8< (8383 77777P: 66W!W@d8< 8D8D 77HH:88WMd8.!. BS-Same as console.log but prints to stderr. ! 55--5mU 66W!W_d8< 8c8cWgd8< (8k8kWod8<  8s8sWwd8< X} 66W! Wd8< S88 77T8{8{Wd8< z88 Wd8< (88 77P 66W!Wd8< }88 77 1#6*8Q8QWd8< BFinish timer, record output. Example: console.time('100-elements'); for (var i = 0; i < 100; i++) { ; } console.timeEnd('100-elements'); ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (8 8  77   P 66W!Wd8< 88 7788uHW#d8< B)CUses util.inspect on obj and prints resulting string to stdout. ! uH55uH--5+ 66W!W5d8< _;uH8989W?d8< (8C8CWGd8<  8K8KWOd8< XU 66W! W[d8< )8_8_ 77cc*8S8SWhd8< z8l8l Wpd8< (8t8t 77xxxP{ 66W!Wd8< U88 77uH{8'8' 772#i 1#8[8[0Wd8.!. B !  fromCharCode0550- 66W!Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77388Wd8< (8 8 Wd8< _088Wd8< E  %!anchorbigblinkboldcharAt charCodeAt fixed fontcolorfontsizeitalicsl localeComparesmall&strikesubsuptoLocaleLowerCasetoLocaleUpperCase  trimtrimLeft trimRight 66W*!W;d8< BAHReturns a string that contains the concatenation of two or more strings. ! 55--...C 66W!WNd8< (8R8R WVd8< (8Z8ZW^d8< z8b8bWfd8< 8j8jWnd8< Xt 66W! Wzd8< A8~8~ 77B8r8r 77P 66W!Wd8< t88 778?8?Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< /88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 7788Wd8< \ ! 55- 66W!W d8< (88 Wd8< (88Wd8< z8 8 W$d8< -@8(8(W,d8< X2 66W! W8d8< 8<8< 77@@8080 77EEEEPH 66W!WNd8< 28R8R 77VVHH888888$W`d8< \f/Surrounds the provided string with a tag. ! $55$-h 66W!Wqd8< (8u8u Wyd8< (8}8}Wd8< z88Wd8< _$88Wd8< X 66W! Wd8< f88 77g88 77P 66W!Wd8< 88 77$38d8d2Wd8< BkConverts all alphabetic characters to lowercase, taking into account the host environment's current locale. ! 2552- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _288Wd8< X 66W! Wd8< 88 77  88 77P 66W!Wd8< 88 77288(W$d8< \*EReturns the Unicode value of the character at the specified location. ! (55(--pThe zero-based index of the desired character. If there is no character at the specified index, NaN is returned.N;, 66W!W7d8< (8;8; W?d8< (8C8CWGd8< z8K8KWOd8< _U(8S8SWYd8< X_ 66W! Wed8< *8i8i 77mm+8]8] 77rrrrPu 66W!W{d8< _88 77(uu8(8(Wd8.!. B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77GG 1#88Wd8< B?Finds the first substring match in a regular expression search. ! 55--4The regular expression pattern and applicable flags.  66W!Wd8< (88 Wd8< (8 8 Wd8< z88Wd8< _88W d8< X& 66W! W,d8< 8080 77448$8$ 77999P< 66W!WBd8< &8F8F 77JJ<88)WOd8< \U.Surrounds the provided string with a tag. ! )55)-W 66W!W`d8< (8d8d Whd8< (8l8lWpd8< z8t8tWxd8< _~)8|8|Wd8< X 66W! Wd8< U88 77V88 77P 66W!Wd8< 88 77)38S8SWd8< B,Returns a string representation of a string. ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77  88-Wd8< BDDetermines whether two strings are equivalent in the current locale. ! -55---"String to compare to target stringthat 66W!W%d8< (8)8) W-d8< (8181W5d8< z8989W=d8< _C-8A8AWGd8< XM 66W! WSd8< 8W8W 77[[8K8K 77```Pc 66W!Wid8< M8m8m 77qq-c88/Wvd8< \|2Surrounds the provided string with a tag. ! /55/-~ 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _/88Wd8< X 66W! Wd8< |88 77}88 77P 66W!Wd8< 88 77/38z8z&Wd8.!. BYSplit a string into substrings using the specified separator and return them as an array. ! &55&--A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.  separator-CA value used to limit the number of elements returned in the array. 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ &8 8 Wd8< X 66W! Wd8< 8 8  77$$88 77)))P, 66W!W2d8< 8686 77::&,ٍ 1#;883WAd8< BGReturns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. ! 3553-I 66W!WRd8< (8V8V WZd8< (8^8^Wbd8< z8f8fWjd8< _p38n8nWtd8< Xz 66W! Wd8< G88 77H8x8x 77P 66W!Wd8< z88 7738E8E'Wd8< \-Returns the character at the specified index. ! '55'--.The zero-based index of the desired character.pos 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _'88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77'388.Wd8< \1Surrounds the provided string with a tag. ! .55.- 66W!Wd8< (88 W!d8< (8%8%W)d8< z8-8-W1d8< _7.8585W;d8< XA 66W! WGd8< 8K8K 77OO8?8? 77TTTTPW 66W!W]d8< A8a8a 77ee.WW38 8 9Wj8<GI 8n8n8nWs8<GI 8w8w8w,W|d8< \.Surrounds the provided string with an tag. ! ,55,- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _,88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77,388%Wd8< \1Surrounds the provided string with a tag. ! %55%- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ %8 8 Wd8< X 66W! Wd8< 8!8! 77%%88 77****P- 66W!W3d8< 8787 77;;%--388+W@d8< \F9Surrounds the provided string with a tag. ! +55+--#the size attribute for the font taghH 66W!WSd8< (8W8W W[d8< (8_8_Wcd8< z8g8gWkd8< _q+8o8oWud8< X{ 66W! Wd8< F88 77G8y8y 77P 66W!Wd8< {88 77+38D8DWd8< B9Returns the last occurrence of a substring in the string. ! 55--The substring to search for. searchString-^The index at which to begin searching. If omitted, the search begins at the end of the string.j 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 7788W d8< BgMatches a string with a regular expression, and returns an array containing the results of that search. ! 55--IA string containing the regular expression pattern and flags or a RegExp.  66W!Wd8< (8"8" W&d8< (8*8*W.d8< z8282W6d8< _<8:8:W@d8< XF 66W! WLd8< 8P8P 77TT8D8D 77YYYP\ 66W!Wbd8< F8f8f 77jj\88Wod8< BuHReturns the substring at the specified location within a String object. ! 55--FThe zero-based index number indicating the beginning of the substring.;-Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. If end is omitted, the characters from start through the end of the original string are returned.w 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< u88 77v88 77P 66W!Wd8< 88 778s8s&Wd8< \0Surrounds the provided string with a tag. ! &55&- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _&88Wd8< X 66W! Wd8< 88 778 8  77!!!!P$ 66W!W*d8< 8.8. 7722&$$388 W7d8.!. ]=@Converts all the alphabetic characters in a string to lowercase. !  55 -? 66W!WHd8< (8L8L WPd8< (8T8TWXd8< z8\8\W`d8< _f 8d8dWjd8< Xp 66W! Wvd8< =8z8z 77~~>8n8n 77P 66W!Wd8< p88 77 StringToLowerCase| 1#*8;8;5Wd8< BMRemoves the leading white space and line terminator characters from a string. ! 5555- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _588Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77588lWd8< \7Surrounds the provided string with an tag. ! l55l--the href attribute for the taghref 66W!Wd8< (88 Wd8< (88W!d8< z8%8%W)d8< _8-8-W1d8< X7 66W! W=d8< 8A8A 77EE8585 77JJJJPM 66W!WSd8< 78W8W 77[[lMM388W`d8.!. BfGReplaces text in a string, using a regular expression or search string. ! 55--;A string that represents the regular expression or a RegExp searchValue-MA string containing the text replacement text or a function which returns it. replaceValueh 66W!Wwd8< (8{8{ Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< f88 77g88 77P 66W!Wd8< 88 77j,. 1#y)8d8d:W8<GI 888W8<GI 8886Wd8< BNRemoves the trailing white space and line terminator characters from a string. ! 6556- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 68 8 Wd8< X 66W! Wd8< 88 77##88 77(((P+ 66W!W1d8< 8585 77996+88 W>d8.!. ]D@Converts all the alphabetic characters in a string to uppercase. !  55 -F 66W!WOd8< (8S8S WWd8< (8[8[W_d8< z8c8cWgd8< _m 8k8kWqd8< Xw 66W! W}d8< D88 77E8u8u 77P 66W!Wd8< w88 77 StringToUpperCase 2|| 1#8B8B1Wd8< \/Surrounds the provided string with a tag. ! 1551- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _188Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 771388 Wd8< B  !  55 - 66W!Wd8< (88 Wd8< (8"8"W&d8< z8*8*W.d8< 8282W6d8< X< 66W! WBd8<  8F8F 77JJ 8:8: 77OOOPR 66W!WXd8< <8\8\ 77`` R8 8  HWe8<GI 8i8i8i#Wnd8< \t7Surrounds the provided string with an tag. ! #55#--!the name attribute for the anchorv 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _#88Wd8< X 66W! Wd8< t88 77u88 77P 66W!Wd8< 88 77#38r8r4Wd8< BZRemoves the leading and trailing white space and line terminator characters from a string. ! 4554- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _488Wd8< X  66W! Wd8< 88 778 8  77P! 66W!W'd8<  8+8+ 77//4!88W4d8< B:Returns a section of a string. ! 55--AThe index to the beginning of the specified portion of stringObj.;-The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. If this value is not specified, the substring continues to the end of stringObj.< 66W!WId8< (8M8M WQd8< (8U8UWYd8< z8]8]Wad8< `8e8eWid8< Xo 66W! Wud8< :8y8y 77}};8m8m 77P 66W!Wd8< o88 778888Wd8< B tag. ! *55*--$the color attribute for the font tagcolor 66W!Wd8< (88 Wd8< (88W"d8< z8&8&W*d8< _0*8.8.W4d8< X: 66W! W@d8< 8D8D 77HH8888 77MMMMPP 66W!WVd8< :8Z8Z 77^^*PP3880Wcd8< \i/Surrounds the provided string with a tag. ! 0550-k 66W!Wtd8< (8x8x W|d8< (88Wd8< z88Wd8< _088Wd8< X 66W! Wd8< i88 77j88 77P 66W!Wd8< 88 77038g8g 7788Wd8< z88 Wd8< (88 77P 66W!Wd8<  88 770jZj t!t#L#K#~D#nD#r j !%[/  t!t#L#K#~D#nD#r88=Wd8< $88Wd8. !.  !|| 4##  !{R 1#+mss 1#2$>  t!t#"#1 # ##j !59*  t!t#`#<#2mx 1#. !=\t 1#}  1# ] ! getPrototypeOfgetOwnPropertyDescriptorgetOwnPropertyNamesSdefinePropertiessealfreezepreventExtensionsisSealedisFrozen isExtensible 55- 66W! W.d8< ]4\Adds one or more properties to an object, and/or modifies attributes of existing properties. !  55 --hObject on which to add or modify the properties. This can be a native JavaScript object or a DOM object.a-JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. properties6 66W!WDd8< (8H8H WLd8< (8P8PWTd8< z8X8XW\d8< _b 8`8`Wfd8< Xl 66W! Wrd8< 48v8v 77zz58j8j 77P 66W!Wd8< l88 77 DefineProperties8282%Wd8< \Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. ! %55%--Object to test.a 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _%88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77%*88Wd8< (88Wd8.!.$ 1# 2mx 1# B fCreates an object that has the specified prototype, and that optionally contains specified properties. ! 55--)Object to use as a prototype. May be nulla-AJavaScript object that contains one or more property descriptors.? 66W!Wd8< (88 W#d8< (8'8'W+d8< z8/8/W3d8< 8787W;d8< XA 66W! WGd8<  8K8K 77OO 8?8? 77TTTPW 66W!W]d8< A8a8a 77eeWmss 1#88Wld8.!.  1# Dt !__defineGetter____lookupGetter____defineSetter____lookupSetter__    isPrototypeOfpropertyIsEnumerable 66W!Wd8.!.  1# \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88W8.!.2[[ d!&8<2 [[[  sb d8< 88  &8<2 1#04#0#1888 &8< 1#04#0#1888  &8< 4#0#G1888  d888a 66W!Wd8< X 66W! Wd8< 88 7788W d8<  88 77P 66W!Wd8< 8!8! 77%%Z1#* (d8< 8-8- bc!bc {{ 4#0#G1t888     d888 ls{  2#  888WAd8< XG 66W! WMd8< 8Q8Q 77UU8E8E 77ZZZZP] 66W!Wcd8< G8g8g 77kk]]Z1#91  Z 4#$ #Q nn3{ 1#88 Ww8.!. 2}| c 8{8{8{W8<j) 888W8<$ 888W8< 888)W8< ! 888W8.!. `: %888W8<` 2888kW8. !.   G2IG U 99 { @ j* ` N.  \    888yWd8< ]3Creates a setter method for the given property name ! y55y--The property namesprop-The function to be invokedfun 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _y88W d8< X 66W! Wd8< 88 778 8  77""""P% 66W!W+d8< 8/8/ 7733y%% DefineSetter88 W88< 2|| 8<8<8<WB8.!.   ! GG j !j0z4r09 . ==[[ =d!&8<O 1#Y  t!t#` #k # 8T8T8T &8<O 1#P 4#s #~ 8]8]8] ^l&8888 k&8<O  t !t#d #x #9 # #9 # # # # # 8k8k8k &8<O  t!t# #K # # 8s8s8s :&8< a} 66W!Wd8< X 66W!W8<O 888 Wd8< }88W8<O 888 77~88Wd8<  88 77P 66W!W8<O 888W8<O 888Wd8< 88 77:d8< 88O= 8{8{8{ =e&8<O 1#m 1#d 888 d    d8< 1#2 88PPP x x G G  ld8<O 1#x 1# 88PPP d8< 1# 88 O~d888P ]s~{ 8F8F8FW8<j* 888wWd8< ]3Creates a getter method for the given property name ! w55w---! 66W!W,d8< (8080 W4d8< (8888W<d8< z8@8@WDd8< _Jw8H8HWNd8< XT 66W! WZd8< 8^8^ 77bb 8R8R 77ggggPj 66W!Wpd8< T8t8t 77xxwjj DefineGetter88W}8<$ 888W8.!.j !,._- O 888SW8.!.2$>  !{R . !=\t 888)!W8< 888W8.!.` ' 888 W8<$ 888W8< 888 W8< 2S S    S d!, &8< 2 S S S      sb d8< 23+ 388  , &8<   t!t# #v #F #' # 888   d888a 66W!Wd8<  X 66W! Wd8<  88  77 88 W d8<   88  77 P 66W!Wd8<  88  77## 5  Z 1# &d8<  38+8+ bc!bcS    t!t# #v #F #' # 888      d888 s  888&W<8.!.ٍ 9o> 8@8@8@WF8.!.j  !z*90/,.+ `g # R" O O##P# O  $  7 ]  E k      8 J i y        2 U }      # O ?8J8J8J#W^8<j* 8b8b8b[Wg8.!.G/J   8k8k8k"Wq8< !>w%xu 8u8u8u W{8<j+ 888 W8< 2}| 888W8<U 888W8. !.   !{R { 2$> j !59* 2mx . !=\t   !|| mss 888W8<@ 888 W8<j+ 888W8.!.j2+   !  i} 888W8<j* 888IW8<t 888W8< 888wW8<@ 888tW8<z ""&  g vf =  g #"# vf =" # # y#$# 6# 6#A   4 @#A#8  #=#8#8#0#'  #$d!&8888  d8< 1#88 8  A A > >a 66W!Wd8< 8/8/Wd8<  8888 77<<<P 66W!Wd8< 18I8I 77MM?d888 d888 1% 0 888 W\d8< Bc !  55 - 66W!Wmd8< (8q8q Wud8< (8y8yW}d8< z88Wd8< 88Wd8< X 66W! Wd8< c88 77d88 77P 66W!Wd8< 88 77 8`8`W8<j* 888W8.!.GI j* 888LW8<j !b[/,._- 888 W8.!.   !2@ j !%5,.   !zyyz{ 888W8. !.99   GI U { @ j* ` N.  \  888zW8<  !||# |} 888 HW8<GI 8 8 8 /W8<2t 888W8.!.$ j9  !{R . !=\t 888{W'd8< \-HDetermines whether an object exists in another object's prototype chain. ! {55{--6Another object whose prototype chain is to be checked.v/ 66W!W;d8< (8?8? WCd8< (8G8GWKd8< z8O8OWSd8< _Y{8W8WW]d8< Xc 66W! Wid8< -8m8m 77qq.8a8a 77vvvvPy 66W!Wd8< c88 77{yy*8+8+W8< 888&W8<j 888dW8<j2c01 888W8<j ![/+ 8880W8.!. !-xx   !#  888W8<ӭ 888W8<G2GJ 888'W8<j2) 888W8.!.jz 2$ 888W8.!.   !+  i}3 2mx G2MM j+  #  !uuu 888W8.!.  !||  !|wPz>ww%xzAzyzwuYy G2JJ j295  929@1@ 888W 8< 8889W8<9 !o>w>E 8883W8<گ 8"8"8",&W'8<j% 8+8+8+W08<92%>> 848484AW:8.!.j* `i 8>8>8>,WD8<U 8H8H8HWM8.!.2#i `2c 9~2 E   2@= 8Q8Q8Q W^8.!.  !2 j !%5,.  8b8b8b Wl8<   !+  i}3 8p8p8p-Wv8<j9 8z8z8zW8< !>w%xu 888ЉW8<U 888W8.!. 23+  !j  2#   !o 888W8.!. 23+ 9 !o>w>E گ 2O v 888W8<j,. 888W8< ! 888zWd8< B4Gets the setter function for the given property name ! z55z-- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _z88Wd8< X 66W! Wd8< 88 77  88 77P 66W!Wd8< 88 77""z88W'8< !j2_ 8+8+8+W18.!. #  j/  9 !-C> 858585W?8.!.. `O 98C8C8CWI8<$ 8M8M8MWR8< 8V8V8V>W[8.!.G !JJG j/ 8_8_8_3Wf8<j2/ 8j8j8jB&Wp8<j 8t8t8tXWy8<GG 8}8}8}W8<@ 888?W8.!. 2#i `2c 9~2 E   2@= 888W8<O 888:W8<GI 888 Wd8< \ !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8<  88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77   388 W8<| 888W8<G/J 888W 8<GG 8$8$8$W)8< !j2_at 8-8-8-W38.!.  @ { 878787W>8.!.@ G !JJI j* 8B8B8B WJ8<92$ j  !*%598,._-+*  !{R . !=\t 888#W8<U 888W8<گ 888q W8< 2 888W8<` 888XW 8.!.  !:B . 4x 888NW8< !u>w%xo 888W 8<j* 8$8$8$W)8.!.. t 8-8-8-W3d8< B9 ! 55- 66W!WCd8< (8G8G WKd8< (8O8OWSd8< z8W8WW[d8< /8_8_Wcd8< Xi 66W! Wod8< 98s8s 77ww:8g8g 77|||P 66W!Wd8< i88 778787W8<`^ C888:W8<2 888$W8<`+ 888V:W8<92>> 888AW8<`O 9888 W8.!. 23+ j !59*  2|| 888*#W8<j~ 888@W8<$ 888W8<> 888 W8.!. 2||  !at$ j !5,._-+*   !{R|ٍѮ . !=\t 888@W8.!. a 888-IW8<G2MM 8 8 8 9W8.!.GI 99 888C!W8<j+ 888W"8.!.j0  !>w%xu 8&8&8&&W-8.!. !uuu t ` -818181W98< !>`$ 8=8=8=xWCd8< BI4Gets the getter function for the given property name ! x55x--K 66W!WUd8< (8Y8Y W]d8< (8a8aWed8< z8i8iWmd8< _sx8q8qWwd8< X} 66W! Wd8< I88 77J8{8{ 77P 66W!Wd8< }88 77x8G8GW8.!.$ 2mx mss 888'W8<j 888W8.!.g #" # vf =" # # yz ""&  g vf = #8 #?#8#8#0#' #-#-# ?# ?v"S #L#L#L#\   4 I L#\ > ` N888 W8<  !|||} 888W8<@ 888?W8<2ٍ 888$W8<`g #- "  " iul#k k####2 #`" `i# ##  viulh#7 yz ""N g viulq#d"_? ? ?#X#X #X"#X#!#Q- #E9#E9"3`#.#.#.Q#.R viuyz "" g viulh# !"` `## ##2##1#/#/l@@#A A# #A#B v$ $# #  #  #  7 ]  4 Z n     ' 9 X h         . T }    # E 3888WG8<` N8K8K8K0WP8<j !%[/ 8T8T8TbWZ8.!.   ! 8^8^8^$We8<j 8i8i8iyWn8.!.U `i 8r8r8rWx8.!.GG  !` 8|8|8|W8< \ 888KW8.!.  !:B 2~  !ҹڹ_ 888W8<92>> 888ȋW8<23 8881W8< 888|Wd8< \6Determines whether a specified property is enumerable. ! |55|--A property name.6 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _|88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77|*88{ W8.!.j2+ 92<P= 888W'8<` 8+8+8+i%W08<j 848484 77999  1#{ 1#8p8p$WBd8< \H~Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. ! $55$--Object to test. aJ 66W!WUd8< (8Y8Y W]d8< (8a8aWed8< z8i8iWmd8< _s$8q8qWwd8< X} 66W! Wd8< H88 77I8{8{ 77P 66W!Wd8< }88 77$*8F8FSWd8.!. !{R 1#+e2$>  t!t#"y#1 ##l. !=\t 1#} ]MAdds a property to an object, or modifies attributes of an existing property. ! S55S--Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.a-The property name.M-SDescriptor for the property. It can be for a data property or an accessor property. attributes 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _S88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 88 77SDefineProperty88Wd8< ]Gets the own property descriptor of the specified object. An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. ! 55--"Object that contains the property.a-Name of the property.M  66W!W-d8< (8181 W5d8< (8989W=d8< z8A8AWEd8< _K8I8IWOd8< XU 66W! W[d8< 8_8_ 77cc8S8S 77hhhhPk 66W!Wqd8< U8u8u 77yykkGetOwnPropertyDescriptor88W~d8< _88Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77*88#Wd8< B5Prevents the addition of new properties to an object. ! #55#--Object to make non-extensible.a 66W!Wd8< (88 Wd8< (88W d8< z88Wd8< _#88Wd8< X$ 66W! W*d8< 8.8. 77228"8" 77777P: 66W!W@d8< $8D8D 77HH#:88"WMd8< BSrPrevents the modification of existing property attributes and values, and prevents the addition of new properties. ! "55"--'Object on which to lock the attributes.aU 66W!W`d8< (8d8d Whd8< (8l8lWpd8< z8t8tWxd8< _~"8|8|Wd8< X 66W! Wd8< S88 77T88 77P 66W!Wd8< 88 77"8Q8QWd8< BReturns the names of the own properties of an object. The own properties of an object are those that are defined directly on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. ! 55--(Object that contains the own properties.a 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 8 8  7788 Wd8.!. 2|| 1# j !59*  t!t#`#<# ]!HReturns the names of the enumerable properties and methods of an object. !  55 --Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.a# 66W!W.d8< (8282 W6d8< (8:8:W>d8< z8B8BWFd8< _L 8J8JWPd8< XV 66W! W\d8< !8`8` 77dd"8T8T 77iiiiPl 66W!Wrd8< V8v8v 77zz ll ObjectKeys88Wd8< z88&Wd8< \PReturns a value that indicates whether new properties can be added to an object. ! &55&--a 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _&88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77&*88 Wd8< (88!Wd8< BlPrevents the modification of attributes of existing properties, and prevents the addition of new properties. ! !55!--[a 66W!Wd8< (88 W d8< (88Wd8< z88Wd8< _"!8 8 W&d8< X, 66W! W2d8< 8686 77::8*8* 77???PB 66W!WHd8< ,8L8L 77PP!B88WUd8< B[#Returns the prototype of an object. ! 55-] 66W!Wfd8< (8j8j Wnd8< (8r8rWvd8< z8z8zW~d8< _88Wd8< X 66W! Wd8< [88 77\88 77P 66W!Wd8< 88 778Y8Y 77P 66W!Wd8< t88 77 Z1# jZj t!t#`#<# Z1#  Z 4##  msZms1#  Z 1# Z t!t#"#1 # ## Z1#+ .Z.1#}  NewObject{ 1#88KW8.!.  !:B 2~  !ҹڹ_ 888W8.!.j0  !>w%xu 888q Wd8.!. B ! q 55q - 66W!W d8< (88 Wd8< (88Wd8< z88W#d8< _)q 8'8'W-d8< E3 ! 0 66W!W:d8< B@ ! 55- 66W!WJd8< (8N8N WRd8< (8V8VWZd8< z8^8^Wbd8< ;8f8fWjd8< Xp 66W! Wvd8< @8z8z 77~~A8n8n 77P 66W!Wd8< p88 778>8> Wd8< B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77 88Wd8< B ! 55- 66W!W d8< (8 8  Wd8< (88Wd8< z88W!d8< 8%8%W)d8< X/ 66W! W5d8< 8989 77==8-8- 77BBBPE 66W!WKd8< /8O8O 77SSE880WXd8< B^ ! 0550- 66W!Whd8< (8l8l Wpd8< (8t8tWxd8< z8|8|Wd8< [88Wd8< X 66W! Wd8< ^88 77_88 77P 66W!Wd8< 88 7708\8\Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 8 8  77388 778181 77P 66W!W$d8< 38(8( 77,,q  Z 1#  / 2 1# 88BW7d8< B=^Stop a timer that was previously created with setTimeout(). The callback will not execute. ! B55B--5? 66W!WId8<  8M8MWQd8< (8U8UWYd8<  8]8]Wad8< Xg 66W! Wmd8< =8q8q 77uu>8e8eWzd8< z8~8~ Wd8< (88 77P 66W!Wd8< g88 77B8;8;)Wd8< B ! )55)- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _)88Wd8<  88 77P 66W!Wd8<  88 77)88@Wd8.!. E !fchdircwdgetgidsetgidgetuidsetuid getgroups setgroups initgroups memoryUsagenextTickumask.hrtimeދM(argvexecPathexecArgvversionversionsconfigftitlenã maxTickDepth 66W !Wd8< BNote: this function is only available on POSIX platforms (i.e. not Windows) Sets the group identity of the process. (See setgid(2).) This accepts either a numerical ID or a groupname string. If a groupname is specified, this method blocks while resolving it to a numerical ID. if (process.getgid && process.setgid) { console.log('Current gid: ' + process.getgid()); try { process.setgid(501); console.log('New gid: ' + process.getgid()); } catch (err) { console.log('Failed to set gid: ' + err); } } ! 55--5ɪ 66W!W$d8< _*8(8(W.d8< (8282W6d8<  8:8:W>d8< XD 66W! WJd8< 8N8N 77RR8B8BWWd8< z8[8[ W_d8< (8c8c 77gggPj 66W!Wpd8< D8t8t 77xxj88W}d8< B On the next loop around the event loop call this callback. This is not a simple alias to setTimeout(fn, 0), it's much more efficient. It typically runs before any other I/O events fire, but there are some exceptions. See process.maxTickDepth below. process.nextTick(function() { console.log('nextTick callback'); }); This is important in developing APIs where you want to give the user the chance to assign event handlers after an object has been constructed, but before any I/O has occurred. function MyThing(options) { this.setupOptions(options); process.nextTick(function() { this.startDoingStuff(); }.bind(this)); } var thing = new MyThing(); thing.getReadyForStuff(); // thing.startDoingStuff() gets called now, not before. It is very important for APIs to be either 100% synchronous or 100% asynchronous. Consider this example: // WARNING! DO NOT USE! BAD UNSAFE HAZARD! function maybeSync(arg, cb) { if (arg) { cb(); return; } fs.stat('file', cb); } This API is hazardous. If you do this: maybeSync(true, function() { foo(); }); bar(); then it's not clear whether foo() or bar() will be called first. This approach is much better: function definitelyAsync(arg, cb) { if (arg) { process.nextTick(cb); return; } fs.stat('file', cb); } ! 55--5 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788MWd8< Q5 ! writable55-5 66W!Wd8< _88Wd8< (88W d8<  88Wd8< X 66W! Wd8< 8#8# 77''88W,d8< z8080 W4d8< (8888 77<<<<P? 66W!WEd8< 8I8I 77MM??)88 WRd8< \X !  55 - 66W!Wbd8< _h 8f8fWld8< (8p8pWtd8<  8x8xW|d8< X 66W! Wd8< X88 77Y88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77 E !  778V8VWd8< BReturns an object describing the memory usage of the Node process measured in bytes. var util = require('util'); console.log(util.inspect(process.memoryUsage())); This will generate: { rss: 4935680, heapTotal: 1826816, heapUsed: 650472 } heapTotal and heapUsed refer to V8's memory usage. ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z8 8  W d8< (88 77P 66W!Wd8< 8"8" 77&&88W+d8< B1Note: this function is only available on POSIX platforms (i.e. not Windows) Gets the user identity of the process. (See getuid(2).) This is the numerical userid, not the username. if (process.getuid) { console.log('Current uid: ' + process.getuid()); } ! 55-3 66W!W<d8< _B8@8@WFd8< (8J8JWNd8<  8R8RWVd8< X\ 66W! Wbd8< 18f8f 77jj28Z8ZWod8< z8s8s Wwd8< (8{8{ 77P 66W!Wd8< \88 778/8/Wd8< BNote: this function is only available on POSIX platforms (i.e. not Windows) Reads /etc/group and initializes the group access list, using all groups of which the user is a member. This is a privileged operation, meaning you need to be root or have the CAP_SETGID capability. user is a user name or user ID. extra_group is a group name or group ID. Some care needs to be taken when dropping privileges. Example: console.log(process.getgroups()); // [ 0 ] process.initgroups('bnoordhuis', 1000); // switch user console.log(process.getgroups()); // [ 27, 30, 46, 1000, 0 ] process.setgid(1000); // drop root gid console.log(process.getgroups()); // [ 27, 30, 46, 1000 ] ! 55--5user-5 extra_group 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 7788Wd8< B Note: this function is only available on POSIX platforms (i.e. not Windows) Gets the group identity of the process. (See getgid(2).) This is the numerical group id, not the group name. if (process.getgid) { console.log('Current gid: ' + process.getgid()); } ! 55-  66W!Wd8< _88Wd8< (8"8"W&d8<  8*8*W.d8< X4 66W! W:d8<  8>8> 77BB 8282WGd8< z8K8K WOd8< (8S8S 77WWWPZ 66W!W`d8< 48d8d 77hhZ88ދWmd8< \s ! ދ55ދ- 66W!W}d8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< s88 77t88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77ދE !  778q8qWd8< BnReturns the current working directory of the process. console.log('Current directory: ' + process.cwd()); ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X  66W! Wd8< 88 778 8 Wd8< z8"8" W&d8< (8*8* 77...P1 66W!W7d8<  8;8; 77??188WDd8< BJReturns the current high-resolution real time in a [seconds, nanoseconds] tuple Array. It is relative to an arbitrary time in the past. It is not related to the time of day and therefore not subject to clock drift. The primary use is for measuring performance between intervals. You may pass in the result of a previous call to process.hrtime() to get a diff reading, useful for benchmarks and measuring intervals: var time = process.hrtime(); // [ 1800216, 25 ] setTimeout(function() { var diff = process.hrtime(time); // [ 1, 552 ] console.log('benchmark took %d nanoseconds', diff[0] * 1e9 + diff[1]); // benchmark took 1000000527 nanoseconds }, 1000); ! 55-L 66W!WUd8< _[8Y8YW_d8< (8c8cWgd8<  8k8kWod8< Xu 66W! W{d8< J88 77K8s8sWd8< z88 Wd8< (88 77P 66W!Wd8< u88 778H8HWd8< BChanges the current working directory of the process or throws an exception if that fails. console.log('Starting directory: ' + process.cwd()); try { process.chdir('/tmp'); console.log('New directory: ' + process.cwd()); } catch (err) { console.log('chdir: ' + err); } ! 55--5) 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!W d8< 88 7788(Wd8< \ ! (55(- 66W!W)d8< ?8-8-W1d8< (8585W9d8<  8=8=WAd8< XG 66W! WMd8< 8Q8Q 77UU 8E8EWZd8< z8^8^ Wbd8< (8f8f 77jjjjPm 66W!Wsd8< G8w8w 77{{(mmE~ !  7788Wd8< \ ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77E ! 66W! W8<$ 888 77888888Wd8< B Ends the process with the specified code. If omitted, exit uses the 'success' code 0. To exit with a 'failure' code: process.exit(1); The shell that executed node should see the exit code as 1. ! 55--5d 66W!Wd8< 88W!d8< (8%8%W)d8<  8-8-W1d8< X7 66W! W=d8<  8A8A 77EE8585WJd8< z8N8N WRd8< (8V8V 77ZZZP] 66W!Wcd8< 78g8g 77kk]8 8 Wpd8< BvSets or reads the process's file mode creation mask. Child processes inherit the mask from the parent process. Returns the old mask if mask argument is given, otherwise returns the current mask. var oldmask, newmask = 0644; oldmask = process.umask(newmask); console.log('Changed umask from: ' + oldmask.toString(8) + ' to ' + newmask.toString(8)); ! 55--5maskx 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< v88 77w88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 778t8tWd8< BNote: this function is only available on POSIX platforms (i.e. not Windows) Sets the user identity of the process. (See setuid(2).) This accepts either a numerical ID or a username string. If a username is specified, this method blocks while resolving it to a numerical ID. if (process.getuid && process.setuid) { console.log('Current uid: ' + process.getuid()); try { process.setuid(501); console.log('New uid: ' + process.getuid()); } catch (err) { console.log('Failed to set uid: ' + err); } } ! 55--5ɪ 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 778 8 W!d8< z8%8% W)d8< (8-8- 77111P4 66W!W:d8< 8>8> 77BB488 WGd8< \M !  55 - 66W!WWd8< _] 8[8[Wad8< (8e8eWid8<  8m8mWqd8< Xw 66W! W}d8< M88 77N8u8uWd8< z88 Wd8< (88 77P 66W!Wd8< w88 77 E !  778K8K Wd8< \ !  55 - 66W!Wd8< _ 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77    P  66W!Wd8< 88 77   388ãWd8< \% ! ã55ã- 66W!W/d8< ۣ8383W7d8< (8;8;W?d8<  8C8CWGd8< XM 66W! WSd8< %8W8W 77[[&8K8KW`d8< z8d8d Whd8< (8l8l 77ppppPs 66W!Wyd8< M8}8} 77ãss_win328#8#fWd8< \ ! f55f- 66W!Wd8< }88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77f88.Wd8< B-Number of seconds Node has been running. ! .55.- 66W!Wd8< F88W d8< (8 8 Wd8<  88Wd8< X 66W! W%d8< 8)8) 77--88W2d8< z8686 W:d8< (8>8> 77BBBPE 66W!WKd8< 8O8O 77SS.E88WXd8< B^Note: this function is only available on POSIX platforms (i.e. not Windows) Returns an array with the supplementary group IDs. POSIX leaves it unspecified if the effective group ID is included but node.js ensures it always is. ! 55-` 66W!Wid8< _o8m8mWsd8< (8w8wW{d8<  88Wd8< X 66W! Wd8< ^88 77_88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 778\8\Wd8< BNote: this function is only available on POSIX platforms (i.e. not Windows) Sets the supplementary group IDs. This is a privileged operation, meaning you need to be root or have the CAP_SETGID capability. The list can contain group IDs, group names or both. ! 55--5groups 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z8 8  Wd8< (88 77P 66W!W!d8< 8%8% 77))88W.d8< \4 ! 55- 66W!W>d8< _D8B8BWHd8< (8L8LWPd8<  8T8TWXd8< X^ 66W! Wdd8< 48h8h 77ll58\8\Wqd8< z8u8u Wyd8< (8}8} 77P 66W!Wd8< ^88 77E !  778282nWd8< \ ! n55n- 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77nE !  7788 W d8< \ !  55 - 66W!Wd8< _  88W$d8< (8(8(W,d8<  8080W4d8< X: 66W! W@d8< 8D8D 77HH8888WMd8< z8Q8Q WUd8< (8Y8Y 77]]]]P` 66W!Wfd8< :8j8j 77nn ``Eq !  77tt88Wyd8< BSend a signal to a process. pid is the process id and signal is the string describing the signal to send. Signal names are strings like 'SIGINT' or 'SIGHUP'. If omitted, the signal will be 'SIGTERM'. See kill(2) for more information. Note that just because the name of this function is process.kill, it is really just a signal sender, like the kill system call. The signal sent may do something other than kill the target process. Example of sending a signal to yourself: process.on('SIGHUP', function() { console.log('Got SIGHUP signal.'); }); setTimeout(function() { console.log('Exiting.'); process.exit(0); }, 100); process.kill(process.pid, 'SIGHUP'); Note: SIGUSR1 is reserved by node.js. It can be used to kickstart the debugger. ! 55--5f-5 66W!Wd8< 88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 778}8}Wd8< \ ! 55- 66W!Wd8< _88Wd8< (88Wd8<  8 8 W d8< X 66W! Wd8< 88 77!!88W&d8< z8*8* W.d8< (8282 776666P9 66W!W?d8< 8C8C 77GG99EJ !  77MM88fWRd8< BX]This causes node to emit an abort. This will cause node to exit and generate a core file. ! f55f-Z 66W!Wcd8< ~8g8gWkd8< (8o8oWsd8<  8w8wW{d8< X 66W! Wd8< X88 77Y88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77f8V8VWd8< \ ! 55- 66W!Wd8< _88Wd8< (88Wd8<  88Wd8< X 66W! Wd8< 88 7788Wd8< z88 Wd8< (8 8  77    P 66W!Wd8< 88 77E! !  77$$88 W)d8< \/ !  55 - 66W!W9d8< _? 8=8=WCd8< (8G8GWKd8<  8O8OWSd8< XY 66W! W_d8< /8c8c 77gg08W8WWld8< z8p8p Wtd8< (8x8x 77||||P 66W!Wd8< Y88 77 8-8- 77$ 1#88-Wd8< B ! -55-- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _-88Wd8< E ! 0 66W!Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< ;88Wd8< X 66W! Wd8< 88 778 8  77!!!P$ 66W!W*d8< 8.8. 7722$88 W7d8< B> !  55 - 66W!WHd8< (8L8L WPd8< (8T8TWXd8< z8\8\W`d8< 8d8dWhd8< Xn 66W! Wtd8< >8x8x 77||?8l8l 77P 66W!Wd8< n88 77 8;8;Wd8< B ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77880Wd8< B ! 0550- 66W!Wd8< (8 8  Wd8< (88Wd8< z88Wd8< [8"8"W&d8< X, 66W! W2d8< 8686 77::8*8* 77???PB 66W!WHd8< ,8L8L 77PP0B88WUd8< \[ ! 55- 66W!Wed8< (8i8i Wmd8< (8q8qWud8< z8y8yW}d8< 88Wd8< X 66W! Wd8< [88 77\88 77P 66W!Wd8< 88 7738Y8Y 7788 77P 66W!Wd8< 88 77-882Wd8< \KGets the unencoded version of an encoded Uniform Resource Identifier (URI). ! 2552--$ encodedURI 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _288Wd8< X  66W! Wd8< 88 7788 77P  66W!W&d8<  8*8* 77..2  388W3d8.!.O 4# # j !,._-  t!t#tK## E> !  66W! WEd8< \KCConverts a JavaScript Object Notation (JSON) string into an object. !  55 --A valid JSON string.'-A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is.reviverM 66W!W[d8< (8_8_ Wcd8< (8g8gWkd8< z8o8oWsd8< mD8w8wW{d8< X 66W! Wd8< K88 77L88 77P 66W!Wd8< 88 77 E !  778I8IWd8.!.O 4# # j !,._-  t!t#tK#%#% \JConverts a JavaScript value to a JavaScript Object Notation (JSON) string. ! 55--@A JavaScript value, usually an object or array, to be converted. 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< C88Wd8< X 66W! Wd8< 88 7788 77P 66W!W d8< 88 77388 778787Wd8.!. # 1#  1#%  4#) #* j/ 4#% #&  B* ! 55- 66W!W4d8< (8888 W<d8< (8@8@WDd8< z8H8HWLd8< _R8P8PWVd8< E\ ! 0 66W!Wcd8< Bi ! 55- 66W!Wsd8< (8w8w W{d8< (88Wd8< z88Wd8< ;88Wd8< X 66W! Wd8< i88 77j88 77P 66W!Wd8< 88 778g8g Wd8< B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77   P 66W!Wd8< 88 77 *88W"d8< B( ! 55- 66W!W2d8< (8686 W:d8< (8>8>WBd8< z8F8FWJd8< 8N8NWRd8< XX 66W! W^d8< (8b8b 77ff)8V8V 77kkkPn 66W!Wtd8< X8x8x 77||n8&8&0Wd8< B ! 0550- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< [88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77088Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 8 8 Wd8< X 66W! Wd8< 8 8  77$$88 77))))P, 66W!W2d8< 8686 77::,,388 77??8Z8Z 77DDDPG 66W!WMd8< \8Q8Q 77UUGZ4#) #* jZj4#% #& 9Z94# #  Z 1# Z1#% X9 !-C> 4# # 8 8 DWh8<` 18l8l8l;Wqd8< \w ! ;55;- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _;88Wd8< X 66W! Wd8< w88 77x88 77P 66W!Wd8< 88 77;38u8u$W8<` 3888W8< 888W8<`N ?888W8<` +888Wd8.!.  1#GG 1#_O 1#  !  t!t#M2#[# j !j0z4r09  t!t#[#[#J#=. 1# 888W d8< \  ! 8558--A numeric value. 66W!W d8< (8" 8"  W& d8< (8* 8* W. d8< z82 82 W6 d8<  8: 8: W> d8< XD  66W! WJ d8<  8N 8N  77R R  8B 8B  77W W W W PZ  66W!W` d8< D 8d 8d  77h h 8Z Z *8 8  Wm d8.!. \s ZGets the unencoded version of an encoded component of a Uniform Resource Identifier (URI). !  55 --encodedURIComponentu  66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< _  8 8 W d8< X  66W! W d8< s 8 8  77  t 8 8  77    P  66W!W d8<  8 8  77      Z 1#c    3 2 1#c 8q 8q 'W d8.!. j2)  t!t# L#L#G8 8 7W d8< \  ! 7557--Any numeric value. 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< 8 8 W d8< X  66W! W d8<  8$ 8$  77( (  8 8  77- - - - P0  66W!W6 d8<  8: 8:  77> > 70 0 *8 8 CWC d8< BI Run callback cb repeatedly every ms milliseconds. Note that the actual interval may vary, depending on external factors like OS timer granularity and system load. It's never less than ms but it may be longer. The interval must be in the range of 1-2,147,483,647 inclusive. If the value is outside that range, it's changed to 1 millisecond. Broadly speaking, a timer cannot span more than 24.8 days. Returns an opaque value that represents the timer. ! C55C--5ս-5wK  66W!WV d8<  8Z 8Z W^ d8< (8b 8b Wf d8<  8j 8j Wn d8< Xt  66W! Wz d8< I 8~ 8~  77  J 8r 8r W d8< z8 8  W d8< (8 8  77   P  66W!W d8< t 8 8  77  C 8G 8G /W d8< B  !  multiline lastMatch lastParen leftContext rightContext/55/- 66W ! W d8< \  !  55 - 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< _  8 8 W d8< X  66W! W d8<  8 8  77   8 8  77    P  66W!W d8<  8 8  77     &8 8 d8< B'  !  55 - 66W!W1 d8< (85 85  W9 d8< (8= 8= WA d8< z8E 8E WI d8<  8M 8M WQ d8< XW  66W! W] d8< ' 8a 8a  77e e ( 8U 8U  77j j j Pm  66W!Ws d8< W 8w 8w  77{ {  m 8% 8%  W d8< B  !  55 - 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< _  8 8 W d8< X  66W! W d8<  8 8  77   8 8  77   P  66W!W d8<  8 8  77    8 8 W d8< B  ! 55- 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< _ 8 8 W d8< X  66W! W d8<  8# 8#  77' '  8 8  77, , , P/  66W!W5 d8<  89 89  77= = / 8 8 WB d8< (BI  ! 55- 66W!WS d8< (8W 8W  W[ d8< (8_ 8_ Wc d8< z8g 8g Wk d8< ;8o 8o Ws d8< Xy  66W! W d8< I 8 8  77  J 8w 8w  77   P  66W!W d8< y 8 8  77   8F 8F  W d8< (B  !  55 - 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< _  8 8 W d8< X  66W! W d8<  8 8  77   8 8  77   P  66W!W d8<  8 8  77    8 8  W d8< B  !  55 - 66W!W d8< (8 8  W d8< (8 8 W$ d8< z8( 8( W, d8< _2  80 80 W6 d8< X<  66W! WB d8<  8F 8F  77J J  8: 8:  77O O O PR  66W!WX d8< < 8\ 8\  77` `  R 8 8  We d8< Bk  !  55 - 66W!Wu d8< (8y 8y  W} d8< (8 8 W d8< z8 8 W d8< _  8 8 W d8< X  66W! W d8< k 8 8  77  l 8 8  77   P  66W!W d8<  8 8  77    8i 8i W d8< _ /B  ! 55- 66W!W d8< (8 8  W d8< (8 8 W d8< z8 8 W d8< 8 8 W d8< X  66W! Wd8<  8 8  77   8 8  77P 66W!Wd8<  88 77##8 8 W(d8< zB/ ! 55- 66W!W9d8< (8=8= WAd8< (8E8EWId8< z8M8MWQd8< -@8U8UWYd8< X_ 66W! Wed8< /8i8i 77mm08]8] 77rrrPu 66W!W{d8< _88 77u8,8,Wd8< E !<  = ignoreCase lastIndex source  66W !Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77388 Wd8< B !  55 - 66W!W d8< (88 Wd8< (88Wd8< z88W"d8< 8&8&W*d8< X0 66W! W6d8< 8:8: 77>>8.8. 77CCCPF 66W!WLd8< 08P8P 77TT F 88WYd8< \_ ! 55- 66W!Wid8< (8m8m Wqd8< (8u8uWyd8< z8}8}Wd8< _88Wd8< X 66W! Wd8< _88 77`88 77P 66W!Wd8< 88 77*8]8]Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 7788 Wd8< B!}Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. !  55 --CThe String object or string literal on which to perform the search._ # 66W!W.d8< (8282 W6d8< (8:8:W>d8< z8B8BWFd8< 8J8JWNd8< XT 66W! WZd8< !8^8^ 77bb"8R8R 77gggPj 66W!Wpd8< T8t8t 77xx j88 W}d8< \\Returns a Boolean value that indicates whether or not a pattern exists in a searched string. !  55 --&String on which to perform the search._  66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77 *88=Wd8< \ ! =55=- 66W!Wd8< (88 Wd8< (88Wd8< z88W d8< _=8 8 Wd8< X 66W! Wd8< 8#8# 77''88 77,,,,P/ 66W!W5d8< 8989 77===//*88 WBd8< \H !  55 - 66W!WRd8< (8V8V WZd8< (8^8^Wbd8< z8f8fWjd8<  8n8nWrd8< Xx 66W! W~d8< H88 77I8v8v 77P 66W!Wd8< x88 77 *8F8F<Wd8< B ! <55<- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _<88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77<88Wd8< \ ! 55- 66W!Wd8< (88 Wd8< (88W"d8< z8&8&W*d8< 8.8.W2d8< X8 66W! W>d8< 8B8B 77FF 8686 77KKKKPN 66W!WTd8< 88X8X 77\\NN388 77aa88 Wfd8< Bl !  55 - 66W!Wvd8< (8z8z W~d8< (88Wd8< z88Wd8< _ 88Wd8< X 66W! Wd8< l88 77m88 77P 66W!Wd8< 88 77 8j8j 77P 66W!Wd8< 88 77/8 8  77]Combines two or more arrays. ! 55--item-item... 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 8 8 Wd8< X 66W! Wd8< 88 77##88 77((((P+ 66W!W1d8< 8585 7799++ ArrayConcat,2zW<d8.!.G2JJ 1#%j5 1# B 8@8@BI !  55 - 66W!WSd8< (8W8W W[d8< (8_8_Wcd8< z8g8gWkd8< 8o8oWsd8< Xy 66W! Wd8< I88 77J8w8w 77P 66W!Wd8< y88 77 ytdlT\Wd8< I88\JDetermines whether all the members of an array satisfy the specified test. ! 55--A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array. callbackfn-An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.thisArg 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77*W d8< 8 8 BZReturns the elements of an array that meet the condition specified in a callback function. ! 55--A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.- 66W!Wd8< (8#8# W'd8< (8+8+W/d8< z8383W7d8< _=8;8;WAd8< XG 66W! WMd8< 8Q8Q 77UU8E8E 77ZZZP] 66W!Wcd8< G8g8g 77kk]GBN^d0=8 (Wnd8< 8r8r]v;Performs the specified action for each element in an array. ! 55--|A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.-x 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< v88 77w88 77P 66W!Wd8< 88 77 ArrayForEachWd8.!. v. 1#FZ88\AReturns the index of the first occurrence of a value in an array. ! 55--!The value to locate in the array. searchElement-dThe array index at which to begin the search. If fromIndex is omitted, the search starts at index 0. fromIndex 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 8 8 Wd8< X 66W! Wd8< 88 77""88 77''''P* 66W!W0d8< 8484 7788**+1W;d8.!. 2|| 1#/8?8?\FNAdds all the elements of an array separated by the specified separator string. ! :55:--A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.H 66W!WSd8< (8W8W W[d8< (8_8_Wcd8< z8g8gWkd8< P8o8oWsd8< Xy 66W! Wd8< F88 77G8w8w 77P 66W!Wd8< y88 77:3ytdPlT\Wd8.!. F 1#788\JReturns the index of the last occurrence of a specified value in an array. ! 55---xThe array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array. 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77Wd8< 8 8 W d8< \ ! 55- 66W!Wd8< (8!8! W%d8< (8)8)W-d8< z8181W5d8< -@8989W=d8< XC 66W! WId8< 8M8M 77QQ8A8A 77VVVVPY 66W!W_d8< C8c8c 77ggYY888888C>JZ`.-@6&BqnCalls a defined callback function on each element of an array, and returns an array that contains the results. ! 55--A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.-s 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< q88 77r88 77P 66W!Wd8< 88 77Wd8.!. qj2*9 4#`#=788]5Removes the last element from an array and returns it ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X  66W! Wd8< 88 778 8  77P" 66W!W(d8<  8,8, 7700""ArrayPopFunction #)W3d8< 8787];JAppends new elements to an array, and returns the new length of the array. ! X55X--New element of the Array.-C= 66W!WId8< (8M8M WQd8< (8U8UWYd8< z8]8]Wad8< _gX8e8eWkd8< Xq 66W! Wwd8< ;8{8{ 77<8o8o 77P 66W!Wd8< q88 77XArrayPushFunctionqlxZgbJRWd8.!.  !|# | 4#t# 921@9@ 1#) ; !||O  t!t#+#/#W 688BCalls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. ! 55--A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.-If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. initialValue 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77Wd8< 8 8 BCalls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. ! 55--A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.- 66W!Wd8< (8"8" W&d8< (8*8*W.d8< z8282W6d8< _<8:8:W@d8< XF 66W! WLd8< 8P8P 77TT8D8D 77YYYP\ 66W!Wbd8< F8f8f 77jj\FAM]c/<7'Wmd8< 8q8qBu"Reverses the elements in an Array. ! 55-w 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< u88Wd8< X 66W! Wd8< u88 77v88 77P 66W!Wd8< 88 77uB7Removes the first element from an array and returns it. !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 88Wd8< X 66W! Wd8< 8 8  7788 77P 66W!Wd8< 8 8  77$$ W'd8< 8+8+2<7CSYS`[CKW/d8.!.  1#@ 1#l{ 1#p 1#/# 28383\?\Determines whether the specified callback function returns true for any element of an array. !  55 --A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array.-A 66W!WMd8< (8Q8Q WUd8< (8Y8YW]d8< z8a8aWed8< _k 8i8iWod8< Xu 66W! W{d8< ?88 77@8s8s 77P 66W!Wd8< u88 77 *up|^kfNVWd8< ?88BSorts an array. !  55 --The function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. compareFn 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _ 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77 Wd8< 88B vRemoves elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. !  55 --KThe zero-based location in the array from which to start removing elements.;  66W!Wd8< (88 Wd8< (8"8"W&d8< z8*8*W.d8< _4 8282W8d8< X> 66W! WDd8<  8H8H 77LL 8<8< 77QQQPT 66W!WZd8< >8^8^ 77bb T>9EU['4/Wed8<  8i8iBm !  55 - 66W!Wwd8< (8{8{ Wd8< (88Wd8< z88Wd8<  88Wd8< X 66W! Wd8< m88 77n88 77P 66W!Wd8< 88 77  xWd8< m88\,Returns a string representation of an array. ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 77  88 77P 66W!Wd8< 88 77!!3W$d8< 8(8(B,.Inserts new elements at the start of an array. ! 55--,Element to insert at the start of the Array.. 66W!W9d8< (8=8= WAd8< (8E8EWId8< z8M8MWQd8< mD8U8UWYd8< X_ 66W! Wed8< ,8i8i 77mm-8]8] 77rrrPu 66W!W{d8< _88 77u_Zfv|JmDR:BWd8< ,88Wd8.!.  1#@ 1#l { 1#p88P 66W!Wd8< 88 77 Wd8< z88_ Wd8< 88Wd8< (88Wd8< (88\ !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 8 8  77  88 77P 66W!Wd8< 88 77## &mQ ٷɷѷ^yiqYMHTdj8/@(0L:GB*2RKFRbh4A<$,0+7GM&! O}kxs[cJTp}x`hO3fam}O\W?G.% ,<B"28 .a\hx~JWR:B) ;6BRX&.lxgjv~eht|c =8DTZ&3.*^Yeu{GTO7?%WR^nt@MH08BytbojRZ=%h}cNIUek7D?'/YwgoT !_rzZAup|^kfNV<J|jwrZbEzu '7=  *%1AG   )/*0}x7jeqS`[CK294@PV"*FMpkSzu A<HX^,mD4$'".>D grza|#3972>NT"*HUP1,6X C>E@L\b.;6&u¿o3e`l|N[V>F.Կ !߿ϿԾ߾Ͼ X& 66W! W,d8<  8080 7744 W7d8< &8;8;-P? 66W!WEd8< &8I8I 77MM FWPd8.!. z 1#( 8T8T_Z W\d8.!. Z 1#+8`8`Wfd8< (8j8jWnd8< (8r8r]vCalls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function. ! 55--)The object to be used as the this object.-0A set of arguments to be passed to the function.argArrayx 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< _88Wd8< X 66W! Wd8< v88 77w88 77P 66W!Wd8< 88 77 ApplyFunctionWd8.!. v 1#5&88BFor a given function, creates a bound function that has the same body as the original function. The this object of the bound function is associated with the specified object, and has the specified initial parameters. ! @55@--FAn object to which the this keyword can refer inside the new function.-5A list of arguments to be passed to the new function. 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 8 8 Wd8< X 66W! Wd8< 88 77""88 77'''P* 66W!W0d8< 8484 7788@*+1W;d8.!. 1#-a 1# 8?8?BGPCalls a method of an object, substituting another object for the current object. ! 55--,The object to be used as the current object.-/A list of arguments to be passed to the method.I 66W!WVd8< (8Z8Z W^d8< (8b8bWfd8< z8j8jWnd8< _t8r8rWxd8< X~ 66W! Wd8< G88 77H8|8| 77P 66W!Wd8< ~88 77~ygtoW_ B !  55 - 66W!Wd8< (88 Wd8< (88Wd8< z88Wd8< 88Wd8< X 66W! Wd8< 88 7788 77P 66W!Wd8< 88 77 Wd8< 88\ ! 55- 66W!Wd8< (88 Wd8< (88Wd8< z8#8#W'd8< 8+8+W/d8< X5 66W! W;d8< 8?8? 77CC8383 77HHHHPK 66W!WQd8< 58U8U 77YYKK350<LR (W\d8< 8`8`I>K|lt\dF C4g̱ 5 ?:FV\(50 =8DTZ&3.׳ "(ҳLGSci5B=%-tųon{i:niuWd_GO5֯ "(ѯٲԲ²ϲʲٱ "(Ա,2 ܵBvq}_lgOW=ٴԴ´ϴʴհаܰ˰ư޶ٶǶԶ϶:rmy[hcKS5{ɵϵvDytbojRZ? :5AQW%-iu}d"UP\lr>KF.6*0BxsaniQY=s RX?G,2 ntTO[kq=JE-5I}xfsnV^D &,c~nv]GBN^d9idpT\DL4p{i-c^jzLYT<D( UP\lr>KF.6m[wgoV  A<HX^,4$ 4lgsUb]EM/,'3CI" Sq~yaiN$+;A H}xfsnV^C!VQ]ms?LG/7 %+>niuYaIQ8V[v~fn,'3CI &VQ]msAI19 >Csnz^fNV+10+7GM# !TO[kq?G/7 06 Z_zjr CHxsc kS[~83?OU#+ )  C             I y t    d l T \                0 6                    < 7 C S Y % 2 -    lwg/_Zfv|JR:B' W R ^ n t B J 2 :        k         v ~ f   tofrza.4  %+*_Zfv|HUP8@%Ato{_gOW< <7CSY'/Uq~yaiP:5AQW#0+F{vdqlT\A}2-9IO% 72>NT"_*MHTdj6C>&.FAM]c/<7' fxa&!-=C:ojvZbJR5A<HX^*72" -3 |wiu}dupGzucpkS[B=pkwYfaIQ8Dwr~`mhPX? "(,2  Yfqya *0%UP\lr@H08 'TEKBOJ2:"\it|d-3 (XS_ouCK3;#*WHNERM5=3@pkw[cKS; ^yiqY/*6FL" .%)$  !'s           n RMYio;HC+3D?K[a-:5% ήԮVuemQ   ! 1 7       D ? K [ a / 7  '    ּ޼ƼμwrXs{ck8e-Nd  77fffQi5 ! readable55l-5 66W!Wtd8< _zl8x8xW~d8< (88Wd8<  88Wd8< X 66W! Wd8< i88 77j88Wd8< z88 Wd8< (88 77P 66W!Wd8< 88 77l)zu  @F-5i@I]hiRP!sw/Db}` `]HJlE&0j,"64&A%N);#*-4=78 ?"-5*+20>'01<9Z1.~(^3j?_AkGCFB`Gї@eIRJK=LUM~NcMZZJKJO#PPPKOOMRsQQ^,T=VaCfRS>bbcub0dAVhARRSSrϳ"ͣcbͺҷ jnImSoFk#pYq8њ>a<`Ш%~`٢rQ ~6t1K|-Չ?d}A[$y6_^p7  v #  Vb.=W W!TyWXKT]3Y[YL \C[WXXn]Vm!^T4UUV~VV\WW9XXYYY`ZZ;[[\\\\]]6^^~__[``4aab|bbUcc.ddeleBff ggahhi jyj[kN(ONsPPQ SrvZv5wasutusHn}||{|}=[b\9ˏ~q7˚_˟y?ۣpF\ǡ23X.;6BbhO&W Sp}x`hN/N[VboA<Fw*)HUP\|i;6@q$;A(0}xXt|dlS  28' *72>^dK"S '4/;[aHP7D?KkqX*%/`1O\WcpB=Gx, 5;"*^|ojtY" z~vq&FL3 ;Jhup|[V`Ens~~:GBNnt[*2cJ:@'//4Q^YerD?Iz!SXu}hcmq -:5AagN %VHMjwr~]Xb  %@MHTtza08i*/LYT`m?:Duͽ & ܽȽ=Zgbn{JR8I g t o {    W _  D N_haha_T@T9@o;__, `5@_h.i_9oG_H _* __gG_[D:\all in one\Git\NodeJsStudy\ExpressApp1\NodejsConsoleApp1\node_modules\express\lib\routerш_____8___S_ %-5CKS[cksW8<. 888*W8.!.. 4x 888 W 8.!.2$>  !{R . !=\t 888C_}?z\_y!h_N;_ $_"_$E_&<_(V_*_,:~N_.[_W08.!.  !2 j !%5,.  848484_>d=_@(_B?[_D_F% _HЎ_J)_Lz_NJ_Pi_R_T44_V~_X_Z_\/:_^cJW`8.!.$ 2mx mss 8d8d8d_l_n_p_r_t_vI(*e2(Sx\ _x mTz@T|@_~_ _s_s_u|W8.!.j !59*  2|| 888_N____%t_:_:_o;K____!__-__r_5 _^ _ |-._ _!_O!U_!_"_"_"_"_"Qg_H$_$wKT_Z%(q__&W8<j 888_&1_''_1'_:'f_#f_U)#_i_rzzz_T___Afktw1W8< !x-x 888W8< !u>w%x 8 8 8 W 8< !u>w%x 8 8 8 rW 8< v 8 8 8 W 8<t 8 8 8 W# 8< 8' 8' 8' |9|   u88=% o04  (<  fn X :  77/ / 88  774 4  888    &8<  ! 1#1#8< 8< 8<    B&8<  8F 8F 8F     bd8<  1#P}8O 8O  w w ^ ^d8<  |8V 8V  s 88B0  : 4##8?8?8?  c &8< 2B: 1#8b 8b 8b   d @&8< 2B:  t!t#/##8k 8k 8k   f C&8<  D8t 8t 8t   0 &8< 2B: 1# 8{ 8{ 8{   e &8< 2B: 1#4##8 8 8   8    BCd8<  s8 8 ;; s  ; &8< : 1#4##8 8 8   8  ;y &8< : 1# 8 8 8   e  ;Cr &8<  D8 8 8   0  ;@i &8< :  t!t#/##8 8 8   f  ;` &8< : 1#8 8 8   d  ;=&8< : 4##8 8 8   c d8<  s8 8 CC     ! 8787cP s cd8<  ! 8 8 m 888  m &8< 2 1#8 8 8    @&8< 2  t!t###r8 8 8    &8< 2 1#8 8 8    &8< 2 1#4#0#8 8 8   u    d8<  s8!8! s    &8<  1#4#0#8!8!8!  u   &8<  1#8!8!8!    @ &8<   t!t###r8!!8!!8!!     &8<  1#8*!8*!8*!    X&8<  83!83!83!  m d8<  s8:!8:!    88  K&8<  !  t!t###n###8E!8E!8E!   &8<   t!t###n###8N!8N!8N!    &8<  1# t!t###A#1#s8W!8W!8W!  c d888 1# t!t###A#1#s888  c KC!d888 s25  KC!&8<   t!t###n###8o!8o!8o!    &8<  1# t!t###A#1#s8x!8x!8x!  c d888 8}8}8} [W!d8<   t!t#L # # # # "38!8! NW!d8< !u>w%x 4#+ #- 1# "|8!8! XW!d8<  !:B 1# 8!8! W!8<ҹ 8!8!8!  W!d8< 23+ 1#! 1#l ͺ8!8! W!d8<   8!8! 7W!8<  ! 8!8!8!  W!d8<   !+  i}3 1# 8!8! W!d8< 23+  t!t#8 # #j # # 1# "8!8! W!d8<  1# 38!8! bW!d8<  ! 4# #C 4#1 #A "8!8!  77!! p8o8o8o  &8<  1#J1#8!8!8!    &8<  1# (4## 8"8"8"   d888 s  t!t#n#R###| 888  ?a" 66W!W"d8<  X#" 66W! W)"d8<  "8-"8-"  771"1" "8!"8!" W6"d8<   8:"8:"  77>">">" PA" 66W!WG"d8<  #"8K"8K"  77O"O" A"d888 d888 s"  t!t#l #H #S##|}88 W]"d8<   8a"8a"  77e"e"e" ||.Z.1#c Z1#I-  Z t!t#l #H #S##|#3 h"d888 bc!bb| 0c i i i ( ( (  st"d8< 8z"8z"  [&8< w" 4##8"8"8"   d8<  |8"8"x"i w" 4##888   d8<  |8"8"||$ d!&8< # 1#  t!t# # # 8"8"8"  ` &8< # 1#E A1# 38"8"8"  X&8< # 1#  t!t# #2 # 8"8"8"  f~&8< # 1# 4# #( s8"8"8"  &8< # 1# 1# 8"8"8"  u &8< # 1#u (4# # 8"8"8"  I&8<  w~8"8"8"  $ # x~d8<  |8"8"  !  $ "P D L   | z} |i   ! |x #   " $ w~P   } } }i  "" sx~ 1#"4# # 8 8 8  < d8<  1#"R" 66W!W"d8.!.  1#". 1#e{ 1#8#8#  77 # #  8"8"d8<  8#8#p&8< 2#  1#D4# #%  8#8#8#  D &8< 2#  1#4# # 28"#8"#8"#  T d8<  1#L}8,#8,#&8<  !w" 1#04##83#83#83#  / d8<  8=#8=#.d8<  38C#8C#z&8<  1#d1#H 8I#8I#8I#  L d&8< 2  t!t#l #H #S##|#38R#8R#8R#  i bd8<  1#P}8[#8[#&8< 2#  1#$4#$ #Q8b#8b#8b#  \ ||"""  "6. !..   { 6m# !l""^"}i~|}}}-}} } }8}H}}'~ ~~~2~B~ w~~~~~~~~~"7"#""*"B"H"/:R~}~q~||>}}_~}}8~~|}~~~~~Z@I!(|(  ls  ! 1#'  1#1D8 8   Wz#d8<   8~#8~# NW#8< !u>w%x 8#8#8# XW#8<  !:B 8#8#8# W#d8.!.ҹ 1# 2  1#U58#8#  W#8< 23+ 8#8#8# 7W#d8.!.  ! 1#$  1#8#8#  W#8<   !+  i}3 8#8#8# W#8< 23+ 8#8#8# bW#8<  ! 8#8#8#  77##  8 8  W#d8<   8#8#  77### ttZ4#C+#i-  Z 4# #%  Z t!t#;#"#U##1# #d8.!.  s2  2#  8#8# bc!bb s x\c d8.!.  s 8#8#bks Gjciobs K3c}Hbs c d8< 2 s8 $8 $b»s 6Ѯcƻ    i 1#O 4#O+R#u-O&*8 8 W$d8< 4#O+R#u-O8$8$)W#$d8< 4#O+R#u-O&8'$8'$ 77,$,$s x\#   [x&8<   t!t#?##l#A84$84$84$     &8<  4#G# 8=$8=$8=$     &8<   t!t###P8F$8F$8F$      &8<  1#y4#1#O 8O$8O$8O$   d8<  s8Y$8Y$    i} 1#y4#1#O 8 8 8   [x     d8<  s8e$8e$;, !S  ,m 0 ;   ! ͺS    5m 0 D       sbs  $   [&8<   t!t#?##l#A8}$8}$8}$     &8<  4#G#8$8$8$     &&8<   t!t###P8$8$8$     0&8<  1#y4#1#O8$8$8$   d8<  s8$8$     i} 1#01#\8 8 8   .d8<  38$8$p&8<  !  i}   t!t#;#"#U##1# 8$8$8$    &8< 23+ 1#s01#1 p8$8$8$   d8<  1#R$ 66W!W$d8.!.  1#  { 1#  1#L8$8$  77$$   8$8$d8<  8$8$5 &8< 23+ 1# 8$8$8$  S  &8<  !  i} 1#&1# 8$8$8$    ;,i$j$   $6. !. {    6$ !K$ $ #  {#s!DmOJ`x5r@;G}  ##!!!!ͺۺ!!#~V#Yc#O#!!#z!#!  ls 23+ 1#1 ! !j  t!t#M+#)# !o  t!t#91#.#x) G 2#   t!t#Q# #$ # 8 8 S 8]@< o XgQ $ &"]aI  1 0  77%%%%@@@"8 8 W%8< 8%8%8%W!%8< v 8%%8%%8%%XW*%d8<4x 1# 1#x8.%8.%:W4%d8< 1#c }88%88%W=%d8< !u>w%x 1#1#\w8A%8A%"WH%8< !u>w%x 8L%8L%8L%NWR%d8< 1#- "8V%8V%IW[%d8.!.t 4# 4# ' 1#' 8_%8_%0Wf%8< !x-x 8j%8j%8j%Wp%d8< Au8t%8t% 77x%x%x%-u-uZ1#<  .Z.1#{ Z t!t#|.##-#'## #c  {%d8< u8%8% bc!bc  { 1# t!t###l8 8 8    5x  d8< ,u8%8%Px!v|ӹ(d!a&8<2(([[ %% nsa% 66W!W%d8< X% 66W! W%d8< %8%8% 77%%%8%8%W%d8<  8%8% 77%%%P% 66W!W%d8< %8%8% 77%%"%Z1# %d888 bc!bb c ((([[[ %%% s%d8< !>w%xu 8%8%  %&8<2%% 1#24#s3#48%8%8% =&8<% 1#24#s3#48%8%8% = %&8<2%%  t!t#4#4#[4#k4#3#x3#E3#28&8&8& &8<%  t!t#4#4#[4#k4#3#x3#E3#28&8&8&  %&8<2%% 1#3 t !t#H4#P4#4#4#b4#r4#C4#3#38&8&8& [&8<% 1#3 t !t#H4#P4#4#4#b4#r4#C4#3#38!&8!&8!& [ %1&8<2%%  t!t#3#W3#3#2#28+&8+&8+& &8<%  t!t#3#W3#3#2#284&84&84&  %a%&8<% 1#3 t!t#4#f4#3#38=&8=&8=& `d888%%{{%%( {% 1#3 t!t#4#f4#3#38%8%8% `1)&&&%   %%d888zzy 1!YyRyBzzz(% ӹ|gpZqLu{udy_pCu!vJ?wm u) }r~b\R?u^ZyXlyVx=P5x )!d y z {! | @X&>999 66W!XWb&8<O 8f&8f&8f&Wk&d8< 8o&8o& 77s&s&2  (Y ryR {  y 6{A U~&  77&&A( %      g Z /   " uw)    L  u :  C w \w wm :v? u^ { vV x= } v u   uuu s  u&8<> 1#5 t!t#F # #Z # #{ (8&8&8& F ubŃ&8<> 1# t!t##'#8&8&8&  uNك&8<> 4##8&8&8&  u&8<>  t!t##V#4#8&8&8&  uK&8<> 4##8&8&8&   u&8<> 4#u#"8&8&8&  u[!&8<> 1#4##"8&8&8&  u 5&8<> 1#*4# # *8&8&8&  uu&8< 1#J8&8&8& _  RSSd8< 1#H &8&8& bcd8< 1#38'8' rsd8<> 1#4##s8 '8 ' }~d8<> 1# t!t##h# &*8'8' Nd8<> 1# t!t#^##"|8'8' d8< 1#M &(*8)'8)' d8< 1#a&82'82' d8< 1#&8:'8:'d888vvxxw%xu 1# 8;8;8; &8< !>w%xu 1#G 8I'8I'8I' [d8< 1#H)t8R'8R'S&8<2x-x 1#{8Z'8Z'8Z' R&8< !ww-xwx 1#l* t!t#*###% 8c'8c'8c' ld8< 1#x 8m'8m'&8<2x-x 1#6{8t'8t'8t' d8< 8}'8}'&8<2 1#1#E08'8'8' &8< 1#"1#p)8'8'8' d8<  t!t##a#&*8'8'Sd8< 4#H # &*8'8'd8< 4##/38'8'Nd8< 1#"|8'8',d8< 1#4! 8'8'd8< 1#ry8'8'd8< 8'8'&8< !>w%xu 1#  8'8'8'  p&8<2 1#4#C+#i-  8'8'8' o&8< ! { 1#Q t!t#|.##-#'## #c  8'8'8' &8< 1#*8'8'8' &8<2o 1#h4#x)#.28'8'8' d8<{ 1#YR' 66W!W(d8.!. 1#Y @ 1#. 1#8(8( 77(( 8'8'd8< 1#s8(8(&8<2 1#?#1#Y1 8(8(8( 7d8< 1#!8((8((&8<2%% 1#H t!t#4#m3#38/(8/(8/( jd8< 1#(89(89(d8< 1# 8@(8@("&8< !>w%xu 1# %8G(8G(8G( (Ad8< 4#! ## 8P(8P(2d8< 1#H!8W(8W(<d8< 1#!8^(8^(d&8< 1#1#I-8e(8e(8e( cz&8<{ 1#&1#J.8o(8o(8o( y&8<2 1#$1#918x(8x(8x( &8<Yy 1#8(8(8( &8<O 1#&4# # 8(8(8( d8< 4#2 #!8(8(Ud8< 1#6)z8(8( Px!v|ӹ%zzyQ&R&{'6. !..   @ 6( !'(  Auq%Qu,u%\%S%(3"uJX&l&c&|4yx|$yxxxwowφƆ$$$ m4N~E{!{zz{yyg%I%@|~yubu"% yx%3uHupuYu [{ ls  1#( !2  t!t#k1#m#j !%5,.  t!t#V#KD#A#A# 1# 88  77((((Z t!t#7#|5#N5#(#p jZj t!t#V#KD#A#A#  Z 1# Z t!t#k1#m##l Z4## ((NewArrayR4' %e !|| |ATz@z6ziU)#:'1'''&&Z%$H$##"""""!O!!  . - ^ 5 r-o;::%N }uss_ @}@{ yIwusqom^c_/][YW5USiQJOzM)KюI% GE?C(Ad?[/ӌ zO0:-+V))!<'%#$!N;}tld)\TLD6.`& S8ӈ҈GGg  + , 9@@54?{ >:P.@Xh=u a l  5  nD  0 HUBV'WXYyZ[~\]]^_`Xabcdef4gUhNipjklEmnopqrlsxtuvwxy!z {|}a~'q nD&z 2$@D<0\( [@u)C64C¯eïįвů Ưmǯдȯ̰ɯնʯi˯qpLo,78 wKxtyz {Z|LS c!#"#$t%& M-.< =   /       3    #$%&'(V)*1+r,l_-D=.8& /0123q g n456 01PSq *2  3I4;569:;kl{ jj@)II]]h,hiGR[P2i"s3swnC0:D{c}t}ar ar^o IZKRm,F '!14x { #j,,!"6644%&&%B%3)O):;##**4.4<=77~88  >?""--55**2,2>1> 0(0<2<99>1[1..b((B3_3Wky (@IA`Akk߶/H޹'*CEFS BJGaGҗ@@OIfIRRJJKK1L>LT UMMdNNMMdM ZZZIJ.JLJNO P$PPPvPP2OLOOO4RNRXQtQQQ^^T-TQ'>qZq!9AҚ,&B&?C!bm =ٙѧIaѨ&fEayڢds)CRb ~~7*uǀ%21Lb}.։(@ދMef~p*BB\Ϙޜ%cz 7I`R_zɪ@q 8B C \ w $   $>WHc/ >eWWVWT"T`WzW=KYKtTT\]Y4Y[[YYLL\!\)[D[7XXXXXT]o]VVn^"^TT$U5UUUVVmVVVVHW]WWW'X:XXXYYsYYYYPZaZZZ+[<[[[\\H\\\L]]]-I]'^7^^^n____J`\```%a5aaaablb}bbbEcVcccQ/dddde]eme3fCfffg!g}ggPhbhhhiiijjjzjHk\k)l=llljm{mmmnno,oooZpmppp6qHqqqr!r}rrrr{OO?NO)O HN9tPQQ, ˽8rTr$v@v[vw6wGsbsuutttuss.Io }||||{{p||}};!>A\FcsЅ?]gՑю:̏etXr8̚F`̟̗_z̞ٙ%@nȋãܣnXq.GD]ȡ3٠4BuH<+Cp\E i ! ^  @h d   2 2   2   (. z?@I]+hQNi2sjwzgC{s}qqn Y) )  node_modules) )2 -) ) -( ./index.js6:j * 6(vary.js) ) (((6:j * 6() ) ((6:j * 6( cookie.js) ) (((6:j * 6() ) ((6:j * 6(cookie-signature.js) ) (((6:j * 6() ) ((6:j * 6(on-finished.js) ) )((6:j * 6)) ) ((6:j * 6)escape-html.js) ) )((6:j * 6)) ) ((6:9 9 6)etag.js) )  )((6:9 9 6%)L) ) L((6. !.j * 9 9 6,)send.js) ) 0)((6. !.j * 9 9 65)%) ) %((6:9 9 6=)content-type.js) ) @)((6:9 9 6E)) ) ((6. !.j * 9 9 6L)content-disposition.js) ) P)((6. !.j * 9 9 6U)) ) ((6. !.9 9   6])qs.js) ) a)((6. !.9 9   6f) ) )  ((6:   6n)path-to-regexp.js) ) q)((6:   6v)) ) ((6. !. {  @ j * 6})utils-merge.js) ) )((6. !. {  @ j * 6)) ) ((6. !.    @  { 9 9 6)array-flatten.js) ) )((6. !.    @  { 9 9 6)z) ) z((6. !.    @  { 6) methods.js) ) )((6. !.    @  { 6))) ) )((6: @ 6)finalhandler.js) ) )((6: @ 6):) ) :((6. !. U 9 9 6) proxy-addr.js) ) )((6. !. U 9 9 6)) ) ((6. !. {  U   6) parseurl.js) ) )((6. !. {  U   6)V) ) V((6: U 6)range-parser.js) ) )((6: U 6))!) ) )!((6: U 6)fresh.js) ) )((6: U 6*<) ) <((6: U 6 * type-is.js) )  *((6: U 6*) ) ((6. !. {  @ j *  U 9 9 6*depd.js) ) *((6. !. {  @ j *  U 9 9 6$*$) ) $((6: U 6/* accepts.js) ) 2*((6: U 67*) ) ((6. !.    @ G I     { 6>*debug.js) ) E*((6. !.    @ G I     { 6J*) ) ((6:.  6U*serve-static.js) ) X*((6:.  6]*) ) ((6:.  6d*merge-descriptors.js) ) g*((6:.  6l*(((6. !.9 9    G I  U  {  @ j *   .     6q* ) )  ((66 ) ) ((66z) ) ((66) ) ((66) ) ((66?) ) ((66j) ) j((66)) ) )((66@I) ) I((66I]) ) ]((66],h) ) ,h((66+hG) ) G((66Q[) ) [((66N2) ) 2((66i) ) i((66i3s) ) 3s((662sn) ) n((66jC) ) C((66w) ) ((66z:) ) :((66gC{) ) {((66{t}) ) t}((66s}r) ) r((66q) ) ((66) ) ((66r) ) r((66qo) ) o((66n ) )  ((66 Z) ) Z((66Y) ) ((66D) ) () )2 -) ) -+(6:j * 6+() ) (+(6:j * 6#+) ) +(6:j * 6*+() ) (+(6:j * 61+) ) +(6:j * 68+() ) (+(6:j * 6?+) ) +(6:j * 6F+)) ) )+(6:j * 6M+) ) +(6:j * 6T+)) ) )+(6:j * 6[+) ) +(6:9 9 6b+ )) )  )+(6:9 9 6i+L) ) L+(6. !.j * 9 9 6p+0)) ) 0)+(6. !.j * 9 9 6x+%) ) %+(6:9 9 6+@)) ) @)+(6:9 9 6+) ) +(6. !.j * 9 9 6+P)) ) P)+(6. !.j * 9 9 6+) ) +(6. !.9 9   6+a)) ) a)+(6. !.9 9   6+ ) )  +(6:   6+q)) ) q)+(6:   6+) ) +(6. !. {  @ j * 6+)) ) )+(6. !. {  @ j * 6+) ) +(6. !.    @  { 9 9 6+)) ) )+(6. !.    @  { 9 9 6+z) ) z+(6. !.    @  { 6+)) ) )+(6. !.    @  { 6+)) ) )+(6: @ 6+)) ) )+(6: @ 6+:) ) :+(6. !. U 9 9 6,)) ) )+(6. !. U 9 9 6 ,) ) +(6. !. {  U   6,)) ) )+(6. !. {  U   6,V) ) V+(6: U 6$,)) ) )+(6: U 6+,)!) ) )!+(6: U 62,)) ) )+(6: U 69,<) ) <+(6: U 6@, *) )  *+(6: U 6G,) ) +(6. !. {  @ j *  U 9 9 6N,*) ) *+(6. !. {  @ j *  U 9 9 6Y,$) ) $+(6: U 6d,2*) ) 2*+(6: U 6k,) ) +(6. !.    @ G I     { 6r,E*) ) E*+(6. !.    @ G I     { 6},) ) +(6:.  6,X*) ) X*+(6:.  6,) ) +(6:.  6,g*) ) g*+(6:.  6,(+(6. !.9 9    G I  U  {  @ j *   .     6,5) ) () )2 -) ) -,(6:j * 6,() ) (,(6:j * 6,) ) ,(6:j * 6,() ) (,(6:j * 6,) ) ,(6:j * 6,() ) (,(6:j * 6,) ) ,(6:j * 6,)) ) ),(6:j * 6,) ) ,(6:j * 6,)) ) ),(6:j * 6,) ) ,(6:9 9 6, )) )  ),(6:9 9 6-L) ) L,(6. !.j * 9 9 6 -0)) ) 0),(6. !.j * 9 9 6-%) ) %,(6:9 9 6-@)) ) @),(6:9 9 6!-) ) ,(6. !.j * 9 9 6(-P)) ) P),(6. !.j * 9 9 60-) ) ,(6. !.9 9   68-a)) ) a),(6. !.9 9   6@- ) )  ,(6:   6H-q)) ) q),(6:   6O-) ) ,(6. !. {  @ j * 6V-)) ) ),(6. !. {  @ j * 6_-) ) ,(6. !.    @  { 9 9 6h-)) ) ),(6. !.    @  { 9 9 6r-z) ) z,(6. !.    @  { 6|-)) ) ),(6. !.    @  { 6-)) ) ),(6: @ 6-)) ) ),(6: @ 6-:) ) :,(6. !. U 9 9 6-)) ) ),(6. !. U 9 9 6-) ) ,(6. !. {  U   6-)) ) ),(6. !. {  U   6-V) ) V,(6: U 6-)) ) ),(6: U 6-)!) ) )!,(6: U 6-)) ) ),(6: U 6-<) ) <,(6: U 6- *) )  *,(6: U 6-) ) ,(6. !. {  @ j *  U 9 9 6-*) ) *,(6. !. {  @ j *  U 9 9 6-$) ) $,(6: U 6-2*) ) 2*,(6: U 6.) ) ,(6. !.    @ G I     { 6 .E*) ) E*,(6. !.    @ G I     { 6.) ) ,(6:.  6".X*) ) X*,(6:.  6).) ) ,(6:.  60.g*) ) g*,(6:.  67.(,(6. !.9 9    G I  U  {  @ j *   .     6<. all in one) ) () )2 -) ) -K.(6:j * 6Q.() ) (K.(6:j * 6X.) ) K.(6:j * 6_.() ) (K.(6:j * 6f.) ) K.(6:j * 6m.() ) (K.(6:j * 6t.) ) K.(6:j * 6{.)) ) )K.(6:j * 6.) ) K.(6:j * 6.)) ) )K.(6:j * 6.) ) K.(6:9 9 6. )) )  )K.(6:9 9 6.L) ) LK.(6. !.j * 9 9 6.0)) ) 0)K.(6. !.j * 9 9 6.%) ) %K.(6:9 9 6.@)) ) @)K.(6:9 9 6.) ) K.(6. !.j * 9 9 6.P)) ) P)K.(6. !.j * 9 9 6.) ) K.(6. !.9 9   6.a)) ) a)K.(6. !.9 9   6. ) )  K.(6:   6.q)) ) q)K.(6:   6.) ) K.(6. !. {  @ j * 6.)) ) )K.(6. !. {  @ j * 6.) ) K.(6. !.    @  { 9 9 6/)) ) )K.(6. !.    @  { 9 9 6 /z) ) zK.(6. !.    @  { 6/)) ) )K.(6. !.    @  { 6 /)) ) )K.(6: @ 6)/)) ) )K.(6: @ 60/:) ) :K.(6. !. U 9 9 67/)) ) )K.(6. !. U 9 9 6?/) ) K.(6. !. {  U   6G/)) ) )K.(6. !. {  U   6P/V) ) VK.(6: U 6Y/)) ) )K.(6: U 6`/)!) ) )!K.(6: U 6g/)) ) )K.(6: U 6n/<) ) <K.(6: U 6u/ *) )  *K.(6: U 6|/) ) K.(6. !. {  @ j *  U 9 9 6/*) ) *K.(6. !. {  @ j *  U 9 9 6/$) ) $K.(6: U 6/2*) ) 2*K.(6: U 6/) ) K.(6. !.    @ G I     { 6/E*) ) E*K.(6. !.    @ G I     { 6/) ) K.(6:.  6/X*) ) X*K.(6:.  6/) ) K.(6:.  6/g*) ) g*K.(6:.  6/(I.(6. !.9 9    G I  U  {  @ j *   .     6/Git) ) () )2 -) ) -/(6:j * 6/() ) (/(6:j * 6/) ) /(6:j * 6/() ) (/(6:j * 60) ) /(6:j * 60() ) (/(6:j * 60) ) /(6:j * 60)) ) )/(6:j * 60) ) /(6:j * 6$0)) ) )/(6:j * 6+0) ) /(6:9 9 620 )) )  )/(6:9 9 690L) ) L/(6. !.j * 9 9 6@00)) ) 0)/(6. !.j * 9 9 6H0%) ) %/(6:9 9 6P0@)) ) @)/(6:9 9 6W0) ) /(6. !.j * 9 9 6^0P)) ) P)/(6. !.j * 9 9 6f0) ) /(6. !.9 9   6n0a)) ) a)/(6. !.9 9   6v0 ) )  /(6:   6~0q)) ) q)/(6:   60) ) /(6. !. {  @ j * 60)) ) )/(6. !. {  @ j * 60) ) /(6. !.    @  { 9 9 60)) ) )/(6. !.    @  { 9 9 60z) ) z/(6. !.    @  { 60)) ) )/(6. !.    @  { 60)) ) )/(6: @ 60)) ) )/(6: @ 60:) ) :/(6. !. U 9 9 60)) ) )/(6. !. U 9 9 60) ) /(6. !. {  U   60)) ) )/(6. !. {  U   60V) ) V/(6: U 60)) ) )/(6: U 60)!) ) )!/(6: U 61)) ) )/(6: U 6 1<) ) </(6: U 61 *) )  */(6: U 61) ) /(6. !. {  @ j *  U 9 9 61*) ) */(6. !. {  @ j *  U 9 9 6)1$) ) $/(6: U 6412*) ) 2*/(6: U 6;1) ) /(6. !.    @ G I     { 6B1E*) ) E*/(6. !.    @ G I     { 6M1) ) /(6:.  6X1X*) ) X*/(6:.  6_1) ) /(6:.  6f1g*) ) g*/(6:.  6m1(/(6. !.9 9    G I  U  {  @ j *   .     6r1 NodeJsStudy) ) () )2 -) ) -1(6:j * 61() ) (1(6:j * 61) ) 1(6:j * 61() ) (1(6:j * 61) ) 1(6:j * 61() ) (1(6:j * 61) ) 1(6:j * 61)) ) )1(6:j * 61) ) 1(6:j * 61)) ) )1(6:j * 61) ) 1(6:9 9 61 )) )  )1(6:9 9 61L) ) L1(6. !.j * 9 9 610)) ) 0)1(6. !.j * 9 9 61%) ) %1(6:9 9 61@)) ) @)1(6:9 9 61) ) 1(6. !.j * 9 9 61P)) ) P)1(6. !.j * 9 9 62) ) 1(6. !.9 9   6 2a)) ) a)1(6. !.9 9   62 ) )  1(6:   62q)) ) q)1(6:   6 2) ) 1(6. !. {  @ j * 6'2)) ) )1(6. !. {  @ j * 602) ) 1(6. !.    @  { 9 9 692)) ) )1(6. !.    @  { 9 9 6C2z) ) z1(6. !.    @  { 6M2)) ) )1(6. !.    @  { 6V2)) ) )1(6: @ 6_2)) ) )1(6: @ 6f2:) ) :1(6. !. U 9 9 6m2)) ) )1(6. !. U 9 9 6u2) ) 1(6. !. {  U   6}2)) ) )1(6. !. {  U   62V) ) V1(6: U 62)) ) )1(6: U 62)!) ) )!1(6: U 62)) ) )1(6: U 62<) ) <1(6: U 62 *) )  *1(6: U 62) ) 1(6. !. {  @ j *  U 9 9 62*) ) *1(6. !. {  @ j *  U 9 9 62$) ) $1(6: U 622*) ) 2*1(6: U 62) ) 1(6. !.    @ G I     { 62E*) ) E*1(6. !.    @ G I     { 62) ) 1(6:.  62X*) ) X*1(6:.  62) ) 1(6:.  63g*) ) g*1(6:.  63(1(6. !.9 9    G I  U  {  @ j *   .     6 3 ExpressApp1) ) () )2 -) ) -3(6:j * 6"3() ) (3(6:j * 6)3) ) 3(6:j * 603() ) (3(6:j * 673) ) 3(6:j * 6>3() ) (3(6:j * 6E3) ) 3(6:j * 6L3)) ) )3(6:j * 6S3) ) 3(6:j * 6Z3)) ) )3(6:j * 6a3) ) 3(6:9 9 6h3 )) )  )3(6:9 9 6o3L) ) L3(6. !.j * 9 9 6v30)) ) 0)3(6. !.j * 9 9 6~3%) ) %3(6:9 9 63@)) ) @)3(6:9 9 63) ) 3(6. !.j * 9 9 63P)) ) P)3(6. !.j * 9 9 63) ) 3(6. !.9 9   63a)) ) a)3(6. !.9 9   63 ) )  3(6:   63q)) ) q)3(6:   63) ) 3(6. !. {  @ j * 63)) ) )3(6. !. {  @ j * 63) ) 3(6. !.    @  { 9 9 63)) ) )3(6. !.    @  { 9 9 63z) ) z3(6. !.    @  { 63)) ) )3(6. !.    @  { 63)) ) )3(6: @ 63)) ) )3(6: @ 64:) ) :3(6. !. U 9 9 64)) ) )3(6. !. U 9 9 64) ) 3(6. !. {  U   64)) ) )3(6. !. {  U   6!4V) ) V3(6: U 6*4)) ) )3(6: U 614)!) ) )!3(6: U 684)) ) )3(6: U 6?4<) ) <3(6: U 6F4 *) )  *3(6: U 6M4) ) 3(6. !. {  @ j *  U 9 9 6T4*) ) *3(6. !. {  @ j *  U 9 9 6_4$) ) $3(6: U 6j42*) ) 2*3(6: U 6q4) ) 3(6. !.    @ G I     { 6x4E*) ) E*3(6. !.    @ G I     { 64) ) 3(6:.  64X*) ) X*3(6:.  64) ) 3(6:.  64g*) ) g*3(6:.  64(3(6. !.9 9    G I  U  {  @ j *   .     64NodejsConsoleApp1) ) () )4 -) ) -4(6:j * 64() ) (4(6:j * 64) ) 4(6:j * 64() ) (4(6:j * 64) ) 4(6:j * 64() ) (4(6:j * 64) ) 4(6:j * 64)) ) )4(6:j * 64) ) 4(6:j * 64)) ) )4(6:j * 64) ) 4(6:9 9 65 )) )  )4(6:9 9 6 5L) ) L4(6. !.j * 9 9 650)) ) 0)4(6. !.j * 9 9 65%) ) %4(6:9 9 6!5@)) ) @)4(6:9 9 6(5) ) 4(6. !.j * 9 9 6/5P)) ) P)4(6. !.j * 9 9 675) ) 4(6. !.9 9   6?5a)) ) a)4(6. !.9 9   6G5 ) )  4(6:   6O5q)) ) q)4(6:   6V5) ) 4(6. !. {  @ j * 6]5)) ) )4(6. !. {  @ j * 6f5) ) 4(6. !.    @  { 9 9 6o5)) ) )4(6. !.    @  { 9 9 6y5z) ) z4(6. !.    @  { 65)) ) )4(6. !.    @  { 65)) ) )4(6: @ 65)) ) )4(6: @ 65:) ) :4(6. !. U 9 9 65)) ) )4(6. !. U 9 9 65) ) 4(6. !. {  U   65)) ) )4(6. !. {  U   65V) ) V4(6: U 65)) ) )4(6: U 65)!) ) )!4(6: U 65)) ) )4(6: U 65<) ) <4(6: U 65 *) )  *4(6: U 65) ) 4(6. !. {  @ j *  U 9 9 65*) ) *4(6. !. {  @ j *  U 9 9 65$) ) $4(6: U 662*) ) 2*4(6: U 6 6) ) 4(6. !.    @ G I     { 66E*) ) E*4(6. !.    @ G I     { 66) ) 4(6:.  6)6X*) ) X*4(6:.  606) ) 4(6:.  676g*) ) g*4(6:.  6>6() )2 -) ) -A6(6:j * 6G6() ) (A6(6:j * 6N6) ) A6(6:j * 6U6() ) (A6(6:j * 6\6) ) A6(6:j * 6c6() ) (A6(6:j * 6j6) ) A6(6:j * 6q6)) ) )A6(6:j * 6x6) ) A6(6:j * 66)) ) )A6(6:j * 66) ) A6(6:9 9 66 )) )  )A6(6:9 9 66L) ) LA6(6. !.j * 9 9 660)) ) 0)A6(6. !.j * 9 9 66%) ) %A6(6:9 9 66@)) ) @)A6(6:9 9 66) ) A6(6. !.j * 9 9 66P)) ) P)A6(6. !.j * 9 9 66) ) A6(6. !.9 9   66a)) ) a)A6(6. !.9 9   66 ) )  A6(6:   66q)) ) q)A6(6:   66) ) A6(6. !. {  @ j * 66)) ) )A6(6. !. {  @ j * 66) ) A6(6. !.    @  { 9 9 66)) ) )A6(6. !.    @  { 9 9 67z) ) zA6(6. !.    @  { 6 7)) ) )A6(6. !.    @  { 67)) ) )A6(6: @ 67)) ) )A6(6: @ 6&7:) ) :A6(6. !. U 9 9 6-7)) ) )A6(6. !. U 9 9 657) ) A6(6. !. {  U   6=7)) ) )A6(6. !. {  U   6F7V) ) VA6(6: U 6O7)) ) )A6(6: U 6V7)!) ) )!A6(6: U 6]7)) ) )A6(6: U 6d7<) ) <A6(6: U 6k7 *) )  *A6(6: U 6r7) ) A6(6. !. {  @ j *  U 9 9 6y7*) ) *A6(6. !. {  @ j *  U 9 9 67$) ) $A6(6: U 672*) ) 2*A6(6: U 67) ) A6(6. !.    @ G I     { 67E*) ) E*A6(6. !.    @ G I     { 67) ) A6(6:.  67X*) ) X*A6(6:.  67) ) A6(6:.  67g*) ) g*A6(6:.  67(4(6. !.9 9    G I  U  {  @ j *   .     67) ) () )2 -) ) -7(6:j * 67() ) (7(6:j * 67) ) 7(6:j * 67() ) (7(6:j * 67) ) 7(6:j * 67() ) (7(6:j * 68) ) 7(6:j * 6 8)) ) )7(6:j * 68) ) 7(6:j * 68)) ) )7(6:j * 6 8) ) 7(6:9 9 6'8 )) )  )7(6:9 9 6.8L) ) L7(6. !.j * 9 9 6580)) ) 0)7(6. !.j * 9 9 6=8%) ) %7(6:9 9 6E8@)) ) @)7(6:9 9 6L8) ) 7(6. !.j * 9 9 6S8P)) ) P)7(6. !.j * 9 9 6[8) ) 7(6. !.9 9   6c8a)) ) a)7(6. !.9 9   6k8 ) )  7(6:   6s8q)) ) q)7(6:   6z8) ) 7(6. !. {  @ j * 68)) ) )7(6. !. {  @ j * 68) ) 7(6. !.    @  { 9 9 68)) ) )7(6. !.    @  { 9 9 68z) ) z7(6. !.    @  { 68)) ) )7(6. !.    @  { 68)) ) )7(6: @ 68)) ) )7(6: @ 68:) ) :7(6. !. U 9 9 68)) ) )7(6. !. U 9 9 68) ) 7(6. !. {  U   68)) ) )7(6. !. {  U   68V) ) V7(6: U 68)) ) )7(6: U 68)!) ) )!7(6: U 68)) ) )7(6: U 68<) ) <7(6: U 69 *) )  *7(6: U 6 9) ) 7(6. !. {  @ j *  U 9 9 69*) ) *7(6. !. {  @ j *  U 9 9 69$) ) $7(6: U 6)92*) ) 2*7(6: U 609) ) 7(6. !.    @ G I     { 679E*) ) E*7(6. !.    @ G I     { 6B9) ) 7(6:.  6M9X*) ) X*7(6:.  6T9) ) 7(6:.  6[9g*) ) g*7(6:.  6b9(7(6. !.9 9    G I  U  {  @ j *   .     6g9lib) )  router.js) ) v9t9(6. !..   @ 6{9() )2 -) ) -9(6:j * 69() ) (9(6:j * 69) ) 9(6:j * 69() ) (9(6:j * 69) ) 9(6:j * 69() ) (9(6:j * 69) ) 9(6:j * 69)) ) )9(6:j * 69) ) 9(6:j * 69)) ) )9(6:j * 69) ) 9(6:9 9 69 )) )  )9(6:9 9 69L) ) L9(6. !.j * 9 9 690)) ) 0)9(6. !.j * 9 9 69%) ) %9(6:9 9 69@)) ) @)9(6:9 9 69) ) 9(6. !.j * 9 9 69P)) ) P)9(6. !.j * 9 9 69) ) 9(6. !.9 9   6:a)) ) a)9(6. !.9 9   6: ) )  9(6:   6:q)) ) q)9(6:   6:) ) 9(6. !. {  @ j * 6%:)) ) )9(6. !. {  @ j * 6.:) ) 9(6. !.    @  { 9 9 67:)) ) )9(6. !.    @  { 9 9 6A:z) ) z9(6. !.    @  { 6K:)) ) )9(6. !.    @  { 6T:)) ) )9(6: @ 6]:)) ) )9(6: @ 6d::) ) :9(6. !. U 9 9 6k:)) ) )9(6. !. U 9 9 6s:) ) 9(6. !. {  U   6{:)) ) )9(6. !. {  U   6:V) ) V9(6: U 6:)) ) )9(6: U 6:)!) ) )!9(6: U 6:)) ) )9(6: U 6:<) ) <9(6: U 6: *) )  *9(6: U 6:) ) 9(6. !. {  @ j *  U 9 9 6:*) ) *9(6. !. {  @ j *  U 9 9 6:$) ) $9(6: U 6:2*) ) 2*9(6: U 6:) ) 9(6. !.    @ G I     { 6:E*) ) E*9(6. !.    @ G I     { 6:) ) 9(6:.  6:X*) ) X*9(6:.  6:) ) 9(6:.  6:g*) ) g*9(6:.  6;(t9(6. !.9 9    G I  U  {  @ j *   .     6 ;E) ) () ) ) ) ;(6:  6;a)) ) a);(6:  6&;) ) ;(6:  6-;)) ) );(6:  64;(;(6:  69;query.js) ) <;;(6. !..   @ 6A;init.js) ) E;;(6: @ 6J;msEt9(6. !..   @ 6O;) ) () ) ) ) U;(6: { 6[;)) ) )U;(6: { 6b;) ) U;(6: { 6i;*) ) *U;(6: { 6p;) ) U;(6: { 6w;)) ) )U;(6: { 6~;z) ) zU;(6. !. {    6;)) ) )U;(6. !. {    6;) ) U;(6. !. {    6;)) ) )U;(6. !. {    6;) ) U;(6. !.    {    6;E*) ) E*U;(6. !.    {    6; ) )  U;(6:   6;q)) ) q)U;(6:   6;(S;(6. !.    {    6; index.js.js) ) ;S;(6. !..   @ 6;route.js) ) ;S;(6. !..   { 6; layer.js) ) ;S;(6. !. {    6; index.js) ) ;S;(6. !..   @ 6;t9(6. !..   @ 6;view.js) ) ;t9(6: @ 6;Gutils.js) ) ;t9(6. !. @ G I j * 6;9 response.js) ) <t9(6:.  6 <j request.js) )  <t9(6:.  6< express.js) ) <t9(6:  6<.application.js) ) <t9(6:.  6!<s97(6:  6&<;) ) ;7(664ls(66(4(6. !.9 9    G I  U  {  @ j *   .     63<somepackage.js) ) ?<4(6:  \ 6D< getpackage.js) ) G<4(66  somepackage) ) ;) ) ;N<(6:  \ 6T<;) ) ;N<(6:  \ 6[<~M<4(6:  \ 6`<hello.js) ) c<4(6:`  N6h<singleobject.js) ) k<4(66E  module.js.js) ) q<4(6:`  I6v< module.js) ) y<4(6:`  I6~<app.js) ) <4(66`43./app.js6631(66~1/(66/I.(66H.,(665+(66+((665(66 )1 =;osF; ; ;;G;9;l< <0<<)<4H<( W<d< l<wz< }******j*)*I*]*,h*G*[*2*i*3s*n*C**:*{*t}*r***r*o* +Z ++z<4)u S S Y!+#