package Ġdev . in mo . kr ontab . internal Ċ Ċ import Ġcom . so y wiz . k lock . DateTime Ċ import Ġcom . so y wiz . k lock . Timezone Offset Ċ import Ġdev . in mo . kr ontab . K ron Scheduler Ċ Ċ /** Ċ Ġ* Ġ@ param Ġdays OfWeek Ġ 0 - 6 Ċ Ġ* Ġ@ param Ġyears Ġany Ġint Ċ Ġ* Ġ@ param Ġmonths Ġ 0 - 1 1 Ċ Ġ* Ġ@ param Ġdays OfMonth Ġ 0 - 3 0 Ċ Ġ* Ġ@ param Ġhours Ġ 0 - 2 3 Ċ Ġ* Ġ@ param Ġminutes Ġ 0 - 5 9 Ċ Ġ* Ġ@ param Ġseconds Ġ 0 - 5 9 Ċ Ġ*/ Ċ internal Ġdata Ġclass ĠC ron DateTime ( ĊĠĠĠ Ġval Ġdays OfWeek : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġyears : ĠArray < Int >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġmonths : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġdays OfMonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġhours : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġminutes : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġseconds : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġval Ġmilliseconds : ĠArray < Short >? Ġ= Ġmilliseconds Array Default Ċ ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( days OfWeek Ġ? . all Ġ{ Ġit Ġin Ġday OfWeek Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( years ?. all Ġ{ Ġit Ġin Ġyear Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( months ?. all Ġ{ Ġit Ġin Ġmonth Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( days OfMonth Ġ? . all Ġ{ Ġit Ġin Ġday OfMonth Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( hours ?. all Ġ{ Ġit Ġin Ġhours Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( minutes ?. all Ġ{ Ġit Ġin Ġminutes Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( seconds ?. all Ġ{ Ġit Ġin Ġseconds Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcheck ( milliseconds ?. all Ġ{ Ġit Ġin Ġmilliseconds Range Ġ} Ġ?: Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġcalcul ators Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġyears Ġ? . let Ġ{ ĠN ear DateTime Calculator Years ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġdays OfWeek Ġ? . let Ġ{ ĠN ear DateTime Calculator Week Days ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġmilliseconds Ġ? . let Ġ{ ĠN ear DateTime Calculator Millis ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġseconds Ġ? . let Ġ{ ĠN ear DateTime Calculator Seconds ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġminutes Ġ? . let Ġ{ ĠN ear DateTime Calculator Minutes ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġhours Ġ? . let Ġ{ ĠN ear DateTime Calculator Hours ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġdays OfMonth Ġ? . let Ġ{ ĠN ear DateTime Calculator Days ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġmonths Ġ? . let Ġ{ ĠN ear DateTime Calculator Months ( it ) Ġ}, ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġfun Ġto Near DateTime ( rel atively To : ĠDateTime Ġ= ĠDateTime . now ()): ĠDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġrelatively To ĊĠĠĠĠĠĠĠ Ġwhile Loop @ while Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( calculator Ġin Ġcalcul ators ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( calculated , Ġrequire Re calculation ) Ġ= Ġ( calculator Ġ?: Ġcontinue ). calculate Near Time ( current ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcalculated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( require Re calculation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ while Loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġcreate Cron DateTime ( ĊĠĠĠ Ġseconds : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġminutes : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġhours : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġday OfMonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġmonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġyears : ĠArray < Int >? Ġ= Ġnull , ĊĠĠĠ Ġweek Days : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġmilliseconds : ĠArray < Short >? Ġ= Ġmilliseconds Array Default Ċ ): ĠC ron DateTime Ġ{ ĊĠĠĠ Ġreturn ĠC ron DateTime ( week Days , Ġyears , Ġmonth , Ġday OfMonth , Ġhours , Ġminutes , Ġseconds , Ġmilliseconds ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġ[ K ron Scheduler ] Ġ( in Ġfact Ġ[ Cron DateTime Scheduler ]) Ġbased Ġon Ġincoming Ġdata Ċ Ġ*/ Ċ internal Ġfun Ġcreate K ron Scheduler ( ĊĠĠĠ Ġseconds : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġminutes : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġhours : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġday OfMonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġmonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġyears : ĠArray < Int >? Ġ= Ġnull , ĊĠĠĠ Ġweek Days : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġmilliseconds : ĠArray < Short >? Ġ= Ġmilliseconds Array Default Ċ ): ĠK ron Scheduler Ġ= ĠC ron DateTime Scheduler ( ĊĠĠĠ Ġcreate Cron DateTime ( ĊĠĠĠĠĠĠĠ Ġseconds , ĊĠĠĠĠĠĠĠ Ġminutes , ĊĠĠĠĠĠĠĠ Ġhours , ĊĠĠĠĠĠĠĠ Ġday OfMonth , ĊĠĠĠĠĠĠĠ Ġmonth , ĊĠĠĠĠĠĠĠ Ġyears , ĊĠĠĠĠĠĠĠ Ġweek Days , ĊĠĠĠĠĠĠĠ Ġmilliseconds ĊĠĠĠ Ġ) Ċ ) Ċ /** Ċ Ġ* Ġ@ return Ġ[ K ron Scheduler ] Ġ( in Ġfact Ġ[ Cron DateTime Scheduler ]) Ġbased Ġon Ġincoming Ġdata Ċ Ġ*/ Ċ internal Ġfun Ġcreate K ron Scheduler With Offset ( ĊĠĠĠ Ġseconds : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġminutes : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġhours : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġday OfMonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġmonth : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġyears : ĠArray < Int >? Ġ= Ġnull , ĊĠĠĠ Ġweek Days : ĠArray < Byte >? Ġ= Ġnull , ĊĠĠĠ Ġoffset : ĠTime zone Offset , ĊĠĠĠ Ġmilliseconds : ĠArray < Short >? Ġ= Ġmilliseconds Array Default Ċ ): ĠK ron Scheduler Ġ= ĠC ron DateTime Scheduler Tz ( ĊĠĠĠ Ġcreate Cron DateTime ( ĊĠĠĠĠĠĠĠ Ġseconds , ĊĠĠĠĠĠĠĠ Ġminutes , ĊĠĠĠĠĠĠĠ Ġhours , ĊĠĠĠĠĠĠĠ Ġday OfMonth , ĊĠĠĠĠĠĠĠ Ġmonth , ĊĠĠĠĠĠĠĠ Ġyears , ĊĠĠĠĠĠĠĠ Ġweek Days , ĊĠĠĠĠĠĠĠ Ġmilliseconds ĊĠĠĠ Ġ), ĊĠĠĠ Ġoffset Ċ ) Ċ Ċ internal Ġfun ĠList < Cron DateTime >. merge () Ġ= ĠC ron DateTime ( ĊĠĠĠ Ġflat Map Ġ{ Ġit . days OfWeek Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . years Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . months Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . days OfMonth Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . hours Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . minutes Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . seconds Ġ? . toList () Ġ?: Ġempty List () Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, ĊĠĠĠ Ġflat Map Ġ{ Ġit . milliseconds Ġ? . toList () Ġ?: ĠlistOf ( 0 ) Ġ}. distinct (). to Typed Array (). take If Ġ{ Ġit . isNotEmpty () Ġ}, Ċ ) Ċ