@zkpassport/sdk 0.8.8 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -1,2375 +1,28 @@
1
1
  import {
2
2
  noLogger
3
3
  } from "./chunk-AFLQN3AC.js";
4
+ import {
5
+ PublicInputChecker
6
+ } from "./chunk-BUYJZSHP.js";
7
+ import {
8
+ SolidityVerifier
9
+ } from "./chunk-JITNXEQS.js";
10
+ import {
11
+ DEFAULT_VALIDITY,
12
+ VERSION
13
+ } from "./chunk-XOQW7AOQ.js";
14
+ import "./chunk-6F4PWJZI.js";
4
15
 
5
16
  // src/index.ts
6
17
  import { getAlpha3Code, registerLocale } from "i18n-iso-countries";
7
18
  import {
8
19
  getProofData,
9
- getCommitmentFromDSCProof,
10
- getCommitmentInFromIDDataProof,
11
- getCommitmentOutFromIDDataProof,
12
- getNullifierFromDisclosureProof,
13
- getCommitmentInFromIntegrityProof,
14
- getCommitmentOutFromIntegrityProof,
15
- getCommitmentInFromDisclosureProof,
16
- getMerkleRootFromDSCProof,
17
- getCurrentDateFromIntegrityProof,
18
- DisclosedData,
19
- formatName,
20
20
  getNumberOfPublicInputs,
21
- getParameterCommitmentFromDisclosureProof,
22
- getCountryParameterCommitment,
23
- getDiscloseParameterCommitment,
24
- getDateParameterCommitment,
25
- getCertificateRegistryRootFromOuterProof,
26
- getParamCommitmentsFromOuterProof,
27
- getCurrentDateFromCommittedInputs,
28
- getMinAgeFromCommittedInputs,
29
- getMaxAgeFromCommittedInputs,
30
- getAgeParameterCommitment,
31
- getMinDateFromCommittedInputs,
32
- getMaxDateFromCommittedInputs,
33
- getCurrentDateFromOuterProof,
34
- getNullifierFromOuterProof,
35
- getAgeEVMParameterCommitment,
36
- getDateEVMParameterCommitment,
37
- getDiscloseEVMParameterCommitment,
38
- getCountryEVMParameterCommitment,
39
- rightPadArrayWithZeros,
40
- getCommittedInputCount,
41
- ProofType,
42
- getScopeHash,
43
- getScopeFromOuterProof,
44
- getSubscopeFromOuterProof,
45
- getServiceScopeHash,
46
- getBindEVMParameterCommitment,
47
- getBindParameterCommitment,
48
- formatBoundData,
49
- getCircuitRegistryRootFromOuterProof,
50
- areDatesEqual,
51
21
  formatQueryResultDates,
52
- getBirthdateMinDateTimestamp,
53
- getBirthdateMaxDateTimestamp,
54
- SanctionsBuilder,
55
- SECONDS_BETWEEN_1900_AND_1970,
56
- numberToBytesBE
22
+ NullifierType
57
23
  } from "@zkpassport/utils";
58
- import { bytesToHex } from "@noble/ciphers/utils";
59
24
  import i18en from "i18n-iso-countries/langs/en.json";
60
25
  import { Buffer } from "buffer/";
61
- import { sha256 } from "@noble/hashes/sha2";
62
- import { hexToBytes } from "@noble/hashes/utils";
63
-
64
- // src/assets/abi/ZKPassportVerifier.json
65
- var ZKPassportVerifier_default = {
66
- abi: [
67
- {
68
- type: "constructor",
69
- inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
70
- stateMutability: "nonpayable"
71
- },
72
- {
73
- type: "function",
74
- name: "CERTIFICATE_REGISTRY_ID",
75
- inputs: [],
76
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
77
- stateMutability: "view"
78
- },
79
- {
80
- type: "function",
81
- name: "CIRCUIT_REGISTRY_ID",
82
- inputs: [],
83
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
84
- stateMutability: "view"
85
- },
86
- {
87
- type: "function",
88
- name: "SANCTIONS_REGISTRY_ID",
89
- inputs: [],
90
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
91
- stateMutability: "view"
92
- },
93
- {
94
- type: "function",
95
- name: "addVerifiers",
96
- inputs: [
97
- { name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" },
98
- { name: "verifiers", type: "address[]", internalType: "address[]" }
99
- ],
100
- outputs: [],
101
- stateMutability: "nonpayable"
102
- },
103
- {
104
- type: "function",
105
- name: "admin",
106
- inputs: [],
107
- outputs: [{ name: "", type: "address", internalType: "address" }],
108
- stateMutability: "view"
109
- },
110
- {
111
- type: "function",
112
- name: "enforceSanctionsRoot",
113
- inputs: [
114
- {
115
- name: "params",
116
- type: "tuple",
117
- internalType: "struct ProofVerificationParams",
118
- components: [
119
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
120
- { name: "proof", type: "bytes", internalType: "bytes" },
121
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
122
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
123
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
124
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
125
- { name: "domain", type: "string", internalType: "string" },
126
- { name: "scope", type: "string", internalType: "string" },
127
- { name: "devMode", type: "bool", internalType: "bool" }
128
- ]
129
- }
130
- ],
131
- outputs: [],
132
- stateMutability: "view"
133
- },
134
- {
135
- type: "function",
136
- name: "getBoundData",
137
- inputs: [
138
- {
139
- name: "params",
140
- type: "tuple",
141
- internalType: "struct ProofVerificationParams",
142
- components: [
143
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
144
- { name: "proof", type: "bytes", internalType: "bytes" },
145
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
146
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
147
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
148
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
149
- { name: "domain", type: "string", internalType: "string" },
150
- { name: "scope", type: "string", internalType: "string" },
151
- { name: "devMode", type: "bool", internalType: "bool" }
152
- ]
153
- }
154
- ],
155
- outputs: [
156
- {
157
- name: "boundData",
158
- type: "tuple",
159
- internalType: "struct BoundData",
160
- components: [
161
- { name: "senderAddress", type: "address", internalType: "address" },
162
- { name: "chainId", type: "uint256", internalType: "uint256" },
163
- { name: "customData", type: "string", internalType: "string" }
164
- ]
165
- }
166
- ],
167
- stateMutability: "pure"
168
- },
169
- {
170
- type: "function",
171
- name: "getDisclosedData",
172
- inputs: [
173
- {
174
- name: "params",
175
- type: "tuple",
176
- internalType: "struct ProofVerificationParams",
177
- components: [
178
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
179
- { name: "proof", type: "bytes", internalType: "bytes" },
180
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
181
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
182
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
183
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
184
- { name: "domain", type: "string", internalType: "string" },
185
- { name: "scope", type: "string", internalType: "string" },
186
- { name: "devMode", type: "bool", internalType: "bool" }
187
- ]
188
- },
189
- { name: "isIDCard", type: "bool", internalType: "bool" }
190
- ],
191
- outputs: [
192
- {
193
- name: "disclosedData",
194
- type: "tuple",
195
- internalType: "struct DisclosedData",
196
- components: [
197
- { name: "name", type: "string", internalType: "string" },
198
- { name: "issuingCountry", type: "string", internalType: "string" },
199
- { name: "nationality", type: "string", internalType: "string" },
200
- { name: "gender", type: "string", internalType: "string" },
201
- { name: "birthDate", type: "string", internalType: "string" },
202
- { name: "expiryDate", type: "string", internalType: "string" },
203
- { name: "documentNumber", type: "string", internalType: "string" },
204
- { name: "documentType", type: "string", internalType: "string" }
205
- ]
206
- }
207
- ],
208
- stateMutability: "pure"
209
- },
210
- {
211
- type: "function",
212
- name: "isAgeAbove",
213
- inputs: [
214
- { name: "minAge", type: "uint8", internalType: "uint8" },
215
- {
216
- name: "params",
217
- type: "tuple",
218
- internalType: "struct ProofVerificationParams",
219
- components: [
220
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
221
- { name: "proof", type: "bytes", internalType: "bytes" },
222
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
223
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
224
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
225
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
226
- { name: "domain", type: "string", internalType: "string" },
227
- { name: "scope", type: "string", internalType: "string" },
228
- { name: "devMode", type: "bool", internalType: "bool" }
229
- ]
230
- }
231
- ],
232
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
233
- stateMutability: "view"
234
- },
235
- {
236
- type: "function",
237
- name: "isAgeAboveOrEqual",
238
- inputs: [
239
- { name: "minAge", type: "uint8", internalType: "uint8" },
240
- {
241
- name: "params",
242
- type: "tuple",
243
- internalType: "struct ProofVerificationParams",
244
- components: [
245
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
246
- { name: "proof", type: "bytes", internalType: "bytes" },
247
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
248
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
249
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
250
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
251
- { name: "domain", type: "string", internalType: "string" },
252
- { name: "scope", type: "string", internalType: "string" },
253
- { name: "devMode", type: "bool", internalType: "bool" }
254
- ]
255
- }
256
- ],
257
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
258
- stateMutability: "view"
259
- },
260
- {
261
- type: "function",
262
- name: "isAgeBelow",
263
- inputs: [
264
- { name: "maxAge", type: "uint8", internalType: "uint8" },
265
- {
266
- name: "params",
267
- type: "tuple",
268
- internalType: "struct ProofVerificationParams",
269
- components: [
270
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
271
- { name: "proof", type: "bytes", internalType: "bytes" },
272
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
273
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
274
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
275
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
276
- { name: "domain", type: "string", internalType: "string" },
277
- { name: "scope", type: "string", internalType: "string" },
278
- { name: "devMode", type: "bool", internalType: "bool" }
279
- ]
280
- }
281
- ],
282
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
283
- stateMutability: "view"
284
- },
285
- {
286
- type: "function",
287
- name: "isAgeBelowOrEqual",
288
- inputs: [
289
- { name: "maxAge", type: "uint8", internalType: "uint8" },
290
- {
291
- name: "params",
292
- type: "tuple",
293
- internalType: "struct ProofVerificationParams",
294
- components: [
295
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
296
- { name: "proof", type: "bytes", internalType: "bytes" },
297
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
298
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
299
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
300
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
301
- { name: "domain", type: "string", internalType: "string" },
302
- { name: "scope", type: "string", internalType: "string" },
303
- { name: "devMode", type: "bool", internalType: "bool" }
304
- ]
305
- }
306
- ],
307
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
308
- stateMutability: "view"
309
- },
310
- {
311
- type: "function",
312
- name: "isAgeBetween",
313
- inputs: [
314
- { name: "minAge", type: "uint8", internalType: "uint8" },
315
- { name: "maxAge", type: "uint8", internalType: "uint8" },
316
- {
317
- name: "params",
318
- type: "tuple",
319
- internalType: "struct ProofVerificationParams",
320
- components: [
321
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
322
- { name: "proof", type: "bytes", internalType: "bytes" },
323
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
324
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
325
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
326
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
327
- { name: "domain", type: "string", internalType: "string" },
328
- { name: "scope", type: "string", internalType: "string" },
329
- { name: "devMode", type: "bool", internalType: "bool" }
330
- ]
331
- }
332
- ],
333
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
334
- stateMutability: "view"
335
- },
336
- {
337
- type: "function",
338
- name: "isAgeEqual",
339
- inputs: [
340
- { name: "age", type: "uint8", internalType: "uint8" },
341
- {
342
- name: "params",
343
- type: "tuple",
344
- internalType: "struct ProofVerificationParams",
345
- components: [
346
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
347
- { name: "proof", type: "bytes", internalType: "bytes" },
348
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
349
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
350
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
351
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
352
- { name: "domain", type: "string", internalType: "string" },
353
- { name: "scope", type: "string", internalType: "string" },
354
- { name: "devMode", type: "bool", internalType: "bool" }
355
- ]
356
- }
357
- ],
358
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
359
- stateMutability: "view"
360
- },
361
- {
362
- type: "function",
363
- name: "isBirthdateAfter",
364
- inputs: [
365
- { name: "minDate", type: "uint256", internalType: "uint256" },
366
- {
367
- name: "params",
368
- type: "tuple",
369
- internalType: "struct ProofVerificationParams",
370
- components: [
371
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
372
- { name: "proof", type: "bytes", internalType: "bytes" },
373
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
374
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
375
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
376
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
377
- { name: "domain", type: "string", internalType: "string" },
378
- { name: "scope", type: "string", internalType: "string" },
379
- { name: "devMode", type: "bool", internalType: "bool" }
380
- ]
381
- }
382
- ],
383
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
384
- stateMutability: "view"
385
- },
386
- {
387
- type: "function",
388
- name: "isBirthdateAfterOrEqual",
389
- inputs: [
390
- { name: "minDate", type: "uint256", internalType: "uint256" },
391
- {
392
- name: "params",
393
- type: "tuple",
394
- internalType: "struct ProofVerificationParams",
395
- components: [
396
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
397
- { name: "proof", type: "bytes", internalType: "bytes" },
398
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
399
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
400
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
401
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
402
- { name: "domain", type: "string", internalType: "string" },
403
- { name: "scope", type: "string", internalType: "string" },
404
- { name: "devMode", type: "bool", internalType: "bool" }
405
- ]
406
- }
407
- ],
408
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
409
- stateMutability: "view"
410
- },
411
- {
412
- type: "function",
413
- name: "isBirthdateBefore",
414
- inputs: [
415
- { name: "maxDate", type: "uint256", internalType: "uint256" },
416
- {
417
- name: "params",
418
- type: "tuple",
419
- internalType: "struct ProofVerificationParams",
420
- components: [
421
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
422
- { name: "proof", type: "bytes", internalType: "bytes" },
423
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
424
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
425
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
426
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
427
- { name: "domain", type: "string", internalType: "string" },
428
- { name: "scope", type: "string", internalType: "string" },
429
- { name: "devMode", type: "bool", internalType: "bool" }
430
- ]
431
- }
432
- ],
433
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
434
- stateMutability: "view"
435
- },
436
- {
437
- type: "function",
438
- name: "isBirthdateBeforeOrEqual",
439
- inputs: [
440
- { name: "maxDate", type: "uint256", internalType: "uint256" },
441
- {
442
- name: "params",
443
- type: "tuple",
444
- internalType: "struct ProofVerificationParams",
445
- components: [
446
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
447
- { name: "proof", type: "bytes", internalType: "bytes" },
448
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
449
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
450
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
451
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
452
- { name: "domain", type: "string", internalType: "string" },
453
- { name: "scope", type: "string", internalType: "string" },
454
- { name: "devMode", type: "bool", internalType: "bool" }
455
- ]
456
- }
457
- ],
458
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
459
- stateMutability: "view"
460
- },
461
- {
462
- type: "function",
463
- name: "isBirthdateBetween",
464
- inputs: [
465
- { name: "minDate", type: "uint256", internalType: "uint256" },
466
- { name: "maxDate", type: "uint256", internalType: "uint256" },
467
- {
468
- name: "params",
469
- type: "tuple",
470
- internalType: "struct ProofVerificationParams",
471
- components: [
472
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
473
- { name: "proof", type: "bytes", internalType: "bytes" },
474
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
475
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
476
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
477
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
478
- { name: "domain", type: "string", internalType: "string" },
479
- { name: "scope", type: "string", internalType: "string" },
480
- { name: "devMode", type: "bool", internalType: "bool" }
481
- ]
482
- }
483
- ],
484
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
485
- stateMutability: "view"
486
- },
487
- {
488
- type: "function",
489
- name: "isBirthdateEqual",
490
- inputs: [
491
- { name: "date", type: "uint256", internalType: "uint256" },
492
- {
493
- name: "params",
494
- type: "tuple",
495
- internalType: "struct ProofVerificationParams",
496
- components: [
497
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
498
- { name: "proof", type: "bytes", internalType: "bytes" },
499
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
500
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
501
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
502
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
503
- { name: "domain", type: "string", internalType: "string" },
504
- { name: "scope", type: "string", internalType: "string" },
505
- { name: "devMode", type: "bool", internalType: "bool" }
506
- ]
507
- }
508
- ],
509
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
510
- stateMutability: "view"
511
- },
512
- {
513
- type: "function",
514
- name: "isExpiryDateAfter",
515
- inputs: [
516
- { name: "minDate", type: "uint256", internalType: "uint256" },
517
- {
518
- name: "params",
519
- type: "tuple",
520
- internalType: "struct ProofVerificationParams",
521
- components: [
522
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
523
- { name: "proof", type: "bytes", internalType: "bytes" },
524
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
525
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
526
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
527
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
528
- { name: "domain", type: "string", internalType: "string" },
529
- { name: "scope", type: "string", internalType: "string" },
530
- { name: "devMode", type: "bool", internalType: "bool" }
531
- ]
532
- }
533
- ],
534
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
535
- stateMutability: "view"
536
- },
537
- {
538
- type: "function",
539
- name: "isExpiryDateAfterOrEqual",
540
- inputs: [
541
- { name: "minDate", type: "uint256", internalType: "uint256" },
542
- {
543
- name: "params",
544
- type: "tuple",
545
- internalType: "struct ProofVerificationParams",
546
- components: [
547
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
548
- { name: "proof", type: "bytes", internalType: "bytes" },
549
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
550
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
551
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
552
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
553
- { name: "domain", type: "string", internalType: "string" },
554
- { name: "scope", type: "string", internalType: "string" },
555
- { name: "devMode", type: "bool", internalType: "bool" }
556
- ]
557
- }
558
- ],
559
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
560
- stateMutability: "view"
561
- },
562
- {
563
- type: "function",
564
- name: "isExpiryDateBefore",
565
- inputs: [
566
- { name: "maxDate", type: "uint256", internalType: "uint256" },
567
- {
568
- name: "params",
569
- type: "tuple",
570
- internalType: "struct ProofVerificationParams",
571
- components: [
572
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
573
- { name: "proof", type: "bytes", internalType: "bytes" },
574
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
575
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
576
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
577
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
578
- { name: "domain", type: "string", internalType: "string" },
579
- { name: "scope", type: "string", internalType: "string" },
580
- { name: "devMode", type: "bool", internalType: "bool" }
581
- ]
582
- }
583
- ],
584
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
585
- stateMutability: "view"
586
- },
587
- {
588
- type: "function",
589
- name: "isExpiryDateBeforeOrEqual",
590
- inputs: [
591
- { name: "maxDate", type: "uint256", internalType: "uint256" },
592
- {
593
- name: "params",
594
- type: "tuple",
595
- internalType: "struct ProofVerificationParams",
596
- components: [
597
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
598
- { name: "proof", type: "bytes", internalType: "bytes" },
599
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
600
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
601
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
602
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
603
- { name: "domain", type: "string", internalType: "string" },
604
- { name: "scope", type: "string", internalType: "string" },
605
- { name: "devMode", type: "bool", internalType: "bool" }
606
- ]
607
- }
608
- ],
609
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
610
- stateMutability: "view"
611
- },
612
- {
613
- type: "function",
614
- name: "isExpiryDateBetween",
615
- inputs: [
616
- { name: "minDate", type: "uint256", internalType: "uint256" },
617
- { name: "maxDate", type: "uint256", internalType: "uint256" },
618
- {
619
- name: "params",
620
- type: "tuple",
621
- internalType: "struct ProofVerificationParams",
622
- components: [
623
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
624
- { name: "proof", type: "bytes", internalType: "bytes" },
625
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
626
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
627
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
628
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
629
- { name: "domain", type: "string", internalType: "string" },
630
- { name: "scope", type: "string", internalType: "string" },
631
- { name: "devMode", type: "bool", internalType: "bool" }
632
- ]
633
- }
634
- ],
635
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
636
- stateMutability: "view"
637
- },
638
- {
639
- type: "function",
640
- name: "isExpiryDateEqual",
641
- inputs: [
642
- { name: "date", type: "uint256", internalType: "uint256" },
643
- {
644
- name: "params",
645
- type: "tuple",
646
- internalType: "struct ProofVerificationParams",
647
- components: [
648
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
649
- { name: "proof", type: "bytes", internalType: "bytes" },
650
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
651
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
652
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
653
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
654
- { name: "domain", type: "string", internalType: "string" },
655
- { name: "scope", type: "string", internalType: "string" },
656
- { name: "devMode", type: "bool", internalType: "bool" }
657
- ]
658
- }
659
- ],
660
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
661
- stateMutability: "view"
662
- },
663
- {
664
- type: "function",
665
- name: "isIssuingCountryIn",
666
- inputs: [
667
- { name: "countryList", type: "string[]", internalType: "string[]" },
668
- {
669
- name: "params",
670
- type: "tuple",
671
- internalType: "struct ProofVerificationParams",
672
- components: [
673
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
674
- { name: "proof", type: "bytes", internalType: "bytes" },
675
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
676
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
677
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
678
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
679
- { name: "domain", type: "string", internalType: "string" },
680
- { name: "scope", type: "string", internalType: "string" },
681
- { name: "devMode", type: "bool", internalType: "bool" }
682
- ]
683
- }
684
- ],
685
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
686
- stateMutability: "pure"
687
- },
688
- {
689
- type: "function",
690
- name: "isIssuingCountryOut",
691
- inputs: [
692
- { name: "countryList", type: "string[]", internalType: "string[]" },
693
- {
694
- name: "params",
695
- type: "tuple",
696
- internalType: "struct ProofVerificationParams",
697
- components: [
698
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
699
- { name: "proof", type: "bytes", internalType: "bytes" },
700
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
701
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
702
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
703
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
704
- { name: "domain", type: "string", internalType: "string" },
705
- { name: "scope", type: "string", internalType: "string" },
706
- { name: "devMode", type: "bool", internalType: "bool" }
707
- ]
708
- }
709
- ],
710
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
711
- stateMutability: "pure"
712
- },
713
- {
714
- type: "function",
715
- name: "isNationalityIn",
716
- inputs: [
717
- { name: "countryList", type: "string[]", internalType: "string[]" },
718
- {
719
- name: "params",
720
- type: "tuple",
721
- internalType: "struct ProofVerificationParams",
722
- components: [
723
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
724
- { name: "proof", type: "bytes", internalType: "bytes" },
725
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
726
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
727
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
728
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
729
- { name: "domain", type: "string", internalType: "string" },
730
- { name: "scope", type: "string", internalType: "string" },
731
- { name: "devMode", type: "bool", internalType: "bool" }
732
- ]
733
- }
734
- ],
735
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
736
- stateMutability: "pure"
737
- },
738
- {
739
- type: "function",
740
- name: "isNationalityOut",
741
- inputs: [
742
- { name: "countryList", type: "string[]", internalType: "string[]" },
743
- {
744
- name: "params",
745
- type: "tuple",
746
- internalType: "struct ProofVerificationParams",
747
- components: [
748
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
749
- { name: "proof", type: "bytes", internalType: "bytes" },
750
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
751
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
752
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
753
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
754
- { name: "domain", type: "string", internalType: "string" },
755
- { name: "scope", type: "string", internalType: "string" },
756
- { name: "devMode", type: "bool", internalType: "bool" }
757
- ]
758
- }
759
- ],
760
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
761
- stateMutability: "pure"
762
- },
763
- {
764
- type: "function",
765
- name: "paused",
766
- inputs: [],
767
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
768
- stateMutability: "view"
769
- },
770
- {
771
- type: "function",
772
- name: "removeVerifiers",
773
- inputs: [{ name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" }],
774
- outputs: [],
775
- stateMutability: "nonpayable"
776
- },
777
- {
778
- type: "function",
779
- name: "rootRegistry",
780
- inputs: [],
781
- outputs: [{ name: "", type: "address", internalType: "contract IRootRegistry" }],
782
- stateMutability: "view"
783
- },
784
- {
785
- type: "function",
786
- name: "setPaused",
787
- inputs: [{ name: "_paused", type: "bool", internalType: "bool" }],
788
- outputs: [],
789
- stateMutability: "nonpayable"
790
- },
791
- {
792
- type: "function",
793
- name: "transferAdmin",
794
- inputs: [{ name: "newAdmin", type: "address", internalType: "address" }],
795
- outputs: [],
796
- stateMutability: "nonpayable"
797
- },
798
- {
799
- type: "function",
800
- name: "updateRootRegistry",
801
- inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
802
- outputs: [],
803
- stateMutability: "nonpayable"
804
- },
805
- {
806
- type: "function",
807
- name: "verifyProof",
808
- inputs: [
809
- {
810
- name: "params",
811
- type: "tuple",
812
- internalType: "struct ProofVerificationParams",
813
- components: [
814
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
815
- { name: "proof", type: "bytes", internalType: "bytes" },
816
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
817
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
818
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
819
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
820
- { name: "domain", type: "string", internalType: "string" },
821
- { name: "scope", type: "string", internalType: "string" },
822
- { name: "devMode", type: "bool", internalType: "bool" }
823
- ]
824
- }
825
- ],
826
- outputs: [
827
- { name: "isValid", type: "bool", internalType: "bool" },
828
- { name: "uniqueIdentifier", type: "bytes32", internalType: "bytes32" }
829
- ],
830
- stateMutability: "view"
831
- },
832
- {
833
- type: "function",
834
- name: "verifyScopes",
835
- inputs: [
836
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
837
- { name: "domain", type: "string", internalType: "string" },
838
- { name: "scope", type: "string", internalType: "string" }
839
- ],
840
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
841
- stateMutability: "pure"
842
- },
843
- {
844
- type: "function",
845
- name: "vkeyHashToVerifier",
846
- inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
847
- outputs: [{ name: "", type: "address", internalType: "address" }],
848
- stateMutability: "view"
849
- },
850
- {
851
- type: "event",
852
- name: "AdminUpdated",
853
- inputs: [
854
- { name: "oldAdmin", type: "address", indexed: true, internalType: "address" },
855
- { name: "newAdmin", type: "address", indexed: true, internalType: "address" }
856
- ],
857
- anonymous: false
858
- },
859
- {
860
- type: "event",
861
- name: "CertificateRegistryRootAdded",
862
- inputs: [
863
- {
864
- name: "certificateRegistryRoot",
865
- type: "bytes32",
866
- indexed: true,
867
- internalType: "bytes32"
868
- }
869
- ],
870
- anonymous: false
871
- },
872
- {
873
- type: "event",
874
- name: "CertificateRegistryRootRemoved",
875
- inputs: [
876
- {
877
- name: "certificateRegistryRoot",
878
- type: "bytes32",
879
- indexed: true,
880
- internalType: "bytes32"
881
- }
882
- ],
883
- anonymous: false
884
- },
885
- {
886
- type: "event",
887
- name: "PausedStatusChanged",
888
- inputs: [{ name: "paused", type: "bool", indexed: false, internalType: "bool" }],
889
- anonymous: false
890
- },
891
- {
892
- type: "event",
893
- name: "SanctionsTreesRootUpdates",
894
- inputs: [
895
- {
896
- name: "_sanctionsTreesRoot",
897
- type: "bytes32",
898
- indexed: true,
899
- internalType: "bytes32"
900
- }
901
- ],
902
- anonymous: false
903
- },
904
- {
905
- type: "event",
906
- name: "VerifierAdded",
907
- inputs: [
908
- { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" },
909
- { name: "verifier", type: "address", indexed: true, internalType: "address" }
910
- ],
911
- anonymous: false
912
- },
913
- {
914
- type: "event",
915
- name: "VerifierRemoved",
916
- inputs: [
917
- { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" }
918
- ],
919
- anonymous: false
920
- },
921
- {
922
- type: "event",
923
- name: "ZKPassportVerifierDeployed",
924
- inputs: [
925
- { name: "admin", type: "address", indexed: true, internalType: "address" },
926
- { name: "timestamp", type: "uint256", indexed: false, internalType: "uint256" }
927
- ],
928
- anonymous: false
929
- }
930
- ],
931
- bytecode: {
932
- object: "0x608060405234801561000f575f5ffd5b506040516137fc3803806137fc83398101604081905261002e916100f6565b6001600160a01b0381166100945760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840160405180910390fd5b5f8054336001600160a01b03199182168117909255600280549091166001600160a01b0384161790556040514281527ff29b53747ae7121d0958d490ad3d5cf6767119b0fdbd8389d918de3a12cf5a299060200160405180910390a250610123565b5f60208284031215610106575f5ffd5b81516001600160a01b038116811461011c575f5ffd5b9392505050565b6136cc806101305f395ff3fe608060405234801561000f575f5ffd5b5060043610610234575f3560e01c80638163f23111610135578063c4560786116100b4578063e420e35411610079578063e420e35414610520578063e718bc3214610533578063ec46f77414610546578063f851a44014610559578063f87e19b11461056b575f5ffd5b8063c4560786146104aa578063cfd9464a146104bd578063d3f6ffff146104d0578063d7bf616a146104e3578063deb7c0591461050d575f5ffd5b8063a88f1cef116100fa578063a88f1cef1461044b578063aa1346ea1461045e578063b96b161c14610471578063bf73c26c14610484578063c0940ebd14610497575f5ffd5b80638163f231146103bf578063847755e3146103ff5780638d6937b814610412578063921076c714610425578063a6df2c0114610438575f5ffd5b80634c127428116101c1578063652ba33d11610186578063652ba33d14610376578063653cfd811461037e5780636c40d5d614610391578063704876d61461039957806375829def146103ac575f5ffd5b80634c1274281461030a57806354dbe4d11461031d57806359545f45146103305780635c975abb1461035057806362067c8214610363575f5ffd5b80631e26a9dc116102075780631e26a9dc1461029b57806337889655146102bb5780633a86bd3d146102ce57806341a0e2c2146102e157806346bd0a16146102f7575f5ffd5b806304951b86146102385780630b90581b1461026057806316c38b3c1461027357806318677f2a14610288575b5f5ffd5b61024b610246366004612744565b61057e565b60405190151581526020015b60405180910390f35b61024b61026e366004612744565b6105a0565b610286610281366004612794565b6105ae565b005b6102866102963660046127c3565b610637565b6102ae6102a93660046127de565b6106e4565b604051610257919061285a565b61024b6102c9366004612960565b610847565b61024b6102dc366004612a4b565b61085c565b6102e9600181565b604051908152602001610257565b61024b610305366004612b53565b610869565b61024b610318366004612744565b610881565b61024b61032b366004612960565b61088e565b61034361033e366004612b9e565b6109df565b6040516102579190612bcf565b5f5461024b90600160a01b900460ff1681565b61024b610371366004612c05565b610b25565b6102e9600381565b61028661038c366004612b9e565b610d96565b6102e9600281565b61024b6103a7366004612744565b610e38565b6102866103ba3660046127c3565b610e45565b6103e76103cd366004612c4c565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610257565b61024b61040d366004612ce7565b610f13565b610286610420366004612d83565b6110db565b61024b610433366004612744565b61119b565b610286610446366004612dc1565b6111b4565b61024b610459366004612744565b6112de565b61024b61046c366004612960565b6112f7565b6002546103e7906001600160a01b031681565b61024b610492366004612960565b611448565b61024b6104a5366004612960565b6114af565b61024b6104b8366004612b53565b6114bb565b61024b6104cb366004612744565b6114c9565b61024b6104de366004612744565b6114d7565b6104f66104f1366004612b9e565b6114f0565b604080519215158352602083019190915201610257565b61024b61051b366004612744565b611997565b61024b61052e366004612a4b565b6119a4565b61024b610541366004612744565b6119b1565b61024b610554366004612a4b565b6119be565b5f546103e7906001600160a01b031681565b61024b610579366004612a4b565b6119cb565b5f61059761058f8462015180612e3f565b6002846119d8565b90505b92915050565b5f6105978384600285611c33565b5f546001600160a01b031633146105e05760405162461bcd60e51b81526004016105d790612e52565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061062c90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146106605760405162461bcd60e51b81526004016105d790612e52565b6001600160a01b0381166106c25760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016105d7565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61072c60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63ddf3eec96107546060870187612e89565b6107616080890189612ecb565b6040518563ffffffff1660e01b81526004016107809493929190612f68565b5f60405180830381865af415801561079a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107c19190810190612fdd565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae906107fe9084908790600401613036565b5f60405180830381865af4158015610818573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261083f9190810190613059565b949350505050565b5f6105976108568460016131ea565b8361088e565b5f61059783600784611f71565b5f6108778484600385611c33565b90505b9392505050565b5f610597836003846119d8565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c6108b96060880188612e89565b6108c660808a018a612ecb565b6040518563ffffffff1660e01b81526004016108e59493929190612f68565b606060405180830381865af4158015610900573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109249190613203565b925092509250610938838660a0013561209b565b6109545760405162461bcd60e51b81526004016105d790613244565b60ff8116156109cd576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105d7565b5060ff85811691161491505092915050565b60408051606080820183525f8083526020830152918101919091525f73__$144f4fe859debe4776cdef2b99f7b97a42$__634601173c610a226060860186612e89565b610a2f6080880188612ecb565b6040518563ffffffff1660e01b8152600401610a4e9493929190612f68565b5f60405180830381865af4158015610a68573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a8f91908101906132b5565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba690610ac99084906004016132e6565b5f60405180830381865af4158015610ae3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b0a91908101906132f8565b604085015260208401526001600160a01b0316825250919050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610b506060880188612e89565b610b5d60808a018a612ecb565b6040518563ffffffff1660e01b8152600401610b7c9493929190612f68565b606060405180830381865af4158015610b97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbb9190613203565b925092509250610bcf838660a0013561209b565b610beb5760405162461bcd60e51b81526004016105d790613244565b8560ff168760ff161115610c575760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b60648201526084016105d7565b8160ff165f03610ce45760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105d7565b8060ff165f03610d715760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105d7565b8160ff168760ff16148015610d8b57508060ff168660ff16145b979650505050505050565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63fbd24457610dbe6060850185612e89565b610dcb6080870187612ecb565b6040518563ffffffff1660e01b8152600401610dea9493929190612f68565b602060405180830381865af4158015610e05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e299190613343565b9050610e34816120c8565b5050565b5f610597836002846119d8565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b81526004016105d790612e52565b6001600160a01b038116610ec45760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f20616464726573730000000060448201526064016105d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f5f610f5386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061218992505050565b610fcd57600860028787604051602001610f6e92919061335a565b60408051601f1981840301815290829052610f8891613369565b602060405180830381855afa158015610fa3573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fc69190613343565b901c610fcf565b5f5b90505f61101085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061218992505050565b61108a5760086002868660405160200161102b92919061335a565b60408051601f198184030181529082905261104591613369565b602060405180830381855afa158015611060573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110839190613343565b901c61108c565b5f5b905081898960038181106110a2576110a261337f565b905060200201351480156110ce575080898960048181106110c5576110c561337f565b90506020020135145b9998505050505050505050565b5f546001600160a01b031633146111045760405162461bcd60e51b81526004016105d790612e52565b5f5b818110156111965760015f8484848181106111235761112361337f565b602090810292909201358352508101919091526040015f2080546001600160a01b031916905582828281811061115b5761115b61337f565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101611106565b505050565b5f6105976111ac6201518085613393565b60028461218e565b5f546001600160a01b031633146111dd5760405162461bcd60e51b81526004016105d790612e52565b5f5b838110156112d7578282828181106111f9576111f961337f565b905060200201602081019061120e91906127c3565b60015f8787858181106112235761122361337f565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082828281811061126c5761126c61337f565b905060200201602081019061128191906127c3565b6001600160a01b031685858381811061129c5761129c61337f565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a36001016111df565b5050505050565b5f6105976112ef6201518085613393565b60038461218e565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c6113226060880188612e89565b61132f60808a018a612ecb565b6040518563ffffffff1660e01b815260040161134e9493929190612f68565b606060405180830381865af4158015611369573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138d9190613203565b9250925092506113a1838660a0013561209b565b6113bd5760405162461bcd60e51b81526004016105d790613244565b60ff821615611436576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105d7565b60ff8681169116149250505092915050565b5f5f8360ff161161149b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e2030000060448201526064016105d7565b6105976114a96001856133a6565b836112f7565b5f610597838484610b25565b5f6108778484600285611c33565b5f6105978384600385611c33565b5f6105976114e88462015180612e3f565b6003846119d8565b5f80548190600160a01b900460ff16156115415760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016105d7565b5f61154c8435612392565b905061157a61155e6040860186612ecb565b5f81811061156e5761156e61337f565b905060200201356123eb565b6115a761158a6040860186612ecb565b600181811061159b5761159b61337f565b905060200201356124b3565b6115f16115b76040860186612ecb565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050505060a0860135612571565b6116595760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b60648201526084016105d7565b6116836116696040860186612ecb565b61167660c0880188612e89565b61040d60e08a018a612e89565b6116cf5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f706500000000000000000060448201526064016105d7565b61178a6116df6040860186612ecb565b60059060016116f160408a018a612ecb565b6116fc929150613393565b92611709939291906133bf565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611747925050506060870187612e89565b6117546080890189612ecb565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061259c92505050565b60016117996040860186612ecb565b60016117a86040890189612ecb565b6117b3929150613393565b8181106117c2576117c261337f565b905060200201351415806117e357506117e361012085016101008601612794565b6118405760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b60648201526084016105d7565b600661184f6040860186612ecb565b61185a929150613393565b6118676080860186612ecb565b9050146118c45760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b60648201526084016105d7565b6001600160a01b03811663ea50d0e46118e06020870187612e89565b6118ed6040890189612ecb565b6040518563ffffffff1660e01b815260040161190c9493929190612f68565b602060405180830381865afa158015611927573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b91906133ea565b92505f600161195d6040870187612ecb565b611968929150613393565b90506119776040860186612ecb565b828181106119875761198761337f565b9050602002013592505050915091565b5f6105978360028461218e565b5f61059783600584611f71565b5f6105978360038461218e565b5f61059783600684611f71565b5f61059783600484611f71565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611a036060880188612e89565b611a1060808a018a612ecb565b8b6040518663ffffffff1660e01b8152600401611a31959493929190613419565b606060405180830381865af4158015611a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a70919061346e565b925092509250611a84838660a0013561209b565b611aa05760405162461bcd60e51b81526004016105d790613244565b6002866009811115611ab457611ab4613405565b1480611ad157506003866009811115611acf57611acf613405565b145b611aed5760405162461bcd60e51b81526004016105d790613499565b6002866009811115611b0157611b01613405565b03611ba3578015611b895760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a4016105d7565b611b976383aa7e8083613393565b8714935050505061087a565b8015611c275760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a4016105d7565b508514915061087a9050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611c5e6060880188612e89565b611c6b60808a018a612ecb565b8b6040518663ffffffff1660e01b8152600401611c8c959493929190613419565b606060405180830381865af4158015611ca7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ccb919061346e565b925092509250611cdf838660a0013561209b565b611cfb5760405162461bcd60e51b81526004016105d790613244565b86881115611d635760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b60648201526084016105d7565b6002866009811115611d7757611d77613405565b1480611d9457506003866009811115611d9257611d92613405565b145b611db05760405162461bcd60e51b81526004016105d790613499565b6002866009811115611dc457611dc4613405565b03611eaa57815f03611e595760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a4016105d7565b805f03611e785760405162461bcd60e51b81526004016105d7906134c5565b611e866383aa7e8083613393565b88148015611ea05750611e9d6383aa7e8082613393565b87145b935050505061083f565b815f03611f3b5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a4016105d7565b805f03611f5a5760405162461bcd60e51b81526004016105d79061353d565b8188148015611ea057509095149695505050505050565b5f808073__$144f4fe859debe4776cdef2b99f7b97a42$__6384d40ca0611f9b6060870187612e89565b611fa86080890189612ecb565b8a6040518663ffffffff1660e01b8152600401611fc9959493929190613419565b5f60405180830381865af4158015611fe3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261200a91908101906135b6565b9150915080865114612020575f9250505061087a565b5f5b8181101561208e5761207787828151811061203f5761203f61337f565b60200260200101518483815181106120595761205961337f565b60200260200101518051602091820120825192909101919091201490565b612086575f935050505061087a565b600101612022565b5060019695505050505050565b5f806120a78385612e3f565b90508342101580156120b857508381115b801561083f575042109392505050565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612116573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213a91906133ea565b6121865760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f740060448201526064016105d7565b50565b511590565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f926121b96060880188612e89565b6121c660808a018a612ecb565b8b6040518663ffffffff1660e01b81526004016121e7959493929190613419565b606060405180830381865af4158015612202573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612226919061346e565b92509250925061223a838660a0013561209b565b6122565760405162461bcd60e51b81526004016105d790613244565b81156122d45760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a4016105d7565b60028660098111156122e8576122e8613405565b14806123055750600386600981111561230357612303613405565b145b6123215760405162461bcd60e51b81526004016105d790613499565b600286600981111561233557612335613405565b0361236757805f036123595760405162461bcd60e51b81526004016105d7906134c5565b611b976383aa7e8082613393565b805f036123865760405162461bcd60e51b81526004016105d79061353d565b8614925061087a915050565b5f818152600160205260408120546001600160a01b03168061059a5760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b60448201526064016105d7565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612439573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245d91906133ea565b6121865760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b60648201526084016105d7565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa158015612501573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252591906133ea565b6121865760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f7400000060448201526064016105d7565b5f5f836002815181106125865761258661337f565b60200260200101515f1c905061083f818461209b565b5f805b82518110156126dd575f60086002878786908887815181106125c3576125c361337f565b6020026020010151886125d69190612e3f565b926125e39392919061366f565b6040516020016125f492919061335a565b60408051601f198184030181529082905261260e91613369565b602060405180830381855afa158015612629573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061264c9190613343565b901c90508682815181106126625761266261337f565b602002602001015181146126ad5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b60448201526064016105d7565b8382815181106126bf576126bf61337f565b6020026020010151836126d29190612e3f565b92505060010161259f565b508083146112d75760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e6774680060448201526064016105d7565b5f610120828403121561273e575f5ffd5b50919050565b5f5f60408385031215612755575f5ffd5b8235915060208301356001600160401b03811115612771575f5ffd5b61277d8582860161272d565b9150509250929050565b8015158114612186575f5ffd5b5f602082840312156127a4575f5ffd5b813561087a81612787565b6001600160a01b0381168114612186575f5ffd5b5f602082840312156127d3575f5ffd5b813561087a816127af565b5f5f604083850312156127ef575f5ffd5b82356001600160401b03811115612804575f5ffd5b6128108582860161272d565b925050602083013561282181612787565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f8251610100602084015261287761012084018261282c565b90506020840151601f19848303016040850152612894828261282c565b9150506040840151601f198483030160608501526128b2828261282c565b9150506060840151601f198483030160808501526128d0828261282c565b9150506080840151601f198483030160a08501526128ee828261282c565b91505060a0840151601f198483030160c085015261290c828261282c565b91505060c0840151601f198483030160e085015261292a828261282c565b91505060e0840151601f1984830301610100850152612949828261282c565b95945050505050565b60ff81168114612186575f5ffd5b5f5f60408385031215612971575f5ffd5b823561297c81612952565b915060208301356001600160401b03811115612771575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b03811182821017156129cd576129cd612996565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129fb576129fb612996565b604052919050565b5f6001600160401b03821115612a1b57612a1b612996565b5060051b60200190565b5f6001600160401b03821115612a3d57612a3d612996565b50601f01601f191660200190565b5f5f60408385031215612a5c575f5ffd5b82356001600160401b03811115612a71575f5ffd5b8301601f81018513612a81575f5ffd5b8035612a94612a8f82612a03565b6129d3565b8082825260208201915060208360051b850101925087831115612ab5575f5ffd5b602084015b83811015612b355780356001600160401b03811115612ad7575f5ffd5b8501603f81018a13612ae7575f5ffd5b6020810135612af8612a8f82612a25565b8181526040838301018c1015612b0c575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612aba565b50945050505060208301356001600160401b03811115612771575f5ffd5b5f5f5f60608486031215612b65575f5ffd5b833592506020840135915060408401356001600160401b03811115612b88575f5ffd5b612b948682870161272d565b9150509250925092565b5f60208284031215612bae575f5ffd5b81356001600160401b03811115612bc3575f5ffd5b61083f8482850161272d565b6020815260018060a01b038251166020820152602082015160408201525f604083015160608084015261083f608084018261282c565b5f5f5f60608486031215612c17575f5ffd5b8335612c2281612952565b92506020840135612c3281612952565b915060408401356001600160401b03811115612b88575f5ffd5b5f60208284031215612c5c575f5ffd5b5035919050565b5f5f83601f840112612c73575f5ffd5b5081356001600160401b03811115612c89575f5ffd5b6020830191508360208260051b8501011115612ca3575f5ffd5b9250929050565b5f5f83601f840112612cba575f5ffd5b5081356001600160401b03811115612cd0575f5ffd5b602083019150836020828501011115612ca3575f5ffd5b5f5f5f5f5f5f60608789031215612cfc575f5ffd5b86356001600160401b03811115612d11575f5ffd5b612d1d89828a01612c63565b90975095505060208701356001600160401b03811115612d3b575f5ffd5b612d4789828a01612caa565b90955093505060408701356001600160401b03811115612d65575f5ffd5b612d7189828a01612caa565b979a9699509497509295939492505050565b5f5f60208385031215612d94575f5ffd5b82356001600160401b03811115612da9575f5ffd5b612db585828601612c63565b90969095509350505050565b5f5f5f5f60408587031215612dd4575f5ffd5b84356001600160401b03811115612de9575f5ffd5b612df587828801612c63565b90955093505060208501356001600160401b03811115612e13575f5ffd5b612e1f87828801612c63565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561059a5761059a612e2b565b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f5f8335601e19843603018112612e9e575f5ffd5b8301803591506001600160401b03821115612eb7575f5ffd5b602001915036819003821315612ca3575f5ffd5b5f5f8335601e19843603018112612ee0575f5ffd5b8301803591506001600160401b03821115612ef9575f5ffd5b6020019150600581901b3603821315612ca3575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b03831115612f4f575f5ffd5b8260051b80836020870137939093016020019392505050565b604081525f612f7b604083018688612f10565b8281036020840152610d8b818587612f38565b5f82601f830112612f9d575f5ffd5b8151602083015f612fb0612a8f84612a25565b9050828152858383011115612fc3575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f5f60408385031215612fee575f5ffd5b82516001600160401b03811115613003575f5ffd5b61300f85828601612f8e565b92505060208301516001600160401b0381111561302a575f5ffd5b61277d85828601612f8e565b604081525f613048604083018561282c565b905082151560208301529392505050565b5f60208284031215613069575f5ffd5b81516001600160401b0381111561307e575f5ffd5b82016101008185031215613090575f5ffd5b6130986129aa565b81516001600160401b038111156130ad575f5ffd5b6130b986828501612f8e565b82525060208201516001600160401b038111156130d4575f5ffd5b6130e086828501612f8e565b60208301525060408201516001600160401b038111156130fe575f5ffd5b61310a86828501612f8e565b60408301525060608201516001600160401b03811115613128575f5ffd5b61313486828501612f8e565b60608301525060808201516001600160401b03811115613152575f5ffd5b61315e86828501612f8e565b60808301525060a08201516001600160401b0381111561317c575f5ffd5b61318886828501612f8e565b60a08301525060c08201516001600160401b038111156131a6575f5ffd5b6131b286828501612f8e565b60c08301525060e08201516001600160401b038111156131d0575f5ffd5b6131dc86828501612f8e565b60e083015250949350505050565b60ff818116838216019081111561059a5761059a612e2b565b5f5f5f60608486031215613215575f5ffd5b8351602085015190935061322881612952565b604085015190925061323981612952565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b5f602082840312156132c5575f5ffd5b81516001600160401b038111156132da575f5ffd5b61083f84828501612f8e565b602081525f610597602083018461282c565b5f5f5f6060848603121561330a575f5ffd5b8351613315816127af565b6020850151604086015191945092506001600160401b03811115613337575f5ffd5b612b9486828701612f8e565b5f60208284031215613353575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059a5761059a612e2b565b60ff828116828216039081111561059a5761059a612e2b565b5f5f858511156133cd575f5ffd5b838611156133d9575f5ffd5b5050600583901b0193919092039150565b5f602082840312156133fa575f5ffd5b815161087a81612787565b634e487b7160e01b5f52602160045260245ffd5b606081525f61342c606083018789612f10565b828103602084015261343f818688612f38565b915050600a831061345e57634e487b7160e01b5f52602160045260245ffd5b8260408301529695505050505050565b5f5f5f60608486031215613480575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f604083850312156135c7575f5ffd5b82516001600160401b038111156135dc575f5ffd5b8301601f810185136135ec575f5ffd5b80516135fa612a8f82612a03565b8082825260208201915060208360051b85010192508783111561361b575f5ffd5b602084015b8381101561365b5780516001600160401b0381111561363d575f5ffd5b61364c8a602083890101612f8e565b84525060209283019201613620565b506020969096015195979596505050505050565b5f5f8585111561367d575f5ffd5b83861115613689575f5ffd5b505082019391909203915056fea26469706673582212201ad0934c58c94945ad619ae11884148cc3af0f513c363543f6833c83eb4947ff64736f6c634300081d0033",
933
- sourceMap: "620:27253:26:-:0;;;1762:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1811:27:26;;1803:76;;;;-1:-1:-1;;;1803:76:26;;511:2:33;1803:76:26;;;493:21:33;550:2;530:18;;;523:30;589:34;569:18;;;562:62;-1:-1:-1;;;640:18:33;;;633:34;684:19;;1803:76:26;;;;;;;;1885:5;:18;;1893:10;-1:-1:-1;;;;;;1885:18:26;;;;;;;;1909:12;:43;;;;;-1:-1:-1;;;;;1909:43:26;;;;;1963:50;;1997:15;860:25:33;;1963:50:26;;848:2:33;833:18;1963:50:26;;;;;;;1762:256;620:27253;;14:290:33;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:33;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:33:o;714:177::-;620:27253:26;;;;;;",
934
- linkReferences: {
935
- "src/InputsExtractor.sol": {
936
- InputsExtractor: [
937
- { start: 2143, length: 20 },
938
- { start: 2307, length: 20 },
939
- { start: 2500, length: 20 },
940
- { start: 2861, length: 20 },
941
- { start: 3025, length: 20 },
942
- { start: 3163, length: 20 },
943
- { start: 3785, length: 20 },
944
- { start: 5165, length: 20 },
945
- { start: 6926, length: 20 },
946
- { start: 7529, length: 20 },
947
- { start: 8358, length: 20 },
948
- { start: 8900, length: 20 }
949
- ]
950
- }
951
- }
952
- },
953
- deployedBytecode: {
954
- object: "0x608060405234801561000f575f5ffd5b5060043610610234575f3560e01c80638163f23111610135578063c4560786116100b4578063e420e35411610079578063e420e35414610520578063e718bc3214610533578063ec46f77414610546578063f851a44014610559578063f87e19b11461056b575f5ffd5b8063c4560786146104aa578063cfd9464a146104bd578063d3f6ffff146104d0578063d7bf616a146104e3578063deb7c0591461050d575f5ffd5b8063a88f1cef116100fa578063a88f1cef1461044b578063aa1346ea1461045e578063b96b161c14610471578063bf73c26c14610484578063c0940ebd14610497575f5ffd5b80638163f231146103bf578063847755e3146103ff5780638d6937b814610412578063921076c714610425578063a6df2c0114610438575f5ffd5b80634c127428116101c1578063652ba33d11610186578063652ba33d14610376578063653cfd811461037e5780636c40d5d614610391578063704876d61461039957806375829def146103ac575f5ffd5b80634c1274281461030a57806354dbe4d11461031d57806359545f45146103305780635c975abb1461035057806362067c8214610363575f5ffd5b80631e26a9dc116102075780631e26a9dc1461029b57806337889655146102bb5780633a86bd3d146102ce57806341a0e2c2146102e157806346bd0a16146102f7575f5ffd5b806304951b86146102385780630b90581b1461026057806316c38b3c1461027357806318677f2a14610288575b5f5ffd5b61024b610246366004612744565b61057e565b60405190151581526020015b60405180910390f35b61024b61026e366004612744565b6105a0565b610286610281366004612794565b6105ae565b005b6102866102963660046127c3565b610637565b6102ae6102a93660046127de565b6106e4565b604051610257919061285a565b61024b6102c9366004612960565b610847565b61024b6102dc366004612a4b565b61085c565b6102e9600181565b604051908152602001610257565b61024b610305366004612b53565b610869565b61024b610318366004612744565b610881565b61024b61032b366004612960565b61088e565b61034361033e366004612b9e565b6109df565b6040516102579190612bcf565b5f5461024b90600160a01b900460ff1681565b61024b610371366004612c05565b610b25565b6102e9600381565b61028661038c366004612b9e565b610d96565b6102e9600281565b61024b6103a7366004612744565b610e38565b6102866103ba3660046127c3565b610e45565b6103e76103cd366004612c4c565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610257565b61024b61040d366004612ce7565b610f13565b610286610420366004612d83565b6110db565b61024b610433366004612744565b61119b565b610286610446366004612dc1565b6111b4565b61024b610459366004612744565b6112de565b61024b61046c366004612960565b6112f7565b6002546103e7906001600160a01b031681565b61024b610492366004612960565b611448565b61024b6104a5366004612960565b6114af565b61024b6104b8366004612b53565b6114bb565b61024b6104cb366004612744565b6114c9565b61024b6104de366004612744565b6114d7565b6104f66104f1366004612b9e565b6114f0565b604080519215158352602083019190915201610257565b61024b61051b366004612744565b611997565b61024b61052e366004612a4b565b6119a4565b61024b610541366004612744565b6119b1565b61024b610554366004612a4b565b6119be565b5f546103e7906001600160a01b031681565b61024b610579366004612a4b565b6119cb565b5f61059761058f8462015180612e3f565b6002846119d8565b90505b92915050565b5f6105978384600285611c33565b5f546001600160a01b031633146105e05760405162461bcd60e51b81526004016105d790612e52565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061062c90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146106605760405162461bcd60e51b81526004016105d790612e52565b6001600160a01b0381166106c25760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016105d7565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61072c60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63ddf3eec96107546060870187612e89565b6107616080890189612ecb565b6040518563ffffffff1660e01b81526004016107809493929190612f68565b5f60405180830381865af415801561079a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107c19190810190612fdd565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae906107fe9084908790600401613036565b5f60405180830381865af4158015610818573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261083f9190810190613059565b949350505050565b5f6105976108568460016131ea565b8361088e565b5f61059783600784611f71565b5f6108778484600385611c33565b90505b9392505050565b5f610597836003846119d8565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c6108b96060880188612e89565b6108c660808a018a612ecb565b6040518563ffffffff1660e01b81526004016108e59493929190612f68565b606060405180830381865af4158015610900573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109249190613203565b925092509250610938838660a0013561209b565b6109545760405162461bcd60e51b81526004016105d790613244565b60ff8116156109cd576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105d7565b5060ff85811691161491505092915050565b60408051606080820183525f8083526020830152918101919091525f73__$144f4fe859debe4776cdef2b99f7b97a42$__634601173c610a226060860186612e89565b610a2f6080880188612ecb565b6040518563ffffffff1660e01b8152600401610a4e9493929190612f68565b5f60405180830381865af4158015610a68573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a8f91908101906132b5565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba690610ac99084906004016132e6565b5f60405180830381865af4158015610ae3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b0a91908101906132f8565b604085015260208401526001600160a01b0316825250919050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610b506060880188612e89565b610b5d60808a018a612ecb565b6040518563ffffffff1660e01b8152600401610b7c9493929190612f68565b606060405180830381865af4158015610b97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbb9190613203565b925092509250610bcf838660a0013561209b565b610beb5760405162461bcd60e51b81526004016105d790613244565b8560ff168760ff161115610c575760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b60648201526084016105d7565b8160ff165f03610ce45760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105d7565b8060ff165f03610d715760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105d7565b8160ff168760ff16148015610d8b57508060ff168660ff16145b979650505050505050565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63fbd24457610dbe6060850185612e89565b610dcb6080870187612ecb565b6040518563ffffffff1660e01b8152600401610dea9493929190612f68565b602060405180830381865af4158015610e05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e299190613343565b9050610e34816120c8565b5050565b5f610597836002846119d8565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b81526004016105d790612e52565b6001600160a01b038116610ec45760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f20616464726573730000000060448201526064016105d7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f5f610f5386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061218992505050565b610fcd57600860028787604051602001610f6e92919061335a565b60408051601f1981840301815290829052610f8891613369565b602060405180830381855afa158015610fa3573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fc69190613343565b901c610fcf565b5f5b90505f61101085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061218992505050565b61108a5760086002868660405160200161102b92919061335a565b60408051601f198184030181529082905261104591613369565b602060405180830381855afa158015611060573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110839190613343565b901c61108c565b5f5b905081898960038181106110a2576110a261337f565b905060200201351480156110ce575080898960048181106110c5576110c561337f565b90506020020135145b9998505050505050505050565b5f546001600160a01b031633146111045760405162461bcd60e51b81526004016105d790612e52565b5f5b818110156111965760015f8484848181106111235761112361337f565b602090810292909201358352508101919091526040015f2080546001600160a01b031916905582828281811061115b5761115b61337f565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101611106565b505050565b5f6105976111ac6201518085613393565b60028461218e565b5f546001600160a01b031633146111dd5760405162461bcd60e51b81526004016105d790612e52565b5f5b838110156112d7578282828181106111f9576111f961337f565b905060200201602081019061120e91906127c3565b60015f8787858181106112235761122361337f565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082828281811061126c5761126c61337f565b905060200201602081019061128191906127c3565b6001600160a01b031685858381811061129c5761129c61337f565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a36001016111df565b5050505050565b5f6105976112ef6201518085613393565b60038461218e565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c6113226060880188612e89565b61132f60808a018a612ecb565b6040518563ffffffff1660e01b815260040161134e9493929190612f68565b606060405180830381865af4158015611369573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138d9190613203565b9250925092506113a1838660a0013561209b565b6113bd5760405162461bcd60e51b81526004016105d790613244565b60ff821615611436576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105d7565b60ff8681169116149250505092915050565b5f5f8360ff161161149b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e2030000060448201526064016105d7565b6105976114a96001856133a6565b836112f7565b5f610597838484610b25565b5f6108778484600285611c33565b5f6105978384600385611c33565b5f6105976114e88462015180612e3f565b6003846119d8565b5f80548190600160a01b900460ff16156115415760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016105d7565b5f61154c8435612392565b905061157a61155e6040860186612ecb565b5f81811061156e5761156e61337f565b905060200201356123eb565b6115a761158a6040860186612ecb565b600181811061159b5761159b61337f565b905060200201356124b3565b6115f16115b76040860186612ecb565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050505060a0860135612571565b6116595760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b60648201526084016105d7565b6116836116696040860186612ecb565b61167660c0880188612e89565b61040d60e08a018a612e89565b6116cf5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f706500000000000000000060448201526064016105d7565b61178a6116df6040860186612ecb565b60059060016116f160408a018a612ecb565b6116fc929150613393565b92611709939291906133bf565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611747925050506060870187612e89565b6117546080890189612ecb565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061259c92505050565b60016117996040860186612ecb565b60016117a86040890189612ecb565b6117b3929150613393565b8181106117c2576117c261337f565b905060200201351415806117e357506117e361012085016101008601612794565b6118405760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b60648201526084016105d7565b600661184f6040860186612ecb565b61185a929150613393565b6118676080860186612ecb565b9050146118c45760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b60648201526084016105d7565b6001600160a01b03811663ea50d0e46118e06020870187612e89565b6118ed6040890189612ecb565b6040518563ffffffff1660e01b815260040161190c9493929190612f68565b602060405180830381865afa158015611927573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b91906133ea565b92505f600161195d6040870187612ecb565b611968929150613393565b90506119776040860186612ecb565b828181106119875761198761337f565b9050602002013592505050915091565b5f6105978360028461218e565b5f61059783600584611f71565b5f6105978360038461218e565b5f61059783600684611f71565b5f61059783600484611f71565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611a036060880188612e89565b611a1060808a018a612ecb565b8b6040518663ffffffff1660e01b8152600401611a31959493929190613419565b606060405180830381865af4158015611a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a70919061346e565b925092509250611a84838660a0013561209b565b611aa05760405162461bcd60e51b81526004016105d790613244565b6002866009811115611ab457611ab4613405565b1480611ad157506003866009811115611acf57611acf613405565b145b611aed5760405162461bcd60e51b81526004016105d790613499565b6002866009811115611b0157611b01613405565b03611ba3578015611b895760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a4016105d7565b611b976383aa7e8083613393565b8714935050505061087a565b8015611c275760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a4016105d7565b508514915061087a9050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611c5e6060880188612e89565b611c6b60808a018a612ecb565b8b6040518663ffffffff1660e01b8152600401611c8c959493929190613419565b606060405180830381865af4158015611ca7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ccb919061346e565b925092509250611cdf838660a0013561209b565b611cfb5760405162461bcd60e51b81526004016105d790613244565b86881115611d635760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b60648201526084016105d7565b6002866009811115611d7757611d77613405565b1480611d9457506003866009811115611d9257611d92613405565b145b611db05760405162461bcd60e51b81526004016105d790613499565b6002866009811115611dc457611dc4613405565b03611eaa57815f03611e595760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a4016105d7565b805f03611e785760405162461bcd60e51b81526004016105d7906134c5565b611e866383aa7e8083613393565b88148015611ea05750611e9d6383aa7e8082613393565b87145b935050505061083f565b815f03611f3b5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a4016105d7565b805f03611f5a5760405162461bcd60e51b81526004016105d79061353d565b8188148015611ea057509095149695505050505050565b5f808073__$144f4fe859debe4776cdef2b99f7b97a42$__6384d40ca0611f9b6060870187612e89565b611fa86080890189612ecb565b8a6040518663ffffffff1660e01b8152600401611fc9959493929190613419565b5f60405180830381865af4158015611fe3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261200a91908101906135b6565b9150915080865114612020575f9250505061087a565b5f5b8181101561208e5761207787828151811061203f5761203f61337f565b60200260200101518483815181106120595761205961337f565b60200260200101518051602091820120825192909101919091201490565b612086575f935050505061087a565b600101612022565b5060019695505050505050565b5f806120a78385612e3f565b90508342101580156120b857508381115b801561083f575042109392505050565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612116573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213a91906133ea565b6121865760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f740060448201526064016105d7565b50565b511590565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f926121b96060880188612e89565b6121c660808a018a612ecb565b8b6040518663ffffffff1660e01b81526004016121e7959493929190613419565b606060405180830381865af4158015612202573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612226919061346e565b92509250925061223a838660a0013561209b565b6122565760405162461bcd60e51b81526004016105d790613244565b81156122d45760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a4016105d7565b60028660098111156122e8576122e8613405565b14806123055750600386600981111561230357612303613405565b145b6123215760405162461bcd60e51b81526004016105d790613499565b600286600981111561233557612335613405565b0361236757805f036123595760405162461bcd60e51b81526004016105d7906134c5565b611b976383aa7e8082613393565b805f036123865760405162461bcd60e51b81526004016105d79061353d565b8614925061087a915050565b5f818152600160205260408120546001600160a01b03168061059a5760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b60448201526064016105d7565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612439573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245d91906133ea565b6121865760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b60648201526084016105d7565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa158015612501573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061252591906133ea565b6121865760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f7400000060448201526064016105d7565b5f5f836002815181106125865761258661337f565b60200260200101515f1c905061083f818461209b565b5f805b82518110156126dd575f60086002878786908887815181106125c3576125c361337f565b6020026020010151886125d69190612e3f565b926125e39392919061366f565b6040516020016125f492919061335a565b60408051601f198184030181529082905261260e91613369565b602060405180830381855afa158015612629573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061264c9190613343565b901c90508682815181106126625761266261337f565b602002602001015181146126ad5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b60448201526064016105d7565b8382815181106126bf576126bf61337f565b6020026020010151836126d29190612e3f565b92505060010161259f565b508083146112d75760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e6774680060448201526064016105d7565b5f610120828403121561273e575f5ffd5b50919050565b5f5f60408385031215612755575f5ffd5b8235915060208301356001600160401b03811115612771575f5ffd5b61277d8582860161272d565b9150509250929050565b8015158114612186575f5ffd5b5f602082840312156127a4575f5ffd5b813561087a81612787565b6001600160a01b0381168114612186575f5ffd5b5f602082840312156127d3575f5ffd5b813561087a816127af565b5f5f604083850312156127ef575f5ffd5b82356001600160401b03811115612804575f5ffd5b6128108582860161272d565b925050602083013561282181612787565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f8251610100602084015261287761012084018261282c565b90506020840151601f19848303016040850152612894828261282c565b9150506040840151601f198483030160608501526128b2828261282c565b9150506060840151601f198483030160808501526128d0828261282c565b9150506080840151601f198483030160a08501526128ee828261282c565b91505060a0840151601f198483030160c085015261290c828261282c565b91505060c0840151601f198483030160e085015261292a828261282c565b91505060e0840151601f1984830301610100850152612949828261282c565b95945050505050565b60ff81168114612186575f5ffd5b5f5f60408385031215612971575f5ffd5b823561297c81612952565b915060208301356001600160401b03811115612771575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b03811182821017156129cd576129cd612996565b60405290565b604051601f8201601f191681016001600160401b03811182821017156129fb576129fb612996565b604052919050565b5f6001600160401b03821115612a1b57612a1b612996565b5060051b60200190565b5f6001600160401b03821115612a3d57612a3d612996565b50601f01601f191660200190565b5f5f60408385031215612a5c575f5ffd5b82356001600160401b03811115612a71575f5ffd5b8301601f81018513612a81575f5ffd5b8035612a94612a8f82612a03565b6129d3565b8082825260208201915060208360051b850101925087831115612ab5575f5ffd5b602084015b83811015612b355780356001600160401b03811115612ad7575f5ffd5b8501603f81018a13612ae7575f5ffd5b6020810135612af8612a8f82612a25565b8181526040838301018c1015612b0c575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612aba565b50945050505060208301356001600160401b03811115612771575f5ffd5b5f5f5f60608486031215612b65575f5ffd5b833592506020840135915060408401356001600160401b03811115612b88575f5ffd5b612b948682870161272d565b9150509250925092565b5f60208284031215612bae575f5ffd5b81356001600160401b03811115612bc3575f5ffd5b61083f8482850161272d565b6020815260018060a01b038251166020820152602082015160408201525f604083015160608084015261083f608084018261282c565b5f5f5f60608486031215612c17575f5ffd5b8335612c2281612952565b92506020840135612c3281612952565b915060408401356001600160401b03811115612b88575f5ffd5b5f60208284031215612c5c575f5ffd5b5035919050565b5f5f83601f840112612c73575f5ffd5b5081356001600160401b03811115612c89575f5ffd5b6020830191508360208260051b8501011115612ca3575f5ffd5b9250929050565b5f5f83601f840112612cba575f5ffd5b5081356001600160401b03811115612cd0575f5ffd5b602083019150836020828501011115612ca3575f5ffd5b5f5f5f5f5f5f60608789031215612cfc575f5ffd5b86356001600160401b03811115612d11575f5ffd5b612d1d89828a01612c63565b90975095505060208701356001600160401b03811115612d3b575f5ffd5b612d4789828a01612caa565b90955093505060408701356001600160401b03811115612d65575f5ffd5b612d7189828a01612caa565b979a9699509497509295939492505050565b5f5f60208385031215612d94575f5ffd5b82356001600160401b03811115612da9575f5ffd5b612db585828601612c63565b90969095509350505050565b5f5f5f5f60408587031215612dd4575f5ffd5b84356001600160401b03811115612de9575f5ffd5b612df587828801612c63565b90955093505060208501356001600160401b03811115612e13575f5ffd5b612e1f87828801612c63565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561059a5761059a612e2b565b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f5f8335601e19843603018112612e9e575f5ffd5b8301803591506001600160401b03821115612eb7575f5ffd5b602001915036819003821315612ca3575f5ffd5b5f5f8335601e19843603018112612ee0575f5ffd5b8301803591506001600160401b03821115612ef9575f5ffd5b6020019150600581901b3603821315612ca3575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b03831115612f4f575f5ffd5b8260051b80836020870137939093016020019392505050565b604081525f612f7b604083018688612f10565b8281036020840152610d8b818587612f38565b5f82601f830112612f9d575f5ffd5b8151602083015f612fb0612a8f84612a25565b9050828152858383011115612fc3575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f5f60408385031215612fee575f5ffd5b82516001600160401b03811115613003575f5ffd5b61300f85828601612f8e565b92505060208301516001600160401b0381111561302a575f5ffd5b61277d85828601612f8e565b604081525f613048604083018561282c565b905082151560208301529392505050565b5f60208284031215613069575f5ffd5b81516001600160401b0381111561307e575f5ffd5b82016101008185031215613090575f5ffd5b6130986129aa565b81516001600160401b038111156130ad575f5ffd5b6130b986828501612f8e565b82525060208201516001600160401b038111156130d4575f5ffd5b6130e086828501612f8e565b60208301525060408201516001600160401b038111156130fe575f5ffd5b61310a86828501612f8e565b60408301525060608201516001600160401b03811115613128575f5ffd5b61313486828501612f8e565b60608301525060808201516001600160401b03811115613152575f5ffd5b61315e86828501612f8e565b60808301525060a08201516001600160401b0381111561317c575f5ffd5b61318886828501612f8e565b60a08301525060c08201516001600160401b038111156131a6575f5ffd5b6131b286828501612f8e565b60c08301525060e08201516001600160401b038111156131d0575f5ffd5b6131dc86828501612f8e565b60e083015250949350505050565b60ff818116838216019081111561059a5761059a612e2b565b5f5f5f60608486031215613215575f5ffd5b8351602085015190935061322881612952565b604085015190925061323981612952565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b5f602082840312156132c5575f5ffd5b81516001600160401b038111156132da575f5ffd5b61083f84828501612f8e565b602081525f610597602083018461282c565b5f5f5f6060848603121561330a575f5ffd5b8351613315816127af565b6020850151604086015191945092506001600160401b03811115613337575f5ffd5b612b9486828701612f8e565b5f60208284031215613353575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059a5761059a612e2b565b60ff828116828216039081111561059a5761059a612e2b565b5f5f858511156133cd575f5ffd5b838611156133d9575f5ffd5b5050600583901b0193919092039150565b5f602082840312156133fa575f5ffd5b815161087a81612787565b634e487b7160e01b5f52602160045260245ffd5b606081525f61342c606083018789612f10565b828103602084015261343f818688612f38565b915050600a831061345e57634e487b7160e01b5f52602160045260245ffd5b8260408301529695505050505050565b5f5f5f60608486031215613480575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f604083850312156135c7575f5ffd5b82516001600160401b038111156135dc575f5ffd5b8301601f810185136135ec575f5ffd5b80516135fa612a8f82612a03565b8082825260208201915060208360051b85010192508783111561361b575f5ffd5b602084015b8381101561365b5780516001600160401b0381111561363d575f5ffd5b61364c8a602083890101612f8e565b84525060209283019201613620565b506020969096015195979596505050505050565b5f5f8585111561367d575f5ffd5b83861115613689575f5ffd5b505082019391909203915056fea26469706673582212201ad0934c58c94945ad619ae11884148cc3af0f513c363543f6833c83eb4947ff64736f6c634300081d0033",
955
- sourceMap: "620:27253:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12931:206;;;;;;:::i;:::-;;:::i;:::-;;;864:14:33;;857:22;839:41;;827:2;812:18;12931:206:26;;;;;;;;14970:192;;;;;;:::i;:::-;;:::i;2441:118::-;;;;;;:::i;:::-;;:::i;:::-;;3092:206;;;;;;:::i;:::-;;:::i;3833:369::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5263:169::-;;;;;;:::i;:::-;;:::i;20967:230::-;;;;;;:::i;:::-;;:::i;652:69::-;;718:1;652:69;;;;;7807:25:33;;;7795:2;7780:18;652:69:26;7661:177:33;16515:227:26;;;;;;:::i;:::-;;:::i;15468:207::-;;;;;;:::i;:::-;;:::i;4480:541::-;;;;;;:::i;:::-;;:::i;21363:347::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;890:18::-;;;;;-1:-1:-1;;;890:18:26;;;;;;5757:766;;;;;;:::i;:::-;;:::i;794:67::-;;858:1;794:67;;21861:271;;;;;;:::i;:::-;;:::i;725:65::-;;787:1;725:65;;12463:204;;;;;;:::i;:::-;;:::i;2208:229::-;;;;;;:::i;:::-;;:::i;998:53::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;998:53:26;;;;;;-1:-1:-1;;;;;10373:32:33;;;10355:51;;10343:2;10328:18;998:53:26;10209:203:33;22471:706:26;;;;;;:::i;:::-;;:::i;2857:231::-;;;;;;:::i;:::-;;:::i;14490:210::-;;;;;;:::i;:::-;;:::i;2563:290::-;;;;;;:::i;:::-;;:::i;17533:211::-;;;;;;:::i;:::-;;:::i;6801:541::-;;;;;;:::i;:::-;;:::i;1125:33::-;;;;;-1:-1:-1;;;;;1125:33:26;;;7584:228;;;;;;:::i;:::-;;:::i;8060:159::-;;;;;;:::i;:::-;;:::i;13490:224::-;;;;;;:::i;:::-;;:::i;18020:195::-;;;;;;:::i;:::-;;:::i;15945:209::-;;;;;;:::i;:::-;;:::i;25096:2775::-;;;;;;:::i;:::-;;:::i;:::-;;;;13833:14:33;;13826:22;13808:41;;13880:2;13865:18;;13858:34;;;;13781:18;25096:2775:26;13640:258:33;14017:206:26;;;;;;:::i;:::-;;:::i;20334:223::-;;;;;;:::i;:::-;;:::i;17051:209::-;;;;;;:::i;:::-;;:::i;19703:229::-;;;;;;:::i;:::-;;:::i;866:20::-;;;;;-1:-1:-1;;;;;866:20:26;;;19149:222;;;;;;:::i;:::-;;:::i;12931:206::-;13048:4;13067:65;13086:16;:7;13096:6;13086:16;:::i;:::-;13104:19;13125:6;13067:18;:65::i;:::-;13060:72;;12931:206;;;;;:::o;14970:192::-;15084:4;15103:54;15117:4;15123;15129:19;15150:6;15103:13;:54::i;2441:118::-;2071:5;;-1:-1:-1;;;;;2071:5:26;2057:10;:19;2049:58;;;;-1:-1:-1;;;2049:58:26;;;;;;;:::i;:::-;;;;;;;;;2499:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;2499:16:26::1;-1:-1:-1::0;;;;2499:16:26;;::::1;;::::0;;2526:28:::1;::::0;::::1;::::0;::::1;::::0;2508:7;864:14:33;857:22;839:41;;827:2;812:18;;699:187;2526:28:26::1;;;;;;;;2441:118:::0;:::o;3092:206::-;2071:5;;-1:-1:-1;;;;;2071:5:26;2057:10;:19;2049:58;;;;-1:-1:-1;;;2049:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;3176:27:26;::::1;3168:76;;;::::0;-1:-1:-1;;;3168:76:26;;14722:2:33;3168:76:26::1;::::0;::::1;14704:21:33::0;14761:2;14741:18;;;14734:30;14800:34;14780:18;;;14773:62;-1:-1:-1;;;14851:18:33;;;14844:34;14895:19;;3168:76:26::1;14520:400:33::0;3168:76:26::1;3250:12;:43:::0;;-1:-1:-1;;;;;;3250:43:26::1;-1:-1:-1::0;;;;;3250:43:26;;;::::1;::::0;;;::::1;::::0;;3092:206::o;3833:369::-;3952:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3952:34:26;3997:26;4027:15;:38;4066:22;;;;:6;:22;:::i;:::-;4090:27;;;;:6;:27;:::i;:::-;4027:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4027:91:26;;;;;;;;;;;;:::i;:::-;4140:57;;-1:-1:-1;;;4140:57:26;;3994:124;;-1:-1:-1;4140:15:26;;-1:-1:-1;4140:32:26;;:57;;3994:124;;4188:8;;4140:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4140:57:26;;;;;;;;;;;;:::i;:::-;4124:73;3833:369;-1:-1:-1;;;;3833:369:26:o;5263:169::-;5371:4;5390:37;5408:10;:6;5417:1;5408:10;:::i;:::-;5420:6;5390:17;:37::i;20967:230::-;21099:4;21118:74;21135:11;21148:35;21185:6;21118:16;:74::i;16515:227::-;16656:4;16675:62;16689:7;16698;16707:21;16730:6;16675:13;:62::i;:::-;16668:69;;16515:227;;;;;;:::o;15468:207::-;15593:4;15612:58;15631:7;15640:21;15663:6;15612:18;:58::i;4480:541::-;4595:4;;;;4653:15;:33;4687:22;;;;:6;:22;:::i;:::-;4711:27;;;;:6;:27;:::i;:::-;4653:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4607:132;;;;;;4753:66;4775:11;4788:6;:30;;;4753:21;:66::i;:::-;4745:154;;;;-1:-1:-1;;;4745:154:26;;;;;;;:::i;:::-;4913:8;;;;4905:85;;;;;-1:-1:-1;;;4905:85:26;;21776:2:33;4905:85:26;;;21758:21:33;21795:18;;;21788:30;;;;21854:34;21834:18;;;21827:62;21925:34;21905:18;;;21898:62;21977:19;;4905:85:26;21574:428:33;4905:85:26;-1:-1:-1;5003:13:26;;;;;;;;-1:-1:-1;;4480:541:26;;;;:::o;21363:347::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;21489:17:26;21509:15;:34;21544:22;;;;:6;:22;:::i;:::-;21568:27;;;;:6;:27;:::i;:::-;21509:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21509:87:26;;;;;;;;;;;;:::i;:::-;21671:34;;-1:-1:-1;;;21671:34:26;;21489:107;;-1:-1:-1;21671:15:26;;:28;;:34;;21489:107;;21671:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21671:34:26;;;;;;;;;;;;:::i;:::-;21647:20;;;21602:103;21628:17;;;21602:103;-1:-1:-1;;;;;21602:103:26;;;-1:-1:-1;21603:9:26;21363:347;-1:-1:-1;21363:347:26:o;5757:766::-;5885:4;;;;5943:15;:33;5977:22;;;;:6;:22;:::i;:::-;6001:27;;;;:6;:27;:::i;:::-;5943:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5897:132;;;;;;6043:66;6065:11;6078:6;:30;;;6043:21;:66::i;:::-;6035:154;;;;-1:-1:-1;;;6035:154:26;;;;;;;:::i;:::-;6213:6;6203:16;;:6;:16;;;;6195:74;;;;-1:-1:-1;;;6195:74:26;;23362:2:33;6195:74:26;;;23344:21:33;23401:2;23381:18;;;23374:30;23440:34;23420:18;;;23413:62;-1:-1:-1;;;23491:18:33;;;23484:43;23544:19;;6195:74:26;23160:409:33;6195:74:26;6283:3;:8;;6290:1;6283:8;6275:97;;;;-1:-1:-1;;;6275:97:26;;23776:2:33;6275:97:26;;;23758:21:33;23815:2;23795:18;;;23788:30;23854:34;23834:18;;;23827:62;23925:34;23905:18;;;23898:62;-1:-1:-1;;;23976:19:33;;;23969:43;24029:19;;6275:97:26;23574:480:33;6275:97:26;6386:3;:8;;6393:1;6386:8;6378:97;;;;-1:-1:-1;;;6378:97:26;;24261:2:33;6378:97:26;;;24243:21:33;24300:2;24280:18;;;24273:30;24339:34;24319:18;;;24312:62;24410:34;24390:18;;;24383:62;-1:-1:-1;;;24461:19:33;;;24454:43;24514:19;;6378:97:26;24059:480:33;6378:97:26;6498:3;6488:13;;:6;:13;;;:30;;;;;6515:3;6505:13;;:6;:13;;;6488:30;6481:37;5757:766;-1:-1:-1;;;;;;;5757:766:26:o;21861:271::-;21958:26;21987:15;:39;22027:22;;;;:6;:22;:::i;:::-;22051:27;;;;:6;:27;:::i;:::-;21987:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21958:121;;22085:42;22108:18;22085:22;:42::i;:::-;21952:180;21861:271;:::o;12463:204::-;12587:4;12606:56;12625:7;12634:19;12655:6;12606:18;:56::i;2208:229::-;2071:5;;-1:-1:-1;;;;;2071:5:26;2057:10;:19;2049:58;;;;-1:-1:-1;;;2049:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;2282:22:26;::::1;2274:63;;;::::0;-1:-1:-1;;;2274:63:26;;24935:2:33;2274:63:26::1;::::0;::::1;24917:21:33::0;24974:2;24954:18;;;24947:30;25013;24993:18;;;24986:58;25061:18;;2274:63:26::1;24733:352:33::0;2274:63:26::1;2343:16;2362:5:::0;;-1:-1:-1;;;;;2373:16:26;;::::1;-1:-1:-1::0;;;;;;2373:16:26;::::1;::::0;::::1;::::0;;2400:32:::1;::::0;2362:5;;;::::1;::::0;;;2400:32:::1;::::0;2343:16;2400:32:::1;2268:169;2208:229:::0;:::o;22471:706::-;22610:4;22724:17;22744:27;22764:6;;22744:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22744:19:26;;-1:-1:-1;;;22744:27:26:i;:::-;:92;;22835:1;22799:32;22823:6;;22806:24;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;22806:24:26;;;;;;;;;;22799:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;22744:92;;;22788:1;22744:92;22724:112;;22936:20;22959:26;22979:5;;22959:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22959:19:26;;-1:-1:-1;;;22959:26:26:i;:::-;:90;;23048:1;23013:31;23037:5;;23020:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23020:23:26;;;;;;;;;;23013:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;22959:90;;;23002:1;22959:90;22936:113;;23103:9;23062:12;;1073:1:19;23062:37:26;;;;;;;:::i;:::-;;;;;;;:50;:110;;;;;23160:12;23116;;1112:1:19;23116:40:26;;;;;;;:::i;:::-;;;;;;;:56;23062:110;23055:117;22471:706;-1:-1:-1;;;;;;;;;22471:706:26:o;2857:231::-;2071:5;;-1:-1:-1;;;;;2071:5:26;2057:10;:19;2049:58;;;;-1:-1:-1;;;2049:58:26;;;;;;;:::i;:::-;2943:9:::1;2938:146;2958:21:::0;;::::1;2938:146;;;3001:18;:33;3020:10;;3031:1;3020:13;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;3001:33:::0;;-1:-1:-1;3001:33:26;::::1;::::0;;;;;;-1:-1:-1;3001:33:26;2994:40;;-1:-1:-1;;;;;;2994:40:26::1;::::0;;3063:10;;3074:1;3063:13;;::::1;;;;;:::i;:::-;;;;;;;3047:30;;;;;;;;;;2981:3;;2938:146;;;;2857:231:::0;;:::o;14490:210::-;14610:4;14629:66;14649:16;14659:6;14649:7;:16;:::i;:::-;14667:19;14688:6;14629:19;:66::i;2563:290::-;2071:5;;-1:-1:-1;;;;;2071:5:26;2057:10;:19;2049:58;;;;-1:-1:-1;;;2049:58:26;;;;;;;:::i;:::-;2688:9:::1;2683:166;2703:21:::0;;::::1;2683:166;;;2775:9;;2785:1;2775:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2739:18;:33;2758:10;;2769:1;2758:13;;;;;;;:::i;:::-;;;;;;;2739:33;;;;;;;;;;;;:48;;;;;-1:-1:-1::0;;;;;2739:48:26::1;;;;;-1:-1:-1::0;;;;;2739:48:26::1;;;;;;2829:9;;2839:1;2829:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2800:42:26::1;2814:10;;2825:1;2814:13;;;;;;;:::i;:::-;;;;;;;2800:42;;;;;;;;;;2726:3;;2683:166;;;;2563:290:::0;;;;:::o;17533:211::-;17652:4;17671:68;17691:16;17701:6;17691:7;:16;:::i;:::-;17709:21;17732:6;17671:19;:68::i;6801:541::-;6916:4;;;;6974:15;:33;7008:22;;;;:6;:22;:::i;:::-;7032:27;;;;:6;:27;:::i;:::-;6974:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6928:132;;;;;;7074:66;7096:11;7109:6;:30;;;7074:21;:66::i;:::-;7066:154;;;;-1:-1:-1;;;7066:154:26;;;;;;;:::i;:::-;7234:8;;;;7226:85;;;;;-1:-1:-1;;;7226:85:26;;26141:2:33;7226:85:26;;;26123:21:33;26160:18;;;26153:30;;;;26219:34;26199:18;;;26192:62;26290:34;26270:18;;;26263:62;26342:19;;7226:85:26;25939:428:33;7226:85:26;7324:13;;;;;;;;-1:-1:-1;;;6801:541:26;;;;:::o;7584:228::-;7692:4;7721:1;7712:6;:10;;;7704:53;;;;-1:-1:-1;;;7704:53:26;;26574:2:33;7704:53:26;;;26556:21:33;26613:2;26593:18;;;26586:30;26652:32;26632:18;;;26625:60;26702:18;;7704:53:26;26372:354:33;7704:53:26;7770:37;7788:10;7797:1;7788:6;:10;:::i;:::-;7800:6;7770:17;:37::i;8060:159::-;8165:4;8184:30;8197:3;8202;8207:6;8184:12;:30::i;13490:224::-;13630:4;13649:60;13663:7;13672;13681:19;13702:6;13649:13;:60::i;18020:195::-;18135:4;18154:56;18168:4;18174;18180:21;18203:6;18154:13;:56::i;15945:209::-;16063:4;16082:67;16101:16;:7;16111:6;16101:16;:::i;:::-;16119:21;16142:6;16082:18;:67::i;25096:2775::-;25203:12;2163:6;;25203:12;;-1:-1:-1;;;2163:6:26;;;;2162:7;2154:38;;;;-1:-1:-1;;;2154:38:26;;27089:2:33;2154:38:26;;;27071:21:33;27128:2;27108:18;;;27101:30;-1:-1:-1;;;27147:18:33;;;27140:48;27205:18;;2154:38:26;26887:342:33;2154:38:26;25326:16:::1;25345:29;25358:15:::0;::::1;25345:12;:29::i;:::-;25326:48:::0;-1:-1:-1;25423:90:26::1;25448:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;942:1:19;25448:64:26;;;;;;;:::i;:::-;;;;;;;25423:24;:90::i;:::-;25558:82;25579:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;994:1:19;25579:60:26;;;;;;;:::i;:::-;;;;;;;25558:20;:82::i;:::-;25698:62;25708:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;25698:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;25729:30:26::1;::::0;::::1;;25698:9;:62::i;:::-;25683:144;;;::::0;-1:-1:-1;;;25683:144:26;;27986:2:33;25683:144:26::1;::::0;::::1;27968:21:33::0;28025:2;28005:18;;;27998:30;28064:34;28044:18;;;28037:62;-1:-1:-1;;;28115:18:33;;;28108:49;28174:19;;25683:144:26::1;27784:415:33::0;25683:144:26::1;26171:62;26184:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;26205:13;;::::0;::::1;:6:::0;:13:::1;:::i;:::-;26220:12;;::::0;::::1;:6:::0;:12:::1;:::i;26171:62::-;26163:98;;;::::0;-1:-1:-1;;;26163:98:26;;28933:2:33;26163:98:26::1;::::0;::::1;28915:21:33::0;28972:2;28952:18;;;28945:30;29011:25;28991:18;;;28984:53;29054:18;;26163:98:26::1;28731:347:33::0;26163:98:26::1;26329:244;26415:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;1160:1:19;::::0;26500::26::1;26471:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;26471:30:26::1;:::i;:::-;26415:87;;;;;;;:::i;:::-;26329:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26510:22:26::1;::::0;-1:-1:-1;;;26510:22:26::1;::::0;::::1;::::0;::::1;:::i;:::-;26540:27;;::::0;::::1;:6:::0;:27:::1;:::i;:::-;26329:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26329:21:26::1;::::0;-1:-1:-1;;;26329:244:26:i:1;:::-;26962:1;26891:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;26940:1;26911:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;26911:30:26::1;:::i;:::-;26891:51;;;;;;;:::i;:::-;;;;;;;:74;;:92;;;-1:-1:-1::0;26969:14:26::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;26876:163;;;::::0;-1:-1:-1;;;26876:163:26;;29645:2:33;26876:163:26::1;::::0;::::1;29627:21:33::0;29684:2;29664:18;;;29657:30;29723:34;29703:18;;;29696:62;-1:-1:-1;;;29774:18:33;;;29767:38;29822:19;;26876:163:26::1;29443:404:33::0;26876:163:26::1;1299:1:19;27257:19:26;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:86;::::0;;-1:-1:-1;27257:86:26::1;:::i;:::-;27219:27;;::::0;::::1;:6:::0;:27:::1;:::i;:::-;:34;;:124;27211:174;;;::::0;-1:-1:-1;;;27211:174:26;;30054:2:33;27211:174:26::1;::::0;::::1;30036:21:33::0;30093:2;30073:18;;;30066:30;30132:34;30112:18;;;30105:62;-1:-1:-1;;;30183:18:33;;;30176:35;30228:19;;27211:174:26::1;29852:401:33::0;27211:174:26::1;-1:-1:-1::0;;;;;27504:26:26;::::1;;27531:12;;::::0;::::1;:6:::0;:12:::1;:::i;:::-;27545:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;27504:61;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27494:71:::0;-1:-1:-1;27628:29:26::1;27689:1;27660:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;27660:30:26::1;:::i;:::-;27628:62:::0;-1:-1:-1;27715:19:26::1;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;27735:21;27715:42;;;;;;;:::i;:::-;;;;;;;27696:61;;27832:34;;25096:2775:::0;;;:::o;14017:206::-;14142:4;14161:57;14181:7;14190:19;14211:6;14161:19;:57::i;20334:223::-;20463:4;20482:70;20499:11;20512:31;20545:6;20482:16;:70::i;17051:209::-;17177:4;17196:59;17216:7;17225:21;17248:6;17196:19;:59::i;19703:229::-;19834:4;19853:74;19870:11;19883:35;19920:6;19853:16;:74::i;19149:222::-;19277:4;19296:70;19313:11;19326:31;19359:6;19296:16;:70::i;8223:1133::-;8368:4;;;;8430:15;:34;8465:22;;;;:6;:22;:::i;:::-;8489:27;;;;:6;:27;:::i;:::-;8518:9;8430:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8380:148;;;;;;8542:66;8564:11;8577:6;:30;;;8542:21;:66::i;:::-;8534:154;;;;-1:-1:-1;;;8534:154:26;;;;;;;:::i;:::-;8715:19;8702:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;8751:21:26;8738:9;:34;;;;;;;;:::i;:::-;;8702:70;8694:101;;;;-1:-1:-1;;;8694:101:26;;;;;;;:::i;:::-;8818:19;8805:9;:32;;;;;;;;:::i;:::-;;8801:551;;8855:8;;8847:91;;;;-1:-1:-1;;;8847:91:26;;32856:2:33;8847:91:26;;;32838:21:33;32895:2;32875:18;;;32868:30;32934:34;32914:18;;;32907:62;33005:34;32985:18;;;32978:62;-1:-1:-1;;;33056:19:33;;;33049:37;33103:19;;8847:91:26;32654:474:33;8847:91:26;9168:35;144:10:19;9168:3:26;:35;:::i;:::-;9157:7;:46;9150:53;;;;;;;8801:551;9232:8;;9224:92;;;;-1:-1:-1;;;9224:92:26;;33335:2:33;9224:92:26;;;33317:21:33;33374:2;33354:18;;;33347:30;33413:34;33393:18;;;33386:62;33484:34;33464:18;;;33457:62;-1:-1:-1;;;33535:19:33;;;33528:38;33583:19;;9224:92:26;33133:475:33;9224:92:26;-1:-1:-1;9331:14:26;;;-1:-1:-1;9324:21:26;;-1:-1:-1;9324:21:26;9360:1549;9521:4;;;;9583:15;:34;9618:22;;;;:6;:22;:::i;:::-;9642:27;;;;:6;:27;:::i;:::-;9671:9;9583:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9533:148;;;;;;9695:66;9717:11;9730:6;:30;;;9695:21;:66::i;:::-;9687:154;;;;-1:-1:-1;;;9687:154:26;;;;;;;:::i;:::-;9866:7;9855;:18;;9847:78;;;;-1:-1:-1;;;9847:78:26;;33815:2:33;9847:78:26;;;33797:21:33;33854:2;33834:18;;;33827:30;33893:34;33873:18;;;33866:62;-1:-1:-1;;;33944:18:33;;;33937:45;33999:19;;9847:78:26;33613:411:33;9847:78:26;9952:19;9939:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;9988:21:26;9975:9;:34;;;;;;;;:::i;:::-;;9939:70;9931:101;;;;-1:-1:-1;;;9931:101:26;;;;;;;:::i;:::-;10055:19;10042:9;:32;;;;;;;;:::i;:::-;;10038:867;;10092:3;10099:1;10092:8;10084:103;;;;-1:-1:-1;;;10084:103:26;;34231:2:33;10084:103:26;;;34213:21:33;34270:2;34250:18;;;34243:30;34309:34;34289:18;;;34282:62;34380:34;34360:18;;;34353:62;-1:-1:-1;;;34431:19:33;;;34424:49;34490:19;;10084:103:26;34029:486:33;10084:103:26;10203:3;10210:1;10203:8;10195:103;;;;-1:-1:-1;;;10195:103:26;;;;;;;:::i;:::-;10529:35;144:10:19;10529:3:26;:35;:::i;:::-;10518:7;:46;:96;;;;-1:-1:-1;10579:35:26;144:10:19;10579:3:26;:35;:::i;:::-;10568:7;:46;10518:96;10511:103;;;;;;;10038:867;10643:3;10650:1;10643:8;10635:104;;;;-1:-1:-1;;;10635:104:26;;35213:2:33;10635:104:26;;;35195:21:33;35252:2;35232:18;;;35225:30;35291:34;35271:18;;;35264:62;35362:34;35342:18;;;35335:62;-1:-1:-1;;;35413:19:33;;;35406:50;35473:19;;10635:104:26;35011:487:33;10635:104:26;10755:3;10762:1;10755:8;10747:104;;;;-1:-1:-1;;;10747:104:26;;;;;;;:::i;:::-;10877:3;10866:7;:14;:32;;;;-1:-1:-1;10884:14:26;;;;9360:1549;-1:-1:-1;;;;;;9360:1549:26:o;18219:606::-;18374:4;;;18455:15;:37;18493:22;;;;:6;:22;:::i;:::-;18517:27;;;;:6;:27;:::i;:::-;18546:9;18455:101;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18455:101:26;;;;;;;;;;;;:::i;:::-;18386:170;;;;18588:22;18566:11;:18;:44;18562:77;;18627:5;18620:12;;;;;;18562:77;18649:9;18644:160;18668:22;18664:1;:26;18644:160;;;18710:55;18729:11;18741:1;18729:14;;;;;;;;:::i;:::-;;;;;;;18745:16;18762:1;18745:19;;;;;;;;:::i;:::-;;;;;;;234::24;;;;;;;211;;;;;;;;;;:42;;119:139;18710:55:26;18705:93;;18784:5;18777:12;;;;;;;18705:93;18692:3;;18644:160;;;-1:-1:-1;18816:4:26;;18219:606;-1:-1:-1;;;;;;18219:606:26:o;392:337:20:-;500:4;;546:35;558:23;546:9;:35;:::i;:::-;512:69;;619:9;600:15;:28;;:73;;;;;664:9;638:23;:35;600:73;:124;;;;-1:-1:-1;709:15:20;-1:-1:-1;683:41:20;392:337;-1:-1:-1;;;392:337:20:o;24599:204:26:-;24689:12;;:62;;-1:-1:-1;;;24689:62:26;;858:1;24689:62;;;37347:25:33;37388:18;;;37381:34;;;-1:-1:-1;;;;;24689:12:26;;;;:24;;37320:18:33;;24689:62:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24674:124;;;;-1:-1:-1;;;24674:124:26;;37628:2:33;24674:124:26;;;37610:21:33;37667:2;37647:18;;;37640:30;37706:33;37686:18;;;37679:61;37757:18;;24674:124:26;37426:355:33;24674:124:26;24599:204;:::o;262:101:24:-;338:15;:20;;262:101::o;10913:1250:26:-;11059:4;;;;11121:15;:34;11156:22;;;;:6;:22;:::i;:::-;11180:27;;;;:6;:27;:::i;:::-;11209:9;11121:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11071:148;;;;;;11233:66;11255:11;11268:6;:30;;;11233:21;:66::i;:::-;11225:154;;;;-1:-1:-1;;;11225:154:26;;;;;;;:::i;:::-;11393:8;;11385:86;;;;-1:-1:-1;;;11385:86:26;;37988:2:33;11385:86:26;;;37970:21:33;38027:2;38007:18;;;38000:30;38066:34;38046:18;;;38039:62;38137:34;38117:18;;;38110:62;-1:-1:-1;;;38188:19:33;;;38181:32;38230:19;;11385:86:26;37786:469:33;11385:86:26;11498:19;11485:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;11534:21:26;11521:9;:34;;;;;;;;:::i;:::-;;11485:70;11477:101;;;;-1:-1:-1;;;11477:101:26;;;;;;;:::i;:::-;11601:19;11588:9;:32;;;;;;;;:::i;:::-;;11584:575;;11638:3;11645:1;11638:8;11630:103;;;;-1:-1:-1;;;11630:103:26;;;;;;;:::i;:::-;11963:35;144:10:19;11963:3:26;:35;:::i;11584:575::-;12027:3;12034:1;12027:8;12019:104;;;;-1:-1:-1;;;12019:104:26;;;;;;;:::i;:::-;12138:14;;;-1:-1:-1;12131:21:26;;-1:-1:-1;;12131:21:26;23969:210;24032:7;24066:28;;;:18;:28;;;;;;-1:-1:-1;;;;;24066:28:26;;24100:53;;;;-1:-1:-1;;;24100:53:26;;38462:2:33;24100:53:26;;;38444:21:33;38501:2;38481:18;;;38474:30;-1:-1:-1;;;38520:18:33;;;38513:48;38578:18;;24100:53:26;38260:342:33;24183:214:26;24277:12;;:66;;-1:-1:-1;;;24277:66:26;;:12;:66;;;37347:25:33;37388:18;;;37381:34;;;-1:-1:-1;;;;;24277:12:26;;;;:24;;37320:18:33;;24277:66:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24262:130;;;;-1:-1:-1;;;24262:130:26;;38809:2:33;24262:130:26;;;38791:21:33;38848:2;38828:18;;;38821:30;38887:34;38867:18;;;38860:62;-1:-1:-1;;;38938:18:33;;;38931:31;38979:19;;24262:130:26;38607:397:33;24401:194:26;24487:12;;;:58;;-1:-1:-1;;;24487:58:26;;;;;37347:25:33;;;;37388:18;;;37381:34;;;-1:-1:-1;;;;;24487:12:26;;:24;;37320:18:33;;24487:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24472:118;;;;-1:-1:-1;;;24472:118:26;;39211:2:33;24472:118:26;;;39193:21:33;39250:2;39230:18;;;39223:30;39289:31;39269:18;;;39262:59;39338:18;;24472:118:26;39009:353:33;3302:300:26;3420:4;3432:28;3471:12;1037:1:19;3471:44:26;;;;;;;;:::i;:::-;;;;;;;3463:53;;3432:84;;3529:68;3551:20;3573:23;3529:21;:68::i;23181:784::-;23354:14;;23378:410;23402:20;:27;23398:1;:31;23378:410;;;23524:28;23657:1;23555:98;23588:15;;23604:6;23588:56;23620:20;23641:1;23620:23;;;;;;;;:::i;:::-;;;;;;;23611:6;:32;;;;:::i;:::-;23588:56;;;;;;;:::i;:::-;23571:74;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23571:74:26;;;;;;;;;;23555:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:103;;23524:134;;23698:16;23715:1;23698:19;;;;;;;;:::i;:::-;;;;;;;23674:20;:43;23666:74;;;;-1:-1:-1;;;23666:74:26;;40187:2:33;23666:74:26;;;40169:21:33;40226:2;40206:18;;;40199:30;-1:-1:-1;;;40245:18:33;;;40238:48;40303:18;;23666:74:26;39985:342:33;23666:74:26;23758:20;23779:1;23758:23;;;;;;;;:::i;:::-;;;;;;;23748:33;;;;;:::i;:::-;;-1:-1:-1;;23431:3:26;;23378:410;;;-1:-1:-1;23892:32:26;;;23884:76;;;;-1:-1:-1;;;23884:76:26;;40534:2:33;23884:76:26;;;40516:21:33;40573:2;40553:18;;;40546:30;40612:33;40592:18;;;40585:61;40663:18;;23884:76:26;40332:355:33;14:172;90:5;135:3;126:6;121:3;117:16;113:26;110:46;;;152:1;149;142:12;110:46;-1:-1:-1;174:6:33;14:172;-1:-1:-1;14:172:33:o;191:503::-;303:6;311;364:2;352:9;343:7;339:23;335:32;332:52;;;380:1;377;370:12;332:52;425:23;;;-1:-1:-1;523:2:33;508:18;;495:32;-1:-1:-1;;;;;539:30:33;;536:50;;;582:1;579;572:12;536:50;605:83;680:7;671:6;660:9;656:22;605:83;:::i;:::-;595:93;;;191:503;;;;;:::o;891:118::-;977:5;970:13;963:21;956:5;953:32;943:60;;999:1;996;989:12;1014:241;1070:6;1123:2;1111:9;1102:7;1098:23;1094:32;1091:52;;;1139:1;1136;1129:12;1091:52;1178:9;1165:23;1197:28;1219:5;1197:28;:::i;1260:131::-;-1:-1:-1;;;;;1335:31:33;;1325:42;;1315:70;;1381:1;1378;1371:12;1396:247;1455:6;1508:2;1496:9;1487:7;1483:23;1479:32;1476:52;;;1524:1;1521;1514:12;1476:52;1563:9;1550:23;1582:31;1607:5;1582:31;:::i;1648:518::-;1757:6;1765;1818:2;1806:9;1797:7;1793:23;1789:32;1786:52;;;1834:1;1831;1824:12;1786:52;1874:9;1861:23;-1:-1:-1;;;;;1899:6:33;1896:30;1893:50;;;1939:1;1936;1929:12;1893:50;1962:83;2037:7;2028:6;2017:9;2013:22;1962:83;:::i;:::-;1952:93;;;2095:2;2084:9;2080:18;2067:32;2108:28;2130:5;2108:28;:::i;:::-;2155:5;2145:15;;;1648:518;;;;;:::o;2171:289::-;2213:3;2251:5;2245:12;2278:6;2273:3;2266:19;2334:6;2327:4;2320:5;2316:16;2309:4;2304:3;2300:14;2294:47;2386:1;2379:4;2370:6;2365:3;2361:16;2357:27;2350:38;2449:4;2442:2;2438:7;2433:2;2425:6;2421:15;2417:29;2412:3;2408:39;2404:50;2397:57;;;2171:289;;;;:::o;2465:1698::-;2658:2;2647:9;2640:21;2621:4;2696:6;2690:13;2739:6;2734:2;2723:9;2719:18;2712:34;2769:52;2816:3;2805:9;2801:19;2787:12;2769:52;:::i;:::-;2755:66;;2870:2;2862:6;2858:15;2852:22;2942:2;2938:7;2926:9;2918:6;2914:22;2910:36;2905:2;2894:9;2890:18;2883:64;2970:41;3004:6;2988:14;2970:41;:::i;:::-;2956:55;;;3060:2;3052:6;3048:15;3042:22;3132:2;3128:7;3116:9;3108:6;3104:22;3100:36;3095:2;3084:9;3080:18;3073:64;3160:41;3194:6;3178:14;3160:41;:::i;:::-;3146:55;;;3250:2;3242:6;3238:15;3232:22;3323:2;3319:7;3307:9;3299:6;3295:22;3291:36;3285:3;3274:9;3270:19;3263:65;3351:41;3385:6;3369:14;3351:41;:::i;:::-;3337:55;;;3441:3;3433:6;3429:16;3423:23;3515:2;3511:7;3499:9;3491:6;3487:22;3483:36;3477:3;3466:9;3462:19;3455:65;3543:41;3577:6;3561:14;3543:41;:::i;:::-;3529:55;;;3633:3;3625:6;3621:16;3615:23;3707:2;3703:7;3691:9;3683:6;3679:22;3675:36;3669:3;3658:9;3654:19;3647:65;3735:41;3769:6;3753:14;3735:41;:::i;:::-;3721:55;;;3825:3;3817:6;3813:16;3807:23;3899:2;3895:7;3883:9;3875:6;3871:22;3867:36;3861:3;3850:9;3846:19;3839:65;3927:41;3961:6;3945:14;3927:41;:::i;:::-;3913:55;;;4017:3;4009:6;4005:16;3999:23;4094:2;4090:7;4078:9;4070:6;4066:22;4062:36;4053:6;4042:9;4038:22;4031:68;4116:41;4150:6;4134:14;4116:41;:::i;:::-;4108:49;2465:1698;-1:-1:-1;;;;;2465:1698:33:o;4168:114::-;4252:4;4245:5;4241:16;4234:5;4231:27;4221:55;;4272:1;4269;4262:12;4287:520;4397:6;4405;4458:2;4446:9;4437:7;4433:23;4429:32;4426:52;;;4474:1;4471;4464:12;4426:52;4513:9;4500:23;4532:29;4555:5;4532:29;:::i;:::-;4580:5;-1:-1:-1;4636:2:33;4621:18;;4608:32;-1:-1:-1;;;;;4652:30:33;;4649:50;;;4695:1;4692;4685:12;4812:127;4873:10;4868:3;4864:20;4861:1;4854:31;4904:4;4901:1;4894:15;4928:4;4925:1;4918:15;4944:255;5016:2;5010:9;5058:6;5046:19;;-1:-1:-1;;;;;5080:34:33;;5116:22;;;5077:62;5074:88;;;5142:18;;:::i;:::-;5178:2;5171:22;4944:255;:::o;5204:275::-;5275:2;5269:9;5340:2;5321:13;;-1:-1:-1;;5317:27:33;5305:40;;-1:-1:-1;;;;;5360:34:33;;5396:22;;;5357:62;5354:88;;;5422:18;;:::i;:::-;5458:2;5451:22;5204:275;;-1:-1:-1;5204:275:33:o;5484:182::-;5543:4;-1:-1:-1;;;;;5568:6:33;5565:30;5562:56;;;5598:18;;:::i;:::-;-1:-1:-1;5643:1:33;5639:14;5655:4;5635:25;;5484:182::o;5671:187::-;5720:4;-1:-1:-1;;;;;5745:6:33;5742:30;5739:56;;;5775:18;;:::i;:::-;-1:-1:-1;5841:2:33;5820:15;-1:-1:-1;;5816:29:33;5847:4;5812:40;;5671:187::o;5863:1793::-;6010:6;6018;6071:2;6059:9;6050:7;6046:23;6042:32;6039:52;;;6087:1;6084;6077:12;6039:52;6127:9;6114:23;-1:-1:-1;;;;;6152:6:33;6149:30;6146:50;;;6192:1;6189;6182:12;6146:50;6215:22;;6268:4;6260:13;;6256:27;-1:-1:-1;6246:55:33;;6297:1;6294;6287:12;6246:55;6337:2;6324:16;6360:63;6376:46;6415:6;6376:46;:::i;:::-;6360:63;:::i;:::-;6445:3;6469:6;6464:3;6457:19;6501:4;6496:3;6492:14;6485:21;;6558:4;6548:6;6545:1;6541:14;6537:2;6533:23;6529:34;6515:48;;6586:7;6578:6;6575:19;6572:39;;;6607:1;6604;6597:12;6572:39;6639:4;6635:2;6631:13;6653:749;6669:6;6664:3;6661:15;6653:749;;;6757:3;6744:17;-1:-1:-1;;;;;6780:11:33;6777:35;6774:55;;;6825:1;6822;6815:12;6774:55;6852:20;;6907:2;6899:11;;6895:25;-1:-1:-1;6885:53:33;;6934:1;6931;6924:12;6885:53;6988:4;6984:2;6980:13;6967:27;7022:55;7038:38;7067:8;7038:38;:::i;7022:55::-;7090:25;;;7134:39;7142:17;;;7134:39;7131:52;-1:-1:-1;7128:72:33;;;7196:1;7193;7186:12;7128:72;7259:8;7254:2;7250;7246:11;7239:4;7230:7;7226:18;7213:55;7323:1;7316:4;7305:8;7296:7;7292:22;7288:33;7281:44;7350:7;7345:3;7338:20;;;;7387:4;7382:3;7378:14;7371:21;;6695:4;6690:3;6686:14;6679:21;;6653:749;;;-1:-1:-1;7421:5:33;-1:-1:-1;;;;7479:4:33;7464:20;;7451:34;-1:-1:-1;;;;;7497:32:33;;7494:52;;;7542:1;7539;7532:12;7843:623;7964:6;7972;7980;8033:2;8021:9;8012:7;8008:23;8004:32;8001:52;;;8049:1;8046;8039:12;8001:52;8094:23;;;-1:-1:-1;8214:2:33;8199:18;;8186:32;;-1:-1:-1;8295:2:33;8280:18;;8267:32;-1:-1:-1;;;;;8311:30:33;;8308:50;;;8354:1;8351;8344:12;8308:50;8377:83;8452:7;8443:6;8432:9;8428:22;8377:83;:::i;:::-;8367:93;;;7843:623;;;;;:::o;8471:389::-;8574:6;8627:2;8615:9;8606:7;8602:23;8598:32;8595:52;;;8643:1;8640;8633:12;8595:52;8683:9;8670:23;-1:-1:-1;;;;;8708:6:33;8705:30;8702:50;;;8748:1;8745;8738:12;8702:50;8771:83;8846:7;8837:6;8826:9;8822:22;8771:83;:::i;8865:492::-;9050:2;9039:9;9032:21;9125:1;9121;9116:3;9112:11;9108:19;9099:6;9093:13;9089:39;9084:2;9073:9;9069:18;9062:67;9183:2;9175:6;9171:15;9165:22;9160:2;9149:9;9145:18;9138:50;9013:4;9235:2;9227:6;9223:15;9217:22;9277:4;9270;9259:9;9255:20;9248:34;9299:52;9346:3;9335:9;9331:19;9317:12;9299:52;:::i;9362:657::-;9479:6;9487;9495;9548:2;9536:9;9527:7;9523:23;9519:32;9516:52;;;9564:1;9561;9554:12;9516:52;9603:9;9590:23;9622:29;9645:5;9622:29;:::i;:::-;9670:5;-1:-1:-1;9727:2:33;9712:18;;9699:32;9740:31;9699:32;9740:31;:::i;:::-;9790:7;-1:-1:-1;9848:2:33;9833:18;;9820:32;-1:-1:-1;;;;;9864:30:33;;9861:50;;;9907:1;9904;9897:12;10024:180;10083:6;10136:2;10124:9;10115:7;10111:23;10107:32;10104:52;;;10152:1;10149;10142:12;10104:52;-1:-1:-1;10175:23:33;;10024:180;-1:-1:-1;10024:180:33:o;10417:367::-;10480:8;10490:6;10544:3;10537:4;10529:6;10525:17;10521:27;10511:55;;10562:1;10559;10552:12;10511:55;-1:-1:-1;10585:20:33;;-1:-1:-1;;;;;10617:30:33;;10614:50;;;10660:1;10657;10650:12;10614:50;10697:4;10689:6;10685:17;10673:29;;10757:3;10750:4;10740:6;10737:1;10733:14;10725:6;10721:27;10717:38;10714:47;10711:67;;;10774:1;10771;10764:12;10711:67;10417:367;;;;;:::o;10789:348::-;10841:8;10851:6;10905:3;10898:4;10890:6;10886:17;10882:27;10872:55;;10923:1;10920;10913:12;10872:55;-1:-1:-1;10946:20:33;;-1:-1:-1;;;;;10978:30:33;;10975:50;;;11021:1;11018;11011:12;10975:50;11058:4;11050:6;11046:17;11034:29;;11110:3;11103:4;11094:6;11086;11082:19;11078:30;11075:39;11072:59;;;11127:1;11124;11117:12;11142:1047;11270:6;11278;11286;11294;11302;11310;11363:2;11351:9;11342:7;11338:23;11334:32;11331:52;;;11379:1;11376;11369:12;11331:52;11419:9;11406:23;-1:-1:-1;;;;;11444:6:33;11441:30;11438:50;;;11484:1;11481;11474:12;11438:50;11523:70;11585:7;11576:6;11565:9;11561:22;11523:70;:::i;:::-;11612:8;;-1:-1:-1;11497:96:33;-1:-1:-1;;11700:2:33;11685:18;;11672:32;-1:-1:-1;;;;;11716:32:33;;11713:52;;;11761:1;11758;11751:12;11713:52;11800:61;11853:7;11842:8;11831:9;11827:24;11800:61;:::i;:::-;11880:8;;-1:-1:-1;11774:87:33;-1:-1:-1;;11968:2:33;11953:18;;11940:32;-1:-1:-1;;;;;11984:32:33;;11981:52;;;12029:1;12026;12019:12;11981:52;12068:61;12121:7;12110:8;12099:9;12095:24;12068:61;:::i;:::-;11142:1047;;;;-1:-1:-1;11142:1047:33;;-1:-1:-1;11142:1047:33;;12148:8;;11142:1047;-1:-1:-1;;;11142:1047:33:o;12194:437::-;12280:6;12288;12341:2;12329:9;12320:7;12316:23;12312:32;12309:52;;;12357:1;12354;12347:12;12309:52;12397:9;12384:23;-1:-1:-1;;;;;12422:6:33;12419:30;12416:50;;;12462:1;12459;12452:12;12416:50;12501:70;12563:7;12554:6;12543:9;12539:22;12501:70;:::i;:::-;12590:8;;12475:96;;-1:-1:-1;12194:437:33;-1:-1:-1;;;;12194:437:33:o;12636:768::-;12758:6;12766;12774;12782;12835:2;12823:9;12814:7;12810:23;12806:32;12803:52;;;12851:1;12848;12841:12;12803:52;12891:9;12878:23;-1:-1:-1;;;;;12916:6:33;12913:30;12910:50;;;12956:1;12953;12946:12;12910:50;12995:70;13057:7;13048:6;13037:9;13033:22;12995:70;:::i;:::-;13084:8;;-1:-1:-1;12969:96:33;-1:-1:-1;;13172:2:33;13157:18;;13144:32;-1:-1:-1;;;;;13188:32:33;;13185:52;;;13233:1;13230;13223:12;13185:52;13272:72;13336:7;13325:8;13314:9;13310:24;13272:72;:::i;:::-;12636:768;;;;-1:-1:-1;13363:8:33;-1:-1:-1;;;;12636:768:33:o;13903:127::-;13964:10;13959:3;13955:20;13952:1;13945:31;13995:4;13992:1;13985:15;14019:4;14016:1;14009:15;14035:125;14100:9;;;14121:10;;;14118:36;;;14134:18;;:::i;14165:350::-;14367:2;14349:21;;;14406:2;14386:18;;;14379:30;14445:28;14440:2;14425:18;;14418:56;14506:2;14491:18;;14165:350::o;14925:521::-;15002:4;15008:6;15068:11;15055:25;15162:2;15158:7;15147:8;15131:14;15127:29;15123:43;15103:18;15099:68;15089:96;;15181:1;15178;15171:12;15089:96;15208:33;;15260:20;;;-1:-1:-1;;;;;;15292:30:33;;15289:50;;;15335:1;15332;15325:12;15289:50;15368:4;15356:17;;-1:-1:-1;15399:14:33;15395:27;;;15385:38;;15382:58;;;15436:1;15433;15426:12;15451:545;15544:4;15550:6;15610:11;15597:25;15704:2;15700:7;15689:8;15673:14;15669:29;15665:43;15645:18;15641:68;15631:96;;15723:1;15720;15713:12;15631:96;15750:33;;15802:20;;;-1:-1:-1;;;;;;15834:30:33;;15831:50;;;15877:1;15874;15867:12;15831:50;15910:4;15898:17;;-1:-1:-1;15961:1:33;15957:14;;;15941;15937:35;15927:46;;15924:66;;;15986:1;15983;15976:12;16001:266;16089:6;16084:3;16077:19;16141:6;16134:5;16127:4;16122:3;16118:14;16105:43;-1:-1:-1;16193:1:33;16168:16;;;16186:4;16164:27;;;16157:38;;;;16249:2;16228:15;;;-1:-1:-1;;16224:29:33;16215:39;;;16211:50;;16001:266::o;16272:311::-;16360:19;;;16342:3;-1:-1:-1;;;;;16391:31:33;;16388:51;;;16435:1;16432;16425:12;16388:51;16471:6;16468:1;16464:14;16523:8;16516:5;16509:4;16504:3;16500:14;16487:45;16552:18;;;;16572:4;16548:29;;16272:311;-1:-1:-1;;;16272:311:33:o;16588:483::-;16841:2;16830:9;16823:21;16804:4;16867:61;16924:2;16913:9;16909:18;16901:6;16893;16867:61;:::i;:::-;16976:9;16968:6;16964:22;16959:2;16948:9;16944:18;16937:50;17004:61;17058:6;17050;17042;17004:61;:::i;17076:514::-;17129:5;17182:3;17175:4;17167:6;17163:17;17159:27;17149:55;;17200:1;17197;17190:12;17149:55;17233:6;17227:13;17272:4;17264:6;17260:17;17301:1;17322:53;17338:36;17367:6;17338:36;:::i;17322:53::-;17311:64;;17400:6;17391:7;17384:23;17440:3;17431:6;17426:3;17422:16;17419:25;17416:45;;;17457:1;17454;17447:12;17416:45;17501:6;17496:3;17489:4;17480:7;17476:18;17470:38;17557:1;17528:20;;;17550:4;17524:31;17517:42;;;;-1:-1:-1;17532:7:33;17076:514;-1:-1:-1;;;17076:514:33:o;17595:553::-;17692:6;17700;17753:2;17741:9;17732:7;17728:23;17724:32;17721:52;;;17769:1;17766;17759:12;17721:52;17802:9;17796:16;-1:-1:-1;;;;;17827:6:33;17824:30;17821:50;;;17867:1;17864;17857:12;17821:50;17890:60;17942:7;17933:6;17922:9;17918:22;17890:60;:::i;:::-;17880:70;;;17996:2;17985:9;17981:18;17975:25;-1:-1:-1;;;;;18015:8:33;18012:32;18009:52;;;18057:1;18054;18047:12;18009:52;18080:62;18134:7;18123:8;18112:9;18108:24;18080:62;:::i;18153:307::-;18330:2;18319:9;18312:21;18293:4;18350:45;18391:2;18380:9;18376:18;18368:6;18350:45;:::i;:::-;18342:53;;18445:6;18438:14;18431:22;18426:2;18415:9;18411:18;18404:50;18153:307;;;;;:::o;18465:1972::-;18567:6;18620:2;18608:9;18599:7;18595:23;18591:32;18588:52;;;18636:1;18633;18626:12;18588:52;18669:9;18663:16;-1:-1:-1;;;;;18694:6:33;18691:30;18688:50;;;18734:1;18731;18724:12;18688:50;18757:22;;18813:6;18795:16;;;18791:29;18788:49;;;18833:1;18830;18823:12;18788:49;18859:22;;:::i;:::-;18912:2;18906:9;-1:-1:-1;;;;;18930:8:33;18927:32;18924:52;;;18972:1;18969;18962:12;18924:52;18999:55;19046:7;19035:8;19031:2;19027:17;18999:55;:::i;:::-;18992:5;18985:70;;19094:2;19090;19086:11;19080:18;-1:-1:-1;;;;;19113:8:33;19110:32;19107:52;;;19155:1;19152;19145:12;19107:52;19191:55;19238:7;19227:8;19223:2;19219:17;19191:55;:::i;:::-;19186:2;19179:5;19175:14;19168:79;;19286:2;19282;19278:11;19272:18;-1:-1:-1;;;;;19305:8:33;19302:32;19299:52;;;19347:1;19344;19337:12;19299:52;19383:55;19430:7;19419:8;19415:2;19411:17;19383:55;:::i;:::-;19378:2;19371:5;19367:14;19360:79;;19478:2;19474;19470:11;19464:18;-1:-1:-1;;;;;19497:8:33;19494:32;19491:52;;;19539:1;19536;19529:12;19491:52;19575:55;19622:7;19611:8;19607:2;19603:17;19575:55;:::i;:::-;19570:2;19563:5;19559:14;19552:79;;19670:3;19666:2;19662:12;19656:19;-1:-1:-1;;;;;19690:8:33;19687:32;19684:52;;;19732:1;19729;19722:12;19684:52;19769:55;19816:7;19805:8;19801:2;19797:17;19769:55;:::i;:::-;19763:3;19756:5;19752:15;19745:80;;19864:3;19860:2;19856:12;19850:19;-1:-1:-1;;;;;19884:8:33;19881:32;19878:52;;;19926:1;19923;19916:12;19878:52;19963:55;20010:7;19999:8;19995:2;19991:17;19963:55;:::i;:::-;19957:3;19950:5;19946:15;19939:80;;20058:3;20054:2;20050:12;20044:19;-1:-1:-1;;;;;20078:8:33;20075:32;20072:52;;;20120:1;20117;20110:12;20072:52;20157:55;20204:7;20193:8;20189:2;20185:17;20157:55;:::i;:::-;20151:3;20144:5;20140:15;20133:80;;20252:3;20248:2;20244:12;20238:19;-1:-1:-1;;;;;20272:8:33;20269:32;20266:52;;;20314:1;20311;20304:12;20266:52;20351:55;20398:7;20387:8;20383:2;20379:17;20351:55;:::i;:::-;20345:3;20334:15;;20327:80;-1:-1:-1;20338:5:33;18465:1972;-1:-1:-1;;;;18465:1972:33:o;20442:148::-;20530:4;20509:12;;;20523;;;20505:31;;20548:13;;20545:39;;;20564:18;;:::i;20595:490::-;20679:6;20687;20695;20748:2;20736:9;20727:7;20723:23;20719:32;20716:52;;;20764:1;20761;20754:12;20716:52;20809:16;;20894:2;20879:18;;20873:25;20809:16;;-1:-1:-1;20907:31:33;20873:25;20907:31;:::i;:::-;21009:2;20994:18;;20988:25;20957:7;;-1:-1:-1;21022:31:33;20988:25;21022:31;:::i;:::-;21072:7;21062:17;;;20595:490;;;;;:::o;21090:479::-;21292:2;21274:21;;;21331:2;21311:18;;;21304:30;21370:34;21365:2;21350:18;;21343:62;21441:34;21436:2;21421:18;;21414:62;-1:-1:-1;;;21507:3:33;21492:19;;21485:42;21559:3;21544:19;;21090:479::o;22007:335::-;22086:6;22139:2;22127:9;22118:7;22114:23;22110:32;22107:52;;;22155:1;22152;22145:12;22107:52;22188:9;22182:16;-1:-1:-1;;;;;22213:6:33;22210:30;22207:50;;;22253:1;22250;22243:12;22207:50;22276:60;22328:7;22319:6;22308:9;22304:22;22276:60;:::i;22347:226::-;22502:2;22491:9;22484:21;22465:4;22522:45;22563:2;22552:9;22548:18;22540:6;22522:45;:::i;22578:577::-;22676:6;22684;22692;22745:2;22733:9;22724:7;22720:23;22716:32;22713:52;;;22761:1;22758;22751:12;22713:52;22793:9;22787:16;22812:31;22837:5;22812:31;:::i;:::-;22933:2;22918:18;;22912:25;23007:2;22992:18;;22986:25;22862:5;;-1:-1:-1;22912:25:33;-1:-1:-1;;;;;;23023:30:33;;23020:50;;;23066:1;23063;23056:12;23020:50;23089:60;23141:7;23132:6;23121:9;23117:22;23089:60;:::i;24544:184::-;24614:6;24667:2;24655:9;24646:7;24642:23;24638:32;24635:52;;;24683:1;24680;24673:12;24635:52;-1:-1:-1;24706:16:33;;24544:184;-1:-1:-1;24544:184:33:o;25090:273::-;25275:6;25267;25262:3;25249:33;25231:3;25301:16;;25326:13;;;25301:16;25090:273;-1:-1:-1;25090:273:33:o;25368:301::-;25497:3;25535:6;25529:13;25581:6;25574:4;25566:6;25562:17;25557:3;25551:37;25643:1;25607:16;;25632:13;;;-1:-1:-1;25607:16:33;25368:301;-1:-1:-1;25368:301:33:o;25674:127::-;25735:10;25730:3;25726:20;25723:1;25716:31;25766:4;25763:1;25756:15;25790:4;25787:1;25780:15;25806:128;25873:9;;;25894:11;;;25891:37;;;25908:18;;:::i;26731:151::-;26821:4;26814:12;;;26800;;;26796:31;;26839:14;;26836:40;;;26856:18;;:::i;29083:355::-;29204:9;29215;29257:8;29245:10;29242:24;29239:44;;;29279:1;29276;29269:12;29239:44;29308:6;29298:8;29295:20;29292:40;;;29328:1;29325;29318:12;29292:40;-1:-1:-1;;29370:1:33;29366:18;;;29354:31;;29407:25;;;;;-1:-1:-1;29083:355:33:o;30738:245::-;30805:6;30858:2;30846:9;30837:7;30833:23;30829:32;30826:52;;;30874:1;30871;30864:12;30826:52;30906:9;30900:16;30925:28;30947:5;30925:28;:::i;30988:127::-;31049:10;31044:3;31040:20;31037:1;31030:31;31080:4;31077:1;31070:15;31104:4;31101:1;31094:15;31120:721;31414:2;31403:9;31396:21;31377:4;31440:61;31497:2;31486:9;31482:18;31474:6;31466;31440:61;:::i;:::-;31549:9;31541:6;31537:22;31532:2;31521:9;31517:18;31510:50;31577:61;31631:6;31623;31615;31577:61;:::i;:::-;31569:69;;;31668:2;31660:6;31657:14;31647:145;;31714:10;31709:3;31705:20;31702:1;31695:31;31749:4;31746:1;31739:15;31777:4;31774:1;31767:15;31647:145;31828:6;31823:2;31812:9;31808:18;31801:34;31120:721;;;;;;;;:::o;31846:456::-;31934:6;31942;31950;32003:2;31991:9;31982:7;31978:23;31974:32;31971:52;;;32019:1;32016;32009:12;31971:52;-1:-1:-1;;32064:16:33;;32170:2;32155:18;;32149:25;32266:2;32251:18;;;32245:25;32064:16;;32149:25;;-1:-1:-1;32245:25:33;31846:456;-1:-1:-1;31846:456:33:o;32307:342::-;32509:2;32491:21;;;32548:2;32528:18;;;32521:30;-1:-1:-1;;;32582:2:33;32567:18;;32560:48;32640:2;32625:18;;32307:342::o;34520:486::-;34722:2;34704:21;;;34761:2;34741:18;;;34734:30;34800:34;34795:2;34780:18;;34773:62;34871:34;34866:2;34851:18;;34844:62;-1:-1:-1;;;34937:3:33;34922:19;;34915:49;34996:3;34981:19;;34520:486::o;35503:487::-;35705:2;35687:21;;;35744:2;35724:18;;;35717:30;35783:34;35778:2;35763:18;;35756:62;35854:34;35849:2;35834:18;;35827:62;-1:-1:-1;;;35920:3:33;35905:19;;35898:50;35980:3;35965:19;;35503:487::o;35995:1173::-;36109:6;36117;36170:2;36158:9;36149:7;36145:23;36141:32;36138:52;;;36186:1;36183;36176:12;36138:52;36219:9;36213:16;-1:-1:-1;;;;;36244:6:33;36241:30;36238:50;;;36284:1;36281;36274:12;36238:50;36307:22;;36360:4;36352:13;;36348:27;-1:-1:-1;36338:55:33;;36389:1;36386;36379:12;36338:55;36422:2;36416:9;36445:63;36461:46;36500:6;36461:46;:::i;36445:63::-;36530:3;36554:6;36549:3;36542:19;36586:4;36581:3;36577:14;36570:21;;36643:4;36633:6;36630:1;36626:14;36622:2;36618:23;36614:34;36600:48;;36671:7;36663:6;36660:19;36657:39;;;36692:1;36689;36682:12;36657:39;36724:4;36720:2;36716:13;36738:308;36754:6;36749:3;36746:15;36738:308;;;36835:3;36829:10;-1:-1:-1;;;;;36858:11:33;36855:35;36852:55;;;36903:1;36900;36893:12;36852:55;36932:69;36993:7;36986:4;36972:11;36968:2;36964:20;36960:31;36932:69;:::i;:::-;36920:82;;-1:-1:-1;37031:4:33;37022:14;;;;36771;36738:308;;;-1:-1:-1;37132:4:33;37117:20;;;;37111:27;37065:5;;37111:27;;-1:-1:-1;;;;;;35995:1173:33:o;39367:331::-;39472:9;39483;39525:8;39513:10;39510:24;39507:44;;;39547:1;39544;39537:12;39507:44;39576:6;39566:8;39563:20;39560:40;;;39596:1;39593;39586:12;39560:40;-1:-1:-1;;39622:23:33;;;39667:25;;;;;-1:-1:-1;39367:331:33:o",
956
- linkReferences: {
957
- "src/InputsExtractor.sol": {
958
- InputsExtractor: [
959
- { start: 1839, length: 20 },
960
- { start: 2003, length: 20 },
961
- { start: 2196, length: 20 },
962
- { start: 2557, length: 20 },
963
- { start: 2721, length: 20 },
964
- { start: 2859, length: 20 },
965
- { start: 3481, length: 20 },
966
- { start: 4861, length: 20 },
967
- { start: 6622, length: 20 },
968
- { start: 7225, length: 20 },
969
- { start: 8054, length: 20 },
970
- { start: 8596, length: 20 }
971
- ]
972
- }
973
- }
974
- },
975
- methodIdentifiers: {
976
- "CERTIFICATE_REGISTRY_ID()": "41a0e2c2",
977
- "CIRCUIT_REGISTRY_ID()": "6c40d5d6",
978
- "SANCTIONS_REGISTRY_ID()": "652ba33d",
979
- "addVerifiers(bytes32[],address[])": "a6df2c01",
980
- "admin()": "f851a440",
981
- "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "653cfd81",
982
- "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "59545f45",
983
- "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": "1e26a9dc",
984
- "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "37889655",
985
- "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "54dbe4d1",
986
- "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "bf73c26c",
987
- "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "aa1346ea",
988
- "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "62067c82",
989
- "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "c0940ebd",
990
- "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "04951b86",
991
- "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "704876d6",
992
- "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "921076c7",
993
- "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "deb7c059",
994
- "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "c4560786",
995
- "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "0b90581b",
996
- "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "d3f6ffff",
997
- "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "4c127428",
998
- "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "a88f1cef",
999
- "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "e718bc32",
1000
- "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "46bd0a16",
1001
- "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "cfd9464a",
1002
- "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "ec46f774",
1003
- "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "3a86bd3d",
1004
- "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "f87e19b1",
1005
- "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "e420e354",
1006
- "paused()": "5c975abb",
1007
- "removeVerifiers(bytes32[])": "8d6937b8",
1008
- "rootRegistry()": "b96b161c",
1009
- "setPaused(bool)": "16c38b3c",
1010
- "transferAdmin(address)": "75829def",
1011
- "updateRootRegistry(address)": "18677f2a",
1012
- "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "d7bf616a",
1013
- "verifyScopes(bytes32[],string,string)": "847755e3",
1014
- "vkeyHashToVerifier(bytes32)": "8163f231"
1015
- },
1016
- rawMetadata: '{"compiler":{"version":"0.8.29+commit.ab55807c"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_rootRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"certificateRegistryRoot","type":"bytes32"}],"name":"CertificateRegistryRootAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"certificateRegistryRoot","type":"bytes32"}],"name":"CertificateRegistryRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PausedStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_sanctionsTreesRoot","type":"bytes32"}],"name":"SanctionsTreesRootUpdates","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"vkeyHash","type":"bytes32"}],"name":"VerifierRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ZKPassportVerifierDeployed","type":"event"},{"inputs":[],"name":"CERTIFICATE_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CIRCUIT_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SANCTIONS_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"vkeyHashes","type":"bytes32[]"},{"internalType":"address[]","name":"verifiers","type":"address[]"}],"name":"addVerifiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"enforceSanctionsRoot","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"getBoundData","outputs":[{"components":[{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"customData","type":"string"}],"internalType":"struct BoundData","name":"boundData","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"},{"internalType":"bool","name":"isIDCard","type":"bool"}],"name":"getDisclosedData","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"issuingCountry","type":"string"},{"internalType":"string","name":"nationality","type":"string"},{"internalType":"string","name":"gender","type":"string"},{"internalType":"string","name":"birthDate","type":"string"},{"internalType":"string","name":"expiryDate","type":"string"},{"internalType":"string","name":"documentNumber","type":"string"},{"internalType":"string","name":"documentType","type":"string"}],"internalType":"struct DisclosedData","name":"disclosedData","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeAbove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeAboveOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeBelow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeBelowOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"age","type":"uint8"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isAgeEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateAfter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateAfterOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateBefore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateBeforeOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"date","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isBirthdateEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateAfter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateAfterOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateBefore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateBeforeOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"date","type":"uint256"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isExpiryDateEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isIssuingCountryIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isIssuingCountryOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isNationalityIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"isNationalityOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"vkeyHashes","type":"bytes32[]"}],"name":"removeVerifiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootRegistry","outputs":[{"internalType":"contract IRootRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rootRegistry","type":"address"}],"name":"updateRootRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"},{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"isValid","type":"bool"},{"internalType":"bytes32","name":"uniqueIdentifier","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"}],"name":"verifyScopes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"vkeyHashToVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Constructor"},"enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"params":"The proof verification parameters"}},"getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"params":"The proof verification parameters"},"returns":{"boundData":"The data bound to the proof"}},"getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)":{"params":{"isIDCard":"Whether the proof is an ID card","params":"The proof verification parameters"},"returns":{"disclosedData":"The data disclosed by the proof"}},"isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minAge":"The age must be above this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is above the given age, false otherwise"}},"isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minAge":"The age must be above or equal to this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is above or equal to the given age, false otherwise"}},"isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxAge":"The age must be below this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is below the given age, false otherwise"}},"isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxAge":"The age must be below or equal to this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is below or equal to the given age, false otherwise"}},"isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxAge":"The age must be less than or equal to this age","minAge":"The age must be greater than or equal to this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is in the given range, false otherwise"}},"isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"age":"The age must be equal to this age","params":"The proof verification parameters"},"returns":{"_0":"True if the age is equal to the given age, false otherwise"}},"isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minDate":"The birthdate must be after this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is after the given date, false otherwise"}},"isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minDate":"The birthdate must be after or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is after or equal to the given date, false otherwise"}},"isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The birthdate must be before this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is before the given date, false otherwise"}},"isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The birthdate must be before or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is before or equal to the given date, false otherwise"}},"isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The birthdate must be before or equal to this date","minDate":"The birthdate must be after or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is between the given dates, false otherwise"}},"isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"date":"The birthdate must be equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the birthdate is equal to the given date, false otherwise"}},"isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minDate":"The expiry date must be after this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is after the given date, false otherwise"}},"isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"minDate":"The expiry date must be after or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is after or equal to the given date, false otherwise"}},"isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The expiry date must be before this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is before the given date, false otherwise"}},"isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The expiry date must be before or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is before or equal to the given date, false otherwise"}},"isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"maxDate":"The expiry date must be before or equal to this date","minDate":"The expiry date must be after or equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is between the given dates, false otherwise"}},"isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"date":"The expiry date must be equal to this date","params":"The proof verification parameters"},"returns":{"_0":"True if the expiry date is equal to the given date, false otherwise"}},"isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"countryList":"The list of countries (needs to match exactly the list of countries in the proof)","params":"The proof verification parameters"},"returns":{"_0":"True if the issuing country is in the list of countries, false otherwise"}},"isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"countryList":"The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order","params":"The proof verification parameters"},"returns":{"_0":"True if the issuing country is not in the list of countries, false otherwise"}},"isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"countryList":"The list of countries (needs to match exactly the list of countries in the proof)","params":"The proof verification parameters"},"returns":{"_0":"True if the nationality is in the list of countries, false otherwise"}},"isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"countryList":"The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order","params":"The proof verification parameters"},"returns":{"_0":"True if the nationality is not in the list of countries, false otherwise"}},"verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"params":"The proof verification parameters"},"returns":{"isValid":"True if the proof is valid, false otherwise","uniqueIdentifier":"The unique identifier associated to the identity document that generated the proof"}},"verifyScopes(bytes32[],string,string)":{"params":{"domain":"The domain to check against","publicInputs":"The public inputs of the proof","scope":"The scope to check against"},"returns":{"_0":"True if the proof was generated for the given domain and scope, false otherwise"}}},"version":1},"userdoc":{"kind":"user","methods":{"enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Enforces that the proof checks against the expected sanction list(s)"},"getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Gets the data bound to the proof"},"getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)":{"notice":"Gets the data disclosed by the proof"},"isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is above the given age"},"isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is above or equal to the given age"},"isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is below the given age"},"isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is below or equal to the given age"},"isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is in the given range"},"isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the age is equal to the given age"},"isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is after the given date"},"isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is after or equal to the given date"},"isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is before the given date"},"isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is before or equal to the given date"},"isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is between the given dates"},"isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the birthdate is equal to the given date"},"isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is after the given date"},"isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is after or equal to the given date"},"isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is before the given date"},"isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is before or equal to the given date"},"isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is between the given dates"},"isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the expiry date is equal to the given date"},"isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the issuing country is in the list of countries"},"isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the issuing country is not in the list of countries"},"isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the nationality is in the list of countries"},"isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the nationality is not in the list of countries"},"verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Verifies a proof from ZKPassport"},"verifyScopes(bytes32[],string,string)":{"notice":"Verifies that the proof was generated for the given domain and scope"}},"version":1}},"settings":{"compilationTarget":{"src/ZKPassportVerifier.sol":"ZKPassportVerifier"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":forge-std/=lib/forge-std/src/"]},"sources":{"src/Constants.sol":{"keccak256":"0xb1105acee68946ef452b55289a556a42289c3e1e849482d26cb8af4e2447ebdd","license":"Apache-2.0","urls":["bzz-raw://4639a621a472a215c320dd3f2d22e08d57028550df503bbffbd7330b57ba9ed8","dweb:/ipfs/QmfMoxNwnJMBNzHxUByv1eqtaktX1EGFqU2VJ4L1pYidJq"]},"src/DateUtils.sol":{"keccak256":"0xc04aef2f5732f8c3b28077a0af19e2fbbdec2f9178f3800563bf64ccdecefc77","license":"Apache-2.0","urls":["bzz-raw://bcc2610f3bdd3411fc040d39efe9e68f826b48986b2df7987f3adb6a1467c833","dweb:/ipfs/Qmc7uyW8Y7ekaKEdjd3kU9e1eDcCiAqsujGc5ZavuzGx4w"]},"src/IRootRegistry.sol":{"keccak256":"0xa9955e80821ca9ccbdf7d05a8ce9a3e237b4771e1f6e09190ed1c803a5e1e516","license":"MIT","urls":["bzz-raw://fd9fc9fbd7057a6bcc16a682e52be9ebd012954898626a11f0a0e8788644789d","dweb:/ipfs/QmZYpMRHdv4gMCNXCQtGQu8XqRVtNR9Kgkzh7u1YMpvrEB"]},"src/InputsExtractor.sol":{"keccak256":"0x55af333a1ed7cd5a1299f1b0778db0fc2a15f68903e9ae6a6034d24f13da03e7","license":"Apache-2.0","urls":["bzz-raw://10ccdb51863cfd11f222ecb3111f0f291aae3a19fdbef6d90233d08f02eab1d5","dweb:/ipfs/QmebPTX4Dbc5LkhG57YuTjEZgEvCk51ut3ZERZoqeGemsB"]},"src/StringUtils.sol":{"keccak256":"0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1","license":"Apache-2.0","urls":["bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342","dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"]},"src/Types.sol":{"keccak256":"0x6cd3120512911d8319b011016e19204c3f2d72b75efc2663cbde807571a5a7f0","license":"Apache-2.0","urls":["bzz-raw://ec0c51990097f62145282a34f553465843007d0c86e742652c5ea2c7878e78be","dweb:/ipfs/QmVUFfqiYGZuwbj5AA4smnSn5KpDyeKpw9iFmRzuK18dVo"]},"src/ZKPassportVerifier.sol":{"keccak256":"0x692154ad13d61bc9a232b33396888dcbe6f0ff46bbcd261e00ffa49c4afc8728","license":"Apache-2.0","urls":["bzz-raw://d1477d1851973999abda47bbb20d4f3120bc50b0ad9a3c5a041b768a2c9d47c3","dweb:/ipfs/QmZqefNqexmbFbQ7HUJUDwAAMjcDUobNUyhj1tDYj2HU9S"]},"src/ultra-honk-verifiers/OuterCount4.sol":{"keccak256":"0x9f343e672cd22bb67bda44f4ed5ce7318769dfd65270f52eadf70c12a2377aab","license":"Apache-2.0","urls":["bzz-raw://69a1177da0c5a7148676bef2a5e5c58840a66b2e142d2a0d331dca01dd0109ad","dweb:/ipfs/QmQ6iVmrCNEG6XE3ejP4dgBiw3XhMaGm1hW61z4rj7zsiF"]}},"version":1}',
1017
- metadata: {
1018
- compiler: { version: "0.8.29+commit.ab55807c" },
1019
- language: "Solidity",
1020
- output: {
1021
- abi: [
1022
- {
1023
- inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1024
- stateMutability: "nonpayable",
1025
- type: "constructor"
1026
- },
1027
- {
1028
- inputs: [
1029
- { internalType: "address", name: "oldAdmin", type: "address", indexed: true },
1030
- { internalType: "address", name: "newAdmin", type: "address", indexed: true }
1031
- ],
1032
- type: "event",
1033
- name: "AdminUpdated",
1034
- anonymous: false
1035
- },
1036
- {
1037
- inputs: [
1038
- {
1039
- internalType: "bytes32",
1040
- name: "certificateRegistryRoot",
1041
- type: "bytes32",
1042
- indexed: true
1043
- }
1044
- ],
1045
- type: "event",
1046
- name: "CertificateRegistryRootAdded",
1047
- anonymous: false
1048
- },
1049
- {
1050
- inputs: [
1051
- {
1052
- internalType: "bytes32",
1053
- name: "certificateRegistryRoot",
1054
- type: "bytes32",
1055
- indexed: true
1056
- }
1057
- ],
1058
- type: "event",
1059
- name: "CertificateRegistryRootRemoved",
1060
- anonymous: false
1061
- },
1062
- {
1063
- inputs: [
1064
- { internalType: "bool", name: "paused", type: "bool", indexed: false }
1065
- ],
1066
- type: "event",
1067
- name: "PausedStatusChanged",
1068
- anonymous: false
1069
- },
1070
- {
1071
- inputs: [
1072
- {
1073
- internalType: "bytes32",
1074
- name: "_sanctionsTreesRoot",
1075
- type: "bytes32",
1076
- indexed: true
1077
- }
1078
- ],
1079
- type: "event",
1080
- name: "SanctionsTreesRootUpdates",
1081
- anonymous: false
1082
- },
1083
- {
1084
- inputs: [
1085
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true },
1086
- { internalType: "address", name: "verifier", type: "address", indexed: true }
1087
- ],
1088
- type: "event",
1089
- name: "VerifierAdded",
1090
- anonymous: false
1091
- },
1092
- {
1093
- inputs: [
1094
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true }
1095
- ],
1096
- type: "event",
1097
- name: "VerifierRemoved",
1098
- anonymous: false
1099
- },
1100
- {
1101
- inputs: [
1102
- { internalType: "address", name: "admin", type: "address", indexed: true },
1103
- { internalType: "uint256", name: "timestamp", type: "uint256", indexed: false }
1104
- ],
1105
- type: "event",
1106
- name: "ZKPassportVerifierDeployed",
1107
- anonymous: false
1108
- },
1109
- {
1110
- inputs: [],
1111
- stateMutability: "view",
1112
- type: "function",
1113
- name: "CERTIFICATE_REGISTRY_ID",
1114
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1115
- },
1116
- {
1117
- inputs: [],
1118
- stateMutability: "view",
1119
- type: "function",
1120
- name: "CIRCUIT_REGISTRY_ID",
1121
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1122
- },
1123
- {
1124
- inputs: [],
1125
- stateMutability: "view",
1126
- type: "function",
1127
- name: "SANCTIONS_REGISTRY_ID",
1128
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1129
- },
1130
- {
1131
- inputs: [
1132
- { internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" },
1133
- { internalType: "address[]", name: "verifiers", type: "address[]" }
1134
- ],
1135
- stateMutability: "nonpayable",
1136
- type: "function",
1137
- name: "addVerifiers"
1138
- },
1139
- {
1140
- inputs: [],
1141
- stateMutability: "view",
1142
- type: "function",
1143
- name: "admin",
1144
- outputs: [{ internalType: "address", name: "", type: "address" }]
1145
- },
1146
- {
1147
- inputs: [
1148
- {
1149
- internalType: "struct ProofVerificationParams",
1150
- name: "params",
1151
- type: "tuple",
1152
- components: [
1153
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1154
- { internalType: "bytes", name: "proof", type: "bytes" },
1155
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1156
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1157
- {
1158
- internalType: "uint256[]",
1159
- name: "committedInputCounts",
1160
- type: "uint256[]"
1161
- },
1162
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1163
- { internalType: "string", name: "domain", type: "string" },
1164
- { internalType: "string", name: "scope", type: "string" },
1165
- { internalType: "bool", name: "devMode", type: "bool" }
1166
- ]
1167
- }
1168
- ],
1169
- stateMutability: "view",
1170
- type: "function",
1171
- name: "enforceSanctionsRoot"
1172
- },
1173
- {
1174
- inputs: [
1175
- {
1176
- internalType: "struct ProofVerificationParams",
1177
- name: "params",
1178
- type: "tuple",
1179
- components: [
1180
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1181
- { internalType: "bytes", name: "proof", type: "bytes" },
1182
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1183
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1184
- {
1185
- internalType: "uint256[]",
1186
- name: "committedInputCounts",
1187
- type: "uint256[]"
1188
- },
1189
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1190
- { internalType: "string", name: "domain", type: "string" },
1191
- { internalType: "string", name: "scope", type: "string" },
1192
- { internalType: "bool", name: "devMode", type: "bool" }
1193
- ]
1194
- }
1195
- ],
1196
- stateMutability: "pure",
1197
- type: "function",
1198
- name: "getBoundData",
1199
- outputs: [
1200
- {
1201
- internalType: "struct BoundData",
1202
- name: "boundData",
1203
- type: "tuple",
1204
- components: [
1205
- { internalType: "address", name: "senderAddress", type: "address" },
1206
- { internalType: "uint256", name: "chainId", type: "uint256" },
1207
- { internalType: "string", name: "customData", type: "string" }
1208
- ]
1209
- }
1210
- ]
1211
- },
1212
- {
1213
- inputs: [
1214
- {
1215
- internalType: "struct ProofVerificationParams",
1216
- name: "params",
1217
- type: "tuple",
1218
- components: [
1219
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1220
- { internalType: "bytes", name: "proof", type: "bytes" },
1221
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1222
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1223
- {
1224
- internalType: "uint256[]",
1225
- name: "committedInputCounts",
1226
- type: "uint256[]"
1227
- },
1228
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1229
- { internalType: "string", name: "domain", type: "string" },
1230
- { internalType: "string", name: "scope", type: "string" },
1231
- { internalType: "bool", name: "devMode", type: "bool" }
1232
- ]
1233
- },
1234
- { internalType: "bool", name: "isIDCard", type: "bool" }
1235
- ],
1236
- stateMutability: "pure",
1237
- type: "function",
1238
- name: "getDisclosedData",
1239
- outputs: [
1240
- {
1241
- internalType: "struct DisclosedData",
1242
- name: "disclosedData",
1243
- type: "tuple",
1244
- components: [
1245
- { internalType: "string", name: "name", type: "string" },
1246
- { internalType: "string", name: "issuingCountry", type: "string" },
1247
- { internalType: "string", name: "nationality", type: "string" },
1248
- { internalType: "string", name: "gender", type: "string" },
1249
- { internalType: "string", name: "birthDate", type: "string" },
1250
- { internalType: "string", name: "expiryDate", type: "string" },
1251
- { internalType: "string", name: "documentNumber", type: "string" },
1252
- { internalType: "string", name: "documentType", type: "string" }
1253
- ]
1254
- }
1255
- ]
1256
- },
1257
- {
1258
- inputs: [
1259
- { internalType: "uint8", name: "minAge", type: "uint8" },
1260
- {
1261
- internalType: "struct ProofVerificationParams",
1262
- name: "params",
1263
- type: "tuple",
1264
- components: [
1265
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1266
- { internalType: "bytes", name: "proof", type: "bytes" },
1267
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1268
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1269
- {
1270
- internalType: "uint256[]",
1271
- name: "committedInputCounts",
1272
- type: "uint256[]"
1273
- },
1274
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1275
- { internalType: "string", name: "domain", type: "string" },
1276
- { internalType: "string", name: "scope", type: "string" },
1277
- { internalType: "bool", name: "devMode", type: "bool" }
1278
- ]
1279
- }
1280
- ],
1281
- stateMutability: "view",
1282
- type: "function",
1283
- name: "isAgeAbove",
1284
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1285
- },
1286
- {
1287
- inputs: [
1288
- { internalType: "uint8", name: "minAge", type: "uint8" },
1289
- {
1290
- internalType: "struct ProofVerificationParams",
1291
- name: "params",
1292
- type: "tuple",
1293
- components: [
1294
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1295
- { internalType: "bytes", name: "proof", type: "bytes" },
1296
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1297
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1298
- {
1299
- internalType: "uint256[]",
1300
- name: "committedInputCounts",
1301
- type: "uint256[]"
1302
- },
1303
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1304
- { internalType: "string", name: "domain", type: "string" },
1305
- { internalType: "string", name: "scope", type: "string" },
1306
- { internalType: "bool", name: "devMode", type: "bool" }
1307
- ]
1308
- }
1309
- ],
1310
- stateMutability: "view",
1311
- type: "function",
1312
- name: "isAgeAboveOrEqual",
1313
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1314
- },
1315
- {
1316
- inputs: [
1317
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1318
- {
1319
- internalType: "struct ProofVerificationParams",
1320
- name: "params",
1321
- type: "tuple",
1322
- components: [
1323
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1324
- { internalType: "bytes", name: "proof", type: "bytes" },
1325
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1326
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1327
- {
1328
- internalType: "uint256[]",
1329
- name: "committedInputCounts",
1330
- type: "uint256[]"
1331
- },
1332
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1333
- { internalType: "string", name: "domain", type: "string" },
1334
- { internalType: "string", name: "scope", type: "string" },
1335
- { internalType: "bool", name: "devMode", type: "bool" }
1336
- ]
1337
- }
1338
- ],
1339
- stateMutability: "view",
1340
- type: "function",
1341
- name: "isAgeBelow",
1342
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1343
- },
1344
- {
1345
- inputs: [
1346
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1347
- {
1348
- internalType: "struct ProofVerificationParams",
1349
- name: "params",
1350
- type: "tuple",
1351
- components: [
1352
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1353
- { internalType: "bytes", name: "proof", type: "bytes" },
1354
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1355
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1356
- {
1357
- internalType: "uint256[]",
1358
- name: "committedInputCounts",
1359
- type: "uint256[]"
1360
- },
1361
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1362
- { internalType: "string", name: "domain", type: "string" },
1363
- { internalType: "string", name: "scope", type: "string" },
1364
- { internalType: "bool", name: "devMode", type: "bool" }
1365
- ]
1366
- }
1367
- ],
1368
- stateMutability: "view",
1369
- type: "function",
1370
- name: "isAgeBelowOrEqual",
1371
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1372
- },
1373
- {
1374
- inputs: [
1375
- { internalType: "uint8", name: "minAge", type: "uint8" },
1376
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1377
- {
1378
- internalType: "struct ProofVerificationParams",
1379
- name: "params",
1380
- type: "tuple",
1381
- components: [
1382
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1383
- { internalType: "bytes", name: "proof", type: "bytes" },
1384
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1385
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1386
- {
1387
- internalType: "uint256[]",
1388
- name: "committedInputCounts",
1389
- type: "uint256[]"
1390
- },
1391
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1392
- { internalType: "string", name: "domain", type: "string" },
1393
- { internalType: "string", name: "scope", type: "string" },
1394
- { internalType: "bool", name: "devMode", type: "bool" }
1395
- ]
1396
- }
1397
- ],
1398
- stateMutability: "view",
1399
- type: "function",
1400
- name: "isAgeBetween",
1401
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1402
- },
1403
- {
1404
- inputs: [
1405
- { internalType: "uint8", name: "age", type: "uint8" },
1406
- {
1407
- internalType: "struct ProofVerificationParams",
1408
- name: "params",
1409
- type: "tuple",
1410
- components: [
1411
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1412
- { internalType: "bytes", name: "proof", type: "bytes" },
1413
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1414
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1415
- {
1416
- internalType: "uint256[]",
1417
- name: "committedInputCounts",
1418
- type: "uint256[]"
1419
- },
1420
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1421
- { internalType: "string", name: "domain", type: "string" },
1422
- { internalType: "string", name: "scope", type: "string" },
1423
- { internalType: "bool", name: "devMode", type: "bool" }
1424
- ]
1425
- }
1426
- ],
1427
- stateMutability: "view",
1428
- type: "function",
1429
- name: "isAgeEqual",
1430
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1431
- },
1432
- {
1433
- inputs: [
1434
- { internalType: "uint256", name: "minDate", type: "uint256" },
1435
- {
1436
- internalType: "struct ProofVerificationParams",
1437
- name: "params",
1438
- type: "tuple",
1439
- components: [
1440
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1441
- { internalType: "bytes", name: "proof", type: "bytes" },
1442
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1443
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1444
- {
1445
- internalType: "uint256[]",
1446
- name: "committedInputCounts",
1447
- type: "uint256[]"
1448
- },
1449
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1450
- { internalType: "string", name: "domain", type: "string" },
1451
- { internalType: "string", name: "scope", type: "string" },
1452
- { internalType: "bool", name: "devMode", type: "bool" }
1453
- ]
1454
- }
1455
- ],
1456
- stateMutability: "view",
1457
- type: "function",
1458
- name: "isBirthdateAfter",
1459
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1460
- },
1461
- {
1462
- inputs: [
1463
- { internalType: "uint256", name: "minDate", type: "uint256" },
1464
- {
1465
- internalType: "struct ProofVerificationParams",
1466
- name: "params",
1467
- type: "tuple",
1468
- components: [
1469
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1470
- { internalType: "bytes", name: "proof", type: "bytes" },
1471
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1472
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1473
- {
1474
- internalType: "uint256[]",
1475
- name: "committedInputCounts",
1476
- type: "uint256[]"
1477
- },
1478
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1479
- { internalType: "string", name: "domain", type: "string" },
1480
- { internalType: "string", name: "scope", type: "string" },
1481
- { internalType: "bool", name: "devMode", type: "bool" }
1482
- ]
1483
- }
1484
- ],
1485
- stateMutability: "view",
1486
- type: "function",
1487
- name: "isBirthdateAfterOrEqual",
1488
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1489
- },
1490
- {
1491
- inputs: [
1492
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1493
- {
1494
- internalType: "struct ProofVerificationParams",
1495
- name: "params",
1496
- type: "tuple",
1497
- components: [
1498
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1499
- { internalType: "bytes", name: "proof", type: "bytes" },
1500
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1501
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1502
- {
1503
- internalType: "uint256[]",
1504
- name: "committedInputCounts",
1505
- type: "uint256[]"
1506
- },
1507
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1508
- { internalType: "string", name: "domain", type: "string" },
1509
- { internalType: "string", name: "scope", type: "string" },
1510
- { internalType: "bool", name: "devMode", type: "bool" }
1511
- ]
1512
- }
1513
- ],
1514
- stateMutability: "view",
1515
- type: "function",
1516
- name: "isBirthdateBefore",
1517
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1518
- },
1519
- {
1520
- inputs: [
1521
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1522
- {
1523
- internalType: "struct ProofVerificationParams",
1524
- name: "params",
1525
- type: "tuple",
1526
- components: [
1527
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1528
- { internalType: "bytes", name: "proof", type: "bytes" },
1529
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1530
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1531
- {
1532
- internalType: "uint256[]",
1533
- name: "committedInputCounts",
1534
- type: "uint256[]"
1535
- },
1536
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1537
- { internalType: "string", name: "domain", type: "string" },
1538
- { internalType: "string", name: "scope", type: "string" },
1539
- { internalType: "bool", name: "devMode", type: "bool" }
1540
- ]
1541
- }
1542
- ],
1543
- stateMutability: "view",
1544
- type: "function",
1545
- name: "isBirthdateBeforeOrEqual",
1546
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1547
- },
1548
- {
1549
- inputs: [
1550
- { internalType: "uint256", name: "minDate", type: "uint256" },
1551
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1552
- {
1553
- internalType: "struct ProofVerificationParams",
1554
- name: "params",
1555
- type: "tuple",
1556
- components: [
1557
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1558
- { internalType: "bytes", name: "proof", type: "bytes" },
1559
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1560
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1561
- {
1562
- internalType: "uint256[]",
1563
- name: "committedInputCounts",
1564
- type: "uint256[]"
1565
- },
1566
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1567
- { internalType: "string", name: "domain", type: "string" },
1568
- { internalType: "string", name: "scope", type: "string" },
1569
- { internalType: "bool", name: "devMode", type: "bool" }
1570
- ]
1571
- }
1572
- ],
1573
- stateMutability: "view",
1574
- type: "function",
1575
- name: "isBirthdateBetween",
1576
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1577
- },
1578
- {
1579
- inputs: [
1580
- { internalType: "uint256", name: "date", type: "uint256" },
1581
- {
1582
- internalType: "struct ProofVerificationParams",
1583
- name: "params",
1584
- type: "tuple",
1585
- components: [
1586
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1587
- { internalType: "bytes", name: "proof", type: "bytes" },
1588
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1589
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1590
- {
1591
- internalType: "uint256[]",
1592
- name: "committedInputCounts",
1593
- type: "uint256[]"
1594
- },
1595
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1596
- { internalType: "string", name: "domain", type: "string" },
1597
- { internalType: "string", name: "scope", type: "string" },
1598
- { internalType: "bool", name: "devMode", type: "bool" }
1599
- ]
1600
- }
1601
- ],
1602
- stateMutability: "view",
1603
- type: "function",
1604
- name: "isBirthdateEqual",
1605
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1606
- },
1607
- {
1608
- inputs: [
1609
- { internalType: "uint256", name: "minDate", type: "uint256" },
1610
- {
1611
- internalType: "struct ProofVerificationParams",
1612
- name: "params",
1613
- type: "tuple",
1614
- components: [
1615
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1616
- { internalType: "bytes", name: "proof", type: "bytes" },
1617
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1618
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1619
- {
1620
- internalType: "uint256[]",
1621
- name: "committedInputCounts",
1622
- type: "uint256[]"
1623
- },
1624
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1625
- { internalType: "string", name: "domain", type: "string" },
1626
- { internalType: "string", name: "scope", type: "string" },
1627
- { internalType: "bool", name: "devMode", type: "bool" }
1628
- ]
1629
- }
1630
- ],
1631
- stateMutability: "view",
1632
- type: "function",
1633
- name: "isExpiryDateAfter",
1634
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1635
- },
1636
- {
1637
- inputs: [
1638
- { internalType: "uint256", name: "minDate", type: "uint256" },
1639
- {
1640
- internalType: "struct ProofVerificationParams",
1641
- name: "params",
1642
- type: "tuple",
1643
- components: [
1644
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1645
- { internalType: "bytes", name: "proof", type: "bytes" },
1646
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1647
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1648
- {
1649
- internalType: "uint256[]",
1650
- name: "committedInputCounts",
1651
- type: "uint256[]"
1652
- },
1653
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1654
- { internalType: "string", name: "domain", type: "string" },
1655
- { internalType: "string", name: "scope", type: "string" },
1656
- { internalType: "bool", name: "devMode", type: "bool" }
1657
- ]
1658
- }
1659
- ],
1660
- stateMutability: "view",
1661
- type: "function",
1662
- name: "isExpiryDateAfterOrEqual",
1663
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1664
- },
1665
- {
1666
- inputs: [
1667
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1668
- {
1669
- internalType: "struct ProofVerificationParams",
1670
- name: "params",
1671
- type: "tuple",
1672
- components: [
1673
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1674
- { internalType: "bytes", name: "proof", type: "bytes" },
1675
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1676
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1677
- {
1678
- internalType: "uint256[]",
1679
- name: "committedInputCounts",
1680
- type: "uint256[]"
1681
- },
1682
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1683
- { internalType: "string", name: "domain", type: "string" },
1684
- { internalType: "string", name: "scope", type: "string" },
1685
- { internalType: "bool", name: "devMode", type: "bool" }
1686
- ]
1687
- }
1688
- ],
1689
- stateMutability: "view",
1690
- type: "function",
1691
- name: "isExpiryDateBefore",
1692
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1693
- },
1694
- {
1695
- inputs: [
1696
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1697
- {
1698
- internalType: "struct ProofVerificationParams",
1699
- name: "params",
1700
- type: "tuple",
1701
- components: [
1702
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1703
- { internalType: "bytes", name: "proof", type: "bytes" },
1704
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1705
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1706
- {
1707
- internalType: "uint256[]",
1708
- name: "committedInputCounts",
1709
- type: "uint256[]"
1710
- },
1711
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1712
- { internalType: "string", name: "domain", type: "string" },
1713
- { internalType: "string", name: "scope", type: "string" },
1714
- { internalType: "bool", name: "devMode", type: "bool" }
1715
- ]
1716
- }
1717
- ],
1718
- stateMutability: "view",
1719
- type: "function",
1720
- name: "isExpiryDateBeforeOrEqual",
1721
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1722
- },
1723
- {
1724
- inputs: [
1725
- { internalType: "uint256", name: "minDate", type: "uint256" },
1726
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1727
- {
1728
- internalType: "struct ProofVerificationParams",
1729
- name: "params",
1730
- type: "tuple",
1731
- components: [
1732
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1733
- { internalType: "bytes", name: "proof", type: "bytes" },
1734
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1735
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1736
- {
1737
- internalType: "uint256[]",
1738
- name: "committedInputCounts",
1739
- type: "uint256[]"
1740
- },
1741
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1742
- { internalType: "string", name: "domain", type: "string" },
1743
- { internalType: "string", name: "scope", type: "string" },
1744
- { internalType: "bool", name: "devMode", type: "bool" }
1745
- ]
1746
- }
1747
- ],
1748
- stateMutability: "view",
1749
- type: "function",
1750
- name: "isExpiryDateBetween",
1751
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1752
- },
1753
- {
1754
- inputs: [
1755
- { internalType: "uint256", name: "date", type: "uint256" },
1756
- {
1757
- internalType: "struct ProofVerificationParams",
1758
- name: "params",
1759
- type: "tuple",
1760
- components: [
1761
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1762
- { internalType: "bytes", name: "proof", type: "bytes" },
1763
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1764
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1765
- {
1766
- internalType: "uint256[]",
1767
- name: "committedInputCounts",
1768
- type: "uint256[]"
1769
- },
1770
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1771
- { internalType: "string", name: "domain", type: "string" },
1772
- { internalType: "string", name: "scope", type: "string" },
1773
- { internalType: "bool", name: "devMode", type: "bool" }
1774
- ]
1775
- }
1776
- ],
1777
- stateMutability: "view",
1778
- type: "function",
1779
- name: "isExpiryDateEqual",
1780
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1781
- },
1782
- {
1783
- inputs: [
1784
- { internalType: "string[]", name: "countryList", type: "string[]" },
1785
- {
1786
- internalType: "struct ProofVerificationParams",
1787
- name: "params",
1788
- type: "tuple",
1789
- components: [
1790
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1791
- { internalType: "bytes", name: "proof", type: "bytes" },
1792
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1793
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1794
- {
1795
- internalType: "uint256[]",
1796
- name: "committedInputCounts",
1797
- type: "uint256[]"
1798
- },
1799
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1800
- { internalType: "string", name: "domain", type: "string" },
1801
- { internalType: "string", name: "scope", type: "string" },
1802
- { internalType: "bool", name: "devMode", type: "bool" }
1803
- ]
1804
- }
1805
- ],
1806
- stateMutability: "pure",
1807
- type: "function",
1808
- name: "isIssuingCountryIn",
1809
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1810
- },
1811
- {
1812
- inputs: [
1813
- { internalType: "string[]", name: "countryList", type: "string[]" },
1814
- {
1815
- internalType: "struct ProofVerificationParams",
1816
- name: "params",
1817
- type: "tuple",
1818
- components: [
1819
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1820
- { internalType: "bytes", name: "proof", type: "bytes" },
1821
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1822
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1823
- {
1824
- internalType: "uint256[]",
1825
- name: "committedInputCounts",
1826
- type: "uint256[]"
1827
- },
1828
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1829
- { internalType: "string", name: "domain", type: "string" },
1830
- { internalType: "string", name: "scope", type: "string" },
1831
- { internalType: "bool", name: "devMode", type: "bool" }
1832
- ]
1833
- }
1834
- ],
1835
- stateMutability: "pure",
1836
- type: "function",
1837
- name: "isIssuingCountryOut",
1838
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1839
- },
1840
- {
1841
- inputs: [
1842
- { internalType: "string[]", name: "countryList", type: "string[]" },
1843
- {
1844
- internalType: "struct ProofVerificationParams",
1845
- name: "params",
1846
- type: "tuple",
1847
- components: [
1848
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1849
- { internalType: "bytes", name: "proof", type: "bytes" },
1850
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1851
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1852
- {
1853
- internalType: "uint256[]",
1854
- name: "committedInputCounts",
1855
- type: "uint256[]"
1856
- },
1857
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1858
- { internalType: "string", name: "domain", type: "string" },
1859
- { internalType: "string", name: "scope", type: "string" },
1860
- { internalType: "bool", name: "devMode", type: "bool" }
1861
- ]
1862
- }
1863
- ],
1864
- stateMutability: "pure",
1865
- type: "function",
1866
- name: "isNationalityIn",
1867
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1868
- },
1869
- {
1870
- inputs: [
1871
- { internalType: "string[]", name: "countryList", type: "string[]" },
1872
- {
1873
- internalType: "struct ProofVerificationParams",
1874
- name: "params",
1875
- type: "tuple",
1876
- components: [
1877
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1878
- { internalType: "bytes", name: "proof", type: "bytes" },
1879
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1880
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1881
- {
1882
- internalType: "uint256[]",
1883
- name: "committedInputCounts",
1884
- type: "uint256[]"
1885
- },
1886
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1887
- { internalType: "string", name: "domain", type: "string" },
1888
- { internalType: "string", name: "scope", type: "string" },
1889
- { internalType: "bool", name: "devMode", type: "bool" }
1890
- ]
1891
- }
1892
- ],
1893
- stateMutability: "pure",
1894
- type: "function",
1895
- name: "isNationalityOut",
1896
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1897
- },
1898
- {
1899
- inputs: [],
1900
- stateMutability: "view",
1901
- type: "function",
1902
- name: "paused",
1903
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1904
- },
1905
- {
1906
- inputs: [{ internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" }],
1907
- stateMutability: "nonpayable",
1908
- type: "function",
1909
- name: "removeVerifiers"
1910
- },
1911
- {
1912
- inputs: [],
1913
- stateMutability: "view",
1914
- type: "function",
1915
- name: "rootRegistry",
1916
- outputs: [{ internalType: "contract IRootRegistry", name: "", type: "address" }]
1917
- },
1918
- {
1919
- inputs: [{ internalType: "bool", name: "_paused", type: "bool" }],
1920
- stateMutability: "nonpayable",
1921
- type: "function",
1922
- name: "setPaused"
1923
- },
1924
- {
1925
- inputs: [{ internalType: "address", name: "newAdmin", type: "address" }],
1926
- stateMutability: "nonpayable",
1927
- type: "function",
1928
- name: "transferAdmin"
1929
- },
1930
- {
1931
- inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1932
- stateMutability: "nonpayable",
1933
- type: "function",
1934
- name: "updateRootRegistry"
1935
- },
1936
- {
1937
- inputs: [
1938
- {
1939
- internalType: "struct ProofVerificationParams",
1940
- name: "params",
1941
- type: "tuple",
1942
- components: [
1943
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1944
- { internalType: "bytes", name: "proof", type: "bytes" },
1945
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1946
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1947
- {
1948
- internalType: "uint256[]",
1949
- name: "committedInputCounts",
1950
- type: "uint256[]"
1951
- },
1952
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1953
- { internalType: "string", name: "domain", type: "string" },
1954
- { internalType: "string", name: "scope", type: "string" },
1955
- { internalType: "bool", name: "devMode", type: "bool" }
1956
- ]
1957
- }
1958
- ],
1959
- stateMutability: "view",
1960
- type: "function",
1961
- name: "verifyProof",
1962
- outputs: [
1963
- { internalType: "bool", name: "isValid", type: "bool" },
1964
- { internalType: "bytes32", name: "uniqueIdentifier", type: "bytes32" }
1965
- ]
1966
- },
1967
- {
1968
- inputs: [
1969
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1970
- { internalType: "string", name: "domain", type: "string" },
1971
- { internalType: "string", name: "scope", type: "string" }
1972
- ],
1973
- stateMutability: "pure",
1974
- type: "function",
1975
- name: "verifyScopes",
1976
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1977
- },
1978
- {
1979
- inputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
1980
- stateMutability: "view",
1981
- type: "function",
1982
- name: "vkeyHashToVerifier",
1983
- outputs: [{ internalType: "address", name: "", type: "address" }]
1984
- }
1985
- ],
1986
- devdoc: {
1987
- kind: "dev",
1988
- methods: {
1989
- constructor: { details: "Constructor" },
1990
- "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
1991
- params: { params: "The proof verification parameters" }
1992
- },
1993
- "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
1994
- params: { params: "The proof verification parameters" },
1995
- returns: { boundData: "The data bound to the proof" }
1996
- },
1997
- "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": {
1998
- params: {
1999
- isIDCard: "Whether the proof is an ID card",
2000
- params: "The proof verification parameters"
2001
- },
2002
- returns: { disclosedData: "The data disclosed by the proof" }
2003
- },
2004
- "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2005
- params: {
2006
- minAge: "The age must be above this age",
2007
- params: "The proof verification parameters"
2008
- },
2009
- returns: { _0: "True if the age is above the given age, false otherwise" }
2010
- },
2011
- "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2012
- params: {
2013
- minAge: "The age must be above or equal to this age",
2014
- params: "The proof verification parameters"
2015
- },
2016
- returns: {
2017
- _0: "True if the age is above or equal to the given age, false otherwise"
2018
- }
2019
- },
2020
- "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2021
- params: {
2022
- maxAge: "The age must be below this age",
2023
- params: "The proof verification parameters"
2024
- },
2025
- returns: { _0: "True if the age is below the given age, false otherwise" }
2026
- },
2027
- "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2028
- params: {
2029
- maxAge: "The age must be below or equal to this age",
2030
- params: "The proof verification parameters"
2031
- },
2032
- returns: {
2033
- _0: "True if the age is below or equal to the given age, false otherwise"
2034
- }
2035
- },
2036
- "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2037
- params: {
2038
- maxAge: "The age must be less than or equal to this age",
2039
- minAge: "The age must be greater than or equal to this age",
2040
- params: "The proof verification parameters"
2041
- },
2042
- returns: { _0: "True if the age is in the given range, false otherwise" }
2043
- },
2044
- "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2045
- params: {
2046
- age: "The age must be equal to this age",
2047
- params: "The proof verification parameters"
2048
- },
2049
- returns: { _0: "True if the age is equal to the given age, false otherwise" }
2050
- },
2051
- "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2052
- params: {
2053
- minDate: "The birthdate must be after this date",
2054
- params: "The proof verification parameters"
2055
- },
2056
- returns: { _0: "True if the birthdate is after the given date, false otherwise" }
2057
- },
2058
- "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2059
- params: {
2060
- minDate: "The birthdate must be after or equal to this date",
2061
- params: "The proof verification parameters"
2062
- },
2063
- returns: {
2064
- _0: "True if the birthdate is after or equal to the given date, false otherwise"
2065
- }
2066
- },
2067
- "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2068
- params: {
2069
- maxDate: "The birthdate must be before this date",
2070
- params: "The proof verification parameters"
2071
- },
2072
- returns: { _0: "True if the birthdate is before the given date, false otherwise" }
2073
- },
2074
- "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2075
- params: {
2076
- maxDate: "The birthdate must be before or equal to this date",
2077
- params: "The proof verification parameters"
2078
- },
2079
- returns: {
2080
- _0: "True if the birthdate is before or equal to the given date, false otherwise"
2081
- }
2082
- },
2083
- "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2084
- params: {
2085
- maxDate: "The birthdate must be before or equal to this date",
2086
- minDate: "The birthdate must be after or equal to this date",
2087
- params: "The proof verification parameters"
2088
- },
2089
- returns: { _0: "True if the birthdate is between the given dates, false otherwise" }
2090
- },
2091
- "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2092
- params: {
2093
- date: "The birthdate must be equal to this date",
2094
- params: "The proof verification parameters"
2095
- },
2096
- returns: { _0: "True if the birthdate is equal to the given date, false otherwise" }
2097
- },
2098
- "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2099
- params: {
2100
- minDate: "The expiry date must be after this date",
2101
- params: "The proof verification parameters"
2102
- },
2103
- returns: { _0: "True if the expiry date is after the given date, false otherwise" }
2104
- },
2105
- "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2106
- params: {
2107
- minDate: "The expiry date must be after or equal to this date",
2108
- params: "The proof verification parameters"
2109
- },
2110
- returns: {
2111
- _0: "True if the expiry date is after or equal to the given date, false otherwise"
2112
- }
2113
- },
2114
- "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2115
- params: {
2116
- maxDate: "The expiry date must be before this date",
2117
- params: "The proof verification parameters"
2118
- },
2119
- returns: { _0: "True if the expiry date is before the given date, false otherwise" }
2120
- },
2121
- "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2122
- params: {
2123
- maxDate: "The expiry date must be before or equal to this date",
2124
- params: "The proof verification parameters"
2125
- },
2126
- returns: {
2127
- _0: "True if the expiry date is before or equal to the given date, false otherwise"
2128
- }
2129
- },
2130
- "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2131
- params: {
2132
- maxDate: "The expiry date must be before or equal to this date",
2133
- minDate: "The expiry date must be after or equal to this date",
2134
- params: "The proof verification parameters"
2135
- },
2136
- returns: {
2137
- _0: "True if the expiry date is between the given dates, false otherwise"
2138
- }
2139
- },
2140
- "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2141
- params: {
2142
- date: "The expiry date must be equal to this date",
2143
- params: "The proof verification parameters"
2144
- },
2145
- returns: {
2146
- _0: "True if the expiry date is equal to the given date, false otherwise"
2147
- }
2148
- },
2149
- "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2150
- params: {
2151
- countryList: "The list of countries (needs to match exactly the list of countries in the proof)",
2152
- params: "The proof verification parameters"
2153
- },
2154
- returns: {
2155
- _0: "True if the issuing country is in the list of countries, false otherwise"
2156
- }
2157
- },
2158
- "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2159
- params: {
2160
- countryList: "The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order",
2161
- params: "The proof verification parameters"
2162
- },
2163
- returns: {
2164
- _0: "True if the issuing country is not in the list of countries, false otherwise"
2165
- }
2166
- },
2167
- "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2168
- params: {
2169
- countryList: "The list of countries (needs to match exactly the list of countries in the proof)",
2170
- params: "The proof verification parameters"
2171
- },
2172
- returns: {
2173
- _0: "True if the nationality is in the list of countries, false otherwise"
2174
- }
2175
- },
2176
- "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2177
- params: {
2178
- countryList: "The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order",
2179
- params: "The proof verification parameters"
2180
- },
2181
- returns: {
2182
- _0: "True if the nationality is not in the list of countries, false otherwise"
2183
- }
2184
- },
2185
- "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2186
- params: { params: "The proof verification parameters" },
2187
- returns: {
2188
- isValid: "True if the proof is valid, false otherwise",
2189
- uniqueIdentifier: "The unique identifier associated to the identity document that generated the proof"
2190
- }
2191
- },
2192
- "verifyScopes(bytes32[],string,string)": {
2193
- params: {
2194
- domain: "The domain to check against",
2195
- publicInputs: "The public inputs of the proof",
2196
- scope: "The scope to check against"
2197
- },
2198
- returns: {
2199
- _0: "True if the proof was generated for the given domain and scope, false otherwise"
2200
- }
2201
- }
2202
- },
2203
- version: 1
2204
- },
2205
- userdoc: {
2206
- kind: "user",
2207
- methods: {
2208
- "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2209
- notice: "Enforces that the proof checks against the expected sanction list(s)"
2210
- },
2211
- "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2212
- notice: "Gets the data bound to the proof"
2213
- },
2214
- "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": {
2215
- notice: "Gets the data disclosed by the proof"
2216
- },
2217
- "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2218
- notice: "Checks if the age is above the given age"
2219
- },
2220
- "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2221
- notice: "Checks if the age is above or equal to the given age"
2222
- },
2223
- "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2224
- notice: "Checks if the age is below the given age"
2225
- },
2226
- "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2227
- notice: "Checks if the age is below or equal to the given age"
2228
- },
2229
- "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2230
- notice: "Checks if the age is in the given range"
2231
- },
2232
- "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2233
- notice: "Checks if the age is equal to the given age"
2234
- },
2235
- "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2236
- notice: "Checks if the birthdate is after the given date"
2237
- },
2238
- "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2239
- notice: "Checks if the birthdate is after or equal to the given date"
2240
- },
2241
- "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2242
- notice: "Checks if the birthdate is before the given date"
2243
- },
2244
- "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2245
- notice: "Checks if the birthdate is before or equal to the given date"
2246
- },
2247
- "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2248
- notice: "Checks if the birthdate is between the given dates"
2249
- },
2250
- "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2251
- notice: "Checks if the birthdate is equal to the given date"
2252
- },
2253
- "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2254
- notice: "Checks if the expiry date is after the given date"
2255
- },
2256
- "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2257
- notice: "Checks if the expiry date is after or equal to the given date"
2258
- },
2259
- "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2260
- notice: "Checks if the expiry date is before the given date"
2261
- },
2262
- "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2263
- notice: "Checks if the expiry date is before or equal to the given date"
2264
- },
2265
- "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2266
- notice: "Checks if the expiry date is between the given dates"
2267
- },
2268
- "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2269
- notice: "Checks if the expiry date is equal to the given date"
2270
- },
2271
- "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2272
- notice: "Checks if the issuing country is in the list of countries"
2273
- },
2274
- "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2275
- notice: "Checks if the issuing country is not in the list of countries"
2276
- },
2277
- "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2278
- notice: "Checks if the nationality is in the list of countries"
2279
- },
2280
- "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2281
- notice: "Checks if the nationality is not in the list of countries"
2282
- },
2283
- "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2284
- notice: "Verifies a proof from ZKPassport"
2285
- },
2286
- "verifyScopes(bytes32[],string,string)": {
2287
- notice: "Verifies that the proof was generated for the given domain and scope"
2288
- }
2289
- },
2290
- version: 1
2291
- }
2292
- },
2293
- settings: {
2294
- remappings: ["forge-std/=lib/forge-std/src/"],
2295
- optimizer: { enabled: true, runs: 200 },
2296
- metadata: { bytecodeHash: "ipfs" },
2297
- compilationTarget: { "src/ZKPassportVerifier.sol": "ZKPassportVerifier" },
2298
- evmVersion: "cancun",
2299
- libraries: {}
2300
- },
2301
- sources: {
2302
- "src/Constants.sol": {
2303
- keccak256: "0xb1105acee68946ef452b55289a556a42289c3e1e849482d26cb8af4e2447ebdd",
2304
- urls: [
2305
- "bzz-raw://4639a621a472a215c320dd3f2d22e08d57028550df503bbffbd7330b57ba9ed8",
2306
- "dweb:/ipfs/QmfMoxNwnJMBNzHxUByv1eqtaktX1EGFqU2VJ4L1pYidJq"
2307
- ],
2308
- license: "Apache-2.0"
2309
- },
2310
- "src/DateUtils.sol": {
2311
- keccak256: "0xc04aef2f5732f8c3b28077a0af19e2fbbdec2f9178f3800563bf64ccdecefc77",
2312
- urls: [
2313
- "bzz-raw://bcc2610f3bdd3411fc040d39efe9e68f826b48986b2df7987f3adb6a1467c833",
2314
- "dweb:/ipfs/Qmc7uyW8Y7ekaKEdjd3kU9e1eDcCiAqsujGc5ZavuzGx4w"
2315
- ],
2316
- license: "Apache-2.0"
2317
- },
2318
- "src/IRootRegistry.sol": {
2319
- keccak256: "0xa9955e80821ca9ccbdf7d05a8ce9a3e237b4771e1f6e09190ed1c803a5e1e516",
2320
- urls: [
2321
- "bzz-raw://fd9fc9fbd7057a6bcc16a682e52be9ebd012954898626a11f0a0e8788644789d",
2322
- "dweb:/ipfs/QmZYpMRHdv4gMCNXCQtGQu8XqRVtNR9Kgkzh7u1YMpvrEB"
2323
- ],
2324
- license: "MIT"
2325
- },
2326
- "src/InputsExtractor.sol": {
2327
- keccak256: "0x55af333a1ed7cd5a1299f1b0778db0fc2a15f68903e9ae6a6034d24f13da03e7",
2328
- urls: [
2329
- "bzz-raw://10ccdb51863cfd11f222ecb3111f0f291aae3a19fdbef6d90233d08f02eab1d5",
2330
- "dweb:/ipfs/QmebPTX4Dbc5LkhG57YuTjEZgEvCk51ut3ZERZoqeGemsB"
2331
- ],
2332
- license: "Apache-2.0"
2333
- },
2334
- "src/StringUtils.sol": {
2335
- keccak256: "0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1",
2336
- urls: [
2337
- "bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342",
2338
- "dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"
2339
- ],
2340
- license: "Apache-2.0"
2341
- },
2342
- "src/Types.sol": {
2343
- keccak256: "0x6cd3120512911d8319b011016e19204c3f2d72b75efc2663cbde807571a5a7f0",
2344
- urls: [
2345
- "bzz-raw://ec0c51990097f62145282a34f553465843007d0c86e742652c5ea2c7878e78be",
2346
- "dweb:/ipfs/QmVUFfqiYGZuwbj5AA4smnSn5KpDyeKpw9iFmRzuK18dVo"
2347
- ],
2348
- license: "Apache-2.0"
2349
- },
2350
- "src/ZKPassportVerifier.sol": {
2351
- keccak256: "0x692154ad13d61bc9a232b33396888dcbe6f0ff46bbcd261e00ffa49c4afc8728",
2352
- urls: [
2353
- "bzz-raw://d1477d1851973999abda47bbb20d4f3120bc50b0ad9a3c5a041b768a2c9d47c3",
2354
- "dweb:/ipfs/QmZqefNqexmbFbQ7HUJUDwAAMjcDUobNUyhj1tDYj2HU9S"
2355
- ],
2356
- license: "Apache-2.0"
2357
- },
2358
- "src/ultra-honk-verifiers/OuterCount4.sol": {
2359
- keccak256: "0x9f343e672cd22bb67bda44f4ed5ce7318769dfd65270f52eadf70c12a2377aab",
2360
- urls: [
2361
- "bzz-raw://69a1177da0c5a7148676bef2a5e5c58840a66b2e142d2a0d331dca01dd0109ad",
2362
- "dweb:/ipfs/QmQ6iVmrCNEG6XE3ejP4dgBiw3XhMaGm1hW61z4rj7zsiF"
2363
- ],
2364
- license: "Apache-2.0"
2365
- }
2366
- },
2367
- version: 1
2368
- },
2369
- id: 26
2370
- };
2371
-
2372
- // src/index.ts
2373
26
  import { RegistryClient } from "@zkpassport/registry";
2374
27
  import { Bridge } from "@obsidion/bridge";
2375
28
  import {
@@ -2380,9 +33,6 @@ import {
2380
33
  ASEAN_COUNTRIES,
2381
34
  MERCOSUR_COUNTRIES
2382
35
  } from "@zkpassport/utils";
2383
- var VERSION = "0.8.7";
2384
- var DEFAULT_DATE_VALUE = /* @__PURE__ */ new Date(0);
2385
- var DEFAULT_VALIDITY = 7 * 24 * 60 * 60;
2386
36
  if (typeof globalThis.Buffer === "undefined") {
2387
37
  globalThis.Buffer = Buffer;
2388
38
  if (typeof window !== "undefined") {
@@ -2770,1856 +420,6 @@ var ZKPassport = class {
2770
420
  });
2771
421
  return this.getZkPassportRequest(topic);
2772
422
  }
2773
- checkDiscloseBytesPublicInputs(proof, queryResult) {
2774
- const queryResultErrors = {};
2775
- let isCorrect = true;
2776
- const disclosedDataPassport = DisclosedData.fromDisclosedBytes(
2777
- (proof.committedInputs?.disclose_bytes).disclosedBytes,
2778
- "passport"
2779
- );
2780
- const disclosedDataIDCard = DisclosedData.fromDisclosedBytes(
2781
- (proof.committedInputs?.disclose_bytes).disclosedBytes,
2782
- "id_card"
2783
- );
2784
- if (queryResult.document_type) {
2785
- if (queryResult.document_type.eq && queryResult.document_type.eq.result && queryResult.document_type.eq.expected !== disclosedDataPassport.documentType) {
2786
- console.warn("Document type does not match the expected document type");
2787
- isCorrect = false;
2788
- queryResultErrors.document_type = {
2789
- ...queryResultErrors.document_type,
2790
- eq: {
2791
- expected: `${queryResult.document_type.eq.expected}`,
2792
- received: `${disclosedDataPassport.documentType ?? disclosedDataIDCard.documentType}`,
2793
- message: "Document type does not match the expected document type"
2794
- }
2795
- };
2796
- }
2797
- if (queryResult.document_type.disclose?.result !== disclosedDataIDCard.documentType) {
2798
- console.warn("Document type does not match the disclosed document type in query result");
2799
- isCorrect = false;
2800
- queryResultErrors.document_type = {
2801
- ...queryResultErrors.document_type,
2802
- disclose: {
2803
- expected: `${queryResult.document_type.disclose?.result}`,
2804
- received: `${disclosedDataIDCard.documentType ?? disclosedDataPassport.documentType}`,
2805
- message: "Document type does not match the disclosed document type in query result"
2806
- }
2807
- };
2808
- }
2809
- }
2810
- if (queryResult.birthdate) {
2811
- const birthdatePassport = disclosedDataPassport.dateOfBirth;
2812
- const birthdateIDCard = disclosedDataIDCard.dateOfBirth;
2813
- if (queryResult.birthdate.eq && queryResult.birthdate.eq.result && !areDatesEqual(queryResult.birthdate.eq.expected, birthdatePassport) && !areDatesEqual(queryResult.birthdate.eq.expected, birthdateIDCard)) {
2814
- console.warn("Birthdate does not match the expected birthdate");
2815
- isCorrect = false;
2816
- queryResultErrors.birthdate = {
2817
- ...queryResultErrors.birthdate,
2818
- eq: {
2819
- expected: `${queryResult.birthdate.eq.expected.toISOString()}`,
2820
- received: `${birthdatePassport?.toISOString() ?? birthdateIDCard?.toISOString()}`,
2821
- message: "Birthdate does not match the expected birthdate"
2822
- }
2823
- };
2824
- }
2825
- if (queryResult.birthdate.disclose && !areDatesEqual(queryResult.birthdate.disclose.result, birthdatePassport) && !areDatesEqual(queryResult.birthdate.disclose.result, birthdateIDCard)) {
2826
- console.warn("Birthdate does not match the disclosed birthdate in query result");
2827
- isCorrect = false;
2828
- queryResultErrors.birthdate = {
2829
- ...queryResultErrors.birthdate,
2830
- disclose: {
2831
- expected: `${queryResult.birthdate.disclose.result.toISOString()}`,
2832
- received: `${birthdatePassport?.toISOString() ?? birthdateIDCard?.toISOString()}`,
2833
- message: "Birthdate does not match the disclosed birthdate in query result"
2834
- }
2835
- };
2836
- }
2837
- }
2838
- if (queryResult.expiry_date) {
2839
- const expiryDatePassport = disclosedDataPassport.dateOfExpiry;
2840
- const expiryDateIDCard = disclosedDataIDCard.dateOfExpiry;
2841
- if (queryResult.expiry_date.eq && queryResult.expiry_date.eq.result && !areDatesEqual(queryResult.expiry_date.eq.expected, expiryDatePassport) && !areDatesEqual(queryResult.expiry_date.eq.expected, expiryDateIDCard)) {
2842
- console.warn("Expiry date does not match the expected expiry date");
2843
- isCorrect = false;
2844
- queryResultErrors.expiry_date = {
2845
- ...queryResultErrors.expiry_date,
2846
- eq: {
2847
- expected: `${queryResult.expiry_date.eq.expected.toISOString()}`,
2848
- received: `${expiryDatePassport?.toISOString() ?? expiryDateIDCard?.toISOString()}`,
2849
- message: "Expiry date does not match the expected expiry date"
2850
- }
2851
- };
2852
- }
2853
- if (queryResult.expiry_date.disclose && !areDatesEqual(queryResult.expiry_date.disclose.result, expiryDatePassport) && !areDatesEqual(queryResult.expiry_date.disclose.result, expiryDateIDCard)) {
2854
- console.warn("Expiry date does not match the disclosed expiry date in query result");
2855
- isCorrect = false;
2856
- queryResultErrors.expiry_date = {
2857
- ...queryResultErrors.expiry_date,
2858
- disclose: {
2859
- expected: `${queryResult.expiry_date.disclose.result.toISOString()}`,
2860
- received: `${expiryDatePassport?.toISOString() ?? expiryDateIDCard?.toISOString()}`,
2861
- message: "Expiry date does not match the disclosed expiry date in query result"
2862
- }
2863
- };
2864
- }
2865
- }
2866
- if (queryResult.nationality) {
2867
- const nationalityPassport = disclosedDataPassport.nationality;
2868
- const nationalityIDCard = disclosedDataIDCard.nationality;
2869
- if (queryResult.nationality.eq && queryResult.nationality.eq.result && queryResult.nationality.eq.expected !== nationalityPassport && queryResult.nationality.eq.expected !== nationalityIDCard) {
2870
- console.warn("Nationality does not match the expected nationality");
2871
- isCorrect = false;
2872
- queryResultErrors.nationality = {
2873
- ...queryResultErrors.nationality,
2874
- eq: {
2875
- expected: `${queryResult.nationality.eq.expected}`,
2876
- received: `${nationalityPassport ?? nationalityIDCard}`,
2877
- message: "Nationality does not match the expected nationality"
2878
- }
2879
- };
2880
- }
2881
- if (queryResult.nationality.disclose && queryResult.nationality.disclose.result !== nationalityPassport && queryResult.nationality.disclose.result !== nationalityIDCard) {
2882
- console.warn("Nationality does not match the disclosed nationality in query result");
2883
- isCorrect = false;
2884
- queryResultErrors.nationality = {
2885
- ...queryResultErrors.nationality,
2886
- disclose: {
2887
- expected: `${queryResult.nationality.disclose.result}`,
2888
- received: `${nationalityPassport ?? nationalityIDCard}`,
2889
- message: "Nationality does not match the disclosed nationality in query result"
2890
- }
2891
- };
2892
- }
2893
- }
2894
- if (queryResult.document_number) {
2895
- const documentNumberPassport = disclosedDataPassport.documentNumber;
2896
- const documentNumberIDCard = disclosedDataIDCard.documentNumber;
2897
- if (queryResult.document_number.eq && queryResult.document_number.eq.result && queryResult.document_number.eq.expected !== documentNumberPassport && queryResult.document_number.eq.expected !== documentNumberIDCard) {
2898
- console.warn("Document number does not match the expected document number");
2899
- isCorrect = false;
2900
- queryResultErrors.document_number = {
2901
- ...queryResultErrors.document_number,
2902
- eq: {
2903
- expected: `${queryResult.document_number.eq.expected}`,
2904
- received: `${documentNumberPassport ?? documentNumberIDCard}`,
2905
- message: "Document number does not match the expected document number"
2906
- }
2907
- };
2908
- }
2909
- if (queryResult.document_number.disclose && queryResult.document_number.disclose.result !== documentNumberPassport && queryResult.document_number.disclose.result !== documentNumberIDCard) {
2910
- console.warn("Document number does not match the disclosed document number in query result");
2911
- isCorrect = false;
2912
- queryResultErrors.document_number = {
2913
- ...queryResultErrors.document_number,
2914
- disclose: {
2915
- expected: `${queryResult.document_number.disclose.result}`,
2916
- received: `${documentNumberPassport ?? documentNumberIDCard}`,
2917
- message: "Document number does not match the disclosed document number in query result"
2918
- }
2919
- };
2920
- }
2921
- }
2922
- if (queryResult.gender) {
2923
- const genderPassport = disclosedDataPassport.gender;
2924
- const genderIDCard = disclosedDataIDCard.gender;
2925
- if (queryResult.gender.eq && queryResult.gender.eq.result && queryResult.gender.eq.expected !== genderPassport && queryResult.gender.eq.expected !== genderIDCard) {
2926
- console.warn("Gender does not match the expected gender");
2927
- isCorrect = false;
2928
- queryResultErrors.gender = {
2929
- ...queryResultErrors.gender,
2930
- eq: {
2931
- expected: `${queryResult.gender.eq.expected}`,
2932
- received: `${genderPassport ?? genderIDCard}`,
2933
- message: "Gender does not match the expected gender"
2934
- }
2935
- };
2936
- }
2937
- if (queryResult.gender.disclose && queryResult.gender.disclose.result !== genderPassport && queryResult.gender.disclose.result !== genderIDCard) {
2938
- console.warn("Gender does not match the disclosed gender in query result");
2939
- isCorrect = false;
2940
- queryResultErrors.gender = {
2941
- ...queryResultErrors.gender,
2942
- disclose: {
2943
- expected: `${queryResult.gender.disclose.result}`,
2944
- received: `${genderPassport ?? genderIDCard}`,
2945
- message: "Gender does not match the disclosed gender in query result"
2946
- }
2947
- };
2948
- }
2949
- }
2950
- if (queryResult.issuing_country) {
2951
- const issuingCountryPassport = disclosedDataPassport.issuingCountry;
2952
- const issuingCountryIDCard = disclosedDataIDCard.issuingCountry;
2953
- if (queryResult.issuing_country.eq && queryResult.issuing_country.eq.result && queryResult.issuing_country.eq.expected !== issuingCountryPassport && queryResult.issuing_country.eq.expected !== issuingCountryIDCard) {
2954
- console.warn("Issuing country does not match the expected issuing country");
2955
- isCorrect = false;
2956
- queryResultErrors.issuing_country = {
2957
- ...queryResultErrors.issuing_country,
2958
- eq: {
2959
- expected: `${queryResult.issuing_country.eq.expected}`,
2960
- received: `${issuingCountryPassport ?? issuingCountryIDCard}`,
2961
- message: "Issuing country does not match the expected issuing country"
2962
- }
2963
- };
2964
- }
2965
- if (queryResult.issuing_country.disclose && queryResult.issuing_country.disclose.result !== issuingCountryPassport && queryResult.issuing_country.disclose.result !== issuingCountryIDCard) {
2966
- console.warn("Issuing country does not match the disclosed issuing country in query result");
2967
- isCorrect = false;
2968
- queryResultErrors.issuing_country = {
2969
- ...queryResultErrors.issuing_country,
2970
- disclose: {
2971
- expected: `${queryResult.issuing_country.disclose.result}`,
2972
- received: `${issuingCountryPassport ?? issuingCountryIDCard}`,
2973
- message: "Issuing country does not match the disclosed issuing country in query result"
2974
- }
2975
- };
2976
- }
2977
- }
2978
- if (queryResult.fullname) {
2979
- const fullnamePassport = disclosedDataPassport.name;
2980
- const fullnameIDCard = disclosedDataIDCard.name;
2981
- if (queryResult.fullname.eq && queryResult.fullname.eq.result && formatName(queryResult.fullname.eq.expected).toLowerCase() !== fullnamePassport.toLowerCase() && formatName(queryResult.fullname.eq.expected).toLowerCase() !== fullnameIDCard.toLowerCase()) {
2982
- console.warn("Fullname does not match the expected fullname");
2983
- isCorrect = false;
2984
- queryResultErrors.fullname = {
2985
- ...queryResultErrors.fullname,
2986
- eq: {
2987
- expected: `${queryResult.fullname.eq.expected}`,
2988
- received: `${fullnamePassport ?? fullnameIDCard}`,
2989
- message: "Fullname does not match the expected fullname"
2990
- }
2991
- };
2992
- }
2993
- if (queryResult.fullname.disclose && formatName(queryResult.fullname.disclose.result).toLowerCase() !== fullnamePassport.toLowerCase() && formatName(queryResult.fullname.disclose.result).toLowerCase() !== fullnameIDCard.toLowerCase()) {
2994
- console.warn("Fullname does not match the disclosed fullname in query result");
2995
- isCorrect = false;
2996
- queryResultErrors.fullname = {
2997
- ...queryResultErrors.fullname,
2998
- disclose: {
2999
- expected: `${queryResult.fullname.disclose.result}`,
3000
- received: `${fullnamePassport ?? fullnameIDCard}`,
3001
- message: "Fullname does not match the disclosed fullname in query result"
3002
- }
3003
- };
3004
- }
3005
- }
3006
- if (queryResult.firstname) {
3007
- const firstnamePassport = disclosedDataPassport.firstName && disclosedDataPassport.firstName.length > 0 ? disclosedDataPassport.firstName : disclosedDataPassport.name;
3008
- const firstnameIDCard = disclosedDataIDCard.firstName && disclosedDataIDCard.firstName.length > 0 ? disclosedDataIDCard.firstName : disclosedDataIDCard.name;
3009
- if (queryResult.firstname.eq && queryResult.firstname.eq.result && formatName(queryResult.firstname.eq.expected).toLowerCase() !== firstnamePassport.toLowerCase() && formatName(queryResult.firstname.eq.expected).toLowerCase() !== firstnameIDCard.toLowerCase()) {
3010
- console.warn("Firstname does not match the expected firstname");
3011
- isCorrect = false;
3012
- queryResultErrors.firstname = {
3013
- ...queryResultErrors.firstname,
3014
- eq: {
3015
- expected: `${queryResult.firstname.eq.expected}`,
3016
- received: `${firstnamePassport ?? firstnameIDCard}`,
3017
- message: "Firstname does not match the expected firstname"
3018
- }
3019
- };
3020
- }
3021
- if (queryResult.firstname.disclose && formatName(queryResult.firstname.disclose.result).toLowerCase() !== firstnamePassport.toLowerCase() && formatName(queryResult.firstname.disclose.result).toLowerCase() !== firstnameIDCard.toLowerCase()) {
3022
- console.warn("Firstname does not match the disclosed firstname in query result");
3023
- isCorrect = false;
3024
- queryResultErrors.firstname = {
3025
- ...queryResultErrors.firstname,
3026
- disclose: {
3027
- expected: `${queryResult.firstname.disclose.result}`,
3028
- received: `${firstnamePassport ?? firstnameIDCard}`,
3029
- message: "Firstname does not match the disclosed firstname in query result"
3030
- }
3031
- };
3032
- }
3033
- }
3034
- if (queryResult.lastname) {
3035
- const lastnamePassport = disclosedDataPassport.lastName && disclosedDataPassport.lastName.length > 0 ? disclosedDataPassport.lastName : disclosedDataPassport.name;
3036
- const lastnameIDCard = disclosedDataIDCard.lastName && disclosedDataIDCard.lastName.length > 0 ? disclosedDataIDCard.lastName : disclosedDataIDCard.name;
3037
- if (queryResult.lastname.eq && queryResult.lastname.eq.result && formatName(queryResult.lastname.eq.expected).toLowerCase() !== lastnamePassport.toLowerCase() && formatName(queryResult.lastname.eq.expected).toLowerCase() !== lastnameIDCard.toLowerCase()) {
3038
- console.warn("Lastname does not match the expected lastname");
3039
- isCorrect = false;
3040
- queryResultErrors.lastname = {
3041
- ...queryResultErrors.lastname,
3042
- eq: {
3043
- expected: `${queryResult.lastname.eq.expected}`,
3044
- received: `${lastnamePassport ?? lastnameIDCard}`,
3045
- message: "Lastname does not match the expected lastname"
3046
- }
3047
- };
3048
- }
3049
- if (queryResult.lastname.disclose && formatName(queryResult.lastname.disclose.result).toLowerCase() !== lastnamePassport.toLowerCase() && formatName(queryResult.lastname.disclose.result).toLowerCase() !== lastnameIDCard.toLowerCase()) {
3050
- console.warn("Lastname does not match the disclosed lastname in query result");
3051
- isCorrect = false;
3052
- queryResultErrors.lastname = {
3053
- ...queryResultErrors.lastname,
3054
- disclose: {
3055
- expected: `${queryResult.lastname.disclose.result}`,
3056
- received: `${lastnamePassport ?? lastnameIDCard}`,
3057
- message: "Lastname does not match the disclosed lastname in query result"
3058
- }
3059
- };
3060
- }
3061
- }
3062
- return { isCorrect, queryResultErrors };
3063
- }
3064
- checkAgePublicInputs(proof, queryResult) {
3065
- const queryResultErrors = {};
3066
- let isCorrect = true;
3067
- const currentTime = /* @__PURE__ */ new Date();
3068
- const today = new Date(
3069
- currentTime.getFullYear(),
3070
- currentTime.getMonth(),
3071
- currentTime.getDate(),
3072
- 0,
3073
- 0,
3074
- 0,
3075
- 0
3076
- );
3077
- const minAge = getMinAgeFromCommittedInputs(
3078
- proof.committedInputs?.compare_age
3079
- );
3080
- const maxAge = getMaxAgeFromCommittedInputs(
3081
- proof.committedInputs?.compare_age
3082
- );
3083
- if (queryResult.age) {
3084
- if (queryResult.age.gte && queryResult.age.gte.result && minAge !== queryResult.age.gte.expected) {
3085
- console.warn("Age is not greater than or equal to the expected age");
3086
- isCorrect = false;
3087
- queryResultErrors.age = {
3088
- ...queryResultErrors.age,
3089
- gte: {
3090
- expected: queryResult.age.gte.expected,
3091
- received: minAge,
3092
- message: "Age is not greater than or equal to the expected age"
3093
- }
3094
- };
3095
- }
3096
- if (queryResult.age.lt && queryResult.age.lt.result && maxAge !== queryResult.age.lt.expected) {
3097
- console.warn("Age is not less than the expected age");
3098
- isCorrect = false;
3099
- queryResultErrors.age = {
3100
- ...queryResultErrors.age,
3101
- lt: {
3102
- expected: queryResult.age.lt.expected,
3103
- received: maxAge,
3104
- message: "Age is not less than the expected age"
3105
- }
3106
- };
3107
- }
3108
- if (queryResult.age.range) {
3109
- if (queryResult.age.range.result && (minAge !== queryResult.age.range.expected[0] || maxAge !== queryResult.age.range.expected[1])) {
3110
- console.warn("Age is not in the expected range");
3111
- isCorrect = false;
3112
- queryResultErrors.age = {
3113
- ...queryResultErrors.age,
3114
- range: {
3115
- expected: queryResult.age.range.expected,
3116
- received: [minAge, maxAge],
3117
- message: "Age is not in the expected range"
3118
- }
3119
- };
3120
- }
3121
- }
3122
- if (!queryResult.age.lt && !queryResult.age.lte && !queryResult.age.eq && !queryResult.age.range && maxAge != 0) {
3123
- console.warn("Maximum age should be equal to 0");
3124
- isCorrect = false;
3125
- queryResultErrors.age = {
3126
- ...queryResultErrors.age,
3127
- disclose: {
3128
- expected: 0,
3129
- received: maxAge,
3130
- message: "Maximum age should be equal to 0"
3131
- }
3132
- };
3133
- }
3134
- if (!queryResult.age.gte && !queryResult.age.gt && !queryResult.age.eq && !queryResult.age.range && minAge != 0) {
3135
- console.warn("Minimum age should be equal to 0");
3136
- isCorrect = false;
3137
- queryResultErrors.age = {
3138
- ...queryResultErrors.age,
3139
- disclose: {
3140
- expected: 0,
3141
- received: minAge,
3142
- message: "Minimum age should be equal to 0"
3143
- }
3144
- };
3145
- }
3146
- if (queryResult.age.disclose && (queryResult.age.disclose.result !== minAge || queryResult.age.disclose.result !== maxAge)) {
3147
- console.warn("Age does not match the disclosed age in query result");
3148
- isCorrect = false;
3149
- queryResultErrors.age = {
3150
- ...queryResultErrors.age,
3151
- disclose: {
3152
- expected: `${minAge}`,
3153
- received: `${queryResult.age.disclose.result}`,
3154
- message: "Age does not match the disclosed age in query result"
3155
- }
3156
- };
3157
- }
3158
- } else {
3159
- console.warn("Age is not set in the query result");
3160
- isCorrect = false;
3161
- queryResultErrors.age = {
3162
- ...queryResultErrors.age,
3163
- disclose: {
3164
- message: "Age is not set in the query result"
3165
- }
3166
- };
3167
- }
3168
- const currentDate = getCurrentDateFromCommittedInputs(
3169
- proof.committedInputs?.compare_age
3170
- );
3171
- if (!areDatesEqual(currentDate, today) && !areDatesEqual(currentDate, today.getTime() - 864e5)) {
3172
- console.warn("Current date in the proof is too old");
3173
- isCorrect = false;
3174
- queryResultErrors.age = {
3175
- ...queryResultErrors.age,
3176
- disclose: {
3177
- expected: `${today.toISOString()}`,
3178
- received: `${currentDate.toISOString()}`,
3179
- message: "Current date in the proof is too old"
3180
- }
3181
- };
3182
- }
3183
- return { isCorrect, queryResultErrors };
3184
- }
3185
- checkBirthdatePublicInputs(proof, queryResult) {
3186
- const queryResultErrors = {};
3187
- let isCorrect = true;
3188
- const currentTime = /* @__PURE__ */ new Date();
3189
- const today = new Date(
3190
- currentTime.getFullYear(),
3191
- currentTime.getMonth(),
3192
- currentTime.getDate(),
3193
- 0,
3194
- 0,
3195
- 0
3196
- );
3197
- const minDate = getBirthdateMinDateTimestamp(
3198
- proof.committedInputs?.compare_birthdate,
3199
- -1 * SECONDS_BETWEEN_1900_AND_1970
3200
- );
3201
- const maxDate = getBirthdateMaxDateTimestamp(
3202
- proof.committedInputs?.compare_birthdate,
3203
- -1 * SECONDS_BETWEEN_1900_AND_1970
3204
- );
3205
- const currentDate = getCurrentDateFromCommittedInputs(
3206
- proof.committedInputs?.compare_birthdate
3207
- );
3208
- if (queryResult.birthdate) {
3209
- if (queryResult.birthdate.gte && queryResult.birthdate.gte.result && !areDatesEqual(minDate, queryResult.birthdate.gte.expected)) {
3210
- console.warn("Birthdate is not greater than or equal to the expected birthdate");
3211
- isCorrect = false;
3212
- queryResultErrors.birthdate = {
3213
- ...queryResultErrors.birthdate,
3214
- gte: {
3215
- expected: queryResult.birthdate.gte.expected,
3216
- received: minDate,
3217
- message: "Birthdate is not greater than or equal to the expected birthdate"
3218
- }
3219
- };
3220
- }
3221
- if (queryResult.birthdate.lte && queryResult.birthdate.lte.result && !areDatesEqual(maxDate, queryResult.birthdate.lte.expected)) {
3222
- console.warn("Birthdate is not less than the expected birthdate");
3223
- isCorrect = false;
3224
- queryResultErrors.birthdate = {
3225
- ...queryResultErrors.birthdate,
3226
- lte: {
3227
- expected: queryResult.birthdate.lte.expected,
3228
- received: maxDate,
3229
- message: "Birthdate is not less than the expected birthdate"
3230
- }
3231
- };
3232
- }
3233
- if (queryResult.birthdate.range) {
3234
- if (queryResult.birthdate.range.result && (!areDatesEqual(minDate, queryResult.birthdate.range.expected[0]) || !areDatesEqual(maxDate, queryResult.birthdate.range.expected[1]))) {
3235
- console.warn("Birthdate is not in the expected range");
3236
- isCorrect = false;
3237
- queryResultErrors.birthdate = {
3238
- ...queryResultErrors.birthdate,
3239
- range: {
3240
- expected: queryResult.birthdate.range.expected,
3241
- received: [minDate, maxDate],
3242
- message: "Birthdate is not in the expected range"
3243
- }
3244
- };
3245
- }
3246
- }
3247
- if (!queryResult.birthdate.lte && !queryResult.birthdate.lt && !queryResult.birthdate.eq && !queryResult.birthdate.range && !areDatesEqual(maxDate, DEFAULT_DATE_VALUE)) {
3248
- console.warn("Maximum birthdate should be equal to default date value");
3249
- isCorrect = false;
3250
- queryResultErrors.birthdate = {
3251
- ...queryResultErrors.birthdate,
3252
- disclose: {
3253
- expected: `${DEFAULT_DATE_VALUE.toISOString()}`,
3254
- received: `${maxDate.toISOString()}`,
3255
- message: "Maximum birthdate should be equal to default date value"
3256
- }
3257
- };
3258
- }
3259
- if (!queryResult.birthdate.gte && !queryResult.birthdate.gt && !queryResult.birthdate.eq && !queryResult.birthdate.range && !areDatesEqual(minDate, DEFAULT_DATE_VALUE)) {
3260
- console.warn("Minimum birthdate should be equal to default date value");
3261
- isCorrect = false;
3262
- queryResultErrors.birthdate = {
3263
- ...queryResultErrors.birthdate,
3264
- disclose: {
3265
- expected: `${DEFAULT_DATE_VALUE.toISOString()}`,
3266
- received: `${minDate.toISOString()}`,
3267
- message: "Minimum birthdate should be equal to default date value"
3268
- }
3269
- };
3270
- }
3271
- } else {
3272
- console.warn("Birthdate is not set in the query result");
3273
- isCorrect = false;
3274
- queryResultErrors.birthdate = {
3275
- ...queryResultErrors.birthdate,
3276
- disclose: {
3277
- message: "Birthdate is not set in the query result"
3278
- }
3279
- };
3280
- }
3281
- if (!areDatesEqual(currentDate, today) && !areDatesEqual(currentDate, today.getTime() - 864e5)) {
3282
- console.warn("Current date in the proof is too old");
3283
- isCorrect = false;
3284
- queryResultErrors.birthdate = {
3285
- ...queryResultErrors.birthdate,
3286
- disclose: {
3287
- expected: `${today.toISOString()}`,
3288
- received: `${currentDate.toISOString()}`,
3289
- message: "Current date in the proof is too old"
3290
- }
3291
- };
3292
- }
3293
- return { isCorrect, queryResultErrors };
3294
- }
3295
- checkExpiryDatePublicInputs(proof, queryResult) {
3296
- const queryResultErrors = {};
3297
- let isCorrect = true;
3298
- const currentTime = /* @__PURE__ */ new Date();
3299
- const today = new Date(
3300
- currentTime.getFullYear(),
3301
- currentTime.getMonth(),
3302
- currentTime.getDate(),
3303
- 0,
3304
- 0,
3305
- 0
3306
- );
3307
- const minDate = getMinDateFromCommittedInputs(
3308
- proof.committedInputs?.compare_expiry
3309
- );
3310
- const maxDate = getMaxDateFromCommittedInputs(
3311
- proof.committedInputs?.compare_expiry
3312
- );
3313
- const currentDate = getCurrentDateFromCommittedInputs(
3314
- proof.committedInputs?.compare_expiry
3315
- );
3316
- if (queryResult.expiry_date) {
3317
- if (queryResult.expiry_date.gte && queryResult.expiry_date.gte.result && !areDatesEqual(minDate, queryResult.expiry_date.gte.expected)) {
3318
- console.warn("Expiry date is not greater than or equal to the expected expiry date");
3319
- isCorrect = false;
3320
- queryResultErrors.expiry_date = {
3321
- ...queryResultErrors.expiry_date,
3322
- gte: {
3323
- expected: queryResult.expiry_date.gte.expected,
3324
- received: minDate,
3325
- message: "Expiry date is not greater than or equal to the expected expiry date"
3326
- }
3327
- };
3328
- }
3329
- if (queryResult.expiry_date.lte && queryResult.expiry_date.lte.result && !areDatesEqual(maxDate, queryResult.expiry_date.lte.expected)) {
3330
- console.warn("Expiry date is not less than the expected expiry date");
3331
- isCorrect = false;
3332
- queryResultErrors.expiry_date = {
3333
- ...queryResultErrors.expiry_date,
3334
- lte: {
3335
- expected: queryResult.expiry_date.lte.expected,
3336
- received: maxDate,
3337
- message: "Expiry date is not less than the expected expiry date"
3338
- }
3339
- };
3340
- }
3341
- if (queryResult.expiry_date.range) {
3342
- if (queryResult.expiry_date.range.result && (!areDatesEqual(minDate, queryResult.expiry_date.range.expected[0]) || !areDatesEqual(maxDate, queryResult.expiry_date.range.expected[1]))) {
3343
- console.warn("Expiry date is not in the expected range");
3344
- isCorrect = false;
3345
- queryResultErrors.expiry_date = {
3346
- ...queryResultErrors.expiry_date,
3347
- range: {
3348
- expected: queryResult.expiry_date.range.expected,
3349
- received: [minDate, maxDate],
3350
- message: "Expiry date is not in the expected range"
3351
- }
3352
- };
3353
- }
3354
- }
3355
- if (!queryResult.expiry_date.lte && !queryResult.expiry_date.lt && !queryResult.expiry_date.eq && !queryResult.expiry_date.range && !areDatesEqual(maxDate, DEFAULT_DATE_VALUE)) {
3356
- console.warn("Maximum expiry date should be equal to default date value");
3357
- isCorrect = false;
3358
- queryResultErrors.expiry_date = {
3359
- ...queryResultErrors.expiry_date,
3360
- disclose: {
3361
- expected: `${DEFAULT_DATE_VALUE.toISOString()}`,
3362
- received: `${maxDate.toISOString()}`,
3363
- message: "Maximum expiry date should be equal to default date value"
3364
- }
3365
- };
3366
- }
3367
- if (!queryResult.expiry_date.gte && !queryResult.expiry_date.gt && !queryResult.expiry_date.eq && !queryResult.expiry_date.range && !areDatesEqual(minDate, DEFAULT_DATE_VALUE)) {
3368
- console.warn("Minimum expiry date should be equal to default date value");
3369
- isCorrect = false;
3370
- queryResultErrors.expiry_date = {
3371
- ...queryResultErrors.expiry_date,
3372
- disclose: {
3373
- expected: `${DEFAULT_DATE_VALUE.toISOString()}`,
3374
- received: `${minDate.toISOString()}`,
3375
- message: "Minimum expiry date should be equal to default date value"
3376
- }
3377
- };
3378
- }
3379
- } else {
3380
- console.warn("Expiry date is not set in the query result");
3381
- isCorrect = false;
3382
- queryResultErrors.expiry_date = {
3383
- ...queryResultErrors.expiry_date,
3384
- disclose: {
3385
- message: "Expiry date is not set in the query result"
3386
- }
3387
- };
3388
- }
3389
- if (!areDatesEqual(currentDate, today) && !areDatesEqual(currentDate, today.getTime() - 864e5)) {
3390
- console.warn("Current date in the proof is too old");
3391
- isCorrect = false;
3392
- queryResultErrors.expiry_date = {
3393
- ...queryResultErrors.expiry_date,
3394
- disclose: {
3395
- expected: `${today.toISOString()}`,
3396
- received: `${currentDate.toISOString()}`,
3397
- message: "Current date in the proof is too old"
3398
- }
3399
- };
3400
- }
3401
- return { isCorrect, queryResultErrors };
3402
- }
3403
- checkNationalityExclusionPublicInputs(queryResult, countryList) {
3404
- const queryResultErrors = {};
3405
- let isCorrect = true;
3406
- if (queryResult.nationality && queryResult.nationality.out && queryResult.nationality.out.result) {
3407
- if (!queryResult.nationality.out.expected?.every((country) => countryList.includes(country))) {
3408
- console.warn("Nationality exclusion list does not match the one from the query results");
3409
- isCorrect = false;
3410
- queryResultErrors.nationality = {
3411
- ...queryResultErrors.nationality,
3412
- out: {
3413
- expected: queryResult.nationality.out.expected,
3414
- received: countryList,
3415
- message: "Nationality exclusion list does not match the one from the query results"
3416
- }
3417
- };
3418
- }
3419
- } else if (!queryResult.nationality || !queryResult.nationality.out) {
3420
- console.warn("Nationality exclusion is not set in the query result");
3421
- isCorrect = false;
3422
- queryResultErrors.nationality = {
3423
- ...queryResultErrors.nationality,
3424
- out: {
3425
- message: "Nationality exclusion is not set in the query result"
3426
- }
3427
- };
3428
- }
3429
- for (let i = 1; i < countryList.length; i++) {
3430
- if (countryList[i] < countryList[i - 1]) {
3431
- console.warn(
3432
- "The nationality exclusion list has not been sorted, and thus the proof cannot be trusted"
3433
- );
3434
- isCorrect = false;
3435
- queryResultErrors.nationality = {
3436
- ...queryResultErrors.nationality,
3437
- out: {
3438
- message: "The nationality exclusion list has not been sorted, and thus the proof cannot be trusted"
3439
- }
3440
- };
3441
- }
3442
- }
3443
- return { isCorrect, queryResultErrors };
3444
- }
3445
- checkIssuingCountryExclusionPublicInputs(queryResult, countryList) {
3446
- const queryResultErrors = {};
3447
- let isCorrect = true;
3448
- if (queryResult.issuing_country && queryResult.issuing_country.out && queryResult.issuing_country.out.result) {
3449
- if (!queryResult.issuing_country.out.expected?.every((country) => countryList.includes(country))) {
3450
- console.warn("Issuing country exclusion list does not match the one from the query results");
3451
- isCorrect = false;
3452
- queryResultErrors.issuing_country = {
3453
- ...queryResultErrors.issuing_country,
3454
- out: {
3455
- expected: queryResult.issuing_country.out.expected,
3456
- received: countryList,
3457
- message: "Issuing country exclusion list does not match the one from the query results"
3458
- }
3459
- };
3460
- }
3461
- } else if (!queryResult.issuing_country || !queryResult.issuing_country.out) {
3462
- console.warn("Issuing country exclusion is not set in the query result");
3463
- isCorrect = false;
3464
- queryResultErrors.issuing_country = {
3465
- ...queryResultErrors.issuing_country,
3466
- out: {
3467
- message: "Issuing country exclusion is not set in the query result"
3468
- }
3469
- };
3470
- }
3471
- for (let i = 1; i < countryList.length; i++) {
3472
- if (countryList[i] < countryList[i - 1]) {
3473
- console.warn(
3474
- "The issuing country exclusion list has not been sorted, and thus the proof cannot be trusted"
3475
- );
3476
- isCorrect = false;
3477
- queryResultErrors.issuing_country = {
3478
- ...queryResultErrors.issuing_country,
3479
- out: {
3480
- message: "The issuing country exclusion list has not been sorted, and thus the proof cannot be trusted"
3481
- }
3482
- };
3483
- }
3484
- }
3485
- return { isCorrect, queryResultErrors };
3486
- }
3487
- checkNationalityInclusionPublicInputs(queryResult, countryList) {
3488
- const queryResultErrors = {};
3489
- let isCorrect = true;
3490
- if (queryResult.nationality && queryResult.nationality.in && queryResult.nationality.in.result) {
3491
- if (!queryResult.nationality.in.expected?.every((country) => countryList.includes(country))) {
3492
- console.warn("Nationality inclusion list does not match the one from the query results");
3493
- isCorrect = false;
3494
- queryResultErrors.nationality = {
3495
- ...queryResultErrors.nationality,
3496
- in: {
3497
- expected: queryResult.nationality.in.expected,
3498
- received: countryList,
3499
- message: "Nationality inclusion list does not match the one from the query results"
3500
- }
3501
- };
3502
- }
3503
- } else if (!queryResult.nationality || !queryResult.nationality.in) {
3504
- console.warn("Nationality inclusion is not set in the query result");
3505
- isCorrect = false;
3506
- queryResultErrors.nationality = {
3507
- ...queryResultErrors.nationality,
3508
- in: {
3509
- message: "Nationality inclusion is not set in the query result"
3510
- }
3511
- };
3512
- }
3513
- return { isCorrect, queryResultErrors };
3514
- }
3515
- checkIssuingCountryInclusionPublicInputs(queryResult, countryList) {
3516
- const queryResultErrors = {};
3517
- let isCorrect = true;
3518
- if (queryResult.issuing_country && queryResult.issuing_country.in && queryResult.issuing_country.in.result) {
3519
- if (!queryResult.issuing_country.in.expected?.every((country) => countryList.includes(country))) {
3520
- console.warn("Issuing country inclusion list does not match the one from the query results");
3521
- isCorrect = false;
3522
- queryResultErrors.issuing_country = {
3523
- ...queryResultErrors.issuing_country,
3524
- in: {
3525
- expected: queryResult.issuing_country.in.expected,
3526
- received: countryList,
3527
- message: "Issuing country inclusion list does not match the one from the query results"
3528
- }
3529
- };
3530
- }
3531
- } else if (!queryResult.issuing_country || !queryResult.issuing_country.in) {
3532
- console.warn("Issuing country inclusion is not set in the query result");
3533
- isCorrect = false;
3534
- queryResultErrors.issuing_country = {
3535
- ...queryResultErrors.issuing_country,
3536
- in: {
3537
- message: "Issuing country inclusion is not set in the query result"
3538
- }
3539
- };
3540
- }
3541
- return { isCorrect, queryResultErrors };
3542
- }
3543
- checkScopeFromDisclosureProof(proofData, queryResultErrors, key, scope) {
3544
- let isCorrect = true;
3545
- if (this.domain && getServiceScopeHash(this.domain) !== BigInt(proofData.publicInputs[1])) {
3546
- console.warn("The proof comes from a different domain than the one expected");
3547
- isCorrect = false;
3548
- if (!queryResultErrors[key]) {
3549
- queryResultErrors[key] = {};
3550
- }
3551
- queryResultErrors[key].scope = {
3552
- expected: `Scope: ${getServiceScopeHash(this.domain).toString()}`,
3553
- received: `Scope: ${BigInt(proofData.publicInputs[1]).toString()}`,
3554
- message: "The proof comes from a different domain than the one expected"
3555
- };
3556
- }
3557
- if (scope && getScopeHash(scope) !== BigInt(proofData.publicInputs[2])) {
3558
- console.warn("The proof uses a different scope than the one expected");
3559
- isCorrect = false;
3560
- if (!queryResultErrors[key]) {
3561
- queryResultErrors[key] = {};
3562
- }
3563
- queryResultErrors[key].scope = {
3564
- expected: `Scope: ${getScopeHash(scope).toString()}`,
3565
- received: `Scope: ${BigInt(proofData.publicInputs[2]).toString()}`,
3566
- message: "The proof uses a different scope than the one expected"
3567
- };
3568
- }
3569
- return { isCorrect, queryResultErrors };
3570
- }
3571
- async checkCertificateRegistryRoot(root, queryResultErrors, outer) {
3572
- let isCorrect = true;
3573
- try {
3574
- const registryClient = new RegistryClient({ chainId: 11155111 });
3575
- const isValid = await registryClient.isCertificateRootValid(root);
3576
- if (!isValid) {
3577
- console.warn("The ID was signed by an unrecognized root certificate");
3578
- isCorrect = false;
3579
- if (!queryResultErrors[outer ? "outer" : "sig_check_dsc"]) {
3580
- queryResultErrors[outer ? "outer" : "sig_check_dsc"] = {};
3581
- }
3582
- queryResultErrors[outer ? "outer" : "sig_check_dsc"].certificate = {
3583
- expected: `A valid root from ZKPassport Registry`,
3584
- received: `Got invalid certificate registry root: ${root}`,
3585
- message: "The ID was signed by an unrecognized root certificate"
3586
- };
3587
- }
3588
- } catch (error) {
3589
- console.warn(error);
3590
- console.warn("The ID was signed by an unrecognized root certificate");
3591
- isCorrect = false;
3592
- if (!queryResultErrors[outer ? "outer" : "sig_check_dsc"]) {
3593
- queryResultErrors[outer ? "outer" : "sig_check_dsc"] = {};
3594
- }
3595
- queryResultErrors[outer ? "outer" : "sig_check_dsc"].certificate = {
3596
- expected: `A valid root from ZKPassport Registry`,
3597
- received: `Got invalid certificate registry root: ${root}`,
3598
- message: "The ID was signed by an unrecognized root certificate"
3599
- };
3600
- }
3601
- return { isCorrect, queryResultErrors };
3602
- }
3603
- async checkCircuitRegistryRoot(root, queryResultErrors) {
3604
- let isCorrect = true;
3605
- try {
3606
- const registryClient = new RegistryClient({ chainId: 11155111 });
3607
- const isValid = await registryClient.isCircuitRootValid(root);
3608
- if (!isValid) {
3609
- console.warn("The proof uses unrecognized circuits");
3610
- isCorrect = false;
3611
- queryResultErrors.outer.circuit = {
3612
- expected: `A valid circuit from ZKPassport Registry`,
3613
- received: `Got invalid circuit registry root: ${root}`,
3614
- message: "The proof uses an unrecognized circuit"
3615
- };
3616
- }
3617
- } catch (error) {
3618
- console.warn(error);
3619
- console.warn("The proof uses unrecognized circuits");
3620
- isCorrect = false;
3621
- queryResultErrors.outer.circuit = {
3622
- expected: `A valid circuit from ZKPassport Registry`,
3623
- received: `Got invalid circuit registry root: ${root}`,
3624
- message: "The proof uses an unrecognized circuit"
3625
- };
3626
- }
3627
- return { isCorrect, queryResultErrors };
3628
- }
3629
- checkBindPublicInputs(queryResult, boundData) {
3630
- const queryResultErrors = {};
3631
- let isCorrect = true;
3632
- if (queryResult.bind) {
3633
- if (queryResult.bind.user_address?.toLowerCase().replace("0x", "") !== boundData.user_address?.toLowerCase().replace("0x", "")) {
3634
- console.warn("Bound user address does not match the one from the query results");
3635
- isCorrect = false;
3636
- queryResultErrors.bind = {
3637
- ...queryResultErrors.bind,
3638
- eq: {
3639
- expected: queryResult.bind.user_address,
3640
- received: boundData.user_address,
3641
- message: "Bound user address does not match the one from the query results"
3642
- }
3643
- };
3644
- }
3645
- if (queryResult.bind.chain !== boundData.chain) {
3646
- console.warn("Bound chain id does not match the one from the query results");
3647
- isCorrect = false;
3648
- queryResultErrors.bind = {
3649
- ...queryResultErrors.bind,
3650
- eq: {
3651
- expected: queryResult.bind.chain,
3652
- received: boundData.chain,
3653
- message: "Bound chain id does not match the one from the query results"
3654
- }
3655
- };
3656
- }
3657
- if (queryResult.bind.custom_data?.trim().toLowerCase() !== boundData.custom_data?.trim().toLowerCase()) {
3658
- console.warn("Bound custom data does not match the one from the query results");
3659
- isCorrect = false;
3660
- queryResultErrors.bind = {
3661
- ...queryResultErrors.bind,
3662
- eq: {
3663
- expected: queryResult.bind.custom_data,
3664
- received: boundData.custom_data,
3665
- message: "Bound custom data does not match the one from the query results"
3666
- }
3667
- };
3668
- }
3669
- }
3670
- return { isCorrect, queryResultErrors };
3671
- }
3672
- async checkSanctionsExclusionPublicInputs(queryResult, root, sanctionsBuilder) {
3673
- const queryResultErrors = {};
3674
- let isCorrect = true;
3675
- if (queryResult.sanctions && queryResult.sanctions.passed) {
3676
- const EXPECTED_ROOT = await sanctionsBuilder.getRoot();
3677
- if (root !== EXPECTED_ROOT) {
3678
- console.warn("Invalid sanctions registry root");
3679
- isCorrect = false;
3680
- queryResultErrors.sanctions = {
3681
- ...queryResultErrors.sanctions,
3682
- eq: {
3683
- expected: EXPECTED_ROOT,
3684
- received: root,
3685
- message: "Invalid sanctions registry root"
3686
- }
3687
- };
3688
- }
3689
- }
3690
- return { isCorrect, queryResultErrors };
3691
- }
3692
- async checkPublicInputs(proofs, queryResult, validity, scope) {
3693
- let commitmentIn;
3694
- let commitmentOut;
3695
- let isCorrect = true;
3696
- let uniqueIdentifier;
3697
- const currentTime = /* @__PURE__ */ new Date();
3698
- const today = new Date(
3699
- currentTime.getFullYear(),
3700
- currentTime.getMonth(),
3701
- currentTime.getDate(),
3702
- 0,
3703
- 0,
3704
- 0,
3705
- 0
3706
- );
3707
- let queryResultErrors = {};
3708
- const sortedProofs = proofs.sort((a, b) => {
3709
- const proofOrder = [
3710
- "sig_check_dsc",
3711
- "sig_check_id_data",
3712
- "data_check_integrity",
3713
- "disclose_bytes",
3714
- "compare_age",
3715
- "compare_birthdate",
3716
- "compare_expiry",
3717
- "exclusion_check_nationality",
3718
- "inclusion_check_nationality",
3719
- "exclusion_check_issuing_country",
3720
- "inclusion_check_issuing_country",
3721
- "bind",
3722
- "exclusion_check_sanctions"
3723
- ];
3724
- const getIndex = (proof) => {
3725
- const name = proof.name || "";
3726
- return proofOrder.findIndex((p) => name.startsWith(p));
3727
- };
3728
- return getIndex(a) - getIndex(b);
3729
- });
3730
- for (const proof of sortedProofs) {
3731
- const proofData = getProofData(proof.proof, getNumberOfPublicInputs(proof.name));
3732
- if (proof.name?.startsWith("outer")) {
3733
- const isForEVM = proof.name?.startsWith("outer_evm");
3734
- const certificateRegistryRoot = getCertificateRegistryRootFromOuterProof(proofData);
3735
- const {
3736
- isCorrect: isCorrectCertificateRegistryRoot,
3737
- queryResultErrors: queryResultErrorsCertificateRegistryRoot
3738
- } = await this.checkCertificateRegistryRoot(
3739
- certificateRegistryRoot.toString(16),
3740
- queryResultErrors,
3741
- true
3742
- );
3743
- isCorrect = isCorrect && isCorrectCertificateRegistryRoot;
3744
- queryResultErrors = {
3745
- ...queryResultErrors,
3746
- ...queryResultErrorsCertificateRegistryRoot
3747
- };
3748
- const circuitRegistryRoot = getCircuitRegistryRootFromOuterProof(proofData);
3749
- const {
3750
- isCorrect: isCorrectCircuitRegistryRoot,
3751
- queryResultErrors: queryResultErrorsCircuitRegistryRoot
3752
- } = await this.checkCircuitRegistryRoot(circuitRegistryRoot.toString(16), queryResultErrors);
3753
- isCorrect = isCorrect && isCorrectCircuitRegistryRoot;
3754
- queryResultErrors = {
3755
- ...queryResultErrors,
3756
- ...queryResultErrorsCircuitRegistryRoot
3757
- };
3758
- const currentDate = getCurrentDateFromOuterProof(proofData);
3759
- const todayToCurrentDate = today.getTime() - currentDate.getTime();
3760
- const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
3761
- const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
3762
- if (todayToCurrentDate >= actualDifference) {
3763
- console.warn(
3764
- `The date used to check the validity of the ID is older than the validity period`
3765
- );
3766
- isCorrect = false;
3767
- queryResultErrors.outer = {
3768
- ...queryResultErrors.outer,
3769
- date: {
3770
- expected: `Difference: ${validity} seconds`,
3771
- received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
3772
- message: "The date used to check the validity of the ID is older than the validity period"
3773
- }
3774
- };
3775
- }
3776
- const paramCommitments = getParamCommitmentsFromOuterProof(proofData);
3777
- const committedInputs = proof.committedInputs;
3778
- const keysInCommittedInputs = Object.keys(committedInputs || {});
3779
- if (keysInCommittedInputs.length !== paramCommitments.length) {
3780
- console.warn("The proof does not verify all the requested conditions and information");
3781
- isCorrect = false;
3782
- queryResultErrors.outer = {
3783
- ...queryResultErrors.outer,
3784
- commitment: {
3785
- expected: `Number of parameter commitments: ${paramCommitments.length}`,
3786
- received: `Number of disclosure proofs provided: ${keysInCommittedInputs.length}`,
3787
- message: "The proof does not verify all the requested conditions and information"
3788
- }
3789
- };
3790
- }
3791
- if (this.domain && getServiceScopeHash(this.domain) !== getScopeFromOuterProof(proofData)) {
3792
- console.warn("The proof comes from a different domain than the one expected");
3793
- isCorrect = false;
3794
- queryResultErrors.outer = {
3795
- ...queryResultErrors.outer,
3796
- scope: {
3797
- expected: `Scope: ${getServiceScopeHash(this.domain).toString()}`,
3798
- received: `Scope: ${getScopeFromOuterProof(proofData).toString()}`,
3799
- message: "The proof comes from a different domain than the one expected"
3800
- }
3801
- };
3802
- }
3803
- if (scope && getScopeHash(scope) !== getSubscopeFromOuterProof(proofData)) {
3804
- console.warn("The proof uses a different scope than the one expected");
3805
- isCorrect = false;
3806
- queryResultErrors.outer = {
3807
- ...queryResultErrors.outer,
3808
- scope: {
3809
- expected: `Scope: ${getScopeHash(scope).toString()}`,
3810
- received: `Scope: ${getSubscopeFromOuterProof(proofData).toString()}`,
3811
- message: "The proof uses a different scope than the one expected"
3812
- }
3813
- };
3814
- }
3815
- if (!!committedInputs?.compare_age) {
3816
- const ageCommittedInputs = committedInputs?.compare_age;
3817
- const ageParameterCommitment = isForEVM ? await getAgeEVMParameterCommitment(
3818
- ageCommittedInputs.currentDateTimestamp,
3819
- ageCommittedInputs.minAge,
3820
- ageCommittedInputs.maxAge
3821
- ) : await getAgeParameterCommitment(
3822
- ageCommittedInputs.currentDateTimestamp,
3823
- ageCommittedInputs.minAge,
3824
- ageCommittedInputs.maxAge
3825
- );
3826
- if (!paramCommitments.includes(ageParameterCommitment)) {
3827
- console.warn("This proof does not verify the age");
3828
- isCorrect = false;
3829
- queryResultErrors.age = {
3830
- ...queryResultErrors.age,
3831
- commitment: {
3832
- expected: `Age parameter commitment: ${ageParameterCommitment.toString()}`,
3833
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3834
- message: "This proof does not verify the age"
3835
- }
3836
- };
3837
- }
3838
- const { isCorrect: isCorrectAge, queryResultErrors: queryResultErrorsAge } = this.checkAgePublicInputs(proof, queryResult);
3839
- isCorrect = isCorrect && isCorrectAge;
3840
- queryResultErrors = {
3841
- ...queryResultErrors,
3842
- ...queryResultErrorsAge
3843
- };
3844
- } else if (!!committedInputs?.compare_birthdate) {
3845
- const birthdateCommittedInputs = committedInputs?.compare_birthdate;
3846
- const birthdateParameterCommitment = isForEVM ? await getDateEVMParameterCommitment(
3847
- ProofType.BIRTHDATE,
3848
- birthdateCommittedInputs.currentDateTimestamp,
3849
- birthdateCommittedInputs.minDateTimestamp,
3850
- birthdateCommittedInputs.maxDateTimestamp,
3851
- 0
3852
- ) : await getDateParameterCommitment(
3853
- ProofType.BIRTHDATE,
3854
- birthdateCommittedInputs.currentDateTimestamp,
3855
- birthdateCommittedInputs.minDateTimestamp,
3856
- birthdateCommittedInputs.maxDateTimestamp,
3857
- 0
3858
- );
3859
- if (!paramCommitments.includes(birthdateParameterCommitment)) {
3860
- console.warn("This proof does not verify the birthdate");
3861
- isCorrect = false;
3862
- queryResultErrors.birthdate = {
3863
- ...queryResultErrors.birthdate,
3864
- commitment: {
3865
- expected: `Birthdate parameter commitment: ${birthdateParameterCommitment.toString()}`,
3866
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3867
- message: "This proof does not verify the birthdate"
3868
- }
3869
- };
3870
- }
3871
- const { isCorrect: isCorrectBirthdate, queryResultErrors: queryResultErrorsBirthdate } = this.checkBirthdatePublicInputs(proof, queryResult);
3872
- isCorrect = isCorrect && isCorrectBirthdate;
3873
- queryResultErrors = {
3874
- ...queryResultErrors,
3875
- ...queryResultErrorsBirthdate
3876
- };
3877
- } else if (!!committedInputs?.compare_expiry) {
3878
- const expiryCommittedInputs = committedInputs?.compare_expiry;
3879
- const expiryParameterCommitment = isForEVM ? await getDateEVMParameterCommitment(
3880
- ProofType.EXPIRY_DATE,
3881
- expiryCommittedInputs.currentDateTimestamp,
3882
- expiryCommittedInputs.minDateTimestamp,
3883
- expiryCommittedInputs.maxDateTimestamp
3884
- ) : await getDateParameterCommitment(
3885
- ProofType.EXPIRY_DATE,
3886
- expiryCommittedInputs.currentDateTimestamp,
3887
- expiryCommittedInputs.minDateTimestamp,
3888
- expiryCommittedInputs.maxDateTimestamp
3889
- );
3890
- if (!paramCommitments.includes(expiryParameterCommitment)) {
3891
- console.warn("This proof does not verify the expiry date");
3892
- isCorrect = false;
3893
- queryResultErrors.expiry_date = {
3894
- ...queryResultErrors.expiry_date,
3895
- commitment: {
3896
- expected: `Expiry date parameter commitment: ${expiryParameterCommitment.toString()}`,
3897
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3898
- message: "This proof does not verify the expiry date"
3899
- }
3900
- };
3901
- }
3902
- const { isCorrect: isCorrectExpiryDate, queryResultErrors: queryResultErrorsExpiryDate } = this.checkExpiryDatePublicInputs(proof, queryResult);
3903
- isCorrect = isCorrect && isCorrectExpiryDate;
3904
- queryResultErrors = {
3905
- ...queryResultErrors,
3906
- ...queryResultErrorsExpiryDate
3907
- };
3908
- } else if (!!committedInputs?.disclose_bytes) {
3909
- const discloseCommittedInputs = committedInputs?.disclose_bytes;
3910
- const discloseParameterCommitment = isForEVM ? await getDiscloseEVMParameterCommitment(
3911
- discloseCommittedInputs.discloseMask,
3912
- discloseCommittedInputs.disclosedBytes
3913
- ) : await getDiscloseParameterCommitment(
3914
- discloseCommittedInputs.discloseMask,
3915
- discloseCommittedInputs.disclosedBytes
3916
- );
3917
- if (!paramCommitments.includes(discloseParameterCommitment)) {
3918
- console.warn("This proof does not verify any of the data disclosed");
3919
- isCorrect = false;
3920
- queryResultErrors.disclose = {
3921
- ...queryResultErrors.disclose,
3922
- commitment: {
3923
- expected: `Disclosure parameter commitment: ${discloseParameterCommitment.toString()}`,
3924
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3925
- message: "This proof does not verify any of the data disclosed"
3926
- }
3927
- };
3928
- }
3929
- const { isCorrect: isCorrectDisclose, queryResultErrors: queryResultErrorsDisclose } = this.checkDiscloseBytesPublicInputs(proof, queryResult);
3930
- isCorrect = isCorrect && isCorrectDisclose;
3931
- queryResultErrors = {
3932
- ...queryResultErrors,
3933
- ...queryResultErrorsDisclose
3934
- };
3935
- } else if (!!committedInputs?.inclusion_check_nationality) {
3936
- const inclusionCheckNationalityCommittedInputs = committedInputs?.inclusion_check_nationality;
3937
- const inclusionCheckNationalityParameterCommitment = isForEVM ? await getCountryEVMParameterCommitment(
3938
- ProofType.NATIONALITY_INCLUSION,
3939
- inclusionCheckNationalityCommittedInputs.countries
3940
- ) : await getCountryParameterCommitment(
3941
- ProofType.NATIONALITY_INCLUSION,
3942
- inclusionCheckNationalityCommittedInputs.countries
3943
- );
3944
- if (!paramCommitments.includes(inclusionCheckNationalityParameterCommitment)) {
3945
- console.warn("This proof does not verify the inclusion of the nationality");
3946
- isCorrect = false;
3947
- queryResultErrors.nationality = {
3948
- ...queryResultErrors.nationality,
3949
- commitment: {
3950
- expected: `Nationality parameter commitment: ${inclusionCheckNationalityParameterCommitment.toString()}`,
3951
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3952
- message: "This proof does not verify the inclusion of the nationality"
3953
- }
3954
- };
3955
- }
3956
- const countryList = inclusionCheckNationalityCommittedInputs.countries;
3957
- const {
3958
- isCorrect: isCorrectNationalityInclusion,
3959
- queryResultErrors: queryResultErrorsNationalityInclusion
3960
- } = this.checkNationalityInclusionPublicInputs(queryResult, countryList);
3961
- isCorrect = isCorrect && isCorrectNationalityInclusion;
3962
- queryResultErrors = {
3963
- ...queryResultErrors,
3964
- ...queryResultErrorsNationalityInclusion
3965
- };
3966
- } else if (!!committedInputs?.inclusion_check_issuing_country) {
3967
- const inclusionCheckIssuingCountryCommittedInputs = committedInputs?.inclusion_check_issuing_country;
3968
- const inclusionCheckIssuingCountryParameterCommitment = isForEVM ? await getCountryEVMParameterCommitment(
3969
- ProofType.ISSUING_COUNTRY_INCLUSION,
3970
- inclusionCheckIssuingCountryCommittedInputs.countries
3971
- ) : await getCountryParameterCommitment(
3972
- ProofType.ISSUING_COUNTRY_INCLUSION,
3973
- inclusionCheckIssuingCountryCommittedInputs.countries
3974
- );
3975
- if (!paramCommitments.includes(inclusionCheckIssuingCountryParameterCommitment)) {
3976
- console.warn("This proof does not verify the inclusion of the issuing country");
3977
- isCorrect = false;
3978
- queryResultErrors.issuing_country = {
3979
- ...queryResultErrors.issuing_country,
3980
- commitment: {
3981
- expected: `Issuing country parameter commitment: ${inclusionCheckIssuingCountryParameterCommitment.toString()}`,
3982
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
3983
- message: "This proof does not verify the inclusion of the issuing country"
3984
- }
3985
- };
3986
- }
3987
- const countryList = inclusionCheckIssuingCountryCommittedInputs.countries;
3988
- const {
3989
- isCorrect: isCorrectIssuingCountryInclusion,
3990
- queryResultErrors: queryResultErrorsIssuingCountryInclusion
3991
- } = this.checkIssuingCountryInclusionPublicInputs(queryResult, countryList);
3992
- isCorrect = isCorrect && isCorrectIssuingCountryInclusion;
3993
- queryResultErrors = {
3994
- ...queryResultErrors,
3995
- ...queryResultErrorsIssuingCountryInclusion
3996
- };
3997
- } else if (!!committedInputs?.exclusion_check_nationality) {
3998
- const exclusionCheckNationalityCommittedInputs = committedInputs?.exclusion_check_nationality;
3999
- const exclusionCheckNationalityParameterCommitment = isForEVM ? await getCountryEVMParameterCommitment(
4000
- ProofType.NATIONALITY_EXCLUSION,
4001
- exclusionCheckNationalityCommittedInputs.countries
4002
- ) : await getCountryParameterCommitment(
4003
- ProofType.NATIONALITY_EXCLUSION,
4004
- exclusionCheckNationalityCommittedInputs.countries
4005
- );
4006
- if (!paramCommitments.includes(exclusionCheckNationalityParameterCommitment)) {
4007
- console.warn("This proof does not verify the exclusion of the nationality");
4008
- isCorrect = false;
4009
- queryResultErrors.nationality = {
4010
- ...queryResultErrors.nationality,
4011
- commitment: {
4012
- expected: `Nationality parameter commitment: ${exclusionCheckNationalityParameterCommitment.toString()}`,
4013
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
4014
- message: "This proof does not verify the exclusion of the nationality"
4015
- }
4016
- };
4017
- }
4018
- const countryList = exclusionCheckNationalityCommittedInputs.countries;
4019
- const {
4020
- isCorrect: isCorrectNationalityExclusion,
4021
- queryResultErrors: queryResultErrorsNationalityExclusion
4022
- } = this.checkNationalityExclusionPublicInputs(queryResult, countryList);
4023
- isCorrect = isCorrect && isCorrectNationalityExclusion;
4024
- queryResultErrors = {
4025
- ...queryResultErrors,
4026
- ...queryResultErrorsNationalityExclusion
4027
- };
4028
- } else if (!!committedInputs?.exclusion_check_issuing_country) {
4029
- const exclusionCheckIssuingCountryCommittedInputs = committedInputs?.exclusion_check_issuing_country;
4030
- const exclusionCheckIssuingCountryParameterCommitment = isForEVM ? await getCountryEVMParameterCommitment(
4031
- ProofType.ISSUING_COUNTRY_EXCLUSION,
4032
- exclusionCheckIssuingCountryCommittedInputs.countries
4033
- ) : await getCountryParameterCommitment(
4034
- ProofType.ISSUING_COUNTRY_EXCLUSION,
4035
- exclusionCheckIssuingCountryCommittedInputs.countries
4036
- );
4037
- if (!paramCommitments.includes(exclusionCheckIssuingCountryParameterCommitment)) {
4038
- console.warn("This proof does not verify the exclusion of the issuing country");
4039
- isCorrect = false;
4040
- queryResultErrors.issuing_country = {
4041
- ...queryResultErrors.issuing_country,
4042
- commitment: {
4043
- expected: `Issuing country parameter commitment: ${exclusionCheckIssuingCountryParameterCommitment.toString()}`,
4044
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
4045
- message: "This proof does not verify the exclusion of the issuing country"
4046
- }
4047
- };
4048
- }
4049
- const countryList = exclusionCheckIssuingCountryCommittedInputs.countries;
4050
- const {
4051
- isCorrect: isCorrectIssuingCountryExclusion,
4052
- queryResultErrors: queryResultErrorsIssuingCountryExclusion
4053
- } = this.checkIssuingCountryExclusionPublicInputs(queryResult, countryList);
4054
- isCorrect = isCorrect && isCorrectIssuingCountryExclusion;
4055
- queryResultErrors = {
4056
- ...queryResultErrors,
4057
- ...queryResultErrorsIssuingCountryExclusion
4058
- };
4059
- } else if (!!committedInputs?.bind) {
4060
- const bindCommittedInputs = committedInputs?.bind;
4061
- const bindParameterCommitment = isForEVM ? await getBindEVMParameterCommitment(formatBoundData(bindCommittedInputs.data)) : await getBindParameterCommitment(formatBoundData(bindCommittedInputs.data));
4062
- if (!paramCommitments.includes(bindParameterCommitment)) {
4063
- console.warn("This proof does not verify the bound data");
4064
- isCorrect = false;
4065
- queryResultErrors.bind = {
4066
- ...queryResultErrors.bind,
4067
- commitment: {
4068
- expected: `Bind parameter commitment: ${bindParameterCommitment.toString()}`,
4069
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
4070
- message: "This proof does not verify the bound data"
4071
- }
4072
- };
4073
- }
4074
- const { isCorrect: isCorrectBind, queryResultErrors: queryResultErrorsBind } = this.checkBindPublicInputs(queryResult, bindCommittedInputs.data);
4075
- isCorrect = isCorrect && isCorrectBind;
4076
- queryResultErrors = {
4077
- ...queryResultErrors,
4078
- ...queryResultErrorsBind
4079
- };
4080
- } else if (!!committedInputs?.exclusion_check_sanctions) {
4081
- const sanctionsBuilder = await SanctionsBuilder.create();
4082
- const exclusionCheckSanctionsCommittedInputs = committedInputs?.exclusion_check_sanctions;
4083
- const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment() : await sanctionsBuilder.getSanctionsParameterCommitment();
4084
- if (!paramCommitments.includes(exclusionCheckSanctionsParameterCommitment)) {
4085
- console.warn("This proof does not verify the exclusion from the sanction lists");
4086
- isCorrect = false;
4087
- queryResultErrors.sanctions = {
4088
- ...queryResultErrors.sanctions,
4089
- commitment: {
4090
- expected: `Sanctions parameter commitment: ${exclusionCheckSanctionsParameterCommitment.toString()}`,
4091
- received: `Parameter commitments included: ${paramCommitments.join(", ")}`,
4092
- message: "This proof does not verify the exclusion from the sanction lists"
4093
- }
4094
- };
4095
- }
4096
- const {
4097
- isCorrect: isCorrectSanctionsExclusion,
4098
- queryResultErrors: queryResultErrorsSanctionsExclusion
4099
- } = await this.checkSanctionsExclusionPublicInputs(
4100
- queryResult,
4101
- exclusionCheckSanctionsCommittedInputs.rootHash,
4102
- sanctionsBuilder
4103
- );
4104
- isCorrect = isCorrect && isCorrectSanctionsExclusion;
4105
- queryResultErrors = {
4106
- ...queryResultErrors,
4107
- ...queryResultErrorsSanctionsExclusion
4108
- };
4109
- }
4110
- uniqueIdentifier = getNullifierFromOuterProof(proofData).toString(10);
4111
- } else if (proof.name?.startsWith("sig_check_dsc")) {
4112
- commitmentOut = getCommitmentFromDSCProof(proofData);
4113
- const merkleRoot = getMerkleRootFromDSCProof(proofData);
4114
- const {
4115
- isCorrect: isCorrectCertificateRegistryRoot,
4116
- queryResultErrors: queryResultErrorsCertificateRegistryRoot
4117
- } = await this.checkCertificateRegistryRoot(
4118
- merkleRoot.toString(16),
4119
- queryResultErrors,
4120
- false
4121
- );
4122
- isCorrect = isCorrect && isCorrectCertificateRegistryRoot;
4123
- queryResultErrors = {
4124
- ...queryResultErrors,
4125
- ...queryResultErrorsCertificateRegistryRoot
4126
- };
4127
- } else if (proof.name?.startsWith("sig_check_id_data")) {
4128
- commitmentIn = getCommitmentInFromIDDataProof(proofData);
4129
- if (commitmentIn !== commitmentOut) {
4130
- console.warn(
4131
- "Failed to check the link between the certificate signature and ID signature"
4132
- );
4133
- isCorrect = false;
4134
- queryResultErrors.sig_check_id_data = {
4135
- ...queryResultErrors.sig_check_id_data,
4136
- commitment: {
4137
- expected: `Commitment: ${commitmentOut?.toString() || "undefined"}`,
4138
- received: `Commitment: ${commitmentIn?.toString() || "undefined"}`,
4139
- message: "Failed to check the link between the certificate signature and ID signature"
4140
- }
4141
- };
4142
- }
4143
- commitmentOut = getCommitmentOutFromIDDataProof(proofData);
4144
- } else if (proof.name?.startsWith("data_check_integrity")) {
4145
- commitmentIn = getCommitmentInFromIntegrityProof(proofData);
4146
- if (commitmentIn !== commitmentOut) {
4147
- console.warn("Failed to check the link between the ID signature and the data signed");
4148
- isCorrect = false;
4149
- queryResultErrors.data_check_integrity = {
4150
- ...queryResultErrors.data_check_integrity,
4151
- commitment: {
4152
- expected: `Commitment: ${commitmentOut?.toString() || "undefined"}`,
4153
- received: `Commitment: ${commitmentIn?.toString() || "undefined"}`,
4154
- message: "Failed to check the link between the ID signature and the data signed"
4155
- }
4156
- };
4157
- }
4158
- commitmentOut = getCommitmentOutFromIntegrityProof(proofData);
4159
- const currentDate = getCurrentDateFromIntegrityProof(proofData);
4160
- const todayToCurrentDate = today.getTime() - currentDate.getTime();
4161
- const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
4162
- const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
4163
- if (todayToCurrentDate >= actualDifference) {
4164
- console.warn(
4165
- `The date used to check the validity of the ID is older than the validity period`
4166
- );
4167
- isCorrect = false;
4168
- queryResultErrors.data_check_integrity = {
4169
- ...queryResultErrors.data_check_integrity,
4170
- date: {
4171
- expected: `Difference: ${validity} seconds`,
4172
- received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
4173
- message: "The date used to check the validity of the ID is older than the validity period"
4174
- }
4175
- };
4176
- }
4177
- } else if (proof.name === "disclose_bytes") {
4178
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4179
- if (commitmentIn !== commitmentOut) {
4180
- console.warn(
4181
- "Failed to check the link between the validity of the ID and the data to disclose"
4182
- );
4183
- isCorrect = false;
4184
- queryResultErrors.disclose = {
4185
- ...queryResultErrors.disclose,
4186
- commitment: {
4187
- expected: `Commitment: ${commitmentOut?.toString() || "undefined"}`,
4188
- received: `Commitment: ${commitmentIn?.toString() || "undefined"}`,
4189
- message: "Failed to check the link between the validity of the ID and the data to disclose"
4190
- }
4191
- };
4192
- }
4193
- const paramCommitment = getParameterCommitmentFromDisclosureProof(proofData);
4194
- const calculatedParamCommitment = await getDiscloseParameterCommitment(
4195
- (proof.committedInputs?.disclose_bytes).discloseMask,
4196
- (proof.committedInputs?.disclose_bytes).disclosedBytes
4197
- );
4198
- if (paramCommitment !== calculatedParamCommitment) {
4199
- console.warn("The disclosed data does not match the data committed by the proof");
4200
- isCorrect = false;
4201
- queryResultErrors.disclose = {
4202
- ...queryResultErrors.disclose,
4203
- commitment: {
4204
- expected: `Commitment: ${calculatedParamCommitment}`,
4205
- received: `Commitment: ${paramCommitment}`,
4206
- message: "The disclosed data does not match the data committed by the proof"
4207
- }
4208
- };
4209
- }
4210
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "disclose", scope);
4211
- isCorrect = isCorrect && isCorrectScope;
4212
- queryResultErrors = {
4213
- ...queryResultErrors,
4214
- ...queryResultErrorsScope
4215
- };
4216
- const { isCorrect: isCorrectDisclose, queryResultErrors: queryResultErrorsDisclose } = this.checkDiscloseBytesPublicInputs(proof, queryResult);
4217
- isCorrect = isCorrect && isCorrectDisclose && isCorrectScope;
4218
- queryResultErrors = {
4219
- ...queryResultErrors,
4220
- ...queryResultErrorsDisclose,
4221
- ...queryResultErrorsScope
4222
- };
4223
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4224
- } else if (proof.name === "compare_age") {
4225
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4226
- if (commitmentIn !== commitmentOut) {
4227
- console.warn(
4228
- "Failed to check the link between the validity of the ID and the age derived from it"
4229
- );
4230
- isCorrect = false;
4231
- queryResultErrors.age = {
4232
- ...queryResultErrors.age,
4233
- commitment: {
4234
- expected: `Commitment: ${commitmentOut}`,
4235
- received: `Commitment: ${commitmentIn}`,
4236
- message: "Failed to check the link between the validity of the ID and the age derived from it"
4237
- }
4238
- };
4239
- }
4240
- const paramCommitment = getParameterCommitmentFromDisclosureProof(proofData);
4241
- const committedInputs = proof.committedInputs?.compare_age;
4242
- const calculatedParamCommitment = await getAgeParameterCommitment(
4243
- committedInputs.currentDateTimestamp,
4244
- committedInputs.minAge,
4245
- committedInputs.maxAge
4246
- );
4247
- if (paramCommitment !== calculatedParamCommitment) {
4248
- console.warn(
4249
- "The conditions for the age check do not match the conditions checked by the proof"
4250
- );
4251
- isCorrect = false;
4252
- queryResultErrors.age = {
4253
- ...queryResultErrors.age,
4254
- commitment: {
4255
- expected: `Commitment: ${calculatedParamCommitment}`,
4256
- received: `Commitment: ${paramCommitment}`,
4257
- message: "The conditions for the age check do not match the conditions checked by the proof"
4258
- }
4259
- };
4260
- }
4261
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "age", scope);
4262
- const { isCorrect: isCorrectAge, queryResultErrors: queryResultErrorsAge } = this.checkAgePublicInputs(proof, queryResult);
4263
- isCorrect = isCorrect && isCorrectAge && isCorrectScope;
4264
- queryResultErrors = {
4265
- ...queryResultErrors,
4266
- ...queryResultErrorsAge,
4267
- ...queryResultErrorsScope
4268
- };
4269
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4270
- } else if (proof.name === "compare_birthdate") {
4271
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4272
- if (commitmentIn !== commitmentOut) {
4273
- console.warn(
4274
- "Failed to check the link between the validity of the ID and the birthdate derived from it"
4275
- );
4276
- isCorrect = false;
4277
- queryResultErrors.birthdate = {
4278
- ...queryResultErrors.birthdate,
4279
- commitment: {
4280
- expected: `Commitment: ${commitmentOut}`,
4281
- received: `Commitment: ${commitmentIn}`,
4282
- message: "Failed to check the link between the validity of the ID and the birthdate derived from it"
4283
- }
4284
- };
4285
- }
4286
- const paramCommitment = getParameterCommitmentFromDisclosureProof(proofData);
4287
- const committedInputs = proof.committedInputs?.compare_birthdate;
4288
- const calculatedParamCommitment = await getDateParameterCommitment(
4289
- ProofType.BIRTHDATE,
4290
- committedInputs.currentDateTimestamp,
4291
- committedInputs.minDateTimestamp,
4292
- committedInputs.maxDateTimestamp,
4293
- 0
4294
- );
4295
- if (paramCommitment !== calculatedParamCommitment) {
4296
- console.warn(
4297
- "The conditions for the birthdate check do not match the conditions checked by the proof"
4298
- );
4299
- isCorrect = false;
4300
- queryResultErrors.birthdate = {
4301
- ...queryResultErrors.birthdate,
4302
- commitment: {
4303
- expected: `Commitment: ${calculatedParamCommitment}`,
4304
- received: `Commitment: ${paramCommitment}`,
4305
- message: "The conditions for the birthdate check do not match the conditions checked by the proof"
4306
- }
4307
- };
4308
- }
4309
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "birthdate", scope);
4310
- const { isCorrect: isCorrectBirthdate, queryResultErrors: queryResultErrorsBirthdate } = this.checkBirthdatePublicInputs(proof, queryResult);
4311
- isCorrect = isCorrect && isCorrectBirthdate && isCorrectScope;
4312
- queryResultErrors = {
4313
- ...queryResultErrors,
4314
- ...queryResultErrorsBirthdate,
4315
- ...queryResultErrorsScope
4316
- };
4317
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4318
- } else if (proof.name === "compare_expiry") {
4319
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4320
- if (commitmentIn !== commitmentOut) {
4321
- console.warn(
4322
- "Failed to check the link between the validity of the ID and its expiry date"
4323
- );
4324
- isCorrect = false;
4325
- queryResultErrors.expiry_date = {
4326
- ...queryResultErrors.expiry_date,
4327
- commitment: {
4328
- expected: `Commitment: ${commitmentOut}`,
4329
- received: `Commitment: ${commitmentIn}`,
4330
- message: "Failed to check the link between the validity of the ID and its expiry date"
4331
- }
4332
- };
4333
- }
4334
- const paramCommitment = getParameterCommitmentFromDisclosureProof(proofData);
4335
- const committedInputs = proof.committedInputs?.compare_expiry;
4336
- const calculatedParamCommitment = await getDateParameterCommitment(
4337
- ProofType.EXPIRY_DATE,
4338
- committedInputs.currentDateTimestamp,
4339
- committedInputs.minDateTimestamp,
4340
- committedInputs.maxDateTimestamp
4341
- );
4342
- if (paramCommitment !== calculatedParamCommitment) {
4343
- console.warn(
4344
- "The conditions for the expiry date check do not match the conditions checked by the proof"
4345
- );
4346
- isCorrect = false;
4347
- queryResultErrors.expiry_date = {
4348
- ...queryResultErrors.expiry_date,
4349
- commitment: {
4350
- expected: `Commitment: ${calculatedParamCommitment}`,
4351
- received: `Commitment: ${paramCommitment}`,
4352
- message: "The conditions for the expiry date check do not match the conditions checked by the proof"
4353
- }
4354
- };
4355
- }
4356
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "expiry_date", scope);
4357
- const { isCorrect: isCorrectExpiryDate, queryResultErrors: queryResultErrorsExpiryDate } = this.checkExpiryDatePublicInputs(proof, queryResult);
4358
- isCorrect = isCorrect && isCorrectExpiryDate && isCorrectScope;
4359
- queryResultErrors = {
4360
- ...queryResultErrors,
4361
- ...queryResultErrorsExpiryDate,
4362
- ...queryResultErrorsScope
4363
- };
4364
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4365
- } else if (proof.name === "exclusion_check_nationality") {
4366
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4367
- if (commitmentIn !== commitmentOut) {
4368
- console.warn(
4369
- "Failed to check the link between the validity of the ID and the nationality exclusion check"
4370
- );
4371
- isCorrect = false;
4372
- queryResultErrors.nationality = {
4373
- ...queryResultErrors.nationality,
4374
- commitment: {
4375
- expected: `Commitment: ${commitmentOut}`,
4376
- received: `Commitment: ${commitmentIn}`,
4377
- message: "Failed to check the link between the validity of the ID and the nationality exclusion check"
4378
- }
4379
- };
4380
- }
4381
- const countryList = (proof.committedInputs?.exclusion_check_nationality).countries;
4382
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4383
- const calculatedParamCommitment = await getCountryParameterCommitment(
4384
- ProofType.NATIONALITY_EXCLUSION,
4385
- countryList,
4386
- true
4387
- );
4388
- if (paramCommittment !== calculatedParamCommitment) {
4389
- console.warn(
4390
- "The committed country list for the exclusion check does not match the one from the proof"
4391
- );
4392
- isCorrect = false;
4393
- queryResultErrors.nationality = {
4394
- ...queryResultErrors.nationality,
4395
- commitment: {
4396
- expected: `Commitment: ${calculatedParamCommitment}`,
4397
- received: `Commitment: ${paramCommittment}`,
4398
- message: "The committed country list for the exclusion check does not match the one from the proof"
4399
- }
4400
- };
4401
- }
4402
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "nationality", scope);
4403
- const {
4404
- isCorrect: isCorrectNationalityExclusion,
4405
- queryResultErrors: queryResultErrorsNationalityExclusion
4406
- } = this.checkNationalityExclusionPublicInputs(queryResult, countryList);
4407
- isCorrect = isCorrect && isCorrectNationalityExclusion && isCorrectScope;
4408
- queryResultErrors = {
4409
- ...queryResultErrors,
4410
- ...queryResultErrorsNationalityExclusion,
4411
- ...queryResultErrorsScope
4412
- };
4413
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4414
- } else if (proof.name === "exclusion_check_issuing_country") {
4415
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4416
- if (commitmentIn !== commitmentOut) {
4417
- console.warn(
4418
- "Failed to check the link between the validity of the ID and the issuing country exclusion check"
4419
- );
4420
- isCorrect = false;
4421
- queryResultErrors.nationality = {
4422
- ...queryResultErrors.nationality,
4423
- commitment: {
4424
- expected: `Commitment: ${commitmentOut}`,
4425
- received: `Commitment: ${commitmentIn}`,
4426
- message: "Failed to check the link between the validity of the ID and the issuing country exclusion check"
4427
- }
4428
- };
4429
- }
4430
- const countryList = (proof.committedInputs?.exclusion_check_issuing_country).countries;
4431
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4432
- const calculatedParamCommitment = await getCountryParameterCommitment(
4433
- ProofType.ISSUING_COUNTRY_EXCLUSION,
4434
- countryList,
4435
- true
4436
- );
4437
- if (paramCommittment !== calculatedParamCommitment) {
4438
- console.warn(
4439
- "The committed country list for the issuing country exclusion check does not match the one from the proof"
4440
- );
4441
- isCorrect = false;
4442
- queryResultErrors.issuing_country = {
4443
- ...queryResultErrors.issuing_country,
4444
- commitment: {
4445
- expected: `Commitment: ${calculatedParamCommitment}`,
4446
- received: `Commitment: ${paramCommittment}`,
4447
- message: "The committed country list for the issuing country exclusion check does not match the one from the proof"
4448
- }
4449
- };
4450
- }
4451
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "nationality", scope);
4452
- const {
4453
- isCorrect: isCorrectIssuingCountryExclusion,
4454
- queryResultErrors: queryResultErrorsIssuingCountryExclusion
4455
- } = this.checkIssuingCountryExclusionPublicInputs(queryResult, countryList);
4456
- isCorrect = isCorrect && isCorrectIssuingCountryExclusion && isCorrectScope;
4457
- queryResultErrors = {
4458
- ...queryResultErrors,
4459
- ...queryResultErrorsIssuingCountryExclusion,
4460
- ...queryResultErrorsScope
4461
- };
4462
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4463
- } else if (proof.name === "inclusion_check_nationality") {
4464
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4465
- if (commitmentIn !== commitmentOut) {
4466
- console.warn(
4467
- "Failed to check the link between the validity of the ID and the nationality inclusion check"
4468
- );
4469
- isCorrect = false;
4470
- queryResultErrors.nationality = {
4471
- ...queryResultErrors.nationality,
4472
- commitment: {
4473
- expected: `Commitment: ${commitmentOut}`,
4474
- received: `Commitment: ${commitmentIn}`,
4475
- message: "Failed to check the link between the validity of the ID and the nationality inclusion check"
4476
- }
4477
- };
4478
- }
4479
- const countryList = (proof.committedInputs?.inclusion_check_nationality).countries;
4480
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4481
- const calculatedParamCommitment = await getCountryParameterCommitment(
4482
- ProofType.NATIONALITY_INCLUSION,
4483
- countryList,
4484
- false
4485
- );
4486
- if (paramCommittment !== calculatedParamCommitment) {
4487
- console.warn(
4488
- "The committed country list for the nationality inclusion check does not match the one from the proof"
4489
- );
4490
- isCorrect = false;
4491
- queryResultErrors.nationality = {
4492
- ...queryResultErrors.nationality,
4493
- commitment: {
4494
- expected: `Commitment: ${calculatedParamCommitment}`,
4495
- received: `Commitment: ${paramCommittment}`,
4496
- message: "The committed country list for the nationality inclusion check does not match the one from the proof"
4497
- }
4498
- };
4499
- }
4500
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "nationality", scope);
4501
- const {
4502
- isCorrect: isCorrectNationalityInclusion,
4503
- queryResultErrors: queryResultErrorsNationalityInclusion
4504
- } = this.checkNationalityInclusionPublicInputs(queryResult, countryList);
4505
- isCorrect = isCorrect && isCorrectNationalityInclusion && isCorrectScope;
4506
- queryResultErrors = {
4507
- ...queryResultErrors,
4508
- ...queryResultErrorsNationalityInclusion,
4509
- ...queryResultErrorsScope
4510
- };
4511
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4512
- } else if (proof.name === "inclusion_check_issuing_country") {
4513
- commitmentIn = getCommitmentInFromDisclosureProof(proofData);
4514
- if (commitmentIn !== commitmentOut) {
4515
- console.warn(
4516
- "Failed to check the link between the validity of the ID and the issuing country inclusion check"
4517
- );
4518
- isCorrect = false;
4519
- queryResultErrors.nationality = {
4520
- ...queryResultErrors.nationality,
4521
- commitment: {
4522
- expected: `Commitment: ${commitmentOut}`,
4523
- received: `Commitment: ${commitmentIn}`,
4524
- message: "Failed to check the link between the validity of the ID and the issuing country inclusion check"
4525
- }
4526
- };
4527
- }
4528
- const countryList = (proof.committedInputs?.inclusion_check_issuing_country).countries;
4529
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4530
- const calculatedParamCommitment = await getCountryParameterCommitment(
4531
- ProofType.ISSUING_COUNTRY_INCLUSION,
4532
- countryList,
4533
- false
4534
- );
4535
- if (paramCommittment !== calculatedParamCommitment) {
4536
- console.warn(
4537
- "The committed country list for the issuing country inclusion check does not match the one from the proof"
4538
- );
4539
- isCorrect = false;
4540
- queryResultErrors.issuing_country = {
4541
- ...queryResultErrors.issuing_country,
4542
- commitment: {
4543
- expected: `Commitment: ${calculatedParamCommitment}`,
4544
- received: `Commitment: ${paramCommittment}`,
4545
- message: "The committed country list for the issuing country inclusion check does not match the one from the proof"
4546
- }
4547
- };
4548
- }
4549
- const { isCorrect: isCorrectScope, queryResultErrors: queryResultErrorsScope } = this.checkScopeFromDisclosureProof(proofData, queryResultErrors, "nationality", scope);
4550
- const {
4551
- isCorrect: isCorrectIssuingCountryInclusion,
4552
- queryResultErrors: queryResultErrorsIssuingCountryInclusion
4553
- } = this.checkIssuingCountryInclusionPublicInputs(queryResult, countryList);
4554
- isCorrect = isCorrect && isCorrectIssuingCountryInclusion && isCorrectScope;
4555
- queryResultErrors = {
4556
- ...queryResultErrors,
4557
- ...queryResultErrorsIssuingCountryInclusion,
4558
- ...queryResultErrorsScope
4559
- };
4560
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4561
- } else if (proof.name === "bind") {
4562
- const bindCommittedInputs = proof.committedInputs?.bind;
4563
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4564
- const calculatedParamCommitment = await getBindParameterCommitment(
4565
- formatBoundData(bindCommittedInputs.data)
4566
- );
4567
- if (paramCommittment !== calculatedParamCommitment) {
4568
- console.warn("The bound data does not match the one from the proof");
4569
- isCorrect = false;
4570
- queryResultErrors.bind = {
4571
- ...queryResultErrors.bind,
4572
- commitment: {
4573
- expected: `Commitment: ${calculatedParamCommitment}`,
4574
- received: `Commitment: ${paramCommittment}`,
4575
- message: "The bound data does not match the one from the proof"
4576
- }
4577
- };
4578
- }
4579
- const { isCorrect: isCorrectBind, queryResultErrors: queryResultErrorsBind } = this.checkBindPublicInputs(queryResult, bindCommittedInputs.data);
4580
- isCorrect = isCorrect && isCorrectBind;
4581
- queryResultErrors = {
4582
- ...queryResultErrors,
4583
- ...queryResultErrorsBind
4584
- };
4585
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4586
- } else if (proof.name === "exclusion_check_sanctions") {
4587
- const sanctionsBuilder = await SanctionsBuilder.create();
4588
- const exclusionCheckSanctionsCommittedInputs = proof.committedInputs?.exclusion_check_sanctions;
4589
- const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment();
4590
- const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
4591
- if (paramCommittment !== calculatedParamCommitment) {
4592
- console.warn(
4593
- "The sanction lists check against do not match the sanction lists from the proof"
4594
- );
4595
- isCorrect = false;
4596
- queryResultErrors.sanctions = {
4597
- ...queryResultErrors.sanctions,
4598
- commitment: {
4599
- expected: `Commitment: ${calculatedParamCommitment.toString()}`,
4600
- received: `Commitment: ${paramCommittment.toString()}`,
4601
- message: "The sanction lists check against do not match the sanction lists from the proof"
4602
- }
4603
- };
4604
- }
4605
- const {
4606
- isCorrect: isCorrectSanctionsExclusion,
4607
- queryResultErrors: queryResultErrorsSanctionsExclusion
4608
- } = await this.checkSanctionsExclusionPublicInputs(
4609
- queryResult,
4610
- exclusionCheckSanctionsCommittedInputs.rootHash,
4611
- sanctionsBuilder
4612
- );
4613
- isCorrect = isCorrect && isCorrectSanctionsExclusion;
4614
- queryResultErrors = {
4615
- ...queryResultErrors,
4616
- ...queryResultErrorsSanctionsExclusion
4617
- };
4618
- uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
4619
- }
4620
- }
4621
- return { isCorrect, uniqueIdentifier, queryResultErrors };
4622
- }
4623
423
  /**
4624
424
  * @notice Verify the proofs received from the mobile app.
4625
425
  * @param proofs The proofs to verify.
@@ -4643,6 +443,7 @@ var ZKPassport = class {
4643
443
  if (!proofs || proofs.length === 0) {
4644
444
  return {
4645
445
  uniqueIdentifier: void 0,
446
+ uniqueIdentifierType: void 0,
4646
447
  verified: false
4647
448
  };
4648
449
  }
@@ -4656,16 +457,25 @@ var ZKPassport = class {
4656
457
  });
4657
458
  let verified = true;
4658
459
  let uniqueIdentifier;
460
+ let uniqueIdentifierType;
4659
461
  let queryResultErrors;
4660
462
  const {
4661
463
  isCorrect,
4662
464
  uniqueIdentifier: uniqueIdentifierFromPublicInputs,
465
+ uniqueIdentifierType: uniqueIdentifierTypeFromPublicInputs,
4663
466
  queryResultErrors: queryResultErrorsFromPublicInputs
4664
- } = await this.checkPublicInputs(proofs, formattedResult, validity, scope);
467
+ } = await PublicInputChecker.checkPublicInputs(
468
+ this.domain,
469
+ proofs,
470
+ formattedResult,
471
+ validity,
472
+ scope
473
+ );
4665
474
  uniqueIdentifier = uniqueIdentifierFromPublicInputs;
475
+ uniqueIdentifierType = uniqueIdentifierTypeFromPublicInputs;
4666
476
  verified = isCorrect;
4667
477
  queryResultErrors = isCorrect ? void 0 : queryResultErrorsFromPublicInputs;
4668
- if (uniqueIdentifier && (BigInt(uniqueIdentifier) === BigInt(1) || BigInt(uniqueIdentifier) === BigInt(0)) && !devMode) {
478
+ if (uniqueIdentifier && uniqueIdentifierType && (uniqueIdentifierType === NullifierType.SALTED_MOCK || uniqueIdentifierType === NullifierType.NON_SALTED_MOCK) && !devMode) {
4669
479
  verified = false;
4670
480
  console.warn(
4671
481
  "You are trying to verify a mock proof. This is only allowed in dev mode. To enable dev mode, set the `devMode` parameter to `true` in the request function parameters."
@@ -4733,25 +543,11 @@ var ZKPassport = class {
4733
543
  }
4734
544
  }
4735
545
  uniqueIdentifier = verified ? uniqueIdentifier : void 0;
4736
- return { uniqueIdentifier, verified, queryResultErrors };
546
+ uniqueIdentifierType = verified ? uniqueIdentifierType : void 0;
547
+ return { uniqueIdentifier, uniqueIdentifierType, verified, queryResultErrors };
4737
548
  }
4738
549
  getSolidityVerifierDetails(network) {
4739
- const baseConfig = {
4740
- functionName: "verifyProof",
4741
- abi: ZKPassportVerifier_default.abi
4742
- };
4743
- if (network === "ethereum_sepolia") {
4744
- return {
4745
- ...baseConfig,
4746
- address: "0xE486bdA3e2f8a6e00c6E2d3a4ADb0A7aa7b1cEe9"
4747
- };
4748
- } else if (network === "local_anvil") {
4749
- return {
4750
- ...baseConfig,
4751
- address: "0x0"
4752
- };
4753
- }
4754
- throw new Error(`Unsupported network: ${network}`);
550
+ return SolidityVerifier.getDetails(network);
4755
551
  }
4756
552
  getSolidityVerifierParameters({
4757
553
  proof,
@@ -4760,113 +556,13 @@ var ZKPassport = class {
4760
556
  scope,
4761
557
  devMode = false
4762
558
  }) {
4763
- if (!proof.name?.startsWith("outer_evm")) {
4764
- throw new Error(
4765
- "This proof cannot be verified on an EVM chain. Please make sure to use the `compressed-evm` mode."
4766
- );
4767
- }
4768
- const proofData = getProofData(proof.proof, getNumberOfPublicInputs(proof.name));
4769
- let committedInputCounts = [];
4770
- let committedInputs = [];
4771
- for (const key in proof.committedInputs) {
4772
- const committedInputCount = getCommittedInputCount(key);
4773
- const circuitName = key;
4774
- committedInputCounts.push({ circuitName, count: committedInputCount });
4775
- let compressedCommittedInputs2 = "";
4776
- if (circuitName === "inclusion_check_issuing_country_evm" || circuitName === "inclusion_check_nationality_evm" || circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
4777
- const value = proof.committedInputs[circuitName];
4778
- const formattedCountries = value.countries;
4779
- if (circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
4780
- formattedCountries.sort((a, b) => a.localeCompare(b));
4781
- }
4782
- const proofType = (() => {
4783
- switch (circuitName) {
4784
- case "exclusion_check_issuing_country_evm":
4785
- return ProofType.ISSUING_COUNTRY_EXCLUSION;
4786
- case "exclusion_check_nationality_evm":
4787
- return ProofType.NATIONALITY_EXCLUSION;
4788
- case "inclusion_check_issuing_country_evm":
4789
- return ProofType.ISSUING_COUNTRY_INCLUSION;
4790
- case "inclusion_check_nationality_evm":
4791
- return ProofType.NATIONALITY_INCLUSION;
4792
- }
4793
- })();
4794
- compressedCommittedInputs2 = proofType.toString(16).padStart(2, "0") + rightPadArrayWithZeros(
4795
- formattedCountries.map((c) => Array.from(new TextEncoder().encode(c))).flat(),
4796
- 600
4797
- ).map((x) => x.toString(16).padStart(2, "0")).join("");
4798
- } else if (circuitName === "compare_age_evm") {
4799
- const value = proof.committedInputs[circuitName];
4800
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
4801
- compressedCommittedInputs2 = ProofType.AGE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
4802
- } else if (circuitName === "compare_birthdate_evm") {
4803
- const value = proof.committedInputs[circuitName];
4804
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
4805
- const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
4806
- const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
4807
- compressedCommittedInputs2 = ProofType.BIRTHDATE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
4808
- } else if (circuitName === "compare_expiry_evm") {
4809
- const value = proof.committedInputs[circuitName];
4810
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
4811
- const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
4812
- const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
4813
- compressedCommittedInputs2 = ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
4814
- } else if (circuitName === "disclose_bytes_evm") {
4815
- const value = proof.committedInputs[circuitName];
4816
- compressedCommittedInputs2 = ProofType.DISCLOSE.toString(16).padStart(2, "0") + value.discloseMask.map((x) => x.toString(16).padStart(2, "0")).join("") + value.disclosedBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
4817
- } else if (circuitName === "bind_evm") {
4818
- const value = proof.committedInputs[circuitName];
4819
- compressedCommittedInputs2 = ProofType.BIND.toString(16).padStart(2, "0") + rightPadArrayWithZeros(formatBoundData(value.data), 500).map((x) => x.toString(16).padStart(2, "0")).join("");
4820
- } else if (circuitName === "exclusion_check_sanctions_evm") {
4821
- const value = proof.committedInputs[circuitName];
4822
- compressedCommittedInputs2 = ProofType.SANCTIONS_EXCLUSION.toString(16).padStart(2, "0") + Array.from(numberToBytesBE(BigInt(value.rootHash), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
4823
- } else {
4824
- throw new Error(`Unsupported circuit for EVM verification: ${circuitName}`);
4825
- }
4826
- committedInputs.push({ circuitName, inputs: compressedCommittedInputs2 });
4827
- }
4828
- const parameterCommitments = getParamCommitmentsFromOuterProof(proofData).map(
4829
- (x) => x.toString(16).padStart(64, "0")
4830
- );
4831
- let compressedCommittedInputs = "";
4832
- let committedInputCountsArray = [];
4833
- for (const commitment of parameterCommitments) {
4834
- const committedInput = committedInputs.find((x) => {
4835
- const rawHashedInputs = sha256(hexToBytes(x.inputs));
4836
- const hashedInputs = new Uint8Array(rawHashedInputs.length);
4837
- for (let i = 0; i < rawHashedInputs.length - 1; i++) {
4838
- hashedInputs[i + 1] = rawHashedInputs[i];
4839
- }
4840
- hashedInputs[0] = 0;
4841
- return bytesToHex(hashedInputs) === commitment.replace("0x", "");
4842
- });
4843
- if (committedInput) {
4844
- const count = committedInputCounts.find(
4845
- (x) => x.circuitName === committedInput.circuitName
4846
- )?.count;
4847
- if (count) {
4848
- committedInputCountsArray.push(count);
4849
- compressedCommittedInputs += committedInput.inputs;
4850
- } else {
4851
- throw new Error(`Unknown circuit name: ${committedInput.circuitName}`);
4852
- }
4853
- } else {
4854
- throw new Error(`Invalid commitment: ${commitment}`);
4855
- }
4856
- }
4857
- const params = {
4858
- // Make sure the vkeyHash is 32 bytes
4859
- vkeyHash: `0x${proof.vkeyHash.replace("0x", "").padStart(64, "0")}`,
4860
- proof: `0x${proofData.proof.join("")}`,
4861
- publicInputs: proofData.publicInputs,
4862
- committedInputs: `0x${compressedCommittedInputs}`,
4863
- committedInputCounts: committedInputCountsArray,
559
+ return SolidityVerifier.getParameters({
560
+ proof,
4864
561
  validityPeriodInSeconds,
4865
562
  domain: domain ?? this.domain,
4866
- scope: scope ?? "",
563
+ scope,
4867
564
  devMode
4868
- };
4869
- return params;
565
+ });
4870
566
  }
4871
567
  _getUrl(requestId) {
4872
568
  const base64Config = Buffer.from(JSON.stringify(this.topicToConfig[requestId])).toString(