(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PERL)
          op: assign_op.Equal
          rhs: {(SQ <'@@PERL@@'>)}
          spids: [13]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OPTIONS_KEEPDASHDASH)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [18]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OPTIONS_STUCKLONG)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [20]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OPTIONS_SPEC)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'git instaweb [options] (--start | --stop | --restart)\n'> <'--\n'> 
                <'l,local        only bind on 127.0.0.1\n'> <'p,port=        the port to bind to\n'> <'d,httpd=       the command to launch\n'> 
                <'b,browser=     the browser to launch\n'> <'m,module-path= the module path (only needed for apache2)\n'> <' Action\n'> 
                <'stop           stop the web server\n'> <'start          start the web server\n'> <'restart        restart the web server\n'>
              )
            }
          spids: [22]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SUBDIRECTORY_OK)
          op: assign_op.Equal
          rhs: {<Yes>}
          spids: [39]
        )
      ]
    )
    (C {<.>} {<git-sh-setup>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fqgitdir)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))}
          spids: [47]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:local)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<git>} {<config>} {<--bool>} {<--get>} {<instaweb.local>})]
                    )
                )
              )
            }
          spids: [52]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:httpd)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<git>} {<config>} {<--get>} {<instaweb.httpd>})]
                    )
                )
              )
            }
          spids: [67]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:root)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<git>} {<config>} {<--get>} {<instaweb.gitwebdir>})]
                    )
                )
              )
            }
          spids: [80]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:port)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: 
                  (command.CommandList
                    children: [(C {<git>} {<config>} {<--get>} {<instaweb.port>})]
                  )
              )
            }
          spids: [93]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:module_path)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<git>} {<config>} {<--get>} {<instaweb.modulepath>})]
                    )
                )
              )
            }
          spids: [104]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:action)
          op: assign_op.Equal
          rhs: {(DQ <browse>)}
          spids: [117]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:conf)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$GIT_DIR') </gitweb/httpd.conf>)}
          spids: [123]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$httpd'))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:httpd)
              op: assign_op.Equal
              rhs: {(SQ <'lighttpd -f'>)}
              spids: [147]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$root'))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:root)
              op: assign_op.Equal
              rhs: {(SQ <'@@GITWEBDIR@@'>)}
              spids: [166]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$port'))})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:port)
              op: assign_op.Equal
              rhs: {<1234>}
              spids: [185]
            )
          ]
        )
      ]
    )
    (command.ShFunction
      name: resolve_full_httpd
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Pipeline
                              children: [
                                (C {<echo>} {(DQ ($ Id.VSub_DollarName '$httpd'))})
                                (command.Simple
                                  words: [{<sane_grep>} {<-->} {(SQ <'-f *$'>)}]
                                  redirects: [
                                    (redir.Redir
                                      op: <Id.Redir_Great '>'>
                                      fd: -1
                                      arg_word: {</dev/null>}
                                    )
                                    (redir.Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      fd: 2
                                      arg_word: {<1>}
                                    )
                                  ]
                                )
                              ]
                              negated: T
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:httpd)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName '$httpd') <' -f'>)}
                                  spids: [258]
                                )
                              ]
                            )
                          ]
                          spids: [228 255]
                        )
                      ]
                    )
                  ]
                  spids: [206 217 268 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)}
                          spids: [281]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name httpd>
                                  suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>})
                                )
                              )
                            }
                          spids: [288]
                        )
                      ]
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Return return>)
                  ]
                  spids: [271 274 304 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <webrick> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:full_httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/webrick.rb>)}
                          spids: [321]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:httpd_only)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name httpd>
                                  suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>})
                                )
                              )
                            }
                          spids: [328]
                        )
                      ]
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Return return>)
                  ]
                  spids: [307 310 344 -1]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:httpd_only)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {<echo>} {($ Id.VSub_DollarName '$httpd')})
                                    (C {<cut>} {<-f1>} {<-d> (SQ <' '>)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [351]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$httpd_only'))}
                      arms: [
                        (case_arm
                          pat_list: [{</> <Id.Lit_Star '*'>}]
                          action: [(C {<Id.Lit_Other ':'>})]
                          spids: [382 384 388 -1]
                        )
                        (case_arm
                          pat_list: [{<Id.Lit_Star '*'>}]
                          action: [
                            (command.Simple
                              words: [{<which>} {($ Id.VSub_DollarName '$httpd_only')}]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_Great '>'>
                                  fd: -1
                                  arg_word: {</dev/null>}
                                )
                                (redir.Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  fd: 2
                                  arg_word: {<1>}
                                )
                              ]
                            )
                          ]
                          spids: [390 391 402 -1]
                        )
                      ]
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:full_httpd)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$httpd')}
                          spids: [410]
                        )
                      ]
                    )
                  ]
                  spids: [372 407]
                )
              ]
              else_action: [
                (command.ForEach
                  iter_name: i
                  iter_words: [
                    {</usr/local/sbin>}
                    {</usr/sbin>}
                    {(DQ ($ Id.VSub_DollarName '$root'))}
                    {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb>)}
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (C {<test>} {<-x>} 
                                  {
                                    (DQ ($ Id.VSub_DollarName '$i') </> 
                                      ($ Id.VSub_DollarName '$httpd_only')
                                    )
                                  }
                                )
                              ]
                              action: [
                                (command.ShAssignment
                                  pairs: [
                                    (assign_pair
                                      lhs: (sh_lhs_expr.Name name:full_httpd)
                                      op: assign_op.Equal
                                      rhs: 
                                        {($ Id.VSub_DollarName '$i') </> 
                                          ($ Id.VSub_DollarName '$httpd')
                                        }
                                      spids: [472]
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Return return>
                                )
                              ]
                              spids: [456 469]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.Simple
                  words: [
                    {<echo>}
                    {
                      (DQ ($ Id.VSub_DollarName '$httpd_only') <' not found. Install '> 
                        ($ Id.VSub_DollarName '$httpd_only') <' or use'>
                      )
                    }
                    {(DQ <'--httpd to specify another httpd daemon.'>)}
                  ]
                  redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: start_httpd
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<say>} {(DQ <'Instance already running. Restarting...'>)})
                    (C {<stop_httpd>})
                  ]
                  spids: [525 537]
                )
              ]
            )
            (C {<resolve_full_httpd>})
            (C {<mkdir>} {<-p>} 
              {
                (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only'))
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:conf)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> 
                        ($ Id.VSub_DollarName '$httpd_only') <.conf>
                      )
                    }
                  spids: [572]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))})
                (C {<configure_httpd>})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)})
                (C {<gitweb_conf>})
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}
                  ]
                  action: [
                    (command.Sentence
                      child: 
                        (C {($ Id.VSub_DollarName '$full_httpd')} {(DQ ($ Id.VSub_DollarName '$conf'))})
                      terminator: <Id.Op_Amp _>
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:pid)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Bang '$!')}
                          spids: [654]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<test>} {($ Id.VSub_QMark '$?')} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName '$httpd') 
                                  <.>
                                )
                              }
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [659 671]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{<cat>}]
                      redirects: [
                        (redir.Redir
                          op: <Id.Redir_Great '>'>
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)}
                        )
                        (redir.HereDoc
                          op: <Id.Redir_DLess '<<'>
                          fd: -1
                          here_begin: {<EOF>}
                          here_end_span_id: 707
                          stdin_parts: [($ Id.VSub_DollarName '$pid') <'\n'>]
                        )
                      ]
                    )
                  ]
                  spids: [627 634 709 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {($ Id.VSub_DollarName '$full_httpd')} {(DQ ($ Id.VSub_DollarName '$conf'))})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<test>} {($ Id.VSub_QMark '$?')} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (C {<echo>} 
                              {
                                (DQ <'Could not execute http daemon '> ($ Id.VSub_DollarName '$httpd') 
                                  <.>
                                )
                              }
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [723 735]
                        )
                      ]
                    )
                  ]
                  spids: [712 713 755 -1]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: stop_httpd
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)})
                (C {<kill>} 
                  {
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      command_list: 
                        (command.CommandList
                          children: [(C {<cat>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)})]
                        )
                    )
                  }
                )
              ]
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$fqgitdir') </pid>)})
          ]
        )
    )
    (command.ShFunction
      name: httpd_is_ready
      body: 
        (command.BraceGroup
          children: [
            (C {(DQ ($ Id.VSub_DollarName '$PERL'))} 
              {<-MIO> <Id.Lit_Other ':'> <Id.Lit_Other ':'> <Socket> <Id.Lit_Other ':'> 
                <Id.Lit_Other ':'> <INET>
              } {<-e>} 
              {
                (DQ <'\n'> <'local '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) 
                  <'| = 1; # turn on autoflush\n'> <"exit if (IO::Socket::INET->new('127.0.0.1:"> ($ Id.VSub_DollarName '$port') <"'));\n"> 
                  <"print 'Waiting for "> <Id.Lit_Other '\\'> <"'"> ($ Id.VSub_DollarName '$httpd') <Id.Lit_Other '\\'> <"' to start ..';\n"> 
                  <'do {\n'> <"\tprint '.';\n"> <'\tsleep(1);\n'> <"} until (IO::Socket::INET->new('127.0.0.1:"> 
                  ($ Id.VSub_DollarName '$port') <"'));\n"> <'print qq! (done)'> <Id.Lit_Other '\\'> <'n!;\n'>
                )
              }
            )
          ]
        )
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: [(C {<test>} {($ Id.VSub_Pound '$#')} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<0>})]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_Number '$1'))}
              arms: [
                (case_arm
                  pat_list: [{<--stop>} {<stop>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <stop>)}
                          spids: [885]
                        )
                      ]
                    )
                  ]
                  spids: [879 882 891 -1]
                )
                (case_arm
                  pat_list: [{<--start>} {<start>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <start>)}
                          spids: [900]
                        )
                      ]
                    )
                  ]
                  spids: [894 897 906 -1]
                )
                (case_arm
                  pat_list: [{<--restart>} {<restart>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:action)
                          op: assign_op.Equal
                          rhs: {(DQ <restart>)}
                          spids: [915]
                        )
                      ]
                    )
                  ]
                  spids: [909 912 921 -1]
                )
                (case_arm
                  pat_list: [{<-l>} {<--local>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:local)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [930]
                        )
                      ]
                    )
                  ]
                  spids: [924 927 934 -1]
                )
                (case_arm
                  pat_list: [{<-d>} {<--httpd>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:httpd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$1'))}
                          spids: [946]
                        )
                      ]
                    )
                  ]
                  spids: [937 940 952 -1]
                )
                (case_arm
                  pat_list: [{<-b>} {<--browser>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:browser)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$1'))}
                          spids: [964]
                        )
                      ]
                    )
                  ]
                  spids: [955 958 970 -1]
                )
                (case_arm
                  pat_list: [{<-p>} {<--port>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:port)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$1'))}
                          spids: [982]
                        )
                      ]
                    )
                  ]
                  spids: [973 976 988 -1]
                )
                (case_arm
                  pat_list: [{<-m>} {<--module-path>}]
                  action: [
                    (C {<shift>})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:module_path)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$1'))}
                          spids: [1000]
                        )
                      ]
                    )
                  ]
                  spids: [991 994 1006 -1]
                )
                (case_arm pat_list:[{<-->}] spids:[1009 1010 1013 -1])
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [(C {<usage>})]
                  spids: [1016 1017 1023 -1]
                )
              ]
            )
            (C {<shift>})
          ]
        )
    )
    (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$GIT_DIR') </gitweb/tmp>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_EXEC_PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: (command.CommandList children:[(C {<git>} {<--exec-path>})])
                )
              )
            }
          spids: [1043]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_DIR)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir'))}
          spids: [1052]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GITWEB_CONFIG)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)}
          spids: [1057]
        )
      ]
    )
    (C {<export>} {<GIT_EXEC_PATH>} {<GIT_DIR>} {<GITWEB_CONFIG>})
    (command.ShFunction
      name: webrick_conf
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:wrapper)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') 
                        </wrapper.sh>
                      )
                    }
                  spids: [1092]
                )
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$wrapper'))}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 1128
                  stdin_parts: [
                    <'#!@SHELL_PATH@\n'>
                    <'# we use this shell script wrapper around the real gitweb.cgi since\n'>
                    <'# there appears to be no other way to pass arbitrary environment variables\n'>
                    <'# into the CGI process\n'>
                    <'GIT_EXEC_PATH='>
                    ($ Id.VSub_DollarName '$GIT_EXEC_PATH')
                    <' GIT_DIR='>
                    ($ Id.VSub_DollarName '$GIT_DIR')
                    <' GITWEB_CONFIG='>
                    ($ Id.VSub_DollarName '$GITWEB_CONFIG')
                    <'\n'>
                    <'export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG\n'>
                    <'exec '>
                    ($ Id.VSub_DollarName '$root')
                    <'/gitweb.cgi\n'>
                  ]
                )
              ]
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} {(DQ ($ Id.VSub_DollarName '$wrapper'))})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: 
                    {
                      (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') 
                        <.rb>
                      )
                    }
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 1226
                  stdin_parts: [
                    <'#!/usr/bin/env ruby\n'>
                    <"require 'webrick'\n">
                    <"require 'logger'\n">
                    <'options = {\n'>
                    <'  :Port => '>
                    ($ Id.VSub_DollarName '$port')
                    <',\n'>
                    <'  :DocumentRoot => '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <"  :Logger => Logger.new('">
                    ($ Id.VSub_DollarName '$fqgitdir')
                    <"/gitweb/error.log'),\n">
                    <'  :AccessLog => [\n'>
                    <"    [ Logger.new('">
                    ($ Id.VSub_DollarName '$fqgitdir')
                    <"/gitweb/access.log'),\n">
                    <'      WEBrick::AccessLog::COMBINED_LOG_FORMAT ]\n'>
                    <'  ],\n'>
                    <'  :DirectoryIndex => ['>
                    <Id.Right_DoubleQuote '"'>
                    <gitweb.cgi>
                    <Id.Right_DoubleQuote '"'>
                    <'],\n'>
                    <'  :CGIInterpreter => '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$wrapper')
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  :StartCallback => lambda do\n'>
                    <'    File.open('>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </pid>
                    <Id.Right_DoubleQuote '"'>
                    <', '>
                    <Id.Right_DoubleQuote '"'>
                    <w>
                    <Id.Right_DoubleQuote '"'>
                    <') { |f| f.puts Process.pid }\n'>
                    <'  end,\n'>
                    <'  :ServerType => WEBrick::Daemon,\n'>
                    <'}\n'>
                    <"options[:BindAddress] = '127.0.0.1' if ">
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$local')
                    <Id.Right_DoubleQuote '"'>
                    <' == '>
                    <Id.Right_DoubleQuote '"'>
                    <true>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'server = WEBrick::HTTPServer.new(options)\n'>
                    <"['INT', 'TERM'].each do |signal|\n">
                    <'  trap(signal) {server.shutdown}\n'>
                    <'end\n'>
                    <'server.start\n'>
                  ]
                )
              ]
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} 
              {
                (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd') <.rb>)
              }
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))})
          ]
        )
    )
    (command.ShFunction
      name: lighttpd_conf
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 1821
                  stdin_parts: [
                    <'server.document-root = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'server.port = '>
                    ($ Id.VSub_DollarName '$port')
                    <'\n'>
                    <'server.modules = ( '>
                    <Id.Right_DoubleQuote '"'>
                    <mod_setenv>
                    <Id.Right_DoubleQuote '"'>
                    <', '>
                    <Id.Right_DoubleQuote '"'>
                    <mod_cgi>
                    <Id.Right_DoubleQuote '"'>
                    <' )\n'>
                    <'server.indexfiles = ( '>
                    <Id.Right_DoubleQuote '"'>
                    <gitweb.cgi>
                    <Id.Right_DoubleQuote '"'>
                    <' )\n'>
                    <'server.pid-file = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </pid>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'server.errorlog = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    </error.log>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'\n'>
                    <'# to enable, add '>
                    <Id.Right_DoubleQuote '"'>
                    <mod_access>
                    <Id.Right_DoubleQuote '"'>
                    <', '>
                    <Id.Right_DoubleQuote '"'>
                    <mod_accesslog>
                    <Id.Right_DoubleQuote '"'>
                    <' to server.modules\n'>
                    <'# variable above and uncomment this\n'>
                    <'#accesslog.filename = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    </access.log>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'\n'>
                    <'setenv.add-environment = ( '>
                    <Id.Right_DoubleQuote '"'>
                    <PATH>
                    <Id.Right_DoubleQuote '"'>
                    <' => env.PATH, '>
                    <Id.Right_DoubleQuote '"'>
                    <GITWEB_CONFIG>
                    <Id.Right_DoubleQuote '"'>
                    <' => env.GITWEB_CONFIG )\n'>
                    <'\n'>
                    <'cgi.assign = ( '>
                    <Id.Right_DoubleQuote '"'>
                    <.cgi>
                    <Id.Right_DoubleQuote '"'>
                    <' => '>
                    <Id.Right_DoubleQuote '"'>
                    <Id.Right_DoubleQuote '"'>
                    <' )\n'>
                    <'\n'>
                    <'# mimetype mapping\n'>
                    <'mimetype.assign             = (\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.pdf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/pdf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.sig>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/pgp-signature>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.spl>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/futuresplash>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.class>
                    <Id.Right_DoubleQuote '"'>
                    <'        =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/octet-stream>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.ps>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/postscript>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.torrent>
                    <Id.Right_DoubleQuote '"'>
                    <'      =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bittorrent>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.dvi>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-dvi>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.gz>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-gzip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.pac>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-ns-proxy-autoconfig>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.swf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-shockwave-flash>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.tar.gz>
                    <Id.Right_DoubleQuote '"'>
                    <'       =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tgz>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.tgz>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tgz>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.tar>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.zip>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/zip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.mp3>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.m3u>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-mpegurl>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.wma>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-ms-wma>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.wax>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-ms-wax>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.ogg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/ogg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.wav>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-wav>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.gif>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/gif>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.jpg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.png>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/png>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.xbm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xbitmap>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.xpm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xpixmap>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.xwd>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xwindowdump>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.css>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/css>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.html>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/html>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.htm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/html>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.js>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/javascript>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.asc>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.c>
                    <Id.Right_DoubleQuote '"'>
                    <'            =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.cpp>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.log>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.conf>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.text>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.txt>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.dtd>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/xml>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.xml>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/xml>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.mpg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.mov>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/quicktime>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.qt>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/quicktime>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.avi>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-msvideo>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.asf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-asf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.asx>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-asf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.wmv>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-wmv>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.bz2>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.tbz>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip-compressed-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <.tar.bz2>
                    <Id.Right_DoubleQuote '"'>
                    <'      =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip-compressed-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'  '>
                    <Id.Right_DoubleQuote '"'>
                    <Id.Right_DoubleQuote '"'>
                    <'              =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <' )\n'>
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<x> (DQ ($ Id.VSub_DollarName '$local'))} {<Id.Lit_Equals '='>} {<xtrue>})
                (command.Simple
                  words: [{<echo>} {(SQ <'server.bind = "127.0.0.1"'>)}]
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_DGreat '>>'>
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: apache2_conf
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [(C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$module_path'))})]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<test>} {<-d>} {(DQ </usr/lib/httpd/modules>)})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:module_path)
                              op: assign_op.Equal
                              rhs: {(DQ </usr/lib/httpd/modules>)}
                              spids: [1884]
                            )
                          ]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<test>} {<-d>} {(DQ </usr/lib/apache2/modules>)})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:module_path)
                              op: assign_op.Equal
                              rhs: {(DQ </usr/lib/apache2/modules>)}
                              spids: [1901]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [1859 1870]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:bind)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [1910]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test>} {<x> (DQ ($ Id.VSub_DollarName '$local'))} {<Id.Lit_Equals '='>} {<xtrue>})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:bind)
                      op: assign_op.Equal
                      rhs: {(SQ <'127.0.0.1:'>)}
                      spids: [1926]
                    )
                  ]
                )
              ]
            )
            (command.Simple
              words: [{<echo>} {(SQ <'text/css css'>)}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </mime.types>)}
                )
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 1999
                  stdin_parts: [
                    <'ServerName '>
                    <Id.Right_DoubleQuote '"'>
                    <git-instaweb>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'ServerRoot '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'DocumentRoot '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'ErrorLog '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    </error.log>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'CustomLog '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    </access.log>
                    <Id.Right_DoubleQuote '"'>
                    <' combined\n'>
                    <'PidFile '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </pid>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'Listen '>
                    ($ Id.VSub_DollarName '$bind')
                    ($ Id.VSub_DollarName '$port')
                    <'\n'>
                  ]
                )
              ]
            )
            (command.ForEach
              iter_name: mod
              iter_words: [{<mpm_event>} {<mpm_prefork>} {<mpm_worker>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<test>} {<-e>} 
                              {($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) 
                                <.so>
                              }
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName '$module_path') </mod_> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  fd: -1
                                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Break break>
                            )
                          ]
                          spids: [2018 2032]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ForEach
              iter_name: mod
              iter_words: [{<mime>} {<dir>} {<env>} {<log_config>} {<authz_core>}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<test>} {<-e>} 
                              {($ Id.VSub_DollarName '$module_path') </mod_> (${ Id.VSub_Name mod) 
                                <.so>
                              }
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {(DQ <'LoadModule '> (${ Id.VSub_Name mod) <'_module '>)}
                                {
                                  (DQ ($ Id.VSub_DollarName '$module_path') </mod_> 
                                    (${ Id.VSub_Name mod) <.so>
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  fd: -1
                                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                                )
                              ]
                            )
                          ]
                          spids: [2096 2110]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_DGreat '>>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 2166
                  stdin_parts: [
                    <'TypesConfig '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </mime.types>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'DirectoryIndex gitweb.cgi\n'>
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$module_path') </mod_perl.so>)})
                        (command.Simple
                          words: [
                            {<sane_grep>}
                            {(SQ <MOD_PERL>)}
                            {(DQ ($ Id.VSub_DollarName '$root') </gitweb.cgi>)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_Great '>'>
                              fd: -1
                              arg_word: {</dev/null>}
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{<cat>}]
                      redirects: [
                        (redir.Redir
                          op: <Id.Redir_DGreat '>>'>
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                        )
                        (redir.HereDoc
                          op: <Id.Redir_DLess '<<'>
                          fd: -1
                          here_begin: {<EOF>}
                          here_end_span_id: 2237
                          stdin_parts: [
                            <'LoadModule perl_module '>
                            ($ Id.VSub_DollarName '$module_path')
                            <'/mod_perl.so\n'>
                            <'PerlPassEnv GIT_DIR\n'>
                            <'PerlPassEnv GIT_EXEC_PATH\n'>
                            <'PerlPassEnv GITWEB_CONFIG\n'>
                            <'<Location /gitweb.cgi>\n'>
                            <'\tSetHandler perl-script\n'>
                            <'\tPerlResponseHandler ModPerl::Registry\n'>
                            <'\tPerlOptions +ParseHeaders\n'>
                            <'\tOptions +ExecCGI\n'>
                            <'</Location>\n'>
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [2177 2206]
                )
              ]
              else_action: [
                (C {<resolve_full_httpd>})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:list_mods)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {<echo>} {(DQ ($ Id.VSub_DollarName '$full_httpd'))})
                                      (C {<sed>} {(SQ <'s/-f$/-l/'>)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [2249]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$list_mods')})
                        (command.Simple
                          words: [{<sane_grep>} {(SQ <'mod_cgi\\.c'>)}]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_Great '>'>
                              fd: -1
                              arg_word: {</dev/null>}
                            )
                            (redir.Redir
                              op: <Id.Redir_GreatAnd '2>&'>
                              fd: 2
                              arg_word: {<1>}
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {<test>} {<-f>} {(DQ ($ Id.VSub_DollarName '$module_path') </mod_cgi.so>)})
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {<echo>}
                                {
                                  (DQ <'LoadModule cgi_module '> ($ Id.VSub_DollarName '$module_path') 
                                    </mod_cgi.so>
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  fd: -1
                                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                                )
                              ]
                            )
                          ]
                          spids: [2287 2299]
                        )
                      ]
                      else_action: [
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {($ Id.VSub_DollarName '$list_mods')})
                                (command.Simple
                                  words: [{<grep>} {(SQ <'mod_cgid\\.c'>)}]
                                  redirects: [
                                    (redir.Redir
                                      op: <Id.Redir_Great '>'>
                                      fd: -1
                                      arg_word: {</dev/null>}
                                    )
                                    (redir.Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      fd: 2
                                      arg_word: {<1>}
                                    )
                                  ]
                                )
                              ]
                              negated: F
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {<test>} {<-f>} 
                                      {(DQ ($ Id.VSub_DollarName '$module_path') </mod_cgid.so>)}
                                    )
                                  ]
                                  action: [
                                    (command.Simple
                                      words: [
                                        {<echo>}
                                        {
                                          (DQ <'LoadModule cgid_module '> 
                                            ($ Id.VSub_DollarName '$module_path') </mod_cgid.so>
                                          )
                                        }
                                      ]
                                      redirects: [
                                        (redir.Redir
                                          op: <Id.Redir_DGreat '>>'>
                                          fd: -1
                                          arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [2340 2352]
                                )
                              ]
                              else_action: [
                                (C {<echo>} {(DQ <'You have no CGI support!'>)})
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Exit exit>
                                  arg_word: {<2>}
                                )
                              ]
                            )
                          ]
                        )
                        (command.Simple
                          words: [{<echo>} {(DQ <'ScriptSock logs/gitweb.sock'>)}]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_DGreat '>>'>
                              fd: -1
                              arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir.Redir
                      op: <Id.Redir_DGreat '>>'>
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                    )
                    (redir.HereDoc
                      op: <Id.Redir_DLess '<<'>
                      fd: -1
                      here_begin: {<EOF>}
                      here_end_span_id: 2425
                      stdin_parts: [
                        <'PassEnv GIT_DIR\n'>
                        <'PassEnv GIT_EXEC_PATH\n'>
                        <'PassEnv GITWEB_CONFIG\n'>
                        <'AddHandler cgi-script .cgi\n'>
                        <'<Location /gitweb.cgi>\n'>
                        <'\tOptions +ExecCGI\n'>
                        <'</Location>\n'>
                      ]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: mongoose_conf
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$conf'))}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 2494
                  stdin_parts: [
                    <'# Mongoose web server configuration file.\n'>
                    <"# Lines starting with '#' and empty lines are ignored.\n">
                    <'# For detailed description of every option, visit\n'>
                    <'# http://code.google.com/p/mongoose/wiki/MongooseManual\n'>
                    <'\n'>
                    <'root\t\t'>
                    ($ Id.VSub_DollarName '$root')
                    <'\n'>
                    <'ports\t\t'>
                    ($ Id.VSub_DollarName '$port')
                    <'\n'>
                    <'index_files\tgitweb.cgi\n'>
                    <'#ssl_cert\t'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    <'/gitweb/ssl_cert.pem\n'>
                    <'error_log\t'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    <'/error.log\n'>
                    <'access_log\t'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    <'/access.log\n'>
                    <'\n'>
                    <'#cgi setup\n'>
                    <'cgi_env\t\tPATH='>
                    ($ Id.VSub_DollarName '$PATH')
                    <',GIT_DIR='>
                    ($ Id.VSub_DollarName '$GIT_DIR')
                    <',GIT_EXEC_PATH='>
                    ($ Id.VSub_DollarName '$GIT_EXEC_PATH')
                    <',GITWEB_CONFIG='>
                    ($ Id.VSub_DollarName '$GITWEB_CONFIG')
                    <'\n'>
                    <'cgi_interp\t'>
                    ($ Id.VSub_DollarName '$PERL')
                    <'\n'>
                    <'cgi_ext\t\tcgi,pl\n'>
                    <'\n'>
                    <'# mimetype mapping\n'>
                    <
'mime_types\t.gz=application/x-gzip,.tar.gz=application/x-tgz,.tgz=application/x-tgz,.tar=application/x-tar,.zip=application/zip,.gif=image/gif,.jpg=image/jpeg,.jpeg=image/jpeg,.png=image/png,.css=text/css,.html=text/html,.htm=text/html,.js=text/javascript,.c=text/plain,.cpp=text/plain,.log=text/plain,.conf=text/plain,.text=text/plain,.txt=text/plain,.dtd=text/xml,.bz2=application/x-bzip,.tbz=application/x-bzip-compressed-tar,.tar.bz2=application/x-bzip-compressed-tar\n'
                    >
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: plackup_conf
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 3211
                  stdin_parts: [
                    <'#!'>
                    ($ Id.VSub_DollarName '$PERL')
                    <'\n'>
                    <'\n'>
                    <'# gitweb - simple web interface to track changes in git repositories\n'>
                    <'#          PSGI wrapper and server starter (see http://plackperl.org)\n'>
                    <'\n'>
                    <'use strict;\n'>
                    <'\n'>
                    <'use IO::Handle;\n'>
                    <'use Plack::MIME;\n'>
                    <'use Plack::Builder;\n'>
                    <'use Plack::App::WrapCGI;\n'>
                    <
'use CGI::Emulate::PSGI 0.07; # minimum version required to work with gitweb\n'
                    >
                    <'\n'>
                    <'# mimetype mapping (from lighttpd_conf)\n'>
                    <'Plack::MIME->add_type(\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.pdf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/pdf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.sig>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/pgp-signature>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.spl>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/futuresplash>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.class>
                    <Id.Right_DoubleQuote '"'>
                    <'        =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/octet-stream>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.ps>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/postscript>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.torrent>
                    <Id.Right_DoubleQuote '"'>
                    <'      =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bittorrent>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.dvi>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-dvi>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.gz>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-gzip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.pac>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-ns-proxy-autoconfig>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.swf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-shockwave-flash>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.tar.gz>
                    <Id.Right_DoubleQuote '"'>
                    <'       =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tgz>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.tgz>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tgz>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.tar>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.zip>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/zip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.mp3>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.m3u>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-mpegurl>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.wma>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-ms-wma>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.wax>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-ms-wax>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.ogg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/ogg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.wav>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <audio/x-wav>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.gif>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/gif>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.jpg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/jpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.png>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/png>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.xbm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xbitmap>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.xpm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xpixmap>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.xwd>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <image/x-xwindowdump>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.css>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/css>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.html>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/html>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.htm>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/html>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.js>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/javascript>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.asc>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.c>
                    <Id.Right_DoubleQuote '"'>
                    <'            =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.cpp>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.log>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.conf>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.text>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.txt>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.dtd>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/xml>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.xml>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/xml>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <'         =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.mpg>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/mpeg>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.mov>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/quicktime>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.qt>
                    <Id.Right_DoubleQuote '"'>
                    <'           =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/quicktime>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.avi>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-msvideo>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.asf>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-asf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.asx>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-asf>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.wmv>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <video/x-ms-wmv>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.bz2>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.tbz>
                    <Id.Right_DoubleQuote '"'>
                    <'          =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip-compressed-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <.tar.bz2>
                    <Id.Right_DoubleQuote '"'>
                    <'      =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <application/x-bzip-compressed-tar>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t'>
                    <Id.Right_DoubleQuote '"'>
                    <Id.Right_DoubleQuote '"'>
                    <'              =>      '>
                    <Id.Right_DoubleQuote '"'>
                    <text/plain>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <');\n'>
                    <'\n'>
                    <'my '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app = builder {\n'>
                    <'\t# to be able to override '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'SIG{__WARN__} to log build time warnings\n'>
                    <'\tuse CGI::Carp; # it sets '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'SIG{__WARN__} itself\n'>
                    <'\n'>
                    <'\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'logdir = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/>
                    ($ Id.VSub_DollarName '$httpd_only')
                    <Id.Right_DoubleQuote '"'>
                    <';\n'>
                    <'\topen my '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"access_log_fh, '>>', ">
                    <Id.Right_DoubleQuote '"'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <logdir/access.log>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'\t\tor die '>
                    <Id.Right_DoubleQuote '"'>
                    <"Couldn't open access log '">
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"logdir/access.log': ">
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'!'>
                    <Id.Right_DoubleQuote '"'>
                    <';\n'>
                    <'\topen my '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"error_log_fh,  '>>', ">
                    <Id.Right_DoubleQuote '"'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <logdir/error.log>
                    <Id.Right_DoubleQuote '"'>
                    <'\n'>
                    <'\t\tor die '>
                    <Id.Right_DoubleQuote '"'>
                    <"Couldn't open error log '">
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"logdir/error.log': ">
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'!'>
                    <Id.Right_DoubleQuote '"'>
                    <';\n'>
                    <'\n'>
                    <'\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'access_log_fh->autoflush(1);\n'>
                    <'\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'error_log_fh->autoflush(1);\n'>
                    <'\n'>
                    <'\t# redirect build time warnings to error.log\n'>
                    <'\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"SIG{'__WARN__'} = sub {\n">
                    <'\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'msg = shift;\n'>
                    <'\t\t# timestamp warning like in CGI::Carp::warn\n'>
                    <'\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'stamp = CGI::Carp::stamp();\n'>
                    <'\t\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'msg =~ s/^/'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'stamp/gm;\n'>
                    <'\t\tprint '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'error_log_fh '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'msg;\n'>
                    <'\t};\n'>
                    <'\n'>
                    <'\t# write errors to error.log, access to access.log\n'>
                    <"\tenable 'AccessLog',\n">
                    <'\t\tformat => '>
                    <Id.Right_DoubleQuote '"'>
                    <combined>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <'\t\tlogger => sub { print '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'access_log_fh @_; };\n'>
                    <'\tenable sub {\n'>
                    <'\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app = shift;\n'>
                    <'\t\tsub {\n'>
                    <'\t\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'env = shift;\n'>
                    <'\t\t\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"env->{'psgi.errors'} = ">
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'error_log_fh;\n'>
                    <'\t\t\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app->('>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'env);\n'>
                    <'\t\t}\n'>
                    <'\t};\n'>
                    <"\t# gitweb currently doesn't work with ">
                    ($ Id.VSub_DollarName '$SIG')
                    <"{CHLD} set to 'IGNORE',\n">
                    <"\t# because it uses 'close ">
                    ($ Id.VSub_DollarName '$fd')
                    <" or die...' on piped filehandle ">
                    ($ Id.VSub_DollarName '$fh')
                    <'\n'>
                    <'\t# (which causes the parent process to wait for child to finish).\n'>
                    <'\tenable_if { '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"SIG{'CHLD'} eq 'IGNORE' } sub {\n">
                    <'\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app = shift;\n'>
                    <'\t\tsub {\n'>
                    <'\t\t\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'env = shift;\n'>
                    <'\t\t\tlocal '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"SIG{'CHLD'} = 'DEFAULT';\n">
                    <'\t\t\tlocal '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"SIG{'CLD'}  = 'DEFAULT';\n">
                    <'\t\t\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app->('>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'env);\n'>
                    <'\t\t}\n'>
                    <'\t};\n'>
                    <'\t# serve static files, i.e. stylesheet, images, script\n'>
                    <"\tenable 'Static',\n">
                    <'\t\tpath => sub { m!'>
                    <Id.Lit_Other '\\'>
                    <'.(js|css|png)'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'! && s!^/gitweb/!! },\n'>
                    <'\t\troot => '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    </>
                    <Id.Right_DoubleQuote '"'>
                    <',\n'>
                    <"\t\tencoding => 'utf-8'; # encoding for 'text/plain' files\n">
                    <'\t# convert CGI application to PSGI app\n'>
                    <'\tPlack::App::WrapCGI->new(script => '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$root')
                    </gitweb.cgi>
                    <Id.Right_DoubleQuote '"'>
                    <')->to_app;\n'>
                    <'};\n'>
                    <'\n'>
                    <'# make it runnable as standalone app,\n'>
                    <"# like it would be run via 'plackup' utility\n">
                    <'if (caller) {\n'>
                    <'\treturn '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app;\n'>
                    <'} else {\n'>
                    <'\trequire Plack::Runner;\n'>
                    <'\n'>
                    <'\tmy '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'runner = Plack::Runner->new();\n'>
                    <'\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'runner->parse_options(qw(--env deployment --port '>
                    ($ Id.VSub_DollarName '$port')
                    <'),\n'>
                    <'\t\t\t\t'>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$local')
                    <Id.Right_DoubleQuote '"'>
                    <' ? qw(--host 127.0.0.1) : ());\n'>
                    <'\t'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'runner->run('>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'app);\n'>
                    <'}\n'>
                    <'__END__\n'>
                  ]
                )
              ]
            )
            (C {<chmod>} {<a> <Id.Lit_Other '+'> <x>} 
              {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb.psgi>)}
            )
            (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$conf'))})
          ]
        )
    )
    (command.ShFunction
      name: gitweb_conf
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/gitweb_config.perl>)}
                )
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 3291
                  stdin_parts: [
                    <'#!@@PERL@@\n'>
                    <'our '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'projectroot = '>
                    <Id.Right_DoubleQuote '"'>
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      command_list: 
                        (command.CommandList
                          children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$fqgitdir'))})]
                        )
                    )
                    <Id.Right_DoubleQuote '"'>
                    <';\n'>
                    <'our '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'git_temp = '>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$fqgitdir')
                    </gitweb/tmp>
                    <Id.Right_DoubleQuote '"'>
                    <';\n'>
                    <'our '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'projects_list = '>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <'projectroot;\n'>
                    <'\n'>
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                    <"feature{'remote_heads'}{'default'} = [1];\n">
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: configure_httpd
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$httpd'))}
              arms: [
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <lighttpd> <Id.Lit_Star '*'>}]
                  action: [(C {<lighttpd_conf>})]
                  spids: [3311 3314 3320 -1]
                )
                (case_arm
                  pat_list: [
                    {<Id.Lit_Star '*'> <apache2> <Id.Lit_Star '*'>}
                    {<Id.Lit_Star '*'> <httpd> <Id.Lit_Star '*'>}
                  ]
                  action: [(C {<apache2_conf>})]
                  spids: [3323 3330 3336 -1]
                )
                (case_arm
                  pat_list: [{<webrick>}]
                  action: [(C {<webrick_conf>})]
                  spids: [3339 3340 3346 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <mongoose> <Id.Lit_Star '*'>}]
                  action: [(C {<mongoose_conf>})]
                  spids: [3349 3352 3358 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'> <plackup> <Id.Lit_Star '*'>}]
                  action: [(C {<plackup_conf>})]
                  spids: [3361 3364 3370 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<echo>} {(DQ <'Unknown httpd specified: '> ($ Id.VSub_DollarName '$httpd'))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [3373 3374 3390 -1]
                )
              ]
            )
          ]
        )
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$action'))}
      arms: [
        (case_arm
          pat_list: [{<stop>}]
          action: [
            (C {<stop_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3406 3407 3418 -1]
        )
        (case_arm
          pat_list: [{<start>}]
          action: [
            (C {<start_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3420 3421 3432 -1]
        )
        (case_arm
          pat_list: [{<restart>}]
          action: [
            (C {<stop_httpd>})
            (C {<start_httpd>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
          ]
          spids: [3434 3435 3449 -1]
        )
      ]
    )
    (C {<gitweb_conf>})
    (C {<resolve_full_httpd>})
    (C {<mkdir>} {<-p>} 
      {(DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only'))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:conf)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$fqgitdir') </gitweb/> ($ Id.VSub_DollarName '$httpd_only') 
                <.conf>
              )
            }
          spids: [3469]
        )
      ]
    )
    (C {<configure_httpd>})
    (C {<start_httpd>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:url)
          op: assign_op.Equal
          rhs: 
            {<http> <Id.Lit_Other ':'> <//127.0.0.1> <Id.Lit_Other ':'> ($ Id.VSub_DollarName '$port')}
          spids: [3483]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$browser'))})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {<httpd_is_ready>})
                (C {<git>} {<web--browse>} {<-b>} {(DQ ($ Id.VSub_DollarName '$browser'))} 
                  {($ Id.VSub_DollarName '$url')}
                )
                (C {<echo>} {($ Id.VSub_DollarName '$url')})
              ]
            )
          ]
          spids: [3491 3502]
        )
      ]
      else_action: [
        (command.AndOr
          ops: [Id.Op_DAmp Id.Op_DPipe]
          children: [
            (C {<httpd_is_ready>})
            (C {<git>} {<web--browse>} {<-c>} {(DQ <instaweb.browser>)} {($ Id.VSub_DollarName '$url')})
            (C {<echo>} {($ Id.VSub_DollarName '$url')})
          ]
        )
      ]
    )
  ]
)