package Ġno . nav . hel se . person Ċ Ċ import Ġjava . util . UUID Ċ import Ġno . nav . hel se . hen del ser . In n tek ts meld ing Ċ import Ġno . nav . hel se . person . V ed tak sp eri ode . Companion . ER _ EL LER _ H AR _ V Ã Ĩ RT _ AV SL UT TET Ċ import Ġno . nav . hel se . person . V ed tak sp eri ode . Companion . ider Med U tb et aling Ċ import Ġno . nav . hel se . person . et ter level se . Sub sums jon Observer Ċ import Ġno . nav . hel se . sy k dom st ids lin je . Sy k dom st ids lin je Ċ import Ġno . nav . hel se . sy k dom st ids lin je . Sy k dom st ids lin je H en del se Ċ import Ġno . nav . hel se . ut bet aling st ids lin je . Ar be id sg iver peri ode Ċ Ċ internal Ġclass ĠFork ast et V ed tak sp eri ode ( ĊĠĠĠ Ġprivate Ġval Ġved tak sp eri ode : ĠV ed tak sp eri ode , ĊĠĠĠ Ġprivate Ġval Ġfork ast et Ã ħ rs ak : ĠFork ast et Ã ħ rs ak Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġfun Ġaccept ( visitor : ĠAr be id sg iver Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisitor . pre Visit Fork ast et Per i ode ( ved tak sp eri ode , Ġfork ast et Ã ħ rs ak ) ĊĠĠĠĠĠĠĠ Ġved tak sp eri ode . accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġvisitor . post Visit Fork ast et Per i ode ( ved tak sp eri ode , Ġfork ast et Ã ħ rs ak ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġh Ã¥ nd ter In n te ks meld ing Replay ( ĊĠĠĠĠĠĠĠ Ġperson : ĠPerson , ĊĠĠĠĠĠĠĠ Ġinn tek ts meld ing : ĠIn n tek ts meld ing , ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( inn tek ts meld ing . er Re levant ( ved tak sp eri ode . peri ode ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson . send Opp g ave Event ( inn tek ts meld ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠIterable < Fork ast et V ed tak sp eri ode >. period er () Ġ= Ġmap Ġ{ Ġit . ved tak sp eri ode Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun ĠIterable < Fork ast et V ed tak sp eri ode >. har Av sl ut te de Period er () Ġ= Ġthis . period er (). any ( ER _ EL LER _ H AR _ V Ã Ĩ RT _ AV SL UT TET ) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun ĠIterable < Fork ast et V ed tak sp eri ode >. h Ã¥ nd ter In n tek ts meld ing Replay ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson : ĠPerson , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinn tek ts meld ing : ĠIn n tek ts meld ing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak sp eri ode Id : ĠUUID ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġfin n Fork ast et V ed tak sp eri ode ( ved tak sp eri ode Id )?. h Ã¥ nd ter In n te ks meld ing Replay ( person , Ġinn tek ts meld ing ) Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠIterable < Fork ast et V ed tak sp eri ode >. fin n Fork ast et V ed tak sp eri ode ( ved tak sp eri ode Id : ĠUUID ): ĠFork ast et V ed tak sp eri ode ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst OrNull Ġ{ Ġit . ved tak sp eri ode . har Id ( ved tak sp eri ode Id ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġoverlap per Med Fork ast et ( fork aste de : ĠIterable < Fork ast et V ed tak sp eri ode >, Ġh en del se : ĠS yk dom st ids lin je H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ed tak sp eri ode . overlap per Med Fork ast et ( fork aste de . period er (), Ġh en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfor l enger Fork ast et ( fork aste de : ĠIterable < Fork ast et V ed tak sp eri ode >, Ġh en del se : ĠS yk dom st ids lin je H en del se ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ed tak sp eri ode . for l enger Fork ast et ( fork aste de . period er (), Ġh en del se ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġar be id sg iver peri ode For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson : ĠPerson , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy k dom sh istor ikk Id : ĠUUID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfork aste de : ĠList < Fork ast et V ed tak sp eri ode >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorgan is as j ons nummer : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsy k dom st ids lin je : ĠS yk dom st ids lin je , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub sums jon Observer : ĠSub sums jon Observer ĊĠĠĠĠĠĠĠ Ġ): ĠList < Ar be id sg iver peri ode > Ġ= ĠV ed tak sp eri ode . ar be id sg iver peri ode For ( person , Ġsy k dom sh istor ikk Id , Ġfork aste de . period er (), Ġorgan is as j ons nummer , Ġsy k dom st ids lin je , Ġsub sums jon Observer ) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġs je kk Om Overlap per Med Fork ast et ( fork aste de : ĠIterable < Fork ast et V ed tak sp eri ode >, Ġinn tek ts meld ing : ĠIn n tek ts meld ing ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV ed tak sp eri ode . s je kk Om Overlap per Med Fork ast et ( fork aste de . period er (), Ġinn tek ts meld ing ) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfin n Fork ast et Sy ke peri ode Ret t F Ã¸ r ( fork aste de : ĠIterable < Fork ast et V ed tak sp eri ode >, Ġother : ĠV ed tak sp eri ode ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfork aste de . period er (). first OrNull Ġ{ Ġved tak sp eri ode Ġ-> Ġved tak sp eri ode . er V ed tak sp eri ode Ret t F Ã¸ r ( other ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun ĠList < Fork ast et V ed tak sp eri ode >. ider Med U tb et aling ( ut bet aling Id : ĠUUID ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ{ Ġit . ved tak sp eri ode Ġ}. ider Med U tb et aling ( ut bet aling Id ) ĊĊĠĠĠ Ġ} Ċ } Ċ