(CommandList
  children: [
    (C {(source)} {(./virtualbox_env.sh)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(./vbox_override.sh)}))
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(source)} {(./vbox_override.sh)})]
          spids: [-1 29]
        )
      ]
      spids: [-1 36]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalOr
                      left: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ ($ VSub_Name "$OSTYPE"))}
                          right: {(msys)}
                        )
                      right: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ ($ VSub_Name "$OSTYPE"))}
                          right: {(cygwin)}
                        )
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:WIN) op:Equal rhs:{(TRUE)} spids:[67])]
              spids: [67]
            )
          ]
          spids: [-1 64]
        )
      ]
      spids: [-1 70]
    )
    (C {(set)} {(-x)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DBracket expr:(BoolUnary op_id:BoolUnary_f child:{(./proxy_setup.sh)}))
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(.)} {(./proxy_setup.sh)})]
          spids: [-1 89]
        )
      ]
      spids: [-1 96]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$CURL"))}))
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(echo)} {(DQ ("CURL is not defined"))}) (C {(exit)})]
          spids: [-1 111]
        )
      ]
      spids: [-1 123]
    )
    (C {(export)} 
      {(Lit_VarLike "BOOTSTRAP_APT_MIRROR=") 
        (BracedVarSub
          token: <VSub_Name BOOTSTRAP_APT_MIRROR>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
          spids: [135 138]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "BOOTSTRAP_VM_MEM=") 
        (BracedVarSub
          token: <VSub_Name BOOTSTRAP_VM_MEM>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2048)})
          spids: [143 147]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "BOOTSTRAP_VM_CPUS=") 
        (BracedVarSub
          token: <VSub_Name BOOTSTRAP_VM_CPUS>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
          spids: [152 156]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "BOOTSTRAP_VM_DRIVE_SIZE=") 
        (BracedVarSub
          token: <VSub_Name BOOTSTRAP_VM_DRIVE_SIZE>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(20480)})
          spids: [161 165]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "CLUSTER_VM_MEM=") 
        (BracedVarSub
          token: <VSub_Name CLUSTER_VM_MEM>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2560)})
          spids: [170 174]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "CLUSTER_VM_CPUS=") 
        (BracedVarSub
          token: <VSub_Name CLUSTER_VM_CPUS>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(2)})
          spids: [179 183]
        )
      }
    )
    (C {(export)} 
      {(Lit_VarLike "CLUSTER_VM_DRIVE_SIZE=") 
        (BracedVarSub
          token: <VSub_Name CLUSTER_VM_DRIVE_SIZE>
          suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(20480)})
          spids: [188 192]
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BASE_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(dirname)} 
                        {
                          (BracedVarSub
                            token: <VSub_Name BASH_SOURCE>
                            bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                            spids: [199 204]
                          )
                        }
                      )
                    ]
                  )
                left_token: <Left_Backtick "`">
                spids: [196 205]
              )
            }
          spids: [195]
        )
      ]
      spids: [195]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:VBOX_DIR)
          op: Equal
          rhs: {(DQ ($ VSub_Name "$BASE_DIR") (/vbox))}
          spids: [207]
        )
      ]
      spids: [207]
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:P)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [
                            (Sentence
                              child: (C {(cd)} {($ VSub_Name "$VBOX_DIR")})
                              terminator: <Op_Semi ";">
                            )
                            (C {(/bin/pwd)})
                          ]
                        )
                      left_token: <Left_CommandSub "$(">
                      spids: [215 223]
                    )
                  )
                }
              spids: [213]
            )
          ]
          spids: [213]
        )
        (C {(exit)})
      ]
      op_id: Op_DPipe
    )
    (FuncDef
      name: vbm_import
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:image_name)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [245]
                )
              ]
              spids: [241]
            )
            (Assignment
              keyword: Assign_Local
              flags: ["'-r'"]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_name)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [255]
                )
              ]
              spids: [251]
            )
            (C {(shift)} {(2)})
            (C {(DQ ($ VSub_Name "$VBM"))} {(import)} {(DQ ($ VSub_Name "$image_name"))} {(--vsys)} {(0)} 
              {(--vmname)} {(DQ ($ VSub_Name "$vm_name"))} {(DQ ($ VSub_At "$@"))}
            )
          ]
          spids: [238]
        )
      spids: [234 237]
    )
    (FuncDef
      name: download_VM_files
      body: 
        (BraceGroup
          children: [
            (C {(pushd)} {($ VSub_Name "$P")})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ROM)
                  op: Equal
                  rhs: {(gpxe-1.0.1-80861004.rom)}
                  spids: [319]
                )
              ]
              spids: [319]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CACHEDIR)
                  op: Equal
                  rhs: {(TildeSubPart prefix:"") (/bcpc-cache)}
                  spids: [323]
                )
              ]
              spids: [323]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$ROM")})
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolUnary
                                      op_id: BoolUnary_f
                                      child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")} {(.)})
                          ]
                          spids: [-1 358]
                        )
                      ]
                      else_action: [
                        (C {($ VSub_Name "$CURL")} {(-o)} {(gpxe-1.0.1-80861004.rom)} 
                          {
                            (DQ 
                              (
"http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php"
                              )
                            )
                          } {(-H)} {(DQ ("Origin: http://rom-o-matic.net"))} {(-H)} {(DQ ("Host: rom-o-matic.net"))} {(-H)} 
                          {(DQ ("Content-Type: application/x-www-form-urlencoded"))} {(-H)} {(DQ ("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"))} {(-H)} 
                          {
                            (DQ 
                              (
"Referer: http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/build.php"
                              )
                            )
                          } {(-H)} {(DQ ("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3"))} {(--data)} 
                          {
                            (DQ 
                              (
"version=1.0.1&use_flags=1&ofmt=ROM+binary+%28flashable%29+image+%28.rom%29&nic=all-drivers&pci_vendor_code=8086&pci_device_code=1004&PRODUCT_NAME=&PRODUCT_SHORT_NAME=gPXE&CONSOLE_PCBIOS=on&BANNER_TIMEOUT=20&NET_PROTO_IPV4=on&COMCONSOLE=0x3F8&COMSPEED=115200&COMDATA=8&COMPARITY=0&COMSTOP=1&DOWNLOAD_PROTO_TFTP=on&DNS_RESOLVER=on&NMB_RESOLVER=off&IMAGE_ELF=on&IMAGE_NBI=on&IMAGE_MULTIBOOT=on&IMAGE_PXE=on&IMAGE_SCRIPT=on&IMAGE_BZIMAGE=on&IMAGE_COMBOOT=on&AUTOBOOT_CMD=on&NVO_CMD=on&CONFIG_CMD=on&IFMGMT_CMD=on&IWMGMT_CMD=on&ROUTE_CMD=on&IMAGE_CMD=on&DHCP_CMD=on&SANBOOT_CMD=on&LOGIN_CMD=on&embedded_script=&A=Get+Image"
                              )
                            )
                          }
                        )
                      ]
                      spids: [370 428]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (LogicalAnd
                                      left: 
                                        (BoolUnary
                                          op_id: BoolUnary_d
                                          child: {($ VSub_Name "$CACHEDIR")}
                                        )
                                      right: 
                                        (LogicalNot
                                          child: 
                                            (BoolUnary
                                              op_id: BoolUnary_f
                                              child: 
                                                {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")}
                                            )
                                        )
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(cp)} {($ VSub_Name "$ROM")} 
                              {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ROM")}
                            )
                          ]
                          spids: [-1 452]
                        )
                      ]
                      spids: [-1 464]
                    )
                  ]
                  spids: [-1 342]
                )
              ]
              spids: [-1 467]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ISO)
                  op: Equal
                  rhs: {(ubuntu-14.04-mini.iso)}
                  spids: [471]
                )
              ]
              spids: [471]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$ISO")})
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolUnary
                                      op_id: BoolUnary_f
                                      child: {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")} {(.)})
                          ]
                          spids: [-1 509]
                        )
                      ]
                      else_action: [
                        (C {($ VSub_Name "$CURL")} {(-o)} {($ VSub_Name "$ISO")} 
                          {(http) (Lit_Other ":") 
                            (
//archive.ubuntu.com/ubuntu/dists/trusty-updates/main/installer-amd64/current/images/netboot/mini.iso
                            )
                          }
                        )
                      ]
                      spids: [521 539]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (LogicalAnd
                                      left: 
                                        (BoolUnary
                                          op_id: BoolUnary_d
                                          child: {($ VSub_Name "$CACHEDIR")}
                                        )
                                      right: 
                                        (LogicalNot
                                          child: 
                                            (BoolUnary
                                              op_id: BoolUnary_f
                                              child: 
                                                {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$ISO")}
                                            )
                                        )
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [(C {(cp)} {($ VSub_Name "$ISO")} {($ VSub_Name "$CACHEDIR")})]
                          spids: [-1 563]
                        )
                      ]
                      spids: [-1 573]
                    )
                  ]
                  spids: [-1 493]
                )
              ]
              spids: [-1 576]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BOX)
                  op: Equal
                  rhs: {(SQ <trusty-server-cloudimg-amd64-vagrant-disk1.box>)}
                  spids: [580]
                )
              ]
              spids: [580]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(hash)} {(vagrant)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [597]
                            )
                          ]
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ("Vagrant detected - downloading Vagrant box for bcpc-bootstrap VM"))}
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (LogicalNot
                                      child: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$BOX")})
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (BoolUnary
                                              op_id: BoolUnary_f
                                              child: 
                                                {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$BOX")}
                                            )
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(cp)} {($ VSub_Name "$CACHEDIR") (/) ($ VSub_Name "$BOX")} {(.)})
                                  ]
                                  spids: [-1 642]
                                )
                              ]
                              else_action: [
                                (C {($ VSub_Name "$CURL")} {(-o)} {($ VSub_Name "$BOX")} 
                                  {(http) (Lit_Other ":") 
                                    (//cloud-images.ubuntu.com/vagrant/trusty/current/) ($ VSub_Name "$BOX")
                                  }
                                )
                              ]
                              spids: [654 669]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (LogicalAnd
                                              left: 
                                                (BoolUnary
                                                  op_id: BoolUnary_d
                                                  child: {($ VSub_Name "$CACHEDIR")}
                                                )
                                              right: 
                                                (LogicalNot
                                                  child: 
                                                    (BoolUnary
                                                      op_id: BoolUnary_f
                                                      child: 
                                                        {($ VSub_Name "$CACHEDIR") (/) 
                                                          ($ VSub_Name "$BOX")
                                                        }
                                                    )
                                                )
                                            )
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(cp)} {($ VSub_Name "$BOX")} {($ VSub_Name "$CACHEDIR")})
                                  ]
                                  spids: [-1 693]
                                )
                              ]
                              spids: [-1 703]
                            )
                          ]
                          spids: [-1 626]
                        )
                      ]
                      spids: [-1 706]
                    )
                  ]
                  spids: [-1 603]
                )
              ]
              spids: [-1 709]
            )
            (C {(popd)})
          ]
          spids: [310]
        )
      spids: [306 309]
    )
    (FuncDef
      name: remove_DHCPservers
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:network_name)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{})
                        spids: [749 752]
                      )
                    }
                  spids: [748]
                )
              ]
              spids: [746]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$network_name"))})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:vms)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {($ VSub_Name "$VBM")} {(list)} {(vms)})
                                          (C {(sed)} {(SQ <"s/^.*{\\([0-9a-f-]*\\)}/\\1/">)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [778 790]
                              )
                            }
                          spids: [777]
                        )
                      ]
                      spids: [775]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:vm_networks)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (ForEach
                                            iter_name: vm
                                            iter_words: [{($ VSub_Name "$vms")}]
                                            do_arg_iter: False
                                            body: 
                                              (DoGroup
                                                children: [
                                                  (Sentence
                                                    child: 
                                                      (Pipeline
                                                        children: [
                                                          (C {($ VSub_Name "$VBM")} {(showvminfo)} 
                                                            {(--details)} {(--machinereadable)} {($ VSub_Name "$vm")}
                                                          )
                                                          (C {(grep)} {(-i)} 
                                                            {(SQ <"^hostonlyadapter[2-9]=">)}
                                                          )
                                                          (C {(sed)} {(-e)} {(SQ <"s/^.*=//">)} {(-e)} 
                                                            {(SQ <"s/\"//g">)}
                                                          )
                                                        ]
                                                        negated: False
                                                      )
                                                    terminator: <Op_Semi ";">
                                                  )
                                                ]
                                                spids: [810 857]
                                              )
                                            spids: [806 808]
                                          )
                                          (C {(sort)} {(-u)})
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [800 864]
                              )
                            }
                          spids: [799]
                        )
                      ]
                      spids: [797]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:existing_nets_reg_ex)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (SimpleCommand
                                        words: [
                                          {(sed)}
                                          {(-e)}
                                          {(SQ <"s/^/^/">)}
                                          {(-e)}
                                          {(SQ <"/$/$/">)}
                                          {(-e)}
                                          {(SQ <"s/ /$|^/g">)}
                                        ]
                                        redirects: [
                                          (Redir
                                            op_id: Redir_TLess
                                            fd: -1
                                            arg_word: {(DQ ($ VSub_Name "$vm_networks"))}
                                            spids: [899]
                                          )
                                        ]
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [878 904]
                              )
                            }
                          spids: [877]
                        )
                      ]
                      spids: [875]
                    )
                    (Pipeline
                      children: [
                        (C {($ VSub_Name "$VBM")} {(list)} {(dhcpservers)})
                        (C {(grep)} {(-E)} 
                          {
                            (DQ ("^NetworkName:") (EscapedLiteralPart token:<Lit_EscapedChar "\\s">) 
                              ("+HostInterfaceNetworking")
                            )
                          }
                        )
                        (C {(awk)} {(SQ <"{print $2}">)})
                        (While
                          cond: [
                            (Sentence
                              child: (C {(read)} {(-r)} {(network_name)})
                              terminator: <Op_Semi ";">
                            )
                          ]
                          body: 
                            (DoGroup
                              children: [
                                (AndOr
                                  children: [
                                    (DBracket
                                      expr: 
                                        (BoolUnary
                                          op_id: BoolUnary_n
                                          child: {($ VSub_Name "$existing_nets_reg_ex")}
                                        )
                                    )
                                    (AndOr
                                      children: [
                                        (Pipeline
                                          children: [
                                            (SimpleCommand
                                              words: [
                                                {(egrep)}
                                                {(-q)}
                                                {($ VSub_Name "$existing_nets_reg_ex")}
                                              ]
                                              redirects: [
                                                (Redir
                                                  op_id: Redir_TLess
                                                  fd: -1
                                                  arg_word: {($ VSub_Name "$network_name")}
                                                  spids: [967]
                                                )
                                              ]
                                            )
                                          ]
                                          negated: True
                                        )
                                        (ControlFlow
                                          token: <ControlFlow_Continue continue>
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                                (C {(remove_DHCPservers)} {($ VSub_Name "$network_name")})
                              ]
                              spids: [946 981]
                            )
                        )
                      ]
                      negated: False
                    )
                  ]
                  spids: [-1 768]
                )
              ]
              else_action: [
                (AndOr
                  children: [
                    (C {($ VSub_Name "$VBM")} {(dhcpserver)} {(remove)} {(--netname)} 
                      {(DQ ($ VSub_Name "$network_name"))}
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_Local
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:return)
                              op: Equal
                              rhs: {(0)}
                              spids: [1003]
                            )
                          ]
                          spids: [1001]
                        )
                        (Assignment
                          keyword: Assign_Local
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:return)
                              op: Equal
                              rhs: {($ VSub_QMark "$?")}
                              spids: [1010]
                            )
                          ]
                          spids: [1008]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  op_id: Op_DAmp
                )
                (ControlFlow
                  token: <ControlFlow_Return return>
                  arg_word: {($ VSub_Name "$return")}
                )
              ]
              spids: [984 1019]
            )
          ]
          spids: [743]
        )
      spids: [739 742]
    )
    (FuncDef
      name: create_bootstrap_VM
      body: 
        (BraceGroup
          children: [
            (C {(pushd)} {($ VSub_Name "$P")})
            (C {(remove_DHCPservers)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(hash)} {(vagrant)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [1059]
                            )
                          ]
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ("Vagrant detected - using Vagrant to initialize bcpc-bootstrap VM"))}
                    )
                    (C {(cp)} {(../Vagrantfile)} {(.)})
                    (C {(vagrant)} {(up)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:keyfile)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (Pipeline
                                          children: [
                                            (C {(vagrant)} {(ssh-config)} {(bootstrap)})
                                            (C {(awk)} 
                                              {
                                                (SQ 
                                                  <
"/Host bootstrap/,/^$/{ if ($0 ~ /^ +IdentityFile/) print $2}"
                                                  >
                                                )
                                              }
                                            )
                                          ]
                                          negated: False
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [1089 1103]
                                )
                              )
                            }
                          spids: [1087]
                        )
                      ]
                      spids: [1087]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolUnary
                                      op_id: BoolUnary_f
                                      child: {(DQ ($ VSub_Name "$keyfile"))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [(C {(cp)} {(DQ ($ VSub_Name "$keyfile"))} {(insecure_private_key)})]
                          spids: [-1 1120]
                        )
                      ]
                      spids: [-1 1132]
                    )
                  ]
                  spids: [-1 1065]
                )
              ]
              else_action: [
                (C {(echo)} {(DQ ("Vagrant not detected - using raw VirtualBox for bcpc-bootstrap"))})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (DBracket
                              expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$WIN"))})
                            )
                          terminator: <Op_Semi ";">
                        )
                      ]
                      action: [
                        (ForEach
                          iter_name: i
                          iter_words: [{(0)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)}]
                          do_arg_iter: False
                          body: 
                            (DoGroup
                              children: [
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (Sentence
                                          child: 
                                            (DBracket
                                              expr: 
                                                (LogicalNot
                                                  child: 
                                                    (BoolUnary
                                                      op_id: BoolUnary_z
                                                      child: 
                                                        {
                                                          (CommandSubPart
                                                            command_list: 
                                                              (CommandList
                                                                children: [
                                                                  (Pipeline
                                                                    children: [
                                                                      (C {($ VSub_Name "$VBM")} 
                                                                        {(list)} {(hostonlyifs)}
                                                                      )
                                                                      (C {(grep)} 
                                                                        {(vboxnet) 
                                                                          ($ VSub_Name "$i")
                                                                        }
                                                                      )
                                                                      (C {(cut)} {(-f2)} 
                                                                        {(-d) (DQ (" "))}
                                                                      )
                                                                    ]
                                                                    negated: False
                                                                  )
                                                                ]
                                                              )
                                                            left_token: <Left_Backtick "`">
                                                            spids: [1203 1227]
                                                          )
                                                        }
                                                    )
                                                )
                                            )
                                          terminator: <Op_Semi ";">
                                        )
                                      ]
                                      action: [
                                        (AndOr
                                          children: [
                                            (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(remove)} 
                                              {(vboxnet) ($ VSub_Name "$i")}
                                            )
                                            (C {(true)})
                                          ]
                                          op_id: Op_DPipe
                                        )
                                      ]
                                      spids: [-1 1232]
                                    )
                                  ]
                                  spids: [-1 1249]
                                )
                              ]
                              spids: [1192 1252]
                            )
                          spids: [1170 1190]
                        )
                      ]
                      spids: [-1 1158]
                    )
                  ]
                  else_action: [
                    (ForEach
                      iter_name: i
                      iter_words: [{(10)} {(9)} {(8)} {(7)} {(6)} {(5)} {(4)} {(3)} {(2)} {(1)}]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: (BoolBinary op_id:BoolBinary_gt left:{(i)} right:{(1)})
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (Sentence
                                      child: 
                                        (Assignment
                                          keyword: Assign_None
                                          pairs: [
                                            (assign_pair
                                              lhs: (LhsName name:IF)
                                              op: Equal
                                              rhs: 
                                                {
                                                  (DQ ("VirtualBox Host-Only Ethernet Adapter #") 
                                                    ($ VSub_Name "$i")
                                                  )
                                                }
                                              spids: [1317]
                                            )
                                          ]
                                          spids: [1317]
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  spids: [-1 1314]
                                )
                              ]
                              else_action: [
                                (Sentence
                                  child: 
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:IF)
                                          op: Equal
                                          rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter"))}
                                          spids: [1328]
                                        )
                                      ]
                                      spids: [1328]
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              spids: [1325 1335]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (DBracket
                                          expr: 
                                            (LogicalNot
                                              child: 
                                                (BoolUnary
                                                  op_id: BoolUnary_z
                                                  child: 
                                                    {
                                                      (CommandSubPart
                                                        command_list: 
                                                          (CommandList
                                                            children: [
                                                              (Pipeline
                                                                children: [
                                                                  (C {($ VSub_Name "$VBM")} {(list)} 
                                                                    {(hostonlyifs)}
                                                                  )
                                                                  (C {(grep)} {(DQ ($ VSub_Name "$IF"))})
                                                                ]
                                                                negated: False
                                                              )
                                                            ]
                                                          )
                                                        left_token: <Left_Backtick "`">
                                                        spids: [1346 1360]
                                                      )
                                                    }
                                                )
                                            )
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(remove)} 
                                      {(DQ ($ VSub_Name "$IF"))}
                                    )
                                  ]
                                  spids: [-1 1365]
                                )
                              ]
                              spids: [-1 1379]
                            )
                          ]
                          spids: [1298 1382]
                        )
                      spids: [1276 1296]
                    )
                  ]
                  spids: [1256 1385]
                )
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)})
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)})
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(create)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (DBracket
                              expr: (BoolUnary op_id:BoolUnary_z child:{(DQ ($ VSub_Name "$WIN"))})
                            )
                          terminator: <Op_Semi ";">
                        )
                      ]
                      action: [
                        (AndOr
                          children: [(C {(remove_DHCPservers)} {(vboxnet0)}) (C {(true)})]
                          op_id: Op_DPipe
                        )
                        (AndOr
                          children: [(C {(remove_DHCPservers)} {(vboxnet1)}) (C {(true)})]
                          op_id: Op_DPipe
                        )
                        (AndOr
                          children: [(C {(remove_DHCPservers)} {(vboxnet2)}) (C {(true)})]
                          op_id: Op_DPipe
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:VBN0)
                              op: Equal
                              rhs: {(vboxnet0)}
                              spids: [1468]
                            )
                          ]
                          spids: [1468]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:VBN1)
                              op: Equal
                              rhs: {(vboxnet1)}
                              spids: [1472]
                            )
                          ]
                          spids: [1472]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:VBN2)
                              op: Equal
                              rhs: {(vboxnet2)}
                              spids: [1476]
                            )
                          ]
                          spids: [1476]
                        )
                      ]
                      spids: [-1 1426]
                    )
                  ]
                  else_action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:VBN0)
                          op: Equal
                          rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter"))}
                          spids: [1487]
                        )
                      ]
                      spids: [1487]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:VBN1)
                          op: Equal
                          rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter #2"))}
                          spids: [1493]
                        )
                      ]
                      spids: [1493]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:VBN2)
                          op: Equal
                          rhs: {(DQ ("VirtualBox Host-Only Ethernet Adapter #3"))}
                          spids: [1499]
                        )
                      ]
                      spids: [1499]
                    )
                  ]
                  spids: [1480 1505]
                )
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN0"))} 
                  {(--ip)} {(10.0.100.2)} {(--netmask)} {(255.255.255.0)}
                )
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN1"))} 
                  {(--ip)} {(172.16.100.2)} {(--netmask)} {(255.255.255.0)}
                )
                (C {($ VSub_Name "$VBM")} {(hostonlyif)} {(ipconfig)} {(DQ ($ VSub_Name "$VBN2"))} 
                  {(--ip)} {(192.168.100.2)} {(--netmask)} {(255.255.255.0)}
                )
                (ForEach
                  iter_name: vm
                  iter_words: [{(bcpc-bootstrap)}]
                  do_arg_iter: False
                  body: 
                    (DoGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (Pipeline
                                      children: [
                                        (C {($ VSub_Name "$VBM")} {(list)} {(vms)})
                                        (C {(grep)} 
                                          {
                                            (DQ ("^") 
                                              (EscapedLiteralPart
                                                token: <Lit_EscapedChar "\\\"">
                                              ) (${ VSub_Name vm) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                                            )
                                          }
                                        )
                                      ]
                                      negated: True
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:ARCHIVED_BOOTSTRAP)
                                      op: Equal
                                      rhs: 
                                        {
                                          (
../images/build/virtualbox/bcpc-bootstrap/packer-bcpc-bootstrap_ubuntu-14.04.2-amd64.ova
                                          )
                                        }
                                      spids: [1632]
                                    )
                                  ]
                                  spids: [1632]
                                )
                                (If
                                  arms: [
                                    (if_arm
                                      cond: [
                                        (Sentence
                                          child: 
                                            (DBracket
                                              expr: 
                                                (LogicalAnd
                                                  left: 
                                                    (BoolUnary
                                                      op_id: BoolUnary_n
                                                      child: {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))}
                                                    )
                                                  right: 
                                                    (BoolUnary
                                                      op_id: BoolUnary_f
                                                      child: {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))}
                                                    )
                                                )
                                            )
                                          terminator: <Op_Semi ";">
                                        )
                                      ]
                                      action: [
                                        (C {(vbm_import)} {(DQ ($ VSub_Name "$ARCHIVED_BOOTSTRAP"))} 
                                          {(bcpc-bootstrap)}
                                        )
                                      ]
                                      spids: [-1 1658]
                                    )
                                  ]
                                  else_action: [
                                    (C {(exit)})
                                    (C {($ VSub_Name "$VBM")} {(createvm)} {(--name)} 
                                      {($ VSub_Name "$vm")} {(--ostype)} {(Ubuntu_64)} {(--basefolder)} {($ VSub_Name "$P")} {(--register)}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} 
                                      {(--memory)} {($ VSub_Name "$BOOTSTRAP_VM_MEM")}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} 
                                      {(--cpus)} {($ VSub_Name "$BOOTSTRAP_VM_CPUS")}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} 
                                      {(--vram)} {(16)}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} 
                                      {(--name)} {(DQ ("SATA Controller"))} {(--add)} {(sata)}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} 
                                      {(--name)} {(DQ ("IDE Controller"))} {(--add)} {(ide)}
                                    )
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:port)
                                          op: Equal
                                          rhs: {(0)}
                                          spids: [1765]
                                        )
                                      ]
                                      spids: [1765]
                                    )
                                    (ForEach
                                      iter_name: disk
                                      iter_words: [{(a)}]
                                      do_arg_iter: False
                                      body: 
                                        (DoGroup
                                          children: [
                                            (C {($ VSub_Name "$VBM")} {(createhd)} {(--filename)} 
                                              {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) 
                                                ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi)
                                              } {(--size)} {($ VSub_Name "$BOOTSTRAP_VM_DRIVE_SIZE")}
                                            )
                                            (C {($ VSub_Name "$VBM")} {(storageattach)} 
                                              {($ VSub_Name "$vm")} {(--storagectl)} {(DQ ("SATA Controller"))} {(--device)} {(0)} {(--port)} {($ VSub_Name "$port")} {(--type)} 
                                              {(hdd)} {(--medium)} 
                                              {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) 
                                                ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi)
                                              }
                                            )
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:port)
                                                  op: Equal
                                                  rhs: 
                                                    {
                                                      (ArithSubPart
                                                        anode: 
                                                          (ArithBinary
                                                            op_id: Arith_Plus
                                                            left: (ArithVarRef name:port)
                                                            right: (ArithWord w:{(Lit_Digits 1)})
                                                          )
                                                        spids: [1838 1843]
                                                      )
                                                    }
                                                  spids: [1837]
                                                )
                                              ]
                                              spids: [1837]
                                            )
                                          ]
                                          spids: [1778 1846]
                                        )
                                      spids: [1774 1776]
                                    )
                                    (C {($ VSub_Name "$VBM")} {(storageattach)} {($ VSub_Name "$vm")} 
                                      {(--storagectl)} {(DQ ("IDE Controller"))} {(--device)} {(0)} {(--port)} {(0)} {(--type)} {(dvddrive)} {(--medium)} 
                                      {($ VSub_Name "$ISO")}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} 
                                      {(--boot1)} {(disk)}
                                    )
                                  ]
                                  spids: [1670 1893]
                                )
                                (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic1)} 
                                  {(nat)}
                                )
                                (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic2)} 
                                  {(hostonly)} {(--hostonlyadapter2)} {(DQ ($ VSub_Name "$VBN0"))}
                                )
                                (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic3)} 
                                  {(hostonly)} {(--hostonlyadapter3)} {(DQ ($ VSub_Name "$VBN1"))}
                                )
                                (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic4)} 
                                  {(hostonly)} {(--hostonlyadapter4)} {(DQ ($ VSub_Name "$VBN2"))}
                                )
                              ]
                              spids: [-1 1612]
                            )
                          ]
                          spids: [-1 1962]
                        )
                      ]
                      spids: [1580 1965]
                    )
                  spids: [1576 1578]
                )
              ]
              spids: [1135 1968]
            )
            (C {(popd)})
          ]
          spids: [1040]
        )
      spids: [1036 1039]
    )
    (FuncDef
      name: create_cluster_VMs
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:oifs)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$IFS"))}
                  spids: [1996]
                )
              ]
              spids: [1996]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {(SQ <Lit_EscapedChar "\\n">)}
                  spids: [2002]
                )
              ]
              spids: [2002]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:bootstrap_interfaces)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {($ VSub_Name "$VBM")} {(showvminfo)} {(bcpc-bootstrap)} 
                                          {(--machinereadable)}
                                        )
                                        (C {(egrep)} {(SQ <"^hostonlyadapter[0-9]=">)})
                                        (C {(sort)})
                                        (C {(sed)} {(-e)} {(SQ <"s/.*=//">)} {(-e)} {(SQ <"s/\"//g">)})
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [2010 2041]
                            )
                          }
                        ]
                      )
                    }
                  spids: [2008]
                )
              ]
              spids: [2008]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$oifs"))}
                  spids: [2045]
                )
              ]
              spids: [2045]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:VBN0)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name bootstrap_interfaces>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                          spids: [2053 2058]
                        )
                      )
                    }
                  spids: [2051]
                )
              ]
              spids: [2051]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:VBN1)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name bootstrap_interfaces>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                          spids: [2064 2069]
                        )
                      )
                    }
                  spids: [2062]
                )
              ]
              spids: [2062]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:VBN2)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name bootstrap_interfaces>
                          bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)}))
                          spids: [2075 2080]
                        )
                      )
                    }
                  spids: [2073]
                )
              ]
              spids: [2073]
            )
            (ForEach
              iter_name: vm
              iter_words: [{(bcpc-vm1)} {(bcpc-vm2)} {(bcpc-vm3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [
                                    (C {($ VSub_Name "$VBM")} {(list)} {(vms)})
                                    (C {(grep)} 
                                      {
                                        (DQ ("^") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                                          (${ VSub_Name vm) (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">)
                                        )
                                      }
                                    )
                                  ]
                                  negated: True
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {($ VSub_Name "$VBM")} {(createvm)} {(--name)} {($ VSub_Name "$vm")} 
                              {(--ostype)} {(Ubuntu_64)} {(--basefolder)} {($ VSub_Name "$P")} {(--register)}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--memory)} 
                              {($ VSub_Name "$CLUSTER_VM_MEM")}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--cpus)} 
                              {($ VSub_Name "$CLUSTER_VM_CPUS")}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--vram)} {(16)})
                            (C {($ VSub_Name "$VBM")} {(storagectl)} {($ VSub_Name "$vm")} {(--name)} 
                              {(DQ ("SATA Controller"))} {(--add)} {(sata)}
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:port)
                                  op: Equal
                                  rhs: {(0)}
                                  spids: [2210]
                                )
                              ]
                              spids: [2210]
                            )
                            (ForEach
                              iter_name: disk
                              iter_words: [{(a)} {(b)} {(c)} {(d)} {(e)}]
                              do_arg_iter: False
                              body: 
                                (DoGroup
                                  children: [
                                    (C {($ VSub_Name "$VBM")} {(createhd)} {(--filename)} 
                                      {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) 
                                        ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi)
                                      } {(--size)} {($ VSub_Name "$CLUSTER_VM_DRIVE_SIZE")}
                                    )
                                    (C {($ VSub_Name "$VBM")} {(storageattach)} {($ VSub_Name "$vm")} 
                                      {(--storagectl)} {(DQ ("SATA Controller"))} {(--device)} {(0)} {(--port)} {($ VSub_Name "$port")} {(--type)} {(hdd)} 
                                      {(--medium)} {($ VSub_Name "$P") (/) ($ VSub_Name "$vm") (/) ($ VSub_Name "$vm") (-) ($ VSub_Name "$disk") (.vdi)}
                                    )
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:port)
                                          op: Equal
                                          rhs: 
                                            {
                                              (ArithSubPart
                                                anode: 
                                                  (ArithBinary
                                                    op_id: Arith_Plus
                                                    left: (ArithVarRef name:port)
                                                    right: (ArithWord w:{(Lit_Digits 1)})
                                                  )
                                                spids: [2291 2296]
                                              )
                                            }
                                          spids: [2290]
                                        )
                                      ]
                                      spids: [2290]
                                    )
                                  ]
                                  spids: [2231 2299]
                                )
                              spids: [2219 2229]
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic1)} 
                              {(hostonly)} {(--hostonlyadapter1)} {(DQ ($ VSub_Name "$VBN0"))} {(--nictype1)} {(82543GC)}
                            )
                            (C {($ VSub_Name "$VBM")} {(setextradata)} {($ VSub_Name "$vm")} 
                              {(VBoxInternal/Devices/pcbios/0/Config/LanBootRom)} {($ VSub_Name "$P") (/gpxe-1.0.1-80861004.rom)}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic2)} 
                              {(hostonly)} {(--hostonlyadapter2)} {(DQ ($ VSub_Name "$VBN1"))}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--nic3)} 
                              {(hostonly)} {(--hostonlyadapter3)} {(DQ ($ VSub_Name "$VBN2"))}
                            )
                            (C {($ VSub_Name "$VBM")} {(modifyvm)} {($ VSub_Name "$vm")} {(--largepages)} 
                              {(on)} {(--vtxvpid)} {(on)} {(--hwvirtex)} {(on)} {(--nestedpaging)} {(on)} {(--ioapic)} {(off)}
                            )
                          ]
                          spids: [-1 2134]
                        )
                      ]
                      spids: [-1 2405]
                    )
                  ]
                  spids: [2102 2408]
                )
              spids: [2094 2100]
            )
          ]
          spids: [1989]
        )
      spids: [1985 1988]
    )
    (FuncDef
      name: install_cluster
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:environment)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(Test-Laptop)})
                        spids: [2420 2424]
                      )
                    }
                  spids: [2419]
                )
              ]
              spids: [2419]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ip)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(10.0.100.3)})
                        spids: [2427 2431]
                      )
                    }
                  spids: [2426]
                )
              ]
              spids: [2426]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(hash)} {(vagrant)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [2444]
                            )
                          ]
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (AndOr
                      children: [
                        (C {(vagrant)} {(ssh)} {(-c)} 
                          {
                            (DQ 
                              (
"test -f /etc/default/grub.ucf-dist && sudo mv /etc/default/grub.ucf-dist /etc/default/grub"
                              )
                            )
                          }
                        )
                        (C {(true)})
                      ]
                      op_id: Op_DPipe
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-n)} {(DQ ($ VSub_Name "$http_proxy"))} 
                                  {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (C {(vagrant)} {(ssh)} {(-c)} 
                                              {
                                                (DQ 
                                                  (
"grep -z '^Acquire::http::Proxy ' /etc/apt/apt.conf"
                                                  )
                                                )
                                              }
                                            )
                                          ]
                                          negated: True
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("echo 'Acquire::http::Proxy ") 
                                          (EscapedLiteralPart
                                            token: <Lit_EscapedChar "\\\"">
                                          ) ($ VSub_Name "$http_proxy") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) 
                                          (";' | sudo tee -a /etc/apt/apt.conf")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [-1 2519]
                                )
                              ]
                              spids: [-1 2537]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:PROXY_INFO_SH)
                                  op: Equal
                                  rhs: {(DQ (/home/vagrant/proxy_info.sh))}
                                  spids: [2545]
                                )
                              ]
                              spids: [2545]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (C {(vagrant)} {(ssh)} {(-c)} 
                                              {(DQ ("test -f ") ($ VSub_Name "$PROXY_INFO_SH"))}
                                            )
                                          ]
                                          negated: True
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("echo -e 'export http_proxy=") 
                                          ($ VSub_Name "$http_proxy") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("export https_proxy=") ($ VSub_Name "$https_proxy") 
                                          ("' | sudo tee -a ") ($ VSub_Name "$PROXY_INFO_SH")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [-1 2567]
                                )
                              ]
                              spids: [-1 2587]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:CURLRC)
                                  op: Equal
                                  rhs: {(DQ (/home/vagrant/.curlrc))}
                                  spids: [2590]
                                )
                              ]
                              spids: [2590]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (C {(vagrant)} {(ssh)} {(-c)} 
                                              {(DQ ("test -f ") ($ VSub_Name "$CURLRC"))}
                                            )
                                          ]
                                          negated: True
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("echo -e 'proxy = ") ($ VSub_Name "$http_proxy") 
                                          ("' | sudo tee -a ") ($ VSub_Name "$CURLRC")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [-1 2612]
                                )
                              ]
                              spids: [-1 2629]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:GITCONFIG)
                                  op: Equal
                                  rhs: {(DQ (/home/vagrant/.gitconfig))}
                                  spids: [2632]
                                )
                              ]
                              spids: [2632]
                            )
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (C {(vagrant)} {(ssh)} {(-c)} 
                                              {(DQ ("test -f ") ($ VSub_Name "$GITCONFIG"))}
                                            )
                                          ]
                                          negated: True
                                        )
                                      terminator: <Op_Semi ";">
                                    )
                                  ]
                                  action: [
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("echo -e '[http]") 
                                          (EscapedLiteralPart
                                            token: <Lit_EscapedChar "\\n">
                                          ) ("proxy = ") ($ VSub_Name "$http_proxy") ("' | sudo tee -a ") ($ VSub_Name "$GITCONFIG")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [-1 2654]
                                )
                              ]
                              spids: [-1 2673]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:CUSTOM_BASE)
                                  op: Equal
                                  rhs: {(DQ (custom))}
                                  spids: [2685]
                                )
                              ]
                              spids: [2685]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:CUSTOM_CA_DIR)
                                  op: Equal
                                  rhs: 
                                    {(DQ (/usr/share/ca-certificates/) ($ VSub_Name "$CUSTOM_BASE"))}
                                  spids: [2691]
                                )
                              ]
                              spids: [2691]
                            )
                            (ForEach
                              iter_name: CERT
                              iter_words: [
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(ls)} {(-1)} {($ VSub_Name "$BASE_DIR") (/cacerts)})
                                        ]
                                      )
                                    left_token: <Left_CommandSub "$(">
                                    spids: [2704 2711]
                                  )
                                }
                              ]
                              do_arg_iter: False
                              body: 
                                (DoGroup
                                  children: [
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {(DQ ("sudo mkdir -p ") ($ VSub_Name "$CUSTOM_CA_DIR"))}
                                    )
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("if [[ ! -f ") ($ VSub_Name "$CUSTOM_CA_DIR") (/) 
                                          ($ VSub_Name "$CERT") (" ]]; then sudo cp /chef-bcpc-host/cacerts/") ($ VSub_Name "$CERT") (" ") 
                                          ($ VSub_Name "$CUSTOM_CA_DIR") (/) ($ VSub_Name "$CERT") ("; fi")
                                        )
                                      }
                                    )
                                    (C {(vagrant)} {(ssh)} {(-c)} 
                                      {
                                        (DQ ("echo ") ($ VSub_Name "$CUSTOM_BASE") (/) 
                                          ($ VSub_Name "$CERT") (" | sudo tee -a /etc/ca-certificates.conf")
                                        )
                                      }
                                    )
                                  ]
                                  spids: [2714 2765]
                                )
                              spids: [2703 2712]
                            )
                            (C {(vagrant)} {(ssh)} {(-c)} {(DQ ("sudo /usr/sbin/update-ca-certificates"))})
                          ]
                          spids: [-1 2501]
                        )
                      ]
                      spids: [-1 2779]
                    )
                    (C {(echo)} {(DQ ("Bootstrap complete - setting up Chef server"))})
                    (C {(echo)} {(DQ ("N.B. This may take approximately 30-45 minutes to complete."))})
                    (C {(./bootstrap_chef.sh)} {(--vagrant-remote)} {($ VSub_Name "$ip")} 
                      {($ VSub_Name "$environment")}
                    )
                    (C {(./enroll_cobbler.sh)})
                  ]
                  spids: [-1 2450]
                )
              ]
              else_action: [(C {(./non_vagrant_boot.sh)})]
              spids: [2808 2814]
            )
          ]
          spids: [2417]
        )
      spids: [2413 2416]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: 
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name BASH_SOURCE>
                              bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                              spids: [2827 2832]
                            )
                          )
                        }
                      right: {(DQ (${ VSub_Number 0))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(download_VM_files)})
            (C {(create_bootstrap_VM)})
            (C {(create_cluster_VMs)})
            (C {(install_cluster)} {($ VSub_Star "$*")})
          ]
          spids: [-1 2846]
        )
      ]
      spids: [-1 2862]
    )
  ]
)