/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . ĠĠĊ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . common . artifact . stream Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġkotlin . math . min Ċ Ċ class ĠBo unded InputStream ( ĊĠĠĠ Ġprivate Ġval Ġsource : ĠInputStream , ĊĠĠĠ Ġlimit : ĠLong Ċ ) Ġ: ĠInputStream () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġpos : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġlength : ĠLong Ġ= Ġlimit ĊĠĠĠ Ġprivate Ġvar Ġis Propag ate Close : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( length Ġ>= Ġ 0 ) Ġ{ Ġ" Limit Ġvalue Ġmust Ġgreater Ġthan Ġ 0 ." Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ>= Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEOF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsource . read () ĊĠĠĠĠĠĠĠ Ġpos ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . read ( b , Ġ 0 , Ġb . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ>= Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEOF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmax Read Ġ= Ġmin ( len . to Long (), Ġlength Ġ- Ġpos ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġbytes Read Ġ= Ġsource . read ( b , Ġoff , Ġmax Read ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Read Ġ== ĠEOF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEOF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpos Ġ+= Ġbytes Read ĊĠĠĠĠĠĠĠ Ġreturn Ġbytes Read ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġskip ( n : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto Skip Ġ= Ġmin ( n , Ġ( length Ġ- Ġpos )) ĊĠĠĠĠĠĠĠ Ġval Ġskipped Bytes Ġ= Ġsource . skip ( to Skip ) ĊĠĠĠĠĠĠĠ Ġpos Ġ+= Ġskipped Bytes ĊĠĠĠĠĠĠĠ Ġreturn Ġskipped Bytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġavailable (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( length Ġ- Ġpos ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Propag ate Close ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġmark ( read limit : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource . mark ( read limit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmark Supported (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . mark Supported () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEOF Ġ= Ġ- 1 ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠInputStream . bound ( range : ĠRange ): ĠInputStream Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( range . is Partial Content ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠBo unded InputStream ( this , Ġrange . length ) ĊĠĠĠ Ġ} Ġelse Ġthis Ċ } Ċ Ċ fun ĠFile . bound ( range : ĠRange ): ĠInputStream Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( range . is Partial Content ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inputStream (). apply Ġ{ Ġskip ( range . start ) Ġ}. bound ( range ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . inputStream () ĊĠĠĠ Ġ} Ċ } Ċ