package Ġjet brains . build Server . agent . runner Ċ Ċ import Ġjet brains . build Server . agent . Logger Ċ Ċ class ĠMessage Indices Source ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġ_ positions Source : ĠSource < Long >) ĊĠĠĠ Ġ: ĠSource < Index > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġread ( source : ĠString , Ġfrom Position : ĠLong , Ġcount : ĠLong ) Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġinit Position Ġ= Ġfrom Position ĊĠĠĠĠĠĠĠ Ġvar Ġmes age Count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Position Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( init Position Ġ> Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Position -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmes age Count ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġprev Mes ssage Pos otion Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġfor Ġ( message Position Ġin Ġ_ positions Source . read ( source , Ġinit Position , Ġmes age Count )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Position Ġ&& Ġinit Position Ġ!= Ġfrom Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Mes ssage Pos otion Ġ= Ġmessage Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Position Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Position Ġ> Ġprev Mes ssage Pos otion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( Index ( prev Mes ssage Pos otion , Ġmessage Position Ġ- Ġprev Mes ssage Pos otion )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Mes ssage Pos otion Ġ= Ġmessage Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn (" Invalid Ġposition Ġ$ message Position , Ġthe Ġprevious Ġposition Ġwas Ġ$ prev Mes ssage Pos otion .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getLogger ( Message Indices Source :: class . java ) ĊĠĠĠ Ġ} Ċ }