(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-e>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RUN_INSTALL_NAME_TOOL)
          op: assign_op.Equal
          rhs: {<1>}
          spids: [143]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} 
                      {(DQ <-I>)} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<shift>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RUN_INSTALL_NAME_TOOL)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [184]
                )
              ]
            )
          ]
          spids: [146 178]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<2>} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {(DQ <'usage: '> (${ Id.VSub_Number 0) <' [-I] FRAMEWORK DESTINATION_DIR'>)}
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [189 203]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FRAMEWORK)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Number 1))}
          spids: [238]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DESTINATION_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Number 2))}
          spids: [245]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FRAMEWORK_NAME)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<basename>} {(DQ (${ Id.VSub_Name FRAMEWORK))})
                )
              )
            }
          spids: [253]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name FRAMEWORK_NAME>
                        suffix_op: 
                          (suffix_op.Slice
                            begin: 
                              (arith_expr.Unary
                                op_id: Id.Node_UnaryMinus
                                child: {<Id.Lit_Digits 10>}
                              )
                          )
                      )
                    )
                  } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <.framework>)} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ (${ Id.VSub_Number 0) <': '> (${ Id.VSub_Name FRAMEWORK_NAME) 
                    <' does not end in .framework'>
                  )
                }
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [266 291]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FRAMEWORK_NAME_NOEXT)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name FRAMEWORK_NAME>
                  suffix_op: 
                    (suffix_op.Slice
                      begin: {<Id.Lit_Digits 0>}
                      length: 
                        {
                          (word_part.ArithSub
                            anode: 
                              (arith_expr.Binary
                                op_id: Id.Arith_Minus
                                left: 
                                  {
                                    (braced_var_sub
                                      token: <Id.VSub_Name FRAMEWORK_NAME>
                                      prefix_op: (Id.VSub_Pound)
                                    )
                                  }
                                right: {<Id.Lit_Digits 10>}
                              )
                          )
                        }
                    )
                )
              )
            }
          spids: [318]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSIONS)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name FRAMEWORK) <'/Versions'>)}
          spids: [343]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CURRENT_VERSION_LINK)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)}
          spids: [351]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CURRENT_VERSION_ID)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<readlink>} {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)})
                )
              )
            }
          spids: [359]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CURRENT_VERSION)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/'> (${ Id.VSub_Name CURRENT_VERSION_ID))}
          spids: [373]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} 
                  {
                    (DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT))
                  } {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ (${ Id.VSub_Number 0) <': '> (${ Id.VSub_Name FRAMEWORK_NAME) 
                    <' does not contain a dylib'>
                  )
                }
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [388 410]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DESTINATION)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name DESTINATION_DIR) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME))}
          spids: [438]
        )
      ]
    )
    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name DESTINATION_DIR))})
    (C {<rsync>} {<-acC>} {<--delete>} {<--exclude>} {<Headers>} {<--exclude>} {<PrivateHeaders>} 
      {<--include>} {(SQ <'*.so'>)} {(DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'>)} {(DQ (${ Id.VSub_Name DESTINATION))}
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Unary
                      op_id: Id.BoolUnary_n
                      child: {(DQ (${ Id.VSub_Name RUN_INSTALL_NAME_TOOL))}
                    )
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:FRAMEWORK_DYLIB)
                  op: assign_op.Equal
                  rhs: 
                    {(DQ (${ Id.VSub_Name DESTINATION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT))}
                  spids: [556]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LC_ID_DYLIB_OLD)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<otool>} {<-l>} {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))})
                                (C {<grep>} {<-A10>} {(DQ <'^ *cmd LC_ID_DYLIB'> <Id.Lit_Other '$'>)})
                                (C {<grep>} {<-m1>} {(DQ <'^ *name'>)})
                                (C {<sed>} {<-Ee>} {(SQ <'s/^ *name (.*) \\(offset [0-9]+\\)$/\\1/'>)})
                              ]
                              negated: F
                            )
                        )
                      )
                    }
                  spids: [568]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:VERSION_PATH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'/Versions/'> (${ Id.VSub_Name CURRENT_VERSION_ID) <'/'> 
                        (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT)
                      )
                    }
                  spids: [618]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LC_ID_DYLIB_NEW)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Pipeline
                              children: [
                                (C {<echo>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_OLD))})
                                (C {<sed>} {<-Ee>} 
                                  {
                                    (DQ <'s%'> (${ Id.VSub_Name VERSION_PATH) <Id.Lit_Other '$'> <'%/'> 
                                      (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) <'%'>
                                    )
                                  }
                                )
                              ]
                              negated: F
                            )
                        )
                      )
                    }
                  spids: [631]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_NEW))} 
                          {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_OLD))} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<install_name_tool>} {<-id>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_NEW))} 
                      {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))}
                    )
                  ]
                  spids: [666 689]
                )
              ]
            )
          ]
          spids: [502 517]
        )
      ]
    )
  ]
)