(command.CommandList
  children: [
    (command.ShFunction
      name: echo_then_sudo
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(echo)} {(DQ ('About to execute privileged command: ') ($ Id.VSub_At '$@'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:19)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (C {(sudo)} {(-k)} {(DQ ($ Id.VSub_At '$@'))})
          ]
        )
    )
    (command.ShFunction
      name: fixup_debuglink
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(echo)} {(DQ ('begin fixup_debuglink'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:54)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:obj)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [58]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:debuglink)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [64]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:current_debuglink)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:72)
                          command_list: 
                            (command.CommandList
                              children: [(C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))})]
                            )
                        )
                      )
                    }
                  spids: [70]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:has_debuglink)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [84]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_DollarName '$has_debuglink')}
                                  right: {(0)}
                                )
                            )
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ ($ Id.VSub_DollarName '$current_debuglink'))}
                                  right: {(DQ ($ Id.VSub_DollarName '$debuglink'))}
                                )
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:117)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(echo)}
                        {
                          (DQ ('detected that debuglink ') ($ Id.VSub_DollarName '$debuglink_value') 
                            (' is already valid')
                          )
                        }
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:130)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:134)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [90 119]
                )
              ]
              else_action: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: {($ Id.VSub_DollarName '$has_debuglink')}
                                  right: {(0)}
                                )
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:153)
                        )
                      ]
                      action: [
                        (command.Simple
                          words: [
                            {(echo)}
                            {
                              (DQ ('detected that debuglink ') 
                                ($ Id.VSub_DollarName '$current_debuglink') (' needs fixing up to ') ($ Id.VSub_DollarName '$debuglink')
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:168)
                              fd: 1
                              arg_word: {(2)}
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:tmpfile)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:178)
                                      command_list: (command.CommandList children:[(C {(mktemp)})])
                                    )
                                  )
                                }
                              spids: [176]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:saved_ug)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:186)
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(stat)} {(-c)} {(DQ ('%u:%g'))} 
                                              {
                                                (DQ 
                                                  (command_sub
                                                    left_token: 
                                                      (Token
                                                        id: Id.Left_DollarParen
                                                        val: '$('
                                                        span_id: 197
                                                      )
                                                    command_list: 
                                                      (command.CommandList
                                                        children: [
                                                          (C {(readlink)} {(-f)} 
                                                            {(DQ ($ Id.VSub_DollarName '$obj'))}
                                                          )
                                                        ]
                                                      )
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                        )
                                    )
                                  )
                                }
                              spids: [184]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:saved_mode)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:216)
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(stat)} {(-c)} {(DQ ('%a'))} 
                                              {
                                                (DQ 
                                                  (command_sub
                                                    left_token: 
                                                      (Token
                                                        id: Id.Left_DollarParen
                                                        val: '$('
                                                        span_id: 227
                                                      )
                                                    command_list: 
                                                      (command.CommandList
                                                        children: [
                                                          (C {(readlink)} {(-f)} 
                                                            {(DQ ($ Id.VSub_DollarName '$obj'))}
                                                          )
                                                        ]
                                                      )
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                        )
                                    )
                                  )
                                }
                              spids: [214]
                            )
                          ]
                        )
                        (command.Sentence
                          child: 
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (command.Subshell
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.AndOr
                                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                                          children: [
                                            (C {(echo_then_sudo)} {(objcopy)} {(--remove-section)} 
                                              {(.gnu_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                                            )
                                            (C {(echo_then_sudo)} {(chown)} 
                                              {(DQ ($ Id.VSub_DollarName '$saved_ug'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                                            )
                                            (C {(echo_then_sudo)} {(chmod)} 
                                              {(DQ ($ Id.VSub_DollarName '$saved_mode'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                                            )
                                            (C {(echo_then_sudo)} {(mv)} 
                                              {(DQ ($ Id.VSub_DollarName '$tmpfile'))} {(DQ ($ Id.VSub_DollarName '$obj'))}
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                )
                                (command.Simple
                                  words: [{(echo)} {(DQ ('objcopy failed'))}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:321)
                                      fd: 1
                                      arg_word: {(2)}
                                    )
                                  ]
                                )
                              ]
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:323)
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:325)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [142 155]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:tmpfile)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:343)
                              command_list: (command.CommandList children:[(C {(mktemp)})])
                            )
                          )
                        }
                      spids: [341]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:saved_ug)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:351)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(stat)} {(-c)} {(DQ ('%u:%g'))} 
                                      {
                                        (DQ 
                                          (command_sub
                                            left_token: 
                                              (Token
                                                id: Id.Left_DollarParen
                                                val: '$('
                                                span_id: 362
                                              )
                                            command_list: 
                                              (command.CommandList
                                                children: [
                                                  (C {(readlink)} {(-f)} 
                                                    {(DQ ($ Id.VSub_DollarName '$obj'))}
                                                  )
                                                ]
                                              )
                                          )
                                        )
                                      }
                                    )
                                  ]
                                )
                            )
                          )
                        }
                      spids: [349]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:saved_mode)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:381)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(stat)} {(-c)} {(DQ ('%a'))} 
                                      {
                                        (DQ 
                                          (command_sub
                                            left_token: 
                                              (Token
                                                id: Id.Left_DollarParen
                                                val: '$('
                                                span_id: 392
                                              )
                                            command_list: 
                                              (command.CommandList
                                                children: [
                                                  (C {(readlink)} {(-f)} 
                                                    {(DQ ($ Id.VSub_DollarName '$obj'))}
                                                  )
                                                ]
                                              )
                                          )
                                        )
                                      }
                                    )
                                  ]
                                )
                            )
                          )
                        }
                      spids: [379]
                    )
                  ]
                )
                (command.AndOr
                  ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe]
                  children: [
                    (C {(echo_then_sudo)} {(objcopy)} 
                      {(--add-gnu-debuglink) (Id.Lit_Equals '=') 
                        (DQ ($ Id.VSub_DollarName '$debuglink'))
                      } {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                    )
                    (C {(echo_then_sudo)} {(chown)} {(DQ ($ Id.VSub_DollarName '$saved_ug'))} 
                      {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                    )
                    (C {(echo_then_sudo)} {(chmod)} {(DQ ($ Id.VSub_DollarName '$saved_mode'))} 
                      {(DQ ($ Id.VSub_DollarName '$tmpfile'))}
                    )
                    (C {(echo_then_sudo)} {(mv)} {(DQ ($ Id.VSub_DollarName '$tmpfile'))} 
                      {(DQ ($ Id.VSub_DollarName '$obj'))}
                    )
                    (command.Simple
                      words: [{(echo)} {(DQ (success))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:485)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:490)
                      arg_word: {(0)}
                    )
                    (command.Subshell
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  words: [{(echo)} {(DQ ('objcopy failed'))}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:505)
                                      fd: 1
                                      arg_word: {(2)}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:507)
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:509)
                              arg_word: {(1)}
                            )
                          ]
                        )
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: contains_debug_symbols
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(objdump)} {(-h)} {(DQ ($ Id.VSub_Number '$1'))})
                (command.Simple
                  words: [{(grep)} {(SQ (Token id:Id.Lit_Chars val:'\\.debug_info' span_id:541))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'1>' span_id:544)
                      fd: 1
                      arg_word: {(/dev/null)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:547)
                      fd: 2
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: read_debuglink
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:debuglink_info)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:563)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(objdump)} {(-h)} {(DQ ($ Id.VSub_Number '$1'))})
                                    (C {(grep)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: '\\.gnu_debuglink'
                                            span_id: 578
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [561]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_z
                              child: {(DQ ($ Id.VSub_DollarName '$debuglink_info'))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:596)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('no debuglink in ') ($ Id.VSub_Number '$1'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:608)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:612)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [585 598]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:debuglink_off)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:622)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(echo)} {(DQ ($ Id.VSub_DollarName '$debuglink_info'))})
                                    (C {(sed)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 's/^[[:blank:]]*//'
                                            span_id: 635
                                          )
                                        )
                                      }
                                    )
                                    (C {(tr)} {(-s)} 
                                      {(SQ (Token id:Id.Lit_Chars val:'[:blank:]' span_id:645))} {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:649))}
                                    )
                                    (C {(cut)} {(-f6)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [620]
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('read debuglink_off: ') ($ Id.VSub_DollarName '$debuglink_off'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:669)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$debuglink_off'))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:684)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:debuglink_off_bytes)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: 
                                      (arith_expr.ArithWord
                                        w: 
                                          {(Id.Lit_Digits 0) (Id.Lit_ArithVarLike x) 
                                            ($ Id.VSub_DollarName '$debuglink_off')
                                          }
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)})
                                  )
                              )
                            }
                          spids: [689]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$debuglink_off_bytes'))}
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:715)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{(echo)} {(DQ ('bad debuglink header'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:726)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:731)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [704 717]
                        )
                      ]
                      else_action: [
                        (command.Pipeline
                          children: [
                            (C {(od)} 
                              {(--skip-bytes) (Id.Lit_Equals '=') 
                                (${ Id.VSub_Name debuglink_off_bytes)
                              } {(--string)} {(DQ ($ Id.VSub_Number '$1'))}
                            )
                            (C {(head)} {(-n1)})
                            (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/^[0-9a-f]* //' span_id:764))})
                          ]
                          negated: F
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:768)
                          arg_word: {(0)}
                        )
                      ]
                    )
                  ]
                  spids: [673 686]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:779)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: find_debug_file_for
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:file)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [794]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C {(readelf)} {(-wi)} {(DQ ($ Id.VSub_DollarName '$file'))})
                            (command.Simple
                              words: [{(grep)} {(-m1)} {(.)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:824)
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:826)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:debuglink_val)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:833)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$file'))})
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [831]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_n
                                      child: {(DQ ($ Id.VSub_DollarName '$debuglink_val'))}
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:856)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('Read debuglink val: ') ($ Id.VSub_DollarName '$debuglink_val'))
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:868)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:resolved_debuglink)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 874
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(resolve_debuglink)} 
                                                  {(DQ ($ Id.VSub_DollarName '$file'))} {(DQ ($ Id.VSub_DollarName '$debuglink_val'))}
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [872]
                                )
                              ]
                            )
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('Resolved debuglink to: ') 
                                    ($ Id.VSub_DollarName '$resolved_debuglink')
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:897)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))})
                          ]
                          spids: [845 858]
                        )
                      ]
                      else_action: [
                        (command.Simple
                          words: [{(echo)} {(DQ ('No debuglink found'))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:917)
                              fd: 1
                              arg_word: {(2)}
                            )
                          ]
                        )
                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))})
                      ]
                    )
                  ]
                  spids: [804 828]
                )
              ]
              else_action: [(C {(echo)} {(DQ ($ Id.VSub_DollarName '$file'))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: readelf_debug
      body: 
        (command.BraceGroup
          children: [
            (C {(declare)} {(-a)} {(args)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ctr)
                  op: assign_op.Equal
                  rhs: {(1)}
                  spids: [961]
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:965)
              cond: [
                (command.Sentence
                  child: (C {(true)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:968)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              name: args
                              index: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')})
                            )
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [973]
                        )
                      ]
                    )
                    (command.Sentence
                      child: 
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(shift)})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Break val:break span_id:985)
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:986)
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ctr)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [989]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:file)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:args span_id:1007)
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: 
                              (arith_expr.ArithWord
                                w: 
                                  {
                                    (word_part.ArithSub
                                      anode: 
                                        (arith_expr.Binary
                                          op_id: Id.Arith_Minus
                                          left: 
                                            (arith_expr.ArithWord
                                              w: {($ Id.VSub_DollarName '$ctr')}
                                            )
                                          right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                        )
                                    )
                                  }
                              )
                          )
                      )
                    }
                  spids: [1005]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('Slurped args: ') 
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:args span_id:1028)
                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                    )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1035)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ('Guessed file arg: ') ($ Id.VSub_DollarName '$file'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1046)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (C {(unset)} 
              {(Id.Lit_ArrayLhsOpen 'args[') 
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Minus
                      left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$ctr')})
                      right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                    )
                ) (Id.Lit_RBracket ']')
              }
            )
            (C {(readelf)} 
              {
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:args span_id:1069)
                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                )
              } 
              {
                (DQ 
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1076)
                    command_list: 
                      (command.CommandList
                        children: [(C {(find_debug_file_for)} {(DQ ($ Id.VSub_DollarName '$file'))})]
                      )
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: get_cu_info
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(readelf_debug)} {(-wi)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(grep)} {(-A7)} {(SQ (Token id:Id.Lit_Chars val:DW_TAG_compile_unit span_id:1113))})
                (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1121))} 
                  {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1125))}
                )
                (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s/\\f--\\f/\\n/g' span_id:1133))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: read_cu_info
      body: 
        (command.BraceGroup
          children: [
            (C {(read)} {(cu_info)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ret)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [1152]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$cu_info'))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1167)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:cu_fname)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1174)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))})
                                            (C {(tr)} 
                                              {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1187))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1191))}
                                            )
                                            (C {(grep)} {(DW_AT_name)})
                                            (C {(head)} {(-n1)})
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 
's/.*DW_AT_name[[:blank:]]*:[[:blank:]]*\\((.*, offset: 0x[0-9a-f]*): \\)\\?\\(.*\\)/\\2/'
                                                    span_id: 1211
                                                  )
                                                )
                                              }
                                            )
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 's/[[:blank:]]*$//'
                                                    span_id: 1219
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [1172]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:cu_language_fullstr)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1227)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))})
                                            (C {(tr)} 
                                              {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1240))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1244))}
                                            )
                                            (C {(grep)} {(DW_AT_language)})
                                            (C {(head)} {(-n1)})
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 
's/.*DW_AT_language[[:blank:]]*:[[:blank:]]*//'
                                                    span_id: 1264
                                                  )
                                                )
                                              }
                                            )
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 's/[[:blank:]]*$//'
                                                    span_id: 1272
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [1225]
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(echo)} {(DQ ('Note: found CU ') ($ Id.VSub_DollarName '$cu_fname'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1285)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(echo)} {(DQ ('CU info is: ') ($ Id.VSub_DollarName '$cu_info'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1296)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(echo)}
                        {
                          (DQ ('language field of CU info is ') 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1304)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_language_fullstr'))})
                                  ]
                                )
                            )
                          )
                        }
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1315)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(echo)}
                        {
                          (DQ ('comp_dir line of CU info is ') 
                            (command_sub
                              left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1323)
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.Pipeline
                                      children: [
                                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))})
                                        (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1336))} 
                                          {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1340))}
                                        )
                                        (C {(grep)} {(DW_AT_comp_dir)})
                                      ]
                                      negated: F
                                    )
                                  ]
                                )
                            )
                          )
                        }
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1352)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:cu_compdir)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1358)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$cu_info'))})
                                            (C {(tr)} 
                                              {(SQ (Token id:Id.Lit_Chars val:'\\f' span_id:1371))} {(SQ (Token id:Id.Lit_Chars val:'\\n' span_id:1375))}
                                            )
                                            (C {(grep)} {(DW_AT_comp_dir)})
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 
's/.*DW_AT_comp_dir[[:blank:]]*:[[:blank:]]*\\((.*, offset: 0x[0-9a-f]*): \\)\\?\\(.*\\)/\\2/'
                                                    span_id: 1389
                                                  )
                                                )
                                              }
                                            )
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 's/[[:blank:]]*$//'
                                                    span_id: 1397
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [1356]
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(echo)}
                        {(DQ ('Note: found comp_dir ') ($ Id.VSub_DollarName '$cu_compdir'))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1411)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$cu_fname'))}
                      arms: [
                        (case_arm
                          pat_list: [{(/) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:cu_sourcepath)
                                  op: assign_op.Equal
                                  rhs: {(DQ (${ Id.VSub_Name cu_fname))}
                                  spids: [1434]
                                )
                              ]
                            )
                          ]
                          spids: [1428 1431 1442 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:cu_sourcepath)
                                  op: assign_op.Equal
                                  rhs: 
                                    {(DQ (${ Id.VSub_Name cu_compdir) (/) (${ Id.VSub_Name cu_fname))}
                                  spids: [1450]
                                )
                              ]
                            )
                          ]
                          spids: [1445 1447 1462 -1]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:cu_language_num)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1470)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo)} 
                                              {(DQ ($ Id.VSub_DollarName '$cu_language_fullstr'))}
                                            )
                                            (C {(tr)} {(-s)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: '[[:blank:]]'
                                                    span_id: 1485
                                                  )
                                                )
                                              } {(SQ (Token id:Id.Lit_Chars val:'\\t' span_id:1489))}
                                            )
                                            (C {(cut)} {(-f1)})
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [1468]
                        )
                      ]
                    )
                  ]
                  spids: [1156 1169]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cu_fname)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                      spids: [1505]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cu_language_fullstr)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                      spids: [1510]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cu_compdir)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                      spids: [1515]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cu_sourcepath)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                      spids: [1520]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cu_language_num)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                      spids: [1525]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_eq
                              left: {($ Id.VSub_DollarName '$ret')}
                              right: {(0)}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1545)
                    )
                  ]
                  action: [
                    (command.Sentence
                      child: (C {(true)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1550)
                    )
                  ]
                  spids: [1534 1547]
                )
              ]
              else_action: [
                (command.Sentence
                  child: (C {(false)})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:1555)
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: resolve_debuglink
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:obj)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [1570]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:debuglink_value)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [1576]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:canon_obj_path)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1586)
                          command_list: 
                            (command.CommandList
                              children: [(C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))})]
                            )
                        )
                      )
                    }
                  spids: [1584]
                )
              ]
            )
            (command.ForEach
              iter_name: candidate
              iter_words: [
                {
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1608)
                      command_list: 
                        (command.CommandList
                          children: [(C {(dirname)} {(DQ ($ Id.VSub_DollarName '$canon_obj_path'))})]
                        )
                    ) (/.debug/) ($ Id.VSub_DollarName '$debuglink_value')
                  )
                }
                {(/usr/lib/debug) 
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1625)
                      command_list: 
                        (command.CommandList
                          children: [(C {(dirname)} {(${ Id.VSub_Name canon_obj_path)})]
                        )
                    )
                  ) (/) ($ Id.VSub_DollarName '$debuglink_value')
                }
                {(/usr/lib/debug/.build-id/) (Id.Lit_Star '*') (/) 
                  ($ Id.VSub_DollarName '$debuglink_value')
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$candidate'))})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1656)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('detected debug info within debuglink ') 
                                    ($ Id.VSub_DollarName '$debuglink_value') (' resolved at ') ($ Id.VSub_DollarName '$candidate')
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1670)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$candidate'))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1681)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [1649 1658]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1694)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: ensure_debug_symbols
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:obj)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [1709]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(contains_debug_symbols)} {(DQ ($ Id.VSub_DollarName '$obj'))})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1726)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [
                        {(echo)}
                        {(DQ ('detected debug info within file ') ($ Id.VSub_DollarName '$obj'))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1739)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:1750)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [1719 1728]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:debuglink_value)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 1768
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (C {(read_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))})
                                          ]
                                        )
                                    )
                                  )
                                }
                              spids: [1766]
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1778)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:resolved_debuglink)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1785)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {(resolve_debuglink)} {(DQ ($ Id.VSub_DollarName '$obj'))} 
                                          {(DQ ($ Id.VSub_DollarName '$debuglink_value'))}
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [1783]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.AndOr
                                  ops: [Id.Op_DAmp]
                                  children: [
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_n
                                          child: {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))}
                                        )
                                    )
                                    (C {(contains_debug_symbols)} 
                                      {(DQ ($ Id.VSub_DollarName '$resolved_debuglink'))}
                                    )
                                  ]
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:1820)
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('detected debug info within debuglink ') 
                                    ($ Id.VSub_DollarName '$debuglink_value') (' resolved at ') ($ Id.VSub_DollarName '$candidate')
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:1834)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (C {(echo)} {(DQ ($ Id.VSub_DollarName '$candidate'))})
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1845)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [1801 1822]
                        )
                      ]
                    )
                  ]
                  spids: [1764 1780]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:success_attempt)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [2011]
                )
              ]
            )
            (command.ForEach
              iter_name: attempt
              iter_words: [
                {(/usr/lib/debug) 
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2030)
                      command_list: 
                        (command.CommandList
                          children: [(C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))})]
                        )
                    )
                  )
                }
                {(/usr/lib/debug) 
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2047)
                      command_list: 
                        (command.CommandList
                          children: [
                            (C {(dirname)} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2052)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$obj'))})
                                        ]
                                      )
                                  )
                                )
                              }
                            )
                          ]
                        )
                    ) (/) 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2067)
                      command_list: 
                        (command.CommandList
                          children: [(C {(basename)} {(DQ ($ Id.VSub_DollarName '$obj'))})]
                        )
                    )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Simple
                      words: [
                        {(echo)}
                        {(DQ ('looking for a package containing ') ($ Id.VSub_DollarName '$attempt'))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2091)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:apt_found)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2097)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [
                                            (C {(echo_then_sudo)} {(apt-file)} {(-F)} {(find)} 
                                              {(DQ ($ Id.VSub_DollarName '$attempt'))}
                                            )
                                            (C {(sed)} 
                                              {
                                                (SQ 
                                                  (Token
                                                    id: Id.Lit_Chars
                                                    val: 's^: /.*^^'
                                                    span_id: 2116
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [2095]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_n
                                      child: {(DQ ($ Id.VSub_DollarName '$apt_found'))}
                                    )
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2134)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:pkg)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 2141
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (command.Pipeline
                                                  children: [
                                                    (C {(echo)} 
                                                      {(DQ ($ Id.VSub_DollarName '$apt_found'))}
                                                    )
                                                    (C {(cut)} {(-f1)})
                                                  ]
                                                  negated: F
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [2139]
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(echo)} {(DQ ('found ') ($ Id.VSub_DollarName '$pkg'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2166)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Sentence
                                      child: 
                                        (command.DBracket
                                          expr: 
                                            (bool_expr.Unary
                                              op_id: Id.BoolUnary_n
                                              child: {(DQ ($ Id.VSub_DollarName '$pkg'))}
                                            )
                                        )
                                      terminator: (Token id:Id.Op_Semi val:';' span_id:2181)
                                    )
                                  ]
                                  action: [
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (command.Simple
                                                  words: [
                                                    {(dpkg)}
                                                    {(-p)}
                                                    {(DQ ($ Id.VSub_DollarName '$pkg'))}
                                                  ]
                                                  redirects: [
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_Great
                                                          val: '>'
                                                          span_id: 2196
                                                        )
                                                      fd: -1
                                                      arg_word: {(/dev/null)}
                                                    )
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_Great
                                                          val: '2>'
                                                          span_id: 2199
                                                        )
                                                      fd: 2
                                                      arg_word: {(/dev/null)}
                                                    )
                                                  ]
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:2201)
                                            )
                                          ]
                                          action: [
                                            (command.Simple
                                              words: [
                                                {(echo)}
                                                {
                                                  (DQ ($ Id.VSub_DollarName '$pkg') 
                                                    (' is already installed')
                                                  )
                                                }
                                              ]
                                              redirects: [
                                                (redir.Redir
                                                  op: 
                                                    (Token
                                                      id: Id.Redir_GreatAnd
                                                      val: '1>&'
                                                      span_id: 2213
                                                    )
                                                  fd: 1
                                                  arg_word: {(2)}
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [2186 2203]
                                        )
                                      ]
                                      else_action: [
                                        (command.Simple
                                          words: [
                                            {(echo)}
                                            {
                                              (DQ ('Attempting install of ') 
                                                ($ Id.VSub_DollarName '$pkg')
                                              )
                                            }
                                          ]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2227)
                                              fd: 1
                                              arg_word: {(2)}
                                            )
                                          ]
                                        )
                                        (command.If
                                          arms: [
                                            (if_arm
                                              cond: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Pipeline
                                                      children: [
                                                        (C {(echo_then_sudo)} {(apt-get)} {(install)} 
                                                          {(DQ ($ Id.VSub_DollarName '$pkg'))}
                                                        )
                                                      ]
                                                      negated: T
                                                    )
                                                  terminator: 
                                                    (Token
                                                      id: Id.Op_Semi
                                                      val: ';'
                                                      span_id: 2244
                                                    )
                                                )
                                              ]
                                              action: [
                                                (command.Simple
                                                  words: [{(echo)} {(DQ ('install failed'))}]
                                                  redirects: [
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_GreatAnd
                                                          val: '1>&'
                                                          span_id: 2255
                                                        )
                                                      fd: 1
                                                      arg_word: {(2)}
                                                    )
                                                  ]
                                                )
                                                (command.ControlFlow
                                                  token: 
                                                    (Token
                                                      id: Id.ControlFlow_Return
                                                      val: return
                                                      span_id: 2259
                                                    )
                                                  arg_word: {(1)}
                                                )
                                              ]
                                              spids: [2231 2246]
                                            )
                                          ]
                                        )
                                      ]
                                    )
                                    (command.If
                                      arms: [
                                        (if_arm
                                          cond: [
                                            (command.Sentence
                                              child: 
                                                (C {(contains_debug_symbols)} 
                                                  {(DQ ($ Id.VSub_DollarName '$attempt'))}
                                                )
                                              terminator: (Token id:Id.Op_Semi val:';' span_id:2281)
                                            )
                                          ]
                                          action: [
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:correct_debuglink)
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (DQ 
                                                        (command_sub
                                                          left_token: 
                                                            (Token
                                                              id: Id.Left_DollarParen
                                                              val: '$('
                                                              span_id: 2292
                                                            )
                                                          command_list: 
                                                            (command.CommandList
                                                              children: [
                                                                (C {(basename)} 
                                                                  {
                                                                    (DQ 
                                                                      (command_sub
                                                                        left_token: 
                                                                          (Token
                                                                            id: Id.Left_DollarParen
                                                                            val: '$('
                                                                            span_id: 2297
                                                                          )
                                                                        command_list: 
                                                                          (command.CommandList
                                                                            children: [
                                                                              (C {(readlink)} {(-f)} 
                                                                                {
                                                                                  (DQ 
                                                                                    ($ 
Id.VSub_DollarName '$attempt'
                                                                                    )
                                                                                  )
                                                                                }
                                                                              )
                                                                            ]
                                                                          )
                                                                      )
                                                                    )
                                                                  }
                                                                )
                                                              ]
                                                            )
                                                        )
                                                      )
                                                    }
                                                  spids: [2290]
                                                )
                                              ]
                                            )
                                            (command.Simple
                                              words: [
                                                {(echo)}
                                                {
                                                  (DQ ('debuglink should say ') 
                                                    ($ Id.VSub_DollarName '$correct_debuglink')
                                                  )
                                                }
                                              ]
                                              redirects: [
                                                (redir.Redir
                                                  op: 
                                                    (Token
                                                      id: Id.Redir_GreatAnd
                                                      val: '1>&'
                                                      span_id: 2321
                                                    )
                                                  fd: 1
                                                  arg_word: {(2)}
                                                )
                                              ]
                                            )
                                            (command.If
                                              arms: [
                                                (if_arm
                                                  cond: [
                                                    (command.Sentence
                                                      child: 
                                                        (command.Pipeline
                                                          children: [
                                                            (C {(fixup_debuglink)} 
                                                              {(DQ ($ Id.VSub_DollarName '$obj'))} {(DQ ($ Id.VSub_DollarName '$attempt'))}
                                                            )
                                                          ]
                                                          negated: T
                                                        )
                                                      terminator: 
                                                        (Token
                                                          id: Id.Op_Semi
                                                          val: ';'
                                                          span_id: 2338
                                                        )
                                                    )
                                                  ]
                                                  action: [
                                                    (command.Simple
                                                      words: [{(echo)} {(DQ (failed))}]
                                                      redirects: [
                                                        (redir.Redir
                                                          op: 
                                                            (Token
                                                              id: Id.Redir_GreatAnd
                                                              val: '1>&'
                                                              span_id: 2349
                                                            )
                                                          fd: 1
                                                          arg_word: {(2)}
                                                        )
                                                      ]
                                                    )
                                                    (command.ControlFlow
                                                      token: 
                                                        (Token
                                                          id: Id.ControlFlow_Return
                                                          val: return
                                                          span_id: 2353
                                                        )
                                                      arg_word: {(1)}
                                                    )
                                                  ]
                                                  spids: [2325 2340]
                                                )
                                              ]
                                            )
                                            (command.ShAssignment
                                              pairs: [
                                                (assign_pair
                                                  lhs: (sh_lhs_expr.Name name:verify_debuglink)
                                                  op: assign_op.Equal
                                                  rhs: 
                                                    {
                                                      (DQ 
                                                        (command_sub
                                                          left_token: 
                                                            (Token
                                                              id: Id.Left_DollarParen
                                                              val: '$('
                                                              span_id: 2368
                                                            )
                                                          command_list: 
                                                            (command.CommandList
                                                              children: [
                                                                (C {(read_debuglink)} 
                                                                  {(DQ ($ Id.VSub_DollarName '$obj'))}
                                                                )
                                                              ]
                                                            )
                                                        )
                                                      )
                                                    }
                                                  spids: [2366]
                                                )
                                              ]
                                            )
                                            (command.If
                                              arms: [
                                                (if_arm
                                                  cond: [
                                                    (command.Sentence
                                                      child: 
                                                        (command.DBracket
                                                          expr: 
                                                            (bool_expr.Binary
                                                              op_id: Id.BoolBinary_GlobDEqual
                                                              left: 
                                                                {
                                                                  (DQ 
                                                                    ($ Id.VSub_DollarName 
'$verify_debuglink'
                                                                    )
                                                                  )
                                                                }
                                                              right: 
                                                                {
                                                                  (DQ 
                                                                    ($ Id.VSub_DollarName 
'$correct_debuglink'
                                                                    )
                                                                  )
                                                                }
                                                            )
                                                        )
                                                      terminator: 
                                                        (Token
                                                          id: Id.Op_Semi
                                                          val: ';'
                                                          span_id: 2395
                                                        )
                                                    )
                                                  ]
                                                  action: [
                                                    (C {(echo)} {(DQ ($ Id.VSub_DollarName '$attempt'))})
                                                    (command.ControlFlow
                                                      token: 
                                                        (Token
                                                          id: Id.ControlFlow_Return
                                                          val: return
                                                          span_id: 2408
                                                        )
                                                      arg_word: {(0)}
                                                    )
                                                  ]
                                                  spids: [2380 2397]
                                                )
                                              ]
                                              else_action: [
                                                (command.Simple
                                                  words: [
                                                    {(echo)}
                                                    {(DQ ('debuglink not fixed up properly'))}
                                                  ]
                                                  redirects: [
                                                    (redir.Redir
                                                      op: 
                                                        (Token
                                                          id: Id.Redir_GreatAnd
                                                          val: '1>&'
                                                          span_id: 2422
                                                        )
                                                      fd: 1
                                                      arg_word: {(2)}
                                                    )
                                                  ]
                                                )
                                                (command.ControlFlow
                                                  token: 
                                                    (Token
                                                      id: Id.ControlFlow_Return
                                                      val: return
                                                      span_id: 2426
                                                    )
                                                  arg_word: {(1)}
                                                )
                                              ]
                                            )
                                          ]
                                          spids: [2274 2283]
                                        )
                                      ]
                                      else_action: [
                                        (command.Simple
                                          words: [
                                            {(echo)}
                                            {
                                              (DQ 
                                                ('installed package unexpectedly lacked debug info')
                                              )
                                            }
                                          ]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2444)
                                              fd: 1
                                              arg_word: {(2)}
                                            )
                                          ]
                                        )
                                        (command.ControlFlow
                                          token: 
                                            (Token
                                              id: Id.ControlFlow_Return
                                              val: return
                                              span_id: 2448
                                            )
                                          arg_word: {(1)}
                                        )
                                      ]
                                    )
                                  ]
                                  spids: [2170 2183]
                                )
                              ]
                              else_action: [
                                (command.Simple
                                  words: [{(echo)} {(DQ ('apt-file printed something strange'))}]
                                  redirects: [
                                    (redir.Redir
                                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2468)
                                      fd: 1
                                      arg_word: {(2)}
                                    )
                                  ]
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Continue val:continue span_id:2472)
                                )
                              ]
                            )
                          ]
                          spids: [2123 2136]
                        )
                      ]
                      else_action: [
                        (command.Simple
                          words: [{(echo)} {(DQ ('package not found'))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2491)
                              fd: 1
                              arg_word: {(2)}
                            )
                          ]
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Continue val:continue span_id:2495)
                        )
                      ]
                    )
                  ]
                )
            )
            (command.Simple
              words: [{(echo)} {(DQ ('giving up'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2516)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2520)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShFunction
      name: ensure_debug_source
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:obj)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [2535]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:first_compile_unit_context)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2547)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(readelf)} {(-wi)} {(DQ ($ Id.VSub_DollarName '$obj'))})
                                    (C {(grep)} {(-m1)} {(-A5)} {(compile_unit)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [2545]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:compile_unit_name)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2576)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(echo)} 
                                      {(DQ ($ Id.VSub_DollarName '$first_compile_unit_context'))}
                                    )
                                    (C {(grep)} {(DW_AT_name)})
                                    (C {(sed)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 
's/.*DW_AT_name.*indirect string, offset: 0x[0-9a-f]\\+): //'
                                            span_id: 2597
                                          )
                                        )
                                      }
                                    )
                                    (C {(sed)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 's/[[:blank:]]*$//'
                                            span_id: 2605
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [2574]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {(DQ ('extracted CU name: ') ($ Id.VSub_DollarName '$compile_unit_name'))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2632)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:comp_dir)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2638)
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Pipeline
                                  children: [
                                    (C {(echo)} 
                                      {(DQ ($ Id.VSub_DollarName '$first_compile_unit_context'))}
                                    )
                                    (C {(grep)} {(comp_dir)})
                                    (C {(sed)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 
's/.*DW_AT_comp_dir.*(indirect string, offset: 0x[0-9a-f]\\+): //'
                                            span_id: 2659
                                          )
                                        )
                                      }
                                    )
                                    (C {(sed)} 
                                      {
                                        (SQ 
                                          (Token
                                            id: Id.Lit_Chars
                                            val: 's/[[:blank:]]*$//'
                                            span_id: 2667
                                          )
                                        )
                                      }
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                        )
                      )
                    }
                  spids: [2636]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {(DQ ('extracted compilation directory: ') ($ Id.VSub_DollarName '$comp_dir'))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2684)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_r
                              child: 
                                {
                                  (DQ (${ Id.VSub_Name comp_dir) (/) 
                                    (${ Id.VSub_Name compile_unit_name)
                                  )
                                }
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2711)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ ('guessing that source does exist already'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2722)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:2726)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [2694 2713]
                )
              ]
              else_action: [
                (command.Simple
                  words: [{(echo)} {(DQ ('source does not exist already'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2740)
                      fd: 1
                      arg_word: {(2)}
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_z
                              child: {(DQ ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2764)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DPKG_SOURCE_ROOT)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2771)
                                  command_list: 
                                    (command.CommandList
                                      children: [(C {(mktemp)} {(-d)})]
                                    )
                                )
                              )
                            }
                          spids: [2769]
                        )
                      ]
                    )
                  ]
                  spids: [2753 2766]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {(DQ ('downloading source to ') ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2791)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$DPKG_SOURCE_ROOT'))})
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:owning_package)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: 
                                        (Token
                                          id: Id.Left_DollarParen
                                          val: '$('
                                          span_id: 2810
                                        )
                                      command_list: 
                                        (command.CommandList
                                          children: [
                                            (command.Pipeline
                                              children: [
                                                (C {(dpkg)} {(-S)} {(DQ ($ Id.VSub_DollarName '$obj'))})
                                                (C {(sed)} 
                                                  {
                                                    (SQ 
                                                      (Token
                                                        id: Id.Lit_Chars
                                                        val: 's^: /.*^^'
                                                        span_id: 2825
                                                      )
                                                    )
                                                  }
                                                )
                                              ]
                                              negated: F
                                            )
                                          ]
                                        )
                                    )
                                  )
                                }
                              spids: [2808]
                            )
                          ]
                        )
                        (command.Subshell
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      words: [{(echo)} {(DQ ('failed to identify owning package'))}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2840)
                                          fd: 1
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:2842)
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:2844)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {(apt-get)} {(source)} {(DQ ($ Id.VSub_DollarName '$owning_package'))})
                        (command.Subshell
                          command_list: 
                            (command.CommandList
                              children: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      words: [{(echo)} {(DQ ('failed to download source'))}]
                                      redirects: [
                                        (redir.Redir
                                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2867)
                                          fd: 1
                                          arg_word: {(2)}
                                        )
                                      ]
                                    )
                                  terminator: (Token id:Id.Op_Semi val:';' span_id:2869)
                                )
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Return val:return span_id:2871)
                                  arg_word: {(1)}
                                )
                              ]
                            )
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:source_dirname)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (command_sub
                                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2879)
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Pipeline
                                          children: [(C {(ls)} {(-t)}) (C {(head)} {(-n1)})]
                                          negated: F
                                        )
                                      ]
                                    )
                                )
                              )
                            }
                          spids: [2877]
                        )
                      ]
                    )
                    (command.Simple
                      words: [
                        {(echo)}
                        {
                          (DQ ('guessing source was extracted in ') 
                            ($ Id.VSub_DollarName '$source_dirname')
                          )
                        }
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2902)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_DollarName '$comp_dir'))}
                      arms: [
                        (case_arm
                          pat_list: [{(/build/buildd/) (Id.Lit_Star '*')}]
                          action: [
                            (command.Simple
                              words: [{(echo)} {(DQ ('found a buildd build'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2932)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:source_dirname_escaped)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 2938
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (command.Pipeline
                                                  children: [
                                                    (C {(echo)} 
                                                      {(DQ ($ Id.VSub_DollarName '$source_dirname'))}
                                                    )
                                                    (C {(escape_regexp_floating)})
                                                  ]
                                                  negated: F
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [2936]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:prefix)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 2959
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (command.Pipeline
                                                  children: [
                                                    (C {(echo)} 
                                                      {(DQ ($ Id.VSub_DollarName '$comp_dir'))}
                                                    )
                                                    (C {(sed)} 
                                                      {
                                                        (DQ ('s^') (Id.Lit_Other '\\') ('(.*/') 
                                                          (${ Id.VSub_Name source_dirname_escaped) (/) (Id.Lit_Other '\\') (').*^') (Id.Lit_Other '\\') ('1^')
                                                        )
                                                      }
                                                    )
                                                  ]
                                                  negated: F
                                                )
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  spids: [2957]
                                )
                              ]
                            )
                            (command.Simple
                              words: [
                                {(echo)}
                                {
                                  (DQ ('calculated source path prefix ') 
                                    ($ Id.VSub_DollarName '$prefix')
                                  )
                                }
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:2996)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.AndOr
                              ops: [Id.Op_DAmp Id.Op_DPipe]
                              children: [
                                (C {(echo_then_sudo)} {(mkdir)} {(-p)} 
                                  {
                                    (DQ 
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 3011
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(dirname)} {(DQ ($ Id.VSub_DollarName '$prefix'))})
                                            ]
                                          )
                                      )
                                    )
                                  }
                                )
                                (C {(echo_then_sudo)} {(ln)} {(-s)} 
                                  {(DQ ($ Id.VSub_DollarName '$source_dirname'))} {(DQ ($ Id.VSub_DollarName '$prefix'))}
                                )
                                (command.Subshell
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              words: [{(echo)} {(DQ ('failed to mkdir or symlink'))}]
                                              redirects: [
                                                (redir.Redir
                                                  op: 
                                                    (Token
                                                      id: Id.Redir_GreatAnd
                                                      val: '1>&'
                                                      span_id: 3052
                                                    )
                                                  fd: 1
                                                  arg_word: {(2)}
                                                )
                                              ]
                                            )
                                          terminator: (Token id:Id.Op_Semi val:';' span_id:3054)
                                        )
                                        (command.ControlFlow
                                          token: 
                                            (Token
                                              id: Id.ControlFlow_Return
                                              val: return
                                              span_id: 3056
                                            )
                                          arg_word: {(1)}
                                        )
                                      ]
                                    )
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(echo)} {(DQ (success))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:3068)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:3072)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [2920 2923 3077 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          action: [
                            (command.Simple
                              words: [{(echo)} {(DQ ('package was built at bad source directory'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:3091)
                                  fd: 1
                                  arg_word: {(2)}
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:3096)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [3080 3082 3101 -1]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
  ]
)