import Ġjava . util .* Ċ import Ġjava . io . File Ċ Ċ import Ġarchive .* Ċ import Ġutil .* ĊĊ Ċ class ĠThe Table Ġconstructor Ġ( archive Sets : ĠArray < Archive Set >, Ġdefault Output Directory : ĠReal Path ) Ġ{ ĊĠĠĠ Ġval Ġthe Item Table : ĠItem Record Table Ġ= Ġsorted Map Of () ĊĠĠĠ Ġval Ġthe ItemList : ĠItem List Ġ= Ġmutable Map Of () ĊĠĠĠ Ġval Ġthe Archive Sets : ĠArray < Archive Set > ĊĠĠĠ Ġval Ġthe Archive Map : ĠArchive Map Ġ= Ġmutable Map Of () ĊĠĠĠ Ġval Ġarchive Set Num : ĠInt ĊĠĠĠ Ġval Ġtable Instance : ĠInt ĊĠĠĠ Ġval Ġroot Output Directory : ĠReal Path ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtable Instance Serial Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtable Instance Ġ= Ġtable Instance Serial ĊĠĠĠĠĠĠĠ Ġtable Instance Serial ++ ĊĊĠĠĠĠĠĠĠ Ġthe Archive Sets Ġ= Ġarchive Sets ĊĠĠĠĠĠĠĠ Ġarchive Set Num Ġ= Ġarchive Sets . size ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( an Archive Set Ġin Ġthe Archive Sets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( an Archive Ġin Ġan Archive Set . archive Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Archive Map [ an Archive . key ] Ġ= Ġan Archive . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Archive Set Items Record ( an Archive Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroot Output Directory Ġ= Ġdefault Output Directory Ġ+ Ġdirectory Delimiter Ġ+ Ġtable Instance Serial ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Archive Set Items Record ( an Archive Set : ĠArchive Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( an Item Ġin Ġan Archive Set . item Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Item : ĠItem Ġ= Ġan Archive Set . item Map [ an Item . key ] Ġ?: Ġerror ("[ Error ]< register An Item Record >: ĠNo Ġsuch Ġitem Ġby Ġ${ an Item . key }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Parent Archive ID Ġ= Ġthe Item . parent Archive ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Archive Set ID Ġ= Ġan Archive Set . archive Set ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthe Key Ġ= Ġan Item . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Result Ġ= Ġquery Ins ensit ively ( the Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Key Ġ= Ġquery Result . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Item Record : ĠItem Record ? Ġ= Ġquery Result . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Item Record Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Item Record Ġ= Ġthe Item . make Item Record From Item ( archive Set Num , Ġthe Parent Archive ID , Ġthe Archive Set ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] Ġ= Ġan Item Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Item Record . ex istence [ the Archive Set ID ] Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ex istence Ġ= Ġquery Item Record . ex istence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ex istence [ the Archive Set ID ] Ġ= ĠPair ( the Parent Archive ID , Ġthe Item . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. ex istence Ġ= Ġnew Ex istence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("[ WARN ]< register An Item Record >: Ġadd Ġagain Ġ${ the Item . path . last () }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Item Table [ the Key ] !!. ex istence . is Filled ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. is Filled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe ItemList [ the Item . id ] Ġ= Ġthe Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister An Item Record With Ex istence ( an Archive Set : ĠArchive Set , Ġkey : ĠItem Key , Ġarchive Set IDs : ĠMutable List < Int >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Item : ĠItem Ġ= Ġan Archive Set . item Map [ key ] Ġ?: Ġerror ("[ Error ]< register An Item Record With Ex istence >: ĠNo Ġsuch Ġitem Ġby Ġ$ key ") ĊĠĠĠĠĠĠĠ Ġif Ġ( the Ign oring List . match ( the Item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Skip : Ġ${ the Item . path . last () }\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġthe Parent Archive ID Ġ= Ġthe Item . parent Archive ID ĊĠĠĠĠĠĠĠ Ġval Ġthe Archive Set ID Ġ= Ġan Archive Set . archive Set ID ĊĠĠĠĠĠĠĠ Ġvar Ġthe Key Ġ= Ġkey ĊĠĠĠĠĠĠĠ Ġval Ġquery Result Ġ= Ġquery Ins ensit ively ( the Key ) ĊĠĠĠĠĠĠĠ Ġthe Key Ġ= Ġquery Result . first ĊĠĠĠĠĠĠĠ Ġval Ġquery Item Record : ĠItem Record ? Ġ= Ġquery Result . second ĊĠĠĠĠĠĠĠ Ġif Ġ( query Item Record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Item Record Ġ= Ġthe Item . make Item Record From Item ( archive Set Num , Ġthe Parent Archive ID , Ġthe Archive Set ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] Ġ= Ġan Item Record ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġarchive Set IDs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. ex istence [ it ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( the Parent Archive ID , Ġthe Item . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( the Item Table [ the Key ] !!. ex istence . is Filled ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. is Filled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġthe ItemList [ the Item . id ] Ġ= Ġthe Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Ins ensit ively ( a Key : ĠItem Key ): ĠPair < Item Key , Item Record ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Record Ġ= Ġthe Item Table [ a Key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( a Record Ġ!= Ġnull ) Ġreturn ĠPair ( a Key , a Record ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġnew Key : ĠItem Key ĊĠĠĠĠĠĠĠ Ġvar Ġnew Record : ĠItem Record ? ĊĠĠĠĠĠĠĠ Ġif Ġ( a Key . is Archive Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Key Ġ= Ġa Key . copy ( is Archive Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Record Ġ= Ġthe Item Table [ new Key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Key Ġ= Ġa Key . copy ( is Archive Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Record Ġ= Ġthe Item Table [ new Key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Key Ġ= Ġa Key . copy ( is Archive Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Record Ġ= Ġthe Item Table [ new Key ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( new Record Ġ== Ġnull ) ĠPair ( a Key , Ġa Record ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠPair ( new Key , Ġnew Record ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEx istence Board . is Filled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . forEach { Ġif ( it == null ) Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget First Item Key (): ĠItem Key ? Ġ{ ĊĠĠĠĠĠĠĠ Ġthe Item Table . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . value . is Filled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . key . is Archive Ġ!= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Item Table [ it . key ] !!. is First Or Single ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! the Item Table [ it . key ] !!. is Extract ed ) Ġreturn Ġit . key ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmodify Key Of The Item Table ( old Key : ĠItem Key , Ġnew Key : ĠItem Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueried Value Ġ= Ġthe Item Table [ old Key ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( quer ied Value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ("[ ERROR ]< modify Key >: ĠNo Ġsuch ĠItem Record Ġwith Ġ$ old Key ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table . remove ( old Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ new Key ] Ġ= Ġqueried Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠTODO : ĠMay Ġfiles Ġhaving Ġcommon Name Ġappears Ġin Ġphys ically Ġdifferent Ġarch ives ĊĠĠĠ Ġprivate Ġfun Ġfind Multi Volumes ( path : ĠRelative Path , Ġarchive Set ID : ĠArchive ID ): ĠList < Item ID > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommon Name Ġ= Ġpath . get Common Name Of Multi Volume () ĊĠĠĠĠĠĠĠ Ġval Ġid List Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġitem Entry Ġin Ġthe Item Table Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexistence Ġ= Ġitem Entry . value . ex istence [ archive Set ID ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex istence Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( item Entry . value . is First Or Single Ġ|| Ġitem Entry . key . is Archive Ġ== Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the ItemList [ ex istence . second ] !!. path . last (). get Common Name Of Multi Volume () Ġ== Ġcommon Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid List . add ( ex istence . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġid List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun Once (): ĠPair < Boolean , Path > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġthe Key Ġ= Ġget First Item Key () ĊĠĠĠĠĠĠĠ Ġif Ġ( the Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Item Record Ġ= Ġthe Item Table [ the Key ] Ġ?: Ġerror ("[ Error ]< run Once >: ĠNo Ġsuch Ġitem Ġby Ġ$ the Key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġthe Item Record . get Any ID () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthe Parent Archive : ĠArchive Ġ= Ġthe Archive Map [ idx . first ] Ġ?: Ġerror ("[ Error ]< run Once >: ĠNo Ġsuch ĠArchive Ġ${ idx . first }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Archive Path Ġ= Ġthe ItemList [ idx . second ] !!. path . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid xs : ĠList < Item ID > Ġ= Ġfind Multi Volumes ( an Archive Path , the Parent Archive . archive Set ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Archive Real Path Ġ= Ġroot Output Directory Ġ+ Ġdirectory Delimiter Ġ+ Ġan Archive Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids List : ĠList < Item ID > Ġ= Ġid xs . plus ( idx . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi ids List : ĠInt Array Ġ= Ġids List . map { the ItemList [ it ] !!. id In Archive }. sorted (). to IntArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot Ġsure Ġwhen Ġthe Ġfirst Ġarchive Ġis Ġexe Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaths : ĠList < Path > Ġ= Ġids List . map Ġ{ Ġroot Output Directory Ġ+ Ġdirectory Delimiter Ġ+ Ġthe ItemList [ it ] !!. path . last () Ġ}. sorted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoint Paths : ĠList < Joint Path > Ġ= Ġpaths . map Ġ{ the Parent Archive . real Archive Paths [ 0 ]. plus ( it )} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠExtract ( Ġthe Parent Archive . real Archive Paths . last (). last (), Ġroot Output Directory , Ġfalse , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract Something ( the Parent Archive . ans . in Archive , Ġi ids List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan ANS Ġ= Ġopen Archive ( an Archive Real Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( an ANS Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Item Record . is Archive Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Key Ġ= Ġthe Key . copy ( is Archive Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. is Archive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Key Of The Item Table ( the Key , new Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Key Ġ= Ġnew Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. is Extract ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġid xs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Key Ġ= Ġthe ItemList [ id ] !!. generate Item Key () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ an Key ] !!. is Extract ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan Archive Ġ= ĠArchive ( joint Paths . to Typed Array (), an ANS , Ġidx . second , Ġthe Parent Archive . archive Set ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Archive Map [ an Archive . archive ID ] Ġ= Ġan Archive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Archive Sets [ an Archive . archive Set ID ]. add New Archive ( an Archive ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ex istence Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Record . ex istence . forEach Indexed { Ġe Idx , Ġe V Ġ-> Ġif Ġ( eV Ġ!= Ġnull ) Ġa Ex istence . add ( e Idx ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( Ġan Idx Ġin Ġan Archive . item Map . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister An Item Record With Ex istence ( the Archive Sets [ an Archive . archive Set ID ], an Idx , a Ex istence ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Item Record . is Archive Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Item Table [ the Key ] !!. is Archive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Key Of The Item Table ( the Key , the Key . copy ( is Archive Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ("[ ERROR ]< run Once >: ĠFail Ġto Ġopen Ġan ĠArchive Ġ${ the Item Record . path }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( false , an Archive Real Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġreturn ĠPair ( true ," ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose All Archive Sets () Ġ{ ĊĠĠĠĠĠĠĠ Ġthe Archive Map . forEach { Ġit . value . ans . close () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove All Archive Sets () Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ( root Output Directory ). delete Re cursively () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare Working Directory () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthe Directory Ġ= ĠFile ( root Output Directory ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Ġ! the Directory . exists () Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("< prepare Working Directory >: ĠDoes Ġnot Ġexist ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( root Output Directory ). mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġ! the Directory . mkdir s () Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ ERROR ]< prepare Working Directory >: ĠFail Ġto Ġmake Ġdirectory ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("< prepare Working Directory >: ĠSeems Ġto Ġbe Ġmade ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! the Directory . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("[ ERROR ]< prepare Working Directory >: ĠCan 't Ġbe ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Result String List (): ĠList < Result Row > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Result Ġ= Ġmutable ListOf < Result Row >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġa Item Entry Ġin Ġthe Item Table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Result . add ( a Item Entry . value . generate Result Row ( the ItemList )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġa Result . toList () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmake The Table ( the Archive Set Paths : ĠArray < Archive Set Paths >, Ġroot Output Directory : ĠString ): ĠThe Table Ġ{ ĊĠĠĠ Ġval Ġarchive Set List Ġ= Ġmutable ListOf < Archive Set >() ĊĠĠĠ Ġthe Archive Set Paths . forEach Indexed Ġ{ Ġidx , Ġan Archive Set Paths Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġan Archive Set Ġ= ĠArchive Set ( idx , Ġan Archive Set Paths ) ĊĊĠĠĠĠĠĠĠ Ġarchive Set List . add ( an Archive Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠThe Table ( archive Set List . to Typed Array (), Ġroot Output Directory ) Ċ } Ċ Ċ data Ġclass ĠItem Key Ġ( ĊĠĠĠĠĠ Ġval Ġis Archive : ĠBoolean ? ĊĠĠĠ Ġ, Ġval Ġdata CRC : ĠInt ? ĊĠĠĠ Ġ, Ġval Ġdata Size : ĠData Size ĊĠĠĠ Ġ, Ġval Ġdup Count : ĠInt Ċ ) Ġ: ĠComparable < Item Key > Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomparator Key Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompare By Descending ( Item Key :: data Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By ( Item Key :: data CRC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then By ( Item Key :: dup Count ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠItem Key ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Archive Ġ== Ġother . is Archive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomparator Key . compare ( this , other ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġwhen Ġ( this . is Archive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġif Ġ( other . is Archive !! ) Ġ 1 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == null ) Ġ"? Ġ" Ġelse Ġif Ġ( is Archive ) Ġ" A Ġ" Ġelse Ġ" F Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 0 8 X ", Ġthis . data CRC )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 1 0 d ", Ġthis . data Size )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 2 d ", Ġthis . dup Count )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠItem Record Ġ( ĊĠĠĠĠĠ Ġval Ġdata CRC : ĠInt ? ĊĠĠĠ Ġ, Ġval Ġdata Size : ĠData Size ĊĠĠĠ Ġ, Ġval Ġmodified Date : ĠDate ? ĊĠĠĠ Ġ, Ġval Ġpath : ĠRelative Path ĊĠĠĠ Ġ, Ġvar Ġexistence : ĠEx istence Board ĊĠĠĠ Ġ, Ġvar Ġis Filled : ĠBoolean ĊĠĠĠ Ġ, Ġvar Ġis Archive : ĠBoolean ? Ġ// Ġnull Ġwhen Ġexe Ġis Ġnot Ġsure ĊĠĠĠ Ġ, Ġvar Ġis Extract ed : ĠBoolean ĊĠĠĠ Ġ, Ġvar Ġis First Or Single : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġget FullName () Ġ= Ġpath . get FullName () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Filled ) Ġ" O Ġ" Ġelse Ġ" X Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive Ġ== Ġtrue ) Ġ( if Ġ( is Extract ed ) Ġ" E Ġ" Ġelse Ġ" N Ġ") Ġelse Ġ"- Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == null ) Ġ"? Ġ" Ġelse Ġif Ġ( is Archive !! ) Ġ" A Ġ" Ġelse Ġ" F Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == false ) Ġ" Ġ Ġ" Ġelse Ġif Ġ( is First Or Single ) Ġ" S Ġ" Ġelse Ġ" M Ġ") ĊĠĠĠĠĠĠĠ Ġexistence . forEach Indexed Ġ{ Ġi , Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( em Ġ== Ġnull ) Ġ" ĠĠĠ Ġ$ i ĠĠĠĠ Ġ" Ġelse ĠString . format (" Ġ% 3 d -% - 5 d ", Ġem . first , Ġem . second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ| Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 0 8 X ", Ġthis . data CRC )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 1 0 d ", Ġthis . data Size )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( this . modified Date ?. date Formatter ()) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( path ) ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsimple String ( the ItemList : ĠItem List ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Filled ) Ġ" O Ġ" Ġelse Ġ" X Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive Ġ== Ġtrue ) Ġ( if Ġ( is Extract ed ) Ġ" E Ġ" Ġelse Ġ" N Ġ") Ġelse Ġ"- Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == null ) Ġ"? Ġ" Ġelse Ġif Ġ( is Archive !! ) Ġ" A Ġ" Ġelse Ġ" F Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == false ) Ġ" Ġ Ġ" Ġelse Ġif Ġ( is First Or Single ) Ġ" S Ġ" Ġelse Ġ" M Ġ") ĊĠĠĠĠĠĠĠ Ġexistence . forEach Indexed Ġ{ Ġi , Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( em Ġ== Ġnull ) Ġ" ĠĠĠ Ġ$ i ĠĠĠĠ Ġ" Ġelse ĠString . format (" Ġ% 3 d -% - 5 d ", Ġem . first , Ġem . second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexistence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ|| Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( the ItemList [ i . second ] !!. path . last (). get FullName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmanaged String ( the ItemList : ĠItem List ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdir Len Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġval Ġname Len Ġ= Ġ 6 4 ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 0 8 X ", Ġthis . data CRC )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( String . format ("% 1 0 d ", Ġthis . data Size )) ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Filled ) Ġ" O Ġ" Ġelse Ġ" X Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive Ġ== Ġtrue ) Ġ( if Ġ( is Extract ed ) Ġ" E Ġ" Ġelse Ġ" N Ġ") Ġelse Ġ"- Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == null ) Ġ"? Ġ" Ġelse Ġif Ġ( is Archive !! ) Ġ" A Ġ" Ġelse Ġ" F Ġ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( is Archive == false ) Ġ" Ġ Ġ" Ġelse Ġif Ġ( is First Or Single ) Ġ" S Ġ" Ġelse Ġ" M Ġ") ĊĊĠĠĠĠĠĠĠ Ġexistence . forEach Indexed Ġ{ Ġi , Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( em Ġ== Ġnull ) Ġ" Ġ- Ġ" Ġelse Ġ" Ġ$ i Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpath List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexistence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath List . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath List . add ( the ItemList [ i . second ] !!. path . last ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpath List . get Same () ĊĠĠĠĠĠĠĠ Ġif Ġ( result . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ<> Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( result . second [ 0 ]. second . reg ulating ( name Len * 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ<> Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . second . forEach Ġ{ Ġpair Str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( pair Str . first . reg ulating ( dir Len )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ|| Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . second . forEach Ġ{ Ġpair Str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ|| Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( pair Str . first . reg ulating From End ( dir Len )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( directory Delimiter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( pair Str . second . reg ulating ( name Len )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Result Row ( the ItemList : ĠItem List ): ĠResult Row Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Row Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( is Filled ) Ġ" O " Ġelse Ġ" X ") ĊĠĠĠĠĠĠĠ Ġa Row . add ( String . format ("% 0 8 X ", Ġthis . data CRC )) ĊĠĠĠĠĠĠĠ Ġa Row . add ( String . format ("% 1 0 d ", Ġthis . data Size )) ĊĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( is Archive Ġ== Ġtrue ) Ġ( if Ġ( is Extract ed ) Ġ" E " Ġelse Ġ" N ") Ġelse Ġ"- ") ĊĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( is Archive == null ) Ġ" ?" Ġelse Ġif Ġ( is Archive !! ) Ġ" A " Ġelse Ġ" F ") ĊĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( is Archive == false ) Ġ"" Ġelse Ġif Ġ( is First Or Single ) Ġ" S " Ġelse Ġ" M ") ĊĊĠĠĠĠĠĠĠ Ġexistence . forEach Indexed Ġ{ Ġi , Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( em Ġ== Ġnull ) Ġ"-" Ġelse Ġ"$ i ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġindex Builder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġexistence . forEach Indexed Ġ{ Ġi , Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Builder . append ( if Ġ( em Ġ== Ġnull ) Ġ" Ġ- " Ġelse Ġ" Ġ$ i ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa Row . add ( index Builder . toString ()) ĊĠĠĠĠĠĠĠ Ġvar Ġare Same FullName Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġdefault FullName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex istence [ 0 ] Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ItemList [ ex istence [ 0 ] !!. second ] !!. path . last (). get FullName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexistence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Same FullName Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( default FullName Ġ!= Ġthe ItemList [ i . second ] !!. path . last (). get FullName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Same FullName Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa Row . add ( default FullName ) ĊĠĠĠĠĠĠĠ Ġvar Ġare Same Directory Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġdefault Directory Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex istence [ 0 ] Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ItemList [ ex istence [ 0 ] !!. second ] !!. path . last (). get Directory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexistence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Same Directory Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( default Directory Ġ!= Ġthe ItemList [ i . second ] !!. path . last (). get Directory ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Same Directory Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexistence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Row . add ("-- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Row . add ("-- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( are Same Directory ) Ġ" === =" Ġelse Ġthe ItemList [ i . second ] !!. path . last (). get Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Row . add ( if Ġ( are Same FullName ) Ġ" === =" Ġelse Ġthe ItemList [ i . second ] !!. path . last (). get FullName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġa Row . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Any ID (): ĠEx istence Mark Ġ{ ĊĠĠĠĠĠĠĠ Ġexistence . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġreturn Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror ("[ ERROR ]< get Any Item ID >: ĠCan 't Ġbe Ġreached Ġ- ĠNo Ġitems Ġin Ġexistence ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠItem Record Table Ġ= ĠSorted Map < Item Key , ĠItem Record > Ċ type alias ĠItem List Ġ= ĠMutable Map < Item ID , Item > Ċ type alias ĠArchive Map Ġ= ĠMutable Map < Int , Archive > Ċ type alias ĠEx istence Mark Ġ= ĠPair < Archive ID , Item ID > Ċ type alias ĠEx istence Board Ġ= ĠArray < Ex istence Mark ?> Ċ type alias ĠResult Row Ġ= ĠArray < String > Ċ