package Ġpl . m ich al perl ak . tr f . parser Ċ Ċ import Ġpl . m ich al perl ak . tr f . model . Player Id Ċ import Ġpl . m ich al perl ak . tr f . model . Team Data Ċ import Ġpl . m ich al perl ak . tr f . util . split By Whitespace Ċ Ċ internal Ġclass ĠTeam Data Parser Ġ: ĠEntry Parser < List < Team Data >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġparse ( values : ĠList < String >? ): ĠList < Team Data > Ġ= ĊĠĠĠĠĠĠĠ Ġvalues ?. map (:: parse Team Data ) Ġ?: Ġempty List () ĊĊĠĠĠ Ġprivate Ġfun Ġparse Team Data ( team Line : ĠString ): ĠTeam Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġteam Line . split By Whitespace () ĊĠĠĠĠĠĠĠ Ġval Ġteam Name Ġ= Ġparts [ 0 ] ĊĠĠĠĠĠĠĠ Ġtail rec Ġfun Ġread Team Member ( team Line Parts : ĠList < String >, Ġteam Members : ĠList < Player Id >): ĠList < Player Id > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( team Line Parts . isEmpty ()) Ġteam Members ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġread Team Member ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteam Line Parts . drop ( 1 ), Ġteam Members Ġ+ ĠPlayer Id ( team Line Parts . first (). trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġplayers Ġ= Ġread Team Member ( parts . drop ( 1 ), Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠTeam Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġteam Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayers Ġ= Ġplayers ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }