package Ġio . kot est . property . ar bitrary Ċ Ċ import Ġio . kot est . properties . next Print able String Ċ import Ġio . kot est . property . Shrink er Ċ import Ġio . kot est . property . az string Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġ[ Ar b ] Ġwhere Ġeach Ġrandom Ġvalue Ġis Ġa ĠString Ġof Ġlength Ġbetween Ġmin Size Ġand ĠmaxSize . Ċ Ġ* Ċ Ġ* ĠThe Ġedge Ġcases Ġvalues Ġare : Ċ Ġ* Ċ Ġ* ĠThe Ġempty Ġstring Ċ Ġ* ĠA Ġline Ġseparator Ċ Ġ* ĠMulti - line Ġstring Ċ Ġ* Ġa ĠUTF 8 Ġstring . Ċ Ġ*/ Ċ fun ĠA rb . Companion . string ( ĊĠĠ Ġmin Size : ĠInt Ġ= Ġ 0 , ĊĠĠ ĠmaxSize : ĠInt Ġ= Ġ 1 0 0 Ċ ): ĠA rb < String > Ġ{ ĊĊĠĠ Ġval Ġrange Ġ= Ġmin Size .. maxSize ĊĠĠ Ġval Ġedge cases Ġ= ĠlistOf ( ĊĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠ Ġ"\ n ", ĊĠĠĠĠĠ Ġ"\ n abc \ n 1 2 3 \ n ", ĊĠĠĠĠĠ Ġ"\ u 0 0 6 c \ u 0 0 6 9 b /\ u 0 0 6 2 \ u 0 0 2 f \ u 0 0 6 d \ u 0 0 6 9 nd / m \ u 0 0 6 1 x \ u 0 0 2 e \ u 0 0 7 0 h \ u 0 0 7 0 " ĊĠĠ Ġ). filter Ġ{ Ġit . length Ġin Ġrange Ġ} ĊĠĠ Ġreturn Ġar b ( String Shrink er , Ġedge cases ) Ġ{ ĊĠĠĠĠĠ Ġit . random . next Print able String ( range . first Ġ+ Ġit . random . nextInt ( range . last Ġ- Ġrange . first Ġ+ Ġ 1 )) ĊĠĠ Ġ} Ċ } Ċ Ċ fun ĠA rb . Companion . string ( range : ĠInt Range ): ĠA rb < String > Ġ= ĠA rb . string ( range . first , Ġrange . last ) Ċ Ċ fun ĠA rb . Companion . email ( username Size : ĠInt Range Ġ= Ġ 3 .. 1 0 , Ġdomain Size : ĠInt Range Ġ= Ġ 3 .. 1 0 ) Ġ= Ġar b Ġ{ ĊĠĠ Ġval Ġusername Ġ= Ġit . random . az string ( username Size ) ĊĠĠ Ġval Ġdomain Ġ= Ġit . random . az string ( domain Size ) ĊĠĠ Ġval Ġt ld Ġ= ĠlistOf (" com ", Ġ" net ", Ġ" gov ", Ġ" co . uk ", Ġ" jp ", Ġ" nl ", Ġ" ru ", Ġ" de ", Ġ" com . br ", Ġ" it ", Ġ" pl ", Ġ" io ") ĊĠĠ Ġ"$ username @ $ domain .$ t ld " Ċ } Ċ Ċ object ĠString Shrink er Ġ: ĠSh rink er < String > Ġ{ ĊĊĠĠ Ġoverride Ġfun Ġshrink ( value : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġ"" Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġ" a " Ġ-> ĠlistOf ("") ĊĠĠĠĠĠĠĠĠ Ġvalue . length Ġ== Ġ 1 Ġ-> ĠlistOf ("", Ġ" a ") ĊĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Half Ġ= Ġvalue . take ( value . length Ġ/ Ġ 2 Ġ+ Ġvalue . length Ġ% Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Half Ġ= Ġvalue . take Last ( value . length Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Half As Ġ= Ġfirst Half . pad End ( value . length , Ġ' a ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Half As Ġ= Ġsecond Half . pad Start ( value . length , Ġ' a ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrop First Char Ġ= Ġvalue . drop ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrop Last Char Ġ= Ġvalue . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Half , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Half As , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Half , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Half As , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrop First Char , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Last Char ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ } Ċ