(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-e)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cur_ksyms_file)
          op: assign_op.Equal
          rhs: {(DQ (include/generated/autoksyms.h))}
          spids: [59]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:new_ksyms_file)
          op: assign_op.Equal
          rhs: {(DQ (include/generated/autoksyms.h.tmpnew))}
          spids: [64]
        )
      ]
    )
    (command.ShFunction
      name: info
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$quiet'))} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (silent_))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:93)
                    )
                  ]
                  action: [
                    (C {(printf)} {(DQ ('  %-7s %s') (Id.Lit_Other '\\') (n))} 
                      {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))}
                    )
                  ]
                  spids: [77 95]
                )
              ]
            )
          ]
        )
    )
    (C {(info)} {(DQ (CHK))} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$KBUILD_VERBOSE'))}
      arms: [
        (case_arm
          pat_list: [{(Id.Lit_Star '*') (1) (Id.Lit_Star '*')}]
          action: [(C {(Id.KW_Set set)} {(-x)})]
          spids: [142 145 153 -1]
        )
      ]
    )
    (command.Case
      to_match: {(DQ (${ Id.VSub_Name KCONFIG_CONFIG))}
      arms: [
        (case_arm
          pat_list: [{(Id.Lit_Star '*') (/) (Id.Lit_Star '*')}]
          action: [(C {(.)} {(DQ (${ Id.VSub_Name KCONFIG_CONFIG))})]
          spids: [171 174 186 -1]
        )
        (case_arm
          pat_list: [{(Id.Lit_Star '*')}]
          action: [(C {(.)} {(DQ (./) (${ Id.VSub_Name KCONFIG_CONFIG))})]
          spids: [188 189 -1 205]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-e)} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:222)
            )
          ]
          action: [
            (command.Sentence
              child: (C {(touch)} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:231)
            )
          ]
          spids: [211 224]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:244)
          fd: -1
          arg_word: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:250)
          fd: -1
          here_begin: {(EOT)}
          here_end_span_id: 259
          stdin_parts: [('/*\n') (' * Automatically generated file; DO NOT EDIT.\n') (' */\n') ('\n')]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {(sed)} {(-ns)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'3{s/ /\\n/g;/^$/!p;}' span_id:267))} 
          {(DQ ($ Id.VSub_DollarName '$MODVERDIR')) (/) (Id.Lit_Star '*') (.mod)}
        )
        (C {(sort)} {(-u)})
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:285)
          cond: [
            (command.Sentence
              child: (C {(read)} {(sym)})
              terminator: (Token id:Id.Op_Semi val:';' span_id:290)
            )
          ]
          body: 
            (command.DoGroup
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Id.Lit_LBracket '[')} {(-n)} 
                              {(DQ ($ Id.VSub_DollarName '$CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX'))} {(Id.Lit_RBracket ']')}
                            )
                          terminator: (Token id:Id.Op_Semi val:';' span_id:306)
                        )
                      ]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:sym)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: (Token id:Id.VSub_Name val:sym span_id:314)
                                      suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(_)})
                                    )
                                  )
                                }
                              spids: [311]
                            )
                          ]
                        )
                      ]
                      spids: [295 308]
                    )
                  ]
                )
                (C {(echo)} {(DQ ('#define __KSYM_') (${ Id.VSub_Name sym) (' 1'))})
              ]
            )
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_DGreat val:'>>' span_id:336)
              fd: -1
              arg_word: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
            )
          ]
        )
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$CONFIG_MODVERSIONS'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:357)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('#define __KSYM_module_layout 1'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:368)
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                )
              ]
            )
          ]
          spids: [346 359]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:changed)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:384)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.ShAssignment
                        pairs: [
                          (assign_pair
                            lhs: (sh_lhs_expr.Name name:count)
                            op: assign_op.Equal
                            rhs: {(0)}
                            spids: [386]
                          )
                        ]
                      )
                      (command.Pipeline
                        children: [
                          (C {(sort)} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))} 
                            {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                          )
                          (C {(uniq)} {(-u)})
                          (C {(sed)} {(-n)} 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: 's/^#define __KSYM_\\(.*\\) 1/\\1/p'
                                  span_id: 412
                                )
                              )
                            }
                          )
                          (C {(tr)} {(DQ (A-Z_))} {(DQ (a-z/))})
                          (command.WhileUntil
                            keyword: (Token id:Id.KW_While val:while span_id:429)
                            cond: [
                              (command.Sentence
                                child: (C {(read)} {(sympath)})
                                terminator: (Token id:Id.Op_Semi val:';' span_id:434)
                              )
                            ]
                            body: 
                              (command.DoGroup
                                children: [
                                  (command.If
                                    arms: [
                                      (if_arm
                                        cond: [
                                          (command.Sentence
                                            child: 
                                              (C {(Id.Lit_LBracket '[')} {(-z)} 
                                                {(DQ ($ Id.VSub_DollarName '$sympath'))} {(Id.Lit_RBracket ']')}
                                              )
                                            terminator: (Token id:Id.Op_Semi val:';' span_id:450)
                                          )
                                        ]
                                        action: [
                                          (command.Sentence
                                            child: 
                                              (command.ControlFlow
                                                token: 
                                                  (Token
                                                    id: Id.ControlFlow_Continue
                                                    val: continue
                                                    span_id: 454
                                                  )
                                              )
                                            terminator: (Token id:Id.Op_Semi val:';' span_id:455)
                                          )
                                        ]
                                        spids: [439 452]
                                      )
                                    ]
                                  )
                                  (command.ShAssignment
                                    pairs: [
                                      (assign_pair
                                        lhs: (sh_lhs_expr.Name name:depfile)
                                        op: assign_op.Equal
                                        rhs: 
                                          {(DQ (include/config/ksym/) (${ Id.VSub_Name sympath) (.h))}
                                        spids: [460]
                                      )
                                    ]
                                  )
                                  (C {(mkdir)} {(-p)} 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: 
                                            (Token
                                              id: Id.Left_DollarParen
                                              val: '$('
                                              span_id: 475
                                            )
                                          command_list: 
                                            (command.CommandList
                                              children: [
                                                (C {(dirname)} {(DQ ($ Id.VSub_DollarName '$depfile'))})
                                              ]
                                            )
                                        )
                                      )
                                    }
                                  )
                                  (C {(touch)} {(DQ ($ Id.VSub_DollarName '$depfile'))})
                                  (C {(echo)} 
                                    {
                                      (word_part.ArithSub
                                        anode: 
                                          (arith_expr.BinaryAssign
                                            op_id: Id.Arith_PlusEqual
                                            left: (sh_lhs_expr.Name name:count)
                                            right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                          )
                                      )
                                    }
                                  )
                                ]
                              )
                          )
                          (C {(tail)} {(-1)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [383]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:changed)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:changed span_id:515)
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(0)})
              )
            }
          spids: [513]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$changed')} {(-gt)} {(0)} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:532)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:old)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:542)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.AndOr
                                ops: [Id.Op_DPipe]
                                children: [
                                  (C {(grep)} {(-c)} {(DQ ('^#define __KSYM_'))} 
                                    {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))}
                                  )
                                  (C {(true)})
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [541]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:new)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:562)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.AndOr
                                ops: [Id.Op_DPipe]
                                children: [
                                  (C {(grep)} {(-c)} {(DQ ('^#define __KSYM_'))} 
                                    {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                                  )
                                  (C {(true)})
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [561]
                )
              ]
            )
            (C {(info)} {(DQ (KSYMS))} 
              {
                (DQ ('symbols: before=') ($ Id.VSub_DollarName '$old') (', after=') 
                  ($ Id.VSub_DollarName '$new') (', changed=') ($ Id.VSub_DollarName '$changed')
                )
              }
            )
            (C {(info)} {(DQ (UPD))} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
            (C {(mv)} {(-f)} {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))} 
              {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))}
            )
            (C {(exec)} {($ Id.VSub_At '$@')})
          ]
          spids: [521 534]
        )
      ]
      else_action: [(C {(rm)} {(-f)} {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))})]
    )
  ]
)