package Ġcom . sw iss chain . matching . engine . da os . v 2 Ċ Ċ import Ġcom . sw iss chain . matching . engine . da os . Fee Size Type Ċ import Ġcom . sw iss chain . matching . engine . da os . Fee Type Ċ import Ġcom . sw iss chain . matching . engine . da os . fee . v 2 . New Fee Instruction Ċ import Ġcom . sw iss chain . matching . engine . messages . incoming . Incoming Messages Ċ import Ġjava . io . Serializable Ċ import Ġjava . math . BigDecimal Ċ Ċ open Ġclass ĠF ee Instruction ( ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠF ee Type , ĊĠĠĠĠĠĠĠ Ġval Ġsize Type : ĠF ee Size Type ?, ĊĠĠĠĠĠĠĠ Ġval Ġsize : ĠBigDecimal ?, ĊĠĠĠĠĠĠĠ Ġval Ġsource AccountId : ĠLong ?, ĊĠĠĠĠĠĠĠ Ġval Ġsource Wallet Id : ĠLong ?, ĊĠĠĠĠĠĠĠ Ġval Ġtarget AccountId : ĠLong ?, ĊĠĠĠĠĠĠĠ Ġval Ġtarget Wallet Id : ĠLong ? Ċ ) Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( fee : ĠIncoming Messages . Fee ?): ĠF ee Instruction ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfee Type Ġ= ĠF ee Type . getBy External Id ( fee . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsize Type : ĠF ee Size Type ? Ġ= Ġif Ġ( fee . has Size Type ()) ĠF ee Size Type . getBy External Id ( fee . size Type . value ) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee Type Ġ!= ĠF ee Type . NO _ F EE Ġ&& Ġsize Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Type Ġ= ĠF ee Size Type . PERCENT AGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠF ee Instruction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfee Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee . has Size ()) ĠBigDecimal ( fee . size . value ) Ġ Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee . has Source AccountId ()) Ġfee . source AccountId . value Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee . has Source Wallet Id ()) Ġfee . source Wallet Id . value Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee . has Target AccountId ()) Ġfee . target AccountId . value Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fee . has Target Wallet Id ()) Ġfee . target Wallet Id . value Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Fee Instruction ( type =$ type " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( size Type Ġ!= Ġnull ) Ġ", Ġsize Type =$ size Type " Ġelse Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( size Ġ!= Ġnull ) Ġ", Ġsize =${ size . to Plain String () }" Ġelse Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( source AccountId Ġ!= Ġnull ) Ġ", Ġsource AccountId =$ source AccountId " Ġelse Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( source Wallet Id Ġ!= Ġnull ) Ġ", Ġsource Wallet Id =$ source Wallet Id " Ġelse Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ({ if Ġ( target AccountId Ġ!= Ġnull ) Ġ", Ġtarget AccountId =$ target AccountId " Ġelse Ġ"" }) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ if Ġ( target Wallet Id Ġ!= Ġnull ) Ġ", Ġtarget Wallet Id =$ target Wallet Id " Ġelse Ġ"" })" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġto New Format (): ĠNew Fee Instruction Ġ= ĠNew Fee Instruction ( type , Ġsize Type , Ġsize , Ġsource AccountId , Ġsource Wallet Id , Ġtarget AccountId , Ġtarget Wallet Id , Ġempty List ()) Ċ }