package Ġcom . segment . analytics . kotlin . core Ċ Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . descriptors . Primitive Kind Ċ import Ġkotlinx . serialization . descriptors . Primitive Serial Descriptor Ċ import Ġkotlinx . serialization . encoding . Decoder Ċ import Ġkotlinx . serialization . encoding . Encoder Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġso vr an . kotlin . Store Ċ import Ġjava . time . Instant Ċ import Ġjava . util . UUID Ċ Ċ type alias ĠAnalytics Context Ġ= ĠJsonObject Ċ type alias ĠIntegr ations Ġ= ĠJsonObject Ċ type alias ĠProperties Ġ= ĠJsonObject Ċ type alias ĠTraits Ġ= ĠJsonObject Ċ Ċ val Ġempty JsonObject Ġ= ĠJsonObject ( empty Map ()) Ċ Ċ class ĠDate Serializer Ġ: ĠK Serializer < Instant > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor Ġ= ĠPrimitive Serial Descriptor (" Instant ", ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠInstant Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInstant . parse ( decoder . decode String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠInstant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . encode String ( value . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ enum Ġclass ĠEventType Ġ{ ĊĠĠĠ Ġ@ Serial Name (" track ") ĊĠĠĠ ĠTrack , ĊĊĠĠĠ Ġ@ Serial Name (" screen ") ĊĠĠĠ ĠScreen , ĊĊĠĠĠ Ġ@ Serial Name (" alias ") ĊĠĠĠ ĠAlias , ĊĊĠĠĠ Ġ@ Serial Name (" identify ") ĊĠĠĠ ĠIdent ify , ĊĊĠĠĠ Ġ@ Serial Name (" group ") ĊĠĠĠ ĠGroup Ċ } Ċ Ċ /** Ċ Ġ* ĠPrincipal Ġtype Ġclass Ġfor Ġany Ġevent Ġtype Ġand Ġwill Ġbe Ġone Ġof Ċ Ġ* Ġ@ see ĠTrack Event Ċ Ġ* Ġ@ see ĠIdent ify Event Ċ Ġ* Ġ@ see ĠScreen Event Ċ Ġ* Ġ@ see ĠGroup Event Ċ Ġ* Ġ@ see ĠAlias Event Ċ Ġ*/ Ċ sealed Ġclass ĠBase Event Ġ{ ĊĠĠĠ Ġ// ĠThe Ġtype Ġof Ġevent ĊĠĠĠ Ġabstract Ġvar Ġtype : ĠEventType ĊĊĠĠĠ Ġ// Ġthe Ġanonymous Id Ġtied Ġto Ġthe Ġevent ĊĠĠĠ Ġabstract Ġvar Ġanonymous Id : ĠString ĊĊĠĠĠ Ġ// Ġthe ĠUUID Ġfor Ġthe Ġevent ĊĠĠĠ Ġabstract Ġvar ĠmessageId : ĠString ĊĊĠĠĠ Ġ// Ġtimestamp Ġof Ġwhen Ġthe Ġevent Ġwas Ġgenerated ĊĠĠĠ Ġabstract Ġvar Ġtimestamp : ĠString ĊĊĠĠĠ Ġ// Ġa ĠJsonObject Ġdescribing Ġadditional Ġvalues Ġrelated Ġto Ġthe Ġevent ĊĠĠĠ Ġabstract Ġvar Ġcontext : ĠAnalytics Context ĊĊĠĠĠ Ġ// Ġa ĠJsonObject Ġdescribing Ġthe Ġintegr ations Ġthat Ġthe Ġevent Ġwill Ġinteract Ġwith ĊĠĠĠ Ġabstract Ġvar Ġintegr ations : ĠIntegr ations ĊĊĠĠĠ Ġ// Ġthe ĠuserId Ġtied Ġto Ġthe Ġevent ĊĠĠĠ Ġabstract Ġvar ĠuserId : ĠString ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠALL _ INTEGR ATIONS _ KEY Ġ= Ġ" All " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġapply Base Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . timestamp Ġ= ĠInstant . now (). toString () ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġempty JsonObject ĊĠĠĠĠĠĠĠ Ġthis . message Id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġapply Base EventData ( store : ĠStore ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserInfo Ġ= Ġstore . currentState ( UserInfo :: class ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthis . anonymous Id Ġ= ĠuserInfo . anonymous Id ĊĠĠĠĠĠĠĠ Ġthis . integrations Ġ= Ġempty JsonObject ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . userId . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġattach Ġsystem ĠuserId Ġif Ġpresent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . userId Ġ= ĠuserInfo . userId Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġa Ġshallow Ġcopy Ġof Ġthis Ġevent Ġpayload ĊĠĠĠ Ġfun Ġ< T Ġ: ĠBase Event > Ġcopy (): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAlias Event Ġ-> ĠAlias Event ( userId Ġ= Ġthis . userId , Ġprevious Id Ġ= Ġthis . previous Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup Event Ġ-> ĠGroup Event ( groupId Ġ= Ġthis . groupId , Ġtraits Ġ= Ġthis . traits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIdent ify Event Ġ-> ĠIdent ify Event ( userId Ġ= Ġthis . userId , Ġtraits Ġ= Ġthis . traits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠScreen Event Ġ-> ĠScreen Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġthis . category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= Ġthis . properties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTrack Event Ġ-> ĠTrack Event ( event Ġ= Ġthis . event , Ġproperties Ġ= Ġthis . properties ) ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġoriginal . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanonymous Id Ġ= Ġoriginal . anonymous Id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= Ġoriginal . message Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġoriginal . timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġoriginal . context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintegr ations Ġ= Ġoriginal . integrations ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġoriginal . userId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġcopy Ġas ĠT Ġ// ĠThis Ġis Ġok Ġbecause Ġresult ant Ġtype Ġwill Ġbe Ġsame Ġas Ġinput Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠBase Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġother . type ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( anonymous Id Ġ!= Ġother . anonymous Id ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( message Id Ġ!= Ġother . message Id ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( timestamp Ġ!= Ġother . timestamp ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ!= Ġother . context ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( integrations Ġ!= Ġother . integrations ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( userId Ġ!= Ġother . userId ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtype . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġanonymous Id . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠmessageId . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtimestamp . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcontext . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġintegr ations . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠuserId . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ @ Serial Name (" track ") Ċ data Ġclass ĠTrack Event ( ĊĠĠĠ Ġvar Ġproperties : ĠProperties , ĊĠĠĠ Ġvar Ġevent : ĠString Ċ ) Ġ: ĠBase Event () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠEventType Ġ= ĠEventType . Track ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠmessageId : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanonymous Id : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġintegr ations : ĠIntegr ations ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontext : ĠAnalytics Context ĊĠĠĠ Ġoverride Ġvar ĠuserId : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtimestamp : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠTrack Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( properties Ġ!= Ġother . properties ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġother . event ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġproperties . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġevent . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Serializable Ċ @ Serial Name (" identify ") Ċ data Ġclass ĠIdent ify Event ( ĊĠĠĠ Ġoverride Ġvar ĠuserId : ĠString , ĊĠĠĠ Ġvar Ġtraits : ĠTraits Ċ ) Ġ: ĠBase Event () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠEventType Ġ= ĠEventType . Ident ify ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠmessageId : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanonymous Id : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġintegr ations : ĠIntegr ations ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontext : ĠAnalytics Context ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtimestamp : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠIdent ify Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( traits Ġ!= Ġother . traits ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtraits . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ @ Serial Name (" group ") Ċ data Ġclass ĠGroup Event ( ĊĠĠĠ Ġvar ĠgroupId : ĠString , ĊĠĠĠ Ġvar Ġtraits : ĠTraits Ċ ) Ġ: ĠBase Event () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠEventType Ġ= ĠEventType . Group ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠmessageId : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanonymous Id : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġintegr ations : ĠIntegr ations ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontext : ĠAnalytics Context ĊĠĠĠ Ġoverride Ġvar ĠuserId : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtimestamp : ĠString ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠGroup Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( groupId Ġ!= Ġother . groupId ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( traits Ġ!= Ġother . traits ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ ĠgroupId . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġtraits . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ @ Serial Name (" alias ") Ċ data Ġclass ĠAlias Event ( ĊĠĠĠ Ġoverride Ġvar ĠuserId : ĠString , ĊĠĠĠ Ġvar Ġprevious Id : ĠString Ċ ) Ġ: ĠBase Event () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠEventType Ġ= ĠEventType . Alias ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠmessageId : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanonymous Id : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġintegr ations : ĠIntegr ations ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontext : ĠAnalytics Context ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtimestamp : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠAlias Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( previous Id Ġ!= Ġother . previous Id ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġprevious Id . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ @ Serial Name (" screen ") Ċ data Ġclass ĠScreen Event ( ĊĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠ Ġvar Ġcategory : ĠString , ĊĠĠĠ Ġvar Ġproperties : ĠProperties Ċ ) Ġ: ĠBase Event () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġtype : ĠEventType Ġ= ĠEventType . Screen ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠmessageId : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanonymous Id : ĠString ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcontext : ĠAnalytics Context ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġintegr ations : ĠIntegr ations ĊĠĠĠ Ġoverride Ġvar ĠuserId : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtimestamp : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! super . equals ( other )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠScreen Event ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġother . name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( category Ġ!= Ġother . category ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( properties Ġ!= Ġother . properties ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġsuper . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġname . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcategory . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġproperties . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ