@hsuite/native-connect-angular 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/coverage/coverage-summary.json +49 -49
  2. package/coverage/index.html +122 -122
  3. package/coverage/lcov-report/index.html +122 -122
  4. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  5. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
  6. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  7. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
  8. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  9. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  10. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  11. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
  12. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
  13. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
  14. package/coverage/lcov-report/lib/components/account-selector/index.html +1 -1
  15. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
  16. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  17. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
  18. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  19. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
  20. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  21. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
  22. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  23. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  24. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  25. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
  26. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  27. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  28. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  29. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
  30. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  31. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
  32. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  33. package/coverage/lcov-report/lib/directives/index.html +1 -1
  34. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
  35. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
  36. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
  37. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
  38. package/coverage/lcov-report/lib/index.html +1 -1
  39. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
  40. package/coverage/lcov-report/lib/models/index.html +1 -1
  41. package/coverage/lcov-report/lib/models/provider-types.ts.html +1 -1
  42. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
  43. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  44. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
  45. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
  46. package/coverage/lcov-report/lib/providers/index.html +18 -18
  47. package/coverage/lcov-report/lib/providers/p2p-native/index.html +20 -20
  48. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  49. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  50. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
  51. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
  52. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  53. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  54. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  55. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  56. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  57. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  58. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
  59. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  60. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  61. package/coverage/lcov-report/lib/services/index.html +31 -31
  62. package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
  63. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  64. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  65. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  66. package/coverage/lcov-report/lib/services/transaction-builders/index.html +43 -43
  67. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  68. package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -7
  69. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +7 -10
  70. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
  71. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
  72. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +4 -7
  73. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
  74. package/coverage/lcov-report/lib/transports/index.html +1 -1
  75. package/coverage/lcov-report/lib/utils/index.html +1 -1
  76. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +1 -1
  77. package/coverage/lcov.info +14420 -14977
  78. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  79. package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
  80. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  81. package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
  82. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  83. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  84. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  85. package/coverage/lib/components/account-selector/account-list/index.html +1 -1
  86. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
  87. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
  88. package/coverage/lib/components/account-selector/index.html +1 -1
  89. package/coverage/lib/components/wallet-account-display/index.html +1 -1
  90. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  91. package/coverage/lib/components/wallet-connect-button/index.html +21 -21
  92. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  93. package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
  94. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  95. package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
  96. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  97. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  98. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  99. package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
  100. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  101. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  102. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  103. package/coverage/lib/components/wallet-session-display/index.html +1 -1
  104. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  105. package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
  106. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  107. package/coverage/lib/directives/index.html +1 -1
  108. package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
  109. package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
  110. package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
  111. package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
  112. package/coverage/lib/index.html +1 -1
  113. package/coverage/lib/models/connection-config.model.ts.html +1 -1
  114. package/coverage/lib/models/index.html +1 -1
  115. package/coverage/lib/models/provider-types.ts.html +1 -1
  116. package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
  117. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  118. package/coverage/lib/providers/hsuite-native/index.html +19 -19
  119. package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
  120. package/coverage/lib/providers/index.html +18 -18
  121. package/coverage/lib/providers/p2p-native/index.html +20 -20
  122. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  123. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  124. package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
  125. package/coverage/lib/providers/walletconnect/core/index.html +65 -65
  126. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  127. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  128. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  129. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  130. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  131. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  132. package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
  133. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  134. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  135. package/coverage/lib/services/index.html +31 -31
  136. package/coverage/lib/services/logger.service.ts.html +4 -4
  137. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  138. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  139. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  140. package/coverage/lib/services/transaction-builders/index.html +43 -43
  141. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  142. package/coverage/lib/services/transaction.service.ts.html +4 -7
  143. package/coverage/lib/services/unified-wallet.service.ts.html +7 -10
  144. package/coverage/lib/services/wallet-context.service.ts.html +1 -1
  145. package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
  146. package/coverage/lib/services/wallet-providers.service.ts.html +4 -7
  147. package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
  148. package/coverage/lib/transports/index.html +1 -1
  149. package/coverage/lib/utils/index.html +1 -1
  150. package/coverage/lib/utils/ledger-icons.util.ts.html +1 -1
  151. package/dist/fesm2022/hsuite-native-connect-angular.mjs +85 -20
  152. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
  153. package/dist/index.d.ts +33 -3
  154. package/package.json +4 -4
  155. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
  156. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
  157. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
  158. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
  159. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +84 -19
  160. package/src/lib/services/transaction.service.ts +0 -1
  161. package/src/lib/services/unified-wallet.service.ts +0 -1
  162. package/src/lib/services/wallet-providers.service.ts +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>832/832</span>
28
+ <span class='fraction'>0/832</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">81.94% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>59/72</span>
35
+ <span class='fraction'>0/1</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>25/25</span>
42
+ <span class='fraction'>0/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>832/832</span>
49
+ <span class='fraction'>0/832</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line low'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -895,1670 +895,1670 @@
895
895
  <a name='L830'></a><a href='#L830'>830</a>
896
896
  <a name='L831'></a><a href='#L831'>831</a>
897
897
  <a name='L832'></a><a href='#L832'>832</a>
898
- <a name='L833'></a><a href='#L833'>833</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
899
- <span class="cline-any cline-yes">1x</span>
900
- <span class="cline-any cline-yes">1x</span>
901
- <span class="cline-any cline-yes">1x</span>
902
- <span class="cline-any cline-yes">1x</span>
903
- <span class="cline-any cline-yes">1x</span>
904
- <span class="cline-any cline-yes">1x</span>
905
- <span class="cline-any cline-yes">1x</span>
906
- <span class="cline-any cline-yes">1x</span>
907
- <span class="cline-any cline-yes">1x</span>
908
- <span class="cline-any cline-yes">1x</span>
909
- <span class="cline-any cline-yes">1x</span>
910
- <span class="cline-any cline-yes">1x</span>
911
- <span class="cline-any cline-yes">1x</span>
912
- <span class="cline-any cline-yes">1x</span>
913
- <span class="cline-any cline-yes">1x</span>
914
- <span class="cline-any cline-yes">1x</span>
915
- <span class="cline-any cline-yes">1x</span>
916
- <span class="cline-any cline-yes">1x</span>
917
- <span class="cline-any cline-yes">1x</span>
918
- <span class="cline-any cline-yes">1x</span>
919
- <span class="cline-any cline-yes">1x</span>
920
- <span class="cline-any cline-yes">1x</span>
921
- <span class="cline-any cline-yes">1x</span>
922
- <span class="cline-any cline-yes">1x</span>
923
- <span class="cline-any cline-yes">1x</span>
924
- <span class="cline-any cline-yes">1x</span>
925
- <span class="cline-any cline-yes">1x</span>
926
- <span class="cline-any cline-yes">1x</span>
927
- <span class="cline-any cline-yes">1x</span>
928
- <span class="cline-any cline-yes">1x</span>
929
- <span class="cline-any cline-yes">1x</span>
930
- <span class="cline-any cline-yes">1x</span>
931
- <span class="cline-any cline-yes">1x</span>
932
- <span class="cline-any cline-yes">1x</span>
933
- <span class="cline-any cline-yes">1x</span>
934
- <span class="cline-any cline-yes">1x</span>
935
- <span class="cline-any cline-yes">1x</span>
936
- <span class="cline-any cline-yes">1x</span>
937
- <span class="cline-any cline-yes">1x</span>
938
- <span class="cline-any cline-yes">1x</span>
939
- <span class="cline-any cline-yes">1x</span>
940
- <span class="cline-any cline-yes">1x</span>
941
- <span class="cline-any cline-yes">1x</span>
942
- <span class="cline-any cline-yes">1x</span>
943
- <span class="cline-any cline-yes">1x</span>
944
- <span class="cline-any cline-yes">1x</span>
945
- <span class="cline-any cline-yes">1x</span>
946
- <span class="cline-any cline-yes">1x</span>
947
- <span class="cline-any cline-yes">1x</span>
948
- <span class="cline-any cline-yes">1x</span>
949
- <span class="cline-any cline-yes">1x</span>
950
- <span class="cline-any cline-yes">1x</span>
951
- <span class="cline-any cline-yes">1x</span>
952
- <span class="cline-any cline-yes">1x</span>
953
- <span class="cline-any cline-yes">1x</span>
954
- <span class="cline-any cline-yes">1x</span>
955
- <span class="cline-any cline-yes">1x</span>
956
- <span class="cline-any cline-yes">1x</span>
957
- <span class="cline-any cline-yes">1x</span>
958
- <span class="cline-any cline-yes">1x</span>
959
- <span class="cline-any cline-yes">1x</span>
960
- <span class="cline-any cline-yes">1x</span>
961
- <span class="cline-any cline-yes">1x</span>
962
- <span class="cline-any cline-yes">1x</span>
963
- <span class="cline-any cline-yes">1x</span>
964
- <span class="cline-any cline-yes">1x</span>
965
- <span class="cline-any cline-yes">1x</span>
966
- <span class="cline-any cline-yes">1x</span>
967
- <span class="cline-any cline-yes">1x</span>
968
- <span class="cline-any cline-yes">1x</span>
969
- <span class="cline-any cline-yes">1x</span>
970
- <span class="cline-any cline-yes">1x</span>
971
- <span class="cline-any cline-yes">1x</span>
972
- <span class="cline-any cline-yes">1x</span>
973
- <span class="cline-any cline-yes">1x</span>
974
- <span class="cline-any cline-yes">1x</span>
975
- <span class="cline-any cline-yes">1x</span>
976
- <span class="cline-any cline-yes">1x</span>
977
- <span class="cline-any cline-yes">1x</span>
978
- <span class="cline-any cline-yes">1x</span>
979
- <span class="cline-any cline-yes">1x</span>
980
- <span class="cline-any cline-yes">1x</span>
981
- <span class="cline-any cline-yes">1x</span>
982
- <span class="cline-any cline-yes">1x</span>
983
- <span class="cline-any cline-yes">1x</span>
984
- <span class="cline-any cline-yes">1x</span>
985
- <span class="cline-any cline-yes">1x</span>
986
- <span class="cline-any cline-yes">1x</span>
987
- <span class="cline-any cline-yes">1x</span>
988
- <span class="cline-any cline-yes">1x</span>
989
- <span class="cline-any cline-yes">1x</span>
990
- <span class="cline-any cline-yes">1x</span>
991
- <span class="cline-any cline-yes">1x</span>
992
- <span class="cline-any cline-yes">1x</span>
993
- <span class="cline-any cline-yes">1x</span>
994
- <span class="cline-any cline-yes">1x</span>
995
- <span class="cline-any cline-yes">1x</span>
996
- <span class="cline-any cline-yes">1x</span>
997
- <span class="cline-any cline-yes">1x</span>
998
- <span class="cline-any cline-yes">1x</span>
999
- <span class="cline-any cline-yes">1x</span>
1000
- <span class="cline-any cline-yes">1x</span>
1001
- <span class="cline-any cline-yes">1x</span>
1002
- <span class="cline-any cline-yes">1x</span>
1003
- <span class="cline-any cline-yes">1x</span>
1004
- <span class="cline-any cline-yes">1x</span>
1005
- <span class="cline-any cline-yes">1x</span>
1006
- <span class="cline-any cline-yes">1x</span>
1007
- <span class="cline-any cline-yes">1x</span>
1008
- <span class="cline-any cline-yes">1x</span>
1009
- <span class="cline-any cline-yes">1x</span>
1010
- <span class="cline-any cline-yes">1x</span>
1011
- <span class="cline-any cline-yes">1x</span>
1012
- <span class="cline-any cline-yes">1x</span>
1013
- <span class="cline-any cline-yes">1x</span>
1014
- <span class="cline-any cline-yes">6x</span>
1015
- <span class="cline-any cline-yes">6x</span>
1016
- <span class="cline-any cline-yes">6x</span>
1017
- <span class="cline-any cline-yes">6x</span>
1018
- <span class="cline-any cline-yes">6x</span>
1019
- <span class="cline-any cline-yes">6x</span>
1020
- <span class="cline-any cline-yes">6x</span>
1021
- <span class="cline-any cline-yes">6x</span>
1022
- <span class="cline-any cline-yes">6x</span>
1023
- <span class="cline-any cline-yes">6x</span>
1024
- <span class="cline-any cline-yes">6x</span>
1025
- <span class="cline-any cline-yes">6x</span>
1026
- <span class="cline-any cline-yes">6x</span>
1027
- <span class="cline-any cline-yes">2x</span>
1028
- <span class="cline-any cline-yes">2x</span>
1029
- <span class="cline-any cline-yes">2x</span>
1030
- <span class="cline-any cline-yes">2x</span>
1031
- <span class="cline-any cline-yes">2x</span>
1032
- <span class="cline-any cline-yes">4x</span>
1033
- <span class="cline-any cline-yes">6x</span>
1034
- <span class="cline-any cline-yes">6x</span>
1035
- <span class="cline-any cline-yes">6x</span>
1036
- <span class="cline-any cline-yes">6x</span>
1037
- <span class="cline-any cline-yes">1x</span>
1038
- <span class="cline-any cline-yes">1x</span>
1039
- <span class="cline-any cline-yes">1x</span>
1040
- <span class="cline-any cline-yes">1x</span>
1041
- <span class="cline-any cline-yes">1x</span>
1042
- <span class="cline-any cline-yes">1x</span>
1043
- <span class="cline-any cline-yes">1x</span>
1044
- <span class="cline-any cline-yes">1x</span>
1045
- <span class="cline-any cline-yes">1x</span>
1046
- <span class="cline-any cline-yes">1x</span>
1047
- <span class="cline-any cline-yes">1x</span>
1048
- <span class="cline-any cline-yes">1x</span>
1049
- <span class="cline-any cline-yes">1x</span>
1050
- <span class="cline-any cline-yes">1x</span>
1051
- <span class="cline-any cline-yes">1x</span>
1052
- <span class="cline-any cline-yes">1x</span>
1053
- <span class="cline-any cline-yes">1x</span>
1054
- <span class="cline-any cline-yes">5x</span>
1055
- <span class="cline-any cline-yes">5x</span>
1056
- <span class="cline-any cline-yes">5x</span>
1057
- <span class="cline-any cline-yes">5x</span>
1058
- <span class="cline-any cline-yes">5x</span>
1059
- <span class="cline-any cline-yes">5x</span>
1060
- <span class="cline-any cline-yes">5x</span>
1061
- <span class="cline-any cline-yes">5x</span>
1062
- <span class="cline-any cline-yes">5x</span>
1063
- <span class="cline-any cline-yes">5x</span>
1064
- <span class="cline-any cline-yes">5x</span>
1065
- <span class="cline-any cline-yes">5x</span>
1066
- <span class="cline-any cline-yes">5x</span>
1067
- <span class="cline-any cline-yes">5x</span>
1068
- <span class="cline-any cline-yes">5x</span>
1069
- <span class="cline-any cline-yes">5x</span>
1070
- <span class="cline-any cline-yes">5x</span>
1071
- <span class="cline-any cline-yes">1x</span>
1072
- <span class="cline-any cline-yes">1x</span>
1073
- <span class="cline-any cline-yes">1x</span>
1074
- <span class="cline-any cline-yes">1x</span>
1075
- <span class="cline-any cline-yes">1x</span>
1076
- <span class="cline-any cline-yes">1x</span>
1077
- <span class="cline-any cline-yes">1x</span>
1078
- <span class="cline-any cline-yes">1x</span>
1079
- <span class="cline-any cline-yes">1x</span>
1080
- <span class="cline-any cline-yes">3x</span>
1081
- <span class="cline-any cline-yes">3x</span>
1082
- <span class="cline-any cline-yes">3x</span>
1083
- <span class="cline-any cline-yes">3x</span>
1084
- <span class="cline-any cline-yes">3x</span>
1085
- <span class="cline-any cline-yes">3x</span>
1086
- <span class="cline-any cline-yes">3x</span>
1087
- <span class="cline-any cline-yes">3x</span>
1088
- <span class="cline-any cline-yes">3x</span>
1089
- <span class="cline-any cline-yes">3x</span>
1090
- <span class="cline-any cline-yes">3x</span>
1091
- <span class="cline-any cline-yes">3x</span>
1092
- <span class="cline-any cline-yes">3x</span>
1093
- <span class="cline-any cline-yes">1x</span>
1094
- <span class="cline-any cline-yes">1x</span>
1095
- <span class="cline-any cline-yes">1x</span>
1096
- <span class="cline-any cline-yes">1x</span>
1097
- <span class="cline-any cline-yes">1x</span>
1098
- <span class="cline-any cline-yes">1x</span>
1099
- <span class="cline-any cline-yes">1x</span>
1100
- <span class="cline-any cline-yes">1x</span>
1101
- <span class="cline-any cline-yes">1x</span>
1102
- <span class="cline-any cline-yes">1x</span>
1103
- <span class="cline-any cline-yes">1x</span>
1104
- <span class="cline-any cline-yes">1x</span>
1105
- <span class="cline-any cline-yes">1x</span>
1106
- <span class="cline-any cline-yes">1x</span>
1107
- <span class="cline-any cline-yes">1x</span>
1108
- <span class="cline-any cline-yes">1x</span>
1109
- <span class="cline-any cline-yes">1x</span>
1110
- <span class="cline-any cline-yes">1x</span>
1111
- <span class="cline-any cline-yes">1x</span>
1112
- <span class="cline-any cline-yes">1x</span>
1113
- <span class="cline-any cline-yes">1x</span>
1114
- <span class="cline-any cline-yes">1x</span>
1115
- <span class="cline-any cline-yes">1x</span>
1116
- <span class="cline-any cline-yes">1x</span>
1117
- <span class="cline-any cline-yes">1x</span>
1118
- <span class="cline-any cline-yes">1x</span>
1119
- <span class="cline-any cline-yes">1x</span>
1120
- <span class="cline-any cline-yes">1x</span>
1121
- <span class="cline-any cline-yes">1x</span>
1122
- <span class="cline-any cline-yes">1x</span>
1123
- <span class="cline-any cline-yes">1x</span>
1124
- <span class="cline-any cline-yes">4x</span>
1125
- <span class="cline-any cline-yes">4x</span>
1126
- <span class="cline-any cline-yes">4x</span>
1127
- <span class="cline-any cline-yes">4x</span>
1128
- <span class="cline-any cline-yes">4x</span>
1129
- <span class="cline-any cline-yes">4x</span>
1130
- <span class="cline-any cline-yes">4x</span>
1131
- <span class="cline-any cline-yes">4x</span>
1132
- <span class="cline-any cline-yes">4x</span>
1133
- <span class="cline-any cline-yes">4x</span>
1134
- <span class="cline-any cline-yes">4x</span>
1135
- <span class="cline-any cline-yes">4x</span>
1136
- <span class="cline-any cline-yes">4x</span>
1137
- <span class="cline-any cline-yes">4x</span>
1138
- <span class="cline-any cline-yes">4x</span>
1139
- <span class="cline-any cline-yes">4x</span>
1140
- <span class="cline-any cline-yes">4x</span>
1141
- <span class="cline-any cline-yes">4x</span>
1142
- <span class="cline-any cline-yes">4x</span>
1143
- <span class="cline-any cline-yes">1x</span>
1144
- <span class="cline-any cline-yes">1x</span>
1145
- <span class="cline-any cline-yes">1x</span>
1146
- <span class="cline-any cline-yes">1x</span>
1147
- <span class="cline-any cline-yes">1x</span>
1148
- <span class="cline-any cline-yes">1x</span>
1149
- <span class="cline-any cline-yes">1x</span>
1150
- <span class="cline-any cline-yes">1x</span>
1151
- <span class="cline-any cline-yes">1x</span>
1152
- <span class="cline-any cline-yes">1x</span>
1153
- <span class="cline-any cline-yes">1x</span>
1154
- <span class="cline-any cline-yes">1x</span>
1155
- <span class="cline-any cline-yes">1x</span>
1156
- <span class="cline-any cline-yes">1x</span>
1157
- <span class="cline-any cline-yes">2x</span>
1158
- <span class="cline-any cline-yes">2x</span>
1159
- <span class="cline-any cline-yes">2x</span>
1160
- <span class="cline-any cline-yes">2x</span>
1161
- <span class="cline-any cline-yes">2x</span>
1162
- <span class="cline-any cline-yes">2x</span>
1163
- <span class="cline-any cline-yes">2x</span>
1164
- <span class="cline-any cline-yes">2x</span>
1165
- <span class="cline-any cline-yes">2x</span>
1166
- <span class="cline-any cline-yes">2x</span>
1167
- <span class="cline-any cline-yes">2x</span>
1168
- <span class="cline-any cline-yes">2x</span>
1169
- <span class="cline-any cline-yes">2x</span>
1170
- <span class="cline-any cline-yes">2x</span>
1171
- <span class="cline-any cline-yes">2x</span>
1172
- <span class="cline-any cline-yes">2x</span>
1173
- <span class="cline-any cline-yes">2x</span>
1174
- <span class="cline-any cline-yes">1x</span>
1175
- <span class="cline-any cline-yes">1x</span>
1176
- <span class="cline-any cline-yes">1x</span>
1177
- <span class="cline-any cline-yes">1x</span>
1178
- <span class="cline-any cline-yes">1x</span>
1179
- <span class="cline-any cline-yes">1x</span>
1180
- <span class="cline-any cline-yes">1x</span>
1181
- <span class="cline-any cline-yes">1x</span>
1182
- <span class="cline-any cline-yes">1x</span>
1183
- <span class="cline-any cline-yes">1x</span>
1184
- <span class="cline-any cline-yes">1x</span>
1185
- <span class="cline-any cline-yes">1x</span>
1186
- <span class="cline-any cline-yes">1x</span>
1187
- <span class="cline-any cline-yes">1x</span>
1188
- <span class="cline-any cline-yes">1x</span>
1189
- <span class="cline-any cline-yes">1x</span>
1190
- <span class="cline-any cline-yes">1x</span>
1191
- <span class="cline-any cline-yes">1x</span>
1192
- <span class="cline-any cline-yes">1x</span>
1193
- <span class="cline-any cline-yes">1x</span>
1194
- <span class="cline-any cline-yes">1x</span>
1195
- <span class="cline-any cline-yes">1x</span>
1196
- <span class="cline-any cline-yes">1x</span>
1197
- <span class="cline-any cline-yes">1x</span>
1198
- <span class="cline-any cline-yes">1x</span>
1199
- <span class="cline-any cline-yes">1x</span>
1200
- <span class="cline-any cline-yes">1x</span>
1201
- <span class="cline-any cline-yes">1x</span>
1202
- <span class="cline-any cline-yes">1x</span>
1203
- <span class="cline-any cline-yes">1x</span>
1204
- <span class="cline-any cline-yes">1x</span>
1205
- <span class="cline-any cline-yes">1x</span>
1206
- <span class="cline-any cline-yes">1x</span>
1207
- <span class="cline-any cline-yes">1x</span>
1208
- <span class="cline-any cline-yes">1x</span>
1209
- <span class="cline-any cline-yes">1x</span>
1210
- <span class="cline-any cline-yes">1x</span>
1211
- <span class="cline-any cline-yes">1x</span>
1212
- <span class="cline-any cline-yes">1x</span>
1213
- <span class="cline-any cline-yes">1x</span>
1214
- <span class="cline-any cline-yes">1x</span>
1215
- <span class="cline-any cline-yes">1x</span>
1216
- <span class="cline-any cline-yes">1x</span>
1217
- <span class="cline-any cline-yes">1x</span>
1218
- <span class="cline-any cline-yes">1x</span>
1219
- <span class="cline-any cline-yes">1x</span>
1220
- <span class="cline-any cline-yes">1x</span>
1221
- <span class="cline-any cline-yes">1x</span>
1222
- <span class="cline-any cline-yes">1x</span>
1223
- <span class="cline-any cline-yes">1x</span>
1224
- <span class="cline-any cline-yes">1x</span>
1225
- <span class="cline-any cline-yes">1x</span>
1226
- <span class="cline-any cline-yes">1x</span>
1227
- <span class="cline-any cline-yes">1x</span>
1228
- <span class="cline-any cline-yes">1x</span>
1229
- <span class="cline-any cline-yes">1x</span>
1230
- <span class="cline-any cline-yes">1x</span>
1231
- <span class="cline-any cline-yes">1x</span>
1232
- <span class="cline-any cline-yes">1x</span>
1233
- <span class="cline-any cline-yes">1x</span>
1234
- <span class="cline-any cline-yes">1x</span>
1235
- <span class="cline-any cline-yes">1x</span>
1236
- <span class="cline-any cline-yes">1x</span>
1237
- <span class="cline-any cline-yes">1x</span>
1238
- <span class="cline-any cline-yes">1x</span>
1239
- <span class="cline-any cline-yes">1x</span>
1240
- <span class="cline-any cline-yes">1x</span>
1241
- <span class="cline-any cline-yes">1x</span>
1242
- <span class="cline-any cline-yes">1x</span>
1243
- <span class="cline-any cline-yes">1x</span>
1244
- <span class="cline-any cline-yes">1x</span>
1245
- <span class="cline-any cline-yes">1x</span>
1246
- <span class="cline-any cline-yes">1x</span>
1247
- <span class="cline-any cline-yes">1x</span>
1248
- <span class="cline-any cline-yes">1x</span>
1249
- <span class="cline-any cline-yes">1x</span>
1250
- <span class="cline-any cline-yes">1x</span>
1251
- <span class="cline-any cline-yes">1x</span>
1252
- <span class="cline-any cline-yes">1x</span>
1253
- <span class="cline-any cline-yes">1x</span>
1254
- <span class="cline-any cline-yes">1x</span>
1255
- <span class="cline-any cline-yes">1x</span>
1256
- <span class="cline-any cline-yes">1x</span>
1257
- <span class="cline-any cline-yes">1x</span>
1258
- <span class="cline-any cline-yes">1x</span>
1259
- <span class="cline-any cline-yes">1x</span>
1260
- <span class="cline-any cline-yes">1x</span>
1261
- <span class="cline-any cline-yes">1x</span>
1262
- <span class="cline-any cline-yes">1x</span>
1263
- <span class="cline-any cline-yes">1x</span>
1264
- <span class="cline-any cline-yes">1x</span>
1265
- <span class="cline-any cline-yes">2x</span>
1266
- <span class="cline-any cline-yes">2x</span>
1267
- <span class="cline-any cline-yes">2x</span>
1268
- <span class="cline-any cline-yes">2x</span>
1269
- <span class="cline-any cline-yes">2x</span>
1270
- <span class="cline-any cline-yes">2x</span>
1271
- <span class="cline-any cline-yes">2x</span>
1272
- <span class="cline-any cline-yes">2x</span>
1273
- <span class="cline-any cline-yes">2x</span>
1274
- <span class="cline-any cline-yes">2x</span>
1275
- <span class="cline-any cline-yes">2x</span>
1276
- <span class="cline-any cline-yes">2x</span>
1277
- <span class="cline-any cline-yes">2x</span>
1278
- <span class="cline-any cline-yes">1x</span>
1279
- <span class="cline-any cline-yes">1x</span>
1280
- <span class="cline-any cline-yes">1x</span>
1281
- <span class="cline-any cline-yes">1x</span>
1282
- <span class="cline-any cline-yes">1x</span>
1283
- <span class="cline-any cline-yes">1x</span>
1284
- <span class="cline-any cline-yes">1x</span>
1285
- <span class="cline-any cline-yes">1x</span>
1286
- <span class="cline-any cline-yes">1x</span>
1287
- <span class="cline-any cline-yes">1x</span>
1288
- <span class="cline-any cline-yes">1x</span>
1289
- <span class="cline-any cline-yes">1x</span>
1290
- <span class="cline-any cline-yes">1x</span>
1291
- <span class="cline-any cline-yes">1x</span>
1292
- <span class="cline-any cline-yes">1x</span>
1293
- <span class="cline-any cline-yes">1x</span>
1294
- <span class="cline-any cline-yes">1x</span>
1295
- <span class="cline-any cline-yes">1x</span>
1296
- <span class="cline-any cline-yes">1x</span>
1297
- <span class="cline-any cline-yes">1x</span>
1298
- <span class="cline-any cline-yes">1x</span>
1299
- <span class="cline-any cline-yes">1x</span>
1300
- <span class="cline-any cline-yes">1x</span>
1301
- <span class="cline-any cline-yes">1x</span>
1302
- <span class="cline-any cline-yes">1x</span>
1303
- <span class="cline-any cline-yes">1x</span>
1304
- <span class="cline-any cline-yes">1x</span>
1305
- <span class="cline-any cline-yes">1x</span>
1306
- <span class="cline-any cline-yes">4x</span>
1307
- <span class="cline-any cline-yes">4x</span>
1308
- <span class="cline-any cline-yes">4x</span>
1309
- <span class="cline-any cline-yes">4x</span>
1310
- <span class="cline-any cline-yes">4x</span>
1311
- <span class="cline-any cline-yes">4x</span>
1312
- <span class="cline-any cline-yes">4x</span>
1313
- <span class="cline-any cline-yes">4x</span>
1314
- <span class="cline-any cline-yes">4x</span>
1315
- <span class="cline-any cline-yes">4x</span>
1316
- <span class="cline-any cline-yes">4x</span>
1317
- <span class="cline-any cline-yes">4x</span>
1318
- <span class="cline-any cline-yes">4x</span>
1319
- <span class="cline-any cline-yes">4x</span>
1320
- <span class="cline-any cline-yes">4x</span>
1321
- <span class="cline-any cline-yes">1x</span>
1322
- <span class="cline-any cline-yes">1x</span>
1323
- <span class="cline-any cline-yes">1x</span>
1324
- <span class="cline-any cline-yes">1x</span>
1325
- <span class="cline-any cline-yes">1x</span>
1326
- <span class="cline-any cline-yes">1x</span>
1327
- <span class="cline-any cline-yes">1x</span>
1328
- <span class="cline-any cline-yes">1x</span>
1329
- <span class="cline-any cline-yes">1x</span>
1330
- <span class="cline-any cline-yes">1x</span>
1331
- <span class="cline-any cline-yes">1x</span>
1332
- <span class="cline-any cline-yes">1x</span>
1333
- <span class="cline-any cline-yes">1x</span>
1334
- <span class="cline-any cline-yes">1x</span>
1335
- <span class="cline-any cline-yes">1x</span>
1336
- <span class="cline-any cline-yes">1x</span>
1337
- <span class="cline-any cline-yes">1x</span>
1338
- <span class="cline-any cline-yes">1x</span>
1339
- <span class="cline-any cline-yes">1x</span>
1340
- <span class="cline-any cline-yes">1x</span>
1341
- <span class="cline-any cline-yes">1x</span>
1342
- <span class="cline-any cline-yes">1x</span>
1343
- <span class="cline-any cline-yes">1x</span>
1344
- <span class="cline-any cline-yes">1x</span>
1345
- <span class="cline-any cline-yes">1x</span>
1346
- <span class="cline-any cline-yes">3x</span>
1347
- <span class="cline-any cline-yes">3x</span>
1348
- <span class="cline-any cline-yes">3x</span>
1349
- <span class="cline-any cline-yes">3x</span>
1350
- <span class="cline-any cline-yes">3x</span>
1351
- <span class="cline-any cline-yes">3x</span>
1352
- <span class="cline-any cline-yes">3x</span>
1353
- <span class="cline-any cline-yes">3x</span>
1354
- <span class="cline-any cline-yes">3x</span>
1355
- <span class="cline-any cline-yes">3x</span>
1356
- <span class="cline-any cline-yes">3x</span>
1357
- <span class="cline-any cline-yes">3x</span>
1358
- <span class="cline-any cline-yes">3x</span>
1359
- <span class="cline-any cline-yes">1x</span>
1360
- <span class="cline-any cline-yes">1x</span>
1361
- <span class="cline-any cline-yes">1x</span>
1362
- <span class="cline-any cline-yes">1x</span>
1363
- <span class="cline-any cline-yes">1x</span>
1364
- <span class="cline-any cline-yes">1x</span>
1365
- <span class="cline-any cline-yes">1x</span>
1366
- <span class="cline-any cline-yes">1x</span>
1367
- <span class="cline-any cline-yes">1x</span>
1368
- <span class="cline-any cline-yes">3x</span>
1369
- <span class="cline-any cline-yes">3x</span>
1370
- <span class="cline-any cline-yes">3x</span>
1371
- <span class="cline-any cline-yes">3x</span>
1372
- <span class="cline-any cline-yes">3x</span>
1373
- <span class="cline-any cline-yes">3x</span>
1374
- <span class="cline-any cline-yes">3x</span>
1375
- <span class="cline-any cline-yes">3x</span>
1376
- <span class="cline-any cline-yes">3x</span>
1377
- <span class="cline-any cline-yes">5x</span>
1378
- <span class="cline-any cline-yes">5x</span>
1379
- <span class="cline-any cline-yes">5x</span>
1380
- <span class="cline-any cline-yes">5x</span>
1381
- <span class="cline-any cline-yes">3x</span>
1382
- <span class="cline-any cline-yes">3x</span>
1383
- <span class="cline-any cline-yes">3x</span>
1384
- <span class="cline-any cline-yes">3x</span>
1385
- <span class="cline-any cline-yes">3x</span>
1386
- <span class="cline-any cline-yes">1x</span>
1387
- <span class="cline-any cline-yes">1x</span>
1388
- <span class="cline-any cline-yes">1x</span>
1389
- <span class="cline-any cline-yes">1x</span>
1390
- <span class="cline-any cline-yes">1x</span>
1391
- <span class="cline-any cline-yes">1x</span>
1392
- <span class="cline-any cline-yes">1x</span>
1393
- <span class="cline-any cline-yes">1x</span>
1394
- <span class="cline-any cline-yes">3x</span>
1395
- <span class="cline-any cline-yes">3x</span>
1396
- <span class="cline-any cline-yes">3x</span>
1397
- <span class="cline-any cline-yes">3x</span>
1398
- <span class="cline-any cline-yes">3x</span>
1399
- <span class="cline-any cline-yes">3x</span>
1400
- <span class="cline-any cline-yes">3x</span>
1401
- <span class="cline-any cline-yes">3x</span>
1402
- <span class="cline-any cline-yes">1x</span>
1403
- <span class="cline-any cline-yes">1x</span>
1404
- <span class="cline-any cline-yes">1x</span>
1405
- <span class="cline-any cline-yes">1x</span>
1406
- <span class="cline-any cline-yes">1x</span>
1407
- <span class="cline-any cline-yes">1x</span>
1408
- <span class="cline-any cline-yes">1x</span>
1409
- <span class="cline-any cline-yes">1x</span>
1410
- <span class="cline-any cline-yes">1x</span>
1411
- <span class="cline-any cline-yes">1x</span>
1412
- <span class="cline-any cline-yes">1x</span>
1413
- <span class="cline-any cline-yes">5x</span>
1414
- <span class="cline-any cline-yes">5x</span>
1415
- <span class="cline-any cline-yes">5x</span>
1416
- <span class="cline-any cline-yes">5x</span>
1417
- <span class="cline-any cline-yes">5x</span>
1418
- <span class="cline-any cline-yes">5x</span>
1419
- <span class="cline-any cline-yes">5x</span>
1420
- <span class="cline-any cline-yes">5x</span>
1421
- <span class="cline-any cline-yes">5x</span>
1422
- <span class="cline-any cline-yes">5x</span>
1423
- <span class="cline-any cline-yes">5x</span>
1424
- <span class="cline-any cline-yes">5x</span>
1425
- <span class="cline-any cline-yes">5x</span>
1426
- <span class="cline-any cline-yes">5x</span>
1427
- <span class="cline-any cline-yes">5x</span>
1428
- <span class="cline-any cline-yes">5x</span>
1429
- <span class="cline-any cline-yes">5x</span>
1430
- <span class="cline-any cline-yes">1x</span>
1431
- <span class="cline-any cline-yes">1x</span>
1432
- <span class="cline-any cline-yes">1x</span>
1433
- <span class="cline-any cline-yes">1x</span>
1434
- <span class="cline-any cline-yes">1x</span>
1435
- <span class="cline-any cline-yes">1x</span>
1436
- <span class="cline-any cline-yes">1x</span>
1437
- <span class="cline-any cline-yes">1x</span>
1438
- <span class="cline-any cline-yes">1x</span>
1439
- <span class="cline-any cline-yes">1x</span>
1440
- <span class="cline-any cline-yes">1x</span>
1441
- <span class="cline-any cline-yes">1x</span>
1442
- <span class="cline-any cline-yes">1x</span>
1443
- <span class="cline-any cline-yes">1x</span>
1444
- <span class="cline-any cline-yes">1x</span>
1445
- <span class="cline-any cline-yes">1x</span>
1446
- <span class="cline-any cline-yes">1x</span>
1447
- <span class="cline-any cline-yes">1x</span>
1448
- <span class="cline-any cline-yes">1x</span>
1449
- <span class="cline-any cline-yes">1x</span>
1450
- <span class="cline-any cline-yes">1x</span>
1451
- <span class="cline-any cline-yes">1x</span>
1452
- <span class="cline-any cline-yes">1x</span>
1453
- <span class="cline-any cline-yes">1x</span>
1454
- <span class="cline-any cline-yes">1x</span>
1455
- <span class="cline-any cline-yes">1x</span>
1456
- <span class="cline-any cline-yes">1x</span>
1457
- <span class="cline-any cline-yes">3x</span>
1458
- <span class="cline-any cline-yes">3x</span>
1459
- <span class="cline-any cline-yes">3x</span>
1460
- <span class="cline-any cline-yes">3x</span>
1461
- <span class="cline-any cline-yes">3x</span>
1462
- <span class="cline-any cline-yes">3x</span>
1463
- <span class="cline-any cline-yes">3x</span>
1464
- <span class="cline-any cline-yes">3x</span>
1465
- <span class="cline-any cline-yes">3x</span>
1466
- <span class="cline-any cline-yes">3x</span>
1467
- <span class="cline-any cline-yes">3x</span>
1468
- <span class="cline-any cline-yes">3x</span>
1469
- <span class="cline-any cline-yes">3x</span>
1470
- <span class="cline-any cline-yes">3x</span>
1471
- <span class="cline-any cline-yes">3x</span>
1472
- <span class="cline-any cline-yes">3x</span>
1473
- <span class="cline-any cline-yes">3x</span>
1474
- <span class="cline-any cline-yes">1x</span>
1475
- <span class="cline-any cline-yes">1x</span>
1476
- <span class="cline-any cline-yes">1x</span>
1477
- <span class="cline-any cline-yes">1x</span>
1478
- <span class="cline-any cline-yes">1x</span>
1479
- <span class="cline-any cline-yes">1x</span>
1480
- <span class="cline-any cline-yes">1x</span>
1481
- <span class="cline-any cline-yes">1x</span>
1482
- <span class="cline-any cline-yes">1x</span>
1483
- <span class="cline-any cline-yes">3x</span>
1484
- <span class="cline-any cline-yes">3x</span>
1485
- <span class="cline-any cline-yes">3x</span>
1486
- <span class="cline-any cline-yes">3x</span>
1487
- <span class="cline-any cline-yes">3x</span>
1488
- <span class="cline-any cline-yes">3x</span>
1489
- <span class="cline-any cline-yes">3x</span>
1490
- <span class="cline-any cline-yes">3x</span>
1491
- <span class="cline-any cline-yes">3x</span>
1492
- <span class="cline-any cline-yes">3x</span>
1493
- <span class="cline-any cline-yes">3x</span>
1494
- <span class="cline-any cline-yes">3x</span>
1495
- <span class="cline-any cline-yes">3x</span>
1496
- <span class="cline-any cline-yes">1x</span>
1497
- <span class="cline-any cline-yes">1x</span>
1498
- <span class="cline-any cline-yes">1x</span>
1499
- <span class="cline-any cline-yes">1x</span>
1500
- <span class="cline-any cline-yes">1x</span>
1501
- <span class="cline-any cline-yes">1x</span>
1502
- <span class="cline-any cline-yes">1x</span>
1503
- <span class="cline-any cline-yes">1x</span>
1504
- <span class="cline-any cline-yes">2x</span>
1505
- <span class="cline-any cline-yes">2x</span>
1506
- <span class="cline-any cline-yes">2x</span>
1507
- <span class="cline-any cline-yes">2x</span>
1508
- <span class="cline-any cline-yes">2x</span>
1509
- <span class="cline-any cline-yes">2x</span>
1510
- <span class="cline-any cline-yes">2x</span>
1511
- <span class="cline-any cline-yes">2x</span>
1512
- <span class="cline-any cline-yes">1x</span>
1513
- <span class="cline-any cline-yes">1x</span>
1514
- <span class="cline-any cline-yes">1x</span>
1515
- <span class="cline-any cline-yes">1x</span>
1516
- <span class="cline-any cline-yes">1x</span>
1517
- <span class="cline-any cline-yes">1x</span>
1518
- <span class="cline-any cline-yes">1x</span>
1519
- <span class="cline-any cline-yes">1x</span>
1520
- <span class="cline-any cline-yes">7x</span>
1521
- <span class="cline-any cline-yes">7x</span>
1522
- <span class="cline-any cline-yes">7x</span>
1523
- <span class="cline-any cline-yes">7x</span>
1524
- <span class="cline-any cline-yes">7x</span>
1525
- <span class="cline-any cline-yes">7x</span>
1526
- <span class="cline-any cline-yes">7x</span>
1527
- <span class="cline-any cline-yes">7x</span>
1528
- <span class="cline-any cline-yes">7x</span>
1529
- <span class="cline-any cline-yes">7x</span>
1530
- <span class="cline-any cline-yes">7x</span>
1531
- <span class="cline-any cline-yes">7x</span>
1532
- <span class="cline-any cline-yes">7x</span>
1533
- <span class="cline-any cline-yes">10x</span>
1534
- <span class="cline-any cline-yes">10x</span>
1535
- <span class="cline-any cline-yes">10x</span>
1536
- <span class="cline-any cline-yes">10x</span>
1537
- <span class="cline-any cline-yes">7x</span>
1538
- <span class="cline-any cline-yes">7x</span>
1539
- <span class="cline-any cline-yes">7x</span>
1540
- <span class="cline-any cline-yes">7x</span>
1541
- <span class="cline-any cline-yes">7x</span>
1542
- <span class="cline-any cline-yes">7x</span>
1543
- <span class="cline-any cline-yes">7x</span>
1544
- <span class="cline-any cline-yes">7x</span>
1545
- <span class="cline-any cline-yes">7x</span>
1546
- <span class="cline-any cline-yes">7x</span>
1547
- <span class="cline-any cline-yes">7x</span>
1548
- <span class="cline-any cline-yes">7x</span>
1549
- <span class="cline-any cline-yes">1x</span>
1550
- <span class="cline-any cline-yes">1x</span>
1551
- <span class="cline-any cline-yes">1x</span>
1552
- <span class="cline-any cline-yes">1x</span>
1553
- <span class="cline-any cline-yes">1x</span>
1554
- <span class="cline-any cline-yes">1x</span>
1555
- <span class="cline-any cline-yes">7x</span>
1556
- <span class="cline-any cline-yes">10x</span>
1557
- <span class="cline-any cline-yes">10x</span>
1558
- <span class="cline-any cline-yes">1x</span>
1559
- <span class="cline-any cline-yes">1x</span>
1560
- <span class="cline-any cline-yes">1x</span>
1561
- <span class="cline-any cline-yes">1x</span>
1562
- <span class="cline-any cline-yes">1x</span>
1563
- <span class="cline-any cline-yes">1x</span>
1564
- <span class="cline-any cline-yes">1x</span>
1565
- <span class="cline-any cline-yes">1x</span>
1566
- <span class="cline-any cline-yes">1x</span>
1567
- <span class="cline-any cline-yes">1x</span>
1568
- <span class="cline-any cline-yes">1x</span>
1569
- <span class="cline-any cline-yes">1x</span>
1570
- <span class="cline-any cline-yes">1x</span>
1571
- <span class="cline-any cline-yes">1x</span>
1572
- <span class="cline-any cline-yes">10x</span>
1573
- <span class="cline-any cline-yes">10x</span>
1574
- <span class="cline-any cline-yes">1x</span>
1575
- <span class="cline-any cline-yes">1x</span>
1576
- <span class="cline-any cline-yes">1x</span>
1577
- <span class="cline-any cline-yes">1x</span>
1578
- <span class="cline-any cline-yes">1x</span>
1579
- <span class="cline-any cline-yes">1x</span>
1580
- <span class="cline-any cline-yes">1x</span>
1581
- <span class="cline-any cline-yes">1x</span>
1582
- <span class="cline-any cline-yes">1x</span>
1583
- <span class="cline-any cline-yes">1x</span>
1584
- <span class="cline-any cline-yes">10x</span>
1585
- <span class="cline-any cline-yes">10x</span>
1586
- <span class="cline-any cline-yes">1x</span>
1587
- <span class="cline-any cline-yes">1x</span>
1588
- <span class="cline-any cline-yes">1x</span>
1589
- <span class="cline-any cline-yes">1x</span>
1590
- <span class="cline-any cline-yes">1x</span>
1591
- <span class="cline-any cline-yes">1x</span>
1592
- <span class="cline-any cline-yes">1x</span>
1593
- <span class="cline-any cline-yes">1x</span>
1594
- <span class="cline-any cline-yes">1x</span>
1595
- <span class="cline-any cline-yes">1x</span>
1596
- <span class="cline-any cline-yes">10x</span>
1597
- <span class="cline-any cline-yes">10x</span>
1598
- <span class="cline-any cline-yes">10x</span>
1599
- <span class="cline-any cline-yes">7x</span>
1600
- <span class="cline-any cline-yes">7x</span>
1601
- <span class="cline-any cline-yes">7x</span>
1602
- <span class="cline-any cline-yes">7x</span>
1603
- <span class="cline-any cline-yes">7x</span>
1604
- <span class="cline-any cline-yes">7x</span>
1605
- <span class="cline-any cline-yes">7x</span>
1606
- <span class="cline-any cline-yes">7x</span>
1607
- <span class="cline-any cline-yes">7x</span>
1608
- <span class="cline-any cline-yes">7x</span>
1609
- <span class="cline-any cline-yes">7x</span>
1610
- <span class="cline-any cline-yes">1x</span>
1611
- <span class="cline-any cline-yes">1x</span>
1612
- <span class="cline-any cline-yes">1x</span>
1613
- <span class="cline-any cline-yes">1x</span>
1614
- <span class="cline-any cline-yes">1x</span>
1615
- <span class="cline-any cline-yes">1x</span>
1616
- <span class="cline-any cline-yes">1x</span>
1617
- <span class="cline-any cline-yes">1x</span>
1618
- <span class="cline-any cline-yes">7x</span>
1619
- <span class="cline-any cline-yes">7x</span>
1620
- <span class="cline-any cline-yes">7x</span>
1621
- <span class="cline-any cline-yes">7x</span>
1622
- <span class="cline-any cline-yes">7x</span>
1623
- <span class="cline-any cline-yes">7x</span>
1624
- <span class="cline-any cline-yes">7x</span>
1625
- <span class="cline-any cline-yes">7x</span>
1626
- <span class="cline-any cline-yes">7x</span>
1627
- <span class="cline-any cline-yes">7x</span>
1628
- <span class="cline-any cline-yes">7x</span>
1629
- <span class="cline-any cline-yes">7x</span>
1630
- <span class="cline-any cline-yes">7x</span>
1631
- <span class="cline-any cline-yes">7x</span>
1632
- <span class="cline-any cline-yes">7x</span>
1633
- <span class="cline-any cline-yes">9x</span>
1634
- <span class="cline-any cline-yes">9x</span>
1635
- <span class="cline-any cline-yes">9x</span>
1636
- <span class="cline-any cline-yes">9x</span>
1637
- <span class="cline-any cline-yes">9x</span>
1638
- <span class="cline-any cline-yes">9x</span>
1639
- <span class="cline-any cline-yes">4x</span>
1640
- <span class="cline-any cline-yes">1x</span>
1641
- <span class="cline-any cline-yes">1x</span>
1642
- <span class="cline-any cline-yes">1x</span>
1643
- <span class="cline-any cline-yes">1x</span>
1644
- <span class="cline-any cline-yes">1x</span>
1645
- <span class="cline-any cline-yes">1x</span>
1646
- <span class="cline-any cline-yes">1x</span>
1647
- <span class="cline-any cline-yes">1x</span>
1648
- <span class="cline-any cline-yes">1x</span>
1649
- <span class="cline-any cline-yes">1x</span>
1650
- <span class="cline-any cline-yes">1x</span>
1651
- <span class="cline-any cline-yes">1x</span>
1652
- <span class="cline-any cline-yes">1x</span>
1653
- <span class="cline-any cline-yes">1x</span>
1654
- <span class="cline-any cline-yes">1x</span>
1655
- <span class="cline-any cline-yes">4x</span>
1656
- <span class="cline-any cline-yes">3x</span>
1657
- <span class="cline-any cline-yes">3x</span>
1658
- <span class="cline-any cline-yes">3x</span>
1659
- <span class="cline-any cline-yes">3x</span>
1660
- <span class="cline-any cline-yes">3x</span>
1661
- <span class="cline-any cline-yes">3x</span>
1662
- <span class="cline-any cline-yes">3x</span>
1663
- <span class="cline-any cline-yes">3x</span>
1664
- <span class="cline-any cline-yes">3x</span>
1665
- <span class="cline-any cline-yes">3x</span>
1666
- <span class="cline-any cline-yes">3x</span>
1667
- <span class="cline-any cline-yes">3x</span>
1668
- <span class="cline-any cline-yes">4x</span>
1669
- <span class="cline-any cline-yes">9x</span>
1670
- <span class="cline-any cline-yes">9x</span>
1671
- <span class="cline-any cline-yes">2x</span>
1672
- <span class="cline-any cline-yes">2x</span>
1673
- <span class="cline-any cline-yes">2x</span>
1674
- <span class="cline-any cline-yes">2x</span>
1675
- <span class="cline-any cline-yes">2x</span>
1676
- <span class="cline-any cline-yes">2x</span>
1677
- <span class="cline-any cline-yes">2x</span>
1678
- <span class="cline-any cline-yes">2x</span>
1679
- <span class="cline-any cline-yes">2x</span>
1680
- <span class="cline-any cline-yes">2x</span>
1681
- <span class="cline-any cline-yes">2x</span>
1682
- <span class="cline-any cline-yes">2x</span>
1683
- <span class="cline-any cline-yes">2x</span>
1684
- <span class="cline-any cline-yes">2x</span>
1685
- <span class="cline-any cline-yes">2x</span>
1686
- <span class="cline-any cline-yes">9x</span>
1687
- <span class="cline-any cline-yes">9x</span>
1688
- <span class="cline-any cline-yes">2x</span>
1689
- <span class="cline-any cline-yes">2x</span>
1690
- <span class="cline-any cline-yes">2x</span>
1691
- <span class="cline-any cline-yes">2x</span>
1692
- <span class="cline-any cline-yes">2x</span>
1693
- <span class="cline-any cline-yes">2x</span>
1694
- <span class="cline-any cline-yes">2x</span>
1695
- <span class="cline-any cline-yes">2x</span>
1696
- <span class="cline-any cline-yes">2x</span>
1697
- <span class="cline-any cline-yes">2x</span>
1698
- <span class="cline-any cline-yes">2x</span>
1699
- <span class="cline-any cline-yes">2x</span>
1700
- <span class="cline-any cline-yes">9x</span>
1701
- <span class="cline-any cline-yes">9x</span>
1702
- <span class="cline-any cline-yes">1x</span>
1703
- <span class="cline-any cline-yes">9x</span>
1704
- <span class="cline-any cline-yes">8x</span>
1705
- <span class="cline-any cline-yes">8x</span>
1706
- <span class="cline-any cline-yes">8x</span>
1707
- <span class="cline-any cline-yes">8x</span>
1708
- <span class="cline-any cline-yes">8x</span>
1709
- <span class="cline-any cline-yes">8x</span>
1710
- <span class="cline-any cline-yes">6x</span>
1711
- <span class="cline-any cline-yes">6x</span>
1712
- <span class="cline-any cline-yes">7x</span>
1713
- <span class="cline-any cline-yes">1x</span>
1714
- <span class="cline-any cline-yes">1x</span>
1715
- <span class="cline-any cline-yes">1x</span>
1716
- <span class="cline-any cline-yes">1x</span>
1717
- <span class="cline-any cline-yes">1x</span>
1718
- <span class="cline-any cline-yes">1x</span>
1719
- <span class="cline-any cline-yes">1x</span>
1720
- <span class="cline-any cline-yes">1x</span>
1721
- <span class="cline-any cline-yes">1x</span>
1722
- <span class="cline-any cline-yes">1x</span>
1723
- <span class="cline-any cline-yes">1x</span>
1724
- <span class="cline-any cline-yes">1x</span>
1725
- <span class="cline-any cline-yes">1x</span>
1726
- <span class="cline-any cline-yes">63x</span>
1727
- <span class="cline-any cline-yes">63x</span>
1728
- <span class="cline-any cline-yes">63x</span>
1729
- <span class="cline-any cline-yes">1x</span>
1730
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1731
- * HSuite Native Connect
1732
- * Copyright 2024-2025 HSuite (https://hsuite.finance)
1733
- *
1734
- * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
1735
- *
1736
- * This file is part of HSuite Native Connect. For commercial licensing,
1737
- * visit https://hsuite.finance/licensing
1738
- */
1739
- &nbsp;
1740
- /**
1741
- * @file Service for building XRPL (Ripple) transactions using the xrpl package.
1742
- *
1743
- * @module services/transaction-builders/xrpl
1744
- *
1745
- * @description
1746
- * XrplTransactionBuilderService provides methods to construct various XRPL transaction
1747
- * types and serialize them to base64 payloads ready for signing. It supports all major
1748
- * XRPL transaction types including payments, trust lines, DEX orders, escrows, payment
1749
- * channels, checks, and NFTs.
1750
- *
1751
- * **Supported Transaction Types:**
1752
- * - Payment - XRP and token transfers
1753
- * - TrustSet - Trust line creation/modification
1754
- * - OfferCreate/Cancel - DEX order management
1755
- * - AccountSet - Account configuration
1756
- * - EscrowCreate/Finish/Cancel - Escrow operations
1757
- * - PaymentChannel operations - Payment channels
1758
- * - Check operations - XRPL checks
1759
- * - DepositPreauth - Deposit preauthorization
1760
- * - SignerListSet - Multi-signature configuration
1761
- * - TicketCreate - Ticket creation
1762
- * - NFT operations - NFTokenMint, Burn, CreateOffer, etc.
1763
- * - Batch transactions - Multiple operations atomically
1764
- *
1765
- * **Amount Format:**
1766
- * - XRP amounts are in "drops" (1 XRP = 1,000,000 drops)
1767
- * - Token amounts use the IssuedCurrency format { currency, issuer, value }
1768
- */
1769
- &nbsp;
1770
- import { Injectable } from '@angular/core';
1771
- import type {
1772
- Payment,
1773
- TrustSet,
1774
- OfferCreate,
1775
- OfferCancel,
1776
- AccountSet,
1777
- EscrowCreate,
1778
- EscrowFinish,
1779
- EscrowCancel,
1780
- PaymentChannelCreate,
1781
- PaymentChannelFund,
1782
- PaymentChannelClaim,
1783
- CheckCreate,
1784
- CheckCash,
1785
- CheckCancel,
1786
- DepositPreauth,
1787
- SignerListSet,
1788
- TicketCreate,
1789
- NFTokenMint,
1790
- NFTokenBurn,
1791
- NFTokenCreateOffer,
1792
- NFTokenAcceptOffer,
1793
- NFTokenCancelOffer,
1794
- Transaction,
1795
- } from 'xrpl';
1796
- &nbsp;
1797
- /**
1798
- * Service for building XRPL (Ripple) transactions using the xrpl package.
1799
- *
1800
- * @service XrplTransactionBuilderService
1801
- *
1802
- * @description
1803
- * Provides methods to construct various XRPL transaction types and serialize them
1804
- * to base64 payloads ready for signing. All build methods return a base64-encoded
1805
- * JSON representation of the transaction.
1806
- *
1807
- * Unlike Hedera transactions which are frozen with a client, XRPL transactions
1808
- * are serialized as JSON and can be signed without network connection.
1809
- *
1810
- * @providedIn root
1811
- *
1812
- * @Component({ ... })
1813
- * export class SendPage {
1814
- * private builder = inject(XrplTransactionBuilderService);
1815
- * private wallet = inject(UnifiedWalletService);
1816
- *
1817
- * async sendXrp(to: string, drops: string) {
1818
- * const from = this.wallet.activeAccount()?.address;
1819
- * const payload = await this.builder.buildPayment(from!, to, drops);
1820
- * return this.wallet.submitTransaction({ payload });
1821
- * }
1822
- * }
1823
- * ```
1824
- */
1825
- @Injectable({
1826
- providedIn: 'root',
1827
- })
1828
- export class XrplTransactionBuilderService {
1829
- /**
1830
- * Builds a Payment transaction (XRP or token).
1831
- *
1832
- * @description
1833
- * Creates a Payment transaction that sends XRP or issued currency tokens
1834
- * from one account to another. For XRP, the amount is in drops (1 XRP = 1,000,000 drops).
1835
- *
1836
- * @param account - Source account address (r...)
1837
- * @param destination - Destination account address (r...)
1838
- * @param amount - Amount (XRP in drops, or token value string)
1839
- * @param isToken - Whether this is a token payment (default: false)
1840
- * @param currency - Token currency code (required if isToken)
1841
- * @param issuer - Token issuer address (required if isToken)
1842
- *
1843
- * @returns Base64 encoded transaction JSON
1844
- */
1845
- async buildPayment(
1846
- account: string,
1847
- destination: string,
1848
- amount: string,
1849
- isToken = false,
1850
- currency?: string,
1851
- issuer?: string,
1852
- ): Promise&lt;string&gt; {
1853
- const tx: Payment = {
1854
- TransactionType: 'Payment',
1855
- Account: account,
1856
- Destination: destination,
1857
- Amount:
1858
- isToken &amp;&amp; currency &amp;&amp; issuer
1859
- ? {
1860
- currency,
1861
- issuer,
1862
- value: amount,
1863
- }
1864
- : amount,
1865
- };
1866
- &nbsp;
1867
- return this.serializeTransaction(tx);
1868
- }
1869
- &nbsp;
1870
- /**
1871
- * Builds a TrustSet transaction to establish or modify a trust line.
1872
- *
1873
- * @description
1874
- * Creates a TrustSet transaction that establishes a trust line between
1875
- * your account and a token issuer. Trust lines are required before you
1876
- * can hold issued currency tokens on XRPL.
1877
- *
1878
- * @param account - Your account address (r...)
1879
- * @param currency - Currency code (e.g., 'USD', 'EUR', or hex code)
1880
- * @param issuer - Token issuer address (r...)
1881
- * @param limit - Maximum amount willing to hold (e.g., '1000000')
1882
- *
1883
- * @returns Base64 encoded transaction JSON
1884
- */
1885
- async buildTrustSet(
1886
- account: string,
1887
- currency: string,
1888
- issuer: string,
1889
- limit: string,
1890
- ): Promise&lt;string&gt; {
1891
- const tx: TrustSet = {
1892
- TransactionType: 'TrustSet',
1893
- Account: account,
1894
- LimitAmount: {
1895
- currency,
1896
- issuer,
1897
- value: limit,
1898
- },
1899
- };
1900
- &nbsp;
1901
- return this.serializeTransaction(tx);
1902
- }
1903
- &nbsp;
1904
- /**
1905
- * Build an OfferCreate transaction (DEX order)
1906
- * @param account - Account address
1907
- * @param takerPays - What taker pays (amount object or XRP drops)
1908
- * @param takerGets - What taker gets (amount object or XRP drops)
1909
- * @returns Base64 encoded transaction
1910
- */
1911
- async buildOfferCreate(
1912
- account: string,
1913
- takerPays: string | { currency: string; issuer: string; value: string },
1914
- takerGets: string | { currency: string; issuer: string; value: string },
1915
- ): Promise&lt;string&gt; {
1916
- const tx: OfferCreate = {
1917
- TransactionType: 'OfferCreate',
1918
- Account: account,
1919
- TakerPays: takerPays,
1920
- TakerGets: takerGets,
1921
- };
1922
- &nbsp;
1923
- return this.serializeTransaction(tx);
1924
- }
1925
- &nbsp;
1926
- /**
1927
- * Build an OfferCancel transaction
1928
- * @param account - Account address
1929
- * @param offerSequence - Sequence number of the offer to cancel
1930
- * @returns Base64 encoded transaction
1931
- */
1932
- async buildOfferCancel(account: string, offerSequence: number): Promise&lt;string&gt; {
1933
- const tx: OfferCancel = {
1934
- TransactionType: 'OfferCancel',
1935
- Account: account,
1936
- OfferSequence: offerSequence,
1937
- };
1938
- &nbsp;
1939
- return this.serializeTransaction(tx);
1940
- }
1941
- &nbsp;
1942
- /**
1943
- * Build an AccountSet transaction
1944
- * @param account - Account address
1945
- * @param options - Account set options (domain, emailHash, flags, etc.)
1946
- * @param options.domain
1947
- * @param options.emailHash
1948
- * @param options.messageKey
1949
- * @param options.transferRate
1950
- * @param options.tickSize
1951
- * @param options.setFlag
1952
- * @param options.clearFlag
1953
- * @returns Base64 encoded transaction
1954
- */
1955
- async buildAccountSet(
1956
- account: string,
1957
- options: {
1958
- domain?: string;
1959
- emailHash?: string;
1960
- messageKey?: string;
1961
- transferRate?: number;
1962
- tickSize?: number;
1963
- setFlag?: number;
1964
- clearFlag?: number;
1965
- },
1966
- ): Promise&lt;string&gt; {
1967
- const tx: AccountSet = {
1968
- TransactionType: 'AccountSet',
1969
- Account: account,
1970
- ...options,
1971
- };
1972
- &nbsp;
1973
- return this.serializeTransaction(tx);
1974
- }
1975
- &nbsp;
1976
- /**
1977
- * Build an EscrowCreate transaction
1978
- * @param account - Account address
1979
- * @param destination - Destination account
1980
- * @param amount - Amount in drops
1981
- * @param finishAfter - Ripple Epoch (seconds since 2000-01-01 UTC). Callers
1982
- * that hold Unix timestamps must convert first; an unmodified Unix value
1983
- * would put the escrow ~30 years in the future. The XRPL Time Utilities
1984
- * in `xrpl.js` expose helpers, or compute as `unixSeconds - 946684800`.
1985
- * @param cancelAfter - Optional. Same Ripple Epoch contract as finishAfter.
1986
- * @returns Base64 encoded transaction
1987
- */
1988
- async buildEscrowCreate(
1989
- account: string,
1990
- destination: string,
1991
- amount: string,
1992
- finishAfter: number,
1993
- cancelAfter?: number,
1994
- ): Promise&lt;string&gt; {
1995
- const tx: EscrowCreate = {
1996
- TransactionType: 'EscrowCreate',
1997
- Account: account,
1998
- Destination: destination,
1999
- Amount: amount,
2000
- FinishAfter: finishAfter,
2001
- ...(cancelAfter &amp;&amp; { CancelAfter: cancelAfter }),
2002
- };
2003
- &nbsp;
2004
- return this.serializeTransaction(tx);
2005
- }
2006
- &nbsp;
2007
- /**
2008
- * Build an EscrowFinish transaction
2009
- * @param account - Account address
2010
- * @param owner - Escrow owner account
2011
- * @param offerSequence - Sequence number of EscrowCreate transaction
2012
- * @returns Base64 encoded transaction
2013
- */
2014
- async buildEscrowFinish(account: string, owner: string, offerSequence: number): Promise&lt;string&gt; {
2015
- const tx: EscrowFinish = {
2016
- TransactionType: 'EscrowFinish',
2017
- Account: account,
2018
- Owner: owner,
2019
- OfferSequence: offerSequence,
2020
- };
2021
- &nbsp;
2022
- return this.serializeTransaction(tx);
2023
- }
2024
- &nbsp;
2025
- /**
2026
- * Build an EscrowCancel transaction
2027
- * @param account - Account address
2028
- * @param owner - Escrow owner account
2029
- * @param offerSequence - Sequence number of EscrowCreate transaction
2030
- * @returns Base64 encoded transaction
2031
- */
2032
- async buildEscrowCancel(account: string, owner: string, offerSequence: number): Promise&lt;string&gt; {
2033
- const tx: EscrowCancel = {
2034
- TransactionType: 'EscrowCancel',
2035
- Account: account,
2036
- Owner: owner,
2037
- OfferSequence: offerSequence,
2038
- };
2039
- &nbsp;
2040
- return this.serializeTransaction(tx);
2041
- }
2042
- &nbsp;
2043
- /**
2044
- * Build a PaymentChannelCreate transaction
2045
- * @param account - Account address
2046
- * @param destination - Destination account
2047
- * @param amount - Amount in drops
2048
- * @param settleDelay - Settle delay in seconds
2049
- * @param publicKey - Public key for channel
2050
- * @returns Base64 encoded transaction
2051
- */
2052
- async buildPaymentChannelCreate(
2053
- account: string,
2054
- destination: string,
2055
- amount: string,
2056
- settleDelay: number,
2057
- publicKey: string,
2058
- ): Promise&lt;string&gt; {
2059
- const tx: PaymentChannelCreate = {
2060
- TransactionType: 'PaymentChannelCreate',
2061
- Account: account,
2062
- Destination: destination,
2063
- Amount: amount,
2064
- SettleDelay: settleDelay,
2065
- PublicKey: publicKey,
2066
- };
2067
- &nbsp;
2068
- return this.serializeTransaction(tx);
2069
- }
2070
- &nbsp;
2071
- /**
2072
- * Build a PaymentChannelFund transaction
2073
- * @param account - Account address
2074
- * @param channel - Channel ID
2075
- * @param amount - Amount in drops to add
2076
- * @returns Base64 encoded transaction
2077
- */
2078
- async buildPaymentChannelFund(account: string, channel: string, amount: string): Promise&lt;string&gt; {
2079
- const tx: PaymentChannelFund = {
2080
- TransactionType: 'PaymentChannelFund',
2081
- Account: account,
2082
- Channel: channel,
2083
- Amount: amount,
2084
- };
2085
- &nbsp;
2086
- return this.serializeTransaction(tx);
2087
- }
2088
- &nbsp;
2089
- /**
2090
- * Build a PaymentChannelClaim transaction
2091
- * @param account - Account address
2092
- * @param channel - Channel ID
2093
- * @param amount - Amount in drops to claim
2094
- * @returns Base64 encoded transaction
2095
- */
2096
- async buildPaymentChannelClaim(
2097
- account: string,
2098
- channel: string,
2099
- amount?: string,
2100
- ): Promise&lt;string&gt; {
2101
- const tx: PaymentChannelClaim = {
2102
- TransactionType: 'PaymentChannelClaim',
2103
- Account: account,
2104
- Channel: channel,
2105
- ...(amount &amp;&amp; { Amount: amount }),
2106
- };
2107
- &nbsp;
2108
- return this.serializeTransaction(tx);
2109
- }
2110
- &nbsp;
2111
- /**
2112
- * Build a CheckCreate transaction
2113
- * @param account - Account address
2114
- * @param destination - Destination account
2115
- * @param sendMax - Maximum amount that can be cashed
2116
- * @returns Base64 encoded transaction
2117
- */
2118
- async buildCheckCreate(account: string, destination: string, sendMax: string): Promise&lt;string&gt; {
2119
- const tx: CheckCreate = {
2120
- TransactionType: 'CheckCreate',
2121
- Account: account,
2122
- Destination: destination,
2123
- SendMax: sendMax,
2124
- };
2125
- &nbsp;
2126
- return this.serializeTransaction(tx);
2127
- }
2128
- &nbsp;
2129
- /**
2130
- * Build a CheckCash transaction
2131
- * @param account - Account address
2132
- * @param checkID - Check ID to cash
2133
- * @param amount - Amount to cash (optional, uses DeliverMin if not provided)
2134
- * @param deliverMin - Minimum amount to deliver (optional)
2135
- * @returns Base64 encoded transaction
2136
- */
2137
- async buildCheckCash(
2138
- account: string,
2139
- checkID: string,
2140
- amount?: string,
2141
- deliverMin?: string,
2142
- ): Promise&lt;string&gt; {
2143
- const tx: CheckCash = {
2144
- TransactionType: 'CheckCash',
2145
- Account: account,
2146
- CheckID: checkID,
2147
- ...(amount &amp;&amp; { Amount: amount }),
2148
- ...(deliverMin &amp;&amp; { DeliverMin: deliverMin }),
2149
- };
2150
- &nbsp;
2151
- return this.serializeTransaction(tx);
2152
- }
2153
- &nbsp;
2154
- /**
2155
- * Build a CheckCancel transaction
2156
- * @param account - Account address
2157
- * @param checkID - Check ID to cancel
2158
- * @returns Base64 encoded transaction
2159
- */
2160
- async buildCheckCancel(account: string, checkID: string): Promise&lt;string&gt; {
2161
- const tx: CheckCancel = {
2162
- TransactionType: 'CheckCancel',
2163
- Account: account,
2164
- CheckID: checkID,
2165
- };
2166
- &nbsp;
2167
- return this.serializeTransaction(tx);
2168
- }
2169
- &nbsp;
2170
- /**
2171
- * Build a DepositPreauth transaction
2172
- * @param account - Account address
2173
- * @param authorize - Account to preauthorize (optional)
2174
- * @param unauthorize - Account to remove authorization (optional)
2175
- * @returns Base64 encoded transaction
2176
- */
2177
- async buildDepositPreauth(
2178
- account: string,
2179
- authorize?: string,
2180
- unauthorize?: string,
2181
- ): Promise&lt;string&gt; {
2182
- const tx: DepositPreauth = {
2183
- TransactionType: 'DepositPreauth',
2184
- Account: account,
2185
- ...(authorize &amp;&amp; { Authorize: authorize }),
2186
- ...(unauthorize &amp;&amp; { Unauthorize: unauthorize }),
2187
- };
2188
- &nbsp;
2189
- return this.serializeTransaction(tx);
2190
- }
2191
- &nbsp;
2192
- /**
2193
- * Build a SignerListSet transaction
2194
- * @param account - Account address
2195
- * @param signerQuorum - Required signature weight
2196
- * @param signerEntries - Array of signer entries
2197
- * @returns Base64 encoded transaction
2198
- */
2199
- async buildSignerListSet(
2200
- account: string,
2201
- signerQuorum: number,
2202
- signerEntries: Array&lt;{ account: string; weight: number }&gt;,
2203
- ): Promise&lt;string&gt; {
2204
- const tx: SignerListSet = {
2205
- TransactionType: 'SignerListSet',
2206
- Account: account,
2207
- SignerQuorum: signerQuorum,
2208
- SignerEntries: signerEntries.map((entry) =&gt; ({
2209
- SignerEntry: {
2210
- Account: entry.account,
2211
- SignerWeight: entry.weight,
2212
- },
2213
- })),
2214
- };
2215
- &nbsp;
2216
- return this.serializeTransaction(tx);
2217
- }
2218
- &nbsp;
2219
- /**
2220
- * Build a TicketCreate transaction
2221
- * @param account - Account address
2222
- * @param ticketCount - Number of tickets to create
2223
- * @returns Base64 encoded transaction
2224
- */
2225
- async buildTicketCreate(account: string, ticketCount: number): Promise&lt;string&gt; {
2226
- const tx: TicketCreate = {
2227
- TransactionType: 'TicketCreate',
2228
- Account: account,
2229
- TicketCount: ticketCount,
2230
- };
2231
- &nbsp;
2232
- return this.serializeTransaction(tx);
2233
- }
2234
- &nbsp;
2235
- /**
2236
- * Build an NFTokenMint transaction
2237
- * @param account - Account address
2238
- * @param uri - NFT URI (hex encoded)
2239
- * @param flags - NFT flags
2240
- * @param transferFee - Transfer fee in basis points
2241
- * @param taxon - NFT taxon
2242
- * @returns Base64 encoded transaction
2243
- */
2244
- async buildNFTMint(
2245
- account: string,
2246
- uri: string,
2247
- flags: number,
2248
- transferFee: number,
2249
- taxon: number,
2250
- ): Promise&lt;string&gt; {
2251
- const tx: NFTokenMint = {
2252
- TransactionType: 'NFTokenMint',
2253
- Account: account,
2254
- URI: uri,
2255
- Flags: flags,
2256
- TransferFee: transferFee,
2257
- NFTokenTaxon: taxon,
2258
- };
2259
- &nbsp;
2260
- return this.serializeTransaction(tx);
2261
- }
2262
- &nbsp;
2263
- /**
2264
- * Build an NFTokenBurn transaction
2265
- * @param account - Account address
2266
- * @param nftokenID - NFT ID to burn
2267
- * @returns Base64 encoded transaction
2268
- */
2269
- async buildNFTBurn(account: string, nftokenID: string): Promise&lt;string&gt; {
2270
- const tx: NFTokenBurn = {
2271
- TransactionType: 'NFTokenBurn',
2272
- Account: account,
2273
- NFTokenID: nftokenID,
2274
- };
2275
- &nbsp;
2276
- return this.serializeTransaction(tx);
2277
- }
2278
- &nbsp;
2279
- /**
2280
- * Build an NFTokenCreateOffer transaction
2281
- * @param account - Account address
2282
- * @param nftokenID - NFT ID
2283
- * @param amount - Offer amount
2284
- * @param flags - Offer flags (1=sell, 0=buy)
2285
- * @param destination - Optional destination account
2286
- * @returns Base64 encoded transaction
2287
- */
2288
- async buildNFTCreateOffer(
2289
- account: string,
2290
- nftokenID: string,
2291
- amount: string,
2292
- flags: number,
2293
- destination?: string,
2294
- ): Promise&lt;string&gt; {
2295
- const tx: NFTokenCreateOffer = {
2296
- TransactionType: 'NFTokenCreateOffer',
2297
- Account: account,
2298
- NFTokenID: nftokenID,
2299
- Amount: amount,
2300
- Flags: flags,
2301
- ...(destination &amp;&amp; { Destination: destination }),
2302
- };
2303
- &nbsp;
2304
- return this.serializeTransaction(tx);
2305
- }
2306
- &nbsp;
2307
- /**
2308
- * Build an NFTokenAcceptOffer transaction
2309
- * @param account - Account address
2310
- * @param nftokenSellOffer - Sell offer ID (optional)
2311
- * @param nftokenBuyOffer - Buy offer ID (optional)
2312
- * @returns Base64 encoded transaction
2313
- */
2314
- async buildNFTAcceptOffer(
2315
- account: string,
2316
- nftokenSellOffer?: string,
2317
- nftokenBuyOffer?: string,
2318
- ): Promise&lt;string&gt; {
2319
- const tx: NFTokenAcceptOffer = {
2320
- TransactionType: 'NFTokenAcceptOffer',
2321
- Account: account,
2322
- ...(nftokenSellOffer &amp;&amp; { NFTokenSellOffer: nftokenSellOffer }),
2323
- ...(nftokenBuyOffer &amp;&amp; { NFTokenBuyOffer: nftokenBuyOffer }),
2324
- };
2325
- &nbsp;
2326
- return this.serializeTransaction(tx);
2327
- }
2328
- &nbsp;
2329
- /**
2330
- * Build an NFTokenCancelOffer transaction
2331
- * @param account - Account address
2332
- * @param nftokenOffers - Array of offer IDs to cancel
2333
- * @returns Base64 encoded transaction
2334
- */
2335
- async buildNFTCancelOffer(account: string, nftokenOffers: string[]): Promise&lt;string&gt; {
2336
- const tx: NFTokenCancelOffer = {
2337
- TransactionType: 'NFTokenCancelOffer',
2338
- Account: account,
2339
- NFTokenOffers: nftokenOffers,
2340
- };
2341
- &nbsp;
2342
- return this.serializeTransaction(tx);
2343
- }
2344
- &nbsp;
2345
- /**
2346
- * Build a Batch transaction with multiple inner transactions
2347
- * @param account - Account executing the batch
2348
- * @param innerTransactions - Array of transaction descriptors
2349
- * @returns Base64 encoded batch transaction JSON
2350
- */
2351
- async buildBatchTransaction(
2352
- account: string,
2353
- innerTransactions: Array&lt;{
2354
- type: 'payment' | 'trust-set' | 'nft-mint';
2355
- destination?: string;
2356
- amount?: string;
2357
- currency?: string;
2358
- issuer?: string;
2359
- }&gt;,
2360
- ): Promise&lt;string&gt; {
2361
- const tfInnerBatchTxn = 1073741824;
2362
- const tfAllOrNothing = 65536;
2363
- &nbsp;
2364
- const rawTransactions = innerTransactions.map((tx, index) =&gt; {
2365
- let innerTx: any;
2366
- &nbsp;
2367
- switch (tx.type) {
2368
- case 'payment':
2369
- innerTx = {
2370
- TransactionType: 'Payment',
2371
- Flags: tfInnerBatchTxn,
2372
- Account: account,
2373
- Destination: tx.<span class="branch-0 cbranch-no" title="branch not covered" >destination || '',</span>
2374
- Amount: tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1000000',</span>
2375
- Fee: '0',
2376
- Sequence: index + 1,
2377
- SigningPubKey: '',
2378
- };
2379
- &nbsp;
2380
- if (tx.currency &amp;&amp; tx.issuer) {
2381
- innerTx.Amount = {
2382
- currency: tx.currency,
2383
- issuer: tx.issuer,
2384
- value: tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1',</span>
2385
- };
2386
- }
2387
- break;
2388
- &nbsp;
2389
- case 'trust-set':
2390
- innerTx = {
2391
- TransactionType: 'TrustSet',
2392
- Flags: tfInnerBatchTxn,
2393
- Account: account,
2394
- LimitAmount: {
2395
- currency: tx.<span class="branch-0 cbranch-no" title="branch not covered" >currency || 'USD',</span>
2396
- issuer: tx.<span class="branch-0 cbranch-no" title="branch not covered" >issuer || '',</span>
2397
- value: tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1000000',</span>
2398
- },
2399
- Fee: '0',
2400
- Sequence: index + 1,
2401
- SigningPubKey: '',
2402
- };
2403
- break;
2404
- &nbsp;
2405
- case 'nft-mint':
2406
- innerTx = {
2407
- TransactionType: 'NFTokenMint',
2408
- Flags: tfInnerBatchTxn,
2409
- Account: account,
2410
- NFTokenTaxon: 0,
2411
- Fee: '0',
2412
- Sequence: index + 1,
2413
- SigningPubKey: '',
2414
- };
2415
- break;
2416
- &nbsp;
2417
- default:
2418
- innerTx = {
2419
- TransactionType: 'Payment',
2420
- Flags: tfInnerBatchTxn,
2421
- Account: account,
2422
- Destination: account,
2423
- Amount: '1',
2424
- Fee: '0',
2425
- Sequence: index + 1,
2426
- SigningPubKey: '',
2427
- };
2428
- }
2429
- &nbsp;
2430
- return { RawTransaction: innerTx };
2431
- });
2432
- &nbsp;
2433
- const batchTx = {
2434
- TransactionType: 'Batch',
2435
- Account: account,
2436
- Flags: tfAllOrNothing,
2437
- RawTransactions: rawTransactions,
2438
- };
2439
- &nbsp;
2440
- return this.serializeTransaction(batchTx as any);
2441
- }
2442
- &nbsp;
2443
- /**
2444
- * Build inner transactions for batch (unsigned, with batch flags set)
2445
- * @param account - Account executing the batch
2446
- * @param innerTransactions - Array of transaction descriptors
2447
- * @returns Array of base64 encoded unsigned inner transactions
2448
- */
2449
- async buildBatchInnerTransactions(
2450
- account: string,
2451
- innerTransactions: Array&lt;{
2452
- type: 'payment' | 'trust-set' | 'nft-mint';
2453
- destination?: string;
2454
- amount?: string;
2455
- currency?: string;
2456
- issuer?: string;
2457
- uri?: string;
2458
- taxon?: number;
2459
- }&gt;,
2460
- ): Promise&lt;Array&lt;{ payload: string; description: string }&gt;&gt; {
2461
- const tfInnerBatchTxn = 1073741824;
2462
- const results: Array&lt;{ payload: string; description: string }&gt; = [];
2463
- &nbsp;
2464
- for (let index = 0; index &lt; innerTransactions.length; index++) {
2465
- const tx = innerTransactions[index];
2466
- let innerTx: any;
2467
- let description: string;
2468
- &nbsp;
2469
- switch (tx.type) {
2470
- case 'payment':
2471
- if (tx.currency &amp;&amp; tx.issuer) {
2472
- innerTx = {
2473
- TransactionType: 'Payment',
2474
- Flags: tfInnerBatchTxn,
2475
- Account: account,
2476
- Destination: tx.<span class="branch-0 cbranch-no" title="branch not covered" >destination || '',</span>
2477
- Amount: {
2478
- currency: tx.currency,
2479
- issuer: tx.issuer,
2480
- value: tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1',</span>
2481
- },
2482
- Fee: '0',
2483
- Sequence: index + 1,
2484
- SigningPubKey: '',
2485
- };
2486
- description = `Send ${tx.amount} ${tx.currency} to ${tx.destination}`;
2487
- } else {
2488
- innerTx = {
2489
- TransactionType: 'Payment',
2490
- Flags: tfInnerBatchTxn,
2491
- Account: account,
2492
- Destination: tx.<span class="branch-0 cbranch-no" title="branch not covered" >destination || '',</span>
2493
- Amount: tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1000000',</span>
2494
- Fee: '0',
2495
- Sequence: index + 1,
2496
- SigningPubKey: '',
2497
- };
2498
- description = `Send ${Number(tx.<span class="branch-0 cbranch-no" title="branch not covered" >amount || '1000000')</span> / 1000000} XRP to ${tx.destination}`;
2499
- }
2500
- break;
2501
- &nbsp;
2502
- case 'trust-set':
2503
- innerTx = {
2504
- TransactionType: 'TrustSet',
2505
- Flags: tfInnerBatchTxn,
2506
- Account: account,
2507
- LimitAmount: {
2508
- currency: tx.<span class="branch-0 cbranch-no" title="branch not covered" >currency || 'USD',</span>
2509
- issuer: tx.<span class="branch-0 cbranch-no" title="branch not covered" >issuer || '',</span>
2510
- value: tx.amount || '1000000',
2511
- },
2512
- Fee: '0',
2513
- Sequence: index + 1,
2514
- SigningPubKey: '',
2515
- };
2516
- description = `Set trust line for ${tx.currency} (${tx.amount})`;
2517
- break;
2518
- &nbsp;
2519
- case 'nft-mint':
2520
- innerTx = {
2521
- TransactionType: 'NFTokenMint',
2522
- Flags: tfInnerBatchTxn,
2523
- Account: account,
2524
- URI: tx.uri || '',
2525
- NFTokenTaxon: tx.taxon || 0,
2526
- Fee: '0',
2527
- Sequence: index + 1,
2528
- SigningPubKey: '',
2529
- };
2530
- description = `Mint NFT (taxon: ${tx.taxon})`;
2531
- break;
2532
- &nbsp;
2533
- default:
2534
- throw new Error(`Unknown transaction type: ${(tx as any).type}`);
2535
- }
2536
- &nbsp;
2537
- results.push({
2538
- payload: btoa(JSON.stringify(innerTx)),
2539
- description,
2540
- });
2541
- }
2542
- &nbsp;
2543
- return results;
2544
- }
2545
- &nbsp;
2546
- /**
2547
- * Serializes a transaction to base64 encoded JSON.
2548
- *
2549
- * @description
2550
- * Converts the transaction object to a JSON string and encodes it as base64.
2551
- * This format is used for transport to the wallet for signing.
2552
- *
2553
- * @param transaction - The XRPL transaction object
2554
- *
2555
- * @returns Base64 encoded JSON string
2556
- */
2557
- private async serializeTransaction(transaction: Transaction): Promise&lt;string&gt; {
2558
- const jsonString = JSON.stringify(transaction);
2559
- return btoa(jsonString);
2560
- }
2561
- }
898
+ <a name='L833'></a><a href='#L833'>833</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-no">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-no">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-no">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-no">&nbsp;</span>
954
+ <span class="cline-any cline-no">&nbsp;</span>
955
+ <span class="cline-any cline-no">&nbsp;</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-no">&nbsp;</span>
962
+ <span class="cline-any cline-no">&nbsp;</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-no">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-no">&nbsp;</span>
973
+ <span class="cline-any cline-no">&nbsp;</span>
974
+ <span class="cline-any cline-no">&nbsp;</span>
975
+ <span class="cline-any cline-no">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-no">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-no">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-no">&nbsp;</span>
983
+ <span class="cline-any cline-no">&nbsp;</span>
984
+ <span class="cline-any cline-no">&nbsp;</span>
985
+ <span class="cline-any cline-no">&nbsp;</span>
986
+ <span class="cline-any cline-no">&nbsp;</span>
987
+ <span class="cline-any cline-no">&nbsp;</span>
988
+ <span class="cline-any cline-no">&nbsp;</span>
989
+ <span class="cline-any cline-no">&nbsp;</span>
990
+ <span class="cline-any cline-no">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-no">&nbsp;</span>
993
+ <span class="cline-any cline-no">&nbsp;</span>
994
+ <span class="cline-any cline-no">&nbsp;</span>
995
+ <span class="cline-any cline-no">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-no">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-no">&nbsp;</span>
1001
+ <span class="cline-any cline-no">&nbsp;</span>
1002
+ <span class="cline-any cline-no">&nbsp;</span>
1003
+ <span class="cline-any cline-no">&nbsp;</span>
1004
+ <span class="cline-any cline-no">&nbsp;</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
1006
+ <span class="cline-any cline-no">&nbsp;</span>
1007
+ <span class="cline-any cline-no">&nbsp;</span>
1008
+ <span class="cline-any cline-no">&nbsp;</span>
1009
+ <span class="cline-any cline-no">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-no">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-no">&nbsp;</span>
1021
+ <span class="cline-any cline-no">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-no">&nbsp;</span>
1026
+ <span class="cline-any cline-no">&nbsp;</span>
1027
+ <span class="cline-any cline-no">&nbsp;</span>
1028
+ <span class="cline-any cline-no">&nbsp;</span>
1029
+ <span class="cline-any cline-no">&nbsp;</span>
1030
+ <span class="cline-any cline-no">&nbsp;</span>
1031
+ <span class="cline-any cline-no">&nbsp;</span>
1032
+ <span class="cline-any cline-no">&nbsp;</span>
1033
+ <span class="cline-any cline-no">&nbsp;</span>
1034
+ <span class="cline-any cline-no">&nbsp;</span>
1035
+ <span class="cline-any cline-no">&nbsp;</span>
1036
+ <span class="cline-any cline-no">&nbsp;</span>
1037
+ <span class="cline-any cline-no">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-no">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-no">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-no">&nbsp;</span>
1047
+ <span class="cline-any cline-no">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-no">&nbsp;</span>
1050
+ <span class="cline-any cline-no">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-no">&nbsp;</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-no">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-no">&nbsp;</span>
1070
+ <span class="cline-any cline-no">&nbsp;</span>
1071
+ <span class="cline-any cline-no">&nbsp;</span>
1072
+ <span class="cline-any cline-no">&nbsp;</span>
1073
+ <span class="cline-any cline-no">&nbsp;</span>
1074
+ <span class="cline-any cline-no">&nbsp;</span>
1075
+ <span class="cline-any cline-no">&nbsp;</span>
1076
+ <span class="cline-any cline-no">&nbsp;</span>
1077
+ <span class="cline-any cline-no">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-no">&nbsp;</span>
1080
+ <span class="cline-any cline-no">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-no">&nbsp;</span>
1084
+ <span class="cline-any cline-no">&nbsp;</span>
1085
+ <span class="cline-any cline-no">&nbsp;</span>
1086
+ <span class="cline-any cline-no">&nbsp;</span>
1087
+ <span class="cline-any cline-no">&nbsp;</span>
1088
+ <span class="cline-any cline-no">&nbsp;</span>
1089
+ <span class="cline-any cline-no">&nbsp;</span>
1090
+ <span class="cline-any cline-no">&nbsp;</span>
1091
+ <span class="cline-any cline-no">&nbsp;</span>
1092
+ <span class="cline-any cline-no">&nbsp;</span>
1093
+ <span class="cline-any cline-no">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-no">&nbsp;</span>
1097
+ <span class="cline-any cline-no">&nbsp;</span>
1098
+ <span class="cline-any cline-no">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-no">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-no">&nbsp;</span>
1103
+ <span class="cline-any cline-no">&nbsp;</span>
1104
+ <span class="cline-any cline-no">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-no">&nbsp;</span>
1110
+ <span class="cline-any cline-no">&nbsp;</span>
1111
+ <span class="cline-any cline-no">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-no">&nbsp;</span>
1114
+ <span class="cline-any cline-no">&nbsp;</span>
1115
+ <span class="cline-any cline-no">&nbsp;</span>
1116
+ <span class="cline-any cline-no">&nbsp;</span>
1117
+ <span class="cline-any cline-no">&nbsp;</span>
1118
+ <span class="cline-any cline-no">&nbsp;</span>
1119
+ <span class="cline-any cline-no">&nbsp;</span>
1120
+ <span class="cline-any cline-no">&nbsp;</span>
1121
+ <span class="cline-any cline-no">&nbsp;</span>
1122
+ <span class="cline-any cline-no">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-no">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-no">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-no">&nbsp;</span>
1132
+ <span class="cline-any cline-no">&nbsp;</span>
1133
+ <span class="cline-any cline-no">&nbsp;</span>
1134
+ <span class="cline-any cline-no">&nbsp;</span>
1135
+ <span class="cline-any cline-no">&nbsp;</span>
1136
+ <span class="cline-any cline-no">&nbsp;</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-no">&nbsp;</span>
1139
+ <span class="cline-any cline-no">&nbsp;</span>
1140
+ <span class="cline-any cline-no">&nbsp;</span>
1141
+ <span class="cline-any cline-no">&nbsp;</span>
1142
+ <span class="cline-any cline-no">&nbsp;</span>
1143
+ <span class="cline-any cline-no">&nbsp;</span>
1144
+ <span class="cline-any cline-no">&nbsp;</span>
1145
+ <span class="cline-any cline-no">&nbsp;</span>
1146
+ <span class="cline-any cline-no">&nbsp;</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-no">&nbsp;</span>
1149
+ <span class="cline-any cline-no">&nbsp;</span>
1150
+ <span class="cline-any cline-no">&nbsp;</span>
1151
+ <span class="cline-any cline-no">&nbsp;</span>
1152
+ <span class="cline-any cline-no">&nbsp;</span>
1153
+ <span class="cline-any cline-no">&nbsp;</span>
1154
+ <span class="cline-any cline-no">&nbsp;</span>
1155
+ <span class="cline-any cline-no">&nbsp;</span>
1156
+ <span class="cline-any cline-no">&nbsp;</span>
1157
+ <span class="cline-any cline-no">&nbsp;</span>
1158
+ <span class="cline-any cline-no">&nbsp;</span>
1159
+ <span class="cline-any cline-no">&nbsp;</span>
1160
+ <span class="cline-any cline-no">&nbsp;</span>
1161
+ <span class="cline-any cline-no">&nbsp;</span>
1162
+ <span class="cline-any cline-no">&nbsp;</span>
1163
+ <span class="cline-any cline-no">&nbsp;</span>
1164
+ <span class="cline-any cline-no">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-no">&nbsp;</span>
1167
+ <span class="cline-any cline-no">&nbsp;</span>
1168
+ <span class="cline-any cline-no">&nbsp;</span>
1169
+ <span class="cline-any cline-no">&nbsp;</span>
1170
+ <span class="cline-any cline-no">&nbsp;</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-no">&nbsp;</span>
1173
+ <span class="cline-any cline-no">&nbsp;</span>
1174
+ <span class="cline-any cline-no">&nbsp;</span>
1175
+ <span class="cline-any cline-no">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-no">&nbsp;</span>
1178
+ <span class="cline-any cline-no">&nbsp;</span>
1179
+ <span class="cline-any cline-no">&nbsp;</span>
1180
+ <span class="cline-any cline-no">&nbsp;</span>
1181
+ <span class="cline-any cline-no">&nbsp;</span>
1182
+ <span class="cline-any cline-no">&nbsp;</span>
1183
+ <span class="cline-any cline-no">&nbsp;</span>
1184
+ <span class="cline-any cline-no">&nbsp;</span>
1185
+ <span class="cline-any cline-no">&nbsp;</span>
1186
+ <span class="cline-any cline-no">&nbsp;</span>
1187
+ <span class="cline-any cline-no">&nbsp;</span>
1188
+ <span class="cline-any cline-no">&nbsp;</span>
1189
+ <span class="cline-any cline-no">&nbsp;</span>
1190
+ <span class="cline-any cline-no">&nbsp;</span>
1191
+ <span class="cline-any cline-no">&nbsp;</span>
1192
+ <span class="cline-any cline-no">&nbsp;</span>
1193
+ <span class="cline-any cline-no">&nbsp;</span>
1194
+ <span class="cline-any cline-no">&nbsp;</span>
1195
+ <span class="cline-any cline-no">&nbsp;</span>
1196
+ <span class="cline-any cline-no">&nbsp;</span>
1197
+ <span class="cline-any cline-no">&nbsp;</span>
1198
+ <span class="cline-any cline-no">&nbsp;</span>
1199
+ <span class="cline-any cline-no">&nbsp;</span>
1200
+ <span class="cline-any cline-no">&nbsp;</span>
1201
+ <span class="cline-any cline-no">&nbsp;</span>
1202
+ <span class="cline-any cline-no">&nbsp;</span>
1203
+ <span class="cline-any cline-no">&nbsp;</span>
1204
+ <span class="cline-any cline-no">&nbsp;</span>
1205
+ <span class="cline-any cline-no">&nbsp;</span>
1206
+ <span class="cline-any cline-no">&nbsp;</span>
1207
+ <span class="cline-any cline-no">&nbsp;</span>
1208
+ <span class="cline-any cline-no">&nbsp;</span>
1209
+ <span class="cline-any cline-no">&nbsp;</span>
1210
+ <span class="cline-any cline-no">&nbsp;</span>
1211
+ <span class="cline-any cline-no">&nbsp;</span>
1212
+ <span class="cline-any cline-no">&nbsp;</span>
1213
+ <span class="cline-any cline-no">&nbsp;</span>
1214
+ <span class="cline-any cline-no">&nbsp;</span>
1215
+ <span class="cline-any cline-no">&nbsp;</span>
1216
+ <span class="cline-any cline-no">&nbsp;</span>
1217
+ <span class="cline-any cline-no">&nbsp;</span>
1218
+ <span class="cline-any cline-no">&nbsp;</span>
1219
+ <span class="cline-any cline-no">&nbsp;</span>
1220
+ <span class="cline-any cline-no">&nbsp;</span>
1221
+ <span class="cline-any cline-no">&nbsp;</span>
1222
+ <span class="cline-any cline-no">&nbsp;</span>
1223
+ <span class="cline-any cline-no">&nbsp;</span>
1224
+ <span class="cline-any cline-no">&nbsp;</span>
1225
+ <span class="cline-any cline-no">&nbsp;</span>
1226
+ <span class="cline-any cline-no">&nbsp;</span>
1227
+ <span class="cline-any cline-no">&nbsp;</span>
1228
+ <span class="cline-any cline-no">&nbsp;</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-no">&nbsp;</span>
1231
+ <span class="cline-any cline-no">&nbsp;</span>
1232
+ <span class="cline-any cline-no">&nbsp;</span>
1233
+ <span class="cline-any cline-no">&nbsp;</span>
1234
+ <span class="cline-any cline-no">&nbsp;</span>
1235
+ <span class="cline-any cline-no">&nbsp;</span>
1236
+ <span class="cline-any cline-no">&nbsp;</span>
1237
+ <span class="cline-any cline-no">&nbsp;</span>
1238
+ <span class="cline-any cline-no">&nbsp;</span>
1239
+ <span class="cline-any cline-no">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-no">&nbsp;</span>
1242
+ <span class="cline-any cline-no">&nbsp;</span>
1243
+ <span class="cline-any cline-no">&nbsp;</span>
1244
+ <span class="cline-any cline-no">&nbsp;</span>
1245
+ <span class="cline-any cline-no">&nbsp;</span>
1246
+ <span class="cline-any cline-no">&nbsp;</span>
1247
+ <span class="cline-any cline-no">&nbsp;</span>
1248
+ <span class="cline-any cline-no">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-no">&nbsp;</span>
1251
+ <span class="cline-any cline-no">&nbsp;</span>
1252
+ <span class="cline-any cline-no">&nbsp;</span>
1253
+ <span class="cline-any cline-no">&nbsp;</span>
1254
+ <span class="cline-any cline-no">&nbsp;</span>
1255
+ <span class="cline-any cline-no">&nbsp;</span>
1256
+ <span class="cline-any cline-no">&nbsp;</span>
1257
+ <span class="cline-any cline-no">&nbsp;</span>
1258
+ <span class="cline-any cline-no">&nbsp;</span>
1259
+ <span class="cline-any cline-no">&nbsp;</span>
1260
+ <span class="cline-any cline-no">&nbsp;</span>
1261
+ <span class="cline-any cline-no">&nbsp;</span>
1262
+ <span class="cline-any cline-no">&nbsp;</span>
1263
+ <span class="cline-any cline-no">&nbsp;</span>
1264
+ <span class="cline-any cline-no">&nbsp;</span>
1265
+ <span class="cline-any cline-no">&nbsp;</span>
1266
+ <span class="cline-any cline-no">&nbsp;</span>
1267
+ <span class="cline-any cline-no">&nbsp;</span>
1268
+ <span class="cline-any cline-no">&nbsp;</span>
1269
+ <span class="cline-any cline-no">&nbsp;</span>
1270
+ <span class="cline-any cline-no">&nbsp;</span>
1271
+ <span class="cline-any cline-no">&nbsp;</span>
1272
+ <span class="cline-any cline-no">&nbsp;</span>
1273
+ <span class="cline-any cline-no">&nbsp;</span>
1274
+ <span class="cline-any cline-no">&nbsp;</span>
1275
+ <span class="cline-any cline-no">&nbsp;</span>
1276
+ <span class="cline-any cline-no">&nbsp;</span>
1277
+ <span class="cline-any cline-no">&nbsp;</span>
1278
+ <span class="cline-any cline-no">&nbsp;</span>
1279
+ <span class="cline-any cline-no">&nbsp;</span>
1280
+ <span class="cline-any cline-no">&nbsp;</span>
1281
+ <span class="cline-any cline-no">&nbsp;</span>
1282
+ <span class="cline-any cline-no">&nbsp;</span>
1283
+ <span class="cline-any cline-no">&nbsp;</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-no">&nbsp;</span>
1286
+ <span class="cline-any cline-no">&nbsp;</span>
1287
+ <span class="cline-any cline-no">&nbsp;</span>
1288
+ <span class="cline-any cline-no">&nbsp;</span>
1289
+ <span class="cline-any cline-no">&nbsp;</span>
1290
+ <span class="cline-any cline-no">&nbsp;</span>
1291
+ <span class="cline-any cline-no">&nbsp;</span>
1292
+ <span class="cline-any cline-no">&nbsp;</span>
1293
+ <span class="cline-any cline-no">&nbsp;</span>
1294
+ <span class="cline-any cline-no">&nbsp;</span>
1295
+ <span class="cline-any cline-no">&nbsp;</span>
1296
+ <span class="cline-any cline-no">&nbsp;</span>
1297
+ <span class="cline-any cline-no">&nbsp;</span>
1298
+ <span class="cline-any cline-no">&nbsp;</span>
1299
+ <span class="cline-any cline-no">&nbsp;</span>
1300
+ <span class="cline-any cline-no">&nbsp;</span>
1301
+ <span class="cline-any cline-no">&nbsp;</span>
1302
+ <span class="cline-any cline-no">&nbsp;</span>
1303
+ <span class="cline-any cline-no">&nbsp;</span>
1304
+ <span class="cline-any cline-no">&nbsp;</span>
1305
+ <span class="cline-any cline-no">&nbsp;</span>
1306
+ <span class="cline-any cline-no">&nbsp;</span>
1307
+ <span class="cline-any cline-no">&nbsp;</span>
1308
+ <span class="cline-any cline-no">&nbsp;</span>
1309
+ <span class="cline-any cline-no">&nbsp;</span>
1310
+ <span class="cline-any cline-no">&nbsp;</span>
1311
+ <span class="cline-any cline-no">&nbsp;</span>
1312
+ <span class="cline-any cline-no">&nbsp;</span>
1313
+ <span class="cline-any cline-no">&nbsp;</span>
1314
+ <span class="cline-any cline-no">&nbsp;</span>
1315
+ <span class="cline-any cline-no">&nbsp;</span>
1316
+ <span class="cline-any cline-no">&nbsp;</span>
1317
+ <span class="cline-any cline-no">&nbsp;</span>
1318
+ <span class="cline-any cline-no">&nbsp;</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-no">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-no">&nbsp;</span>
1323
+ <span class="cline-any cline-no">&nbsp;</span>
1324
+ <span class="cline-any cline-no">&nbsp;</span>
1325
+ <span class="cline-any cline-no">&nbsp;</span>
1326
+ <span class="cline-any cline-no">&nbsp;</span>
1327
+ <span class="cline-any cline-no">&nbsp;</span>
1328
+ <span class="cline-any cline-no">&nbsp;</span>
1329
+ <span class="cline-any cline-no">&nbsp;</span>
1330
+ <span class="cline-any cline-no">&nbsp;</span>
1331
+ <span class="cline-any cline-no">&nbsp;</span>
1332
+ <span class="cline-any cline-no">&nbsp;</span>
1333
+ <span class="cline-any cline-no">&nbsp;</span>
1334
+ <span class="cline-any cline-no">&nbsp;</span>
1335
+ <span class="cline-any cline-no">&nbsp;</span>
1336
+ <span class="cline-any cline-no">&nbsp;</span>
1337
+ <span class="cline-any cline-no">&nbsp;</span>
1338
+ <span class="cline-any cline-no">&nbsp;</span>
1339
+ <span class="cline-any cline-no">&nbsp;</span>
1340
+ <span class="cline-any cline-no">&nbsp;</span>
1341
+ <span class="cline-any cline-no">&nbsp;</span>
1342
+ <span class="cline-any cline-no">&nbsp;</span>
1343
+ <span class="cline-any cline-no">&nbsp;</span>
1344
+ <span class="cline-any cline-no">&nbsp;</span>
1345
+ <span class="cline-any cline-no">&nbsp;</span>
1346
+ <span class="cline-any cline-no">&nbsp;</span>
1347
+ <span class="cline-any cline-no">&nbsp;</span>
1348
+ <span class="cline-any cline-no">&nbsp;</span>
1349
+ <span class="cline-any cline-no">&nbsp;</span>
1350
+ <span class="cline-any cline-no">&nbsp;</span>
1351
+ <span class="cline-any cline-no">&nbsp;</span>
1352
+ <span class="cline-any cline-no">&nbsp;</span>
1353
+ <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-no">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1356
+ <span class="cline-any cline-no">&nbsp;</span>
1357
+ <span class="cline-any cline-no">&nbsp;</span>
1358
+ <span class="cline-any cline-no">&nbsp;</span>
1359
+ <span class="cline-any cline-no">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-no">&nbsp;</span>
1362
+ <span class="cline-any cline-no">&nbsp;</span>
1363
+ <span class="cline-any cline-no">&nbsp;</span>
1364
+ <span class="cline-any cline-no">&nbsp;</span>
1365
+ <span class="cline-any cline-no">&nbsp;</span>
1366
+ <span class="cline-any cline-no">&nbsp;</span>
1367
+ <span class="cline-any cline-no">&nbsp;</span>
1368
+ <span class="cline-any cline-no">&nbsp;</span>
1369
+ <span class="cline-any cline-no">&nbsp;</span>
1370
+ <span class="cline-any cline-no">&nbsp;</span>
1371
+ <span class="cline-any cline-no">&nbsp;</span>
1372
+ <span class="cline-any cline-no">&nbsp;</span>
1373
+ <span class="cline-any cline-no">&nbsp;</span>
1374
+ <span class="cline-any cline-no">&nbsp;</span>
1375
+ <span class="cline-any cline-no">&nbsp;</span>
1376
+ <span class="cline-any cline-no">&nbsp;</span>
1377
+ <span class="cline-any cline-no">&nbsp;</span>
1378
+ <span class="cline-any cline-no">&nbsp;</span>
1379
+ <span class="cline-any cline-no">&nbsp;</span>
1380
+ <span class="cline-any cline-no">&nbsp;</span>
1381
+ <span class="cline-any cline-no">&nbsp;</span>
1382
+ <span class="cline-any cline-no">&nbsp;</span>
1383
+ <span class="cline-any cline-no">&nbsp;</span>
1384
+ <span class="cline-any cline-no">&nbsp;</span>
1385
+ <span class="cline-any cline-no">&nbsp;</span>
1386
+ <span class="cline-any cline-no">&nbsp;</span>
1387
+ <span class="cline-any cline-no">&nbsp;</span>
1388
+ <span class="cline-any cline-no">&nbsp;</span>
1389
+ <span class="cline-any cline-no">&nbsp;</span>
1390
+ <span class="cline-any cline-no">&nbsp;</span>
1391
+ <span class="cline-any cline-no">&nbsp;</span>
1392
+ <span class="cline-any cline-no">&nbsp;</span>
1393
+ <span class="cline-any cline-no">&nbsp;</span>
1394
+ <span class="cline-any cline-no">&nbsp;</span>
1395
+ <span class="cline-any cline-no">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-no">&nbsp;</span>
1398
+ <span class="cline-any cline-no">&nbsp;</span>
1399
+ <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-no">&nbsp;</span>
1401
+ <span class="cline-any cline-no">&nbsp;</span>
1402
+ <span class="cline-any cline-no">&nbsp;</span>
1403
+ <span class="cline-any cline-no">&nbsp;</span>
1404
+ <span class="cline-any cline-no">&nbsp;</span>
1405
+ <span class="cline-any cline-no">&nbsp;</span>
1406
+ <span class="cline-any cline-no">&nbsp;</span>
1407
+ <span class="cline-any cline-no">&nbsp;</span>
1408
+ <span class="cline-any cline-no">&nbsp;</span>
1409
+ <span class="cline-any cline-no">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-no">&nbsp;</span>
1412
+ <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-no">&nbsp;</span>
1414
+ <span class="cline-any cline-no">&nbsp;</span>
1415
+ <span class="cline-any cline-no">&nbsp;</span>
1416
+ <span class="cline-any cline-no">&nbsp;</span>
1417
+ <span class="cline-any cline-no">&nbsp;</span>
1418
+ <span class="cline-any cline-no">&nbsp;</span>
1419
+ <span class="cline-any cline-no">&nbsp;</span>
1420
+ <span class="cline-any cline-no">&nbsp;</span>
1421
+ <span class="cline-any cline-no">&nbsp;</span>
1422
+ <span class="cline-any cline-no">&nbsp;</span>
1423
+ <span class="cline-any cline-no">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-no">&nbsp;</span>
1426
+ <span class="cline-any cline-no">&nbsp;</span>
1427
+ <span class="cline-any cline-no">&nbsp;</span>
1428
+ <span class="cline-any cline-no">&nbsp;</span>
1429
+ <span class="cline-any cline-no">&nbsp;</span>
1430
+ <span class="cline-any cline-no">&nbsp;</span>
1431
+ <span class="cline-any cline-no">&nbsp;</span>
1432
+ <span class="cline-any cline-no">&nbsp;</span>
1433
+ <span class="cline-any cline-no">&nbsp;</span>
1434
+ <span class="cline-any cline-no">&nbsp;</span>
1435
+ <span class="cline-any cline-no">&nbsp;</span>
1436
+ <span class="cline-any cline-no">&nbsp;</span>
1437
+ <span class="cline-any cline-no">&nbsp;</span>
1438
+ <span class="cline-any cline-no">&nbsp;</span>
1439
+ <span class="cline-any cline-no">&nbsp;</span>
1440
+ <span class="cline-any cline-no">&nbsp;</span>
1441
+ <span class="cline-any cline-no">&nbsp;</span>
1442
+ <span class="cline-any cline-no">&nbsp;</span>
1443
+ <span class="cline-any cline-no">&nbsp;</span>
1444
+ <span class="cline-any cline-no">&nbsp;</span>
1445
+ <span class="cline-any cline-no">&nbsp;</span>
1446
+ <span class="cline-any cline-no">&nbsp;</span>
1447
+ <span class="cline-any cline-no">&nbsp;</span>
1448
+ <span class="cline-any cline-no">&nbsp;</span>
1449
+ <span class="cline-any cline-no">&nbsp;</span>
1450
+ <span class="cline-any cline-no">&nbsp;</span>
1451
+ <span class="cline-any cline-no">&nbsp;</span>
1452
+ <span class="cline-any cline-no">&nbsp;</span>
1453
+ <span class="cline-any cline-no">&nbsp;</span>
1454
+ <span class="cline-any cline-no">&nbsp;</span>
1455
+ <span class="cline-any cline-no">&nbsp;</span>
1456
+ <span class="cline-any cline-no">&nbsp;</span>
1457
+ <span class="cline-any cline-no">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-no">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-no">&nbsp;</span>
1465
+ <span class="cline-any cline-no">&nbsp;</span>
1466
+ <span class="cline-any cline-no">&nbsp;</span>
1467
+ <span class="cline-any cline-no">&nbsp;</span>
1468
+ <span class="cline-any cline-no">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-no">&nbsp;</span>
1471
+ <span class="cline-any cline-no">&nbsp;</span>
1472
+ <span class="cline-any cline-no">&nbsp;</span>
1473
+ <span class="cline-any cline-no">&nbsp;</span>
1474
+ <span class="cline-any cline-no">&nbsp;</span>
1475
+ <span class="cline-any cline-no">&nbsp;</span>
1476
+ <span class="cline-any cline-no">&nbsp;</span>
1477
+ <span class="cline-any cline-no">&nbsp;</span>
1478
+ <span class="cline-any cline-no">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-no">&nbsp;</span>
1482
+ <span class="cline-any cline-no">&nbsp;</span>
1483
+ <span class="cline-any cline-no">&nbsp;</span>
1484
+ <span class="cline-any cline-no">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&nbsp;</span>
1486
+ <span class="cline-any cline-no">&nbsp;</span>
1487
+ <span class="cline-any cline-no">&nbsp;</span>
1488
+ <span class="cline-any cline-no">&nbsp;</span>
1489
+ <span class="cline-any cline-no">&nbsp;</span>
1490
+ <span class="cline-any cline-no">&nbsp;</span>
1491
+ <span class="cline-any cline-no">&nbsp;</span>
1492
+ <span class="cline-any cline-no">&nbsp;</span>
1493
+ <span class="cline-any cline-no">&nbsp;</span>
1494
+ <span class="cline-any cline-no">&nbsp;</span>
1495
+ <span class="cline-any cline-no">&nbsp;</span>
1496
+ <span class="cline-any cline-no">&nbsp;</span>
1497
+ <span class="cline-any cline-no">&nbsp;</span>
1498
+ <span class="cline-any cline-no">&nbsp;</span>
1499
+ <span class="cline-any cline-no">&nbsp;</span>
1500
+ <span class="cline-any cline-no">&nbsp;</span>
1501
+ <span class="cline-any cline-no">&nbsp;</span>
1502
+ <span class="cline-any cline-no">&nbsp;</span>
1503
+ <span class="cline-any cline-no">&nbsp;</span>
1504
+ <span class="cline-any cline-no">&nbsp;</span>
1505
+ <span class="cline-any cline-no">&nbsp;</span>
1506
+ <span class="cline-any cline-no">&nbsp;</span>
1507
+ <span class="cline-any cline-no">&nbsp;</span>
1508
+ <span class="cline-any cline-no">&nbsp;</span>
1509
+ <span class="cline-any cline-no">&nbsp;</span>
1510
+ <span class="cline-any cline-no">&nbsp;</span>
1511
+ <span class="cline-any cline-no">&nbsp;</span>
1512
+ <span class="cline-any cline-no">&nbsp;</span>
1513
+ <span class="cline-any cline-no">&nbsp;</span>
1514
+ <span class="cline-any cline-no">&nbsp;</span>
1515
+ <span class="cline-any cline-no">&nbsp;</span>
1516
+ <span class="cline-any cline-no">&nbsp;</span>
1517
+ <span class="cline-any cline-no">&nbsp;</span>
1518
+ <span class="cline-any cline-no">&nbsp;</span>
1519
+ <span class="cline-any cline-no">&nbsp;</span>
1520
+ <span class="cline-any cline-no">&nbsp;</span>
1521
+ <span class="cline-any cline-no">&nbsp;</span>
1522
+ <span class="cline-any cline-no">&nbsp;</span>
1523
+ <span class="cline-any cline-no">&nbsp;</span>
1524
+ <span class="cline-any cline-no">&nbsp;</span>
1525
+ <span class="cline-any cline-no">&nbsp;</span>
1526
+ <span class="cline-any cline-no">&nbsp;</span>
1527
+ <span class="cline-any cline-no">&nbsp;</span>
1528
+ <span class="cline-any cline-no">&nbsp;</span>
1529
+ <span class="cline-any cline-no">&nbsp;</span>
1530
+ <span class="cline-any cline-no">&nbsp;</span>
1531
+ <span class="cline-any cline-no">&nbsp;</span>
1532
+ <span class="cline-any cline-no">&nbsp;</span>
1533
+ <span class="cline-any cline-no">&nbsp;</span>
1534
+ <span class="cline-any cline-no">&nbsp;</span>
1535
+ <span class="cline-any cline-no">&nbsp;</span>
1536
+ <span class="cline-any cline-no">&nbsp;</span>
1537
+ <span class="cline-any cline-no">&nbsp;</span>
1538
+ <span class="cline-any cline-no">&nbsp;</span>
1539
+ <span class="cline-any cline-no">&nbsp;</span>
1540
+ <span class="cline-any cline-no">&nbsp;</span>
1541
+ <span class="cline-any cline-no">&nbsp;</span>
1542
+ <span class="cline-any cline-no">&nbsp;</span>
1543
+ <span class="cline-any cline-no">&nbsp;</span>
1544
+ <span class="cline-any cline-no">&nbsp;</span>
1545
+ <span class="cline-any cline-no">&nbsp;</span>
1546
+ <span class="cline-any cline-no">&nbsp;</span>
1547
+ <span class="cline-any cline-no">&nbsp;</span>
1548
+ <span class="cline-any cline-no">&nbsp;</span>
1549
+ <span class="cline-any cline-no">&nbsp;</span>
1550
+ <span class="cline-any cline-no">&nbsp;</span>
1551
+ <span class="cline-any cline-no">&nbsp;</span>
1552
+ <span class="cline-any cline-no">&nbsp;</span>
1553
+ <span class="cline-any cline-no">&nbsp;</span>
1554
+ <span class="cline-any cline-no">&nbsp;</span>
1555
+ <span class="cline-any cline-no">&nbsp;</span>
1556
+ <span class="cline-any cline-no">&nbsp;</span>
1557
+ <span class="cline-any cline-no">&nbsp;</span>
1558
+ <span class="cline-any cline-no">&nbsp;</span>
1559
+ <span class="cline-any cline-no">&nbsp;</span>
1560
+ <span class="cline-any cline-no">&nbsp;</span>
1561
+ <span class="cline-any cline-no">&nbsp;</span>
1562
+ <span class="cline-any cline-no">&nbsp;</span>
1563
+ <span class="cline-any cline-no">&nbsp;</span>
1564
+ <span class="cline-any cline-no">&nbsp;</span>
1565
+ <span class="cline-any cline-no">&nbsp;</span>
1566
+ <span class="cline-any cline-no">&nbsp;</span>
1567
+ <span class="cline-any cline-no">&nbsp;</span>
1568
+ <span class="cline-any cline-no">&nbsp;</span>
1569
+ <span class="cline-any cline-no">&nbsp;</span>
1570
+ <span class="cline-any cline-no">&nbsp;</span>
1571
+ <span class="cline-any cline-no">&nbsp;</span>
1572
+ <span class="cline-any cline-no">&nbsp;</span>
1573
+ <span class="cline-any cline-no">&nbsp;</span>
1574
+ <span class="cline-any cline-no">&nbsp;</span>
1575
+ <span class="cline-any cline-no">&nbsp;</span>
1576
+ <span class="cline-any cline-no">&nbsp;</span>
1577
+ <span class="cline-any cline-no">&nbsp;</span>
1578
+ <span class="cline-any cline-no">&nbsp;</span>
1579
+ <span class="cline-any cline-no">&nbsp;</span>
1580
+ <span class="cline-any cline-no">&nbsp;</span>
1581
+ <span class="cline-any cline-no">&nbsp;</span>
1582
+ <span class="cline-any cline-no">&nbsp;</span>
1583
+ <span class="cline-any cline-no">&nbsp;</span>
1584
+ <span class="cline-any cline-no">&nbsp;</span>
1585
+ <span class="cline-any cline-no">&nbsp;</span>
1586
+ <span class="cline-any cline-no">&nbsp;</span>
1587
+ <span class="cline-any cline-no">&nbsp;</span>
1588
+ <span class="cline-any cline-no">&nbsp;</span>
1589
+ <span class="cline-any cline-no">&nbsp;</span>
1590
+ <span class="cline-any cline-no">&nbsp;</span>
1591
+ <span class="cline-any cline-no">&nbsp;</span>
1592
+ <span class="cline-any cline-no">&nbsp;</span>
1593
+ <span class="cline-any cline-no">&nbsp;</span>
1594
+ <span class="cline-any cline-no">&nbsp;</span>
1595
+ <span class="cline-any cline-no">&nbsp;</span>
1596
+ <span class="cline-any cline-no">&nbsp;</span>
1597
+ <span class="cline-any cline-no">&nbsp;</span>
1598
+ <span class="cline-any cline-no">&nbsp;</span>
1599
+ <span class="cline-any cline-no">&nbsp;</span>
1600
+ <span class="cline-any cline-no">&nbsp;</span>
1601
+ <span class="cline-any cline-no">&nbsp;</span>
1602
+ <span class="cline-any cline-no">&nbsp;</span>
1603
+ <span class="cline-any cline-no">&nbsp;</span>
1604
+ <span class="cline-any cline-no">&nbsp;</span>
1605
+ <span class="cline-any cline-no">&nbsp;</span>
1606
+ <span class="cline-any cline-no">&nbsp;</span>
1607
+ <span class="cline-any cline-no">&nbsp;</span>
1608
+ <span class="cline-any cline-no">&nbsp;</span>
1609
+ <span class="cline-any cline-no">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-no">&nbsp;</span>
1612
+ <span class="cline-any cline-no">&nbsp;</span>
1613
+ <span class="cline-any cline-no">&nbsp;</span>
1614
+ <span class="cline-any cline-no">&nbsp;</span>
1615
+ <span class="cline-any cline-no">&nbsp;</span>
1616
+ <span class="cline-any cline-no">&nbsp;</span>
1617
+ <span class="cline-any cline-no">&nbsp;</span>
1618
+ <span class="cline-any cline-no">&nbsp;</span>
1619
+ <span class="cline-any cline-no">&nbsp;</span>
1620
+ <span class="cline-any cline-no">&nbsp;</span>
1621
+ <span class="cline-any cline-no">&nbsp;</span>
1622
+ <span class="cline-any cline-no">&nbsp;</span>
1623
+ <span class="cline-any cline-no">&nbsp;</span>
1624
+ <span class="cline-any cline-no">&nbsp;</span>
1625
+ <span class="cline-any cline-no">&nbsp;</span>
1626
+ <span class="cline-any cline-no">&nbsp;</span>
1627
+ <span class="cline-any cline-no">&nbsp;</span>
1628
+ <span class="cline-any cline-no">&nbsp;</span>
1629
+ <span class="cline-any cline-no">&nbsp;</span>
1630
+ <span class="cline-any cline-no">&nbsp;</span>
1631
+ <span class="cline-any cline-no">&nbsp;</span>
1632
+ <span class="cline-any cline-no">&nbsp;</span>
1633
+ <span class="cline-any cline-no">&nbsp;</span>
1634
+ <span class="cline-any cline-no">&nbsp;</span>
1635
+ <span class="cline-any cline-no">&nbsp;</span>
1636
+ <span class="cline-any cline-no">&nbsp;</span>
1637
+ <span class="cline-any cline-no">&nbsp;</span>
1638
+ <span class="cline-any cline-no">&nbsp;</span>
1639
+ <span class="cline-any cline-no">&nbsp;</span>
1640
+ <span class="cline-any cline-no">&nbsp;</span>
1641
+ <span class="cline-any cline-no">&nbsp;</span>
1642
+ <span class="cline-any cline-no">&nbsp;</span>
1643
+ <span class="cline-any cline-no">&nbsp;</span>
1644
+ <span class="cline-any cline-no">&nbsp;</span>
1645
+ <span class="cline-any cline-no">&nbsp;</span>
1646
+ <span class="cline-any cline-no">&nbsp;</span>
1647
+ <span class="cline-any cline-no">&nbsp;</span>
1648
+ <span class="cline-any cline-no">&nbsp;</span>
1649
+ <span class="cline-any cline-no">&nbsp;</span>
1650
+ <span class="cline-any cline-no">&nbsp;</span>
1651
+ <span class="cline-any cline-no">&nbsp;</span>
1652
+ <span class="cline-any cline-no">&nbsp;</span>
1653
+ <span class="cline-any cline-no">&nbsp;</span>
1654
+ <span class="cline-any cline-no">&nbsp;</span>
1655
+ <span class="cline-any cline-no">&nbsp;</span>
1656
+ <span class="cline-any cline-no">&nbsp;</span>
1657
+ <span class="cline-any cline-no">&nbsp;</span>
1658
+ <span class="cline-any cline-no">&nbsp;</span>
1659
+ <span class="cline-any cline-no">&nbsp;</span>
1660
+ <span class="cline-any cline-no">&nbsp;</span>
1661
+ <span class="cline-any cline-no">&nbsp;</span>
1662
+ <span class="cline-any cline-no">&nbsp;</span>
1663
+ <span class="cline-any cline-no">&nbsp;</span>
1664
+ <span class="cline-any cline-no">&nbsp;</span>
1665
+ <span class="cline-any cline-no">&nbsp;</span>
1666
+ <span class="cline-any cline-no">&nbsp;</span>
1667
+ <span class="cline-any cline-no">&nbsp;</span>
1668
+ <span class="cline-any cline-no">&nbsp;</span>
1669
+ <span class="cline-any cline-no">&nbsp;</span>
1670
+ <span class="cline-any cline-no">&nbsp;</span>
1671
+ <span class="cline-any cline-no">&nbsp;</span>
1672
+ <span class="cline-any cline-no">&nbsp;</span>
1673
+ <span class="cline-any cline-no">&nbsp;</span>
1674
+ <span class="cline-any cline-no">&nbsp;</span>
1675
+ <span class="cline-any cline-no">&nbsp;</span>
1676
+ <span class="cline-any cline-no">&nbsp;</span>
1677
+ <span class="cline-any cline-no">&nbsp;</span>
1678
+ <span class="cline-any cline-no">&nbsp;</span>
1679
+ <span class="cline-any cline-no">&nbsp;</span>
1680
+ <span class="cline-any cline-no">&nbsp;</span>
1681
+ <span class="cline-any cline-no">&nbsp;</span>
1682
+ <span class="cline-any cline-no">&nbsp;</span>
1683
+ <span class="cline-any cline-no">&nbsp;</span>
1684
+ <span class="cline-any cline-no">&nbsp;</span>
1685
+ <span class="cline-any cline-no">&nbsp;</span>
1686
+ <span class="cline-any cline-no">&nbsp;</span>
1687
+ <span class="cline-any cline-no">&nbsp;</span>
1688
+ <span class="cline-any cline-no">&nbsp;</span>
1689
+ <span class="cline-any cline-no">&nbsp;</span>
1690
+ <span class="cline-any cline-no">&nbsp;</span>
1691
+ <span class="cline-any cline-no">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-no">&nbsp;</span>
1694
+ <span class="cline-any cline-no">&nbsp;</span>
1695
+ <span class="cline-any cline-no">&nbsp;</span>
1696
+ <span class="cline-any cline-no">&nbsp;</span>
1697
+ <span class="cline-any cline-no">&nbsp;</span>
1698
+ <span class="cline-any cline-no">&nbsp;</span>
1699
+ <span class="cline-any cline-no">&nbsp;</span>
1700
+ <span class="cline-any cline-no">&nbsp;</span>
1701
+ <span class="cline-any cline-no">&nbsp;</span>
1702
+ <span class="cline-any cline-no">&nbsp;</span>
1703
+ <span class="cline-any cline-no">&nbsp;</span>
1704
+ <span class="cline-any cline-no">&nbsp;</span>
1705
+ <span class="cline-any cline-no">&nbsp;</span>
1706
+ <span class="cline-any cline-no">&nbsp;</span>
1707
+ <span class="cline-any cline-no">&nbsp;</span>
1708
+ <span class="cline-any cline-no">&nbsp;</span>
1709
+ <span class="cline-any cline-no">&nbsp;</span>
1710
+ <span class="cline-any cline-no">&nbsp;</span>
1711
+ <span class="cline-any cline-no">&nbsp;</span>
1712
+ <span class="cline-any cline-no">&nbsp;</span>
1713
+ <span class="cline-any cline-no">&nbsp;</span>
1714
+ <span class="cline-any cline-no">&nbsp;</span>
1715
+ <span class="cline-any cline-no">&nbsp;</span>
1716
+ <span class="cline-any cline-no">&nbsp;</span>
1717
+ <span class="cline-any cline-no">&nbsp;</span>
1718
+ <span class="cline-any cline-no">&nbsp;</span>
1719
+ <span class="cline-any cline-no">&nbsp;</span>
1720
+ <span class="cline-any cline-no">&nbsp;</span>
1721
+ <span class="cline-any cline-no">&nbsp;</span>
1722
+ <span class="cline-any cline-no">&nbsp;</span>
1723
+ <span class="cline-any cline-no">&nbsp;</span>
1724
+ <span class="cline-any cline-no">&nbsp;</span>
1725
+ <span class="cline-any cline-no">&nbsp;</span>
1726
+ <span class="cline-any cline-no">&nbsp;</span>
1727
+ <span class="cline-any cline-no">&nbsp;</span>
1728
+ <span class="cline-any cline-no">&nbsp;</span>
1729
+ <span class="cline-any cline-no">&nbsp;</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
1731
+ <span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
1732
+ <span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
1733
+ <span class="cstat-no" title="statement not covered" > *</span>
1734
+ <span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
1735
+ <span class="cstat-no" title="statement not covered" > *</span>
1736
+ <span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
1737
+ <span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
1738
+ <span class="cstat-no" title="statement not covered" > */</span>
1739
+ <span class="cstat-no" title="statement not covered" ></span>
1740
+ <span class="cstat-no" title="statement not covered" >/**</span>
1741
+ <span class="cstat-no" title="statement not covered" > * @file Service for building XRPL (Ripple) transactions using the xrpl package.</span>
1742
+ <span class="cstat-no" title="statement not covered" > *</span>
1743
+ <span class="cstat-no" title="statement not covered" > * @module services/transaction-builders/xrpl</span>
1744
+ <span class="cstat-no" title="statement not covered" > *</span>
1745
+ <span class="cstat-no" title="statement not covered" > * @description</span>
1746
+ <span class="cstat-no" title="statement not covered" > * XrplTransactionBuilderService provides methods to construct various XRPL transaction</span>
1747
+ <span class="cstat-no" title="statement not covered" > * types and serialize them to base64 payloads ready for signing. It supports all major</span>
1748
+ <span class="cstat-no" title="statement not covered" > * XRPL transaction types including payments, trust lines, DEX orders, escrows, payment</span>
1749
+ <span class="cstat-no" title="statement not covered" > * channels, checks, and NFTs.</span>
1750
+ <span class="cstat-no" title="statement not covered" > *</span>
1751
+ <span class="cstat-no" title="statement not covered" > * **Supported Transaction Types:**</span>
1752
+ <span class="cstat-no" title="statement not covered" > * - Payment - XRP and token transfers</span>
1753
+ <span class="cstat-no" title="statement not covered" > * - TrustSet - Trust line creation/modification</span>
1754
+ <span class="cstat-no" title="statement not covered" > * - OfferCreate/Cancel - DEX order management</span>
1755
+ <span class="cstat-no" title="statement not covered" > * - AccountSet - Account configuration</span>
1756
+ <span class="cstat-no" title="statement not covered" > * - EscrowCreate/Finish/Cancel - Escrow operations</span>
1757
+ <span class="cstat-no" title="statement not covered" > * - PaymentChannel operations - Payment channels</span>
1758
+ <span class="cstat-no" title="statement not covered" > * - Check operations - XRPL checks</span>
1759
+ <span class="cstat-no" title="statement not covered" > * - DepositPreauth - Deposit preauthorization</span>
1760
+ <span class="cstat-no" title="statement not covered" > * - SignerListSet - Multi-signature configuration</span>
1761
+ <span class="cstat-no" title="statement not covered" > * - TicketCreate - Ticket creation</span>
1762
+ <span class="cstat-no" title="statement not covered" > * - NFT operations - NFTokenMint, Burn, CreateOffer, etc.</span>
1763
+ <span class="cstat-no" title="statement not covered" > * - Batch transactions - Multiple operations atomically</span>
1764
+ <span class="cstat-no" title="statement not covered" > *</span>
1765
+ <span class="cstat-no" title="statement not covered" > * **Amount Format:**</span>
1766
+ <span class="cstat-no" title="statement not covered" > * - XRP amounts are in "drops" (1 XRP = 1,000,000 drops)</span>
1767
+ <span class="cstat-no" title="statement not covered" > * - Token amounts use the IssuedCurrency format { currency, issuer, value }</span>
1768
+ <span class="cstat-no" title="statement not covered" > */</span>
1769
+ <span class="cstat-no" title="statement not covered" ></span>
1770
+ <span class="cstat-no" title="statement not covered" >import { Injectable } from '@angular/core';</span>
1771
+ <span class="cstat-no" title="statement not covered" >import type {</span>
1772
+ <span class="cstat-no" title="statement not covered" > Payment,</span>
1773
+ <span class="cstat-no" title="statement not covered" > TrustSet,</span>
1774
+ <span class="cstat-no" title="statement not covered" > OfferCreate,</span>
1775
+ <span class="cstat-no" title="statement not covered" > OfferCancel,</span>
1776
+ <span class="cstat-no" title="statement not covered" > AccountSet,</span>
1777
+ <span class="cstat-no" title="statement not covered" > EscrowCreate,</span>
1778
+ <span class="cstat-no" title="statement not covered" > EscrowFinish,</span>
1779
+ <span class="cstat-no" title="statement not covered" > EscrowCancel,</span>
1780
+ <span class="cstat-no" title="statement not covered" > PaymentChannelCreate,</span>
1781
+ <span class="cstat-no" title="statement not covered" > PaymentChannelFund,</span>
1782
+ <span class="cstat-no" title="statement not covered" > PaymentChannelClaim,</span>
1783
+ <span class="cstat-no" title="statement not covered" > CheckCreate,</span>
1784
+ <span class="cstat-no" title="statement not covered" > CheckCash,</span>
1785
+ <span class="cstat-no" title="statement not covered" > CheckCancel,</span>
1786
+ <span class="cstat-no" title="statement not covered" > DepositPreauth,</span>
1787
+ <span class="cstat-no" title="statement not covered" > SignerListSet,</span>
1788
+ <span class="cstat-no" title="statement not covered" > TicketCreate,</span>
1789
+ <span class="cstat-no" title="statement not covered" > NFTokenMint,</span>
1790
+ <span class="cstat-no" title="statement not covered" > NFTokenBurn,</span>
1791
+ <span class="cstat-no" title="statement not covered" > NFTokenCreateOffer,</span>
1792
+ <span class="cstat-no" title="statement not covered" > NFTokenAcceptOffer,</span>
1793
+ <span class="cstat-no" title="statement not covered" > NFTokenCancelOffer,</span>
1794
+ <span class="cstat-no" title="statement not covered" > Transaction,</span>
1795
+ <span class="cstat-no" title="statement not covered" >} from 'xrpl';</span>
1796
+ <span class="cstat-no" title="statement not covered" ></span>
1797
+ <span class="cstat-no" title="statement not covered" >/**</span>
1798
+ <span class="cstat-no" title="statement not covered" > * Service for building XRPL (Ripple) transactions using the xrpl package.</span>
1799
+ <span class="cstat-no" title="statement not covered" > *</span>
1800
+ <span class="cstat-no" title="statement not covered" > * @service XrplTransactionBuilderService</span>
1801
+ <span class="cstat-no" title="statement not covered" > *</span>
1802
+ <span class="cstat-no" title="statement not covered" > * @description</span>
1803
+ <span class="cstat-no" title="statement not covered" > * Provides methods to construct various XRPL transaction types and serialize them</span>
1804
+ <span class="cstat-no" title="statement not covered" > * to base64 payloads ready for signing. All build methods return a base64-encoded</span>
1805
+ <span class="cstat-no" title="statement not covered" > * JSON representation of the transaction.</span>
1806
+ <span class="cstat-no" title="statement not covered" > *</span>
1807
+ <span class="cstat-no" title="statement not covered" > * Unlike Hedera transactions which are frozen with a client, XRPL transactions</span>
1808
+ <span class="cstat-no" title="statement not covered" > * are serialized as JSON and can be signed without network connection.</span>
1809
+ <span class="cstat-no" title="statement not covered" > *</span>
1810
+ <span class="cstat-no" title="statement not covered" > * @providedIn root</span>
1811
+ <span class="cstat-no" title="statement not covered" > *</span>
1812
+ <span class="cstat-no" title="statement not covered" > * @Component({ ... })</span>
1813
+ <span class="cstat-no" title="statement not covered" > * export class SendPage {</span>
1814
+ <span class="cstat-no" title="statement not covered" > * private builder = inject(XrplTransactionBuilderService);</span>
1815
+ <span class="cstat-no" title="statement not covered" > * private wallet = inject(UnifiedWalletService);</span>
1816
+ <span class="cstat-no" title="statement not covered" > *</span>
1817
+ <span class="cstat-no" title="statement not covered" > * async sendXrp(to: string, drops: string) {</span>
1818
+ <span class="cstat-no" title="statement not covered" > * const from = this.wallet.activeAccount()?.address;</span>
1819
+ <span class="cstat-no" title="statement not covered" > * const payload = await this.builder.buildPayment(from!, to, drops);</span>
1820
+ <span class="cstat-no" title="statement not covered" > * return this.wallet.submitTransaction({ payload });</span>
1821
+ <span class="cstat-no" title="statement not covered" > * }</span>
1822
+ <span class="cstat-no" title="statement not covered" > * }</span>
1823
+ <span class="cstat-no" title="statement not covered" > * ```</span>
1824
+ <span class="cstat-no" title="statement not covered" > */</span>
1825
+ <span class="cstat-no" title="statement not covered" >@Injectable({</span>
1826
+ <span class="cstat-no" title="statement not covered" > providedIn: 'root',</span>
1827
+ <span class="cstat-no" title="statement not covered" >})</span>
1828
+ <span class="cstat-no" title="statement not covered" >export class XrplTransactionBuilderService {</span>
1829
+ <span class="cstat-no" title="statement not covered" > /**</span>
1830
+ <span class="cstat-no" title="statement not covered" > * Builds a Payment transaction (XRP or token).</span>
1831
+ <span class="cstat-no" title="statement not covered" > *</span>
1832
+ <span class="cstat-no" title="statement not covered" > * @description</span>
1833
+ <span class="cstat-no" title="statement not covered" > * Creates a Payment transaction that sends XRP or issued currency tokens</span>
1834
+ <span class="cstat-no" title="statement not covered" > * from one account to another. For XRP, the amount is in drops (1 XRP = 1,000,000 drops).</span>
1835
+ <span class="cstat-no" title="statement not covered" > *</span>
1836
+ <span class="cstat-no" title="statement not covered" > * @param account - Source account address (r...)</span>
1837
+ <span class="cstat-no" title="statement not covered" > * @param destination - Destination account address (r...)</span>
1838
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount (XRP in drops, or token value string)</span>
1839
+ <span class="cstat-no" title="statement not covered" > * @param isToken - Whether this is a token payment (default: false)</span>
1840
+ <span class="cstat-no" title="statement not covered" > * @param currency - Token currency code (required if isToken)</span>
1841
+ <span class="cstat-no" title="statement not covered" > * @param issuer - Token issuer address (required if isToken)</span>
1842
+ <span class="cstat-no" title="statement not covered" > *</span>
1843
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction JSON</span>
1844
+ <span class="cstat-no" title="statement not covered" > */</span>
1845
+ <span class="cstat-no" title="statement not covered" > async buildPayment(</span>
1846
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
1847
+ <span class="cstat-no" title="statement not covered" > destination: string,</span>
1848
+ <span class="cstat-no" title="statement not covered" > amount: string,</span>
1849
+ <span class="cstat-no" title="statement not covered" > isToken = false,</span>
1850
+ <span class="cstat-no" title="statement not covered" > currency?: string,</span>
1851
+ <span class="cstat-no" title="statement not covered" > issuer?: string,</span>
1852
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
1853
+ <span class="cstat-no" title="statement not covered" > const tx: Payment = {</span>
1854
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Payment',</span>
1855
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1856
+ <span class="cstat-no" title="statement not covered" > Destination: destination,</span>
1857
+ <span class="cstat-no" title="statement not covered" > Amount:</span>
1858
+ <span class="cstat-no" title="statement not covered" > isToken &amp;&amp; currency &amp;&amp; issuer</span>
1859
+ <span class="cstat-no" title="statement not covered" > ? {</span>
1860
+ <span class="cstat-no" title="statement not covered" > currency,</span>
1861
+ <span class="cstat-no" title="statement not covered" > issuer,</span>
1862
+ <span class="cstat-no" title="statement not covered" > value: amount,</span>
1863
+ <span class="cstat-no" title="statement not covered" > }</span>
1864
+ <span class="cstat-no" title="statement not covered" > : amount,</span>
1865
+ <span class="cstat-no" title="statement not covered" > };</span>
1866
+ <span class="cstat-no" title="statement not covered" ></span>
1867
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
1868
+ <span class="cstat-no" title="statement not covered" > }</span>
1869
+ <span class="cstat-no" title="statement not covered" ></span>
1870
+ <span class="cstat-no" title="statement not covered" > /**</span>
1871
+ <span class="cstat-no" title="statement not covered" > * Builds a TrustSet transaction to establish or modify a trust line.</span>
1872
+ <span class="cstat-no" title="statement not covered" > *</span>
1873
+ <span class="cstat-no" title="statement not covered" > * @description</span>
1874
+ <span class="cstat-no" title="statement not covered" > * Creates a TrustSet transaction that establishes a trust line between</span>
1875
+ <span class="cstat-no" title="statement not covered" > * your account and a token issuer. Trust lines are required before you</span>
1876
+ <span class="cstat-no" title="statement not covered" > * can hold issued currency tokens on XRPL.</span>
1877
+ <span class="cstat-no" title="statement not covered" > *</span>
1878
+ <span class="cstat-no" title="statement not covered" > * @param account - Your account address (r...)</span>
1879
+ <span class="cstat-no" title="statement not covered" > * @param currency - Currency code (e.g., 'USD', 'EUR', or hex code)</span>
1880
+ <span class="cstat-no" title="statement not covered" > * @param issuer - Token issuer address (r...)</span>
1881
+ <span class="cstat-no" title="statement not covered" > * @param limit - Maximum amount willing to hold (e.g., '1000000')</span>
1882
+ <span class="cstat-no" title="statement not covered" > *</span>
1883
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction JSON</span>
1884
+ <span class="cstat-no" title="statement not covered" > */</span>
1885
+ <span class="cstat-no" title="statement not covered" > async buildTrustSet(</span>
1886
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
1887
+ <span class="cstat-no" title="statement not covered" > currency: string,</span>
1888
+ <span class="cstat-no" title="statement not covered" > issuer: string,</span>
1889
+ <span class="cstat-no" title="statement not covered" > limit: string,</span>
1890
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
1891
+ <span class="cstat-no" title="statement not covered" > const tx: TrustSet = {</span>
1892
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'TrustSet',</span>
1893
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1894
+ <span class="cstat-no" title="statement not covered" > LimitAmount: {</span>
1895
+ <span class="cstat-no" title="statement not covered" > currency,</span>
1896
+ <span class="cstat-no" title="statement not covered" > issuer,</span>
1897
+ <span class="cstat-no" title="statement not covered" > value: limit,</span>
1898
+ <span class="cstat-no" title="statement not covered" > },</span>
1899
+ <span class="cstat-no" title="statement not covered" > };</span>
1900
+ <span class="cstat-no" title="statement not covered" ></span>
1901
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
1902
+ <span class="cstat-no" title="statement not covered" > }</span>
1903
+ <span class="cstat-no" title="statement not covered" ></span>
1904
+ <span class="cstat-no" title="statement not covered" > /**</span>
1905
+ <span class="cstat-no" title="statement not covered" > * Build an OfferCreate transaction (DEX order)</span>
1906
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
1907
+ <span class="cstat-no" title="statement not covered" > * @param takerPays - What taker pays (amount object or XRP drops)</span>
1908
+ <span class="cstat-no" title="statement not covered" > * @param takerGets - What taker gets (amount object or XRP drops)</span>
1909
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
1910
+ <span class="cstat-no" title="statement not covered" > */</span>
1911
+ <span class="cstat-no" title="statement not covered" > async buildOfferCreate(</span>
1912
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
1913
+ <span class="cstat-no" title="statement not covered" > takerPays: string | { currency: string; issuer: string; value: string },</span>
1914
+ <span class="cstat-no" title="statement not covered" > takerGets: string | { currency: string; issuer: string; value: string },</span>
1915
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
1916
+ <span class="cstat-no" title="statement not covered" > const tx: OfferCreate = {</span>
1917
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'OfferCreate',</span>
1918
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1919
+ <span class="cstat-no" title="statement not covered" > TakerPays: takerPays,</span>
1920
+ <span class="cstat-no" title="statement not covered" > TakerGets: takerGets,</span>
1921
+ <span class="cstat-no" title="statement not covered" > };</span>
1922
+ <span class="cstat-no" title="statement not covered" ></span>
1923
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
1924
+ <span class="cstat-no" title="statement not covered" > }</span>
1925
+ <span class="cstat-no" title="statement not covered" ></span>
1926
+ <span class="cstat-no" title="statement not covered" > /**</span>
1927
+ <span class="cstat-no" title="statement not covered" > * Build an OfferCancel transaction</span>
1928
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
1929
+ <span class="cstat-no" title="statement not covered" > * @param offerSequence - Sequence number of the offer to cancel</span>
1930
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
1931
+ <span class="cstat-no" title="statement not covered" > */</span>
1932
+ <span class="cstat-no" title="statement not covered" > async buildOfferCancel(account: string, offerSequence: number): Promise&lt;string&gt; {</span>
1933
+ <span class="cstat-no" title="statement not covered" > const tx: OfferCancel = {</span>
1934
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'OfferCancel',</span>
1935
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1936
+ <span class="cstat-no" title="statement not covered" > OfferSequence: offerSequence,</span>
1937
+ <span class="cstat-no" title="statement not covered" > };</span>
1938
+ <span class="cstat-no" title="statement not covered" ></span>
1939
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
1940
+ <span class="cstat-no" title="statement not covered" > }</span>
1941
+ <span class="cstat-no" title="statement not covered" ></span>
1942
+ <span class="cstat-no" title="statement not covered" > /**</span>
1943
+ <span class="cstat-no" title="statement not covered" > * Build an AccountSet transaction</span>
1944
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
1945
+ <span class="cstat-no" title="statement not covered" > * @param options - Account set options (domain, emailHash, flags, etc.)</span>
1946
+ <span class="cstat-no" title="statement not covered" > * @param options.domain</span>
1947
+ <span class="cstat-no" title="statement not covered" > * @param options.emailHash</span>
1948
+ <span class="cstat-no" title="statement not covered" > * @param options.messageKey</span>
1949
+ <span class="cstat-no" title="statement not covered" > * @param options.transferRate</span>
1950
+ <span class="cstat-no" title="statement not covered" > * @param options.tickSize</span>
1951
+ <span class="cstat-no" title="statement not covered" > * @param options.setFlag</span>
1952
+ <span class="cstat-no" title="statement not covered" > * @param options.clearFlag</span>
1953
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
1954
+ <span class="cstat-no" title="statement not covered" > */</span>
1955
+ <span class="cstat-no" title="statement not covered" > async buildAccountSet(</span>
1956
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
1957
+ <span class="cstat-no" title="statement not covered" > options: {</span>
1958
+ <span class="cstat-no" title="statement not covered" > domain?: string;</span>
1959
+ <span class="cstat-no" title="statement not covered" > emailHash?: string;</span>
1960
+ <span class="cstat-no" title="statement not covered" > messageKey?: string;</span>
1961
+ <span class="cstat-no" title="statement not covered" > transferRate?: number;</span>
1962
+ <span class="cstat-no" title="statement not covered" > tickSize?: number;</span>
1963
+ <span class="cstat-no" title="statement not covered" > setFlag?: number;</span>
1964
+ <span class="cstat-no" title="statement not covered" > clearFlag?: number;</span>
1965
+ <span class="cstat-no" title="statement not covered" > },</span>
1966
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
1967
+ <span class="cstat-no" title="statement not covered" > const tx: AccountSet = {</span>
1968
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'AccountSet',</span>
1969
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1970
+ <span class="cstat-no" title="statement not covered" > ...options,</span>
1971
+ <span class="cstat-no" title="statement not covered" > };</span>
1972
+ <span class="cstat-no" title="statement not covered" ></span>
1973
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
1974
+ <span class="cstat-no" title="statement not covered" > }</span>
1975
+ <span class="cstat-no" title="statement not covered" ></span>
1976
+ <span class="cstat-no" title="statement not covered" > /**</span>
1977
+ <span class="cstat-no" title="statement not covered" > * Build an EscrowCreate transaction</span>
1978
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
1979
+ <span class="cstat-no" title="statement not covered" > * @param destination - Destination account</span>
1980
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount in drops</span>
1981
+ <span class="cstat-no" title="statement not covered" > * @param finishAfter - Ripple Epoch (seconds since 2000-01-01 UTC). Callers</span>
1982
+ <span class="cstat-no" title="statement not covered" > * that hold Unix timestamps must convert first; an unmodified Unix value</span>
1983
+ <span class="cstat-no" title="statement not covered" > * would put the escrow ~30 years in the future. The XRPL Time Utilities</span>
1984
+ <span class="cstat-no" title="statement not covered" > * in `xrpl.js` expose helpers, or compute as `unixSeconds - 946684800`.</span>
1985
+ <span class="cstat-no" title="statement not covered" > * @param cancelAfter - Optional. Same Ripple Epoch contract as finishAfter.</span>
1986
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
1987
+ <span class="cstat-no" title="statement not covered" > */</span>
1988
+ <span class="cstat-no" title="statement not covered" > async buildEscrowCreate(</span>
1989
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
1990
+ <span class="cstat-no" title="statement not covered" > destination: string,</span>
1991
+ <span class="cstat-no" title="statement not covered" > amount: string,</span>
1992
+ <span class="cstat-no" title="statement not covered" > finishAfter: number,</span>
1993
+ <span class="cstat-no" title="statement not covered" > cancelAfter?: number,</span>
1994
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
1995
+ <span class="cstat-no" title="statement not covered" > const tx: EscrowCreate = {</span>
1996
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'EscrowCreate',</span>
1997
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
1998
+ <span class="cstat-no" title="statement not covered" > Destination: destination,</span>
1999
+ <span class="cstat-no" title="statement not covered" > Amount: amount,</span>
2000
+ <span class="cstat-no" title="statement not covered" > FinishAfter: finishAfter,</span>
2001
+ <span class="cstat-no" title="statement not covered" > ...(cancelAfter &amp;&amp; { CancelAfter: cancelAfter }),</span>
2002
+ <span class="cstat-no" title="statement not covered" > };</span>
2003
+ <span class="cstat-no" title="statement not covered" ></span>
2004
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2005
+ <span class="cstat-no" title="statement not covered" > }</span>
2006
+ <span class="cstat-no" title="statement not covered" ></span>
2007
+ <span class="cstat-no" title="statement not covered" > /**</span>
2008
+ <span class="cstat-no" title="statement not covered" > * Build an EscrowFinish transaction</span>
2009
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2010
+ <span class="cstat-no" title="statement not covered" > * @param owner - Escrow owner account</span>
2011
+ <span class="cstat-no" title="statement not covered" > * @param offerSequence - Sequence number of EscrowCreate transaction</span>
2012
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2013
+ <span class="cstat-no" title="statement not covered" > */</span>
2014
+ <span class="cstat-no" title="statement not covered" > async buildEscrowFinish(account: string, owner: string, offerSequence: number): Promise&lt;string&gt; {</span>
2015
+ <span class="cstat-no" title="statement not covered" > const tx: EscrowFinish = {</span>
2016
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'EscrowFinish',</span>
2017
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2018
+ <span class="cstat-no" title="statement not covered" > Owner: owner,</span>
2019
+ <span class="cstat-no" title="statement not covered" > OfferSequence: offerSequence,</span>
2020
+ <span class="cstat-no" title="statement not covered" > };</span>
2021
+ <span class="cstat-no" title="statement not covered" ></span>
2022
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2023
+ <span class="cstat-no" title="statement not covered" > }</span>
2024
+ <span class="cstat-no" title="statement not covered" ></span>
2025
+ <span class="cstat-no" title="statement not covered" > /**</span>
2026
+ <span class="cstat-no" title="statement not covered" > * Build an EscrowCancel transaction</span>
2027
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2028
+ <span class="cstat-no" title="statement not covered" > * @param owner - Escrow owner account</span>
2029
+ <span class="cstat-no" title="statement not covered" > * @param offerSequence - Sequence number of EscrowCreate transaction</span>
2030
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2031
+ <span class="cstat-no" title="statement not covered" > */</span>
2032
+ <span class="cstat-no" title="statement not covered" > async buildEscrowCancel(account: string, owner: string, offerSequence: number): Promise&lt;string&gt; {</span>
2033
+ <span class="cstat-no" title="statement not covered" > const tx: EscrowCancel = {</span>
2034
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'EscrowCancel',</span>
2035
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2036
+ <span class="cstat-no" title="statement not covered" > Owner: owner,</span>
2037
+ <span class="cstat-no" title="statement not covered" > OfferSequence: offerSequence,</span>
2038
+ <span class="cstat-no" title="statement not covered" > };</span>
2039
+ <span class="cstat-no" title="statement not covered" ></span>
2040
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2041
+ <span class="cstat-no" title="statement not covered" > }</span>
2042
+ <span class="cstat-no" title="statement not covered" ></span>
2043
+ <span class="cstat-no" title="statement not covered" > /**</span>
2044
+ <span class="cstat-no" title="statement not covered" > * Build a PaymentChannelCreate transaction</span>
2045
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2046
+ <span class="cstat-no" title="statement not covered" > * @param destination - Destination account</span>
2047
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount in drops</span>
2048
+ <span class="cstat-no" title="statement not covered" > * @param settleDelay - Settle delay in seconds</span>
2049
+ <span class="cstat-no" title="statement not covered" > * @param publicKey - Public key for channel</span>
2050
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2051
+ <span class="cstat-no" title="statement not covered" > */</span>
2052
+ <span class="cstat-no" title="statement not covered" > async buildPaymentChannelCreate(</span>
2053
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2054
+ <span class="cstat-no" title="statement not covered" > destination: string,</span>
2055
+ <span class="cstat-no" title="statement not covered" > amount: string,</span>
2056
+ <span class="cstat-no" title="statement not covered" > settleDelay: number,</span>
2057
+ <span class="cstat-no" title="statement not covered" > publicKey: string,</span>
2058
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2059
+ <span class="cstat-no" title="statement not covered" > const tx: PaymentChannelCreate = {</span>
2060
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'PaymentChannelCreate',</span>
2061
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2062
+ <span class="cstat-no" title="statement not covered" > Destination: destination,</span>
2063
+ <span class="cstat-no" title="statement not covered" > Amount: amount,</span>
2064
+ <span class="cstat-no" title="statement not covered" > SettleDelay: settleDelay,</span>
2065
+ <span class="cstat-no" title="statement not covered" > PublicKey: publicKey,</span>
2066
+ <span class="cstat-no" title="statement not covered" > };</span>
2067
+ <span class="cstat-no" title="statement not covered" ></span>
2068
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2069
+ <span class="cstat-no" title="statement not covered" > }</span>
2070
+ <span class="cstat-no" title="statement not covered" ></span>
2071
+ <span class="cstat-no" title="statement not covered" > /**</span>
2072
+ <span class="cstat-no" title="statement not covered" > * Build a PaymentChannelFund transaction</span>
2073
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2074
+ <span class="cstat-no" title="statement not covered" > * @param channel - Channel ID</span>
2075
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount in drops to add</span>
2076
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2077
+ <span class="cstat-no" title="statement not covered" > */</span>
2078
+ <span class="cstat-no" title="statement not covered" > async buildPaymentChannelFund(account: string, channel: string, amount: string): Promise&lt;string&gt; {</span>
2079
+ <span class="cstat-no" title="statement not covered" > const tx: PaymentChannelFund = {</span>
2080
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'PaymentChannelFund',</span>
2081
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2082
+ <span class="cstat-no" title="statement not covered" > Channel: channel,</span>
2083
+ <span class="cstat-no" title="statement not covered" > Amount: amount,</span>
2084
+ <span class="cstat-no" title="statement not covered" > };</span>
2085
+ <span class="cstat-no" title="statement not covered" ></span>
2086
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2087
+ <span class="cstat-no" title="statement not covered" > }</span>
2088
+ <span class="cstat-no" title="statement not covered" ></span>
2089
+ <span class="cstat-no" title="statement not covered" > /**</span>
2090
+ <span class="cstat-no" title="statement not covered" > * Build a PaymentChannelClaim transaction</span>
2091
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2092
+ <span class="cstat-no" title="statement not covered" > * @param channel - Channel ID</span>
2093
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount in drops to claim</span>
2094
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2095
+ <span class="cstat-no" title="statement not covered" > */</span>
2096
+ <span class="cstat-no" title="statement not covered" > async buildPaymentChannelClaim(</span>
2097
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2098
+ <span class="cstat-no" title="statement not covered" > channel: string,</span>
2099
+ <span class="cstat-no" title="statement not covered" > amount?: string,</span>
2100
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2101
+ <span class="cstat-no" title="statement not covered" > const tx: PaymentChannelClaim = {</span>
2102
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'PaymentChannelClaim',</span>
2103
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2104
+ <span class="cstat-no" title="statement not covered" > Channel: channel,</span>
2105
+ <span class="cstat-no" title="statement not covered" > ...(amount &amp;&amp; { Amount: amount }),</span>
2106
+ <span class="cstat-no" title="statement not covered" > };</span>
2107
+ <span class="cstat-no" title="statement not covered" ></span>
2108
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2109
+ <span class="cstat-no" title="statement not covered" > }</span>
2110
+ <span class="cstat-no" title="statement not covered" ></span>
2111
+ <span class="cstat-no" title="statement not covered" > /**</span>
2112
+ <span class="cstat-no" title="statement not covered" > * Build a CheckCreate transaction</span>
2113
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2114
+ <span class="cstat-no" title="statement not covered" > * @param destination - Destination account</span>
2115
+ <span class="cstat-no" title="statement not covered" > * @param sendMax - Maximum amount that can be cashed</span>
2116
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2117
+ <span class="cstat-no" title="statement not covered" > */</span>
2118
+ <span class="cstat-no" title="statement not covered" > async buildCheckCreate(account: string, destination: string, sendMax: string): Promise&lt;string&gt; {</span>
2119
+ <span class="cstat-no" title="statement not covered" > const tx: CheckCreate = {</span>
2120
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'CheckCreate',</span>
2121
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2122
+ <span class="cstat-no" title="statement not covered" > Destination: destination,</span>
2123
+ <span class="cstat-no" title="statement not covered" > SendMax: sendMax,</span>
2124
+ <span class="cstat-no" title="statement not covered" > };</span>
2125
+ <span class="cstat-no" title="statement not covered" ></span>
2126
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2127
+ <span class="cstat-no" title="statement not covered" > }</span>
2128
+ <span class="cstat-no" title="statement not covered" ></span>
2129
+ <span class="cstat-no" title="statement not covered" > /**</span>
2130
+ <span class="cstat-no" title="statement not covered" > * Build a CheckCash transaction</span>
2131
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2132
+ <span class="cstat-no" title="statement not covered" > * @param checkID - Check ID to cash</span>
2133
+ <span class="cstat-no" title="statement not covered" > * @param amount - Amount to cash (optional, uses DeliverMin if not provided)</span>
2134
+ <span class="cstat-no" title="statement not covered" > * @param deliverMin - Minimum amount to deliver (optional)</span>
2135
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2136
+ <span class="cstat-no" title="statement not covered" > */</span>
2137
+ <span class="cstat-no" title="statement not covered" > async buildCheckCash(</span>
2138
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2139
+ <span class="cstat-no" title="statement not covered" > checkID: string,</span>
2140
+ <span class="cstat-no" title="statement not covered" > amount?: string,</span>
2141
+ <span class="cstat-no" title="statement not covered" > deliverMin?: string,</span>
2142
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2143
+ <span class="cstat-no" title="statement not covered" > const tx: CheckCash = {</span>
2144
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'CheckCash',</span>
2145
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2146
+ <span class="cstat-no" title="statement not covered" > CheckID: checkID,</span>
2147
+ <span class="cstat-no" title="statement not covered" > ...(amount &amp;&amp; { Amount: amount }),</span>
2148
+ <span class="cstat-no" title="statement not covered" > ...(deliverMin &amp;&amp; { DeliverMin: deliverMin }),</span>
2149
+ <span class="cstat-no" title="statement not covered" > };</span>
2150
+ <span class="cstat-no" title="statement not covered" ></span>
2151
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2152
+ <span class="cstat-no" title="statement not covered" > }</span>
2153
+ <span class="cstat-no" title="statement not covered" ></span>
2154
+ <span class="cstat-no" title="statement not covered" > /**</span>
2155
+ <span class="cstat-no" title="statement not covered" > * Build a CheckCancel transaction</span>
2156
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2157
+ <span class="cstat-no" title="statement not covered" > * @param checkID - Check ID to cancel</span>
2158
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2159
+ <span class="cstat-no" title="statement not covered" > */</span>
2160
+ <span class="cstat-no" title="statement not covered" > async buildCheckCancel(account: string, checkID: string): Promise&lt;string&gt; {</span>
2161
+ <span class="cstat-no" title="statement not covered" > const tx: CheckCancel = {</span>
2162
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'CheckCancel',</span>
2163
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2164
+ <span class="cstat-no" title="statement not covered" > CheckID: checkID,</span>
2165
+ <span class="cstat-no" title="statement not covered" > };</span>
2166
+ <span class="cstat-no" title="statement not covered" ></span>
2167
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2168
+ <span class="cstat-no" title="statement not covered" > }</span>
2169
+ <span class="cstat-no" title="statement not covered" ></span>
2170
+ <span class="cstat-no" title="statement not covered" > /**</span>
2171
+ <span class="cstat-no" title="statement not covered" > * Build a DepositPreauth transaction</span>
2172
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2173
+ <span class="cstat-no" title="statement not covered" > * @param authorize - Account to preauthorize (optional)</span>
2174
+ <span class="cstat-no" title="statement not covered" > * @param unauthorize - Account to remove authorization (optional)</span>
2175
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2176
+ <span class="cstat-no" title="statement not covered" > */</span>
2177
+ <span class="cstat-no" title="statement not covered" > async buildDepositPreauth(</span>
2178
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2179
+ <span class="cstat-no" title="statement not covered" > authorize?: string,</span>
2180
+ <span class="cstat-no" title="statement not covered" > unauthorize?: string,</span>
2181
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2182
+ <span class="cstat-no" title="statement not covered" > const tx: DepositPreauth = {</span>
2183
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'DepositPreauth',</span>
2184
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2185
+ <span class="cstat-no" title="statement not covered" > ...(authorize &amp;&amp; { Authorize: authorize }),</span>
2186
+ <span class="cstat-no" title="statement not covered" > ...(unauthorize &amp;&amp; { Unauthorize: unauthorize }),</span>
2187
+ <span class="cstat-no" title="statement not covered" > };</span>
2188
+ <span class="cstat-no" title="statement not covered" ></span>
2189
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2190
+ <span class="cstat-no" title="statement not covered" > }</span>
2191
+ <span class="cstat-no" title="statement not covered" ></span>
2192
+ <span class="cstat-no" title="statement not covered" > /**</span>
2193
+ <span class="cstat-no" title="statement not covered" > * Build a SignerListSet transaction</span>
2194
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2195
+ <span class="cstat-no" title="statement not covered" > * @param signerQuorum - Required signature weight</span>
2196
+ <span class="cstat-no" title="statement not covered" > * @param signerEntries - Array of signer entries</span>
2197
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2198
+ <span class="cstat-no" title="statement not covered" > */</span>
2199
+ <span class="cstat-no" title="statement not covered" > async buildSignerListSet(</span>
2200
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2201
+ <span class="cstat-no" title="statement not covered" > signerQuorum: number,</span>
2202
+ <span class="cstat-no" title="statement not covered" > signerEntries: Array&lt;{ account: string; weight: number }&gt;,</span>
2203
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2204
+ <span class="cstat-no" title="statement not covered" > const tx: SignerListSet = {</span>
2205
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'SignerListSet',</span>
2206
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2207
+ <span class="cstat-no" title="statement not covered" > SignerQuorum: signerQuorum,</span>
2208
+ <span class="cstat-no" title="statement not covered" > SignerEntries: signerEntries.map((entry) =&gt; ({</span>
2209
+ <span class="cstat-no" title="statement not covered" > SignerEntry: {</span>
2210
+ <span class="cstat-no" title="statement not covered" > Account: entry.account,</span>
2211
+ <span class="cstat-no" title="statement not covered" > SignerWeight: entry.weight,</span>
2212
+ <span class="cstat-no" title="statement not covered" > },</span>
2213
+ <span class="cstat-no" title="statement not covered" > })),</span>
2214
+ <span class="cstat-no" title="statement not covered" > };</span>
2215
+ <span class="cstat-no" title="statement not covered" ></span>
2216
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2217
+ <span class="cstat-no" title="statement not covered" > }</span>
2218
+ <span class="cstat-no" title="statement not covered" ></span>
2219
+ <span class="cstat-no" title="statement not covered" > /**</span>
2220
+ <span class="cstat-no" title="statement not covered" > * Build a TicketCreate transaction</span>
2221
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2222
+ <span class="cstat-no" title="statement not covered" > * @param ticketCount - Number of tickets to create</span>
2223
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2224
+ <span class="cstat-no" title="statement not covered" > */</span>
2225
+ <span class="cstat-no" title="statement not covered" > async buildTicketCreate(account: string, ticketCount: number): Promise&lt;string&gt; {</span>
2226
+ <span class="cstat-no" title="statement not covered" > const tx: TicketCreate = {</span>
2227
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'TicketCreate',</span>
2228
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2229
+ <span class="cstat-no" title="statement not covered" > TicketCount: ticketCount,</span>
2230
+ <span class="cstat-no" title="statement not covered" > };</span>
2231
+ <span class="cstat-no" title="statement not covered" ></span>
2232
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2233
+ <span class="cstat-no" title="statement not covered" > }</span>
2234
+ <span class="cstat-no" title="statement not covered" ></span>
2235
+ <span class="cstat-no" title="statement not covered" > /**</span>
2236
+ <span class="cstat-no" title="statement not covered" > * Build an NFTokenMint transaction</span>
2237
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2238
+ <span class="cstat-no" title="statement not covered" > * @param uri - NFT URI (hex encoded)</span>
2239
+ <span class="cstat-no" title="statement not covered" > * @param flags - NFT flags</span>
2240
+ <span class="cstat-no" title="statement not covered" > * @param transferFee - Transfer fee in basis points</span>
2241
+ <span class="cstat-no" title="statement not covered" > * @param taxon - NFT taxon</span>
2242
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2243
+ <span class="cstat-no" title="statement not covered" > */</span>
2244
+ <span class="cstat-no" title="statement not covered" > async buildNFTMint(</span>
2245
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2246
+ <span class="cstat-no" title="statement not covered" > uri: string,</span>
2247
+ <span class="cstat-no" title="statement not covered" > flags: number,</span>
2248
+ <span class="cstat-no" title="statement not covered" > transferFee: number,</span>
2249
+ <span class="cstat-no" title="statement not covered" > taxon: number,</span>
2250
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2251
+ <span class="cstat-no" title="statement not covered" > const tx: NFTokenMint = {</span>
2252
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenMint',</span>
2253
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2254
+ <span class="cstat-no" title="statement not covered" > URI: uri,</span>
2255
+ <span class="cstat-no" title="statement not covered" > Flags: flags,</span>
2256
+ <span class="cstat-no" title="statement not covered" > TransferFee: transferFee,</span>
2257
+ <span class="cstat-no" title="statement not covered" > NFTokenTaxon: taxon,</span>
2258
+ <span class="cstat-no" title="statement not covered" > };</span>
2259
+ <span class="cstat-no" title="statement not covered" ></span>
2260
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2261
+ <span class="cstat-no" title="statement not covered" > }</span>
2262
+ <span class="cstat-no" title="statement not covered" ></span>
2263
+ <span class="cstat-no" title="statement not covered" > /**</span>
2264
+ <span class="cstat-no" title="statement not covered" > * Build an NFTokenBurn transaction</span>
2265
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2266
+ <span class="cstat-no" title="statement not covered" > * @param nftokenID - NFT ID to burn</span>
2267
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2268
+ <span class="cstat-no" title="statement not covered" > */</span>
2269
+ <span class="cstat-no" title="statement not covered" > async buildNFTBurn(account: string, nftokenID: string): Promise&lt;string&gt; {</span>
2270
+ <span class="cstat-no" title="statement not covered" > const tx: NFTokenBurn = {</span>
2271
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenBurn',</span>
2272
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2273
+ <span class="cstat-no" title="statement not covered" > NFTokenID: nftokenID,</span>
2274
+ <span class="cstat-no" title="statement not covered" > };</span>
2275
+ <span class="cstat-no" title="statement not covered" ></span>
2276
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2277
+ <span class="cstat-no" title="statement not covered" > }</span>
2278
+ <span class="cstat-no" title="statement not covered" ></span>
2279
+ <span class="cstat-no" title="statement not covered" > /**</span>
2280
+ <span class="cstat-no" title="statement not covered" > * Build an NFTokenCreateOffer transaction</span>
2281
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2282
+ <span class="cstat-no" title="statement not covered" > * @param nftokenID - NFT ID</span>
2283
+ <span class="cstat-no" title="statement not covered" > * @param amount - Offer amount</span>
2284
+ <span class="cstat-no" title="statement not covered" > * @param flags - Offer flags (1=sell, 0=buy)</span>
2285
+ <span class="cstat-no" title="statement not covered" > * @param destination - Optional destination account</span>
2286
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2287
+ <span class="cstat-no" title="statement not covered" > */</span>
2288
+ <span class="cstat-no" title="statement not covered" > async buildNFTCreateOffer(</span>
2289
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2290
+ <span class="cstat-no" title="statement not covered" > nftokenID: string,</span>
2291
+ <span class="cstat-no" title="statement not covered" > amount: string,</span>
2292
+ <span class="cstat-no" title="statement not covered" > flags: number,</span>
2293
+ <span class="cstat-no" title="statement not covered" > destination?: string,</span>
2294
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2295
+ <span class="cstat-no" title="statement not covered" > const tx: NFTokenCreateOffer = {</span>
2296
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenCreateOffer',</span>
2297
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2298
+ <span class="cstat-no" title="statement not covered" > NFTokenID: nftokenID,</span>
2299
+ <span class="cstat-no" title="statement not covered" > Amount: amount,</span>
2300
+ <span class="cstat-no" title="statement not covered" > Flags: flags,</span>
2301
+ <span class="cstat-no" title="statement not covered" > ...(destination &amp;&amp; { Destination: destination }),</span>
2302
+ <span class="cstat-no" title="statement not covered" > };</span>
2303
+ <span class="cstat-no" title="statement not covered" ></span>
2304
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2305
+ <span class="cstat-no" title="statement not covered" > }</span>
2306
+ <span class="cstat-no" title="statement not covered" ></span>
2307
+ <span class="cstat-no" title="statement not covered" > /**</span>
2308
+ <span class="cstat-no" title="statement not covered" > * Build an NFTokenAcceptOffer transaction</span>
2309
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2310
+ <span class="cstat-no" title="statement not covered" > * @param nftokenSellOffer - Sell offer ID (optional)</span>
2311
+ <span class="cstat-no" title="statement not covered" > * @param nftokenBuyOffer - Buy offer ID (optional)</span>
2312
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2313
+ <span class="cstat-no" title="statement not covered" > */</span>
2314
+ <span class="cstat-no" title="statement not covered" > async buildNFTAcceptOffer(</span>
2315
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2316
+ <span class="cstat-no" title="statement not covered" > nftokenSellOffer?: string,</span>
2317
+ <span class="cstat-no" title="statement not covered" > nftokenBuyOffer?: string,</span>
2318
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2319
+ <span class="cstat-no" title="statement not covered" > const tx: NFTokenAcceptOffer = {</span>
2320
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenAcceptOffer',</span>
2321
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2322
+ <span class="cstat-no" title="statement not covered" > ...(nftokenSellOffer &amp;&amp; { NFTokenSellOffer: nftokenSellOffer }),</span>
2323
+ <span class="cstat-no" title="statement not covered" > ...(nftokenBuyOffer &amp;&amp; { NFTokenBuyOffer: nftokenBuyOffer }),</span>
2324
+ <span class="cstat-no" title="statement not covered" > };</span>
2325
+ <span class="cstat-no" title="statement not covered" ></span>
2326
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2327
+ <span class="cstat-no" title="statement not covered" > }</span>
2328
+ <span class="cstat-no" title="statement not covered" ></span>
2329
+ <span class="cstat-no" title="statement not covered" > /**</span>
2330
+ <span class="cstat-no" title="statement not covered" > * Build an NFTokenCancelOffer transaction</span>
2331
+ <span class="cstat-no" title="statement not covered" > * @param account - Account address</span>
2332
+ <span class="cstat-no" title="statement not covered" > * @param nftokenOffers - Array of offer IDs to cancel</span>
2333
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded transaction</span>
2334
+ <span class="cstat-no" title="statement not covered" > */</span>
2335
+ <span class="cstat-no" title="statement not covered" > async buildNFTCancelOffer(account: string, nftokenOffers: string[]): Promise&lt;string&gt; {</span>
2336
+ <span class="cstat-no" title="statement not covered" > const tx: NFTokenCancelOffer = {</span>
2337
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenCancelOffer',</span>
2338
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2339
+ <span class="cstat-no" title="statement not covered" > NFTokenOffers: nftokenOffers,</span>
2340
+ <span class="cstat-no" title="statement not covered" > };</span>
2341
+ <span class="cstat-no" title="statement not covered" ></span>
2342
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(tx);</span>
2343
+ <span class="cstat-no" title="statement not covered" > }</span>
2344
+ <span class="cstat-no" title="statement not covered" ></span>
2345
+ <span class="cstat-no" title="statement not covered" > /**</span>
2346
+ <span class="cstat-no" title="statement not covered" > * Build a Batch transaction with multiple inner transactions</span>
2347
+ <span class="cstat-no" title="statement not covered" > * @param account - Account executing the batch</span>
2348
+ <span class="cstat-no" title="statement not covered" > * @param innerTransactions - Array of transaction descriptors</span>
2349
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded batch transaction JSON</span>
2350
+ <span class="cstat-no" title="statement not covered" > */</span>
2351
+ <span class="cstat-no" title="statement not covered" > async buildBatchTransaction(</span>
2352
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2353
+ <span class="cstat-no" title="statement not covered" > innerTransactions: Array&lt;{</span>
2354
+ <span class="cstat-no" title="statement not covered" > type: 'payment' | 'trust-set' | 'nft-mint';</span>
2355
+ <span class="cstat-no" title="statement not covered" > destination?: string;</span>
2356
+ <span class="cstat-no" title="statement not covered" > amount?: string;</span>
2357
+ <span class="cstat-no" title="statement not covered" > currency?: string;</span>
2358
+ <span class="cstat-no" title="statement not covered" > issuer?: string;</span>
2359
+ <span class="cstat-no" title="statement not covered" > }&gt;,</span>
2360
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;string&gt; {</span>
2361
+ <span class="cstat-no" title="statement not covered" > const tfInnerBatchTxn = 1073741824;</span>
2362
+ <span class="cstat-no" title="statement not covered" > const tfAllOrNothing = 65536;</span>
2363
+ <span class="cstat-no" title="statement not covered" ></span>
2364
+ <span class="cstat-no" title="statement not covered" > const rawTransactions = innerTransactions.map((tx, index) =&gt; {</span>
2365
+ <span class="cstat-no" title="statement not covered" > let innerTx: any;</span>
2366
+ <span class="cstat-no" title="statement not covered" ></span>
2367
+ <span class="cstat-no" title="statement not covered" > switch (tx.type) {</span>
2368
+ <span class="cstat-no" title="statement not covered" > case 'payment':</span>
2369
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2370
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Payment',</span>
2371
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2372
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2373
+ <span class="cstat-no" title="statement not covered" > Destination: tx.destination || '',</span>
2374
+ <span class="cstat-no" title="statement not covered" > Amount: tx.amount || '1000000',</span>
2375
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2376
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2377
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2378
+ <span class="cstat-no" title="statement not covered" > };</span>
2379
+ <span class="cstat-no" title="statement not covered" ></span>
2380
+ <span class="cstat-no" title="statement not covered" > if (tx.currency &amp;&amp; tx.issuer) {</span>
2381
+ <span class="cstat-no" title="statement not covered" > innerTx.Amount = {</span>
2382
+ <span class="cstat-no" title="statement not covered" > currency: tx.currency,</span>
2383
+ <span class="cstat-no" title="statement not covered" > issuer: tx.issuer,</span>
2384
+ <span class="cstat-no" title="statement not covered" > value: tx.amount || '1',</span>
2385
+ <span class="cstat-no" title="statement not covered" > };</span>
2386
+ <span class="cstat-no" title="statement not covered" > }</span>
2387
+ <span class="cstat-no" title="statement not covered" > break;</span>
2388
+ <span class="cstat-no" title="statement not covered" ></span>
2389
+ <span class="cstat-no" title="statement not covered" > case 'trust-set':</span>
2390
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2391
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'TrustSet',</span>
2392
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2393
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2394
+ <span class="cstat-no" title="statement not covered" > LimitAmount: {</span>
2395
+ <span class="cstat-no" title="statement not covered" > currency: tx.currency || 'USD',</span>
2396
+ <span class="cstat-no" title="statement not covered" > issuer: tx.issuer || '',</span>
2397
+ <span class="cstat-no" title="statement not covered" > value: tx.amount || '1000000',</span>
2398
+ <span class="cstat-no" title="statement not covered" > },</span>
2399
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2400
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2401
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2402
+ <span class="cstat-no" title="statement not covered" > };</span>
2403
+ <span class="cstat-no" title="statement not covered" > break;</span>
2404
+ <span class="cstat-no" title="statement not covered" ></span>
2405
+ <span class="cstat-no" title="statement not covered" > case 'nft-mint':</span>
2406
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2407
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenMint',</span>
2408
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2409
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2410
+ <span class="cstat-no" title="statement not covered" > NFTokenTaxon: 0,</span>
2411
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2412
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2413
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2414
+ <span class="cstat-no" title="statement not covered" > };</span>
2415
+ <span class="cstat-no" title="statement not covered" > break;</span>
2416
+ <span class="cstat-no" title="statement not covered" ></span>
2417
+ <span class="cstat-no" title="statement not covered" > default:</span>
2418
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2419
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Payment',</span>
2420
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2421
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2422
+ <span class="cstat-no" title="statement not covered" > Destination: account,</span>
2423
+ <span class="cstat-no" title="statement not covered" > Amount: '1',</span>
2424
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2425
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2426
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2427
+ <span class="cstat-no" title="statement not covered" > };</span>
2428
+ <span class="cstat-no" title="statement not covered" > }</span>
2429
+ <span class="cstat-no" title="statement not covered" ></span>
2430
+ <span class="cstat-no" title="statement not covered" > return { RawTransaction: innerTx };</span>
2431
+ <span class="cstat-no" title="statement not covered" > });</span>
2432
+ <span class="cstat-no" title="statement not covered" ></span>
2433
+ <span class="cstat-no" title="statement not covered" > const batchTx = {</span>
2434
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Batch',</span>
2435
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2436
+ <span class="cstat-no" title="statement not covered" > Flags: tfAllOrNothing,</span>
2437
+ <span class="cstat-no" title="statement not covered" > RawTransactions: rawTransactions,</span>
2438
+ <span class="cstat-no" title="statement not covered" > };</span>
2439
+ <span class="cstat-no" title="statement not covered" ></span>
2440
+ <span class="cstat-no" title="statement not covered" > return this.serializeTransaction(batchTx as any);</span>
2441
+ <span class="cstat-no" title="statement not covered" > }</span>
2442
+ <span class="cstat-no" title="statement not covered" ></span>
2443
+ <span class="cstat-no" title="statement not covered" > /**</span>
2444
+ <span class="cstat-no" title="statement not covered" > * Build inner transactions for batch (unsigned, with batch flags set)</span>
2445
+ <span class="cstat-no" title="statement not covered" > * @param account - Account executing the batch</span>
2446
+ <span class="cstat-no" title="statement not covered" > * @param innerTransactions - Array of transaction descriptors</span>
2447
+ <span class="cstat-no" title="statement not covered" > * @returns Array of base64 encoded unsigned inner transactions</span>
2448
+ <span class="cstat-no" title="statement not covered" > */</span>
2449
+ <span class="cstat-no" title="statement not covered" > async buildBatchInnerTransactions(</span>
2450
+ <span class="cstat-no" title="statement not covered" > account: string,</span>
2451
+ <span class="cstat-no" title="statement not covered" > innerTransactions: Array&lt;{</span>
2452
+ <span class="cstat-no" title="statement not covered" > type: 'payment' | 'trust-set' | 'nft-mint';</span>
2453
+ <span class="cstat-no" title="statement not covered" > destination?: string;</span>
2454
+ <span class="cstat-no" title="statement not covered" > amount?: string;</span>
2455
+ <span class="cstat-no" title="statement not covered" > currency?: string;</span>
2456
+ <span class="cstat-no" title="statement not covered" > issuer?: string;</span>
2457
+ <span class="cstat-no" title="statement not covered" > uri?: string;</span>
2458
+ <span class="cstat-no" title="statement not covered" > taxon?: number;</span>
2459
+ <span class="cstat-no" title="statement not covered" > }&gt;,</span>
2460
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;Array&lt;{ payload: string; description: string }&gt;&gt; {</span>
2461
+ <span class="cstat-no" title="statement not covered" > const tfInnerBatchTxn = 1073741824;</span>
2462
+ <span class="cstat-no" title="statement not covered" > const results: Array&lt;{ payload: string; description: string }&gt; = [];</span>
2463
+ <span class="cstat-no" title="statement not covered" ></span>
2464
+ <span class="cstat-no" title="statement not covered" > for (let index = 0; index &lt; innerTransactions.length; index++) {</span>
2465
+ <span class="cstat-no" title="statement not covered" > const tx = innerTransactions[index];</span>
2466
+ <span class="cstat-no" title="statement not covered" > let innerTx: any;</span>
2467
+ <span class="cstat-no" title="statement not covered" > let description: string;</span>
2468
+ <span class="cstat-no" title="statement not covered" ></span>
2469
+ <span class="cstat-no" title="statement not covered" > switch (tx.type) {</span>
2470
+ <span class="cstat-no" title="statement not covered" > case 'payment':</span>
2471
+ <span class="cstat-no" title="statement not covered" > if (tx.currency &amp;&amp; tx.issuer) {</span>
2472
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2473
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Payment',</span>
2474
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2475
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2476
+ <span class="cstat-no" title="statement not covered" > Destination: tx.destination || '',</span>
2477
+ <span class="cstat-no" title="statement not covered" > Amount: {</span>
2478
+ <span class="cstat-no" title="statement not covered" > currency: tx.currency,</span>
2479
+ <span class="cstat-no" title="statement not covered" > issuer: tx.issuer,</span>
2480
+ <span class="cstat-no" title="statement not covered" > value: tx.amount || '1',</span>
2481
+ <span class="cstat-no" title="statement not covered" > },</span>
2482
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2483
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2484
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2485
+ <span class="cstat-no" title="statement not covered" > };</span>
2486
+ <span class="cstat-no" title="statement not covered" > description = `Send ${tx.amount} ${tx.currency} to ${tx.destination}`;</span>
2487
+ <span class="cstat-no" title="statement not covered" > } else {</span>
2488
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2489
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'Payment',</span>
2490
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2491
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2492
+ <span class="cstat-no" title="statement not covered" > Destination: tx.destination || '',</span>
2493
+ <span class="cstat-no" title="statement not covered" > Amount: tx.amount || '1000000',</span>
2494
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2495
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2496
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2497
+ <span class="cstat-no" title="statement not covered" > };</span>
2498
+ <span class="cstat-no" title="statement not covered" > description = `Send ${Number(tx.amount || '1000000') / 1000000} XRP to ${tx.destination}`;</span>
2499
+ <span class="cstat-no" title="statement not covered" > }</span>
2500
+ <span class="cstat-no" title="statement not covered" > break;</span>
2501
+ <span class="cstat-no" title="statement not covered" ></span>
2502
+ <span class="cstat-no" title="statement not covered" > case 'trust-set':</span>
2503
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2504
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'TrustSet',</span>
2505
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2506
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2507
+ <span class="cstat-no" title="statement not covered" > LimitAmount: {</span>
2508
+ <span class="cstat-no" title="statement not covered" > currency: tx.currency || 'USD',</span>
2509
+ <span class="cstat-no" title="statement not covered" > issuer: tx.issuer || '',</span>
2510
+ <span class="cstat-no" title="statement not covered" > value: tx.amount || '1000000',</span>
2511
+ <span class="cstat-no" title="statement not covered" > },</span>
2512
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2513
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2514
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2515
+ <span class="cstat-no" title="statement not covered" > };</span>
2516
+ <span class="cstat-no" title="statement not covered" > description = `Set trust line for ${tx.currency} (${tx.amount})`;</span>
2517
+ <span class="cstat-no" title="statement not covered" > break;</span>
2518
+ <span class="cstat-no" title="statement not covered" ></span>
2519
+ <span class="cstat-no" title="statement not covered" > case 'nft-mint':</span>
2520
+ <span class="cstat-no" title="statement not covered" > innerTx = {</span>
2521
+ <span class="cstat-no" title="statement not covered" > TransactionType: 'NFTokenMint',</span>
2522
+ <span class="cstat-no" title="statement not covered" > Flags: tfInnerBatchTxn,</span>
2523
+ <span class="cstat-no" title="statement not covered" > Account: account,</span>
2524
+ <span class="cstat-no" title="statement not covered" > URI: tx.uri || '',</span>
2525
+ <span class="cstat-no" title="statement not covered" > NFTokenTaxon: tx.taxon || 0,</span>
2526
+ <span class="cstat-no" title="statement not covered" > Fee: '0',</span>
2527
+ <span class="cstat-no" title="statement not covered" > Sequence: index + 1,</span>
2528
+ <span class="cstat-no" title="statement not covered" > SigningPubKey: '',</span>
2529
+ <span class="cstat-no" title="statement not covered" > };</span>
2530
+ <span class="cstat-no" title="statement not covered" > description = `Mint NFT (taxon: ${tx.taxon})`;</span>
2531
+ <span class="cstat-no" title="statement not covered" > break;</span>
2532
+ <span class="cstat-no" title="statement not covered" ></span>
2533
+ <span class="cstat-no" title="statement not covered" > default:</span>
2534
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Unknown transaction type: ${(tx as any).type}`);</span>
2535
+ <span class="cstat-no" title="statement not covered" > }</span>
2536
+ <span class="cstat-no" title="statement not covered" ></span>
2537
+ <span class="cstat-no" title="statement not covered" > results.push({</span>
2538
+ <span class="cstat-no" title="statement not covered" > payload: btoa(JSON.stringify(innerTx)),</span>
2539
+ <span class="cstat-no" title="statement not covered" > description,</span>
2540
+ <span class="cstat-no" title="statement not covered" > });</span>
2541
+ <span class="cstat-no" title="statement not covered" > }</span>
2542
+ <span class="cstat-no" title="statement not covered" ></span>
2543
+ <span class="cstat-no" title="statement not covered" > return results;</span>
2544
+ <span class="cstat-no" title="statement not covered" > }</span>
2545
+ <span class="cstat-no" title="statement not covered" ></span>
2546
+ <span class="cstat-no" title="statement not covered" > /**</span>
2547
+ <span class="cstat-no" title="statement not covered" > * Serializes a transaction to base64 encoded JSON.</span>
2548
+ <span class="cstat-no" title="statement not covered" > *</span>
2549
+ <span class="cstat-no" title="statement not covered" > * @description</span>
2550
+ <span class="cstat-no" title="statement not covered" > * Converts the transaction object to a JSON string and encodes it as base64.</span>
2551
+ <span class="cstat-no" title="statement not covered" > * This format is used for transport to the wallet for signing.</span>
2552
+ <span class="cstat-no" title="statement not covered" > *</span>
2553
+ <span class="cstat-no" title="statement not covered" > * @param transaction - The XRPL transaction object</span>
2554
+ <span class="cstat-no" title="statement not covered" > *</span>
2555
+ <span class="cstat-no" title="statement not covered" > * @returns Base64 encoded JSON string</span>
2556
+ <span class="cstat-no" title="statement not covered" > */</span>
2557
+ <span class="cstat-no" title="statement not covered" > private async serializeTransaction(transaction: Transaction): Promise&lt;string&gt; {</span>
2558
+ <span class="cstat-no" title="statement not covered" > const jsonString = JSON.stringify(transaction);</span>
2559
+ <span class="cstat-no" title="statement not covered" > return btoa(jsonString);</span>
2560
+ <span class="cstat-no" title="statement not covered" > }</span>
2561
+ <span class="cstat-no" title="statement not covered" >}</span>
2562
2562
  &nbsp;</pre></td></tr></table></pre>
2563
2563
 
2564
2564
  <div class='push'></div><!-- for sticky footer -->
@@ -2566,7 +2566,7 @@ export class XrplTransactionBuilderService {
2566
2566
  <div class='footer quiet pad2 space-top1 center small'>
2567
2567
  Code coverage generated by
2568
2568
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2569
- at 2026-06-02T14:30:38.257Z
2569
+ at 2026-06-10T09:00:36.727Z
2570
2570
  </div>
2571
2571
  <script src="../../../prettify.js"></script>
2572
2572
  <script>