(List (Com {[LIT_CHARS set]} {[LIT_CHARS -euo]} {[LIT_CHARS pipefail]}) (= scope= flags=0 words=[] bindings=[('PLATFORM', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS uname]} {[LIT_CHARS -s]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]]})]) (FunctionDef resolve_links [] (List (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub 1]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -e]} {[DQ [VarSub name]]} {[LIT_OTHER "]"]}) (List (While (Com {[LIT_OTHER "["]} {[LIT_CHARS -L]} {[DQ [VarSub name]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('target', {[ComSub (Com {[LIT_CHARS readlink]} {[DQ [VarSub name]]})]})]) (If (Com {[LIT_OTHER "["]} {[DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub target]]}) (Com {[LIT_CHARS head]} {[LIT_CHARS -c1]}) )]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS /]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub target]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('name', {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub name]]})][LIT_CHARS /][VarSub target]]})]) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub name]]}) ) (ElseTrue) (Com {[LIT_CHARS false]}) ) ) ) (FunctionDef normalize_path [] (List (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('path', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('uplevels', {[LIT_CHARS 0]})]) (While (Com {[LIT_OTHER "["]} {[DQ [VarSub name]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS /]]} {[LIT_CHARS -a]} {[DQ [VarSub name]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS .]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('segment', {[DQ [ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub name]]})]]})]) (= scope= flags=0 words=[] bindings=[('name', {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub name]]})]]})]) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub segment]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS .]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS continue]}) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub segment]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS ..]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('uplevels', {[DQ [ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub uplevels]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]]})]) (ElseTrue) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub uplevels]]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('uplevels', {[DQ [ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub uplevels]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('path', {[DQ [VarSub segment][LIT_CHARS /][VarSub path]]})]) ) ) ) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub name]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS .]]} {[LIT_OTHER "]"]}) (While (Com {[LIT_OTHER "["]} {[DQ [VarSub uplevels]]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('path', {[DQ [LIT_CHARS ../][VarSub path]]})]) (= scope= flags=0 words=[] bindings=[('uplevels', {[DQ [ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub uplevels]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]]})]) ) ) ) (= scope= flags=0 words=[] bindings=[('path', {[DQ [VarSub path transform_ops=[VS_UNARY_PERCENT {[LIT_SLASH /]}]]]})]) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub name]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS /]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS /][VarSub path]]}) (ElseTrue) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub path]]} {[LIT_OTHER "]"]}) (AndOr OP_OR_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub path]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS .]]}) ) ) ) ) ) (FunctionDef get_real_path [] (List (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('name', {[DQ [ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS resolve_links]} {[DQ [VarSub name]]}) (Com {[LIT_CHARS echo]}) )]]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub name]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS normalize_path]} {[DQ [ComSub (Com {[LIT_CHARS pwd]})][LIT_CHARS /][VarSub name]]}) (ElseTrue) (Com {[LIT_CHARS false]}) ) ) ) (FunctionDef md5_file [] (If (Com {[LIT_OTHER "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('result', {[DQ ]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[VarSub PLATFORM]} {[DQ [LIT_CHARS darwin]]}}) (= scope= flags=0 words=[] bindings=[('result', {[ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS md5]} {[LIT_CHARS -q]} {[VarSub @]}) (Com {[LIT_CHARS echo]}) )]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('result', {[ComSub (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS md5sum]} {[VarSub @]}) (Com {[LIT_CHARS awk]} {[SQ ]}) ) (Com {[LIT_CHARS echo]}) )]})]) ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub result]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub result]]}) (ElseTrue) (Com {[LIT_CHARS false]}) ) ) (ElseTrue) (Com {[LIT_CHARS false]}) ) ) )