package Ġtext čĊč Ċ import Ġutil . Util č Ċ import Ġjava . io . File čĊč Ċ /** čĊ Ġ* Ġãĥ Ĩ ãĤŃ ãĤ¹ãĥĪ ãĥĩãĥ¼ãĤ¿ ãĤĴ ç®¡çĲĨ ãģĻãĤĭ ãĤ¯ãĥ©ãĤ¹ čĊ Ġ* Ġ@ author Ġy uu čĊ Ġ* Ġ@ since Ġ 2 0 1 7 / 0 3 / 1 1 čĊ Ġ*/ č Ċ object ĠText Data Ġ{ čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« å½¢å¼ı ãģ® ãĥķãĤ¡ãĤ¤ãĥ« ãĤĴ Hash ãģ« ãĥĳ ãĥ¼ãĤ¹ ãģĻãĤĭ čĊĠĠĠĠ Ġ* Ġkey 1 = value 1 čĊĠĠĠĠ Ġ* Ġkey 2 = value 2 čĊĠĠĠĠ Ġ* Ġ=> Ġ[ key 1 Ġ-> Ġvalue 1 , Ġkey 2 Ġ-> Ġvalue 2 ] čĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« čĊĠĠĠĠ Ġ* Ġ@ return ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« ãģ® æ§ĭ éĢł ãģ« åį³ ãģĹãģŁ Hash čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġparse Ini File ( file Ġ: ĠFile ) Ġ: ĠHashMap < String , ĠString > Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ãĥĳ ãĥ¼ãĤ¹ ãģĹãģŁ çµĲæŀľ čĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠHashMap < String , ĠString >() čĊĠĠĠĠĠĠĠ Ġ// æĶ¹ è¡Į ãģĹãģŁ åĨħå®¹ ãĤĴ æł¼ ç´ į ãģĻãĤĭãģŁãĤģ ãĢģ åīį ãģ® çĬ¶æħĭ ãģ§ ãģ® ãĤŃ ãĥ¼ãĤĴ ä¿ĿåŃĺ ãģĹãģ¦ ãģĬ ãģı å¿ħè¦ģ ãģĮãģĤãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġpre Key Ġ: ĠString Ġ= Ġ"" čĊčĊĠĠĠĠĠĠĠ Ġ// åĲĦ è¡Į çµ± åĲĪ ãĥģ ãĤ§ ãĥĥãĤ¯ ãģĹãģª ãģĮ ãĤī ãĢģ ãĥĩãĥ¼ãĤ¿ ãģ« ãĥĳ ãĥ¼ãĤ¹ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġif ( file . exists ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . read Lines (). forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeq Ġ= Ġit . indexOf (' =') čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( eq Ġ== Ġ- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pre Key ] Ġ= Ġresult [ pre Key ] Ġ+ Ġ"\ n " Ġ+ Ġit čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Key Ġ= Ġit . substring ( 0 , Ġeq ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pre Key ] Ġ= Ġ( result [ pre Key ] Ġ?: Ġ"") Ġ+ Ġit . substring ( eq Ġ+ Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġresult čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« å½¢å¼ı ãģ® ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãĤĴ Hash ãģ« ãĥĳ ãĥ¼ãĤ¹ ãģĻãĤĭ čĊĠĠĠĠ Ġ* Ġkey 1 = value 1 čĊĠĠĠĠ Ġ* Ġkey 2 = value 2 čĊĠĠĠĠ Ġ* Ġ=> Ġ[ key 1 Ġ-> Ġvalue 1 , Ġkey 2 Ġ-> Ġvalue 2 ] čĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« å½¢å¼ı ãģ® ãĥĨ ãĤŃ ãĤ¹ãĥĪ čĊĠĠĠĠ Ġ* Ġ@ return ĠIn i ãĥķãĤ¡ãĤ¤ãĥ« ãģ® æ§ĭ éĢł ãģ« åį³ ãģĹãģŁ Hash čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġparse Ini ( text Ġ: ĠString ) Ġ: ĠHashMap < String , ĠString > Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ãĥĳ ãĥ¼ãĤ¹ ãģĹãģŁ çµĲæŀľ čĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠHashMap < String , ĠString >() čĊĠĠĠĠĠĠĠ Ġ// æĶ¹ è¡Į ãģĹãģŁ åĨħå®¹ ãĤĴ æł¼ ç´ į ãģĻãĤĭãģŁãĤģ ãĢģ åīį ãģ® çĬ¶æħĭ ãģ§ ãģ® ãĤŃ ãĥ¼ãĤĴ ä¿ĿåŃĺ ãģĹãģ¦ ãģĬ ãģı å¿ħè¦ģ ãģĮãģĤãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġpre Key Ġ: ĠString Ġ= Ġ"" čĊčĊĠĠĠĠĠĠĠ Ġ// ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãģĮ ç©º ãģª ãĤī æ® » ãĤĴ è¿Ķ ãģĻ čĊĠĠĠĠĠĠĠ Ġif ( text Ġ== Ġ"") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult čĊčĊĠĠĠĠĠĠĠ Ġ// åĲĦ è¡Į çµ± åĲĪ ãĥģ ãĤ§ ãĥĥãĤ¯ ãģĹãģª ãģĮ ãĤī ãĢģ ãĥĩãĥ¼ãĤ¿ ãģ« ãĥĳ ãĥ¼ãĤ¹ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġtext . lines (). forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeq Ġ= Ġit . indexOf (' =') čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( eq Ġ== Ġ- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pre Key ] Ġ= Ġresult [ pre Key ] Ġ+ Ġ"\ n " Ġ+ Ġit čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Key Ġ= Ġit . substring ( 0 , Ġeq ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pre Key ] Ġ= Ġ( result [ pre Key ] Ġ?: Ġ"") Ġ+ Ġit . substring ( eq Ġ+ Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġresult čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĮĩå®ļ ãģĹãģŁ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī ãĥĩãĥ¼ãĤ¿ ãĤĴ èªŃãģ¿ è¾¼ ãģ¿ ãĢģ Hash æ§ĭ éĢł ãģ® ãĥĩãĥ¼ãĤ¿ åŀĭ ãģ« ãģĹãģ¦ è¿Ķ ãģĻ čĊĠĠĠĠ Ġ* Ġ èªŃãģ¿ è¾¼ ãĤĢ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« æ§ĭ éĢł ãģ¯ ä»¥ä¸ĭãģ® ãĤĪãģĨ ãģª ãĤĤãģ® čĊĠĠĠĠ Ġ* Ġ[ Ġregion _ name Ġ] čĊĠĠĠĠ Ġ* Ġkey = value ... čĊĠĠĠĠ Ġ* Ġ[ Ġregion _ name Ġ] čĊĠĠĠĠ Ġ* Ġkey = value ... čĊĠĠĠĠ Ġ* Ġ=> ĠæĮĩå®ļ ãģ® region _ name ãģ«ãģ¤ãģĦãģ¦ ãĢģ[ Ġkey Ġ=> Ġvalue , Ġ... Ġ] čĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠæĮĩå®ļ ãģĻãĤĭ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥķãĤ¡ãĤ¤ãĥ« čĊĠĠĠĠ Ġ* Ġ@ return ĠæĮĩå®ļ ãģĹãģŁ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī èªŃãģ¿ è¾¼ ãģ¾ ãĤĮ ãģŁ ãĥĩãĥ¼ãĤ¿ ãģ® Hash čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġparse File ( file Ġ: ĠFile ) Ġ: ĠHashMap < String , ĠString >{ čĊĠĠĠĠĠĠĠ Ġ// èªŃãģ¿ è¾¼ ãĤĢ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« čĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠFile ("./ data / text . db ") čĊĠĠĠĠĠĠĠ Ġ// èŃ ĺ åĪ¥ ãģĻãĤĭãģŁãĤģ ãģ® SHA 1 åĢ¤ čĊĠĠĠĠĠĠĠ Ġval Ġsha Ġ= ĠUtil . sha 2 5 6 ( file ) čĊĠĠĠĠĠĠĠ Ġ// èªŃãģ¿ è¾¼ ãĤĢ éł ĺ åŁŁ åĨħ ãģ§ãģĤãĤĭ ãģĵãģ¨ ãĤĴ åĪ¤ å®ļ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġis Writable Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġ// ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī èªŃãģ¿ è¾¼ ãĤĵ ãģł æĮĩå®ļ éł ĺ åŁŁ ãģ® Ini å½¢å¼ı ãģ® ãĥĨ ãĤŃ ãĤ¹ãĥĪ čĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" čĊčĊĠĠĠĠĠĠĠ Ġ// èªŃãģ¿ è¾¼ ãĤĢ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« ãģĮ åŃĺåľ¨ ãģĹãģªãģĦ åł´åĲĪãģ¯ ç©º ãģ® Hash ãĤĴ è¿Ķ ãģĻ čĊĠĠĠĠĠĠĠ Ġif (! data . exists ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHashMap () čĊčĊĠĠĠĠĠĠĠ Ġ// ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī åĲĦ è¡Į èªŃãģ¿ è¾¼ ãģ¿ ãĢģ æĮĩå®ļ ãĥķãĤ¡ãĤ¤ãĥ« éł ĺ åŁŁ ãģ® ãĥĩãĥ¼ãĤ¿ ãĤĴåıĸå¾Ĺ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġdata . forEach Line Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . startsWith ("[ ") Ġ&& Ġit . contains (" ] ")) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit . substring ( it . indexOf ('[ ') Ġ+ Ġ 1 , Ġit . indexOf (' ] ')). split (',') čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Writable Ġ= Ġid . size Ġ== 2 Ġ&& Ġ( id [ 0 ] Ġ== Ġ( ". \ \" Ġ+ Ġfile . relative To ( File ("./ "). absolute File ). path ) Ġ|| Ġid [ 1 ] Ġ== Ġsha ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( is Writable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ( if ( text . isNotEmpty ()) Ġ"\ n " Ġelse Ġ"") Ġ+ Ġit čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// åıĸå¾Ĺ ãģĹãģŁ ãĥĩãĥ¼ãĤ¿ ãĤĴ Ini å½¢å¼ı ãģĭãĤī ãĥĩãĥ¼ãĤ¿ å½¢å¼ı ãģ« ãĥĳ ãĥ¼ãĤ¹ ãģĹãģ¦ è¿Ķ ãģĻ čĊĠĠĠĠĠĠĠ Ġreturn Ġparse Ini ( text ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĮĩå®ļ ãģĹãģŁ ãĥķãĤ¡ãĤ¤ãĥ« ãģ® ãĥĩãĥ¼ãĤ¿ ãĤĴ æĽ´æĸ° ãģĹãģ¦ ãĢģ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« ãģ« æĽ¸ ãģį è¾¼ ãĤĢ čĊĠĠĠĠ Ġ* Ġ@ param Ġfile ĠæĽ´æĸ° ãģĻãĤĭ ãĥķãĤ¡ãĤ¤ãĥ« čĊĠĠĠĠ Ġ* Ġ@ param Ġupdate ĠæĽ´æĸ° ãģĻãĤĭ ãĥĩãĥ¼ãĤ¿ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġun parse File ( file Ġ: ĠFile , Ġupdate Ġ: ĠMap < String , ĠString >) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// èªŃãģ¿ è¾¼ ãĤĢ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« čĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠFile ("./ data / text . db ") čĊĠĠĠĠĠĠĠ Ġ// èŃ ĺ åĪ¥ ãģĻãĤĭãģŁãĤģ ãģ® SHA 1 åĢ¤ čĊĠĠĠĠĠĠĠ Ġval Ġsha Ġ= ĠUtil . sha 2 5 6 ( file ) čĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ". \ \" Ġ+ Ġfile . canonical Path . replace ( File ("./ "). canonical Path Ġ+ Ġ"\\ ", Ġ"") čĊĠĠĠĠĠĠĠ Ġ// æĽ¸ ãģį è¾¼ ãĤĢ éł ĺ åŁŁ åĨħ ãģ§ãģĤãĤĭ ãģĵãģ¨ ãĤĴ åĪ¤ å®ļ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġis Writable Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġ// ãģĻ ãģ§ ãģ« æĽ¸ ãģį è¾¼ ãĤĵ ãģł ãģĭ ãģ© ãģĨ ãģĭ ãĤĴ åĪ¤ å®ļ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġis W rote Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġ// ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãĤĴ èªŃãģ¿ åĩº ãģĹ ãĢģ æĽ´æĸ° ãģĹãģŁ ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãģ« ãģĹãģ¦ æł¼ ç´ į ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" čĊčĊĠĠĠĠĠĠĠ Ġ// ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī åĲĦ è¡Į èªŃãģ¿ è¾¼ ãģ¿ ãĢģ æĮĩå®ļ ãĥķãĤ¡ãĤ¤ãĥ« éł ĺ åŁŁ ãģłãģĳ æĽ´æĸ° ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġif ( data . exists ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Line Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . startsWith ("[ ") Ġ&& Ġit . contains (" ] ")) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ID ãĤĴ èŃ ĺ åĪ¥ ãģĹ ãĢģ æĽ¸ ãģį è¾¼ ãģ¿ éł ĺ åŁŁ åĨħ ãģĭ ãĤĴ åĪ¤ å®ļ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit . substring ( it . indexOf ('[ ') Ġ+ Ġ 1 , Ġit . indexOf (' ] ')). split (',') čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Writable Ġ= Ġid . size Ġ== 2 Ġ&& Ġ( id [ 0 ] Ġ== Ġ( ". \ \" Ġ+ Ġfile . relative To ( File ("./ "). absolute File ). path ) Ġ|| Ġid [ 1 ] Ġ== Ġsha ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Writable ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ( if Ġ( text . isNotEmpty ()) Ġ"\ n " Ġelse Ġ"") Ġ+ Ġit čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãģ« æĽ¸ ãģį è¾¼ ãģ¿ ãĢģ ãģ¾ ãģł æĽ¸ ãģį è¾¼ ãĤĵ ãģ§ ãģĬ ãĤī ãģļ ãĢģ ãģĭ ãģ¤ æĽ¸ ãģį è¾¼ ãģ¿ éł ĺ åŁŁ åĨħ ãģ§ãģĤãĤĭ ãģª ãĤī ãĢģ æĽ´æĸ° ãĥĩãĥ¼ãĤ¿ ãģ« å·® ãģĹ æĽ¿ ãģĪãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is W rote Ġ&& Ġis Writable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ( if Ġ( text . isNotEmpty ()) Ġ"\ n " Ġelse Ġ"") Ġ+ Ġ" [$ filePath ,$ sha ]" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate . forEach Ġ{ Ġtext Ġ+= Ġ"\ n ${ it . key } =${ it . value }" Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĽ¸ ãģį è¾¼ ãģ¿ çµĤ ãĤı ãģ£ãģŁ ãģĭ ãģ© ãģĨ ãģĭ ãĤĴ æĽ´æĸ° čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis W rote Ġ= Ġis Writable Ġor Ġis W rote čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif (! is Writable ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ( if Ġ( text . isNotEmpty ()) Ġ"\ n " Ġelse Ġ"") Ġ+ Ġit čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ãģ¾ ãģł æĽ¸ ãģį è¾¼ ãĤĵ ãģ§ ãģĦ ãģªãģĦ ãģª ãĤī ãģ° ãĢģ ãĥĨ ãĤŃ ãĤ¹ãĥĪ æľ« å°¾ ãģ« æĽ¸ ãģį è¾¼ ãĤĵ ãģ§ ãģĬ ãģı čĊĠĠĠĠĠĠĠ Ġif (! is W rote ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ( if Ġ( text . isNotEmpty ()) Ġ"\ n " Ġelse Ġ"") Ġ+ Ġ" [$ filePath ,$ sha ]" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate . forEach Ġ{ Ġtext Ġ+= Ġ"\ n ${ it . key } =${ it . value }" Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° ãģķãĤĮãģŁ ãĥĨ ãĤŃ ãĤ¹ãĥĪ ãĤĴ ãĥĩãĥ¼ãĤ¿ ãĥķãĤ¡ãĤ¤ãĥ« ãģ« æĽ¸ ãģį è¾¼ ãĤĢ čĊĠĠĠĠĠĠĠ Ġdata . write Text ( text ) čĊĠĠĠ Ġ} č Ċ } čĊčĊ