package Ġxyz . sr cl ab . common . utils Ċ Ċ import Ġxyz . sr cl ab . common . lang . Defaults Ċ import Ġxyz . sr cl ab . common . lang . IN AP PL IC ABLE _ JVM _ NAME Ċ import Ġxyz . sr cl ab . common . lang . check Argument Ċ import Ġxyz . sr cl ab . common . lang . is Numeric Ċ import Ġkotlin . text . toInt Ġas Ġto Int Kt Ċ Ċ /** Ċ Ġ* ĠProject Ġabout Ġinfo . Ċ Ġ* Ċ Ġ* Ġ@ see ĠAuthor Ċ Ġ* Ġ@ see ĠSem Ver Ċ Ġ*/ Ċ interface ĠAbout Ġ{ ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" name ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġversion : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" version ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġauthors : ĠList < Author > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" author ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġmail : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" mail ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġurl : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" url ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġlic ences : ĠList < String > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" licence ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġpower edBy s : ĠList < About > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" powered By ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġcopyright : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" copyright ") Ġget ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor : ĠList < Author > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmail : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlicence : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpower edBy : ĠList < About > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopyright : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ): ĠAbout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAbout Impl ( name , Ġversion , Ġauthor , Ġmail , Ġurl , Ġlicence , Ġpower edBy , Ġcopyright ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠAbout Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġversion : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġauthors : ĠList < Author >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmail : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġurl : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlic ences : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġpower edBy s : ĠList < About >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcopyright : ĠString ?, ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠAbout Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠAbout ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġother . name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Ġ!= Ġother . version ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authors Ġ!= Ġother . authors ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mail Ġ!= Ġother . mail ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġother . url ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lic ences Ġ!= Ġother . lic ences ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( powered By s Ġ!= Ġother . powered By s ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copyright Ġ!= Ġother . copyright ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġname . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġversion . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġauthors . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġmail . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġurl . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġlic ences . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpower edBy s . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcopyright . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! version . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Version : Ġ$ version ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠString . append Info () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( authors . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Authors : Ġ$ authors ". append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! mail . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mail : Ġ$ mail ". append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Url : Ġ$ url ". append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lic ences . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Lic ences : Ġ$ lic ences ". toString (). append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( powered By s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Power ed ĠBy : Ġ$ powered By s ". toString (). append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! copyright . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Copyright : Ġ$ copyright ". append Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( count Ġ== Ġ 0 ) Ġname Ġelse Ġ"$ name [$ builder ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAuthor Ġinfo . Ċ Ġ* Ċ Ġ* Ġ@ see ĠAbout Ċ Ġ*/ Ċ interface ĠAuthor Ġ{ ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" name ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġmail : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" mail ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġurl : ĠString ? ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" url ") Ġget ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġof ( name : ĠString , Ġmail : ĠString ? Ġ= Ġnull , Ġurl : ĠString ? Ġ= Ġnull ): ĠAuthor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAuthor Impl ( name , Ġmail , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġclass ĠAuthor Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġmail : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġurl : ĠString ?, ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠAuthor Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠAuthor ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġother . name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mail Ġ!= Ġother . mail ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url Ġ!= Ġother . url ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġname . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( mail ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( url ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mail Ġ=== Ġnull Ġ&& Ġurl Ġ=== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mail Ġ=== Ġnull Ġ&& Ġurl Ġ!== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ name [$ url ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mail Ġ!== Ġnull Ġ&& Ġurl Ġ=== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ name [$ mail ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ name [$ mail , Ġ$ url ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSemantic Ġversion Ġinfo , ĠSee : Ġ[ Sem Ver ]( https :// semver . org /). Ċ Ġ* ĠThe Ġdifference Ġis Ġthis Ġinterface Ġsupports Ġmore Ġthan Ġ 3 Ġversion Ġnumbers . Ċ Ġ* Ċ Ġ* Ġ@ see ĠAbout Ċ Ġ*/ Ċ interface ĠSem Ver Ġ: ĠComparable < Sem Ver > Ġ{ ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġnormal Numbers : ĠList < Int > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" numbers ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġmajor : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" major ") Ġget () Ġ= Ġnormal Numbers [ 0 ] ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġminor : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" minor ") Ġget () Ġ= Ġif Ġ( normal Numbers . size Ġ> Ġ 1 ) Ġnormal Numbers [ 1 ] Ġelse Ġ 0 ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġpatch : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" patch ") Ġget () Ġ= Ġif Ġ( normal Numbers . size Ġ> Ġ 2 ) Ġnormal Numbers [ 2 ] Ġelse Ġ 0 ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġnormal String : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" normal String ") Ġget () Ġ= Ġnormal Numbers . join Dot ToString () ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġpre Release : ĠList < Pre Release Identifier > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" pre Release ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġpre Release String : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" pre Release String ") Ġget () Ġ= Ġpre Release . join Dot ToString () ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġval Ġbuild Metadata : ĠList < String > ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" build Metadata ") Ġget ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġbuild Metadata String : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" build Metadata String ") Ġget () Ġ= Ġbuild Metadata . join Dot ToString () ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġis Normal : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" is Normal ") Ġget () Ġ= Ġpre Release . isEmpty () ĊĊĠĠĠ Ġ@ Suppress ( IN AP PL IC ABLE _ JVM _ NAME ) ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġis Pre Release : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" is Pre Release ") Ġget () Ġ= Ġpre Release . isNotEmpty () ĊĊĠĠĠ Ġinterface ĠPre Release Identifier Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġis Numeric : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġto Number (): ĠInt ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġof ( value : ĠAny ): ĠPre Release Identifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠNumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġof ( value . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġof ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġof ( value : ĠInt ): ĠPre Release Identifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNumeric Identifier ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġof ( value : ĠCharSequence ): ĠPre Release Identifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . is Numeric ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġof ( value . toString (). toInt Kt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . matches ( IDENTIFIER _ PATTERN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString Identifier ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sem Ver Ġpre - release Ġidentifier Ġshould Ġbe Ġin Ġ${ IDENTIFIER _ PATTERN . pattern }: Ġ$ value " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġclass ĠNumeric Identifier ( private Ġval Ġvalue : ĠInt ) Ġ: ĠPre Release Identifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġis Numeric : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Number (): ĠInt Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠPre Release Identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! other . is Numeric ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Number () Ġ!= Ġother . to Number ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġclass ĠString Identifier ( private Ġval Ġvalue : ĠCharSequence ) Ġ: ĠPre Release Identifier Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġis Numeric : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Number (): ĠInt Ġ= Ġthrow ĠIllegalStateException (" Not Ġa Ġnumeric Ġpre - release Ġidentifier .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠPre Release Identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other . is Numeric ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toString () Ġ!= Ġother . toString ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSem Ver Impl ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġnormal Numbers : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġpre Release : ĠList < Pre Release Identifier >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġbuild Metadata : ĠList < String >, ĊĠĠĠ Ġ) Ġ: ĠSem Ver Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠSem Ver ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġnormal Numbers . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( normal Numbers [ i ] Ġ> Ġother . normal Numbers [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( normal Numbers [ i ] Ġ< Ġother . normal Numbers [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre Release . isEmpty () Ġ&& Ġother . pre Release . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre Release . isEmpty () Ġ&& Ġother . pre Release . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre Release . isNotEmpty () Ġ&& Ġother . pre Release . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre It Ġ= Ġpre Release . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Pre It Ġ= Ġother . pre Release . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( pre It . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! other Pre It . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre V Ġ= Ġpre It . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Pre V Ġ= Ġother Pre It . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Numeric Ġidentifiers Ġalways Ġhave Ġlower Ġprecedence Ġthan Ġnon - numeric Ġidentifiers . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre V . is Numeric Ġ&& Ġ! other Pre V . is Numeric ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! pre V . is Numeric Ġ&& Ġother Pre V . is Numeric ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre V . is Numeric Ġ&& Ġother Pre V . is Numeric ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre V . to Number () Ġ> Ġother Pre V . to Number ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre V . to Number () Ġ< Ġother Pre V . to Number ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Compare Ġ= Ġpre V . toString (). compareTo ( other Pre V . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string Compare Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstring Compare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Pre It . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠSem Ver ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( normal Numbers Ġ!= Ġother . normal Numbers ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre Release Ġ!= Ġother . pre Release ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Metadata Ġ!= Ġother . build Metadata ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġnormal Numbers . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpre Release . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġbuild Metadata . hashCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠStringBuilder ( normal String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pre Release . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append ("- $ pre Release String ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Metadata . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append (" +$ build Metadata String ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuffer . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠIDENT IFIER _ PATTERN Ġ= Ġ"[ 0 - 9 A - Za - z - ]+ ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Numbers : ĠList < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Release : ĠList < Any > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Metadata : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġ): ĠSem Ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( normal Numbers , Ġpre Release . to Pre Release (), Ġbuild Metadata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmajor : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminor : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Release : ĠList < Any > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Metadata : ĠList < String > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ): ĠSem Ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( listOf ( major , Ġminor , Ġpatch ), Ġpre Release . to Pre Release (), Ġbuild Metadata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Sem Ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Numbers : ĠList < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Release : ĠList < Pre Release Identifier >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Metadata : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġ): ĠSem Ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSem Ver Impl ( normal Numbers , Ġpre Release , Ġbuild Metadata . to Build Metadata ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" parse ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠCharSequence . parse Sem Ver (): ĠSem Ver Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse Normal Numbers ( sub Spec : ĠCharSequence ): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġsub Spec . split (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Argument ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . isNotEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sem Ver Ġneed Ġat Ġleast Ġdot Ġseparated Ġparts : Ġx [ . y [ . z [ ... ]] ]. " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toInt Kt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Wrong Ġnormal Ġnumber : Ġ$ it ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse Pre Version ( sub Spec : ĠCharSequence ): ĠList < Pre Release Identifier > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġsub Spec . split (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist . to Pre Release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse Build Metadata ( sub Spec : ĠCharSequence ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Spec . split (". "). to Build Metadata () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhy phen Index Ġ= ĠDefaults . HY P HEN _ MATCH ER . index In ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplus Sign Index Ġ= ĠDefaults . PLUS _ SIGN _ MATCH ER . index In ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hy phen Index Ġ< Ġ 0 Ġ&& Ġplus Sign Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( parse Normal Numbers ( this ), Ġempty List (), Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hy phen Index Ġ> Ġ 0 Ġ&& Ġplus Sign Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Normal Numbers ( this . sub Sequence ( 0 , Ġhy phen Index )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Pre Version ( this . sub Sequence ( hy phen Index Ġ+ Ġ 1 , Ġthis . length )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hy phen Index Ġ< Ġ 0 Ġ&& Ġplus Sign Index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Normal Numbers ( this . sub Sequence ( 0 , Ġplus Sign Index )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Build Metadata ( this . sub Sequence ( plus Sign Index Ġ+ Ġ 1 , Ġthis . length )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plus Sign Index Ġ< Ġhy phen Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Normal Numbers ( this . sub Sequence ( 0 , Ġplus Sign Index )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Build Metadata ( this . sub Sequence ( plus Sign Index Ġ+ Ġ 1 , Ġthis . length )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Sem Ver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Normal Numbers ( this . sub Sequence ( 0 , Ġhy phen Index )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Pre Version ( this . sub Sequence ( hy phen Index Ġ+ Ġ 1 , Ġplus Sign Index )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Build Metadata ( this . sub Sequence ( plus Sign Index Ġ+ Ġ 1 , Ġthis . length )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠList < Any >. join Dot ToString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . join ToString (".") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠList < Any >. to Pre Release (): ĠList < Pre Release Identifier > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPre Release Identifier . of ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠList < Any >. to Build Metadata (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! string . matches ( IDENTIFIER _ PATTERN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sem Ver Ġbuild Ġmetadata Ġidentifier Ġshould Ġbe Ġin Ġ${ IDENTIFIER _ PATTERN . pattern }: Ġ$ string " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }