(CommandList children: [ (FuncDef name: 'http::parse_request' body: (BraceGroup children: [ (C {(http) (Lit_Other ':') (Lit_Other ':') (read)} {(req_line)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:req_line) op: Equal rhs: {(ArrayLiteralPart words:[{($ VSub_Name '$req_line')}])} spids: [23] ) ] spids: [23] ) (C {(export)} {(Lit_VarLike 'REQUEST_METHOD=') (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)})) spids: [32 37] ) } ) (C {(export)} {(Lit_VarLike 'REQUEST_URI=') (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)})) spids: [44 49] ) } ) (C {(export)} {(Lit_VarLike 'REQUEST_PATH=') (BracedVarSub token: <VSub_Name REQUEST_URI> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(EscapedLiteralPart token:<Lit_EscapedChar '\\?'>) ('*')} ) spids: [55 60] ) } ) (C {(export)} {(Lit_VarLike 'QUERY_STRING=') (BracedVarSub token: <VSub_Name REQUEST_URI> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*') (EscapedLiteralPart token:<Lit_EscapedChar '\\?'>)} ) spids: [66 71] ) } ) (C {(export)} {(Lit_VarLike 'HTTP_VERSION=') (BracedVarSub token: <VSub_Name req_line> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)})) spids: [78 83] ) } ) (C {(export)} {(Lit_VarLike 'SERVER_SOFTWARE=') (DQ (balls/0.0))}) (Assignment keyword: Assign_Declare flags: ["'-A'"] pairs: [(assign_pair lhs:(LhsName name:HEADERS) op:Equal spids:[100])] spids: [96] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:key) op:Equal spids:[106])] spids: [104] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:val) op:Equal spids:[111])] spids: [109] ) (While cond: [ (Sentence child: (C {(http) (Lit_Other ':') (Lit_Other ':') (read)} {(HEADER_LINE)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:key) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name HEADER_LINE> suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('*( ):*')}) spids: [129 133] ) ) } spids: [127] ) ] spids: [127] ) (C {(trim)} {(key)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:val) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name HEADER_LINE> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*:*( )')}) spids: [144 148] ) ) } spids: [142] ) ] spids: [142] ) (C {(trim)} {(val)}) (C {(HEADERS) (Lit_Other '[') (DQ ($ VSub_Name '$key')) (Lit_Other ']') (Lit_Other '=') (DQ ($ VSub_Name '$val')) } ) ] spids: [124 170] ) ) ] spids: [11] ) spids: [4 10] ) (FuncDef name: 'http::read' body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:__var) op: Equal rhs: {($ VSub_Number '$1')} spids: [187] ) ] spids: [185] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (C {(read)} {(__in)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:RETVAL) op: Equal rhs: {($ VSub_QMark '$?')} spids: [201] ) ] spids: [199] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:__in) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$__in'))}) (C {(tr)} {(-d)} {(SQ <'\\r'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [211 227] ) } spids: [210] ) ] spids: [210] ) (C {(export)} {(DQ ($ VSub_Name '$__var')) (Lit_Other '=') (DQ ($ VSub_Name '$__in'))}) (AndOr children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$RETVAL'))} {(Lit_Other '=')} {(0)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(-n)} {(DQ (BracedVarSub token:<VSub_Name __var> prefix_op:VSub_Bang spids:[267270]))} {(Lit_Other ']')} ) ] op_id: Op_DAmp ) ] spids: [182] ) spids: [175 181] ) (Assignment keyword: Assign_Declare flags: ["'-a'"] pairs: [(assign_pair lhs:(LhsName name:HTTP_STATUSES) op:Equal spids:[282])] spids: [278] ) (C {(HTTP_STATUSES) (Lit_Other '[') (200) (Lit_Other ']') (Lit_Other '=') (SQ <OK>)}) (C {(HTTP_STATUSES) (Lit_Other '[') (404) (Lit_Other ']') (Lit_Other '=') (SQ <'Not Found'>)}) (C {(HTTP_STATUSES) (Lit_Other '[') (500) (Lit_Other ']') (Lit_Other '=') (SQ <'Internal Server Error'>) } ) (FuncDef name: 'http::status' body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:code) op: Equal rhs: {($ VSub_Number '$1')} spids: [327] ) ] spids: [325] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:message) op: Equal rhs: {($ VSub_Number '$1')} spids: [336] ) ] spids: [334] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (AndOr children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$message'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:message) op: Equal rhs: { (BracedVarSub token: <VSub_Name HTTP_STATUSES> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name '$code')})) spids: [356 361] ) } spids: [355] ) ] spids: [355] ) ] op_id: Op_DAmp ) (C {(http) (Lit_Other ':') (Lit_Other ':') (header_echo)} { (DQ ($ VSub_Name '$HTTP_VERSION') (' ') ($ VSub_Name '$code') (' ') ($ VSub_Name '$message') ) } ) ] spids: [322] ) spids: [315 321] ) (FuncDef name: 'http::header' body: (BraceGroup children: [ (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:header_name) op: Equal rhs: {($ VSub_Number '$1')} spids: [393] ) ] spids: [391] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (Sentence child: (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:header_val) op: Equal rhs: {($ VSub_Number '$1')} spids: [401] ) ] spids: [399] ) terminator: <Op_Semi ';'> ) (C {(shift)}) (C {(http) (Lit_Other ':') (Lit_Other ':') (header_echo)} {(DQ ($ VSub_Name '$header_name') (': ') ($ VSub_Name '$header_val'))} ) ] spids: [388] ) spids: [381 387] ) (FuncDef name: 'http::header_echo' body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_At '$@'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[437])] ) ] spids: [428] ) spids: [421 427] ) (FuncDef name: 'http::content_type' body: (BraceGroup children: [ (C {(http) (Lit_Other ':') (Lit_Other ':') (header)} {(SQ <Content-Type>)} {(DQ ($ VSub_At '$@'))} ) ] spids: [450] ) spids: [443 449] ) ] )