@aztec/bb.js 2.1.0-rc.9 → 2.1.1-rc.1
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/dest/browser/barretenberg/index.d.ts +8 -1
- package/dest/browser/barretenberg/index.d.ts.map +1 -1
- package/dest/browser/barretenberg/index.js +18 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
- package/dest/browser/bbapi_exception.d.ts +7 -0
- package/dest/browser/bbapi_exception.d.ts.map +1 -0
- package/dest/browser/bbapi_exception.js +14 -0
- package/dest/browser/cbind/generate.js +93 -1
- package/dest/browser/cbind/generated/api_types.d.ts +242 -0
- package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/browser/cbind/generated/api_types.js +319 -1
- package/dest/browser/cbind/generated/async.d.ts +7 -1
- package/dest/browser/cbind/generated/async.d.ts.map +1 -1
- package/dest/browser/cbind/generated/async.js +135 -17
- package/dest/browser/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/browser/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/browser/cbind/generated/curve_constants.js +45 -0
- package/dest/browser/cbind/generated/native.d.ts +7 -1
- package/dest/browser/cbind/generated/native.d.ts.map +1 -1
- package/dest/browser/cbind/generated/native.js +56 -2
- package/dest/browser/cbind/generated/sync.d.ts +7 -1
- package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
- package/dest/browser/cbind/generated/sync.js +129 -17
- package/dest/browser/cbind/schema_compiler.d.ts.map +1 -1
- package/dest/browser/cbind/schema_compiler.js +31 -7
- package/dest/browser/index.d.ts +4 -1
- package/dest/browser/index.d.ts.map +1 -1
- package/dest/browser/index.js +5 -2
- package/dest/node/barretenberg/index.d.ts +8 -1
- package/dest/node/barretenberg/index.d.ts.map +1 -1
- package/dest/node/barretenberg/index.js +18 -1
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/bbapi_exception.d.ts +7 -0
- package/dest/node/bbapi_exception.d.ts.map +1 -0
- package/dest/node/bbapi_exception.js +14 -0
- package/dest/node/cbind/generate.js +93 -1
- package/dest/node/cbind/generated/api_types.d.ts +242 -0
- package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/node/cbind/generated/api_types.js +319 -1
- package/dest/node/cbind/generated/async.d.ts +7 -1
- package/dest/node/cbind/generated/async.d.ts.map +1 -1
- package/dest/node/cbind/generated/async.js +135 -17
- package/dest/node/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/node/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/node/cbind/generated/curve_constants.js +45 -0
- package/dest/node/cbind/generated/native.d.ts +7 -1
- package/dest/node/cbind/generated/native.d.ts.map +1 -1
- package/dest/node/cbind/generated/native.js +56 -2
- package/dest/node/cbind/generated/sync.d.ts +7 -1
- package/dest/node/cbind/generated/sync.d.ts.map +1 -1
- package/dest/node/cbind/generated/sync.js +129 -17
- package/dest/node/cbind/schema_compiler.d.ts.map +1 -1
- package/dest/node/cbind/schema_compiler.js +31 -7
- package/dest/node/index.d.ts +4 -1
- package/dest/node/index.d.ts.map +1 -1
- package/dest/node/index.js +5 -2
- package/dest/node/main.d.ts +0 -10
- package/dest/node/main.d.ts.map +1 -1
- package/dest/node/main.js +469 -457
- package/dest/node-cjs/barretenberg/index.d.ts +8 -1
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/index.js +18 -1
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/bbapi_exception.d.ts +7 -0
- package/dest/node-cjs/bbapi_exception.d.ts.map +1 -0
- package/dest/node-cjs/bbapi_exception.js +18 -0
- package/dest/node-cjs/cbind/generate.js +93 -1
- package/dest/node-cjs/cbind/generated/api_types.d.ts +242 -0
- package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/api_types.js +349 -1
- package/dest/node-cjs/cbind/generated/async.d.ts +7 -1
- package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/async.js +134 -16
- package/dest/node-cjs/cbind/generated/curve_constants.d.ts +45 -0
- package/dest/node-cjs/cbind/generated/curve_constants.d.ts.map +1 -0
- package/dest/node-cjs/cbind/generated/curve_constants.js +48 -0
- package/dest/node-cjs/cbind/generated/native.d.ts +7 -1
- package/dest/node-cjs/cbind/generated/native.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/native.js +55 -1
- package/dest/node-cjs/cbind/generated/sync.d.ts +7 -1
- package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
- package/dest/node-cjs/cbind/generated/sync.js +128 -16
- package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -1
- package/dest/node-cjs/cbind/schema_compiler.js +31 -7
- package/dest/node-cjs/index.d.ts +4 -1
- package/dest/node-cjs/index.d.ts.map +1 -1
- package/dest/node-cjs/index.js +24 -7
- package/dest/node-cjs/main.d.ts +0 -10
- package/dest/node-cjs/main.d.ts.map +1 -1
- package/dest/node-cjs/main.js +469 -466
- package/package.json +1 -1
- package/src/barretenberg/index.ts +20 -1
- package/src/bbapi_exception.ts +13 -0
- package/src/cbind/generate.ts +99 -0
- package/src/cbind/schema_compiler.ts +33 -6
- package/src/index.ts +26 -1
- package/src/main.ts +533 -532
package/dest/node-cjs/main.js
CHANGED
|
@@ -1,470 +1,473 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.proveAndVerifyUltraHonk = proveAndVerifyUltraHonk;
|
|
5
|
-
exports.proveAndVerifyMegaHonk = proveAndVerifyMegaHonk;
|
|
6
|
-
exports.gateCountUltra = gateCountUltra;
|
|
7
|
-
exports.contractUltraHonk = contractUltraHonk;
|
|
8
|
-
exports.proveUltraHonk = proveUltraHonk;
|
|
9
|
-
exports.writeVkUltraHonk = writeVkUltraHonk;
|
|
10
|
-
exports.verifyUltraHonk = verifyUltraHonk;
|
|
11
|
-
exports.proofAsFieldsUltraHonk = proofAsFieldsUltraHonk;
|
|
12
|
-
exports.vkAsFieldsUltraHonk = vkAsFieldsUltraHonk;
|
|
13
4
|
require("source-map-support/register.js");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
async function gateCountUltra(bytecodePath, recursive, honkRecursion) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
program
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
program
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
});
|
|
291
|
-
program
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
program
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
program
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
program
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
});
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
})
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
});
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
})
|
|
469
|
-
|
|
470
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQStFQSwwREFhQztBQUVELHdEQWFDO0FBRUQsd0NBZUM7QUFFRCw4Q0FrQkM7QUFFRCx3Q0FtQ0M7QUFFRCw0Q0FnQ0M7QUFFRCwwQ0EyQkM7QUFFRCx3REFpQkM7QUFFRCxrREFrQkM7QUExUkQsMENBQXdDO0FBQ3hDLHlDQUEwRDtBQUMxRCw2Q0FBK0Q7QUFDL0QsMkJBQWlEO0FBQ2pELCtCQUFrQztBQUNsQyx5Q0FBb0M7QUFHcEMsSUFBSSxLQUE0QixDQUFDO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBcUIsSUFBSSxTQUFTLENBQUM7QUFFaEUsU0FBUyxXQUFXLENBQUMsWUFBb0I7SUFDdkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBQSxpQkFBWSxFQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLElBQUEsaUJBQVUsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNoRixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLElBQUEsaUJBQVksRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFBLGlCQUFVLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsT0FBTyxVQUFVLENBQUMsSUFB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
|
|
5
|
+
// NOTE(backport) in next we will delete this entirely
|
|
6
|
+
// import { Crs, Barretenberg, RawBuffer } from './index.js';
|
|
7
|
+
// import { createDebugLogger, initLogger } from './log/index.js';
|
|
8
|
+
// import { readFileSync, writeFileSync } from 'fs';
|
|
9
|
+
// import { gunzipSync } from 'zlib';
|
|
10
|
+
// import { Command } from 'commander';
|
|
11
|
+
// import { UltraHonkBackendOptions } from './barretenberg/backend.js';
|
|
12
|
+
// let debug: (msg: string) => void;
|
|
13
|
+
// const threads = +process.env.HARDWARE_CONCURRENCY! || undefined;
|
|
14
|
+
// function getBytecode(bytecodePath: string): Uint8Array {
|
|
15
|
+
// const extension = bytecodePath.substring(bytecodePath.lastIndexOf('.') + 1);
|
|
16
|
+
// if (extension == 'json') {
|
|
17
|
+
// const encodedCircuit = JSON.parse(readFileSync(bytecodePath, 'utf8'));
|
|
18
|
+
// const decompressed = gunzipSync(Buffer.from(encodedCircuit.bytecode, 'base64'));
|
|
19
|
+
// return Uint8Array.from(decompressed);
|
|
20
|
+
// }
|
|
21
|
+
// const encodedCircuit = readFileSync(bytecodePath);
|
|
22
|
+
// const decompressed = gunzipSync(encodedCircuit);
|
|
23
|
+
// return Uint8Array.from(decompressed);
|
|
24
|
+
// }
|
|
25
|
+
// // TODO(https://github.com/AztecProtocol/barretenberg/issues/1126): split this into separate Plonk and Honk functions as their gate count differs
|
|
26
|
+
// async function getGatesUltra(bytecodePath: string, recursive: boolean, honkRecursion: boolean, api: Barretenberg) {
|
|
27
|
+
// const { total } = await computeCircuitSize(bytecodePath, recursive, honkRecursion, api);
|
|
28
|
+
// return total;
|
|
29
|
+
// }
|
|
30
|
+
// function getWitness(witnessPath: string): Uint8Array {
|
|
31
|
+
// const data = readFileSync(witnessPath);
|
|
32
|
+
// const decompressed = gunzipSync(data);
|
|
33
|
+
// return Uint8Array.from(decompressed);
|
|
34
|
+
// }
|
|
35
|
+
// async function computeCircuitSize(bytecodePath: string, recursive: boolean, honkRecursion: boolean, api: Barretenberg) {
|
|
36
|
+
// debug(`Computing circuit size for ${bytecodePath}`);
|
|
37
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
38
|
+
// const [total, subgroup] = await api.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
|
|
39
|
+
// return { total, subgroup };
|
|
40
|
+
// }
|
|
41
|
+
// async function initUltraHonk(bytecodePath: string, crsPath: string) {
|
|
42
|
+
// const api = await Barretenberg.new({
|
|
43
|
+
// threads,
|
|
44
|
+
// });
|
|
45
|
+
// // TODO(https://github.com/AztecProtocol/barretenberg/issues/1248): Get rid of this call to avoid building the circuit twice.
|
|
46
|
+
// // TODO(https://github.com/AztecProtocol/barretenberg/issues/1126): use specific UltraHonk function
|
|
47
|
+
// // recursive here is useless for UH, as it does not affect anything
|
|
48
|
+
// const circuitSize = await getGatesUltra(bytecodePath, /*recursive=*/ false, /*honkRecursion=*/ true, api);
|
|
49
|
+
// // TODO(https://github.com/AztecProtocol/barretenberg/issues/811): remove subgroupSizeOverride hack for goblin
|
|
50
|
+
// const dyadicCircuitSize = Math.pow(2, Math.ceil(Math.log2(circuitSize)));
|
|
51
|
+
// debug(`Loading CRS for UltraHonk with circuit-size=${circuitSize} dyadic-circuit-size=${dyadicCircuitSize}`);
|
|
52
|
+
// const crs = await Crs.new(dyadicCircuitSize + 1, crsPath);
|
|
53
|
+
// // Load CRS into wasm global CRS state.
|
|
54
|
+
// // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
|
|
55
|
+
// await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
|
|
56
|
+
// return { api, circuitSize, dyadicCircuitSize };
|
|
57
|
+
// }
|
|
58
|
+
// async function initLite(crsPath: string) {
|
|
59
|
+
// const api = await Barretenberg.new({ threads: 1 });
|
|
60
|
+
// // Plus 1 needed! (Move +1 into Crs?)
|
|
61
|
+
// const crs = await Crs.new(1, crsPath);
|
|
62
|
+
// // Load CRS into wasm global CRS state.
|
|
63
|
+
// await api.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));
|
|
64
|
+
// return { api };
|
|
65
|
+
// }
|
|
66
|
+
// export async function proveAndVerifyUltraHonk(bytecodePath: string, witnessPath: string, crsPath: string) {
|
|
67
|
+
// /* eslint-disable camelcase */
|
|
68
|
+
// const { api } = await initUltraHonk(bytecodePath, crsPath);
|
|
69
|
+
// try {
|
|
70
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
71
|
+
// const witness = getWitness(witnessPath);
|
|
72
|
+
// const verified = await api.acirProveAndVerifyUltraHonk(bytecode, witness);
|
|
73
|
+
// return verified;
|
|
74
|
+
// } finally {
|
|
75
|
+
// await api.destroy();
|
|
76
|
+
// }
|
|
77
|
+
// /* eslint-enable camelcase */
|
|
78
|
+
// }
|
|
79
|
+
// export async function proveAndVerifyMegaHonk(bytecodePath: string, witnessPath: string, crsPath: string) {
|
|
80
|
+
// /* eslint-disable camelcase */
|
|
81
|
+
// const { api } = await initUltraHonk(bytecodePath, crsPath);
|
|
82
|
+
// try {
|
|
83
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
84
|
+
// const witness = getWitness(witnessPath);
|
|
85
|
+
// const verified = await api.acirProveAndVerifyMegaHonk(bytecode, witness);
|
|
86
|
+
// return verified;
|
|
87
|
+
// } finally {
|
|
88
|
+
// await api.destroy();
|
|
89
|
+
// }
|
|
90
|
+
// /* eslint-enable camelcase */
|
|
91
|
+
// }
|
|
92
|
+
// export async function gateCountUltra(bytecodePath: string, recursive: boolean, honkRecursion: boolean) {
|
|
93
|
+
// const api = await Barretenberg.new({ threads: 1 });
|
|
94
|
+
// try {
|
|
95
|
+
// const numberOfGates = await getGatesUltra(bytecodePath, recursive, honkRecursion, api);
|
|
96
|
+
// debug(`Number of gates: ${numberOfGates}`);
|
|
97
|
+
// // Create an 8-byte buffer and write the number into it.
|
|
98
|
+
// // Writing number directly to stdout will result in a variable sized
|
|
99
|
+
// // input depending on the size.
|
|
100
|
+
// const buffer = Buffer.alloc(8);
|
|
101
|
+
// buffer.writeBigInt64LE(BigInt(numberOfGates));
|
|
102
|
+
// process.stdout.write(Uint8Array.from(buffer));
|
|
103
|
+
// } finally {
|
|
104
|
+
// await api.destroy();
|
|
105
|
+
// }
|
|
106
|
+
// }
|
|
107
|
+
// export async function contractUltraHonk(bytecodePath: string, vkPath: string, crsPath: string, outputPath: string) {
|
|
108
|
+
// const { api } = await initUltraHonk(bytecodePath, crsPath);
|
|
109
|
+
// try {
|
|
110
|
+
// debug(`Creating UltraHonk verifier contract bytecode=${bytecodePath} vk=${vkPath}`);
|
|
111
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
112
|
+
// const vk = new RawBuffer(readFileSync(vkPath));
|
|
113
|
+
// const contract = await api.acirHonkSolidityVerifier(bytecode, vk);
|
|
114
|
+
// if (outputPath === '-') {
|
|
115
|
+
// process.stdout.write(contract);
|
|
116
|
+
// debug(`Solidity verifier contract written to stdout`);
|
|
117
|
+
// } else {
|
|
118
|
+
// writeFileSync(outputPath, contract);
|
|
119
|
+
// debug(`Solidity verifier contract written to ${outputPath}`);
|
|
120
|
+
// }
|
|
121
|
+
// } finally {
|
|
122
|
+
// await api.destroy();
|
|
123
|
+
// }
|
|
124
|
+
// }
|
|
125
|
+
// export async function proveUltraHonk(
|
|
126
|
+
// bytecodePath: string,
|
|
127
|
+
// witnessPath: string,
|
|
128
|
+
// crsPath: string,
|
|
129
|
+
// vkPath: string,
|
|
130
|
+
// outputPath: string,
|
|
131
|
+
// options?: UltraHonkBackendOptions,
|
|
132
|
+
// ) {
|
|
133
|
+
// const { api } = await initUltraHonk(bytecodePath, crsPath);
|
|
134
|
+
// try {
|
|
135
|
+
// debug(`Creating UltraHonk proof bytecode=${bytecodePath}`);
|
|
136
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
137
|
+
// const witness = getWitness(witnessPath);
|
|
138
|
+
// const acirProveUltraHonk = options?.keccak
|
|
139
|
+
// ? api.acirProveUltraKeccakHonk.bind(api)
|
|
140
|
+
// : options?.keccakZK
|
|
141
|
+
// ? api.acirProveUltraKeccakZkHonk.bind(api)
|
|
142
|
+
// : options?.starknet
|
|
143
|
+
// ? api.acirProveUltraStarknetHonk.bind(api)
|
|
144
|
+
// : options?.starknetZK
|
|
145
|
+
// ? api.acirProveUltraStarknetZkHonk.bind(api)
|
|
146
|
+
// : api.acirProveUltraZKHonk.bind(api);
|
|
147
|
+
// const proof = await acirProveUltraHonk(bytecode, witness, new RawBuffer(readFileSync(vkPath)));
|
|
148
|
+
// if (outputPath === '-') {
|
|
149
|
+
// process.stdout.write(proof);
|
|
150
|
+
// debug(`Proof written to stdout`);
|
|
151
|
+
// } else {
|
|
152
|
+
// writeFileSync(outputPath, proof);
|
|
153
|
+
// debug(`Proof written to ${outputPath}`);
|
|
154
|
+
// }
|
|
155
|
+
// } finally {
|
|
156
|
+
// await api.destroy();
|
|
157
|
+
// }
|
|
158
|
+
// }
|
|
159
|
+
// export async function writeVkUltraHonk(
|
|
160
|
+
// bytecodePath: string,
|
|
161
|
+
// crsPath: string,
|
|
162
|
+
// outputPath: string,
|
|
163
|
+
// options?: UltraHonkBackendOptions,
|
|
164
|
+
// ) {
|
|
165
|
+
// const { api } = await initUltraHonk(bytecodePath, crsPath);
|
|
166
|
+
// try {
|
|
167
|
+
// const bytecode = getBytecode(bytecodePath);
|
|
168
|
+
// debug(`Initializing UltraHonk verification key bytecode=${bytecodePath}`);
|
|
169
|
+
// const acirWriteVkUltraHonk = options?.keccak
|
|
170
|
+
// ? api.acirWriteVkUltraKeccakHonk.bind(api)
|
|
171
|
+
// : options?.keccakZK
|
|
172
|
+
// ? api.acirWriteVkUltraKeccakZkHonk.bind(api)
|
|
173
|
+
// : options?.starknet
|
|
174
|
+
// ? api.acirWriteVkUltraStarknetHonk.bind(api)
|
|
175
|
+
// : options?.starknetZK
|
|
176
|
+
// ? api.acirWriteVkUltraStarknetZkHonk.bind(api)
|
|
177
|
+
// : api.acirWriteVkUltraHonk.bind(api);
|
|
178
|
+
// const vk = await acirWriteVkUltraHonk(bytecode);
|
|
179
|
+
// if (outputPath === '-') {
|
|
180
|
+
// process.stdout.write(vk);
|
|
181
|
+
// debug(`Verification key written to stdout`);
|
|
182
|
+
// } else {
|
|
183
|
+
// writeFileSync(outputPath, vk);
|
|
184
|
+
// debug(`Verification key written to ${outputPath}`);
|
|
185
|
+
// }
|
|
186
|
+
// } finally {
|
|
187
|
+
// await api.destroy();
|
|
188
|
+
// }
|
|
189
|
+
// }
|
|
190
|
+
// export async function verifyUltraHonk(
|
|
191
|
+
// proofPath: string,
|
|
192
|
+
// vkPath: string,
|
|
193
|
+
// crsPath: string,
|
|
194
|
+
// options?: UltraHonkBackendOptions,
|
|
195
|
+
// ) {
|
|
196
|
+
// const { api } = await initLite(crsPath);
|
|
197
|
+
// try {
|
|
198
|
+
// const acirVerifyUltraHonk = options?.keccak
|
|
199
|
+
// ? api.acirVerifyUltraKeccakHonk.bind(api)
|
|
200
|
+
// : options?.keccakZK
|
|
201
|
+
// ? api.acirVerifyUltraKeccakZkHonk.bind(api)
|
|
202
|
+
// : options?.starknet
|
|
203
|
+
// ? api.acirVerifyUltraStarknetHonk.bind(api)
|
|
204
|
+
// : options?.starknetZK
|
|
205
|
+
// ? api.acirVerifyUltraStarknetZkHonk.bind(api)
|
|
206
|
+
// : api.acirVerifyUltraZKHonk.bind(api);
|
|
207
|
+
// const verified = await acirVerifyUltraHonk(
|
|
208
|
+
// Uint8Array.from(readFileSync(proofPath)),
|
|
209
|
+
// new RawBuffer(readFileSync(vkPath)),
|
|
210
|
+
// );
|
|
211
|
+
// debug(`Verification ${verified ? 'successful' : 'failed'}`);
|
|
212
|
+
// return verified;
|
|
213
|
+
// } finally {
|
|
214
|
+
// await api.destroy();
|
|
215
|
+
// }
|
|
216
|
+
// }
|
|
217
|
+
// export async function proofAsFieldsUltraHonk(proofPath: string, outputPath: string, crsPath: string) {
|
|
218
|
+
// const { api } = await initLite(crsPath);
|
|
219
|
+
// try {
|
|
220
|
+
// debug(`Outputting UltraHonk proof as vector of fields proof=${proofPath}`);
|
|
221
|
+
// const proofAsFields = await api.acirProofAsFieldsUltraHonk(Uint8Array.from(readFileSync(proofPath)));
|
|
222
|
+
// const jsonProofAsFields = JSON.stringify(proofAsFields.map(f => f.toString()));
|
|
223
|
+
// if (outputPath === '-') {
|
|
224
|
+
// process.stdout.write(jsonProofAsFields);
|
|
225
|
+
// debug(`Proof as fields written to stdout`);
|
|
226
|
+
// } else {
|
|
227
|
+
// writeFileSync(outputPath, jsonProofAsFields);
|
|
228
|
+
// debug(`Proof as fields written to ${outputPath}`);
|
|
229
|
+
// }
|
|
230
|
+
// } finally {
|
|
231
|
+
// await api.destroy();
|
|
232
|
+
// }
|
|
233
|
+
// }
|
|
234
|
+
// export async function vkAsFieldsUltraHonk(vkPath: string, vkeyOutputPath: string, crsPath: string) {
|
|
235
|
+
// const { api } = await initLite(crsPath);
|
|
236
|
+
// try {
|
|
237
|
+
// debug(`Serializing vk byte array into field elements vk=${vkPath}`);
|
|
238
|
+
// const vkAsFields = await api.acirVkAsFieldsUltraHonk(new RawBuffer(readFileSync(vkPath)));
|
|
239
|
+
// const jsonVKAsFields = JSON.stringify(vkAsFields.map(f => f.toString()));
|
|
240
|
+
// if (vkeyOutputPath === '-') {
|
|
241
|
+
// process.stdout.write(jsonVKAsFields);
|
|
242
|
+
// debug(`Verification key as fields written to stdout`);
|
|
243
|
+
// } else {
|
|
244
|
+
// writeFileSync(vkeyOutputPath, jsonVKAsFields);
|
|
245
|
+
// debug(`Verification key as fields written to ${vkeyOutputPath}`);
|
|
246
|
+
// }
|
|
247
|
+
// } finally {
|
|
248
|
+
// await api.destroy();
|
|
249
|
+
// }
|
|
250
|
+
// }
|
|
251
|
+
// const program = new Command('bb');
|
|
252
|
+
// program.option('-v, --verbose', 'enable verbose logging', false);
|
|
253
|
+
// program.option('-c, --crs-path <path>', 'set crs path', './crs');
|
|
254
|
+
// function handleGlobalOptions() {
|
|
255
|
+
// initLogger({ useStdErr: true, level: program.opts().verbose ? 'debug' : 'info' });
|
|
256
|
+
// debug = createDebugLogger('bb');
|
|
257
|
+
// return { crsPath: program.opts().crsPath };
|
|
258
|
+
// }
|
|
259
|
+
// const deprecatedCommandError = () => async () => {
|
|
260
|
+
// console.error(
|
|
261
|
+
// `Error: UltraPlonk is now deprecated (see https://github.com/AztecProtocol/barretenberg/issues/1377). Use UltraHonk!`,
|
|
262
|
+
// );
|
|
263
|
+
// process.exit(1);
|
|
264
|
+
// };
|
|
265
|
+
// program
|
|
266
|
+
// .command('prove_and_verify')
|
|
267
|
+
// .description('Generate a proof and verify it. Process exits with success or failure code. [DEPRECATED]')
|
|
268
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
269
|
+
// .option('-r, --recursive', 'Whether to use a SNARK friendly proof', false)
|
|
270
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
271
|
+
// .action(deprecatedCommandError());
|
|
272
|
+
// program
|
|
273
|
+
// .command('prove_and_verify_ultra_honk')
|
|
274
|
+
// .description('Generate an UltraHonk proof and verify it. Process exits with success or failure code.')
|
|
275
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
276
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
277
|
+
// .action(async ({ bytecodePath, witnessPath }) => {
|
|
278
|
+
// const { crsPath } = handleGlobalOptions();
|
|
279
|
+
// const result = await proveAndVerifyUltraHonk(bytecodePath, witnessPath, crsPath);
|
|
280
|
+
// process.exit(result ? 0 : 1);
|
|
281
|
+
// });
|
|
282
|
+
// program
|
|
283
|
+
// .command('prove_and_verify_mega_honk')
|
|
284
|
+
// .description('Generate a MegaHonk proof and verify it. Process exits with success or failure code.')
|
|
285
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
286
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
287
|
+
// .action(async ({ bytecodePath, witnessPath }) => {
|
|
288
|
+
// const { crsPath } = handleGlobalOptions();
|
|
289
|
+
// const result = await proveAndVerifyMegaHonk(bytecodePath, witnessPath, crsPath);
|
|
290
|
+
// process.exit(result ? 0 : 1);
|
|
291
|
+
// });
|
|
292
|
+
// program
|
|
293
|
+
// .command('prove')
|
|
294
|
+
// .description('Generate a proof and write it to a file. [DEPRECATED]')
|
|
295
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
296
|
+
// .option('-r, --recursive', 'Create a SNARK friendly proof', false)
|
|
297
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
298
|
+
// .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
|
|
299
|
+
// .action(deprecatedCommandError());
|
|
300
|
+
// program
|
|
301
|
+
// .command('gates')
|
|
302
|
+
// .description('Print Ultra Builder gate count to standard output.')
|
|
303
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
304
|
+
// .option('-r, --recursive', 'Create a SNARK friendly proof', false)
|
|
305
|
+
// .option('-hr, --honk-recursion', 'Specify whether to use UltraHonk recursion', false)
|
|
306
|
+
// .action(async ({ bytecodePath, recursive, honkRecursion: honkRecursion }) => {
|
|
307
|
+
// handleGlobalOptions();
|
|
308
|
+
// await gateCountUltra(bytecodePath, recursive, honkRecursion);
|
|
309
|
+
// });
|
|
310
|
+
// program
|
|
311
|
+
// .command('verify')
|
|
312
|
+
// .description('Verify a proof. Process exists with success or failure code. [DEPRECATED]')
|
|
313
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
|
|
314
|
+
// .requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
|
|
315
|
+
// .action(deprecatedCommandError());
|
|
316
|
+
// program
|
|
317
|
+
// .command('contract')
|
|
318
|
+
// .description('Output solidity verification key contract. [DEPRECATED]')
|
|
319
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
320
|
+
// .option('-o, --output-path <path>', 'Specify the path to write the contract', './target/contract.sol')
|
|
321
|
+
// .requiredOption('-k, --vk-path <path>', 'Path to a verification key. avoids recomputation.')
|
|
322
|
+
// .action(deprecatedCommandError());
|
|
323
|
+
// program
|
|
324
|
+
// .command('contract_ultra_honk')
|
|
325
|
+
// .description('Output solidity verification key contract.')
|
|
326
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
327
|
+
// .option('-o, --output-path <path>', 'Specify the path to write the contract', './target/contract.sol')
|
|
328
|
+
// .requiredOption('-k, --vk-path <path>', 'Path to a verification key.')
|
|
329
|
+
// .action(async ({ bytecodePath, outputPath, vkPath }) => {
|
|
330
|
+
// const { crsPath } = handleGlobalOptions();
|
|
331
|
+
// await contractUltraHonk(bytecodePath, vkPath, crsPath, outputPath);
|
|
332
|
+
// });
|
|
333
|
+
// program
|
|
334
|
+
// .command('write_vk')
|
|
335
|
+
// .description('Output verification key. [DEPRECATED]')
|
|
336
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
337
|
+
// .option('-r, --recursive', 'Create a SNARK friendly proof', false)
|
|
338
|
+
// .option('-o, --output-path <path>', 'Specify the path to write the key')
|
|
339
|
+
// .action(deprecatedCommandError());
|
|
340
|
+
// program
|
|
341
|
+
// .command('write_pk')
|
|
342
|
+
// .description('Output proving key. [DEPRECATED]')
|
|
343
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
344
|
+
// .option('-r, --recursive', 'Create a SNARK friendly proof', false)
|
|
345
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
|
|
346
|
+
// .action(deprecatedCommandError());
|
|
347
|
+
// program
|
|
348
|
+
// .command('proof_as_fields')
|
|
349
|
+
// .description('Return the proof as fields elements. [DEPRECATED]')
|
|
350
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the proof path')
|
|
351
|
+
// .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
|
|
352
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the proof fields')
|
|
353
|
+
// .action(deprecatedCommandError());
|
|
354
|
+
// program
|
|
355
|
+
// .command('vk_as_fields')
|
|
356
|
+
// .description(
|
|
357
|
+
// 'Return the verification key represented as fields elements. Also return the verification key hash. [DEPRECATED]',
|
|
358
|
+
// )
|
|
359
|
+
// .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
|
|
360
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the verification key fields and key hash')
|
|
361
|
+
// .action(deprecatedCommandError());
|
|
362
|
+
// program
|
|
363
|
+
// .command('prove_ultra_honk')
|
|
364
|
+
// .description('Generate a proof and write it to a file.')
|
|
365
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
366
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
367
|
+
// .option('-k, --vk-path <path>', 'path to a verification key. avoids recomputation.')
|
|
368
|
+
// .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
|
|
369
|
+
// .action(async ({ bytecodePath, witnessPath, vkPath, outputPath }) => {
|
|
370
|
+
// const { crsPath } = handleGlobalOptions();
|
|
371
|
+
// debug(`Creating UltraHonk proof bytecodePath=${bytecodePath}, witnessPath=${witnessPath}, vkPath=${vkPath}`);
|
|
372
|
+
// await proveUltraHonk(bytecodePath, witnessPath, crsPath, vkPath, outputPath);
|
|
373
|
+
// });
|
|
374
|
+
// program
|
|
375
|
+
// .command('prove_ultra_keccak_honk')
|
|
376
|
+
// .description('Generate a proof and write it to a file.')
|
|
377
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
378
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
379
|
+
// .option('-k, --vk-path <path>', 'path to a verification key. avoids recomputation.')
|
|
380
|
+
// .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
|
|
381
|
+
// .action(async ({ bytecodePath, witnessPath, vkPath, outputPath }) => {
|
|
382
|
+
// const { crsPath } = handleGlobalOptions();
|
|
383
|
+
// await proveUltraHonk(bytecodePath, witnessPath, crsPath, vkPath, outputPath, { keccak: true });
|
|
384
|
+
// });
|
|
385
|
+
// program
|
|
386
|
+
// .command('prove_ultra_starknet_honk')
|
|
387
|
+
// .description('Generate a proof and write it to a file.')
|
|
388
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
389
|
+
// .option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
390
|
+
// .option('-k, --vk-path <path>', 'path to a verification key. avoids recomputation.')
|
|
391
|
+
// .option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
|
|
392
|
+
// .action(async ({ bytecodePath, witnessPath, vkPath, outputPath }) => {
|
|
393
|
+
// const { crsPath } = handleGlobalOptions();
|
|
394
|
+
// await proveUltraHonk(bytecodePath, witnessPath, crsPath, vkPath, outputPath, { starknet: true });
|
|
395
|
+
// });
|
|
396
|
+
// program
|
|
397
|
+
// .command('write_vk_ultra_honk')
|
|
398
|
+
// .description('Output verification key.')
|
|
399
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
400
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
|
|
401
|
+
// .action(async ({ bytecodePath, outputPath }) => {
|
|
402
|
+
// const { crsPath } = handleGlobalOptions();
|
|
403
|
+
// debug(`Writing verification key to ${outputPath}`);
|
|
404
|
+
// await writeVkUltraHonk(bytecodePath, crsPath, outputPath);
|
|
405
|
+
// });
|
|
406
|
+
// program
|
|
407
|
+
// .command('write_vk_ultra_keccak_honk')
|
|
408
|
+
// .description('Output verification key.')
|
|
409
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
410
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
|
|
411
|
+
// .action(async ({ bytecodePath, outputPath }) => {
|
|
412
|
+
// const { crsPath } = handleGlobalOptions();
|
|
413
|
+
// await writeVkUltraHonk(bytecodePath, crsPath, outputPath, { keccak: true });
|
|
414
|
+
// });
|
|
415
|
+
// program
|
|
416
|
+
// .command('write_vk_ultra_starknet_honk')
|
|
417
|
+
// .description('Output verification key.')
|
|
418
|
+
// .option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/program.json')
|
|
419
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
|
|
420
|
+
// .action(async ({ bytecodePath, outputPath }) => {
|
|
421
|
+
// const { crsPath } = handleGlobalOptions();
|
|
422
|
+
// await writeVkUltraHonk(bytecodePath, crsPath, outputPath, { starknet: true });
|
|
423
|
+
// });
|
|
424
|
+
// program
|
|
425
|
+
// .command('verify_ultra_honk')
|
|
426
|
+
// .description('Verify a proof. Process exists with success or failure code.')
|
|
427
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
|
|
428
|
+
// .requiredOption('-k, --vk-path <path>', 'path to a verification key. avoids recomputation.')
|
|
429
|
+
// .action(async ({ proofPath, vkPath }) => {
|
|
430
|
+
// const { crsPath } = handleGlobalOptions();
|
|
431
|
+
// const result = await verifyUltraHonk(proofPath, vkPath, crsPath);
|
|
432
|
+
// process.exit(result ? 0 : 1);
|
|
433
|
+
// });
|
|
434
|
+
// program
|
|
435
|
+
// .command('verify_ultra_keccak_honk')
|
|
436
|
+
// .description('Verify a proof. Process exists with success or failure code.')
|
|
437
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
|
|
438
|
+
// .requiredOption('-k, --vk-path <path>', 'path to a verification key. avoids recomputation.')
|
|
439
|
+
// .action(async ({ proofPath, vkPath }) => {
|
|
440
|
+
// const { crsPath } = handleGlobalOptions();
|
|
441
|
+
// const result = await verifyUltraHonk(proofPath, vkPath, crsPath, { keccak: true });
|
|
442
|
+
// process.exit(result ? 0 : 1);
|
|
443
|
+
// });
|
|
444
|
+
// program
|
|
445
|
+
// .command('verify_ultra_starknet_honk')
|
|
446
|
+
// .description('Verify a proof. Process exists with success or failure code.')
|
|
447
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
|
|
448
|
+
// .requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
|
|
449
|
+
// .action(async ({ proofPath, vk }) => {
|
|
450
|
+
// const { crsPath } = handleGlobalOptions();
|
|
451
|
+
// const result = await verifyUltraHonk(proofPath, vk, crsPath, { starknet: true });
|
|
452
|
+
// process.exit(result ? 0 : 1);
|
|
453
|
+
// });
|
|
454
|
+
// program
|
|
455
|
+
// .command('proof_as_fields_honk')
|
|
456
|
+
// .description('Return the proof as fields elements')
|
|
457
|
+
// .requiredOption('-p, --proof-path <path>', 'Specify the proof path')
|
|
458
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the proof fields')
|
|
459
|
+
// .action(async ({ proofPath, outputPath }) => {
|
|
460
|
+
// const { crsPath } = handleGlobalOptions();
|
|
461
|
+
// await proofAsFieldsUltraHonk(proofPath, outputPath, crsPath);
|
|
462
|
+
// });
|
|
463
|
+
// program
|
|
464
|
+
// .command('vk_as_fields_ultra_honk')
|
|
465
|
+
// .description('Return the verification key represented as fields elements.')
|
|
466
|
+
// .requiredOption('-k, --vk-path <path>', 'Path to verification key.')
|
|
467
|
+
// .requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the verification key fields.')
|
|
468
|
+
// .action(async ({ vkPath, outputPath }) => {
|
|
469
|
+
// const { crsPath } = handleGlobalOptions();
|
|
470
|
+
// await vkAsFieldsUltraHonk(vkPath, outputPath, crsPath);
|
|
471
|
+
// });
|
|
472
|
+
// program.name('bb.js').parse(process.argv);
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBDQUF3QztBQUN4QyxzREFBc0Q7QUFDdEQsNkRBQTZEO0FBQzdELGtFQUFrRTtBQUNsRSxvREFBb0Q7QUFDcEQscUNBQXFDO0FBQ3JDLHVDQUF1QztBQUN2Qyx1RUFBdUU7QUFFdkUsb0NBQW9DO0FBRXBDLG1FQUFtRTtBQUVuRSwyREFBMkQ7QUFDM0QsaUZBQWlGO0FBRWpGLCtCQUErQjtBQUMvQiw2RUFBNkU7QUFDN0UsdUZBQXVGO0FBQ3ZGLDRDQUE0QztBQUM1QyxNQUFNO0FBRU4sdURBQXVEO0FBQ3ZELHFEQUFxRDtBQUNyRCwwQ0FBMEM7QUFDMUMsSUFBSTtBQUVKLG9KQUFvSjtBQUNwSixzSEFBc0g7QUFDdEgsNkZBQTZGO0FBQzdGLGtCQUFrQjtBQUNsQixJQUFJO0FBRUoseURBQXlEO0FBQ3pELDRDQUE0QztBQUM1QywyQ0FBMkM7QUFDM0MsMENBQTBDO0FBQzFDLElBQUk7QUFFSiwySEFBMkg7QUFDM0gseURBQXlEO0FBQ3pELGdEQUFnRDtBQUNoRCxpR0FBaUc7QUFDakcsZ0NBQWdDO0FBQ2hDLElBQUk7QUFFSix3RUFBd0U7QUFDeEUseUNBQXlDO0FBQ3pDLGVBQWU7QUFDZixRQUFRO0FBRVIsa0lBQWtJO0FBQ2xJLHdHQUF3RztBQUN4Ryx3RUFBd0U7QUFDeEUsK0dBQStHO0FBQy9HLG1IQUFtSDtBQUNuSCw4RUFBOEU7QUFFOUUsa0hBQWtIO0FBQ2xILCtEQUErRDtBQUUvRCw0Q0FBNEM7QUFDNUMsbUhBQW1IO0FBQ25ILHlHQUF5RztBQUN6RyxvREFBb0Q7QUFDcEQsSUFBSTtBQUVKLDZDQUE2QztBQUM3Qyx3REFBd0Q7QUFFeEQsMENBQTBDO0FBQzFDLDJDQUEyQztBQUUzQyw0Q0FBNEM7QUFDNUMseUdBQXlHO0FBRXpHLG9CQUFvQjtBQUNwQixJQUFJO0FBRUosOEdBQThHO0FBQzlHLG1DQUFtQztBQUNuQyxnRUFBZ0U7QUFDaEUsVUFBVTtBQUNWLGtEQUFrRDtBQUNsRCwrQ0FBK0M7QUFFL0MsaUZBQWlGO0FBQ2pGLHVCQUF1QjtBQUN2QixnQkFBZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLE1BQU07QUFDTixrQ0FBa0M7QUFDbEMsSUFBSTtBQUVKLDZHQUE2RztBQUM3RyxtQ0FBbUM7QUFDbkMsZ0VBQWdFO0FBQ2hFLFVBQVU7QUFDVixrREFBa0Q7QUFDbEQsK0NBQStDO0FBRS9DLGdGQUFnRjtBQUNoRix1QkFBdUI7QUFDdkIsZ0JBQWdCO0FBQ2hCLDJCQUEyQjtBQUMzQixNQUFNO0FBQ04sa0NBQWtDO0FBQ2xDLElBQUk7QUFFSiwyR0FBMkc7QUFDM0csd0RBQXdEO0FBQ3hELFVBQVU7QUFDViw4RkFBOEY7QUFDOUYsa0RBQWtEO0FBQ2xELCtEQUErRDtBQUMvRCwyRUFBMkU7QUFDM0Usc0NBQXNDO0FBQ3RDLHNDQUFzQztBQUN0QyxxREFBcUQ7QUFFckQscURBQXFEO0FBQ3JELGdCQUFnQjtBQUNoQiwyQkFBMkI7QUFDM0IsTUFBTTtBQUNOLElBQUk7QUFFSix1SEFBdUg7QUFDdkgsZ0VBQWdFO0FBQ2hFLFVBQVU7QUFDViwyRkFBMkY7QUFDM0Ysa0RBQWtEO0FBQ2xELHNEQUFzRDtBQUN0RCx5RUFBeUU7QUFFekUsZ0NBQWdDO0FBQ2hDLHdDQUF3QztBQUN4QywrREFBK0Q7QUFDL0QsZUFBZTtBQUNmLDZDQUE2QztBQUM3QyxzRUFBc0U7QUFDdEUsUUFBUTtBQUNSLGdCQUFnQjtBQUNoQiwyQkFBMkI7QUFDM0IsTUFBTTtBQUNOLElBQUk7QUFFSix3Q0FBd0M7QUFDeEMsMEJBQTBCO0FBQzFCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4Qix1Q0FBdUM7QUFDdkMsTUFBTTtBQUNOLGdFQUFnRTtBQUNoRSxVQUFVO0FBQ1Ysa0VBQWtFO0FBQ2xFLGtEQUFrRDtBQUNsRCwrQ0FBK0M7QUFFL0MsaURBQWlEO0FBQ2pELGlEQUFpRDtBQUNqRCw0QkFBNEI7QUFDNUIscURBQXFEO0FBQ3JELDhCQUE4QjtBQUM5Qix1REFBdUQ7QUFDdkQsa0NBQWtDO0FBQ2xDLDJEQUEyRDtBQUMzRCxvREFBb0Q7QUFDcEQsc0dBQXNHO0FBRXRHLGdDQUFnQztBQUNoQyxxQ0FBcUM7QUFDckMsMENBQTBDO0FBQzFDLGVBQWU7QUFDZiwwQ0FBMEM7QUFDMUMsaURBQWlEO0FBQ2pELFFBQVE7QUFDUixnQkFBZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLE1BQU07QUFDTixJQUFJO0FBRUosMENBQTBDO0FBQzFDLDBCQUEwQjtBQUMxQixxQkFBcUI7QUFDckIsd0JBQXdCO0FBQ3hCLHVDQUF1QztBQUN2QyxNQUFNO0FBQ04sZ0VBQWdFO0FBQ2hFLFVBQVU7QUFDVixrREFBa0Q7QUFDbEQsaUZBQWlGO0FBRWpGLG1EQUFtRDtBQUNuRCxtREFBbUQ7QUFDbkQsNEJBQTRCO0FBQzVCLHVEQUF1RDtBQUN2RCw4QkFBOEI7QUFDOUIseURBQXlEO0FBQ3pELGtDQUFrQztBQUNsQyw2REFBNkQ7QUFDN0Qsb0RBQW9EO0FBQ3BELHVEQUF1RDtBQUV2RCxnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLHFEQUFxRDtBQUNyRCxlQUFlO0FBQ2YsdUNBQXVDO0FBQ3ZDLDREQUE0RDtBQUM1RCxRQUFRO0FBQ1IsZ0JBQWdCO0FBQ2hCLDJCQUEyQjtBQUMzQixNQUFNO0FBQ04sSUFBSTtBQUVKLHlDQUF5QztBQUN6Qyx1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCLHFCQUFxQjtBQUNyQix1Q0FBdUM7QUFDdkMsTUFBTTtBQUNOLDZDQUE2QztBQUM3QyxVQUFVO0FBQ1Ysa0RBQWtEO0FBQ2xELGtEQUFrRDtBQUNsRCw0QkFBNEI7QUFDNUIsc0RBQXNEO0FBQ3RELDhCQUE4QjtBQUM5Qix3REFBd0Q7QUFDeEQsa0NBQWtDO0FBQ2xDLDREQUE0RDtBQUM1RCxxREFBcUQ7QUFDckQsa0RBQWtEO0FBQ2xELGtEQUFrRDtBQUNsRCw2Q0FBNkM7QUFDN0MsU0FBUztBQUVULG1FQUFtRTtBQUNuRSx1QkFBdUI7QUFDdkIsZ0JBQWdCO0FBQ2hCLDJCQUEyQjtBQUMzQixNQUFNO0FBQ04sSUFBSTtBQUVKLHlHQUF5RztBQUN6Ryw2Q0FBNkM7QUFDN0MsVUFBVTtBQUNWLGtGQUFrRjtBQUNsRiw0R0FBNEc7QUFDNUcsc0ZBQXNGO0FBRXRGLGdDQUFnQztBQUNoQyxpREFBaUQ7QUFDakQsb0RBQW9EO0FBQ3BELGVBQWU7QUFDZixzREFBc0Q7QUFDdEQsMkRBQTJEO0FBQzNELFFBQVE7QUFDUixnQkFBZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLE1BQU07QUFDTixJQUFJO0FBRUosdUdBQXVHO0FBQ3ZHLDZDQUE2QztBQUU3QyxVQUFVO0FBQ1YsMkVBQTJFO0FBQzNFLGlHQUFpRztBQUNqRyxnRkFBZ0Y7QUFFaEYsb0NBQW9DO0FBQ3BDLDhDQUE4QztBQUM5QywrREFBK0Q7QUFDL0QsZUFBZTtBQUNmLHVEQUF1RDtBQUN2RCwwRUFBMEU7QUFDMUUsUUFBUTtBQUNSLGdCQUFnQjtBQUNoQiwyQkFBMkI7QUFDM0IsTUFBTTtBQUNOLElBQUk7QUFFSixxQ0FBcUM7QUFFckMsb0VBQW9FO0FBQ3BFLG9FQUFvRTtBQUVwRSxtQ0FBbUM7QUFDbkMsdUZBQXVGO0FBQ3ZGLHFDQUFxQztBQUNyQyxnREFBZ0Q7QUFDaEQsSUFBSTtBQUVKLHFEQUFxRDtBQUNyRCxtQkFBbUI7QUFDbkIsNkhBQTZIO0FBQzdILE9BQU87QUFDUCxxQkFBcUI7QUFDckIsS0FBSztBQUVMLFVBQVU7QUFDVixpQ0FBaUM7QUFDakMsNkdBQTZHO0FBQzdHLGdHQUFnRztBQUNoRywrRUFBK0U7QUFDL0UsNEZBQTRGO0FBQzVGLHVDQUF1QztBQUV2QyxVQUFVO0FBQ1YsNENBQTRDO0FBQzVDLDJHQUEyRztBQUMzRyxnR0FBZ0c7QUFDaEcsNEZBQTRGO0FBQzVGLHVEQUF1RDtBQUN2RCxpREFBaUQ7QUFDakQsd0ZBQXdGO0FBQ3hGLG9DQUFvQztBQUNwQyxRQUFRO0FBRVIsVUFBVTtBQUNWLDJDQUEyQztBQUMzQyx5R0FBeUc7QUFDekcsZ0dBQWdHO0FBQ2hHLDRGQUE0RjtBQUM1Rix1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHVGQUF1RjtBQUN2RixvQ0FBb0M7QUFDcEMsUUFBUTtBQUVSLFVBQVU7QUFDVixzQkFBc0I7QUFDdEIsMEVBQTBFO0FBQzFFLGdHQUFnRztBQUNoRyx1RUFBdUU7QUFDdkUsNEZBQTRGO0FBQzVGLDJGQUEyRjtBQUMzRix1Q0FBdUM7QUFFdkMsVUFBVTtBQUNWLHNCQUFzQjtBQUN0Qix1RUFBdUU7QUFDdkUsZ0dBQWdHO0FBQ2hHLHVFQUF1RTtBQUN2RSwwRkFBMEY7QUFDMUYsbUZBQW1GO0FBQ25GLDZCQUE2QjtBQUM3QixvRUFBb0U7QUFDcEUsUUFBUTtBQUVSLFVBQVU7QUFDVix1QkFBdUI7QUFDdkIsOEZBQThGO0FBQzlGLGdGQUFnRjtBQUNoRiw0RkFBNEY7QUFDNUYsdUNBQXVDO0FBRXZDLFVBQVU7QUFDVix5QkFBeUI7QUFDekIsNEVBQTRFO0FBQzVFLGdHQUFnRztBQUNoRywyR0FBMkc7QUFDM0csaUdBQWlHO0FBQ2pHLHVDQUF1QztBQUV2QyxVQUFVO0FBQ1Ysb0NBQW9DO0FBQ3BDLCtEQUErRDtBQUMvRCxnR0FBZ0c7QUFDaEcsMkdBQTJHO0FBQzNHLDJFQUEyRTtBQUMzRSw4REFBOEQ7QUFDOUQsaURBQWlEO0FBQ2pELDBFQUEwRTtBQUMxRSxRQUFRO0FBRVIsVUFBVTtBQUNWLHlCQUF5QjtBQUN6QiwwREFBMEQ7QUFDMUQsZ0dBQWdHO0FBQ2hHLHVFQUF1RTtBQUN2RSw2RUFBNkU7QUFDN0UsdUNBQXVDO0FBRXZDLFVBQVU7QUFDVix5QkFBeUI7QUFDekIscURBQXFEO0FBQ3JELGdHQUFnRztBQUNoRyx1RUFBdUU7QUFDdkUscUZBQXFGO0FBQ3JGLHVDQUF1QztBQUV2QyxVQUFVO0FBQ1YsZ0NBQWdDO0FBQ2hDLHNFQUFzRTtBQUN0RSx5RUFBeUU7QUFDekUseUVBQXlFO0FBQ3pFLG1HQUFtRztBQUNuRyx1Q0FBdUM7QUFFdkMsVUFBVTtBQUNWLDZCQUE2QjtBQUM3QixrQkFBa0I7QUFDbEIseUhBQXlIO0FBQ3pILE1BQU07QUFDTix5RUFBeUU7QUFDekUsMkhBQTJIO0FBQzNILHVDQUF1QztBQUV2QyxVQUFVO0FBQ1YsaUNBQWlDO0FBQ2pDLDZEQUE2RDtBQUM3RCxnR0FBZ0c7QUFDaEcsNEZBQTRGO0FBQzVGLHlGQUF5RjtBQUN6RiwyRkFBMkY7QUFDM0YsMkVBQTJFO0FBQzNFLGlEQUFpRDtBQUNqRCxvSEFBb0g7QUFDcEgsb0ZBQW9GO0FBQ3BGLFFBQVE7QUFFUixVQUFVO0FBQ1Ysd0NBQXdDO0FBQ3hDLDZEQUE2RDtBQUM3RCxnR0FBZ0c7QUFDaEcsNEZBQTRGO0FBQzVGLHlGQUF5RjtBQUN6RiwyRkFBMkY7QUFDM0YsMkVBQTJFO0FBQzNFLGlEQUFpRDtBQUNqRCxzR0FBc0c7QUFDdEcsUUFBUTtBQUVSLFVBQVU7QUFDViwwQ0FBMEM7QUFDMUMsNkRBQTZEO0FBQzdELGdHQUFnRztBQUNoRyw0RkFBNEY7QUFDNUYseUZBQXlGO0FBQ3pGLDJGQUEyRjtBQUMzRiwyRUFBMkU7QUFDM0UsaURBQWlEO0FBQ2pELHdHQUF3RztBQUN4RyxRQUFRO0FBRVIsVUFBVTtBQUNWLG9DQUFvQztBQUNwQyw2Q0FBNkM7QUFDN0MsZ0dBQWdHO0FBQ2hHLHFGQUFxRjtBQUNyRixzREFBc0Q7QUFDdEQsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpRUFBaUU7QUFDakUsUUFBUTtBQUVSLFVBQVU7QUFDViwyQ0FBMkM7QUFDM0MsNkNBQTZDO0FBQzdDLGdHQUFnRztBQUNoRyxxRkFBcUY7QUFDckYsc0RBQXNEO0FBQ3RELGlEQUFpRDtBQUNqRCxtRkFBbUY7QUFDbkYsUUFBUTtBQUVSLFVBQVU7QUFDViw2Q0FBNkM7QUFDN0MsNkNBQTZDO0FBQzdDLGdHQUFnRztBQUNoRyxxRkFBcUY7QUFDckYsc0RBQXNEO0FBQ3RELGlEQUFpRDtBQUNqRCxxRkFBcUY7QUFDckYsUUFBUTtBQUVSLFVBQVU7QUFDVixrQ0FBa0M7QUFDbEMsaUZBQWlGO0FBQ2pGLGdGQUFnRjtBQUNoRixpR0FBaUc7QUFDakcsK0NBQStDO0FBQy9DLGlEQUFpRDtBQUNqRCx3RUFBd0U7QUFDeEUsb0NBQW9DO0FBQ3BDLFFBQVE7QUFFUixVQUFVO0FBQ1YseUNBQXlDO0FBQ3pDLGlGQUFpRjtBQUNqRixnRkFBZ0Y7QUFDaEYsaUdBQWlHO0FBQ2pHLCtDQUErQztBQUMvQyxpREFBaUQ7QUFDakQsMEZBQTBGO0FBQzFGLG9DQUFvQztBQUNwQyxRQUFRO0FBRVIsVUFBVTtBQUNWLDJDQUEyQztBQUMzQyxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBQ2hGLDRGQUE0RjtBQUM1RiwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELHdGQUF3RjtBQUN4RixvQ0FBb0M7QUFDcEMsUUFBUTtBQUVSLFVBQVU7QUFDVixxQ0FBcUM7QUFDckMsd0RBQXdEO0FBQ3hELHlFQUF5RTtBQUN6RSxtR0FBbUc7QUFDbkcsbURBQW1EO0FBQ25ELGlEQUFpRDtBQUNqRCxvRUFBb0U7QUFDcEUsUUFBUTtBQUVSLFVBQVU7QUFDVix3Q0FBd0M7QUFDeEMsZ0ZBQWdGO0FBQ2hGLHlFQUF5RTtBQUN6RSwrR0FBK0c7QUFDL0csZ0RBQWdEO0FBQ2hELGlEQUFpRDtBQUNqRCw4REFBOEQ7QUFDOUQsUUFBUTtBQUVSLDZDQUE2QyJ9
|