package Ġcom . wj th ie me . ML Classification Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . wj th ie me . ML Classification . Application . Companion . model Url Ċ import Ġjava . net . URL Ċ import Ġjava . security . Message Digest Ċ Ċ object ĠDown loader Ġ{ ĊĊĠĠĠ Ġfun ĠContext . download ( id : ĠString , Ġhash : ĠString , Ġcompletion : Ġ( Exception ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġif Ġ( id Ġ== Ġ" test ") ĠApplication . test Model Ġelse ĠApplication . baseUrl . append ( id ) ĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġconnection . getInputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠinputStream . read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sha 1 ( data ) Ġ!= Ġhash ) Ġthrow ĠSecurity Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Url (). write Bytes ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠURL . append ( path Component : ĠString ): ĠURL Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠURL ( protocol , Ġhost , Ġport , Ġ"$ path /$ path Component ?$ query ", Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsha 1 ( data : ĠByteArray ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash er Ġ= ĠMessage Digest . getInstance (" SHA - 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġdigest Ġ= Ġhash er . digest ( data ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdigest . join ToString ("") Ġ{ ĠString . format ("% 0 2 x ", Ġit ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ }