package Ġcom . so y wiz . k lock . internal Ċ Ċ import Ġkotlin . math .* Ċ Ċ internal Ġconst Ġval ĠM ILL IS _ PER _ SECOND Ġ= Ġ 1 0 0 0 Ċ internal Ġconst Ġval ĠM ILL IS _ PER _ MINUTE Ġ= ĠM ILL IS _ PER _ SECOND Ġ* Ġ 6 0 Ġ// Ġ 6 0 _ 0 0 0 Ċ internal Ġconst Ġval ĠM ILL IS _ PER _ HOUR Ġ= ĠM ILL IS _ PER _ MINUTE Ġ* Ġ 6 0 Ġ// Ġ 3 6 0 0 _ 0 0 0 Ċ internal Ġconst Ġval ĠM ILL IS _ PER _ DAY Ġ= ĠM ILL IS _ PER _ HOUR Ġ* Ġ 2 4 Ġ// Ġ 8 6 4 0 0 _ 0 0 0 Ċ internal Ġconst Ġval ĠM ILL IS _ PER _ WEEK Ġ= ĠM ILL IS _ PER _ DAY Ġ* Ġ 7 Ġ// Ġ 6 0 4 8 0 0 _ 0 0 0 Ċ Ċ internal Ġfun ĠInt . padded ( count : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġ// Ġ@ TODO : ĠHandle Ġedge Ġcase ĠInt . MIN _ VALUE Ġthat Ġcould Ġnot Ġbe Ġrepresented Ġas Ġabs ĊĠĠĠ Ġval Ġres Ġ= Ġthis . absolute Value . toString (). pad Start ( count , Ġ' 0 ') ĊĠĠĠ Ġreturn Ġif Ġ( this Ġ< Ġ 0 ) Ġreturn Ġ"- $ res " Ġelse Ġres Ċ } Ċ internal Ġfun ĠDouble . padded ( int Count : ĠInt , Ġdec Count : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġint Part Ġ= Ġfloor ( this ). toInt () ĊĠĠĠ Ġval Ġdec Part Ġ= Ġround (( this Ġ- Ġint Part ) Ġ* Ġ 1 0 . 0 . pow ( dec Count )). toInt () ĊĠĠĠ Ġreturn Ġ"${ int Part . padded ( int Count ). substr (- int Count , Ġint Count )}. ${ dec Part . toString (). pad End ( dec Count , Ġ' 0 '). substr ( 0 , Ġdec Count )}" Ċ } Ċ Ċ internal Ġfun ĠString . substr ( start : ĠInt , Ġlength : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġlow Ġ= Ġ( if Ġ( start Ġ>= Ġ 0 ) Ġstart Ġelse Ġthis . length Ġ+ Ġstart ). clamp ( 0 , Ġthis . length ) ĊĠĠĠ Ġval Ġhigh Ġ= Ġ( if Ġ( length Ġ>= Ġ 0 ) Ġlow Ġ+ Ġlength Ġelse Ġthis . length Ġ+ Ġlength ). clamp ( 0 , Ġthis . length ) ĊĠĠĠ Ġreturn Ġif Ġ( high Ġ< Ġlow ) Ġ"" Ġelse Ġthis . substring ( low , Ġhigh ) Ċ } Ċ Ċ internal Ġfun ĠInt . clamp ( min : ĠInt , Ġmax : ĠInt ): ĠInt Ġ= Ġif Ġ( this Ġ< Ġmin ) Ġmin Ġelse Ġif Ġ( this Ġ> Ġmax ) Ġmax Ġelse Ġthis Ċ internal Ġfun ĠInt . cycle ( min : ĠInt , Ġmax : ĠInt ): ĠInt Ġ= Ġ(( this Ġ- Ġmin ) Ġum od Ġ( max Ġ- Ġmin Ġ+ Ġ 1 )) Ġ+ Ġmin Ċ internal Ġfun ĠInt . cycle Steps ( min : ĠInt , Ġmax : ĠInt ): ĠInt Ġ= Ġ( this Ġ- Ġmin ) Ġ/ Ġ( max Ġ- Ġmin Ġ+ Ġ 1 ) Ċ Ċ internal Ġfun ĠString . split Keep ( regex : ĠRegex ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġstr Ġ= Ġthis ĊĠĠĠ Ġval Ġout Ġ= Ġarray ListOf < String >() ĊĠĠĠ Ġvar Ġlast Pos Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( part Ġin Ġregex . findAll ( this )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpr ange Ġ= Ġpart . range ĊĠĠĠĠĠĠĠ Ġif Ġ( last Pos Ġ!= Ġpr ange . start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Ġ+= Ġstr . substring ( last Pos , Ġpr ange . start ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġout Ġ+= Ġstr . substring ( pr ange ) ĊĠĠĠĠĠĠĠ Ġlast Pos Ġ= Ġpr ange . end Inclusive Ġ+ Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( last Pos Ġ!= Ġstr . length ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout Ġ+= Ġstr . substring ( last Pos ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġout Ċ } Ċ Ċ internal Ġin fix Ġfun ĠInt . um od ( that : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġremainder Ġ= Ġthis Ġ% Ġthat ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġremainder Ġ< Ġ 0 Ġ-> Ġremainder Ġ+ Ġthat ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġremainder ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġin fix Ġfun ĠDouble . um od ( that : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġremainder Ġ= Ġthis Ġ% Ġthat ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġremainder Ġ< Ġ 0 Ġ-> Ġremainder Ġ+ Ġthat ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġremainder ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠDouble . toInt 2 (): ĠInt Ġ= Ġif Ġ( this Ġ< Ġ 0 . 0 ) Ġfloor ( this ). toInt () Ġelse Ġthis . toInt () Ċ internal Ġfun ĠDouble . toInt Mod ( mod : ĠInt ): ĠInt Ġ= Ġ( this Ġum od Ġmod . toDouble ()). toInt 2 () Ċ Ċ internal Ġin fix Ġfun ĠInt . div 2 ( other : ĠInt ): ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġthis Ġ< Ġ 0 Ġ|| Ġthis Ġ% Ġother Ġ== Ġ 0 Ġ-> Ġthis Ġ/ Ġother ĊĠĠĠ Ġelse Ġ-> Ġ( this Ġ/ Ġother ) Ġ- Ġ 1 Ċ } Ċ Ċ internal Ġclass ĠMod uler ( val Ġvalue : ĠDouble ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġa value Ġ= Ġabs ( value ) ĊĠĠĠ Ġprivate Ġval Ġsign Ġ= Ġsign ( value ) ĊĊĠĠĠ Ġfun Ġdouble ( count : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġ( av alue Ġ/ Ġcount ) ĊĠĠĠĠĠĠĠ Ġa value Ġ% = Ġcount ĊĠĠĠĠĠĠĠ Ġreturn Ġfloor ( ret ) Ġ* Ġsign ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġdouble ( count : ĠInt ): ĠDouble Ġ= Ġdouble ( count . toDouble ()) ĊĠĠĠ Ġfun Ġdouble ( count : ĠFloat ): ĠDouble Ġ= Ġdouble ( count . toDouble ()) ĊĊĠĠĠ Ġfun Ġint ( count : ĠDouble ): ĠInt Ġ= Ġdouble ( count ). toInt () ĊĠĠĠ Ġfun Ġint ( count : ĠInt ): ĠInt Ġ= Ġint ( count . toDouble ()) ĊĠĠĠ Ġfun Ġint ( count : ĠFloat ): ĠInt Ġ= Ġint ( count . toDouble ()) Ċ } Ċ Ċ internal Ġin fix Ġfun ĠDouble . int Div ( other : ĠDouble ) Ġ= Ġfloor ( this Ġ/ Ġother ) Ċ