/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠM am oe ĠTechnologies Ġand Ġcontributors . Ċ Ġ* Ċ Ġ* Ġ ĠæŃ¤ æºĲ ä»£çłģ çļĦ ä½¿çĶ¨ åıĹ ĠGNU ĠA FFER O ĠGENER AL ĠPUBLIC ĠLICENSE Ġversion Ġ 3 Ġ è®¸ åı¯ è¯ģ çļĦ çº¦ æĿŁ , Ġåı¯ä»¥ åľ¨ ä»¥ä¸ĭ éĵ¾æİ¥ æī¾åĪ° è¯¥ è®¸ åı¯ è¯ģ . Ċ Ġ* Ġ ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠGNU ĠA GPL v 3 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġthrough Ġthe Ġfollowing Ġlink . Ċ Ġ* Ċ Ġ* Ġ Ġhttps :// github . com / mam oe / mir ai / blob / master / LICENSE Ċ Ġ*/ Ċ Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . security . Message Digest Ċ Ċ /* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠM am oe ĠTechnologies Ġand Ġcontributors . Ċ Ġ* Ċ Ġ* ĠæŃ¤ æºĲ ä»£çłģ çļĦ ä½¿çĶ¨ åıĹ ĠGNU ĠA FFER O ĠGENER AL ĠPUBLIC ĠLICENSE Ġversion Ġ 3 Ġ è®¸ åı¯ è¯ģ çļĦ çº¦ æĿŁ , Ġåı¯ä»¥ åľ¨ ä»¥ä¸ĭ éĵ¾æİ¥ æī¾åĪ° è¯¥ è®¸ åı¯ è¯ģ . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠGNU ĠA FFER O ĠGENER AL ĠPUBLIC ĠLICENSE Ġversion Ġ 3 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġvia Ġthe Ġfollowing Ġlink . Ċ Ġ* Ċ Ġ* Ġhttps :// github . com / mam oe / mir ai / blob / master / LICENSE Ċ Ġ*/ Ċ @ Opt In ( Experimental Unsigned Types :: class ) Ċ fun ĠByteArray . to U HexString ( ĊĠĠĠ Ġseparator : ĠString Ġ= Ġ" Ġ", ĊĠĠĠ Ġoffset : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġlength : ĠInt Ġ= Ġthis . size Ġ- Ġoffset Ċ ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( length Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlast Index Ġ= Ġoffset Ġ+ Ġlength ĊĠĠĠ Ġreturn Ġbuild String ( length Ġ* Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ to U HexString . forEach Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġin Ġoffset Ġuntil Ġlast Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġit . to U Byte (). toString ( 1 6 ). toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . length Ġ== Ġ 1 ) Ġret Ġ= Ġ" 0 $ ret " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( ret ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġlast Index Ġ- Ġ 1 ) Ġappend ( separator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠInputStream . md 5 (): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġdigest Ġ= ĠMessage Digest . getInstance (" md 5 ") ĊĠĠĠ Ġdigest . reset () ĊĠĠĠ Ġuse Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠOutputStream () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigest . update ( b . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigest . update ( b , Ġoff , Ġlen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. use Ġ{ Ġoutput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . copy To ( output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdigest . digest () Ċ } Ċ