package Ġds x . bps . crypto . gr m . datamodel Ċ Ċ import Ġds x . bps . exception . crypto . gr m . G rm B oc Exception Ċ import Ġkotlin . math . ceil Ċ Ċ class ĠBag Of Cells Ġ{ ĊĠĠĠ Ġval Ġroot Cells : ĠArray < Cell > ĊĊĠĠĠ Ġconstructor ( roots : ĠArray < Cell >) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Cells Ġ= Ġroots ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġmagic Generic : ĠString Ġ= Ġ" B 5 EE 9 C 7 2 " ĊĊĠĠĠĠĠĠĠ Ġfun Ġdeserialize ( buffer : ĠByteArray ): ĠBag Of Cells Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmagic : ĠString Ġ= ĠbyteArray To Hex ( buffer . slice Array ( 0 Ġuntil Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( magic Ġ== Ġmagic Generic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbyte : ĠByte Ġ= Ġbuffer [ 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Idx : ĠBoolean Ġ= Ġbyte . toInt (). and ( 1 2 8 ) Ġ!= Ġ 0 Ġ// has _ idx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas CRC 3 2 C : ĠBoolean Ġ= Ġbyte . toInt (). and ( 6 4 ) Ġ!= Ġ 0 Ġ// has _ crc 3 2 c ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Cache Bits : ĠBoolean Ġ= Ġbyte . toInt (). and ( 3 2 ) Ġ!= Ġ 0 Ġ// has _ cache _ bits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags : ĠInt Ġ= Ġbyte . toInt (). and ( 2 4 ) Ġ// flags Ġ{ flags Ġ= Ġ 0 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize : ĠInt Ġ= Ġbyte . toInt (). and ( 7 ) Ġ// size Ġ{ size Ġ<= Ġ 4 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Bytes : ĠInt Ġ= Ġbuffer [ 5 ]. toInt () Ġ// off _ bytes Ġ{ off _ bytes Ġ<= Ġ 8 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpointer Ġ= Ġ 6 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells Count InBytes : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// cells Ġ{ Ġcells Ġ<= Ġ 3 2 }, Ġ( size Ġ* Ġ 8 ) Ġ<= Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells Count : ĠLong Ġ= ĠbyteArray LE to Long ( cells Count InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġsize ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells Count Ġ> ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG rm B oc Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cells Count Ġ$ cells Count Ġmore Ġthan ĠInt . MAX _ VALUE ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġcells Count Ġin Ġbytes Ġ$ cells Count InBytes ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠB oc Ġin Ġhex : Ġ" Ġ+ ĠbyteArray To Hex ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroots Count InBytes : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġroots Ġ{ Ġ 1 Ġ<= Ġroots Ġ<= Ġ 3 2 }, Ġ( size Ġ* Ġ 8 ) Ġ<= Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroots Count : ĠLong Ġ= ĠbyteArray LE to Long ( roots Count InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġsize ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( roots Count Ġ> ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG rm B oc Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" roots Count Ġ$ roots Count Ġmore Ġthan ĠInt . MAX _ VALUE ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġroots Count Ġin Ġbytes Ġ$ roots Count InBytes ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠB oc Ġin Ġhex : Ġ" Ġ+ ĠbyteArray To Hex ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabsent InBytes : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġabsent Ġ{ Ġroots Ġ+ Ġabsent Ġ<= Ġcells }, Ġ( size Ġ* Ġ 8 ) Ġ<= Ġ 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabsent : ĠLong Ġ= ĠbyteArray LE to Long ( abs ent InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġsize ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ent Ġ> ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG rm B oc Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" abs ent Ġ$ abs ent Ġmore Ġthan ĠInt . MAX _ VALUE ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġabsent Ġin Ġbytes Ġ$ abs ent InBytes ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠB oc Ġin Ġhex : Ġ" Ġ+ ĠbyteArray To Hex ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtot Cells Size In Byte : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġoff Bytes )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtot _ cell _ size Ġ{ Ġtot _ cell _ size Ġ<= Ġ 6 4 Ġ}, Ġ( off _ bytes Ġ* Ġ 8 ) Ġ<= Ġ 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtot Cells Size : ĠLong Ġ= ĠbyteArray BE to Long ( tot Cells Size In Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġoff Bytes ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tot Cells Size Ġ> ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG rm B oc Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tot Cells Size Ġ$ tot Cells Size Ġmore Ġthan ĠInt . MAX _ VALUE ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġtot Cells Size Ġin Ġbytes Ġ$ tot Cells Size In Byte ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠB oc Ġin Ġhex : Ġ" Ġ+ ĠbyteArray To Hex ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot List Ġ= ĠInt Array ( roots Count . toInt ()) Ġ// Ġroot _ list ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġroot List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Num InBytes : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot List [ i ] Ġ= ĠbyteArray LE to Long ( root Num InBytes ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindexes : ĠInt Array ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Idx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes Ġ= ĠInt Array ( cells Count . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindexes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Num InBytes : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġoff Bytes )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġoff Bytes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= ĠbyteArray LE to Long ( index Num InBytes ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tot Cells Size Ġ> ĠInt . MAX _ VALUE Ġ- Ġ 8 Ġ- Ġpointer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcell Data : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( pointer Ġuntil Ġ( pointer Ġ+ Ġtot Cells Size . toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer Ġ+= Ġtot Cells Size . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has CRC 3 2 C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Sum : ĠByteArray Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array (( buffer . size Ġ- Ġ 4 ) Ġuntil Ġbuffer . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġcheck Ġcrc 3 2 c ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcrc 3 2 c Ġimplement Ġin Ġjava Ġ 9 Ġstandard Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells : ĠArrayList < Cell > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefs : ĠArray < ArrayList < Long >> Ġ= ĠArray ( cells Count . toInt ()) Ġ{ Ġarray ListOf < Long >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcells Count . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 1 : ĠByte Ġ= Ġcell Data [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefs Count : ĠInt Ġ= Ġd 1 . toInt () Ġand Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Special : ĠBoolean Ġ= Ġd 1 . toInt () Ġand Ġ 8 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Hashes : ĠBoolean Ġ= Ġd 1 . toInt () Ġand Ġ 1 6 Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Mask Ġ= Ġd 1 . toInt () Ġshr Ġ 5 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 2 In Byte : ĠByte Ġ= Ġcell Data [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 2 : ĠInt Ġ= ĠbyteArray LE to Long ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < Byte >( d 2 In Byte ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Size : ĠFloat Ġ= Ġd 2 . toFloat () Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell F Size : ĠInt Ġ= Ġceil ( cell Size ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Buffer : ĠByteArray Ġ= Ġcell Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( 2 Ġuntil Ġ( 2 Ġ+ Ġcell F Size )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Special , Ġindexes ?. get ( i ) Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell Size Ġ* Ġ 8 ). toInt (), Ġcell Buffer , Ġarray ListOf < Cell >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrefs Buffer : ĠByteArray Ġ= Ġcell Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array (( 2 Ġ+ Ġcell F Size ) Ġuntil Ġ( 2 Ġ+ Ġcell F Size Ġ+ Ġrefs Count Ġ* Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 Ġuntil Ġrefs Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref InBytes : ĠByteArray Ġ= Ġrefs Buffer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( r Ġ* Ġsize Ġuntil Ġ( r Ġ+ Ġ 1 ) Ġ* Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref : ĠLong Ġ= ĠbyteArray BE to Long ( ref InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefs [ i ]. add ( ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Data Ġ= Ġcell Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice Array ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 Ġ+ Ġcell F Size Ġ+ Ġrefs Buffer . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuntil Ġcell Data . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcells Count . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġrefs [ i ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ]. put Ref ( cells [ refs [ i ][ j ]. toInt ()]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Cells : ĠArrayList < Cell > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġroot List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Cells . add ( cells [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBag Of Cells ( root Cells . to Typed Array ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG rm B oc Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġmagic Ġ$ magic Ġis Ġnot Ġequal Ġto Ġ$ magic Generic ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠThis Ġtype Ġof Ġb oc Ġis Ġnot Ġsupported ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }