package Ġcom . st . Blue MS . demos . Ext Config Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . st . Blue ST SDK . Feature Ċ import Ġcom . st . Blue ST SDK . Features . Ext Configuration . Custom Command Ċ import Ġcom . st . Blue ST SDK . Features . Ext Configuration . Feature Ext Configuration Ċ import Ġcom . st . Blue ST SDK . Features . high Speed Data Log . communication . W if Settings Ċ import Ġcom . st . Blue ST SDK . Node Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ class ĠExt Configuration ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ command list _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġcommand list _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ command list _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ help _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġhelp _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ help _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ info _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġinfo _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ info _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ uid _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġuid _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ uid _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ power status _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġpower status _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ power status _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ version fw _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġversion fw _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ version fw _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ certificate _ answer Ġ= ĠMutable LiveData < String ? >( null ) ĊĠĠĠ Ġval Ġcertificate _ answer : ĠLive Data < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ certificate _ answer ĊĊĠĠĠ Ġprivate Ġval Ġ_ custom command list _ answer Ġ= ĠMutable LiveData < List < Custom Command >? >( null ) ĊĠĠĠ Ġval Ġcustom command list _ answer : ĠLive Data < List < Custom Command > ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ custom command list _ answer ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Ext Conf ViewModel " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠSET _ DATE _ FORMAT : ĠDate Format Ġ= ĠSimpleDateFormat (" dd / MM / yy ", ĠLocale . getDefault ()) ĊĠĠĠ Ġprivate Ġval ĠSET _ TIME _ FORMAT : ĠDate Format Ġ= ĠSimpleDateFormat (" HH : mm : ss ", ĠLocale . getDefault ()) ĊĊĠĠĠ Ġvar Ġm Feature Ġ: ĠFeature Ext Configuration ? Ġ= null ĊĊĠĠĠ Ġprivate Ġvar Ġrequested Certificate Ġ: ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġmc uid Ġ: ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġenable Notification ( node : ĠNode ){ ĊĠĠĠĠĠĠĠ Ġm Feature Ġ= Ġnode . get Feature ( Feature Ext Configuration :: class . java ) ĊĠĠĠĠĠĠĠ Ġm Feature ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Feature Listener ( feature Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Command Without Argument ( Feature Ext Configuration . READ _ COMMAND S ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Notification ( node : ĠNode ){ ĊĠĠĠĠĠĠĠ Ġnode . get Feature ( Feature Ext Configuration :: class . java )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Feature Listener ( feature Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Feature Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfeature Listener Ġ= ĠFeature . Feature Listener Ġ{ Ġ_, Ġsample Ġ-> ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" sample Ġreceived ") ĊĠĠĠĠĠĠĠ Ġif ( sample Ġis ĠFeature Ext Configuration . Command Sample ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Obj Ġ= Ġsample . command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe Ġcommand Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġanswer Ġ= ĠFeature Ext Configuration . result Command List ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ command list _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe Ġhelp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command Help ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ help _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe ĠInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command Info ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ info _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe Ġuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command STM 3 2 UID ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ uid _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe ĠPower Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command Power Status ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ power status _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe ĠVersion FW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command Version FW ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ version fw _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe Ġcertificate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer Ġ= ĠFeature Ext Configuration . result Command Certificate ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( answer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ certificate _ answer . post Value ( answer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Try Ġto Ġretrieve Ġthe ĠCustom ĠCommands ĠList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Command Ġ= ĠFeature Ext Configuration . result Custom Command List ( response Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Command Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ custom command list _ answer . post Value ( list Command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġ Ġfun Ġtime ToString ( date : ĠDate ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Str Ġ= ĠSET _ TIME _ FORMAT . format ( date ) ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . getDefault (), Ġ"% s ", Ġtime Str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġthe Ġrange ĠS unday = 1 Ġ... Ġs aturday = 7 Ġto Ġmon day Ġ= 1 Ġ... Ġs unday = 7 ĊĠĠĠĠ Ġ* Ġ@ param Ġday Of The Week Ġdat Ġog Ġthe Ġweek , Ġ 1 Ġ= Ġs unday , Ġ 2 Ġ= Ġmon day Ġ... Ġ 7 = Ġs aturday ĊĠĠĠĠ Ġ* Ġ@ return Ġchange Ġthe Ġweek Ġwhere Ġmod ay Ġis Ġthe Ġfirst Ġday Ġof Ġthe Ġweek ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġto Monday First ( day Of The Week : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( day Of The Week Ġ== ĠCalendar . S UND AY ) Ġ 7 Ġelse Ġday Of The Week Ġ- Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġthe Ġday Ġof Ġthe Ġweek , Ġin Ġa Ġspec if c Ġdate ĊĠĠĠĠ Ġ* Ġ@ param Ġd Ġdate Ġto Ġquery ĊĠĠĠĠ Ġ* Ġ@ return Ġ 1 Ġ= Ġmon day Ġ.. Ġ 7 Ġ= Ġs unday ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Day Of The Week ( d : ĠDate ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġd ĊĠĠĠĠĠĠĠ Ġreturn Ġto Monday First ( cal [ Calendar . DAY _ OF _ WEEK ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdate ToString ( date : ĠDate ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Str Ġ= ĠSET _ DATE _ FORMAT . format ( date ) ĊĠĠĠĠĠĠĠ Ġval Ġday Of The Week Ġ= Ġget Day Of The Week ( date ) ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . getDefault (), Ġ"% 0 2 d /% s ", Ġday Of The Week , Ġdate Str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCommand Ġselection ĠMethods Ġ**/ ĊĠĠĠ Ġ// ĠAPI Ġfor Ġwriting Ġthe Ġcommand Ġwithout Ġargument ĊĠĠĠ Ġfun Ġread Cert () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ CER TIFICATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread Uid () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ UID ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġread v Fw () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ VERSION _ FW ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġread Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ INFO ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġread Help () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ HELP ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġread Pow Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ POWER _ STATUS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear DB () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . CLEAR _ DB ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset DF U () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . SET _ DF U ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpower Off () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . POWER _ OFF ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread Custom Commands () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( Feature Ext Configuration . READ _ CUSTOM _ COMMAND S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAPI Ġfor Ġwriting Ġthe Ġcommand Ġwith Ġargument ĊĠĠĠ Ġfun Ġset PIN ( new PIN : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument Number ( Feature Ext Configuration . CHANGE _ PIN , new PIN ); ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠsetName ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument String ( Feature Ext Configuration . SET _ NAME , name ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Cert ( certificate : ĠString ) Ġ{ ĊĠĠĠĠĠĠ Ġ// Log . i (" AWS ĠCertificate "," set Cert Ġ"+ Ġcertificate ?: Ġ" NULL ??? ") ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument String ( Feature Ext Configuration . SET _ CER TIFICATE , certificate ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= time ToString ( date ) ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument String ( Feature Ext Configuration . SET _ TIME , string ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Date () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= date ToString ( date ) ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument String ( Feature Ext Configuration . SET _ DATE , string ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset WiFi ( wifi : ĠW if Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument JSON ( Feature Ext Configuration . SET _ WIFI , wifi ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Custom Command Integer ( name : ĠString , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument Number ( name , value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Custom Command String ( name : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Set Argument String ( name , value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Custom Command Void ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Feature ?. write Command Without Argument ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcommand List Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ command list _ answer . post Value ( null ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġcustom Command List Received () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġ_ custom command list _ answer . post Value ( null ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinfo Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ info _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġhelp Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ help _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġuid Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ uid _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġpower status Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ power status _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġversion fw Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ version fw _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcertificate Received () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ certificate _ answer . post Value ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Ret rived Certificate ( certificate : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġrequested Certificate Ġ= Ġcertificate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Ret rived Cert it icate (): ĠString Ġ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequested Certificate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset MC UID ( mc u Id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmc uid Ġ= Ġm cu Id ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget MC UID (): ĠString Ġ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmc uid ĊĠĠĠ Ġ} Ċ }