package Ġcom . gan macs . util Ċ Ċ import Ġcom . gan macs . wal . EOF Ċ import Ġjava . io . InputStream Ċ Ċ internal Ġclass ĠSeq InputStream Reader ( ĊĠĠĠ Ġprivate Ġval Ġinput Streams : ĠList < InputStream >, Ċ ) Ġ: ĠInputStream () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġiter Ġ= Ġinput Streams . iterator () ĊĠĠĠ Ġprivate Ġvar ĠinputStream Ġ= Ġiter . next OrNull () Ġ?: Ġnull InputStream () ĊĊĠĠĠ Ġ// Ġexpect Ġthat Ġavailable () Ġdoesn 't Ġchange Ġwhile Ġreading ĊĠĠĠ Ġprivate Ġvar Ġtotal Available Ġ= Ġinput Streams . fold ( 0 ) Ġ{ Ġacc , Ġe Ġ-> Ġacc Ġ+ Ġe . available () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġr len Ġ= Ġread 0 ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġif Ġ( r len Ġ== ĠEOF ) Ġreturn ĠEOF ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( len Ġ> Ġr len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġiter . next OrNull () Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġread 0 ( b , Ġoff Ġ+ Ġr len , Ġlen Ġ- Ġr len ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ== ĠEOF ) Ġ{ Ġ// Ġwhen Ġthe Ġlast ĠinputStream Ġin Ġiter Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr len Ġ+= Ġr ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtotal Available Ġ-= Ġr len ĊĠĠĠĠĠĠĠ Ġreturn Ġr len ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġt Ġ= ĠinputStream . read () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( t Ġ== ĠEOF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġiter . next OrNull () Ġ?: Ġreturn ĠEOF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= ĠinputStream . read () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtotal Available -- ĊĠĠĠĠĠĠĠ Ġreturn Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread 0 ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġr Ġ= ĠinputStream . read ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( r Ġ== ĠEOF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġiter . next OrNull () Ġ?: Ġreturn ĠEOF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= ĠinputStream . read ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġavailable (): ĠInt Ġ= Ġtotal Available ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ= Ġinput Streams . forEach Ġ{ Ġit . close () Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T > ĠIterator < T >. next OrNull (): ĠT ? Ġ= Ġif Ġ( hasNext ()) Ġnext () Ġelse Ġnull