package Ġno . nav . su . se . bak over . domain . op pd rag . sim uler ing Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . left Ċ import Ġarrow . core . right Ċ import Ġno . nav . su . se . bak over . common . object Mapper Ċ import Ġno . nav . su . se . bak over . common . peri ode . Per i ode Ċ import Ġno . nav . su . se . bak over . common . s ik ker Log g Ċ import Ġno . nav . su . se . bak over . domain . op pd rag . U tb et aling Ċ import Ġno . nav . su . se . bak over . domain . t ids lin je . T ids lin je For U tb et al inger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . time . Clock Ċ Ċ data Ġclass ĠKont roller Sim uler ing ( ĊĠĠĠ Ġprivate Ġval Ġsim ul ert U tb et aling : ĠU tb et aling . Sim ul ert U tb et aling , ĊĠĠĠ Ġprivate Ġval Ġe ks ist eren de U tb et al inger : ĠList < U tb et aling >, ĊĠĠĠ Ġprivate Ġval Ġclock : ĠClock , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĊĠĠĠ Ġval Ġresult at : ĠEither < Kont roll Av Sim uler ing Fe ilet , ĠU tb et aling . Sim ul ert U tb et aling > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtol ket Sim uler ing Ġ= ĠT ol ket Sim uler ing ( sim ul ert U tb et aling . sim uler ing ). also Ġ{ Ġtol ket Sim uler ing Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tol ket Sim uler ing . har Fe il ut bet al inger ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Sim uler ing Ġin ne holder Ġfe il ut bet al inger , Ġse Ġs ik ker log g Ġfor Ġsim uler ing ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ik ker Log g . error ( object Mapper . writeValue AsString ( sim ul ert U tb et aling . sim uler ing )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠKont roll Av Sim uler ing Fe ilet . Sim uler ing In ne holder Fe il ut bet aling . left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sim ul ert U tb et aling . sim uler ing . peri ode List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġut bet al inger Ink lu der t Ny Ġ= Ġe ks ist eren de U tb et al inger Ġ+ Ġsim ul ert U tb et aling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt ids lin je Ink lu der t Ny U tb et aling Ġ= ĠT ids lin je For U tb et al inger ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġper i ode Ġ= ĠPer i ode . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim ul ert U tb et aling . sim uler ing . peri ode List . min Of Ġ{ Ġit . f ra Og Med Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsim ul ert U tb et aling . sim uler ing . peri ode List . max Of Ġ{ Ġit . til Og Med Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet al ings lin jer Ġ= Ġut bet al inger Ink lu der t Ny . flatMap Ġ{ Ġit . ut bet al ings lin jer Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Ġ= Ġclock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtol ke de U tb et al inger Ġ= Ġtol ket Sim uler ing . sim uler te Period er ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . ut bet al inger Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . tol ket Det al j Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < T ol ket Det al j . Ord in Ã¦ r >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtol ke de U tb et al inger . forEach Ġ{ Ġtol ket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ids lin je Ink lu der t Ny U tb et aling . gj el den de For D ato ( tol ket . f ra Og Med ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġbel Ã¸ p F ra T ids lin je Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tol ket . bel Ã¸ p Ġ!= Ġbel Ã¸ p F ra T ids lin je . bel Ã¸ p ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Ik ke Ġs ams var Ġmel lom Ġbel Ã¸ p Ġi Ġsim uler ing Ġog Ġbel Ã¸ p ĠpÃ¥ Ġt ids lin je , Ġse Ġs ik ker log g Ġfor Ġdetal jer .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ik ker Log g . error ( object Mapper . writeValue AsString ( sim ul ert U tb et aling . sim uler ing )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ik ker Log g . error ( t ids lin je Ink lu der t Ny U tb et aling . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠKont roll Av Sim uler ing Fe ilet . Sim ul ert Bel Ã¸ p Er For sk j ellig F ra Bel Ã¸ pP Ã¥ T ids lin je . left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠT ol ket U tb et aling . In gen Ent y dig T olk ning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Fan get Ġexception Ġved Ġkont roll Ġav Ġsim uler ing , Ġse Ġs ik ker log g Ġfor Ġsim uler ing ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ik ker Log g . error ( object Mapper . writeValue AsString ( sim ul ert U tb et aling . sim uler ing )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠKont roll Av Sim uler ing Fe ilet . K un ne Ik ke T ol ke Sim uler ing . left () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠT ol ket U tb et aling . In di ker er Fe il ut bet aling ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Fan get Ġexception Ġved Ġkont roll Ġav Ġsim uler ing , Ġse Ġs ik ker log g Ġfor Ġsim uler ing ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ik ker Log g . error ( object Mapper . writeValue AsString ( sim ul ert U tb et aling . sim uler ing )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ lazy ĠKont roll Av Sim uler ing Fe ilet . K un ne Ik ke T ol ke Sim uler ing . left () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ lazy Ġsim ul ert U tb et aling . right () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠKont roll Av Sim uler ing Fe ilet Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠK un ne Ik ke T ol ke Sim uler ing Ġ: ĠKont roll Av Sim uler ing Fe ilet () ĊĠĠĠĠĠĠĠ Ġobject ĠSim uler ing In ne holder Fe il ut bet aling Ġ: ĠKont roll Av Sim uler ing Fe ilet () ĊĠĠĠĠĠĠĠ Ġobject ĠSim ul ert Bel Ã¸ p Er For sk j ellig F ra Bel Ã¸ pP Ã¥ T ids lin je Ġ: ĠKont roll Av Sim uler ing Fe ilet () ĊĠĠĠ Ġ} Ċ } Ċ