(command.CommandList children: [ (command.ShFunction name: _ssh_queries body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:12) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:14) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} {(DQ ('cipher cipher-auth mac kex key protocol-version'))} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [11] ) ] ) ] ) ) (command.ShFunction name: _ssh_query body: (command.BraceGroup children: [ (command.Simple words: [ { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:47) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(ssh)}) ) } {(-Q)} {($ Id.VSub_Number '$2')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:56) fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ) (command.ShFunction name: _ssh_ciphers body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'ciphers=') (SQ (Token id:Id.Lit_Chars val:'$( _ssh_query "$1" cipher )' span_id:73)) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_DollarName '$ciphers')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ciphers) op: assign_op.Equal rhs: { (DQ ('3des-cbc aes128-cbc aes192-cbc aes256-cbc\n') ( ' aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour\n' ) (' blowfish-cbc cast128-cbc') ) } spids: [85] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:94) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:96) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} {(DQ ($ Id.VSub_DollarName '$ciphers'))} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [93] ) ] ) ] ) ) (command.ShFunction name: _ssh_macs body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'macs=') (SQ (Token id:Id.Lit_Chars val:'$( _ssh_query "$1" mac )' span_id:130)) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_DollarName '$macs')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:macs) op: assign_op.Equal rhs: { (DQ ('hmac-md5 hmac-sha1 umac-64@openssh.com hmac-ripemd160\n') (' hmac-sha1-96 hmac-md5-96') ) } spids: [142] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:150) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:152) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} {(DQ ($ Id.VSub_DollarName '$macs'))} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [149] ) ] ) ] ) ) (command.ShFunction name: _ssh_options body: (command.BraceGroup children: [ (C {(compopt)} {(-o)} {(nospace)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:190) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:192) command_list: (command.CommandList children: [ (C {(compgen)} {(-S)} {(Id.Lit_Equals '=')} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'AddressFamily BatchMode BindAddress\n' span_id: 203 ) (Token id: Id.Lit_Chars val: ' ChallengeResponseAuthentication CheckHostIP Cipher Ciphers\n' span_id: 204 ) (Token id: Id.Lit_Chars val: ' ClearAllForwardings Compression CompressionLevel ConnectionAttempts\n' span_id: 205 ) (Token id: Id.Lit_Chars val: ' ConnectTimeout ControlMaster ControlPath ControlPersist DynamicForward\n' span_id: 206 ) (Token id: Id.Lit_Chars val: ' EnableSSHKeysign EscapeChar ExitOnForwardFailure ForwardAgent\n' span_id: 207 ) (Token id: Id.Lit_Chars val: ' ForwardX11 ForwardX11Timeout ForwardX11Trusted GatewayPorts\n' span_id: 208 ) (Token id: Id.Lit_Chars val: ' GlobalKnownHostsFile GSSAPIAuthentication GSSAPIClientIdentity\n' span_id: 209 ) (Token id: Id.Lit_Chars val: ' GSSAPIDelegateCredentials GSSAPIKeyExchange GSSAPIRenewalForcesRekey\n' span_id: 210 ) (Token id: Id.Lit_Chars val: ' GSSAPIServerIdentity GSSAPITrustDns HashKnownHosts Host\n' span_id: 211 ) (Token id: Id.Lit_Chars val: ' HostbasedAuthentication HostKeyAlgorithms HostKeyAlias HostName\n' span_id: 212 ) (Token id: Id.Lit_Chars val: ' IdentityFile IdentitiesOnly IPQoS KbdInteractiveDevices KexAlgorithms\n' span_id: 213 ) (Token id:Id.Lit_Chars val:' LocalCommand LocalForward LogLevel MACs\n' span_id:214) (Token id: Id.Lit_Chars val: ' NoHostAuthenticationForLocalhost NumberOfPasswordPrompts\n' span_id: 215 ) (Token id: Id.Lit_Chars val: ' PasswordAuthentication PermitLocalCommand PKCS11Provider Port\n' span_id: 216 ) (Token id: Id.Lit_Chars val: ' PreferredAuthentications Protocol ProxyCommand PubkeyAuthentication\n' span_id: 217 ) (Token id: Id.Lit_Chars val: ' RekeyLimit RemoteForward RequestTTY RhostsRSAAuthentication\n' span_id: 218 ) (Token id: Id.Lit_Chars val: ' RSAAuthentication SendEnv ServerAliveCountMax ServerAliveInterval\n' span_id: 219 ) (Token id: Id.Lit_Chars val: ' SmartcardDevice StrictHostKeyChecking TCPKeepAlive Tunnel TunnelDevice\n' span_id: 220 ) (Token id: Id.Lit_Chars val: ' UsePrivilegedPort User UserKnownHostsFile VerifyHostKeyDNS\n' span_id: 221 ) (Token id:Id.Lit_Chars val:' VisualHostKey XAuthLocation' span_id:222) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [189] ) ] ) ] ) ) (command.ShFunction name: _ssh_suboption body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'prev=') (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:268) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{('=*')}) ) } {(Id.Lit_VarLike 'cur=') (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:275) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*=')}) ) } ) (command.Case to_match: {($ Id.VSub_DollarName '$prev')} arms: [ (case_arm pat_list: [ {(BatchMode)} {(ChallengeResponseAuthentication)} {(CheckHostIP)} {(ClearAllForwardings)} {(ControlPersist)} {(Compression)} {(EnableSSHKeysign)} {(ExitOnForwardFailure)} {(ForwardAgent)} {(ForwardX11)} {(ForwardX11Trusted)} {(GatewayPorts)} {(GSSAPIAuthentication)} {(GSSAPIKeyExchange)} {(GSSAPIDelegateCredentials)} {(GSSAPIRenewalForcesRekey)} {(GSSAPITrustDns)} {(HashKnownHosts)} {(HostbasedAuthentication)} {(IdentitiesOnly)} {(KbdInteractiveAuthentication)} {(KbdInteractiveDevices)} {(NoHostAuthenticationForLocalhost)} {(PasswordAuthentication)} {(PubkeyAuthentication)} {(RhostsRSAAuthentication)} {(RSAAuthentication)} {(StrictHostKeyChecking)} {(TCPKeepAlive)} {(UsePrivilegedPort)} {(VerifyHostKeyDNS)} {(VisualHostKey)} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:376) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:378) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} {(SQ (Token id:Id.Lit_Chars val:'yes no' span_id:385))} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [375] ) ] ) ] spids: [289 372 399 -1] ) (case_arm pat_list: [{(AddressFamily)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:407) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:409) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'any inet inet6' span_id: 416 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [406] ) ] ) ] spids: [402 403 430 -1] ) (case_arm pat_list: [{(BindAddress)}] action: [(C {(_ip_addresses)})] spids: [433 434 440 -1] ) (case_arm pat_list: [{(Cipher)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:448) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:450) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'blowfish des 3des' span_id: 457 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [447] ) ] ) ] spids: [443 444 471 -1] ) (case_arm pat_list: [{(IPQoS)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:479) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:481) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'af1{1..4} af2{2..3} af3{1..3} af4{1..3}\n' span_id: 488 ) (Token id:Id.Lit_Chars val:' cs{0..7} ef lowdelay throughput reliability' span_id:489) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [478] ) ] ) ] spids: [474 475 503 -1] ) (case_arm pat_list: [{(HostbasedKeyTypes)} {(HostKeyAlgorithms)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:513) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:515) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '$( _ssh_query "$2" key )' span_id: 522 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [512] ) ] ) ] spids: [506 509 536 -1] ) (case_arm pat_list: [{(KexAlgorithms)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:544) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:546) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '$( _ssh_query "$2" kex )' span_id: 553 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [543] ) ] ) ] spids: [539 540 567 -1] ) (case_arm pat_list: [{(Protocol)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:575) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:577) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '1 2 1,2 2,1' span_id: 584 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [574] ) ] ) ] spids: [570 571 598 -1] ) (case_arm pat_list: [{(RequestTTY)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:606) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:608) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'no yes force auto' span_id: 615 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [605] ) ] ) ] spids: [601 602 629 -1] ) (case_arm pat_list: [{(Tunnel)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:637) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:639) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'yes no point-to-point ethernet' span_id: 646 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [636] ) ] ) ] spids: [632 633 662 -1] ) (case_arm pat_list: [{(PreferredAuthentications)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:670) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:672) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'gssapi-with-mic host-based publickey\n' span_id: 679 ) (Token id:Id.Lit_Chars val:' keyboard-interactive password' span_id:680) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [669] ) ] ) ] spids: [665 666 694 -1] ) (case_arm pat_list: [{(MACs)}] action: [(C {(_ssh_macs)} {(DQ ($ Id.VSub_Number '$2'))})] spids: [697 698 708 -1] ) (case_arm pat_list: [{(Ciphers)}] action: [(C {(_ssh_ciphers)} {(DQ ($ Id.VSub_Number '$2'))})] spids: [711 712 722 -1] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:728) arg_word: {(0)} ) ] ) ) (command.ShFunction name: _ssh_suboption_check body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'cureq=') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:758) command_list: (command.CommandList children: [(C {(_get_cword)} {(Id.Lit_Other ':') (Id.Lit_Equals '=')})] ) ) } {(Id.Lit_VarLike 'preveq=') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:768) command_list: (command.CommandList children: [(C {(_get_pword)} {(Id.Lit_Other ':') (Id.Lit_Equals '=')})] ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$cureq')} right: {(Id.Lit_Other '*') (Id.BoolBinary_GlobEqual '=') (Id.Lit_Other '*') } ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$preveq')} right: {(Id.BoolUnary_o -o)} ) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:799) ) ] action: [ (C {(_ssh_suboption)} {($ Id.VSub_DollarName '$cureq')} {(DQ ($ Id.VSub_Number '$1'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:813) arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [778 801] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:821) arg_word: {(1)} ) ] ) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShFunction name: _ssh body: (command.BraceGroup children: [ (C {(local)} {(cur)} {(prev)} {(words)} {(cword)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(_init_completion)} {(-n)} {(Id.Lit_Other ':')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:854) ) ] ) (C {(local)} {(configfile)}) (C {(local)} {(-a)} {(config)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(_ssh_suboption_check)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:879) arg_word: {(0)} ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$prev')} arms: [ (case_arm pat_list: [{(-F)} {(-i)} {(-S)}] action: [ (C {(_filedir)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:903) arg_word: {(0)} ) ] spids: [892 897 908 -1] ) (case_arm pat_list: [{(-c)}] action: [ (C {(_ssh_ciphers)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:922) arg_word: {(0)} ) ] spids: [911 912 927 -1] ) (case_arm pat_list: [{(-m)}] action: [ (C {(_ssh_macs)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:941) arg_word: {(0)} ) ] spids: [930 931 946 -1] ) (case_arm pat_list: [{(-l)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:954) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 956 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-u)} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [953] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:973) arg_word: {(0)} ) ] spids: [949 950 978 -1] ) (case_arm pat_list: [{(-O)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:986) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 988 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: 'check forward exit stop' span_id: 995 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [985] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1009) arg_word: {(0)} ) ] spids: [981 982 1014 -1] ) (case_arm pat_list: [{(-o)}] action: [ (C {(_ssh_options)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1024) arg_word: {(0)} ) ] spids: [1017 1018 1029 -1] ) (case_arm pat_list: [{(-Q)}] action: [ (C {(_ssh_queries)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1043) arg_word: {(0)} ) ] spids: [1032 1033 1048 -1] ) (case_arm pat_list: [{(-w)}] action: [ (C {(_available_interfaces)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1058) arg_word: {(0)} ) ] spids: [1051 1052 1063 -1] ) (case_arm pat_list: [{(-b)}] action: [ (C {(_ip_addresses)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1073) arg_word: {(0)} ) ] spids: [1066 1067 1078 -1] ) (case_arm pat_list: [{(-D)} {(-e)} {(-I)} {(-L)} {(-p)} {(-R)} {(-W)}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1097) arg_word: {(0)} ) ] spids: [1081 1094 1102 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$cur'))} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1123) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:1130) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(-F)}) ) } spids: [1128] ) ] ) (C {(_filedir)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1144) words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:COMPREPLY span_id:1148) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.PatSub pat: {} replace: {(-F)} replace_mode: Id.Lit_Pound ) ) ) } ] ) } spids: [1143] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: {(-F) ($ Id.VSub_DollarName '$cur')} spids: [1162] ) ] ) ] spids: [1109 1125] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$cur'))} right: {(-) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1184) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1190) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1192 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '$( _parse_usage "$1" )' span_id: 1199 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [1189] ) ] ) ] spids: [1170 1186] ) ] else_action: [ (C {(Id.KW_Set set)} {(--)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:1226) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:1234) cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_Pound '$#')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1245) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1262) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 1273 ) prefix_op: (Id.VSub_Pound) ) } right: {(2)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1281) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1288 ) command_list: (command.CommandList children: [ (C {(dequote)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 1293 ) suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) ) ) } ) ] ) ) ) } spids: [1286] ) ] ) ] spids: [1267 1283] ) ] else_action: [ (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_Number '$1')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1318 ) command_list: (command.CommandList children: [ (C {(dequote)} {(DQ ($ Id.VSub_Number '$1'))} ) ] ) ) ) } spids: [1316] ) ] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:1331) ) ] spids: [1250 1264] ) ] ) (C {(shift)}) ] ) ) (C {(_known_hosts_real)} {(-a)} {(-F)} {(DQ ($ Id.VSub_DollarName '$configfile'))} {(DQ ($ Id.VSub_DollarName '$cur'))} ) (C {(local)} {(args)}) (C {(_count_args)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_DollarName '$args')} right: {(1)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1378) ) ] action: [ (C {(compopt)} {(-o)} {(filenames)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1391) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1393 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-c)} {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [1390] ) ] ) ] spids: [1367 1380] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1417) arg_word: {(0)} ) ] ) ) (C {(shopt)} {(-u)} {(hostcomplete)}) (C {(complete)} {(-F)} {(_ssh)} {(ssh)} {(slogin)} {(autossh)}) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShFunction name: _sftp body: (command.BraceGroup children: [ (C {(local)} {(cur)} {(prev)} {(words)} {(cword)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(_init_completion)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1474) ) ] ) (C {(local)} {(configfile)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(_ssh_suboption_check)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1488) arg_word: {(0)} ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$prev')} arms: [ (case_arm pat_list: [{(-b)} {(-F)} {(-i)}] action: [ (C {(_filedir)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1512) arg_word: {(0)} ) ] spids: [1501 1506 1517 -1] ) (case_arm pat_list: [{(-o)}] action: [ (C {(_ssh_options)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1527) arg_word: {(0)} ) ] spids: [1520 1521 1532 -1] ) (case_arm pat_list: [{(-c)}] action: [ (C {(_ssh_ciphers)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1542) arg_word: {(0)} ) ] spids: [1535 1536 1547 -1] ) (case_arm pat_list: [{(-S)}] action: [ (C {(_command)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1557) arg_word: {(0)} ) ] spids: [1550 1551 1562 -1] ) (case_arm pat_list: [{(-B)} {(-D)} {(-l)} {(-P)} {(-R)} {(-s)}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1579) arg_word: {(0)} ) ] spids: [1565 1576 1584 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$cur'))} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1605) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:1612) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(-F)}) ) } spids: [1610] ) ] ) (C {(_filedir)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1626) words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:COMPREPLY span_id:1630) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.PatSub pat: {} replace: {(-F)} replace_mode: Id.Lit_Pound ) ) ) } ] ) } spids: [1625] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: {(-F) ($ Id.VSub_DollarName '$cur')} spids: [1644] ) ] ) ] spids: [1591 1607] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$cur'))} right: {(-) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1666) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1672) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1674 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '$( _parse_usage "$1" )' span_id: 1681 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [1671] ) ] ) ] spids: [1652 1668] ) ] else_action: [ (C {(Id.KW_Set set)} {(--)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:1708) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:1716) cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_Pound '$#')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1727) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1744) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 1755 ) prefix_op: (Id.VSub_Pound) ) } right: {(2)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1763) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1770 ) command_list: (command.CommandList children: [ (C {(dequote)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 1775 ) suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) ) ) } ) ] ) ) ) } spids: [1768] ) ] ) ] spids: [1749 1765] ) ] else_action: [ (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_Number '$1')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1800 ) command_list: (command.CommandList children: [ (C {(dequote)} {(DQ ($ Id.VSub_Number '$1'))} ) ] ) ) ) } spids: [1798] ) ] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:1813) ) ] spids: [1732 1746] ) ] ) (C {(shift)}) ] ) ) (C {(_known_hosts_real)} {(-a)} {(-F)} {(DQ ($ Id.VSub_DollarName '$configfile'))} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1844) arg_word: {(0)} ) ] ) ) (C {(shopt)} {(-u)} {(hostcomplete)}) (C {(complete)} {(-F)} {(_sftp)} {(sftp)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_scp_path_esc) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'[][(){}<>",:;^&!$=?`|\\\\' span_id:1874)) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'[:space:]]' span_id:1880)) } spids: [1872] ) ] ) (command.ShFunction name: _scp_remote_files body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'IFS=') (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:1900) tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:1901)] ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:1912) suffix_op: (suffix_op.PatSub pat: { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:1914) ) (':') } replace: {(':')} replace_mode: Id.Undefined_Tok ) ) } spids: [1910] ) ] ) (C {(local)} {(Id.Lit_VarLike 'userhost=') (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:1926) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {('?(') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:1929) ) ('):*') } ) ) } ) (C {(local)} {(Id.Lit_VarLike 'path=') (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:1938) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*:')}) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1950) command_list: (command.CommandList children: [ (command.Simple words: [ {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/\\\\\\\\\\\\\\(' span_id:1957)) ($ Id.VSub_DollarName '$_scp_path_esc') (SQ (Token id:Id.Lit_Chars val:'\\)/\\\\\\1/g' span_id:1961)) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_TLess val:'<<<' span_id:1964) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$path'))} ) ] ) ] ) ) } spids: [1949] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {($ Id.VSub_DollarName '$path')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1986) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1992) command_list: (command.CommandList children: [ (command.Simple words: [ {(ssh)} {(-o)} { (SQ (Token id: Id.Lit_Chars val: 'Batchmode yes' span_id: 1998 ) ) } {($ Id.VSub_DollarName '$userhost')} {(pwd)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:2005) fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ) } spids: [1991] ) ] ) ] spids: [1977 1988] ) ] ) (C {(local)} {(files)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(Id.BoolUnary_d -d)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2030) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:files) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2040) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(ssh)} {(-o)} { (SQ (Token id: Id.Lit_Chars val: 'Batchmode yes' span_id: 2047 ) ) } {($ Id.VSub_DollarName '$userhost')} {(command)} {(ls)} {(-aF1dL)} {(DQ ($ Id.VSub_DollarName '$path') ('*'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:2065) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:s/ span_id:2077)) ($ Id.VSub_DollarName '$_scp_path_esc') (SQ (Token id:Id.Lit_Chars val:'/\\\\\\\\\\\\&/g' span_id:2081)) } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/[^\\/]$/d' span_id:2087))} ) ] negated: F ) ] ) ) } spids: [2039] ) ] ) ] spids: [2019 2032] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:files) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2105) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(ssh)} {(-o)} { (SQ (Token id: Id.Lit_Chars val: 'Batchmode yes' span_id: 2112 ) ) } {($ Id.VSub_DollarName '$userhost')} {(command)} {(ls)} {(-aF1dL)} {(DQ ($ Id.VSub_DollarName '$path') ('*'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:2130) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:s/ span_id:2142)) ($ Id.VSub_DollarName '$_scp_path_esc') (SQ (Token id:Id.Lit_Chars val:'/\\\\\\\\\\\\&/g' span_id:2146)) } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/[*@|=]$//g' span_id:2152))} {(-e)} { (SQ (Token id: Id.Lit_Chars val: 's/[^\\/]$/& /g' span_id: 2160 ) ) } ) ] negated: F ) ] ) ) } spids: [2104] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2170) words: [{($ Id.VSub_DollarName '$files')}] ) } spids: [2169] ) ] ) ] ) ) (command.ShFunction name: _scp_local_files body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'IFS=') (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:2201) tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:2202)] ) } ) (C {(local)} {(Id.Lit_VarLike 'dirsonly=') (false)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(Id.BoolUnary_d -d)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2224) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dirsonly) op: assign_op.Equal rhs: {(true)} spids: [2229] ) ] ) (C {(shift)}) ] spids: [2213 2226] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {($ Id.VSub_DollarName '$dirsonly')}) terminator: (Token id:Id.Op_Semi val:';' span_id:2244) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2250) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2252 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(command)} {(ls)} {(-aF1dL)} {($ Id.VSub_DollarName '$cur') (Id.Lit_Star '*')} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 2263 ) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(sed)} {(-e)} { (DQ (s/) ($ Id.VSub_DollarName '$_scp_path_esc') (/) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:2278)) (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\\\' span_id: 2279 ) ) ('&/g') ) } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/[^\\/]$/d' span_id:2286))} {(-e)} {(DQ ('s/^/') ($ Id.VSub_Number '$1') (/))} ) ] negated: F ) ] ) ) } ] ) } spids: [2249] ) ] ) ] spids: [2240 2246] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.PlusEqual rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2305) words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2307) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(command)} {(ls)} {(-aF1dL)} {($ Id.VSub_DollarName '$cur') (Id.Lit_Star '*')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:2318) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(sed)} {(-e)} { (DQ (s/) ($ Id.VSub_DollarName '$_scp_path_esc') (/) (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\\\' span_id: 2333 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:2334)) ('&/g') ) } {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/[*@|=]$//g' span_id:2341))} {(-e)} { (SQ (Token id: Id.Lit_Chars val: 's/[^\\/]$/& /g' span_id: 2349 ) ) } {(-e)} {(DQ ('s/^/') ($ Id.VSub_Number '$1') (/))} ) ] negated: F ) ] ) ) } ] ) } spids: [2304] ) ] ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShFunction name: _scp body: (command.BraceGroup children: [ (C {(local)} {(cur)} {(prev)} {(words)} {(cword)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(_init_completion)} {(-n)} {(Id.Lit_Other ':')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2401) ) ] ) (C {(local)} {(configfile)} {(prefix)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(_ssh_suboption_check)}) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2421) words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:COMPREPLY span_id:2425) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.PatSub pat: {} replace: {(' ')} replace_mode: Id.Lit_Percent ) ) ) } ] ) } spids: [2420] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2439) arg_word: {(0)} ) ] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$prev')} arms: [ (case_arm pat_list: [{(-l)} {(-P)}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2461) arg_word: {(0)} ) ] spids: [2455 2458 2466 -1] ) (case_arm pat_list: [{(-F)} {(-i)}] action: [ (C {(_filedir)}) (C {(compopt)} {(Id.Lit_Other '+') (o)} {(nospace)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2486) arg_word: {(0)} ) ] spids: [2469 2472 2491 -1] ) (case_arm pat_list: [{(-c)}] action: [ (C {(_ssh_ciphers)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2502) words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:COMPREPLY span_id:2506) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.PatSub pat: {} replace: {(' ')} replace_mode: Id.Lit_Percent ) ) ) } ] ) } spids: [2501] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2520) arg_word: {(0)} ) ] spids: [2494 2495 2525 -1] ) (case_arm pat_list: [{(-o)}] action: [ (C {(_ssh_options)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2535) arg_word: {(0)} ) ] spids: [2528 2529 2540 -1] ) (case_arm pat_list: [{(-S)}] action: [ (C {(_command)}) (C {(compopt)} {(Id.Lit_Other '+') (o)} {(nospace)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2558) arg_word: {(0)} ) ] spids: [2543 2544 2563 -1] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(_expand)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2574) arg_word: {(0)} ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$cur')} arms: [ (case_arm pat_list: [ { (word_part.ExtGlob op: (Token id:Id.ExtGlob_Bang val:'!(' span_id:2587) arms: [{(Id.Lit_Other '*') (':') (Id.Lit_Other '*')}] ) (/) (Id.Lit_Star '*') } {(Id.Lit_LBracket '[') (.) (Id.Lit_TildeLike '~') (Id.Lit_RBracket ']') (Id.Lit_Star '*') } ] spids: [2587 2600 2602 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*') (Id.Lit_Other ':') (Id.Lit_Star '*')}] action: [ (command.Sentence child: (C {(_scp_remote_files)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2615) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2617) arg_word: {(0)} ) ] spids: [2608 2611 2621 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$cur'))} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2642) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:cur span_id:2649) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(-F)}) ) } spids: [2647] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:prefix) op: assign_op.Equal rhs: {(-F)} spids: [2655] ) ] ) ] spids: [2628 2644] ) ] else_action: [ (C {(Id.KW_Set set)} {(--)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:words span_id:2672) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:2680) cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_Pound '$#')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2691) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(-F) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2708) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 2719 ) prefix_op: (Id.VSub_Pound) ) } right: {(2)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:2727) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2734 ) command_list: (command.CommandList children: [ (C {(dequote)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Number val: 1 span_id: 2739 ) suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) ) ) } ) ] ) ) ) } spids: [2732] ) ] ) ] spids: [2713 2729] ) ] else_action: [ (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_Number '$1')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configfile) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2764 ) command_list: (command.CommandList children: [ (C {(dequote)} {(DQ ($ Id.VSub_Number '$1'))} ) ] ) ) ) } spids: [2762] ) ] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:2777) ) ] spids: [2696 2710] ) ] ) (C {(shift)}) ] ) ) (command.Case to_match: {($ Id.VSub_DollarName '$cur')} arms: [ (case_arm pat_list: [{(-) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2803) words: [ { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2805 ) command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} { (SQ (Token id: Id.Lit_Chars val: '$( _parse_usage "${words[0]}" )' span_id: 2812 ) ) } {(--)} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] ) ) } ] ) } spids: [2802] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPREPLY) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:2829) words: [ { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: COMPREPLY span_id: 2833 ) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) suffix_op: (suffix_op.PatSub pat: {} replace: {(' ')} replace_mode: Id.Lit_Percent ) ) ) } ] ) } spids: [2828] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2847) arg_word: {(0)} ) ] spids: [2797 2799 2852 -1] ) (case_arm pat_list: [ {(Id.Lit_Star '*') (/) (Id.Lit_Star '*')} {(Id.Lit_LBracket '[') (.) (Id.Lit_TildeLike '~') (Id.Lit_RBracket ']') (Id.Lit_Star '*') } ] spids: [2855 2864 2871 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(_known_hosts_real)} {(-c)} {(-a)} {(-F)} {(DQ ($ Id.VSub_DollarName '$configfile'))} {(DQ ($ Id.VSub_DollarName '$cur'))} ) ] spids: [2874 2875 2895 -1] ) ] ) ] ) (C {(_scp_local_files)} {(DQ ($ Id.VSub_DollarName '$prefix'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2913) arg_word: {(0)} ) ] ) ) (C {(complete)} {(-F)} {(_scp)} {(-o)} {(nospace)} {(scp)}) ] ) ] )