@bitgo-beta/sdk-coin-etc 1.2.3-alpha.23 → 1.2.3-alpha.230
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.
- package/CHANGELOG.md +405 -0
- package/dist/src/etc.d.ts +103 -4
- package/dist/src/etc.d.ts.map +1 -1
- package/dist/src/etc.js +456 -1
- package/dist/src/index.js +6 -2
- package/dist/src/lib/index.js +6 -2
- package/dist/src/lib/transactionBuilder.js +2 -2
- package/package.json +16 -11
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,411 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.2.13](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.12...@bitgo/sdk-coin-etc@2.2.13) (2024-11-14)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
9
|
+
|
|
10
|
+
## [2.2.12](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.11...@bitgo/sdk-coin-etc@2.2.12) (2024-11-08)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
13
|
+
|
|
14
|
+
## [2.2.11](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.10...@bitgo/sdk-coin-etc@2.2.11) (2024-11-07)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
17
|
+
|
|
18
|
+
## [2.2.10](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.9...@bitgo/sdk-coin-etc@2.2.10) (2024-11-01)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
21
|
+
|
|
22
|
+
## [2.2.9](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.8...@bitgo/sdk-coin-etc@2.2.9) (2024-10-22)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
25
|
+
|
|
26
|
+
## [2.2.8](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.7...@bitgo/sdk-coin-etc@2.2.8) (2024-10-15)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
29
|
+
|
|
30
|
+
## [2.2.7](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.6...@bitgo/sdk-coin-etc@2.2.7) (2024-10-08)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
33
|
+
|
|
34
|
+
## [2.2.6](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.5...@bitgo/sdk-coin-etc@2.2.6) (2024-10-04)
|
|
35
|
+
|
|
36
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
37
|
+
|
|
38
|
+
## [2.2.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.4...@bitgo/sdk-coin-etc@2.2.5) (2024-09-24)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
41
|
+
|
|
42
|
+
## [2.2.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.3...@bitgo/sdk-coin-etc@2.2.4) (2024-09-19)
|
|
43
|
+
|
|
44
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
45
|
+
|
|
46
|
+
## [2.2.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.2...@bitgo/sdk-coin-etc@2.2.3) (2024-09-16)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
49
|
+
|
|
50
|
+
## [2.2.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.1...@bitgo/sdk-coin-etc@2.2.2) (2024-09-10)
|
|
51
|
+
|
|
52
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
53
|
+
|
|
54
|
+
## [2.2.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.2.0...@bitgo/sdk-coin-etc@2.2.1) (2024-09-03)
|
|
55
|
+
|
|
56
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
57
|
+
|
|
58
|
+
# [2.2.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.1.1...@bitgo/sdk-coin-etc@2.2.0) (2024-08-29)
|
|
59
|
+
|
|
60
|
+
### Features
|
|
61
|
+
|
|
62
|
+
- **sdk-coin-etc:** unsigned sweep support and fullsign support for etc via ovc ([206cd9b](https://github.com/BitGo/BitGoJS/commit/206cd9b8b438b911a9c24b4559d01372030c5950))
|
|
63
|
+
|
|
64
|
+
## [2.1.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.1.0...@bitgo/sdk-coin-etc@2.1.1) (2024-08-27)
|
|
65
|
+
|
|
66
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
67
|
+
|
|
68
|
+
# [2.1.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.29...@bitgo/sdk-coin-etc@2.1.0) (2024-08-20)
|
|
69
|
+
|
|
70
|
+
### Features
|
|
71
|
+
|
|
72
|
+
- **sdk-coin-etc:** non-bitgo recovery support for wrw ([017155b](https://github.com/BitGo/BitGoJS/commit/017155b5a9b008377189bc94b69ed4b45d8004fe))
|
|
73
|
+
|
|
74
|
+
## [2.0.30](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.29...@bitgo/sdk-coin-etc@2.0.30) (2024-08-13)
|
|
75
|
+
|
|
76
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
77
|
+
|
|
78
|
+
## [2.0.29](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.28...@bitgo/sdk-coin-etc@2.0.29) (2024-08-07)
|
|
79
|
+
|
|
80
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
81
|
+
|
|
82
|
+
## [2.0.28](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.27...@bitgo/sdk-coin-etc@2.0.28) (2024-07-30)
|
|
83
|
+
|
|
84
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
85
|
+
|
|
86
|
+
## [2.0.27](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.26...@bitgo/sdk-coin-etc@2.0.27) (2024-07-24)
|
|
87
|
+
|
|
88
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
89
|
+
|
|
90
|
+
## [2.0.26](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.25...@bitgo/sdk-coin-etc@2.0.26) (2024-07-16)
|
|
91
|
+
|
|
92
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
93
|
+
|
|
94
|
+
## [2.0.25](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.24...@bitgo/sdk-coin-etc@2.0.25) (2024-07-04)
|
|
95
|
+
|
|
96
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
97
|
+
|
|
98
|
+
## [2.0.24](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.23...@bitgo/sdk-coin-etc@2.0.24) (2024-07-02)
|
|
99
|
+
|
|
100
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
101
|
+
|
|
102
|
+
## [2.0.23](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.22...@bitgo/sdk-coin-etc@2.0.23) (2024-06-27)
|
|
103
|
+
|
|
104
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
105
|
+
|
|
106
|
+
## [2.0.22](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.21...@bitgo/sdk-coin-etc@2.0.22) (2024-06-26)
|
|
107
|
+
|
|
108
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
109
|
+
|
|
110
|
+
## [2.0.21](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.19...@bitgo/sdk-coin-etc@2.0.21) (2024-06-21)
|
|
111
|
+
|
|
112
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
113
|
+
|
|
114
|
+
## [2.0.20](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.19...@bitgo/sdk-coin-etc@2.0.20) (2024-06-20)
|
|
115
|
+
|
|
116
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
117
|
+
|
|
118
|
+
## [2.0.19](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.18...@bitgo/sdk-coin-etc@2.0.19) (2024-06-14)
|
|
119
|
+
|
|
120
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
121
|
+
|
|
122
|
+
## [2.0.18](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.17...@bitgo/sdk-coin-etc@2.0.18) (2024-06-11)
|
|
123
|
+
|
|
124
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
125
|
+
|
|
126
|
+
## [2.0.17](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.16...@bitgo/sdk-coin-etc@2.0.17) (2024-06-05)
|
|
127
|
+
|
|
128
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
129
|
+
|
|
130
|
+
## [2.0.16](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.15...@bitgo/sdk-coin-etc@2.0.16) (2024-05-31)
|
|
131
|
+
|
|
132
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
133
|
+
|
|
134
|
+
## [2.0.15](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.14...@bitgo/sdk-coin-etc@2.0.15) (2024-05-28)
|
|
135
|
+
|
|
136
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
137
|
+
|
|
138
|
+
## [2.0.14](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.13...@bitgo/sdk-coin-etc@2.0.14) (2024-05-22)
|
|
139
|
+
|
|
140
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
141
|
+
|
|
142
|
+
## [2.0.13](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.12...@bitgo/sdk-coin-etc@2.0.13) (2024-05-17)
|
|
143
|
+
|
|
144
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
145
|
+
|
|
146
|
+
## [2.0.12](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.11...@bitgo/sdk-coin-etc@2.0.12) (2024-05-13)
|
|
147
|
+
|
|
148
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
149
|
+
|
|
150
|
+
## [2.0.11](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.10...@bitgo/sdk-coin-etc@2.0.11) (2024-05-08)
|
|
151
|
+
|
|
152
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
153
|
+
|
|
154
|
+
## [2.0.10](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.9...@bitgo/sdk-coin-etc@2.0.10) (2024-05-01)
|
|
155
|
+
|
|
156
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
157
|
+
|
|
158
|
+
## [2.0.9](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.8...@bitgo/sdk-coin-etc@2.0.9) (2024-04-25)
|
|
159
|
+
|
|
160
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
161
|
+
|
|
162
|
+
## [2.0.8](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.7...@bitgo/sdk-coin-etc@2.0.8) (2024-04-24)
|
|
163
|
+
|
|
164
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
165
|
+
|
|
166
|
+
## [2.0.7](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.6...@bitgo/sdk-coin-etc@2.0.7) (2024-04-22)
|
|
167
|
+
|
|
168
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
169
|
+
|
|
170
|
+
## [2.0.6](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.5...@bitgo/sdk-coin-etc@2.0.6) (2024-04-17)
|
|
171
|
+
|
|
172
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
173
|
+
|
|
174
|
+
## [2.0.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.4...@bitgo/sdk-coin-etc@2.0.5) (2024-04-12)
|
|
175
|
+
|
|
176
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
177
|
+
|
|
178
|
+
## [2.0.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.3...@bitgo/sdk-coin-etc@2.0.4) (2024-04-10)
|
|
179
|
+
|
|
180
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
181
|
+
|
|
182
|
+
## [2.0.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.2...@bitgo/sdk-coin-etc@2.0.3) (2024-04-09)
|
|
183
|
+
|
|
184
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
185
|
+
|
|
186
|
+
## [2.0.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.1...@bitgo/sdk-coin-etc@2.0.2) (2024-04-08)
|
|
187
|
+
|
|
188
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
189
|
+
|
|
190
|
+
## [2.0.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@2.0.0...@bitgo/sdk-coin-etc@2.0.1) (2024-04-05)
|
|
191
|
+
|
|
192
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
193
|
+
|
|
194
|
+
# [2.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.5.5...@bitgo/sdk-coin-etc@2.0.0) (2024-03-28)
|
|
195
|
+
|
|
196
|
+
### Features
|
|
197
|
+
|
|
198
|
+
- **root:** deprecate node 16 ([d3ec624](https://github.com/BitGo/BitGoJS/commit/d3ec6240bddae2a4ab7fa80c4a16efecc36210bd))
|
|
199
|
+
|
|
200
|
+
### BREAKING CHANGES
|
|
201
|
+
|
|
202
|
+
- **root:** Node 16 is no longer supported in bitgojs.
|
|
203
|
+
TICKET: WP-1100
|
|
204
|
+
|
|
205
|
+
## [1.5.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.5.4...@bitgo/sdk-coin-etc@1.5.5) (2024-03-19)
|
|
206
|
+
|
|
207
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
208
|
+
|
|
209
|
+
## [1.5.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.5.3...@bitgo/sdk-coin-etc@1.5.4) (2024-03-11)
|
|
210
|
+
|
|
211
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
212
|
+
|
|
213
|
+
## [1.5.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.5.2...@bitgo/sdk-coin-etc@1.5.3) (2024-02-28)
|
|
214
|
+
|
|
215
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
216
|
+
|
|
217
|
+
## [1.5.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.5.1...@bitgo/sdk-coin-etc@1.5.2) (2024-02-22)
|
|
218
|
+
|
|
219
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
220
|
+
|
|
221
|
+
## [1.5.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.5.1) (2024-02-19)
|
|
222
|
+
|
|
223
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
224
|
+
|
|
225
|
+
## [1.4.30](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.30) (2024-01-30)
|
|
226
|
+
|
|
227
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
228
|
+
|
|
229
|
+
## [1.4.29](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.29) (2024-01-26)
|
|
230
|
+
|
|
231
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
232
|
+
|
|
233
|
+
## [1.4.28](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.28) (2024-01-26)
|
|
234
|
+
|
|
235
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
236
|
+
|
|
237
|
+
## [1.4.27](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.27) (2024-01-25)
|
|
238
|
+
|
|
239
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
240
|
+
|
|
241
|
+
## [1.4.26](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.26) (2024-01-22)
|
|
242
|
+
|
|
243
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
244
|
+
|
|
245
|
+
## [1.4.25](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.25) (2024-01-09)
|
|
246
|
+
|
|
247
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
248
|
+
|
|
249
|
+
## [1.4.24](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.24) (2024-01-03)
|
|
250
|
+
|
|
251
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
252
|
+
|
|
253
|
+
## [1.4.23](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.23) (2023-12-18)
|
|
254
|
+
|
|
255
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
256
|
+
|
|
257
|
+
## [1.4.22](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.22) (2023-12-12)
|
|
258
|
+
|
|
259
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
260
|
+
|
|
261
|
+
## [1.4.21](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.21) (2023-12-09)
|
|
262
|
+
|
|
263
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
264
|
+
|
|
265
|
+
## [1.4.20](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.20) (2023-12-05)
|
|
266
|
+
|
|
267
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
268
|
+
|
|
269
|
+
## [1.4.19](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.19) (2023-11-28)
|
|
270
|
+
|
|
271
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
272
|
+
|
|
273
|
+
## [1.4.18](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.18) (2023-11-24)
|
|
274
|
+
|
|
275
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
276
|
+
|
|
277
|
+
## [1.4.17](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.17) (2023-11-17)
|
|
278
|
+
|
|
279
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
280
|
+
|
|
281
|
+
## [1.4.16](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.16) (2023-11-13)
|
|
282
|
+
|
|
283
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
284
|
+
|
|
285
|
+
## [1.4.15](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.15) (2023-11-13)
|
|
286
|
+
|
|
287
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
288
|
+
|
|
289
|
+
## [1.4.14](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.14) (2023-11-13)
|
|
290
|
+
|
|
291
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
292
|
+
|
|
293
|
+
## [1.4.13](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.13) (2023-10-20)
|
|
294
|
+
|
|
295
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
296
|
+
|
|
297
|
+
## [1.4.12](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.12) (2023-10-18)
|
|
298
|
+
|
|
299
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
300
|
+
|
|
301
|
+
## [1.4.11](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.11) (2023-09-25)
|
|
302
|
+
|
|
303
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
304
|
+
|
|
305
|
+
## [1.4.10](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.10) (2023-09-09)
|
|
306
|
+
|
|
307
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
308
|
+
|
|
309
|
+
## [1.4.9](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.9) (2023-09-09)
|
|
310
|
+
|
|
311
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
312
|
+
|
|
313
|
+
## [1.4.8](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.8) (2023-09-07)
|
|
314
|
+
|
|
315
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
316
|
+
|
|
317
|
+
## [1.4.7](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.7) (2023-09-05)
|
|
318
|
+
|
|
319
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
320
|
+
|
|
321
|
+
## [1.4.6](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.6) (2023-09-01)
|
|
322
|
+
|
|
323
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
324
|
+
|
|
325
|
+
## [1.4.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.5) (2023-08-29)
|
|
326
|
+
|
|
327
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
328
|
+
|
|
329
|
+
## [1.4.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.4) (2023-08-25)
|
|
330
|
+
|
|
331
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
332
|
+
|
|
333
|
+
## [1.4.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.3) (2023-08-24)
|
|
334
|
+
|
|
335
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
336
|
+
|
|
337
|
+
## [1.4.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.2) (2023-08-16)
|
|
338
|
+
|
|
339
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
340
|
+
|
|
341
|
+
## [1.4.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.4.0...@bitgo/sdk-coin-etc@1.4.1) (2023-08-16)
|
|
342
|
+
|
|
343
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
344
|
+
|
|
345
|
+
# [1.4.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.28...@bitgo/sdk-coin-etc@1.4.0) (2023-08-04)
|
|
346
|
+
|
|
347
|
+
### Features
|
|
348
|
+
|
|
349
|
+
- **root:** add node 18 to engines and CI ([9cc6a70](https://github.com/BitGo/BitGoJS/commit/9cc6a70ba807161b7c6a0ebe3d7c47f25c7c8eca))
|
|
350
|
+
- **root:** remove node 14 from engines ([6ec47cb](https://github.com/BitGo/BitGoJS/commit/6ec47cbd7996cc78bbf2cf7f16595c24fe43cd41))
|
|
351
|
+
|
|
352
|
+
# [1.3.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.28...@bitgo/sdk-coin-etc@1.3.0) (2023-07-28)
|
|
353
|
+
|
|
354
|
+
### Features
|
|
355
|
+
|
|
356
|
+
- **root:** add node 18 to engines and CI ([9cc6a70](https://github.com/BitGo/BitGoJS/commit/9cc6a70ba807161b7c6a0ebe3d7c47f25c7c8eca))
|
|
357
|
+
- **root:** remove node 14 from engines ([6ec47cb](https://github.com/BitGo/BitGoJS/commit/6ec47cbd7996cc78bbf2cf7f16595c24fe43cd41))
|
|
358
|
+
|
|
359
|
+
## [1.2.28](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.27...@bitgo/sdk-coin-etc@1.2.28) (2023-07-18)
|
|
360
|
+
|
|
361
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
362
|
+
|
|
363
|
+
## [1.2.27](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.26...@bitgo/sdk-coin-etc@1.2.27) (2023-06-21)
|
|
364
|
+
|
|
365
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
366
|
+
|
|
367
|
+
## [1.2.26](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.25...@bitgo/sdk-coin-etc@1.2.26) (2023-06-14)
|
|
368
|
+
|
|
369
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
370
|
+
|
|
371
|
+
## [1.2.25](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.24...@bitgo/sdk-coin-etc@1.2.25) (2023-06-13)
|
|
372
|
+
|
|
373
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
374
|
+
|
|
375
|
+
## [1.2.24](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.23...@bitgo/sdk-coin-etc@1.2.24) (2023-06-07)
|
|
376
|
+
|
|
377
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
378
|
+
|
|
379
|
+
## [1.2.23](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.22...@bitgo/sdk-coin-etc@1.2.23) (2023-06-05)
|
|
380
|
+
|
|
381
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
382
|
+
|
|
383
|
+
## [1.2.22](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.21...@bitgo/sdk-coin-etc@1.2.22) (2023-05-25)
|
|
384
|
+
|
|
385
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
386
|
+
|
|
387
|
+
## [1.2.21](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.20...@bitgo/sdk-coin-etc@1.2.21) (2023-05-17)
|
|
388
|
+
|
|
389
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
390
|
+
|
|
391
|
+
## [1.2.20](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.19...@bitgo/sdk-coin-etc@1.2.20) (2023-05-10)
|
|
392
|
+
|
|
393
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
394
|
+
|
|
395
|
+
## [1.2.19](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.18...@bitgo/sdk-coin-etc@1.2.19) (2023-05-03)
|
|
396
|
+
|
|
397
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
398
|
+
|
|
399
|
+
## [1.2.18](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.17...@bitgo/sdk-coin-etc@1.2.18) (2023-04-25)
|
|
400
|
+
|
|
401
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
402
|
+
|
|
403
|
+
## [1.2.17](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.16...@bitgo/sdk-coin-etc@1.2.17) (2023-04-20)
|
|
404
|
+
|
|
405
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
406
|
+
|
|
407
|
+
## [1.2.16](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.15...@bitgo/sdk-coin-etc@1.2.16) (2023-04-13)
|
|
408
|
+
|
|
409
|
+
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
|
410
|
+
|
|
6
411
|
## [1.2.15](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-etc@1.2.14...@bitgo/sdk-coin-etc@1.2.15) (2023-02-17)
|
|
7
412
|
|
|
8
413
|
**Note:** Version bump only for package @bitgo/sdk-coin-etc
|
package/dist/src/etc.d.ts
CHANGED
|
@@ -1,14 +1,113 @@
|
|
|
1
|
+
/// <reference types="bn.js" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/// <reference types="node" />
|
|
1
4
|
/**
|
|
2
5
|
* @prettier
|
|
3
6
|
*/
|
|
4
|
-
import { AbstractEthLikeCoin } from '@bitgo-beta/abstract-eth';
|
|
5
|
-
import { BaseCoin, BitGoBase } from '@bitgo-beta/sdk-core';
|
|
6
|
-
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
7
|
+
import { AbstractEthLikeCoin, OfflineVaultTxInfo, RecoverOptions, RecoveryInfo, SignedTransaction, SignTransactionOptions } from '@bitgo-beta/abstract-eth';
|
|
8
|
+
import { BaseCoin, BitGoBase, Recipient } from '@bitgo-beta/sdk-core';
|
|
9
|
+
import { BaseCoin as StaticsBaseCoin, EthereumNetwork as EthLikeNetwork } from '@bitgo-beta/statics';
|
|
7
10
|
import { TransactionBuilder } from './lib';
|
|
11
|
+
import { Buffer } from 'buffer';
|
|
12
|
+
import { BN } from 'ethereumjs-util';
|
|
8
13
|
export declare class Etc extends AbstractEthLikeCoin {
|
|
14
|
+
readonly staticsCoin?: Readonly<StaticsBaseCoin>;
|
|
15
|
+
protected readonly sendMethodName: 'sendMultiSig' | 'sendMultiSigToken';
|
|
9
16
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
10
17
|
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
11
18
|
isValidPub(pub: string): boolean;
|
|
12
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Builds a funds recovery transaction without BitGo
|
|
21
|
+
* @param params
|
|
22
|
+
* @param {string} params.userKey - [encrypted] xprv
|
|
23
|
+
* @param {string} params.backupKey - [encrypted] xprv or xpub if the xprv is held by a KRS provider
|
|
24
|
+
* @param {string} params.walletPassphrase - used to decrypt userKey and backupKey
|
|
25
|
+
* @param {string} params.walletContractAddress - the ETH address of the wallet contract
|
|
26
|
+
* @param {string} params.krsProvider - necessary if backup key is held by KRS
|
|
27
|
+
* @param {string} params.recoveryDestination - target address to send recovered funds to
|
|
28
|
+
* @param {string} params.bitgoFeeAddress - wrong chain wallet fee address for evm based cross chain recovery txn
|
|
29
|
+
* @param {string} params.bitgoDestinationAddress - target bitgo address where fee will be sent for evm based cross chain recovery txn
|
|
30
|
+
*/
|
|
31
|
+
recover(params: RecoverOptions): Promise<RecoveryInfo | OfflineVaultTxInfo>;
|
|
32
|
+
getTransactionBuilder(): TransactionBuilder;
|
|
33
|
+
/**
|
|
34
|
+
* Make a query to etc.network for information such as balance, token balance, solidity calls
|
|
35
|
+
* @param {Object} query — key-value pairs of parameters to append after /api
|
|
36
|
+
* @returns {Promise<Object>} response from etc.network
|
|
37
|
+
*/
|
|
38
|
+
recoveryBlockchainExplorerQuery(query: Record<string, any>): Promise<any>;
|
|
39
|
+
/**
|
|
40
|
+
* Method to validate recovery params
|
|
41
|
+
* @param {RecoverOptions} params
|
|
42
|
+
* @returns {void}
|
|
43
|
+
*/
|
|
44
|
+
validateRecoveryParams(params: RecoverOptions): void;
|
|
45
|
+
/**
|
|
46
|
+
* Queries public block explorer to get the next ETHLike coin's nonce that should be used for the given ETH address
|
|
47
|
+
* @param {string} address
|
|
48
|
+
* @returns {Promise<number>}
|
|
49
|
+
*/
|
|
50
|
+
getAddressNonce(address: string): Promise<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Queries etc.network for the balance of an address
|
|
53
|
+
* @param {string} address - the ETC address
|
|
54
|
+
* @returns {Promise<BigNumber>} address balance
|
|
55
|
+
*/
|
|
56
|
+
queryAddressBalance(address: string): Promise<BN>;
|
|
57
|
+
/**
|
|
58
|
+
* Queries the contract (via explorer API) for the next sequence ID
|
|
59
|
+
* @param {String} address - address of the contract
|
|
60
|
+
* @returns {Promise<Number>} sequence ID
|
|
61
|
+
*/
|
|
62
|
+
querySequenceId(address: string): Promise<number>;
|
|
63
|
+
/**
|
|
64
|
+
* Check whether the gas price passed in by user are within our max and min bounds
|
|
65
|
+
* If they are not set, set them to the defaults
|
|
66
|
+
* @param {number} userGasPrice - user defined gas price
|
|
67
|
+
* @returns {number} the gas price to use for this transaction
|
|
68
|
+
*/
|
|
69
|
+
setGasPrice(userGasPrice?: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* Check whether gas limit passed in by user are within our max and min bounds
|
|
72
|
+
* If they are not set, set them to the defaults
|
|
73
|
+
* @param {number} userGasLimit user defined gas limit
|
|
74
|
+
* @returns {number} the gas limit to use for this transaction
|
|
75
|
+
*/
|
|
76
|
+
setGasLimit(userGasLimit?: number): number;
|
|
77
|
+
/**
|
|
78
|
+
* @param {Recipient[]} recipients - the recipients of the transaction
|
|
79
|
+
* @param {number} expireTime - the expire time of the transaction
|
|
80
|
+
* @param {number} contractSequenceId - the contract sequence id of the transaction
|
|
81
|
+
* @returns {string}
|
|
82
|
+
*/
|
|
83
|
+
getOperationSha3ForExecuteAndConfirm(recipients: Recipient[], expireTime: number, contractSequenceId: number): string;
|
|
84
|
+
/**
|
|
85
|
+
* Get transfer operation for coin
|
|
86
|
+
* @param {Recipient} recipient - recipient info
|
|
87
|
+
* @param {number} expireTime - expiry time
|
|
88
|
+
* @param {number} contractSequenceId - sequence id
|
|
89
|
+
* @returns {Array} operation array
|
|
90
|
+
*/
|
|
91
|
+
getOperation(recipient: Recipient, expireTime: number, contractSequenceId: number): (string | Buffer)[][];
|
|
92
|
+
/**
|
|
93
|
+
* Method to return the coin's network object
|
|
94
|
+
* @returns {EthLikeNetwork | undefined}
|
|
95
|
+
*/
|
|
96
|
+
getNetwork(): EthLikeNetwork | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Assemble half-sign prebuilt transaction
|
|
99
|
+
* @param {SignTransactionOptions} params
|
|
100
|
+
*/
|
|
101
|
+
signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
|
|
102
|
+
/**
|
|
103
|
+
* Helper function for signTransaction for the rare case that SDK is doing the second signature
|
|
104
|
+
* Note: we are expecting this to be called from the offline vault
|
|
105
|
+
* @param params.txPrebuild
|
|
106
|
+
* @param params.prv
|
|
107
|
+
* @returns {{txHex: string}}
|
|
108
|
+
*/
|
|
109
|
+
signFinal(params: any): Promise<{
|
|
110
|
+
txHex: any;
|
|
111
|
+
}>;
|
|
13
112
|
}
|
|
14
113
|
//# sourceMappingURL=etc.d.ts.map
|
package/dist/src/etc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"etc.d.ts","sourceRoot":"","sources":["../../src/etc.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"etc.d.ts","sourceRoot":"","sources":["../../src/etc.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,OAAO,EACL,mBAAmB,EAEnB,kBAAkB,EAElB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoC,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,eAAe,IAAI,cAAc,EAAiB,MAAM,qBAAqB,CAAC;AAC3H,OAAO,EAAE,kBAAkB,EAA0C,MAAM,OAAO,CAAC;AAInF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,qBAAa,GAAI,SAAQ,mBAAmB;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,mBAAmB,CAAC;IAExE,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUhC;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC;IA8JjF,qBAAqB,IAAI,kBAAkB;IAI3C;;;;OAIG;IACG,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAc/E;;;;OAIG;IACH,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAsBpD;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAevD;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAcvD;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBvD;;;;;OAKG;IACH,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAY1C;;;;;OAKG;IACH,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAY1C;;;;;OAKG;IACH,oCAAoC,CAClC,UAAU,EAAE,SAAS,EAAE,EACvB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,MAAM;IA+CT;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE;IAezG;;;OAGG;IACH,UAAU,IAAI,cAAc,GAAG,SAAS;IAIxC;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BjF;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,KAAA;;;CAkBvB"}
|
package/dist/src/etc.js
CHANGED
|
@@ -1,15 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
2
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
29
|
exports.Etc = void 0;
|
|
4
30
|
/**
|
|
5
31
|
* @prettier
|
|
6
32
|
*/
|
|
7
33
|
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
34
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
35
|
const statics_1 = require("@bitgo-beta/statics");
|
|
9
36
|
const lib_1 = require("./lib");
|
|
37
|
+
const _ = __importStar(require("lodash"));
|
|
38
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
39
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
40
|
+
const buffer_1 = require("buffer");
|
|
41
|
+
const superagent_1 = __importDefault(require("superagent"));
|
|
42
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
10
43
|
class Etc extends abstract_eth_1.AbstractEthLikeCoin {
|
|
11
44
|
constructor(bitgo, staticsCoin) {
|
|
12
45
|
super(bitgo, staticsCoin);
|
|
46
|
+
if (!staticsCoin) {
|
|
47
|
+
throw new Error('missing required constructor parameter staticsCoin');
|
|
48
|
+
}
|
|
49
|
+
this.staticsCoin = staticsCoin;
|
|
50
|
+
this.sendMethodName = 'sendMultiSig';
|
|
13
51
|
}
|
|
14
52
|
static createInstance(bitgo, staticsCoin) {
|
|
15
53
|
return new Etc(bitgo, staticsCoin);
|
|
@@ -24,9 +62,426 @@ class Etc extends abstract_eth_1.AbstractEthLikeCoin {
|
|
|
24
62
|
}
|
|
25
63
|
return valid;
|
|
26
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Builds a funds recovery transaction without BitGo
|
|
67
|
+
* @param params
|
|
68
|
+
* @param {string} params.userKey - [encrypted] xprv
|
|
69
|
+
* @param {string} params.backupKey - [encrypted] xprv or xpub if the xprv is held by a KRS provider
|
|
70
|
+
* @param {string} params.walletPassphrase - used to decrypt userKey and backupKey
|
|
71
|
+
* @param {string} params.walletContractAddress - the ETH address of the wallet contract
|
|
72
|
+
* @param {string} params.krsProvider - necessary if backup key is held by KRS
|
|
73
|
+
* @param {string} params.recoveryDestination - target address to send recovered funds to
|
|
74
|
+
* @param {string} params.bitgoFeeAddress - wrong chain wallet fee address for evm based cross chain recovery txn
|
|
75
|
+
* @param {string} params.bitgoDestinationAddress - target bitgo address where fee will be sent for evm based cross chain recovery txn
|
|
76
|
+
*/
|
|
77
|
+
async recover(params) {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
this.validateRecoveryParams(params);
|
|
80
|
+
const isUnsignedSweep = (0, sdk_core_1.getIsUnsignedSweep)(params);
|
|
81
|
+
// Clean up whitespace from entered values
|
|
82
|
+
let userKey = params.userKey.replace(/\s/g, '');
|
|
83
|
+
const backupKey = params.backupKey.replace(/\s/g, '');
|
|
84
|
+
const gasLimit = new abstract_eth_1.optionalDeps.ethUtil.BN(this.setGasLimit(params.gasLimit));
|
|
85
|
+
const gasPrice = params.eip1559
|
|
86
|
+
? new abstract_eth_1.optionalDeps.ethUtil.BN(params.eip1559.maxFeePerGas)
|
|
87
|
+
: new abstract_eth_1.optionalDeps.ethUtil.BN(this.setGasPrice(params.gasPrice));
|
|
88
|
+
if (!userKey.startsWith('xpub') && !userKey.startsWith('xprv')) {
|
|
89
|
+
try {
|
|
90
|
+
userKey = this.bitgo.decrypt({
|
|
91
|
+
input: userKey,
|
|
92
|
+
password: params.walletPassphrase,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
throw new Error(`Error decrypting user keychain: ${e.message}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
let backupKeyAddress;
|
|
100
|
+
let backupSigningKey;
|
|
101
|
+
if (isUnsignedSweep) {
|
|
102
|
+
const backupHDNode = utxo_lib_1.bip32.fromBase58(backupKey);
|
|
103
|
+
backupSigningKey = backupHDNode.publicKey;
|
|
104
|
+
backupKeyAddress = `0x${abstract_eth_1.optionalDeps.ethUtil.publicToAddress(backupSigningKey, true).toString('hex')}`;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Decrypt backup private key and get address
|
|
108
|
+
let backupPrv;
|
|
109
|
+
try {
|
|
110
|
+
backupPrv = this.bitgo.decrypt({
|
|
111
|
+
input: backupKey,
|
|
112
|
+
password: params.walletPassphrase,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
throw new Error(`Error decrypting backup keychain: ${e.message}`);
|
|
117
|
+
}
|
|
118
|
+
const keyPair = new lib_1.KeyPair({ prv: backupPrv });
|
|
119
|
+
backupSigningKey = keyPair.getKeys().prv;
|
|
120
|
+
if (!backupSigningKey) {
|
|
121
|
+
throw new Error('no private key');
|
|
122
|
+
}
|
|
123
|
+
backupKeyAddress = keyPair.getAddress();
|
|
124
|
+
}
|
|
125
|
+
const backupKeyNonce = await this.getAddressNonce(backupKeyAddress);
|
|
126
|
+
// get balance of backupKey to ensure funds are available to pay fees
|
|
127
|
+
const backupKeyBalance = await this.queryAddressBalance(backupKeyAddress);
|
|
128
|
+
const totalGasNeeded = gasPrice.mul(gasLimit);
|
|
129
|
+
const weiToGwei = 10 ** 9;
|
|
130
|
+
if (backupKeyBalance.lt(totalGasNeeded)) {
|
|
131
|
+
throw new Error(`Backup key address ${backupKeyAddress} has balance ${backupKeyBalance
|
|
132
|
+
.div(new ethereumjs_util_1.BN(weiToGwei))
|
|
133
|
+
.toString()} Gwei.` +
|
|
134
|
+
`This address must have a balance of at least ${(totalGasNeeded / weiToGwei).toString()}` +
|
|
135
|
+
` Gwei to perform recoveries. Try sending some funds to this address then retry.`);
|
|
136
|
+
}
|
|
137
|
+
// get balance of wallet
|
|
138
|
+
const txAmount = await this.queryAddressBalance(params.walletContractAddress);
|
|
139
|
+
if (txAmount.lt(new ethereumjs_util_1.BN(0))) {
|
|
140
|
+
throw new Error('Wallet does not have enough funds to recover');
|
|
141
|
+
}
|
|
142
|
+
// build recipients object
|
|
143
|
+
const recipients = [
|
|
144
|
+
{
|
|
145
|
+
address: params.recoveryDestination,
|
|
146
|
+
amount: txAmount.toString(10),
|
|
147
|
+
},
|
|
148
|
+
];
|
|
149
|
+
// Get sequence ID using contract call
|
|
150
|
+
// we need to wait between making two explorer api calls to avoid getting banned
|
|
151
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
152
|
+
const sequenceId = await this.querySequenceId(params.walletContractAddress);
|
|
153
|
+
let operationHash, signature;
|
|
154
|
+
// Get operation hash and sign it
|
|
155
|
+
if (!isUnsignedSweep) {
|
|
156
|
+
operationHash = this.getOperationSha3ForExecuteAndConfirm(recipients, (0, abstract_eth_1.getDefaultExpireTime)(), sequenceId);
|
|
157
|
+
signature = sdk_core_1.Util.ethSignMsgHash(operationHash, sdk_core_1.Util.xprvToEthPrivateKey(userKey));
|
|
158
|
+
try {
|
|
159
|
+
sdk_core_1.Util.ecRecoverEthAddress(operationHash, signature);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
throw new Error('Invalid signature');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Build unsigned transaction
|
|
166
|
+
const txInfo = {
|
|
167
|
+
recipient: recipients[0],
|
|
168
|
+
expireTime: (0, abstract_eth_1.getDefaultExpireTime)(),
|
|
169
|
+
contractSequenceId: sequenceId,
|
|
170
|
+
operationHash: operationHash,
|
|
171
|
+
signature: signature,
|
|
172
|
+
gasLimit: gasLimit.toString(10),
|
|
173
|
+
};
|
|
174
|
+
const txBuilder = this.getTransactionBuilder();
|
|
175
|
+
txBuilder.counter(backupKeyNonce);
|
|
176
|
+
txBuilder.contract(params.walletContractAddress);
|
|
177
|
+
const txFee = { fee: gasPrice.toString() };
|
|
178
|
+
txBuilder.fee({
|
|
179
|
+
...txFee,
|
|
180
|
+
gasLimit: gasLimit.toString(),
|
|
181
|
+
});
|
|
182
|
+
const transferBuilder = txBuilder.transfer();
|
|
183
|
+
transferBuilder
|
|
184
|
+
.coin((_a = this.staticsCoin) === null || _a === void 0 ? void 0 : _a.name)
|
|
185
|
+
.amount(recipients[0].amount)
|
|
186
|
+
.contractSequenceId(sequenceId)
|
|
187
|
+
.expirationTime((0, abstract_eth_1.getDefaultExpireTime)())
|
|
188
|
+
.to(params.recoveryDestination);
|
|
189
|
+
const tx = await txBuilder.build();
|
|
190
|
+
if (isUnsignedSweep) {
|
|
191
|
+
const response = {
|
|
192
|
+
txHex: tx.toBroadcastFormat(),
|
|
193
|
+
userKey,
|
|
194
|
+
backupKey,
|
|
195
|
+
coin: this.getChain(),
|
|
196
|
+
gasPrice: abstract_eth_1.optionalDeps.ethUtil.bufferToInt(gasPrice).toFixed(),
|
|
197
|
+
gasLimit,
|
|
198
|
+
recipients: [txInfo.recipient],
|
|
199
|
+
walletContractAddress: tx.toJson().to,
|
|
200
|
+
amount: txInfo.recipient.amount,
|
|
201
|
+
backupKeyNonce,
|
|
202
|
+
eip1559: params.eip1559,
|
|
203
|
+
};
|
|
204
|
+
_.extend(response, txInfo);
|
|
205
|
+
response.nextContractSequenceId = response.contractSequenceId;
|
|
206
|
+
return response;
|
|
207
|
+
}
|
|
208
|
+
// sign the transaction
|
|
209
|
+
txBuilder
|
|
210
|
+
.transfer()
|
|
211
|
+
.coin((_b = this.staticsCoin) === null || _b === void 0 ? void 0 : _b.name)
|
|
212
|
+
.key(new lib_1.KeyPair({ prv: userKey }).getKeys().prv);
|
|
213
|
+
txBuilder.sign({ key: backupSigningKey });
|
|
214
|
+
const signedTx = await txBuilder.build();
|
|
215
|
+
return {
|
|
216
|
+
id: signedTx.toJson().id,
|
|
217
|
+
tx: signedTx.toBroadcastFormat(),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
27
220
|
getTransactionBuilder() {
|
|
28
221
|
return new lib_1.TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
29
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Make a query to etc.network for information such as balance, token balance, solidity calls
|
|
225
|
+
* @param {Object} query — key-value pairs of parameters to append after /api
|
|
226
|
+
* @returns {Promise<Object>} response from etc.network
|
|
227
|
+
*/
|
|
228
|
+
async recoveryBlockchainExplorerQuery(query) {
|
|
229
|
+
const response = await superagent_1.default
|
|
230
|
+
.post(sdk_core_1.common.Environments[this.bitgo.getEnv()].etcNodeUrl + '/api/eth-rpc')
|
|
231
|
+
.send(query);
|
|
232
|
+
if (!response.ok) {
|
|
233
|
+
throw new Error('could not reach etc.network');
|
|
234
|
+
}
|
|
235
|
+
if (response.body.status === '0' && response.body.message === 'NOTOK') {
|
|
236
|
+
throw new Error('etc.network rate limit reached');
|
|
237
|
+
}
|
|
238
|
+
return response.body;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Method to validate recovery params
|
|
242
|
+
* @param {RecoverOptions} params
|
|
243
|
+
* @returns {void}
|
|
244
|
+
*/
|
|
245
|
+
validateRecoveryParams(params) {
|
|
246
|
+
if (_.isUndefined(params.userKey)) {
|
|
247
|
+
throw new Error('missing userKey');
|
|
248
|
+
}
|
|
249
|
+
if (_.isUndefined(params.backupKey)) {
|
|
250
|
+
throw new Error('missing backupKey');
|
|
251
|
+
}
|
|
252
|
+
if (_.isUndefined(params.walletPassphrase) && !params.userKey.startsWith('xpub') && !params.isTss) {
|
|
253
|
+
throw new Error('missing wallet passphrase');
|
|
254
|
+
}
|
|
255
|
+
if (_.isUndefined(params.walletContractAddress) || !this.isValidAddress(params.walletContractAddress)) {
|
|
256
|
+
throw new Error('invalid walletContractAddress');
|
|
257
|
+
}
|
|
258
|
+
if (_.isUndefined(params.recoveryDestination) || !this.isValidAddress(params.recoveryDestination)) {
|
|
259
|
+
throw new Error('invalid recoveryDestination');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Queries public block explorer to get the next ETHLike coin's nonce that should be used for the given ETH address
|
|
264
|
+
* @param {string} address
|
|
265
|
+
* @returns {Promise<number>}
|
|
266
|
+
*/
|
|
267
|
+
async getAddressNonce(address) {
|
|
268
|
+
// Get nonce for backup key (should be 0)
|
|
269
|
+
const result = await this.recoveryBlockchainExplorerQuery({
|
|
270
|
+
jsonrpc: '2.0',
|
|
271
|
+
method: 'eth_getTransactionCount',
|
|
272
|
+
params: [address, 'latest'],
|
|
273
|
+
id: 1,
|
|
274
|
+
});
|
|
275
|
+
if (!result || isNaN(result.result)) {
|
|
276
|
+
throw new Error('Unable to find next nonce from etc.network, got: ' + JSON.stringify(result));
|
|
277
|
+
}
|
|
278
|
+
const nonceHex = result.result;
|
|
279
|
+
return new abstract_eth_1.optionalDeps.ethUtil.BN(nonceHex.slice(2), 16).toNumber();
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Queries etc.network for the balance of an address
|
|
283
|
+
* @param {string} address - the ETC address
|
|
284
|
+
* @returns {Promise<BigNumber>} address balance
|
|
285
|
+
*/
|
|
286
|
+
async queryAddressBalance(address) {
|
|
287
|
+
const result = await this.recoveryBlockchainExplorerQuery({
|
|
288
|
+
jsonrpc: '2.0',
|
|
289
|
+
method: 'eth_getBalance',
|
|
290
|
+
params: [address, 'latest'],
|
|
291
|
+
id: 1,
|
|
292
|
+
});
|
|
293
|
+
// throw if the result does not exist or the result is not a valid number
|
|
294
|
+
if (!result || !result.result || isNaN(result.result)) {
|
|
295
|
+
throw new Error(`Could not obtain address balance for ${address} from etc.network, got: ${result.result}`);
|
|
296
|
+
}
|
|
297
|
+
const nativeBalanceHex = result.result;
|
|
298
|
+
return new abstract_eth_1.optionalDeps.ethUtil.BN(nativeBalanceHex.slice(2), 16);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Queries the contract (via explorer API) for the next sequence ID
|
|
302
|
+
* @param {String} address - address of the contract
|
|
303
|
+
* @returns {Promise<Number>} sequence ID
|
|
304
|
+
*/
|
|
305
|
+
async querySequenceId(address) {
|
|
306
|
+
// Get sequence ID using contract call
|
|
307
|
+
const sequenceIdMethodSignature = abstract_eth_1.optionalDeps.ethAbi.methodID('getNextSequenceId', []);
|
|
308
|
+
const sequenceIdArgs = abstract_eth_1.optionalDeps.ethAbi.rawEncode([], []);
|
|
309
|
+
const sequenceIdData = buffer_1.Buffer.concat([sequenceIdMethodSignature, sequenceIdArgs]).toString('hex');
|
|
310
|
+
const sequenceIdDataHex = abstract_eth_1.optionalDeps.ethUtil.addHexPrefix(sequenceIdData);
|
|
311
|
+
const result = await this.recoveryBlockchainExplorerQuery({
|
|
312
|
+
jsonrpc: '2.0',
|
|
313
|
+
method: 'eth_call',
|
|
314
|
+
params: [{ to: address, data: sequenceIdDataHex }, 'latest'],
|
|
315
|
+
id: 1,
|
|
316
|
+
});
|
|
317
|
+
if (!result || !result.result) {
|
|
318
|
+
throw new Error('Could not obtain sequence ID from etc.network, got: ' + result.result);
|
|
319
|
+
}
|
|
320
|
+
const sequenceIdHex = result.result;
|
|
321
|
+
return new abstract_eth_1.optionalDeps.ethUtil.BN(sequenceIdHex.slice(2), 16).toNumber();
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Check whether the gas price passed in by user are within our max and min bounds
|
|
325
|
+
* If they are not set, set them to the defaults
|
|
326
|
+
* @param {number} userGasPrice - user defined gas price
|
|
327
|
+
* @returns {number} the gas price to use for this transaction
|
|
328
|
+
*/
|
|
329
|
+
setGasPrice(userGasPrice) {
|
|
330
|
+
if (!userGasPrice) {
|
|
331
|
+
return statics_1.ethGasConfigs.defaultGasPrice;
|
|
332
|
+
}
|
|
333
|
+
const gasPriceMax = statics_1.ethGasConfigs.maximumGasPrice;
|
|
334
|
+
const gasPriceMin = statics_1.ethGasConfigs.minimumGasPrice;
|
|
335
|
+
if (userGasPrice < gasPriceMin || userGasPrice > gasPriceMax) {
|
|
336
|
+
throw new Error(`Gas price must be between ${gasPriceMin} and ${gasPriceMax}`);
|
|
337
|
+
}
|
|
338
|
+
return userGasPrice;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Check whether gas limit passed in by user are within our max and min bounds
|
|
342
|
+
* If they are not set, set them to the defaults
|
|
343
|
+
* @param {number} userGasLimit user defined gas limit
|
|
344
|
+
* @returns {number} the gas limit to use for this transaction
|
|
345
|
+
*/
|
|
346
|
+
setGasLimit(userGasLimit) {
|
|
347
|
+
if (!userGasLimit) {
|
|
348
|
+
return statics_1.ethGasConfigs.defaultGasLimit;
|
|
349
|
+
}
|
|
350
|
+
const gasLimitMax = statics_1.ethGasConfigs.maximumGasLimit;
|
|
351
|
+
const gasLimitMin = statics_1.ethGasConfigs.minimumGasLimit;
|
|
352
|
+
if (userGasLimit < gasLimitMin || userGasLimit > gasLimitMax) {
|
|
353
|
+
throw new Error(`Gas limit must be between ${gasLimitMin} and ${gasLimitMax}`);
|
|
354
|
+
}
|
|
355
|
+
return userGasLimit;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* @param {Recipient[]} recipients - the recipients of the transaction
|
|
359
|
+
* @param {number} expireTime - the expire time of the transaction
|
|
360
|
+
* @param {number} contractSequenceId - the contract sequence id of the transaction
|
|
361
|
+
* @returns {string}
|
|
362
|
+
*/
|
|
363
|
+
getOperationSha3ForExecuteAndConfirm(recipients, expireTime, contractSequenceId) {
|
|
364
|
+
if (!recipients || !Array.isArray(recipients)) {
|
|
365
|
+
throw new Error('expecting array of recipients');
|
|
366
|
+
}
|
|
367
|
+
// Right now we only support 1 recipient
|
|
368
|
+
if (recipients.length !== 1) {
|
|
369
|
+
throw new Error('must send to exactly 1 recipient');
|
|
370
|
+
}
|
|
371
|
+
if (!_.isNumber(expireTime)) {
|
|
372
|
+
throw new Error('expireTime must be number of seconds since epoch');
|
|
373
|
+
}
|
|
374
|
+
if (!_.isNumber(contractSequenceId)) {
|
|
375
|
+
throw new Error('contractSequenceId must be number');
|
|
376
|
+
}
|
|
377
|
+
// Check inputs
|
|
378
|
+
recipients.forEach(function (recipient) {
|
|
379
|
+
if (!_.isString(recipient.address) ||
|
|
380
|
+
!abstract_eth_1.optionalDeps.ethUtil.isValidAddress(abstract_eth_1.optionalDeps.ethUtil.addHexPrefix(recipient.address))) {
|
|
381
|
+
throw new Error('Invalid address: ' + recipient.address);
|
|
382
|
+
}
|
|
383
|
+
let amount;
|
|
384
|
+
try {
|
|
385
|
+
amount = new bignumber_js_1.BigNumber(recipient.amount);
|
|
386
|
+
}
|
|
387
|
+
catch (e) {
|
|
388
|
+
throw new Error('Invalid amount for: ' + recipient.address + ' - should be numeric');
|
|
389
|
+
}
|
|
390
|
+
recipient.amount = amount.toFixed(0);
|
|
391
|
+
if (recipient.data && !_.isString(recipient.data)) {
|
|
392
|
+
throw new Error('Data for recipient ' + recipient.address + ' - should be of type hex string');
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
const recipient = recipients[0];
|
|
396
|
+
return abstract_eth_1.optionalDeps.ethUtil.bufferToHex(abstract_eth_1.optionalDeps.ethAbi.soliditySHA3(...this.getOperation(recipient, expireTime, contractSequenceId)));
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get transfer operation for coin
|
|
400
|
+
* @param {Recipient} recipient - recipient info
|
|
401
|
+
* @param {number} expireTime - expiry time
|
|
402
|
+
* @param {number} contractSequenceId - sequence id
|
|
403
|
+
* @returns {Array} operation array
|
|
404
|
+
*/
|
|
405
|
+
getOperation(recipient, expireTime, contractSequenceId) {
|
|
406
|
+
const network = this.getNetwork();
|
|
407
|
+
return [
|
|
408
|
+
['string', 'address', 'uint', 'bytes', 'uint', 'uint'],
|
|
409
|
+
[
|
|
410
|
+
network.nativeCoinOperationHashPrefix,
|
|
411
|
+
new abstract_eth_1.optionalDeps.ethUtil.BN(abstract_eth_1.optionalDeps.ethUtil.stripHexPrefix(recipient.address), 16),
|
|
412
|
+
recipient.amount,
|
|
413
|
+
buffer_1.Buffer.from(abstract_eth_1.optionalDeps.ethUtil.stripHexPrefix(abstract_eth_1.optionalDeps.ethUtil.padToEven(recipient.data || '')), 'hex'),
|
|
414
|
+
expireTime,
|
|
415
|
+
contractSequenceId,
|
|
416
|
+
],
|
|
417
|
+
];
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Method to return the coin's network object
|
|
421
|
+
* @returns {EthLikeNetwork | undefined}
|
|
422
|
+
*/
|
|
423
|
+
getNetwork() {
|
|
424
|
+
var _a;
|
|
425
|
+
return (_a = this.staticsCoin) === null || _a === void 0 ? void 0 : _a.network;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Assemble half-sign prebuilt transaction
|
|
429
|
+
* @param {SignTransactionOptions} params
|
|
430
|
+
*/
|
|
431
|
+
async signTransaction(params) {
|
|
432
|
+
var _a;
|
|
433
|
+
// Normally the SDK provides the first signature for an EthLike tx, but occasionally it provides the second and final one.
|
|
434
|
+
if (params.isLastSignature) {
|
|
435
|
+
// In this case when we're doing the second (final) signature, the logic is different.
|
|
436
|
+
return await this.signFinal(params);
|
|
437
|
+
}
|
|
438
|
+
const txBuilder = this.getTransactionBuilder();
|
|
439
|
+
txBuilder.from(params.txPrebuild.txHex);
|
|
440
|
+
txBuilder
|
|
441
|
+
.transfer()
|
|
442
|
+
.coin((_a = this.staticsCoin) === null || _a === void 0 ? void 0 : _a.name)
|
|
443
|
+
.key(new lib_1.KeyPair({ prv: params.prv }).getKeys().prv);
|
|
444
|
+
const transaction = await txBuilder.build();
|
|
445
|
+
const recipients = transaction.outputs.map((output) => ({ address: output.address, amount: output.value }));
|
|
446
|
+
const txParams = {
|
|
447
|
+
eip1559: params.txPrebuild.eip1559,
|
|
448
|
+
txHex: transaction.toBroadcastFormat(),
|
|
449
|
+
recipients: recipients,
|
|
450
|
+
expiration: params.txPrebuild.expireTime,
|
|
451
|
+
hopTransaction: params.txPrebuild.hopTransaction,
|
|
452
|
+
custodianTransactionId: params.custodianTransactionId,
|
|
453
|
+
expireTime: params.expireTime,
|
|
454
|
+
contractSequenceId: params.txPrebuild.nextContractSequenceId,
|
|
455
|
+
sequenceId: params.sequenceId,
|
|
456
|
+
};
|
|
457
|
+
return { halfSigned: txParams };
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Helper function for signTransaction for the rare case that SDK is doing the second signature
|
|
461
|
+
* Note: we are expecting this to be called from the offline vault
|
|
462
|
+
* @param params.txPrebuild
|
|
463
|
+
* @param params.prv
|
|
464
|
+
* @returns {{txHex: string}}
|
|
465
|
+
*/
|
|
466
|
+
async signFinal(params) {
|
|
467
|
+
const keyPair = new lib_1.KeyPair({ prv: params.prv });
|
|
468
|
+
const signingKey = keyPair.getKeys().prv;
|
|
469
|
+
if (_.isUndefined(signingKey)) {
|
|
470
|
+
throw new Error('missing private key');
|
|
471
|
+
}
|
|
472
|
+
const txBuilder = this.getTransactionBuilder();
|
|
473
|
+
try {
|
|
474
|
+
txBuilder.from(params.txPrebuild.halfSigned.txHex);
|
|
475
|
+
}
|
|
476
|
+
catch (e) {
|
|
477
|
+
throw new Error('invalid half-signed transaction');
|
|
478
|
+
}
|
|
479
|
+
txBuilder.sign({ key: signingKey });
|
|
480
|
+
const tx = await txBuilder.build();
|
|
481
|
+
return {
|
|
482
|
+
txHex: tx.toBroadcastFormat(),
|
|
483
|
+
};
|
|
484
|
+
}
|
|
30
485
|
}
|
|
31
486
|
exports.Etc = Etc;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V0Yy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILDJEQUErRDtBQUUvRCxpREFBeUU7QUFDekUsK0JBQW9EO0FBRXBELE1BQWEsR0FBSSxTQUFRLGtDQUFtQjtJQUMxQyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUk7WUFDRixJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDdEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Q0FDRjtBQXRCRCxrQkFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBBYnN0cmFjdEV0aExpa2VDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IEJhc2VDb2luLCBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5cbmV4cG9ydCBjbGFzcyBFdGMgZXh0ZW5kcyBBYnN0cmFjdEV0aExpa2VDb2luIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgRXRjKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWIgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cbn1cbiJdfQ==
|
|
487
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V0Yy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsMkRBU2tDO0FBQ2xDLG1EQUF3RztBQUN4RyxpREFBMkg7QUFDM0gsK0JBQW1GO0FBQ25GLDBDQUE0QjtBQUM1QixtREFBNkM7QUFDN0MsK0NBQXlDO0FBQ3pDLG1DQUFnQztBQUNoQyw0REFBaUM7QUFDakMscURBQXFDO0FBRXJDLE1BQWEsR0FBSSxTQUFRLGtDQUFtQjtJQUkxQyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSTtZQUNGLElBQUksYUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXNCOztRQUNsQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsTUFBTSxlQUFlLEdBQUcsSUFBQSw2QkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCwwQ0FBMEM7UUFDMUMsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLDJCQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQyxJQUFJLDJCQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMxRCxDQUFDLENBQUMsSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUQsSUFBSTtnQkFDRixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNsQyxDQUFDLENBQUM7YUFDSjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFDRCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxZQUFZLEdBQUcsZ0JBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxnQkFBZ0IsR0FBRyxLQUFLLDJCQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUN4RzthQUFNO1lBQ0wsNkNBQTZDO1lBQzdDLElBQUksU0FBUyxDQUFDO1lBRWQsSUFBSTtnQkFDRixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQzdCLEtBQUssRUFBRSxTQUFTO29CQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDbEMsQ0FBQyxDQUFDO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNuRTtZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkQsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNuQztZQUNELGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN6QztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLHFFQUFxRTtRQUNyRSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5QyxNQUFNLFNBQVMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0JBQXNCLGdCQUFnQixpQkFBaUIsZ0JBQWdCO2lCQUNwRSxHQUFHLENBQUMsSUFBSSxvQkFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QixRQUFRLEVBQUUsUUFBUTtnQkFDbkIsZ0RBQWdELENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN6RixpRkFBaUYsQ0FDcEYsQ0FBQztTQUNIO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLG9CQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDakU7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxVQUFVLEdBQUc7WUFDakI7Z0JBQ0UsT0FBTyxFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7Z0JBQ25DLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzthQUM5QjtTQUNGLENBQUM7UUFFRixzQ0FBc0M7UUFDdEMsZ0ZBQWdGO1FBQ2hGLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFNUUsSUFBSSxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQzdCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLGFBQWEsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsVUFBVSxFQUFFLElBQUEsbUNBQW9CLEdBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxRyxTQUFTLEdBQUcsZUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsZUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFbEYsSUFBSTtnQkFDRixlQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3BEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxNQUFNLEdBQUc7WUFDYixTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN4QixVQUFVLEVBQUUsSUFBQSxtQ0FBb0IsR0FBRTtZQUNsQyxrQkFBa0IsRUFBRSxVQUFVO1lBQzlCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztTQUNoQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUF3QixDQUFDO1FBQ3JFLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUU7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBcUIsQ0FBQztRQUNoRSxlQUFlO2FBQ1osSUFBSSxDQUFDLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsSUFBYyxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQzVCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQzthQUM5QixjQUFjLENBQUMsSUFBQSxtQ0FBb0IsR0FBRSxDQUFDO2FBQ3RDLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBdUI7Z0JBQ25DLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzdCLE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsUUFBUSxFQUFFLDJCQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzlELFFBQVE7Z0JBQ1IsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDOUIscUJBQXFCLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQy9CLGNBQWM7Z0JBQ2QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2FBQ3hCLENBQUM7WUFDRixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQixRQUFRLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1lBQzlELE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBRUQsdUJBQXVCO1FBQ3ZCLFNBQVM7YUFDTixRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxJQUFjLENBQUM7YUFDdEMsR0FBRyxDQUFDLElBQUksYUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBYSxDQUFDLENBQUM7UUFDakUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekMsT0FBTztZQUNMLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUN4QixFQUFFLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSx3QkFBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsK0JBQStCLENBQUMsS0FBMEI7UUFDOUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBTzthQUMzQixJQUFJLENBQUMsaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7YUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLE1BQXNCO1FBQzNDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDakcsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUNyRyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2pHLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFlO1FBQ25DLHlDQUF5QztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQztZQUN4RCxPQUFPLEVBQUUsS0FBSztZQUNkLE1BQU0sRUFBRSx5QkFBeUI7WUFDakMsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUMzQixFQUFFLEVBQUUsQ0FBQztTQUNOLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMvRjtRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsT0FBTyxJQUFJLDJCQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQWU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUM7WUFDeEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDM0IsRUFBRSxFQUFFLENBQUM7U0FDTixDQUFDLENBQUM7UUFDSCx5RUFBeUU7UUFDekUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxPQUFPLDJCQUEyQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUM1RztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLElBQUksMkJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBZTtRQUNuQyxzQ0FBc0M7UUFDdEMsTUFBTSx5QkFBeUIsR0FBRywyQkFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEYsTUFBTSxjQUFjLEdBQUcsMkJBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLGNBQWMsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLENBQUMseUJBQXlCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEcsTUFBTSxpQkFBaUIsR0FBRywyQkFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUM7WUFDeEQsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNLEVBQUUsVUFBVTtZQUNsQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsUUFBUSxDQUFDO1lBQzVELEVBQUUsRUFBRSxDQUFDO1NBQ04sQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekY7UUFDRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3BDLE9BQU8sSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsWUFBcUI7UUFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixPQUFPLHVCQUFhLENBQUMsZUFBZSxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxXQUFXLEdBQUcsdUJBQWEsQ0FBQyxlQUFlLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsdUJBQWEsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxZQUFZLEdBQUcsV0FBVyxJQUFJLFlBQVksR0FBRyxXQUFXLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsV0FBVyxRQUFRLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDaEY7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsWUFBcUI7UUFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixPQUFPLHVCQUFhLENBQUMsZUFBZSxDQUFDO1NBQ3RDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsdUJBQWEsQ0FBQyxlQUFlLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsdUJBQWEsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxZQUFZLEdBQUcsV0FBVyxJQUFJLFlBQVksR0FBRyxXQUFXLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsV0FBVyxRQUFRLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDaEY7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvQ0FBb0MsQ0FDbEMsVUFBdUIsRUFDdkIsVUFBa0IsRUFDbEIsa0JBQTBCO1FBRTFCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRDtRQUVELHdDQUF3QztRQUN4QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1NBQ3REO1FBRUQsZUFBZTtRQUNmLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxTQUFTO1lBQ3BDLElBQ0UsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLENBQUMsMkJBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLDJCQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDMUY7Z0JBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUQ7WUFFRCxJQUFJLE1BQWlCLENBQUM7WUFDdEIsSUFBSTtnQkFDRixNQUFNLEdBQUcsSUFBSSx3QkFBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3RGO1lBRUQsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDLENBQUMsQ0FBQzthQUNoRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sMkJBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUNyQywyQkFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUNsRyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFlBQVksQ0FBQyxTQUFvQixFQUFFLFVBQWtCLEVBQUUsa0JBQTBCO1FBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQW9CLENBQUM7UUFDcEQsT0FBTztZQUNMLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDdEQ7Z0JBQ0UsT0FBTyxDQUFDLDZCQUE2QjtnQkFDckMsSUFBSSwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsMkJBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZGLFNBQVMsQ0FBQyxNQUFNO2dCQUNoQixlQUFNLENBQUMsSUFBSSxDQUFDLDJCQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQywyQkFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDN0csVUFBVTtnQkFDVixrQkFBa0I7YUFDbkI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVU7O1FBQ1IsT0FBTyxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLE9BQXlCLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBOEI7O1FBQ2xELDBIQUEwSDtRQUMxSCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDMUIsc0ZBQXNGO1lBQ3RGLE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLFNBQVM7YUFDTixRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxJQUFjLENBQUM7YUFDdEMsR0FBRyxDQUFDLElBQUksYUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTVDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUcsTUFBTSxRQUFRLEdBQUc7WUFDZixPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQ2xDLEtBQUssRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsVUFBVSxFQUFFLFVBQVU7WUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUN4QyxjQUFjLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjO1lBQ2hELHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7WUFDckQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsc0JBQWdDO1lBQ3RFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDekMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN4QztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9DLElBQUk7WUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTztZQUNMLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUU7U0FDOUIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTllRCxrQkE4ZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VDb2luLFxuICBnZXREZWZhdWx0RXhwaXJlVGltZSxcbiAgT2ZmbGluZVZhdWx0VHhJbmZvLFxuICBvcHRpb25hbERlcHMsXG4gIFJlY292ZXJPcHRpb25zLFxuICBSZWNvdmVyeUluZm8sXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSwgY29tbW9uLCBnZXRJc1Vuc2lnbmVkU3dlZXAsIFV0aWwsIFJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMsIEV0aGVyZXVtTmV0d29yayBhcyBFdGhMaWtlTmV0d29yaywgZXRoR2FzQ29uZmlncyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyLCBLZXlQYWlyIGFzIEtleVBhaXJMaWIsIFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB7IEJOIH0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcblxuZXhwb3J0IGNsYXNzIEV0YyBleHRlbmRzIEFic3RyYWN0RXRoTGlrZUNvaW4ge1xuICByZWFkb25seSBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCByZWFkb25seSBzZW5kTWV0aG9kTmFtZTogJ3NlbmRNdWx0aVNpZycgfCAnc2VuZE11bHRpU2lnVG9rZW4nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gICAgdGhpcy5zZW5kTWV0aG9kTmFtZSA9ICdzZW5kTXVsdGlTaWcnO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEV0YyhiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyTGliKHsgcHViIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy51c2VyS2V5IC0gW2VuY3J5cHRlZF0geHBydlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmJhY2t1cEtleSAtIFtlbmNyeXB0ZWRdIHhwcnYgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSAtIHVzZWQgdG8gZGVjcnlwdCB1c2VyS2V5IGFuZCBiYWNrdXBLZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MgLSB0aGUgRVRIIGFkZHJlc3Mgb2YgdGhlIHdhbGxldCBjb250cmFjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmtyc1Byb3ZpZGVyIC0gbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uIC0gdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5iaXRnb0ZlZUFkZHJlc3MgLSB3cm9uZyBjaGFpbiB3YWxsZXQgZmVlIGFkZHJlc3MgZm9yIGV2bSBiYXNlZCBjcm9zcyBjaGFpbiByZWNvdmVyeSB0eG5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5iaXRnb0Rlc3RpbmF0aW9uQWRkcmVzcyAtIHRhcmdldCBiaXRnbyBhZGRyZXNzIHdoZXJlIGZlZSB3aWxsIGJlIHNlbnQgZm9yIGV2bSBiYXNlZCBjcm9zcyBjaGFpbiByZWNvdmVyeSB0eG5cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyT3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gICAgdGhpcy52YWxpZGF0ZVJlY292ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gZ2V0SXNVbnNpZ25lZFN3ZWVwKHBhcmFtcyk7XG5cbiAgICAvLyBDbGVhbiB1cCB3aGl0ZXNwYWNlIGZyb20gZW50ZXJlZCB2YWx1ZXNcbiAgICBsZXQgdXNlcktleSA9IHBhcmFtcy51c2VyS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIGNvbnN0IGdhc0xpbWl0ID0gbmV3IG9wdGlvbmFsRGVwcy5ldGhVdGlsLkJOKHRoaXMuc2V0R2FzTGltaXQocGFyYW1zLmdhc0xpbWl0KSk7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSBwYXJhbXMuZWlwMTU1OVxuICAgICAgPyBuZXcgb3B0aW9uYWxEZXBzLmV0aFV0aWwuQk4ocGFyYW1zLmVpcDE1NTkubWF4RmVlUGVyR2FzKVxuICAgICAgOiBuZXcgb3B0aW9uYWxEZXBzLmV0aFV0aWwuQk4odGhpcy5zZXRHYXNQcmljZShwYXJhbXMuZ2FzUHJpY2UpKTtcblxuICAgIGlmICghdXNlcktleS5zdGFydHNXaXRoKCd4cHViJykgJiYgIXVzZXJLZXkuc3RhcnRzV2l0aCgneHBydicpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1c2VyS2V5ID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICBpbnB1dDogdXNlcktleSxcbiAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGRlY3J5cHRpbmcgdXNlciBrZXljaGFpbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBiYWNrdXBLZXlBZGRyZXNzO1xuICAgIGxldCBiYWNrdXBTaWduaW5nS2V5O1xuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGNvbnN0IGJhY2t1cEhETm9kZSA9IGJpcDMyLmZyb21CYXNlNTgoYmFja3VwS2V5KTtcbiAgICAgIGJhY2t1cFNpZ25pbmdLZXkgPSBiYWNrdXBIRE5vZGUucHVibGljS2V5O1xuICAgICAgYmFja3VwS2V5QWRkcmVzcyA9IGAweCR7b3B0aW9uYWxEZXBzLmV0aFV0aWwucHVibGljVG9BZGRyZXNzKGJhY2t1cFNpZ25pbmdLZXksIHRydWUpLnRvU3RyaW5nKCdoZXgnKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWNyeXB0IGJhY2t1cCBwcml2YXRlIGtleSBhbmQgZ2V0IGFkZHJlc3NcbiAgICAgIGxldCBiYWNrdXBQcnY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGJhY2t1cFBydiA9IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICAgICAgaW5wdXQ6IGJhY2t1cEtleSxcbiAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLndhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGRlY3J5cHRpbmcgYmFja3VwIGtleWNoYWluOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyTGliKHsgcHJ2OiBiYWNrdXBQcnYgfSk7XG4gICAgICBiYWNrdXBTaWduaW5nS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICAgICAgaWYgKCFiYWNrdXBTaWduaW5nS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICAgIGJhY2t1cEtleUFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrdXBLZXlOb25jZSA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzc05vbmNlKGJhY2t1cEtleUFkZHJlc3MpO1xuICAgIC8vIGdldCBiYWxhbmNlIG9mIGJhY2t1cEtleSB0byBlbnN1cmUgZnVuZHMgYXJlIGF2YWlsYWJsZSB0byBwYXkgZmVlc1xuICAgIGNvbnN0IGJhY2t1cEtleUJhbGFuY2UgPSBhd2FpdCB0aGlzLnF1ZXJ5QWRkcmVzc0JhbGFuY2UoYmFja3VwS2V5QWRkcmVzcyk7XG4gICAgY29uc3QgdG90YWxHYXNOZWVkZWQgPSBnYXNQcmljZS5tdWwoZ2FzTGltaXQpO1xuXG4gICAgY29uc3Qgd2VpVG9Hd2VpID0gMTAgKiogOTtcbiAgICBpZiAoYmFja3VwS2V5QmFsYW5jZS5sdCh0b3RhbEdhc05lZWRlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEJhY2t1cCBrZXkgYWRkcmVzcyAke2JhY2t1cEtleUFkZHJlc3N9IGhhcyBiYWxhbmNlICAke2JhY2t1cEtleUJhbGFuY2VcbiAgICAgICAgICAuZGl2KG5ldyBCTih3ZWlUb0d3ZWkpKVxuICAgICAgICAgIC50b1N0cmluZygpfSBHd2VpLmAgK1xuICAgICAgICAgIGBUaGlzIGFkZHJlc3MgbXVzdCBoYXZlIGEgYmFsYW5jZSBvZiBhdCBsZWFzdCAkeyh0b3RhbEdhc05lZWRlZCAvIHdlaVRvR3dlaSkudG9TdHJpbmcoKX1gICtcbiAgICAgICAgICBgIEd3ZWkgdG8gcGVyZm9ybSByZWNvdmVyaWVzLiBUcnkgc2VuZGluZyBzb21lIGZ1bmRzIHRvIHRoaXMgYWRkcmVzcyB0aGVuIHJldHJ5LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGJhbGFuY2Ugb2Ygd2FsbGV0XG4gICAgY29uc3QgdHhBbW91bnQgPSBhd2FpdCB0aGlzLnF1ZXJ5QWRkcmVzc0JhbGFuY2UocGFyYW1zLndhbGxldENvbnRyYWN0QWRkcmVzcyk7XG4gICAgaWYgKHR4QW1vdW50Lmx0KG5ldyBCTigwKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IGRvZXMgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZCByZWNpcGllbnRzIG9iamVjdFxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBhbW91bnQ6IHR4QW1vdW50LnRvU3RyaW5nKDEwKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIEdldCBzZXF1ZW5jZSBJRCB1c2luZyBjb250cmFjdCBjYWxsXG4gICAgLy8gd2UgbmVlZCB0byB3YWl0IGJldHdlZW4gbWFraW5nIHR3byBleHBsb3JlciBhcGkgY2FsbHMgdG8gYXZvaWQgZ2V0dGluZyBiYW5uZWRcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IGF3YWl0IHRoaXMucXVlcnlTZXF1ZW5jZUlkKHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MpO1xuXG4gICAgbGV0IG9wZXJhdGlvbkhhc2gsIHNpZ25hdHVyZTtcbiAgICAvLyBHZXQgb3BlcmF0aW9uIGhhc2ggYW5kIHNpZ24gaXRcbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgb3BlcmF0aW9uSGFzaCA9IHRoaXMuZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKHJlY2lwaWVudHMsIGdldERlZmF1bHRFeHBpcmVUaW1lKCksIHNlcXVlbmNlSWQpO1xuICAgICAgc2lnbmF0dXJlID0gVXRpbC5ldGhTaWduTXNnSGFzaChvcGVyYXRpb25IYXNoLCBVdGlsLnhwcnZUb0V0aFByaXZhdGVLZXkodXNlcktleSkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBVdGlsLmVjUmVjb3ZlckV0aEFkZHJlc3Mob3BlcmF0aW9uSGFzaCwgc2lnbmF0dXJlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdHhJbmZvID0ge1xuICAgICAgcmVjaXBpZW50OiByZWNpcGllbnRzWzBdLFxuICAgICAgZXhwaXJlVGltZTogZ2V0RGVmYXVsdEV4cGlyZVRpbWUoKSxcbiAgICAgIGNvbnRyYWN0U2VxdWVuY2VJZDogc2VxdWVuY2VJZCxcbiAgICAgIG9wZXJhdGlvbkhhc2g6IG9wZXJhdGlvbkhhc2gsXG4gICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSxcbiAgICAgIGdhc0xpbWl0OiBnYXNMaW1pdC50b1N0cmluZygxMCksXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCkgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKGJhY2t1cEtleU5vbmNlKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QocGFyYW1zLndhbGxldENvbnRyYWN0QWRkcmVzcyk7XG4gICAgY29uc3QgdHhGZWUgPSB7IGZlZTogZ2FzUHJpY2UudG9TdHJpbmcoKSB9O1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgLi4udHhGZWUsXG4gICAgICBnYXNMaW1pdDogZ2FzTGltaXQudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFuc2ZlckJ1aWxkZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoKSBhcyBUcmFuc2ZlckJ1aWxkZXI7XG4gICAgdHJhbnNmZXJCdWlsZGVyXG4gICAgICAuY29pbih0aGlzLnN0YXRpY3NDb2luPy5uYW1lIGFzIHN0cmluZylcbiAgICAgIC5hbW91bnQocmVjaXBpZW50c1swXS5hbW91bnQpXG4gICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZ2V0RGVmYXVsdEV4cGlyZVRpbWUoKSlcbiAgICAgIC50byhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBPZmZsaW5lVmF1bHRUeEluZm8gPSB7XG4gICAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB1c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgZ2FzUHJpY2U6IG9wdGlvbmFsRGVwcy5ldGhVdGlsLmJ1ZmZlclRvSW50KGdhc1ByaWNlKS50b0ZpeGVkKCksXG4gICAgICAgIGdhc0xpbWl0LFxuICAgICAgICByZWNpcGllbnRzOiBbdHhJbmZvLnJlY2lwaWVudF0sXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogdHgudG9Kc29uKCkudG8sXG4gICAgICAgIGFtb3VudDogdHhJbmZvLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGJhY2t1cEtleU5vbmNlLFxuICAgICAgICBlaXAxNTU5OiBwYXJhbXMuZWlwMTU1OSxcbiAgICAgIH07XG4gICAgICBfLmV4dGVuZChyZXNwb25zZSwgdHhJbmZvKTtcbiAgICAgIHJlc3BvbnNlLm5leHRDb250cmFjdFNlcXVlbmNlSWQgPSByZXNwb25zZS5jb250cmFjdFNlcXVlbmNlSWQ7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLy8gc2lnbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0eEJ1aWxkZXJcbiAgICAgIC50cmFuc2ZlcigpXG4gICAgICAuY29pbih0aGlzLnN0YXRpY3NDb2luPy5uYW1lIGFzIHN0cmluZylcbiAgICAgIC5rZXkobmV3IEtleVBhaXJMaWIoeyBwcnY6IHVzZXJLZXkgfSkuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmcpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBiYWNrdXBTaWduaW5nS2V5IH0pO1xuXG4gICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc2lnbmVkVHgudG9Kc29uKCkuaWQsXG4gICAgICB0eDogc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgcXVlcnkgdG8gZXRjLm5ldHdvcmsgZm9yIGluZm9ybWF0aW9uIHN1Y2ggYXMgYmFsYW5jZSwgdG9rZW4gYmFsYW5jZSwgc29saWRpdHkgY2FsbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IOKAlCBrZXktdmFsdWUgcGFpcnMgb2YgcGFyYW1ldGVycyB0byBhcHBlbmQgYWZ0ZXIgL2FwaVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSByZXNwb25zZSBmcm9tIGV0Yy5uZXR3b3JrXG4gICAqL1xuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RcbiAgICAgIC5wb3N0KGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uZXRjTm9kZVVybCArICcvYXBpL2V0aC1ycGMnKVxuICAgICAgLnNlbmQocXVlcnkpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhY2ggZXRjLm5ldHdvcmsnKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keS5zdGF0dXMgPT09ICcwJyAmJiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UgPT09ICdOT1RPSycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXRjLm5ldHdvcmsgcmF0ZSBsaW1pdCByZWFjaGVkJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgcmVjb3ZlcnkgcGFyYW1zXG4gICAqIEBwYXJhbSB7UmVjb3Zlck9wdGlvbnN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHZhbGlkYXRlUmVjb3ZlcnlQYXJhbXMocGFyYW1zOiBSZWNvdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy51c2VyS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuYmFja3VwS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKSAmJiAhcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgneHB1YicpICYmICFwYXJhbXMuaXNUc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MpIHx8ICF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy53YWxsZXRDb250cmFjdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgd2FsbGV0Q29udHJhY3RBZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8ICF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyBwdWJsaWMgYmxvY2sgZXhwbG9yZXIgdG8gZ2V0IHRoZSBuZXh0IEVUSExpa2UgY29pbidzIG5vbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBnaXZlbiBFVEggYWRkcmVzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgYXN5bmMgZ2V0QWRkcmVzc05vbmNlKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgLy8gR2V0IG5vbmNlIGZvciBiYWNrdXAga2V5IChzaG91bGQgYmUgMClcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoe1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBtZXRob2Q6ICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCcsXG4gICAgICBwYXJhbXM6IFthZGRyZXNzLCAnbGF0ZXN0J10sXG4gICAgICBpZDogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdCB8fCBpc05hTihyZXN1bHQucmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBuZXh0IG5vbmNlIGZyb20gZXRjLm5ldHdvcmssIGdvdDogJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgIH1cbiAgICBjb25zdCBub25jZUhleCA9IHJlc3VsdC5yZXN1bHQ7XG4gICAgcmV0dXJuIG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTihub25jZUhleC5zbGljZSgyKSwgMTYpLnRvTnVtYmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyBldGMubmV0d29yayBmb3IgdGhlIGJhbGFuY2Ugb2YgYW4gYWRkcmVzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIHRoZSBFVEMgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCaWdOdW1iZXI+fSBhZGRyZXNzIGJhbGFuY2VcbiAgICovXG4gIGFzeW5jIHF1ZXJ5QWRkcmVzc0JhbGFuY2UoYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxCTj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgIG1ldGhvZDogJ2V0aF9nZXRCYWxhbmNlJyxcbiAgICAgIHBhcmFtczogW2FkZHJlc3MsICdsYXRlc3QnXSxcbiAgICAgIGlkOiAxLFxuICAgIH0pO1xuICAgIC8vIHRocm93IGlmIHRoZSByZXN1bHQgZG9lcyBub3QgZXhpc3Qgb3IgdGhlIHJlc3VsdCBpcyBub3QgYSB2YWxpZCBudW1iZXJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LnJlc3VsdCB8fCBpc05hTihyZXN1bHQucmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3Qgb2J0YWluIGFkZHJlc3MgYmFsYW5jZSBmb3IgJHthZGRyZXNzfSBmcm9tIGV0Yy5uZXR3b3JrLCBnb3Q6ICR7cmVzdWx0LnJlc3VsdH1gKTtcbiAgICB9XG4gICAgY29uc3QgbmF0aXZlQmFsYW5jZUhleCA9IHJlc3VsdC5yZXN1bHQ7XG4gICAgcmV0dXJuIG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTihuYXRpdmVCYWxhbmNlSGV4LnNsaWNlKDIpLCAxNik7XG4gIH1cbiAgLyoqXG4gICAqIFF1ZXJpZXMgdGhlIGNvbnRyYWN0ICh2aWEgZXhwbG9yZXIgQVBJKSBmb3IgdGhlIG5leHQgc2VxdWVuY2UgSURcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBhZGRyZXNzIG9mIHRoZSBjb250cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxOdW1iZXI+fSBzZXF1ZW5jZSBJRFxuICAgKi9cbiAgYXN5bmMgcXVlcnlTZXF1ZW5jZUlkKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgLy8gR2V0IHNlcXVlbmNlIElEIHVzaW5nIGNvbnRyYWN0IGNhbGxcbiAgICBjb25zdCBzZXF1ZW5jZUlkTWV0aG9kU2lnbmF0dXJlID0gb3B0aW9uYWxEZXBzLmV0aEFiaS5tZXRob2RJRCgnZ2V0TmV4dFNlcXVlbmNlSWQnLCBbXSk7XG4gICAgY29uc3Qgc2VxdWVuY2VJZEFyZ3MgPSBvcHRpb25hbERlcHMuZXRoQWJpLnJhd0VuY29kZShbXSwgW10pO1xuICAgIGNvbnN0IHNlcXVlbmNlSWREYXRhID0gQnVmZmVyLmNvbmNhdChbc2VxdWVuY2VJZE1ldGhvZFNpZ25hdHVyZSwgc2VxdWVuY2VJZEFyZ3NdKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc2VxdWVuY2VJZERhdGFIZXggPSBvcHRpb25hbERlcHMuZXRoVXRpbC5hZGRIZXhQcmVmaXgoc2VxdWVuY2VJZERhdGEpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICBqc29ucnBjOiAnMi4wJyxcbiAgICAgIG1ldGhvZDogJ2V0aF9jYWxsJyxcbiAgICAgIHBhcmFtczogW3sgdG86IGFkZHJlc3MsIGRhdGE6IHNlcXVlbmNlSWREYXRhSGV4IH0sICdsYXRlc3QnXSxcbiAgICAgIGlkOiAxLFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQucmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBvYnRhaW4gc2VxdWVuY2UgSUQgZnJvbSBldGMubmV0d29yaywgZ290OiAnICsgcmVzdWx0LnJlc3VsdCk7XG4gICAgfVxuICAgIGNvbnN0IHNlcXVlbmNlSWRIZXggPSByZXN1bHQucmVzdWx0O1xuICAgIHJldHVybiBuZXcgb3B0aW9uYWxEZXBzLmV0aFV0aWwuQk4oc2VxdWVuY2VJZEhleC5zbGljZSgyKSwgMTYpLnRvTnVtYmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgZ2FzIHByaWNlIHBhc3NlZCBpbiBieSB1c2VyIGFyZSB3aXRoaW4gb3VyIG1heCBhbmQgbWluIGJvdW5kc1xuICAgKiBJZiB0aGV5IGFyZSBub3Qgc2V0LCBzZXQgdGhlbSB0byB0aGUgZGVmYXVsdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHVzZXJHYXNQcmljZSAtIHVzZXIgZGVmaW5lZCBnYXMgcHJpY2VcbiAgICogQHJldHVybnMge251bWJlcn0gdGhlIGdhcyBwcmljZSB0byB1c2UgZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICovXG4gIHNldEdhc1ByaWNlKHVzZXJHYXNQcmljZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF1c2VyR2FzUHJpY2UpIHtcbiAgICAgIHJldHVybiBldGhHYXNDb25maWdzLmRlZmF1bHRHYXNQcmljZTtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNQcmljZU1heCA9IGV0aEdhc0NvbmZpZ3MubWF4aW11bUdhc1ByaWNlO1xuICAgIGNvbnN0IGdhc1ByaWNlTWluID0gZXRoR2FzQ29uZmlncy5taW5pbXVtR2FzUHJpY2U7XG4gICAgaWYgKHVzZXJHYXNQcmljZSA8IGdhc1ByaWNlTWluIHx8IHVzZXJHYXNQcmljZSA+IGdhc1ByaWNlTWF4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdhcyBwcmljZSBtdXN0IGJlIGJldHdlZW4gJHtnYXNQcmljZU1pbn0gYW5kICR7Z2FzUHJpY2VNYXh9YCk7XG4gICAgfVxuICAgIHJldHVybiB1c2VyR2FzUHJpY2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2FzIGxpbWl0IHBhc3NlZCBpbiBieSB1c2VyIGFyZSB3aXRoaW4gb3VyIG1heCBhbmQgbWluIGJvdW5kc1xuICAgKiBJZiB0aGV5IGFyZSBub3Qgc2V0LCBzZXQgdGhlbSB0byB0aGUgZGVmYXVsdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHVzZXJHYXNMaW1pdCB1c2VyIGRlZmluZWQgZ2FzIGxpbWl0XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBnYXMgbGltaXQgdG8gdXNlIGZvciB0aGlzIHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXRHYXNMaW1pdCh1c2VyR2FzTGltaXQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdXNlckdhc0xpbWl0KSB7XG4gICAgICByZXR1cm4gZXRoR2FzQ29uZmlncy5kZWZhdWx0R2FzTGltaXQ7XG4gICAgfVxuICAgIGNvbnN0IGdhc0xpbWl0TWF4ID0gZXRoR2FzQ29uZmlncy5tYXhpbXVtR2FzTGltaXQ7XG4gICAgY29uc3QgZ2FzTGltaXRNaW4gPSBldGhHYXNDb25maWdzLm1pbmltdW1HYXNMaW1pdDtcbiAgICBpZiAodXNlckdhc0xpbWl0IDwgZ2FzTGltaXRNaW4gfHwgdXNlckdhc0xpbWl0ID4gZ2FzTGltaXRNYXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR2FzIGxpbWl0IG11c3QgYmUgYmV0d2VlbiAke2dhc0xpbWl0TWlufSBhbmQgJHtnYXNMaW1pdE1heH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHVzZXJHYXNMaW1pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY2lwaWVudFtdfSByZWNpcGllbnRzIC0gdGhlIHJlY2lwaWVudHMgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleHBpcmVUaW1lIC0gdGhlIGV4cGlyZSB0aW1lIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gY29udHJhY3RTZXF1ZW5jZUlkIC0gdGhlIGNvbnRyYWN0IHNlcXVlbmNlIGlkIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0T3BlcmF0aW9uU2hhM0ZvckV4ZWN1dGVBbmRDb25maXJtKFxuICAgIHJlY2lwaWVudHM6IFJlY2lwaWVudFtdLFxuICAgIGV4cGlyZVRpbWU6IG51bWJlcixcbiAgICBjb250cmFjdFNlcXVlbmNlSWQ6IG51bWJlclxuICApOiBzdHJpbmcge1xuICAgIGlmICghcmVjaXBpZW50cyB8fCAhQXJyYXkuaXNBcnJheShyZWNpcGllbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RpbmcgYXJyYXkgb2YgcmVjaXBpZW50cycpO1xuICAgIH1cblxuICAgIC8vIFJpZ2h0IG5vdyB3ZSBvbmx5IHN1cHBvcnQgMSByZWNpcGllbnRcbiAgICBpZiAocmVjaXBpZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbXVzdCBzZW5kIHRvIGV4YWN0bHkgMSByZWNpcGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNOdW1iZXIoZXhwaXJlVGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwaXJlVGltZSBtdXN0IGJlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGVwb2NoJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzTnVtYmVyKGNvbnRyYWN0U2VxdWVuY2VJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29udHJhY3RTZXF1ZW5jZUlkIG11c3QgYmUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaW5wdXRzXG4gICAgcmVjaXBpZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChyZWNpcGllbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIV8uaXNTdHJpbmcocmVjaXBpZW50LmFkZHJlc3MpIHx8XG4gICAgICAgICFvcHRpb25hbERlcHMuZXRoVXRpbC5pc1ZhbGlkQWRkcmVzcyhvcHRpb25hbERlcHMuZXRoVXRpbC5hZGRIZXhQcmVmaXgocmVjaXBpZW50LmFkZHJlc3MpKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhZGRyZXNzOiAnICsgcmVjaXBpZW50LmFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYW1vdW50OiBCaWdOdW1iZXI7XG4gICAgICB0cnkge1xuICAgICAgICBhbW91bnQgPSBuZXcgQmlnTnVtYmVyKHJlY2lwaWVudC5hbW91bnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYW1vdW50IGZvcjogJyArIHJlY2lwaWVudC5hZGRyZXNzICsgJyAtIHNob3VsZCBiZSBudW1lcmljJyk7XG4gICAgICB9XG5cbiAgICAgIHJlY2lwaWVudC5hbW91bnQgPSBhbW91bnQudG9GaXhlZCgwKTtcblxuICAgICAgaWYgKHJlY2lwaWVudC5kYXRhICYmICFfLmlzU3RyaW5nKHJlY2lwaWVudC5kYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgZm9yIHJlY2lwaWVudCAnICsgcmVjaXBpZW50LmFkZHJlc3MgKyAnIC0gc2hvdWxkIGJlIG9mIHR5cGUgaGV4IHN0cmluZycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICByZXR1cm4gb3B0aW9uYWxEZXBzLmV0aFV0aWwuYnVmZmVyVG9IZXgoXG4gICAgICBvcHRpb25hbERlcHMuZXRoQWJpLnNvbGlkaXR5U0hBMyguLi50aGlzLmdldE9wZXJhdGlvbihyZWNpcGllbnQsIGV4cGlyZVRpbWUsIGNvbnRyYWN0U2VxdWVuY2VJZCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNmZXIgb3BlcmF0aW9uIGZvciBjb2luXG4gICAqIEBwYXJhbSB7UmVjaXBpZW50fSByZWNpcGllbnQgLSByZWNpcGllbnQgaW5mb1xuICAgKiBAcGFyYW0ge251bWJlcn0gZXhwaXJlVGltZSAtIGV4cGlyeSB0aW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb250cmFjdFNlcXVlbmNlSWQgLSBzZXF1ZW5jZSBpZFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IG9wZXJhdGlvbiBhcnJheVxuICAgKi9cbiAgZ2V0T3BlcmF0aW9uKHJlY2lwaWVudDogUmVjaXBpZW50LCBleHBpcmVUaW1lOiBudW1iZXIsIGNvbnRyYWN0U2VxdWVuY2VJZDogbnVtYmVyKTogKHN0cmluZyB8IEJ1ZmZlcilbXVtdIHtcbiAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5nZXROZXR3b3JrKCkgYXMgRXRoTGlrZU5ldHdvcms7XG4gICAgcmV0dXJuIFtcbiAgICAgIFsnc3RyaW5nJywgJ2FkZHJlc3MnLCAndWludCcsICdieXRlcycsICd1aW50JywgJ3VpbnQnXSxcbiAgICAgIFtcbiAgICAgICAgbmV0d29yay5uYXRpdmVDb2luT3BlcmF0aW9uSGFzaFByZWZpeCxcbiAgICAgICAgbmV3IG9wdGlvbmFsRGVwcy5ldGhVdGlsLkJOKG9wdGlvbmFsRGVwcy5ldGhVdGlsLnN0cmlwSGV4UHJlZml4KHJlY2lwaWVudC5hZGRyZXNzKSwgMTYpLFxuICAgICAgICByZWNpcGllbnQuYW1vdW50LFxuICAgICAgICBCdWZmZXIuZnJvbShvcHRpb25hbERlcHMuZXRoVXRpbC5zdHJpcEhleFByZWZpeChvcHRpb25hbERlcHMuZXRoVXRpbC5wYWRUb0V2ZW4ocmVjaXBpZW50LmRhdGEgfHwgJycpKSwgJ2hleCcpLFxuICAgICAgICBleHBpcmVUaW1lLFxuICAgICAgICBjb250cmFjdFNlcXVlbmNlSWQsXG4gICAgICBdLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJldHVybiB0aGUgY29pbidzIG5ldHdvcmsgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtFdGhMaWtlTmV0d29yayB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGdldE5ldHdvcmsoKTogRXRoTGlrZU5ldHdvcmsgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YXRpY3NDb2luPy5uZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1NpZ25UcmFuc2FjdGlvbk9wdGlvbnN9IHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAvLyBOb3JtYWxseSB0aGUgU0RLIHByb3ZpZGVzIHRoZSBmaXJzdCBzaWduYXR1cmUgZm9yIGFuIEV0aExpa2UgdHgsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgcHJvdmlkZXMgdGhlIHNlY29uZCBhbmQgZmluYWwgb25lLlxuICAgIGlmIChwYXJhbXMuaXNMYXN0U2lnbmF0dXJlKSB7XG4gICAgICAvLyBJbiB0aGlzIGNhc2Ugd2hlbiB3ZSdyZSBkb2luZyB0aGUgc2Vjb25kIChmaW5hbCkgc2lnbmF0dXJlLCB0aGUgbG9naWMgaXMgZGlmZmVyZW50LlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnbkZpbmFsKHBhcmFtcyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIHR4QnVpbGRlclxuICAgICAgLnRyYW5zZmVyKClcbiAgICAgIC5jb2luKHRoaXMuc3RhdGljc0NvaW4/Lm5hbWUgYXMgc3RyaW5nKVxuICAgICAgLmtleShuZXcgS2V5UGFpckxpYih7IHBydjogcGFyYW1zLnBydiB9KS5nZXRLZXlzKCkucHJ2ISk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoeyBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcywgYW1vdW50OiBvdXRwdXQudmFsdWUgfSkpO1xuXG4gICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICBlaXAxNTU5OiBwYXJhbXMudHhQcmVidWlsZC5laXAxNTU5LFxuICAgICAgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzLFxuICAgICAgZXhwaXJhdGlvbjogcGFyYW1zLnR4UHJlYnVpbGQuZXhwaXJlVGltZSxcbiAgICAgIGhvcFRyYW5zYWN0aW9uOiBwYXJhbXMudHhQcmVidWlsZC5ob3BUcmFuc2FjdGlvbixcbiAgICAgIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQ6IHBhcmFtcy5jdXN0b2RpYW5UcmFuc2FjdGlvbklkLFxuICAgICAgZXhwaXJlVGltZTogcGFyYW1zLmV4cGlyZVRpbWUsXG4gICAgICBjb250cmFjdFNlcXVlbmNlSWQ6IHBhcmFtcy50eFByZWJ1aWxkLm5leHRDb250cmFjdFNlcXVlbmNlSWQgYXMgbnVtYmVyLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHR4UGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaWduVHJhbnNhY3Rpb24gZm9yIHRoZSByYXJlIGNhc2UgdGhhdCBTREsgaXMgZG9pbmcgdGhlIHNlY29uZCBzaWduYXR1cmVcbiAgICogTm90ZTogd2UgYXJlIGV4cGVjdGluZyB0aGlzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBvZmZsaW5lIHZhdWx0XG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZFxuICAgKiBAcGFyYW0gcGFyYW1zLnBydlxuICAgKiBAcmV0dXJucyB7e3R4SGV4OiBzdHJpbmd9fVxuICAgKi9cbiAgYXN5bmMgc2lnbkZpbmFsKHBhcmFtcykge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpckxpYih7IHBydjogcGFyYW1zLnBydiB9KTtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHNpZ25pbmdLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICB0cnkge1xuICAgICAgdHhCdWlsZGVyLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQuaGFsZlNpZ25lZC50eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBzaWduaW5nS2V5IH0pO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -14,4 +18,4 @@ __exportStar(require("./lib"), exports);
|
|
|
14
18
|
__exportStar(require("./etc"), exports);
|
|
15
19
|
__exportStar(require("./tetc"), exports);
|
|
16
20
|
__exportStar(require("./register"), exports);
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix3Q0FBc0I7QUFDdEIseUNBQXVCO0FBQ3ZCLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliJztcbmV4cG9ydCAqIGZyb20gJy4vZXRjJztcbmV4cG9ydCAqIGZyb20gJy4vdGV0Yyc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbiJdfQ==
|
package/dist/src/lib/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -30,4 +34,4 @@ var transferBuilder_1 = require("./transferBuilder");
|
|
|
30
34
|
Object.defineProperty(exports, "TransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.TransferBuilder; } });
|
|
31
35
|
const Utils = __importStar(require("./utils"));
|
|
32
36
|
exports.Utils = Utils;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQTJFO0FBQWxFLHlHQUFBLFNBQVMsT0FBQTtBQUFFLHVHQUFBLE9BQU8sT0FBQTtBQUFFLDJHQUFBLFdBQVcsT0FBQTtBQUN4QywyREFBMEQ7QUFBakQsd0hBQUEsa0JBQWtCLE9BQUE7QUFDM0IscURBQW9EO0FBQTNDLGtIQUFBLGVBQWUsT0FBQTtBQUV4QiwrQ0FBaUM7QUFFeEIsc0JBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBJbnRlcmZhY2UsIEtleVBhaXIsIFRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvaW4tZXRoJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcblxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB7IFV0aWxzIH07XG4iXX0=
|
|
@@ -13,7 +13,7 @@ const _1 = require("./");
|
|
|
13
13
|
class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
|
|
14
14
|
constructor(_coinConfig) {
|
|
15
15
|
super(_coinConfig);
|
|
16
|
-
this._common = utils_1.getCommon(this._coinConfig.network.type);
|
|
16
|
+
this._common = (0, utils_1.getCommon)(this._coinConfig.network.type);
|
|
17
17
|
this.transaction = new _1.Transaction(this._coinConfig, this._common);
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
@@ -41,4 +41,4 @@ class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
exports.TransactionBuilder = TransactionBuilder;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0VBQXlDO0FBQ3pDLDJEQUFnSDtBQUNoSCxtREFBOEU7QUFDOUUsbUNBQTBEO0FBQzFELHVEQUFvRDtBQUNwRCx5QkFBaUM7QUFFakMsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBcUI7SUFHM0QsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGlCQUFTLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGNBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxlQUFlLENBQUMsU0FBbUI7UUFDM0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixNQUFNLHVCQUF1QixHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUFDLHNDQUF1QixFQUFFLE1BQU0sQ0FBQzthQUNuRixRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ2YsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQixPQUFPLDRCQUFvQixHQUFHLHVCQUF1QixDQUFDO0lBQ3hELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsUUFBUSxDQUFDLElBQWE7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLDBCQUFlLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBakNELGdEQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgYXMgRXRoVHJhbnNhY3Rpb25CdWlsZGVyLCB3YWxsZXRTaW1wbGVDb25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb2luLWV0aCc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldENvbW1vbiwgd2FsbGV0U2ltcGxlQnl0ZUNvZGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi8nO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgRXRoVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2ZlcjogVHJhbnNmZXJCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9jb21tb24gPSBnZXRDb21tb24odGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdGhpcy5fY29tbW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzbWFydCBjb250cmFjdCBlbmNvZGVkIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYWRkcmVzc2VzIC0gdGhlIGNvbnRyYWN0IHNpZ25lcnNcbiAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgc21hcnQgY29udHJhY3QgZW5jb2RlZCBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Q29udHJhY3REYXRhKGFkZHJlc3Nlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmFtcyA9IFthZGRyZXNzZXNdO1xuICAgIGNvbnN0IHJlc3VsdEVuY29kZWRQYXJhbWV0ZXJzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHdhbGxldFNpbXBsZUNvbnN0cnVjdG9yLCBwYXJhbXMpXG4gICAgICAudG9TdHJpbmcoJ2hleCcpXG4gICAgICAucmVwbGFjZSgnMHgnLCAnJyk7XG4gICAgcmV0dXJuIHdhbGxldFNpbXBsZUJ5dGVDb2RlICsgcmVzdWx0RW5jb2RlZFBhcmFtZXRlcnM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdHJhbnNmZXIoZGF0YT86IHN0cmluZyk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2ZlcnMgY2FuIG9ubHkgYmUgc2V0IGZvciBzZW5kIHRyYW5zYWN0aW9ucycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3RyYW5zZmVyKSB7XG4gICAgICB0aGlzLl90cmFuc2ZlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90cmFuc2ZlcjtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-etc",
|
|
3
|
-
"version": "1.2.3-alpha.
|
|
3
|
+
"version": "1.2.3-alpha.230",
|
|
4
4
|
"description": "BitGo SDK coin library for Ethereum classic",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
21
|
+
"node": ">=18 <21"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
@@ -40,16 +40,21 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo-beta/abstract-eth": "1.2.3-alpha.
|
|
44
|
-
"@bitgo-beta/sdk-coin-eth": "2.4.1-alpha.
|
|
45
|
-
"@bitgo-beta/sdk-core": "2.4.1-alpha.
|
|
46
|
-
"@bitgo-beta/statics": "10.0.1-alpha.
|
|
47
|
-
"@
|
|
48
|
-
"ethereumjs
|
|
43
|
+
"@bitgo-beta/abstract-eth": "1.2.3-alpha.232",
|
|
44
|
+
"@bitgo-beta/sdk-coin-eth": "2.4.1-alpha.232",
|
|
45
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.232",
|
|
46
|
+
"@bitgo-beta/statics": "10.0.1-alpha.232",
|
|
47
|
+
"@bitgo-beta/utxo-lib": "4.0.1-alpha.233",
|
|
48
|
+
"@ethereumjs/common": "^2.6.5",
|
|
49
|
+
"bignumber.js": "^9.1.1",
|
|
50
|
+
"ethereumjs-abi": "^0.6.5",
|
|
51
|
+
"ethereumjs-util": "7.1.5",
|
|
52
|
+
"lodash": "^4.17.14",
|
|
53
|
+
"superagent": "^9.0.1"
|
|
49
54
|
},
|
|
50
55
|
"devDependencies": {
|
|
51
|
-
"@bitgo-beta/sdk-api": "1.6.1-alpha.
|
|
52
|
-
"@bitgo-beta/sdk-test": "^
|
|
56
|
+
"@bitgo-beta/sdk-api": "1.6.1-alpha.232",
|
|
57
|
+
"@bitgo-beta/sdk-test": "^8.0.51"
|
|
53
58
|
},
|
|
54
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "4c9ae8f65b7a618308dd05e79b5e2d0067c66498"
|
|
55
60
|
}
|