package Ġcom . x attack er . gan . data čĊč Ċ import Ġcom . x attack er . binary . Binary Buffer č Ċ import Ġcom . x attack er . binary . Input Binary Buffer č Ċ import Ġcom . x attack er . binary . Type Converter č Ċ import Ġcom . x attack er . gan . exception . Response TimeoutException č Ċ import Ġjava . io . InputStream č Ċ import Ġjava . io . OutputStream č Ċ import Ġjava . util .* čĊč Ċ class ĠPack Checker č Ċ { čĊĠĠĠ Ġcompanion Ġobject čĊĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠHEAD Ġ= Ġ"< GAN _ PACK >" čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠHEAD _ BYTE Ġ= ĠHEAD . toByteArray () čĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINT _ LENGTH Ġ= Ġ 4 čĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVALID _ LENGTH Ġ= ĠHEAD _ BYTE . size Ġ+ ĠINT _ LENGTH čĊčĊĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) čĊĠĠĠĠĠĠĠ Ġfun ĠisValid Pack ( a In : ĠInputStream , Ġwait Count : ĠInt , Ġa Mark able : ĠBoolean Ġ= Ġfalse ): ĠValid Result čĊĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠPack Checker (). Valid Result () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwait _ count Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( a In . available () Ġ< ĠVALID _ LENGTH Ġ&& Ġwait _ count Ġ< Ġwait Count ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait _ count ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a In . available () Ġ< ĠVALID _ LENGTH ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse TimeoutException (); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a In . mark Supported () Ġ&& Ġa Mark able ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa In . mark ( HEAD _ BYTE . size ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠByteArray ( HEAD _ BYTE . size ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa In . read ( temp ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . valid Ġ= ĠArrays . equals ( HEAD _ BYTE , Ġtemp ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . valid ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠInput Binary Buffer ( a In ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . length Ġ= Ġbuffer . read Integer () Ġ?: Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ex : ĠException ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . valid Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinally čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a In . mark Supported () Ġ&& Ġa Mark able ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa In . reset () Ġ// Ġreturn Ġto Ġmarked Ġindex čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ex 2 : ĠException ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfun Ġpack ( data : ĠByteArray , Ġout : ĠOutputStream ) čĊĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( HEAD _ BYTE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( Type Converter . int To Byte ( data . size )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( data ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġconstructor () čĊčĊĠĠĠ Ġinner Ġclass ĠValid Result čĊĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġvalid Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġ 0 čĊĠĠĠ Ġ} č Ċ }