package Ġno . nav . su . se . bak over . test Ċ Ċ import Ġarrow . core . Non Empty List Ċ import Ġarrow . core . get Or Handle Ċ import Ġarrow . core . non Empty ListOf Ċ import Ġno . nav . su . se . bak over . common . peri ode . Per i ode Ċ import Ġno . nav . su . se . bak over . domain . ber eg ning . B ere g ning Ċ import Ġno . nav . su . se . bak over . domain . ber eg ning . B ere g nings gr un nl ag Ċ import Ġno . nav . su . se . bak over . domain . ber eg ning . fr ad rag . F rad rag stype Ċ import Ġno . nav . su . se . bak over . domain . ber eg ning . ut led B ere g nings str ateg i Ċ import Ġno . nav . su . se . bak over . domain . gr un nl ag . G run nl ag Ċ Ċ /** Ċ Ġ* Ġfor vent et Ġinn te kt Ġ 1 Ġ 0 0 0 Ġ 0 0 0 Ċ Ġ*/ Ċ fun Ġbere g ning Av sl ag ( ĊĠĠĠ Ġper i ode : ĠPer i ode Ġ= Ġper i ode 2 0 2 1 , Ċ ): ĠBere g ning Ġ{ ĊĠĠĠ Ġreturn Ġbere g ning ( ĊĠĠĠĠĠĠĠ Ġper i ode Ġ= Ġper i ode , ĊĠĠĠĠĠĠĠ Ġu f Ã¸ re gr un nl ag Ġ= Ġnon Empty ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġu f Ã¸ re gr un nl ag For vent et In n te kt ( peri ode Ġ= Ġper i ode , Ġfor vent et In n te kt Ġ= Ġ 1 _ 0 0 0 _ 0 0 0 ), ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDefault ver dier : Ċ Ġ* Ġper i ode : Ġ 2 0 2 1 Ċ Ġ* Ġb osit u as jon : Ġb osit u as jon gr un nl ag En sl ig Ġ( h Ã¸ y Ġs ats ) Ċ Ġ* Ġu f Ã¸ re gr un nl ag : ĠFor vent et Ġinn te kt Ġ 0 Ċ Ġ* Ġf rad rag : Ġing en Ċ Ġ*/ Ċ fun Ġbere g ning ( ĊĠĠĠ Ġper i ode : ĠPer i ode Ġ= Ġper i ode 2 0 2 1 , ĊĠĠĠ Ġb osit u as jon : ĠG run nl ag . B osit u as jon . Full st end ig Ġ= Ġb osit u as jon gr un nl ag En sl ig ( peri ode ), ĊĠĠĠ Ġu f Ã¸ re gr un nl ag : ĠNon Empty List < G run nl ag . Uf Ã¸ re gr un nl ag > Ġ= Ġnon Empty ListOf ( uf Ã¸ re gr un nl ag For vent et In n te kt 0 ( peri ode Ġ= Ġper i ode )), ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠB ru k Ġu f Ã¸ re gr un nl ag Ġfor Ġfor vent et Ġinn te kt ĊĠĠĠĠ Ġ* ĠSel v om Ġf rad rag F ra S aks be handler Ġk re ver ĠList < F rad rag > Ġfor ĠÃ ¸ y eb lik ket Ġv il Ġden Ġb li Ġref ak tor ert Ġtil ĠList < F rad rag G run nl ag > Ġi Ġfre mt iden . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġf rad r ags gr un nl ag : ĠList < G run nl ag . F rad r ags gr un nl ag > Ġ= Ġempty List (), Ċ ): ĠBere g ning Ġ{ ĊĠĠĠ Ġif Ġ( fr adr ags gr un nl ag . any Ġ{ Ġit . fr ad rag . fr ad rag stype Ġ== ĠF rad rag stype . For vent et In n te kt Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Fore vent et Ġinn te kt Ġet ter Ġu f Ã¸ re Ġpop uler es Ġvia Ġu f Ã¸ re gr un nl ag ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠBere g nings gr un nl ag . try Create ( ĊĠĠĠĠĠĠĠ Ġbere g ning sp eri ode Ġ= Ġper i ode , ĊĠĠĠĠĠĠĠ Ġu f Ã¸ re gr un nl ag Ġ= Ġu f Ã¸ re gr un nl ag , ĊĠĠĠĠĠĠĠ Ġf rad rag F ra S aks be handler Ġ= Ġf rad r ags gr un nl ag , ĊĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġb osit u as jon . ut led B ere g nings str ateg i (). bere gn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Or Handle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" K un ne Ġik ke Ġl age Ġtest ber eg ning . ĠUnder lig gende Ġg run n : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ