@zkpassport/sdk 0.8.8 → 0.9.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2542 @@
1
+ import {
2
+ DEFAULT_VALIDITY
3
+ } from "./chunk-XOQW7AOQ.js";
4
+
5
+ // src/solidity-verifier.ts
6
+ import {
7
+ formatBoundData,
8
+ getCommittedInputCount,
9
+ getNumberOfPublicInputs,
10
+ getParamCommitmentsFromOuterProof,
11
+ getProofData,
12
+ numberToBytesBE,
13
+ ProofType,
14
+ rightPadArrayWithZeros
15
+ } from "@zkpassport/utils";
16
+ import { sha256 } from "@noble/hashes/sha2";
17
+ import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
18
+
19
+ // src/assets/abi/ZKPassportVerifier.json
20
+ var ZKPassportVerifier_default = {
21
+ abi: [
22
+ {
23
+ type: "constructor",
24
+ inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
25
+ stateMutability: "nonpayable"
26
+ },
27
+ {
28
+ type: "function",
29
+ name: "CERTIFICATE_REGISTRY_ID",
30
+ inputs: [],
31
+ outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
32
+ stateMutability: "view"
33
+ },
34
+ {
35
+ type: "function",
36
+ name: "CIRCUIT_REGISTRY_ID",
37
+ inputs: [],
38
+ outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
39
+ stateMutability: "view"
40
+ },
41
+ {
42
+ type: "function",
43
+ name: "SANCTIONS_REGISTRY_ID",
44
+ inputs: [],
45
+ outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
46
+ stateMutability: "view"
47
+ },
48
+ {
49
+ type: "function",
50
+ name: "addVerifiers",
51
+ inputs: [
52
+ { name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" },
53
+ { name: "verifiers", type: "address[]", internalType: "address[]" }
54
+ ],
55
+ outputs: [],
56
+ stateMutability: "nonpayable"
57
+ },
58
+ {
59
+ type: "function",
60
+ name: "admin",
61
+ inputs: [],
62
+ outputs: [{ name: "", type: "address", internalType: "address" }],
63
+ stateMutability: "view"
64
+ },
65
+ {
66
+ type: "function",
67
+ name: "enforceSanctionsRoot",
68
+ inputs: [
69
+ {
70
+ name: "params",
71
+ type: "tuple",
72
+ internalType: "struct ProofVerificationParams",
73
+ components: [
74
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
75
+ { name: "proof", type: "bytes", internalType: "bytes" },
76
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
77
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
78
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
79
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
80
+ { name: "domain", type: "string", internalType: "string" },
81
+ { name: "scope", type: "string", internalType: "string" },
82
+ { name: "devMode", type: "bool", internalType: "bool" }
83
+ ]
84
+ }
85
+ ],
86
+ outputs: [],
87
+ stateMutability: "view"
88
+ },
89
+ {
90
+ type: "function",
91
+ name: "getBoundData",
92
+ inputs: [
93
+ {
94
+ name: "params",
95
+ type: "tuple",
96
+ internalType: "struct ProofVerificationParams",
97
+ components: [
98
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
99
+ { name: "proof", type: "bytes", internalType: "bytes" },
100
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
101
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
102
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
103
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
104
+ { name: "domain", type: "string", internalType: "string" },
105
+ { name: "scope", type: "string", internalType: "string" },
106
+ { name: "devMode", type: "bool", internalType: "bool" }
107
+ ]
108
+ }
109
+ ],
110
+ outputs: [
111
+ {
112
+ name: "boundData",
113
+ type: "tuple",
114
+ internalType: "struct BoundData",
115
+ components: [
116
+ { name: "senderAddress", type: "address", internalType: "address" },
117
+ { name: "chainId", type: "uint256", internalType: "uint256" },
118
+ { name: "customData", type: "string", internalType: "string" }
119
+ ]
120
+ }
121
+ ],
122
+ stateMutability: "pure"
123
+ },
124
+ {
125
+ type: "function",
126
+ name: "getDisclosedData",
127
+ inputs: [
128
+ {
129
+ name: "params",
130
+ type: "tuple",
131
+ internalType: "struct ProofVerificationParams",
132
+ components: [
133
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
134
+ { name: "proof", type: "bytes", internalType: "bytes" },
135
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
136
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
137
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
138
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
139
+ { name: "domain", type: "string", internalType: "string" },
140
+ { name: "scope", type: "string", internalType: "string" },
141
+ { name: "devMode", type: "bool", internalType: "bool" }
142
+ ]
143
+ },
144
+ { name: "isIDCard", type: "bool", internalType: "bool" }
145
+ ],
146
+ outputs: [
147
+ {
148
+ name: "disclosedData",
149
+ type: "tuple",
150
+ internalType: "struct DisclosedData",
151
+ components: [
152
+ { name: "name", type: "string", internalType: "string" },
153
+ { name: "issuingCountry", type: "string", internalType: "string" },
154
+ { name: "nationality", type: "string", internalType: "string" },
155
+ { name: "gender", type: "string", internalType: "string" },
156
+ { name: "birthDate", type: "string", internalType: "string" },
157
+ { name: "expiryDate", type: "string", internalType: "string" },
158
+ { name: "documentNumber", type: "string", internalType: "string" },
159
+ { name: "documentType", type: "string", internalType: "string" }
160
+ ]
161
+ }
162
+ ],
163
+ stateMutability: "pure"
164
+ },
165
+ {
166
+ type: "function",
167
+ name: "isAgeAbove",
168
+ inputs: [
169
+ { name: "minAge", type: "uint8", internalType: "uint8" },
170
+ {
171
+ name: "params",
172
+ type: "tuple",
173
+ internalType: "struct ProofVerificationParams",
174
+ components: [
175
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
176
+ { name: "proof", type: "bytes", internalType: "bytes" },
177
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
178
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
179
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
180
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
181
+ { name: "domain", type: "string", internalType: "string" },
182
+ { name: "scope", type: "string", internalType: "string" },
183
+ { name: "devMode", type: "bool", internalType: "bool" }
184
+ ]
185
+ }
186
+ ],
187
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
188
+ stateMutability: "view"
189
+ },
190
+ {
191
+ type: "function",
192
+ name: "isAgeAboveOrEqual",
193
+ inputs: [
194
+ { name: "minAge", type: "uint8", internalType: "uint8" },
195
+ {
196
+ name: "params",
197
+ type: "tuple",
198
+ internalType: "struct ProofVerificationParams",
199
+ components: [
200
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
201
+ { name: "proof", type: "bytes", internalType: "bytes" },
202
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
203
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
204
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
205
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
206
+ { name: "domain", type: "string", internalType: "string" },
207
+ { name: "scope", type: "string", internalType: "string" },
208
+ { name: "devMode", type: "bool", internalType: "bool" }
209
+ ]
210
+ }
211
+ ],
212
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
213
+ stateMutability: "view"
214
+ },
215
+ {
216
+ type: "function",
217
+ name: "isAgeBelow",
218
+ inputs: [
219
+ { name: "maxAge", type: "uint8", internalType: "uint8" },
220
+ {
221
+ name: "params",
222
+ type: "tuple",
223
+ internalType: "struct ProofVerificationParams",
224
+ components: [
225
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
226
+ { name: "proof", type: "bytes", internalType: "bytes" },
227
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
228
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
229
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
230
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
231
+ { name: "domain", type: "string", internalType: "string" },
232
+ { name: "scope", type: "string", internalType: "string" },
233
+ { name: "devMode", type: "bool", internalType: "bool" }
234
+ ]
235
+ }
236
+ ],
237
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
238
+ stateMutability: "view"
239
+ },
240
+ {
241
+ type: "function",
242
+ name: "isAgeBelowOrEqual",
243
+ inputs: [
244
+ { name: "maxAge", type: "uint8", internalType: "uint8" },
245
+ {
246
+ name: "params",
247
+ type: "tuple",
248
+ internalType: "struct ProofVerificationParams",
249
+ components: [
250
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
251
+ { name: "proof", type: "bytes", internalType: "bytes" },
252
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
253
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
254
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
255
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
256
+ { name: "domain", type: "string", internalType: "string" },
257
+ { name: "scope", type: "string", internalType: "string" },
258
+ { name: "devMode", type: "bool", internalType: "bool" }
259
+ ]
260
+ }
261
+ ],
262
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
263
+ stateMutability: "view"
264
+ },
265
+ {
266
+ type: "function",
267
+ name: "isAgeBetween",
268
+ inputs: [
269
+ { name: "minAge", type: "uint8", internalType: "uint8" },
270
+ { name: "maxAge", type: "uint8", internalType: "uint8" },
271
+ {
272
+ name: "params",
273
+ type: "tuple",
274
+ internalType: "struct ProofVerificationParams",
275
+ components: [
276
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
277
+ { name: "proof", type: "bytes", internalType: "bytes" },
278
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
279
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
280
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
281
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
282
+ { name: "domain", type: "string", internalType: "string" },
283
+ { name: "scope", type: "string", internalType: "string" },
284
+ { name: "devMode", type: "bool", internalType: "bool" }
285
+ ]
286
+ }
287
+ ],
288
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
289
+ stateMutability: "view"
290
+ },
291
+ {
292
+ type: "function",
293
+ name: "isAgeEqual",
294
+ inputs: [
295
+ { name: "age", type: "uint8", internalType: "uint8" },
296
+ {
297
+ name: "params",
298
+ type: "tuple",
299
+ internalType: "struct ProofVerificationParams",
300
+ components: [
301
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
302
+ { name: "proof", type: "bytes", internalType: "bytes" },
303
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
304
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
305
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
306
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
307
+ { name: "domain", type: "string", internalType: "string" },
308
+ { name: "scope", type: "string", internalType: "string" },
309
+ { name: "devMode", type: "bool", internalType: "bool" }
310
+ ]
311
+ }
312
+ ],
313
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
314
+ stateMutability: "view"
315
+ },
316
+ {
317
+ type: "function",
318
+ name: "isBirthdateAfter",
319
+ inputs: [
320
+ { name: "minDate", type: "uint256", internalType: "uint256" },
321
+ {
322
+ name: "params",
323
+ type: "tuple",
324
+ internalType: "struct ProofVerificationParams",
325
+ components: [
326
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
327
+ { name: "proof", type: "bytes", internalType: "bytes" },
328
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
329
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
330
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
331
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
332
+ { name: "domain", type: "string", internalType: "string" },
333
+ { name: "scope", type: "string", internalType: "string" },
334
+ { name: "devMode", type: "bool", internalType: "bool" }
335
+ ]
336
+ }
337
+ ],
338
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
339
+ stateMutability: "view"
340
+ },
341
+ {
342
+ type: "function",
343
+ name: "isBirthdateAfterOrEqual",
344
+ inputs: [
345
+ { name: "minDate", type: "uint256", internalType: "uint256" },
346
+ {
347
+ name: "params",
348
+ type: "tuple",
349
+ internalType: "struct ProofVerificationParams",
350
+ components: [
351
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
352
+ { name: "proof", type: "bytes", internalType: "bytes" },
353
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
354
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
355
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
356
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
357
+ { name: "domain", type: "string", internalType: "string" },
358
+ { name: "scope", type: "string", internalType: "string" },
359
+ { name: "devMode", type: "bool", internalType: "bool" }
360
+ ]
361
+ }
362
+ ],
363
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
364
+ stateMutability: "view"
365
+ },
366
+ {
367
+ type: "function",
368
+ name: "isBirthdateBefore",
369
+ inputs: [
370
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
371
+ {
372
+ name: "params",
373
+ type: "tuple",
374
+ internalType: "struct ProofVerificationParams",
375
+ components: [
376
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
377
+ { name: "proof", type: "bytes", internalType: "bytes" },
378
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
379
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
380
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
381
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
382
+ { name: "domain", type: "string", internalType: "string" },
383
+ { name: "scope", type: "string", internalType: "string" },
384
+ { name: "devMode", type: "bool", internalType: "bool" }
385
+ ]
386
+ }
387
+ ],
388
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
389
+ stateMutability: "view"
390
+ },
391
+ {
392
+ type: "function",
393
+ name: "isBirthdateBeforeOrEqual",
394
+ inputs: [
395
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
396
+ {
397
+ name: "params",
398
+ type: "tuple",
399
+ internalType: "struct ProofVerificationParams",
400
+ components: [
401
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
402
+ { name: "proof", type: "bytes", internalType: "bytes" },
403
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
404
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
405
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
406
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
407
+ { name: "domain", type: "string", internalType: "string" },
408
+ { name: "scope", type: "string", internalType: "string" },
409
+ { name: "devMode", type: "bool", internalType: "bool" }
410
+ ]
411
+ }
412
+ ],
413
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
414
+ stateMutability: "view"
415
+ },
416
+ {
417
+ type: "function",
418
+ name: "isBirthdateBetween",
419
+ inputs: [
420
+ { name: "minDate", type: "uint256", internalType: "uint256" },
421
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
422
+ {
423
+ name: "params",
424
+ type: "tuple",
425
+ internalType: "struct ProofVerificationParams",
426
+ components: [
427
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
428
+ { name: "proof", type: "bytes", internalType: "bytes" },
429
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
430
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
431
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
432
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
433
+ { name: "domain", type: "string", internalType: "string" },
434
+ { name: "scope", type: "string", internalType: "string" },
435
+ { name: "devMode", type: "bool", internalType: "bool" }
436
+ ]
437
+ }
438
+ ],
439
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
440
+ stateMutability: "view"
441
+ },
442
+ {
443
+ type: "function",
444
+ name: "isBirthdateEqual",
445
+ inputs: [
446
+ { name: "date", type: "uint256", internalType: "uint256" },
447
+ {
448
+ name: "params",
449
+ type: "tuple",
450
+ internalType: "struct ProofVerificationParams",
451
+ components: [
452
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
453
+ { name: "proof", type: "bytes", internalType: "bytes" },
454
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
455
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
456
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
457
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
458
+ { name: "domain", type: "string", internalType: "string" },
459
+ { name: "scope", type: "string", internalType: "string" },
460
+ { name: "devMode", type: "bool", internalType: "bool" }
461
+ ]
462
+ }
463
+ ],
464
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
465
+ stateMutability: "view"
466
+ },
467
+ {
468
+ type: "function",
469
+ name: "isExpiryDateAfter",
470
+ inputs: [
471
+ { name: "minDate", type: "uint256", internalType: "uint256" },
472
+ {
473
+ name: "params",
474
+ type: "tuple",
475
+ internalType: "struct ProofVerificationParams",
476
+ components: [
477
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
478
+ { name: "proof", type: "bytes", internalType: "bytes" },
479
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
480
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
481
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
482
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
483
+ { name: "domain", type: "string", internalType: "string" },
484
+ { name: "scope", type: "string", internalType: "string" },
485
+ { name: "devMode", type: "bool", internalType: "bool" }
486
+ ]
487
+ }
488
+ ],
489
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
490
+ stateMutability: "view"
491
+ },
492
+ {
493
+ type: "function",
494
+ name: "isExpiryDateAfterOrEqual",
495
+ inputs: [
496
+ { name: "minDate", type: "uint256", internalType: "uint256" },
497
+ {
498
+ name: "params",
499
+ type: "tuple",
500
+ internalType: "struct ProofVerificationParams",
501
+ components: [
502
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
503
+ { name: "proof", type: "bytes", internalType: "bytes" },
504
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
505
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
506
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
507
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
508
+ { name: "domain", type: "string", internalType: "string" },
509
+ { name: "scope", type: "string", internalType: "string" },
510
+ { name: "devMode", type: "bool", internalType: "bool" }
511
+ ]
512
+ }
513
+ ],
514
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
515
+ stateMutability: "view"
516
+ },
517
+ {
518
+ type: "function",
519
+ name: "isExpiryDateBefore",
520
+ inputs: [
521
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
522
+ {
523
+ name: "params",
524
+ type: "tuple",
525
+ internalType: "struct ProofVerificationParams",
526
+ components: [
527
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
528
+ { name: "proof", type: "bytes", internalType: "bytes" },
529
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
530
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
531
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
532
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
533
+ { name: "domain", type: "string", internalType: "string" },
534
+ { name: "scope", type: "string", internalType: "string" },
535
+ { name: "devMode", type: "bool", internalType: "bool" }
536
+ ]
537
+ }
538
+ ],
539
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
540
+ stateMutability: "view"
541
+ },
542
+ {
543
+ type: "function",
544
+ name: "isExpiryDateBeforeOrEqual",
545
+ inputs: [
546
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
547
+ {
548
+ name: "params",
549
+ type: "tuple",
550
+ internalType: "struct ProofVerificationParams",
551
+ components: [
552
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
553
+ { name: "proof", type: "bytes", internalType: "bytes" },
554
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
555
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
556
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
557
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
558
+ { name: "domain", type: "string", internalType: "string" },
559
+ { name: "scope", type: "string", internalType: "string" },
560
+ { name: "devMode", type: "bool", internalType: "bool" }
561
+ ]
562
+ }
563
+ ],
564
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
565
+ stateMutability: "view"
566
+ },
567
+ {
568
+ type: "function",
569
+ name: "isExpiryDateBetween",
570
+ inputs: [
571
+ { name: "minDate", type: "uint256", internalType: "uint256" },
572
+ { name: "maxDate", type: "uint256", internalType: "uint256" },
573
+ {
574
+ name: "params",
575
+ type: "tuple",
576
+ internalType: "struct ProofVerificationParams",
577
+ components: [
578
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
579
+ { name: "proof", type: "bytes", internalType: "bytes" },
580
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
581
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
582
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
583
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
584
+ { name: "domain", type: "string", internalType: "string" },
585
+ { name: "scope", type: "string", internalType: "string" },
586
+ { name: "devMode", type: "bool", internalType: "bool" }
587
+ ]
588
+ }
589
+ ],
590
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
591
+ stateMutability: "view"
592
+ },
593
+ {
594
+ type: "function",
595
+ name: "isExpiryDateEqual",
596
+ inputs: [
597
+ { name: "date", type: "uint256", internalType: "uint256" },
598
+ {
599
+ name: "params",
600
+ type: "tuple",
601
+ internalType: "struct ProofVerificationParams",
602
+ components: [
603
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
604
+ { name: "proof", type: "bytes", internalType: "bytes" },
605
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
606
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
607
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
608
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
609
+ { name: "domain", type: "string", internalType: "string" },
610
+ { name: "scope", type: "string", internalType: "string" },
611
+ { name: "devMode", type: "bool", internalType: "bool" }
612
+ ]
613
+ }
614
+ ],
615
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
616
+ stateMutability: "view"
617
+ },
618
+ {
619
+ type: "function",
620
+ name: "isFaceMatchVerified",
621
+ inputs: [
622
+ { name: "faceMatchMode", type: "uint8", internalType: "enum FaceMatchMode" },
623
+ {
624
+ name: "params",
625
+ type: "tuple",
626
+ internalType: "struct ProofVerificationParams",
627
+ components: [
628
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
629
+ { name: "proof", type: "bytes", internalType: "bytes" },
630
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
631
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
632
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
633
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
634
+ { name: "domain", type: "string", internalType: "string" },
635
+ { name: "scope", type: "string", internalType: "string" },
636
+ { name: "devMode", type: "bool", internalType: "bool" }
637
+ ]
638
+ }
639
+ ],
640
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
641
+ stateMutability: "pure"
642
+ },
643
+ {
644
+ type: "function",
645
+ name: "isIssuingCountryIn",
646
+ inputs: [
647
+ { name: "countryList", type: "string[]", internalType: "string[]" },
648
+ {
649
+ name: "params",
650
+ type: "tuple",
651
+ internalType: "struct ProofVerificationParams",
652
+ components: [
653
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
654
+ { name: "proof", type: "bytes", internalType: "bytes" },
655
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
656
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
657
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
658
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
659
+ { name: "domain", type: "string", internalType: "string" },
660
+ { name: "scope", type: "string", internalType: "string" },
661
+ { name: "devMode", type: "bool", internalType: "bool" }
662
+ ]
663
+ }
664
+ ],
665
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
666
+ stateMutability: "pure"
667
+ },
668
+ {
669
+ type: "function",
670
+ name: "isIssuingCountryOut",
671
+ inputs: [
672
+ { name: "countryList", type: "string[]", internalType: "string[]" },
673
+ {
674
+ name: "params",
675
+ type: "tuple",
676
+ internalType: "struct ProofVerificationParams",
677
+ components: [
678
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
679
+ { name: "proof", type: "bytes", internalType: "bytes" },
680
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
681
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
682
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
683
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
684
+ { name: "domain", type: "string", internalType: "string" },
685
+ { name: "scope", type: "string", internalType: "string" },
686
+ { name: "devMode", type: "bool", internalType: "bool" }
687
+ ]
688
+ }
689
+ ],
690
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
691
+ stateMutability: "pure"
692
+ },
693
+ {
694
+ type: "function",
695
+ name: "isNationalityIn",
696
+ inputs: [
697
+ { name: "countryList", type: "string[]", internalType: "string[]" },
698
+ {
699
+ name: "params",
700
+ type: "tuple",
701
+ internalType: "struct ProofVerificationParams",
702
+ components: [
703
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
704
+ { name: "proof", type: "bytes", internalType: "bytes" },
705
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
706
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
707
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
708
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
709
+ { name: "domain", type: "string", internalType: "string" },
710
+ { name: "scope", type: "string", internalType: "string" },
711
+ { name: "devMode", type: "bool", internalType: "bool" }
712
+ ]
713
+ }
714
+ ],
715
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
716
+ stateMutability: "pure"
717
+ },
718
+ {
719
+ type: "function",
720
+ name: "isNationalityOut",
721
+ inputs: [
722
+ { name: "countryList", type: "string[]", internalType: "string[]" },
723
+ {
724
+ name: "params",
725
+ type: "tuple",
726
+ internalType: "struct ProofVerificationParams",
727
+ components: [
728
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
729
+ { name: "proof", type: "bytes", internalType: "bytes" },
730
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
731
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
732
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
733
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
734
+ { name: "domain", type: "string", internalType: "string" },
735
+ { name: "scope", type: "string", internalType: "string" },
736
+ { name: "devMode", type: "bool", internalType: "bool" }
737
+ ]
738
+ }
739
+ ],
740
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
741
+ stateMutability: "pure"
742
+ },
743
+ {
744
+ type: "function",
745
+ name: "paused",
746
+ inputs: [],
747
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
748
+ stateMutability: "view"
749
+ },
750
+ {
751
+ type: "function",
752
+ name: "removeVerifiers",
753
+ inputs: [{ name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" }],
754
+ outputs: [],
755
+ stateMutability: "nonpayable"
756
+ },
757
+ {
758
+ type: "function",
759
+ name: "rootRegistry",
760
+ inputs: [],
761
+ outputs: [{ name: "", type: "address", internalType: "contract IRootRegistry" }],
762
+ stateMutability: "view"
763
+ },
764
+ {
765
+ type: "function",
766
+ name: "setPaused",
767
+ inputs: [{ name: "_paused", type: "bool", internalType: "bool" }],
768
+ outputs: [],
769
+ stateMutability: "nonpayable"
770
+ },
771
+ {
772
+ type: "function",
773
+ name: "transferAdmin",
774
+ inputs: [{ name: "newAdmin", type: "address", internalType: "address" }],
775
+ outputs: [],
776
+ stateMutability: "nonpayable"
777
+ },
778
+ {
779
+ type: "function",
780
+ name: "updateRootRegistry",
781
+ inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
782
+ outputs: [],
783
+ stateMutability: "nonpayable"
784
+ },
785
+ {
786
+ type: "function",
787
+ name: "verifyProof",
788
+ inputs: [
789
+ {
790
+ name: "params",
791
+ type: "tuple",
792
+ internalType: "struct ProofVerificationParams",
793
+ components: [
794
+ { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
795
+ { name: "proof", type: "bytes", internalType: "bytes" },
796
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
797
+ { name: "committedInputs", type: "bytes", internalType: "bytes" },
798
+ { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" },
799
+ { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
800
+ { name: "domain", type: "string", internalType: "string" },
801
+ { name: "scope", type: "string", internalType: "string" },
802
+ { name: "devMode", type: "bool", internalType: "bool" }
803
+ ]
804
+ }
805
+ ],
806
+ outputs: [
807
+ { name: "isValid", type: "bool", internalType: "bool" },
808
+ { name: "uniqueIdentifier", type: "bytes32", internalType: "bytes32" }
809
+ ],
810
+ stateMutability: "view"
811
+ },
812
+ {
813
+ type: "function",
814
+ name: "verifyScopes",
815
+ inputs: [
816
+ { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
817
+ { name: "domain", type: "string", internalType: "string" },
818
+ { name: "scope", type: "string", internalType: "string" }
819
+ ],
820
+ outputs: [{ name: "", type: "bool", internalType: "bool" }],
821
+ stateMutability: "pure"
822
+ },
823
+ {
824
+ type: "function",
825
+ name: "vkeyHashToVerifier",
826
+ inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
827
+ outputs: [{ name: "", type: "address", internalType: "address" }],
828
+ stateMutability: "view"
829
+ },
830
+ {
831
+ type: "event",
832
+ name: "AdminUpdated",
833
+ inputs: [
834
+ { name: "oldAdmin", type: "address", indexed: true, internalType: "address" },
835
+ { name: "newAdmin", type: "address", indexed: true, internalType: "address" }
836
+ ],
837
+ anonymous: false
838
+ },
839
+ {
840
+ type: "event",
841
+ name: "CertificateRegistryRootAdded",
842
+ inputs: [
843
+ {
844
+ name: "certificateRegistryRoot",
845
+ type: "bytes32",
846
+ indexed: true,
847
+ internalType: "bytes32"
848
+ }
849
+ ],
850
+ anonymous: false
851
+ },
852
+ {
853
+ type: "event",
854
+ name: "CertificateRegistryRootRemoved",
855
+ inputs: [
856
+ {
857
+ name: "certificateRegistryRoot",
858
+ type: "bytes32",
859
+ indexed: true,
860
+ internalType: "bytes32"
861
+ }
862
+ ],
863
+ anonymous: false
864
+ },
865
+ {
866
+ type: "event",
867
+ name: "PausedStatusChanged",
868
+ inputs: [{ name: "paused", type: "bool", indexed: false, internalType: "bool" }],
869
+ anonymous: false
870
+ },
871
+ {
872
+ type: "event",
873
+ name: "SanctionsTreesRootUpdates",
874
+ inputs: [
875
+ {
876
+ name: "_sanctionsTreesRoot",
877
+ type: "bytes32",
878
+ indexed: true,
879
+ internalType: "bytes32"
880
+ }
881
+ ],
882
+ anonymous: false
883
+ },
884
+ {
885
+ type: "event",
886
+ name: "VerifierAdded",
887
+ inputs: [
888
+ { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" },
889
+ { name: "verifier", type: "address", indexed: true, internalType: "address" }
890
+ ],
891
+ anonymous: false
892
+ },
893
+ {
894
+ type: "event",
895
+ name: "VerifierRemoved",
896
+ inputs: [
897
+ { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" }
898
+ ],
899
+ anonymous: false
900
+ },
901
+ {
902
+ type: "event",
903
+ name: "ZKPassportVerifierDeployed",
904
+ inputs: [
905
+ { name: "admin", type: "address", indexed: true, internalType: "address" },
906
+ { name: "timestamp", type: "uint256", indexed: false, internalType: "uint256" }
907
+ ],
908
+ anonymous: false
909
+ }
910
+ ],
911
+ bytecode: {
912
+ object: "0x608060405234801561000f575f5ffd5b50604051613ab3380380613ab383398101604081905261002e916100f6565b6001600160a01b0381166100945760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840160405180910390fd5b5f8054336001600160a01b03199182168117909255600280549091166001600160a01b0384161790556040514281527ff29b53747ae7121d0958d490ad3d5cf6767119b0fdbd8389d918de3a12cf5a299060200160405180910390a250610123565b5f60208284031215610106575f5ffd5b81516001600160a01b038116811461011c575f5ffd5b9392505050565b613983806101305f395ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80638163f23111610135578063c4560786116100b4578063e420e35411610079578063e420e3541461053e578063e718bc3214610551578063ec46f77414610564578063f851a44014610577578063f87e19b114610589575f5ffd5b8063c4560786146104c8578063cfd9464a146104db578063d3f6ffff146104ee578063d7bf616a14610501578063deb7c0591461052b575f5ffd5b8063a88f1cef116100fa578063a88f1cef14610469578063aa1346ea1461047c578063b96b161c1461048f578063bf73c26c146104a2578063c0940ebd146104b5575f5ffd5b80638163f231146103dd578063847755e31461041d5780638d6937b814610430578063921076c714610443578063a6df2c0114610456575f5ffd5b80634c127428116101c1578063652ba33d11610186578063652ba33d14610394578063653cfd811461039c5780636c40d5d6146103af578063704876d6146103b757806375829def146103ca575f5ffd5b80634c1274281461032857806354dbe4d11461033b57806359545f451461034e5780635c975abb1461036e57806362067c8214610381575f5ffd5b80632e27242c116102075780632e27242c146102c657806337889655146102d95780633a86bd3d146102ec57806341a0e2c2146102ff57806346bd0a1614610315575f5ffd5b806304951b86146102435780630b90581b1461026b57806316c38b3c1461027e57806318677f2a146102935780631e26a9dc146102a6575b5f5ffd5b610256610251366004612987565b61059c565b60405190151581526020015b60405180910390f35b610256610279366004612987565b6105be565b61029161028c3660046129d7565b6105cc565b005b6102916102a1366004612a06565b610655565b6102b96102b4366004612a21565b610702565b6040516102629190612a9d565b6102566102d4366004612ba1565b610865565b6102566102e7366004612be5565b6109b7565b6102566102fa366004612cb6565b6109cc565b610307600181565b604051908152602001610262565b610256610323366004612dbe565b6109d9565b610256610336366004612987565b6109f1565b610256610349366004612be5565b6109fe565b61036161035c366004612e09565b610b4f565b6040516102629190612e3a565b5f5461025690600160a01b900460ff1681565b61025661038f366004612e70565b610c95565b610307600381565b6102916103aa366004612e09565b610f06565b610307600281565b6102566103c5366004612987565b610fa8565b6102916103d8366004612a06565b610fb5565b6104056103eb366004612eb7565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610262565b61025661042b366004612f52565b611083565b61029161043e366004612fee565b61124b565b610256610451366004612987565b61130b565b61029161046436600461302c565b611324565b610256610477366004612987565b61144e565b61025661048a366004612be5565b611467565b600254610405906001600160a01b031681565b6102566104b0366004612be5565b6115b8565b6102566104c3366004612be5565b61161f565b6102566104d6366004612dbe565b61162b565b6102566104e9366004612987565b611639565b6102566104fc366004612987565b611647565b61051461050f366004612e09565b611660565b604080519215158352602083019190915201610262565b610256610539366004612987565b611bda565b61025661054c366004612cb6565b611be7565b61025661055f366004612987565b611bf4565b610256610572366004612cb6565b611c01565b5f54610405906001600160a01b031681565b610256610597366004612cb6565b611c0e565b5f6105b56105ad84620151806130aa565b600284611c1b565b90505b92915050565b5f6105b58384600285611e76565b5f546001600160a01b031633146105fe5760405162461bcd60e51b81526004016105f5906130bd565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061064a90831515815260200190565b60405180910390a150565b5f546001600160a01b0316331461067e5760405162461bcd60e51b81526004016105f5906130bd565b6001600160a01b0381166106e05760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016105f5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61074a60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63ddf3eec961077260608701876130f4565b61077f6080890189613136565b6040518563ffffffff1660e01b815260040161079e94939291906131d3565b5f60405180830381865af41580156107b8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107df9190810190613248565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae9061081c90849087906004016132a1565b5f60405180830381865af4158015610836573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261085d91908101906132c4565b949350505050565b5f8080808073__$144f4fe859debe4776cdef2b99f7b97a42$__63c802bad161089160608901896130f4565b61089e60808b018b613136565b6040518563ffffffff1660e01b81526004016108bd94939291906131d3565b608060405180830381865af41580156108d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fc9190613455565b929650909450925090505f600184600181111561091b5761091b6134a1565b1490505f886002811115610931576109316134a1565b836002811115610943576109436134a1565b1490507f2532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b86147f1fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b85148380156109965750825b801561099f5750815b80156109a85750805b9b9a5050505050505050505050565b5f6105b56109c68460016134b5565b836109fe565b5f6105b5836007846121b4565b5f6109e78484600385611e76565b90505b9392505050565b5f6105b583600384611c1b565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610a2960608801886130f4565b610a3660808a018a613136565b6040518563ffffffff1660e01b8152600401610a5594939291906131d3565b606060405180830381865af4158015610a70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9491906134ce565b925092509250610aa8838660a001356122de565b610ac45760405162461bcd60e51b81526004016105f59061350f565b60ff811615610b3d576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105f5565b5060ff85811691161491505092915050565b60408051606080820183525f8083526020830152918101919091525f73__$144f4fe859debe4776cdef2b99f7b97a42$__634601173c610b9260608601866130f4565b610b9f6080880188613136565b6040518563ffffffff1660e01b8152600401610bbe94939291906131d3565b5f60405180830381865af4158015610bd8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bff9190810190613580565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba690610c399084906004016135b1565b5f60405180830381865af4158015610c53573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7a91908101906135c3565b604085015260208401526001600160a01b0316825250919050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610cc060608801886130f4565b610ccd60808a018a613136565b6040518563ffffffff1660e01b8152600401610cec94939291906131d3565b606060405180830381865af4158015610d07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2b91906134ce565b925092509250610d3f838660a001356122de565b610d5b5760405162461bcd60e51b81526004016105f59061350f565b8560ff168760ff161115610dc75760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b60648201526084016105f5565b8160ff165f03610e545760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105f5565b8060ff165f03610ee15760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105f5565b8160ff168760ff16148015610efb57508060ff168660ff16145b979650505050505050565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63fbd24457610f2e60608501856130f4565b610f3b6080870187613136565b6040518563ffffffff1660e01b8152600401610f5a94939291906131d3565b602060405180830381865af4158015610f75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f99919061360e565b9050610fa48161230b565b5050565b5f6105b583600284611c1b565b5f546001600160a01b03163314610fde5760405162461bcd60e51b81526004016105f5906130bd565b6001600160a01b0381166110345760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f20616464726573730000000060448201526064016105f5565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f5f6110c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123cc92505050565b61113d576008600287876040516020016110de929190613625565b60408051601f19818403018152908290526110f891613634565b602060405180830381855afa158015611113573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611136919061360e565b901c61113f565b5f5b90505f61118085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123cc92505050565b6111fa5760086002868660405160200161119b929190613625565b60408051601f19818403018152908290526111b591613634565b602060405180830381855afa1580156111d0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906111f3919061360e565b901c6111fc565b5f5b905081898960038181106112125761121261364a565b9050602002013514801561123e575080898960048181106112355761123561364a565b90506020020135145b9998505050505050505050565b5f546001600160a01b031633146112745760405162461bcd60e51b81526004016105f5906130bd565b5f5b818110156113065760015f8484848181106112935761129361364a565b602090810292909201358352508101919091526040015f2080546001600160a01b03191690558282828181106112cb576112cb61364a565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101611276565b505050565b5f6105b561131c620151808561365e565b6002846123d1565b5f546001600160a01b0316331461134d5760405162461bcd60e51b81526004016105f5906130bd565b5f5b83811015611447578282828181106113695761136961364a565b905060200201602081019061137e9190612a06565b60015f8787858181106113935761139361364a565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508282828181106113dc576113dc61364a565b90506020020160208101906113f19190612a06565b6001600160a01b031685858381811061140c5761140c61364a565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a360010161134f565b5050505050565b5f6105b561145f620151808561365e565b6003846123d1565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c61149260608801886130f4565b61149f60808a018a613136565b6040518563ffffffff1660e01b81526004016114be94939291906131d3565b606060405180830381865af41580156114d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fd91906134ce565b925092509250611511838660a001356122de565b61152d5760405162461bcd60e51b81526004016105f59061350f565b60ff8216156115a6576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105f5565b60ff8681169116149250505092915050565b5f5f8360ff161161160b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e2030000060448201526064016105f5565b6105b5611619600185613671565b83611467565b5f6105b5838484610c95565b5f6109e78484600285611e76565b5f6105b58384600385611e76565b5f6105b561165884620151806130aa565b600384611c1b565b5f80548190600160a01b900460ff16156116b15760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016105f5565b5f6116bc84356125d5565b90506116ea6116ce6040860186613136565b5f8181106116de576116de61364a565b9050602002013561262e565b6117176116fa6040860186613136565b600181811061170b5761170b61364a565b905060200201356126f6565b6117616117276040860186613136565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050505060a08601356127b4565b6117c95760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b60648201526084016105f5565b6117f36117d96040860186613136565b6117e660c08801886130f4565b61042b60e08a018a6130f4565b61183f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f706500000000000000000060448201526064016105f5565b6118fa61184f6040860186613136565b600590600161186160408a018a613136565b61186c92915061365e565b926118799392919061368a565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506118b79250505060608701876130f4565b6118c46080890189613136565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506127df92505050565b5f6119086040860186613136565b60026119176040890189613136565b61192292915061365e565b8181106119315761193161364a565b905060200201355f1c600381111561194b5761194b6134a1565b90506002816003811115611961576119616134a1565b141580156119815750600381600381111561197e5761197e6134a1565b14155b806119995750611999610120860161010087016129d7565b6119f65760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b60648201526084016105f5565b5f816003811115611a0957611a096134a1565b1480611a225750611a22610120860161010087016129d7565b611a825760405162461bcd60e51b815260206004820152602b60248201527f53616c746564206e756c6c69666965727320617265206e6f7420737570706f7260448201526a74656420666f72206e6f7760a81b60648201526084016105f5565b6007611a916040870187613136565b611a9c92915061365e565b611aa96080870187613136565b905014611b065760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b60648201526084016105f5565b6001600160a01b03821663ea50d0e4611b2260208801886130f4565b611b2f60408a018a613136565b6040518563ffffffff1660e01b8152600401611b4e94939291906131d3565b602060405180830381865afa158015611b69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8d91906136b5565b93505f6001611b9f6040880188613136565b611baa92915061365e565b9050611bb96040870187613136565b82818110611bc957611bc961364a565b905060200201359350505050915091565b5f6105b5836002846123d1565b5f6105b5836005846121b4565b5f6105b5836003846123d1565b5f6105b5836006846121b4565b5f6105b5836004846121b4565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611c4660608801886130f4565b611c5360808a018a613136565b8b6040518663ffffffff1660e01b8152600401611c749594939291906136d0565b606060405180830381865af4158015611c8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb39190613725565b925092509250611cc7838660a001356122de565b611ce35760405162461bcd60e51b81526004016105f59061350f565b600286600a811115611cf757611cf76134a1565b1480611d145750600386600a811115611d1257611d126134a1565b145b611d305760405162461bcd60e51b81526004016105f590613750565b600286600a811115611d4457611d446134a1565b03611de6578015611dcc5760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a4016105f5565b611dda6383aa7e808361365e565b871493505050506109ea565b8015611e6a5760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a4016105f5565b50851491506109ea9050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611ea160608801886130f4565b611eae60808a018a613136565b8b6040518663ffffffff1660e01b8152600401611ecf9594939291906136d0565b606060405180830381865af4158015611eea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0e9190613725565b925092509250611f22838660a001356122de565b611f3e5760405162461bcd60e51b81526004016105f59061350f565b86881115611fa65760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b60648201526084016105f5565b600286600a811115611fba57611fba6134a1565b1480611fd75750600386600a811115611fd557611fd56134a1565b145b611ff35760405162461bcd60e51b81526004016105f590613750565b600286600a811115612007576120076134a1565b036120ed57815f0361209c5760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a4016105f5565b805f036120bb5760405162461bcd60e51b81526004016105f59061377c565b6120c96383aa7e808361365e565b881480156120e357506120e06383aa7e808261365e565b87145b935050505061085d565b815f0361217e5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a4016105f5565b805f0361219d5760405162461bcd60e51b81526004016105f5906137f4565b81881480156120e357509095149695505050505050565b5f808073__$144f4fe859debe4776cdef2b99f7b97a42$__6384d40ca06121de60608701876130f4565b6121eb6080890189613136565b8a6040518663ffffffff1660e01b815260040161220c9594939291906136d0565b5f60405180830381865af4158015612226573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261224d919081019061386d565b9150915080865114612263575f925050506109ea565b5f5b818110156122d1576122ba8782815181106122825761228261364a565b602002602001015184838151811061229c5761229c61364a565b60200260200101518051602091820120825192909101919091201490565b6122c9575f93505050506109ea565b600101612265565b5060019695505050505050565b5f806122ea83856130aa565b90508342101580156122fb57508381115b801561085d575042109392505050565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612359573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237d91906136b5565b6123c95760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f740060448201526064016105f5565b50565b511590565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f926123fc60608801886130f4565b61240960808a018a613136565b8b6040518663ffffffff1660e01b815260040161242a9594939291906136d0565b606060405180830381865af4158015612445573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124699190613725565b92509250925061247d838660a001356122de565b6124995760405162461bcd60e51b81526004016105f59061350f565b81156125175760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a4016105f5565b600286600a81111561252b5761252b6134a1565b14806125485750600386600a811115612546576125466134a1565b145b6125645760405162461bcd60e51b81526004016105f590613750565b600286600a811115612578576125786134a1565b036125aa57805f0361259c5760405162461bcd60e51b81526004016105f59061377c565b611dda6383aa7e808261365e565b805f036125c95760405162461bcd60e51b81526004016105f5906137f4565b861492506109ea915050565b5f818152600160205260408120546001600160a01b0316806105b85760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b60448201526064016105f5565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa15801561267c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a091906136b5565b6123c95760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b60648201526084016105f5565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa158015612744573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906136b5565b6123c95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f7400000060448201526064016105f5565b5f5f836002815181106127c9576127c961364a565b60200260200101515f1c905061085d81846122de565b5f805b8251811015612920575f60086002878786908887815181106128065761280661364a565b60200260200101518861281991906130aa565b9261282693929190613926565b604051602001612837929190613625565b60408051601f198184030181529082905261285191613634565b602060405180830381855afa15801561286c573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061288f919061360e565b901c90508682815181106128a5576128a561364a565b602002602001015181146128f05760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b60448201526064016105f5565b8382815181106129025761290261364a565b60200260200101518361291591906130aa565b9250506001016127e2565b508083146114475760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e6774680060448201526064016105f5565b5f6101208284031215612981575f5ffd5b50919050565b5f5f60408385031215612998575f5ffd5b8235915060208301356001600160401b038111156129b4575f5ffd5b6129c085828601612970565b9150509250929050565b80151581146123c9575f5ffd5b5f602082840312156129e7575f5ffd5b81356109ea816129ca565b6001600160a01b03811681146123c9575f5ffd5b5f60208284031215612a16575f5ffd5b81356109ea816129f2565b5f5f60408385031215612a32575f5ffd5b82356001600160401b03811115612a47575f5ffd5b612a5385828601612970565b9250506020830135612a64816129ca565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f82516101006020840152612aba610120840182612a6f565b90506020840151601f19848303016040850152612ad78282612a6f565b9150506040840151601f19848303016060850152612af58282612a6f565b9150506060840151601f19848303016080850152612b138282612a6f565b9150506080840151601f198483030160a0850152612b318282612a6f565b91505060a0840151601f198483030160c0850152612b4f8282612a6f565b91505060c0840151601f198483030160e0850152612b6d8282612a6f565b91505060e0840151601f1984830301610100850152612b8c8282612a6f565b95945050505050565b600381106123c9575f5ffd5b5f5f60408385031215612bb2575f5ffd5b8235612bbd81612b95565b915060208301356001600160401b038111156129b4575f5ffd5b60ff811681146123c9575f5ffd5b5f5f60408385031215612bf6575f5ffd5b8235612bbd81612bd7565b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b0381118282101715612c3857612c38612c01565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c6657612c66612c01565b604052919050565b5f6001600160401b03821115612c8657612c86612c01565b5060051b60200190565b5f6001600160401b03821115612ca857612ca8612c01565b50601f01601f191660200190565b5f5f60408385031215612cc7575f5ffd5b82356001600160401b03811115612cdc575f5ffd5b8301601f81018513612cec575f5ffd5b8035612cff612cfa82612c6e565b612c3e565b8082825260208201915060208360051b850101925087831115612d20575f5ffd5b602084015b83811015612da05780356001600160401b03811115612d42575f5ffd5b8501603f81018a13612d52575f5ffd5b6020810135612d63612cfa82612c90565b8181526040838301018c1015612d77575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612d25565b50945050505060208301356001600160401b038111156129b4575f5ffd5b5f5f5f60608486031215612dd0575f5ffd5b833592506020840135915060408401356001600160401b03811115612df3575f5ffd5b612dff86828701612970565b9150509250925092565b5f60208284031215612e19575f5ffd5b81356001600160401b03811115612e2e575f5ffd5b61085d84828501612970565b6020815260018060a01b038251166020820152602082015160408201525f604083015160608084015261085d6080840182612a6f565b5f5f5f60608486031215612e82575f5ffd5b8335612e8d81612bd7565b92506020840135612e9d81612bd7565b915060408401356001600160401b03811115612df3575f5ffd5b5f60208284031215612ec7575f5ffd5b5035919050565b5f5f83601f840112612ede575f5ffd5b5081356001600160401b03811115612ef4575f5ffd5b6020830191508360208260051b8501011115612f0e575f5ffd5b9250929050565b5f5f83601f840112612f25575f5ffd5b5081356001600160401b03811115612f3b575f5ffd5b602083019150836020828501011115612f0e575f5ffd5b5f5f5f5f5f5f60608789031215612f67575f5ffd5b86356001600160401b03811115612f7c575f5ffd5b612f8889828a01612ece565b90975095505060208701356001600160401b03811115612fa6575f5ffd5b612fb289828a01612f15565b90955093505060408701356001600160401b03811115612fd0575f5ffd5b612fdc89828a01612f15565b979a9699509497509295939492505050565b5f5f60208385031215612fff575f5ffd5b82356001600160401b03811115613014575f5ffd5b61302085828601612ece565b90969095509350505050565b5f5f5f5f6040858703121561303f575f5ffd5b84356001600160401b03811115613054575f5ffd5b61306087828801612ece565b90955093505060208501356001600160401b0381111561307e575f5ffd5b61308a87828801612ece565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105b8576105b8613096565b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f5f8335601e19843603018112613109575f5ffd5b8301803591506001600160401b03821115613122575f5ffd5b602001915036819003821315612f0e575f5ffd5b5f5f8335601e1984360301811261314b575f5ffd5b8301803591506001600160401b03821115613164575f5ffd5b6020019150600581901b3603821315612f0e575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b038311156131ba575f5ffd5b8260051b80836020870137939093016020019392505050565b604081525f6131e660408301868861317b565b8281036020840152610efb8185876131a3565b5f82601f830112613208575f5ffd5b8151602083015f61321b612cfa84612c90565b905082815285838301111561322e575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f5f60408385031215613259575f5ffd5b82516001600160401b0381111561326e575f5ffd5b61327a858286016131f9565b92505060208301516001600160401b03811115613295575f5ffd5b6129c0858286016131f9565b604081525f6132b36040830185612a6f565b905082151560208301529392505050565b5f602082840312156132d4575f5ffd5b81516001600160401b038111156132e9575f5ffd5b820161010081850312156132fb575f5ffd5b613303612c15565b81516001600160401b03811115613318575f5ffd5b613324868285016131f9565b82525060208201516001600160401b0381111561333f575f5ffd5b61334b868285016131f9565b60208301525060408201516001600160401b03811115613369575f5ffd5b613375868285016131f9565b60408301525060608201516001600160401b03811115613393575f5ffd5b61339f868285016131f9565b60608301525060808201516001600160401b038111156133bd575f5ffd5b6133c9868285016131f9565b60808301525060a08201516001600160401b038111156133e7575f5ffd5b6133f3868285016131f9565b60a08301525060c08201516001600160401b03811115613411575f5ffd5b61341d868285016131f9565b60c08301525060e08201516001600160401b0381111561343b575f5ffd5b613447868285016131f9565b60e083015250949350505050565b5f5f5f5f60808587031215613468575f5ffd5b845160208601519094506002811061347e575f5ffd5b60408601516060870151919450925061349681612b95565b939692955090935050565b634e487b7160e01b5f52602160045260245ffd5b60ff81811683821601908111156105b8576105b8613096565b5f5f5f606084860312156134e0575f5ffd5b835160208501519093506134f381612bd7565b604085015190925061350481612bd7565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b5f60208284031215613590575f5ffd5b81516001600160401b038111156135a5575f5ffd5b61085d848285016131f9565b602081525f6105b56020830184612a6f565b5f5f5f606084860312156135d5575f5ffd5b83516135e0816129f2565b6020850151604086015191945092506001600160401b03811115613602575f5ffd5b612dff868287016131f9565b5f6020828403121561361e575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b818103818111156105b8576105b8613096565b60ff82811682821603908111156105b8576105b8613096565b5f5f85851115613698575f5ffd5b838611156136a4575f5ffd5b5050600583901b0193919092039150565b5f602082840312156136c5575f5ffd5b81516109ea816129ca565b606081525f6136e360608301878961317b565b82810360208401526136f68186886131a3565b915050600b831061371557634e487b7160e01b5f52602160045260245ffd5b8260408301529695505050505050565b5f5f5f60608486031215613737575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f6040838503121561387e575f5ffd5b82516001600160401b03811115613893575f5ffd5b8301601f810185136138a3575f5ffd5b80516138b1612cfa82612c6e565b8082825260208201915060208360051b8501019250878311156138d2575f5ffd5b602084015b838110156139125780516001600160401b038111156138f4575f5ffd5b6139038a6020838901016131f9565b845250602092830192016138d7565b506020969096015195979596505050505050565b5f5f85851115613934575f5ffd5b83861115613940575f5ffd5b505082019391909203915056fea2646970667358221220623aa0f5d6fd1ed4b32bdfd3907fb8b21b1ba73e0a28815b6397c145a04864b764736f6c634300081d0033",
913
+ sourceMap: "674:28697:26:-:0;;;1816:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1865:27:26;;1857:76;;;;-1:-1:-1;;;1857:76:26;;511:2:34;1857:76:26;;;493:21:34;550:2;530:18;;;523:30;589:34;569:18;;;562:62;-1:-1:-1;;;640:18:34;;;633:34;684:19;;1857:76:26;;;;;;;;1939:5;:18;;1947:10;-1:-1:-1;;;;;;1939:18:26;;;;;;;;1963:12;:43;;;;;-1:-1:-1;;;;;1963:43:26;;;;;2017:50;;2051:15;860:25:34;;2017:50:26;;848:2:34;833:18;2017:50:26;;;;;;;1816:256;674:28697;;14:290:34;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:34;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:34:o;714:177::-;674:28697:26;;;;;;",
914
+ linkReferences: {
915
+ "src/InputsExtractor.sol": {
916
+ InputsExtractor: [
917
+ { start: 2173, length: 20 },
918
+ { start: 2337, length: 20 },
919
+ { start: 2460, length: 20 },
920
+ { start: 2868, length: 20 },
921
+ { start: 3229, length: 20 },
922
+ { start: 3393, length: 20 },
923
+ { start: 3531, length: 20 },
924
+ { start: 4153, length: 20 },
925
+ { start: 5533, length: 20 },
926
+ { start: 7505, length: 20 },
927
+ { start: 8108, length: 20 },
928
+ { start: 8937, length: 20 },
929
+ { start: 9479, length: 20 }
930
+ ]
931
+ }
932
+ }
933
+ },
934
+ deployedBytecode: {
935
+ object: "0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80638163f23111610135578063c4560786116100b4578063e420e35411610079578063e420e3541461053e578063e718bc3214610551578063ec46f77414610564578063f851a44014610577578063f87e19b114610589575f5ffd5b8063c4560786146104c8578063cfd9464a146104db578063d3f6ffff146104ee578063d7bf616a14610501578063deb7c0591461052b575f5ffd5b8063a88f1cef116100fa578063a88f1cef14610469578063aa1346ea1461047c578063b96b161c1461048f578063bf73c26c146104a2578063c0940ebd146104b5575f5ffd5b80638163f231146103dd578063847755e31461041d5780638d6937b814610430578063921076c714610443578063a6df2c0114610456575f5ffd5b80634c127428116101c1578063652ba33d11610186578063652ba33d14610394578063653cfd811461039c5780636c40d5d6146103af578063704876d6146103b757806375829def146103ca575f5ffd5b80634c1274281461032857806354dbe4d11461033b57806359545f451461034e5780635c975abb1461036e57806362067c8214610381575f5ffd5b80632e27242c116102075780632e27242c146102c657806337889655146102d95780633a86bd3d146102ec57806341a0e2c2146102ff57806346bd0a1614610315575f5ffd5b806304951b86146102435780630b90581b1461026b57806316c38b3c1461027e57806318677f2a146102935780631e26a9dc146102a6575b5f5ffd5b610256610251366004612987565b61059c565b60405190151581526020015b60405180910390f35b610256610279366004612987565b6105be565b61029161028c3660046129d7565b6105cc565b005b6102916102a1366004612a06565b610655565b6102b96102b4366004612a21565b610702565b6040516102629190612a9d565b6102566102d4366004612ba1565b610865565b6102566102e7366004612be5565b6109b7565b6102566102fa366004612cb6565b6109cc565b610307600181565b604051908152602001610262565b610256610323366004612dbe565b6109d9565b610256610336366004612987565b6109f1565b610256610349366004612be5565b6109fe565b61036161035c366004612e09565b610b4f565b6040516102629190612e3a565b5f5461025690600160a01b900460ff1681565b61025661038f366004612e70565b610c95565b610307600381565b6102916103aa366004612e09565b610f06565b610307600281565b6102566103c5366004612987565b610fa8565b6102916103d8366004612a06565b610fb5565b6104056103eb366004612eb7565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610262565b61025661042b366004612f52565b611083565b61029161043e366004612fee565b61124b565b610256610451366004612987565b61130b565b61029161046436600461302c565b611324565b610256610477366004612987565b61144e565b61025661048a366004612be5565b611467565b600254610405906001600160a01b031681565b6102566104b0366004612be5565b6115b8565b6102566104c3366004612be5565b61161f565b6102566104d6366004612dbe565b61162b565b6102566104e9366004612987565b611639565b6102566104fc366004612987565b611647565b61051461050f366004612e09565b611660565b604080519215158352602083019190915201610262565b610256610539366004612987565b611bda565b61025661054c366004612cb6565b611be7565b61025661055f366004612987565b611bf4565b610256610572366004612cb6565b611c01565b5f54610405906001600160a01b031681565b610256610597366004612cb6565b611c0e565b5f6105b56105ad84620151806130aa565b600284611c1b565b90505b92915050565b5f6105b58384600285611e76565b5f546001600160a01b031633146105fe5760405162461bcd60e51b81526004016105f5906130bd565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061064a90831515815260200190565b60405180910390a150565b5f546001600160a01b0316331461067e5760405162461bcd60e51b81526004016105f5906130bd565b6001600160a01b0381166106e05760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b60648201526084016105f5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61074a60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63ddf3eec961077260608701876130f4565b61077f6080890189613136565b6040518563ffffffff1660e01b815260040161079e94939291906131d3565b5f60405180830381865af41580156107b8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107df9190810190613248565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae9061081c90849087906004016132a1565b5f60405180830381865af4158015610836573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261085d91908101906132c4565b949350505050565b5f8080808073__$144f4fe859debe4776cdef2b99f7b97a42$__63c802bad161089160608901896130f4565b61089e60808b018b613136565b6040518563ffffffff1660e01b81526004016108bd94939291906131d3565b608060405180830381865af41580156108d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fc9190613455565b929650909450925090505f600184600181111561091b5761091b6134a1565b1490505f886002811115610931576109316134a1565b836002811115610943576109436134a1565b1490507f2532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b86147f1fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b85148380156109965750825b801561099f5750815b80156109a85750805b9b9a5050505050505050505050565b5f6105b56109c68460016134b5565b836109fe565b5f6105b5836007846121b4565b5f6109e78484600385611e76565b90505b9392505050565b5f6105b583600384611c1b565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610a2960608801886130f4565b610a3660808a018a613136565b6040518563ffffffff1660e01b8152600401610a5594939291906131d3565b606060405180830381865af4158015610a70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9491906134ce565b925092509250610aa8838660a001356122de565b610ac45760405162461bcd60e51b81526004016105f59061350f565b60ff811615610b3d576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105f5565b5060ff85811691161491505092915050565b60408051606080820183525f8083526020830152918101919091525f73__$144f4fe859debe4776cdef2b99f7b97a42$__634601173c610b9260608601866130f4565b610b9f6080880188613136565b6040518563ffffffff1660e01b8152600401610bbe94939291906131d3565b5f60405180830381865af4158015610bd8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bff9190810190613580565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba690610c399084906004016135b1565b5f60405180830381865af4158015610c53573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7a91908101906135c3565b604085015260208401526001600160a01b0316825250919050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c610cc060608801886130f4565b610ccd60808a018a613136565b6040518563ffffffff1660e01b8152600401610cec94939291906131d3565b606060405180830381865af4158015610d07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2b91906134ce565b925092509250610d3f838660a001356122de565b610d5b5760405162461bcd60e51b81526004016105f59061350f565b8560ff168760ff161115610dc75760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b60648201526084016105f5565b8160ff165f03610e545760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105f5565b8060ff165f03610ee15760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a4016105f5565b8160ff168760ff16148015610efb57508060ff168660ff16145b979650505050505050565b5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63fbd24457610f2e60608501856130f4565b610f3b6080870187613136565b6040518563ffffffff1660e01b8152600401610f5a94939291906131d3565b602060405180830381865af4158015610f75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f99919061360e565b9050610fa48161230b565b5050565b5f6105b583600284611c1b565b5f546001600160a01b03163314610fde5760405162461bcd60e51b81526004016105f5906130bd565b6001600160a01b0381166110345760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f20616464726573730000000060448201526064016105f5565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f5f6110c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123cc92505050565b61113d576008600287876040516020016110de929190613625565b60408051601f19818403018152908290526110f891613634565b602060405180830381855afa158015611113573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611136919061360e565b901c61113f565b5f5b90505f61118085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506123cc92505050565b6111fa5760086002868660405160200161119b929190613625565b60408051601f19818403018152908290526111b591613634565b602060405180830381855afa1580156111d0573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906111f3919061360e565b901c6111fc565b5f5b905081898960038181106112125761121261364a565b9050602002013514801561123e575080898960048181106112355761123561364a565b90506020020135145b9998505050505050505050565b5f546001600160a01b031633146112745760405162461bcd60e51b81526004016105f5906130bd565b5f5b818110156113065760015f8484848181106112935761129361364a565b602090810292909201358352508101919091526040015f2080546001600160a01b03191690558282828181106112cb576112cb61364a565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101611276565b505050565b5f6105b561131c620151808561365e565b6002846123d1565b5f546001600160a01b0316331461134d5760405162461bcd60e51b81526004016105f5906130bd565b5f5b83811015611447578282828181106113695761136961364a565b905060200201602081019061137e9190612a06565b60015f8787858181106113935761139361364a565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508282828181106113dc576113dc61364a565b90506020020160208101906113f19190612a06565b6001600160a01b031685858381811061140c5761140c61364a565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a360010161134f565b5050505050565b5f6105b561145f620151808561365e565b6003846123d1565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__63b2b37a4c61149260608801886130f4565b61149f60808a018a613136565b6040518563ffffffff1660e01b81526004016114be94939291906131d3565b606060405180830381865af41580156114d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fd91906134ce565b925092509250611511838660a001356122de565b61152d5760405162461bcd60e51b81526004016105f59061350f565b60ff8216156115a6576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e737465616460648201526084016105f5565b60ff8681169116149250505092915050565b5f5f8360ff161161160b5760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e2030000060448201526064016105f5565b6105b5611619600185613671565b83611467565b5f6105b5838484610c95565b5f6109e78484600285611e76565b5f6105b58384600385611e76565b5f6105b561165884620151806130aa565b600384611c1b565b5f80548190600160a01b900460ff16156116b15760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016105f5565b5f6116bc84356125d5565b90506116ea6116ce6040860186613136565b5f8181106116de576116de61364a565b9050602002013561262e565b6117176116fa6040860186613136565b600181811061170b5761170b61364a565b905060200201356126f6565b6117616117276040860186613136565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050505060a08601356127b4565b6117c95760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b60648201526084016105f5565b6117f36117d96040860186613136565b6117e660c08801886130f4565b61042b60e08a018a6130f4565b61183f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f706500000000000000000060448201526064016105f5565b6118fa61184f6040860186613136565b600590600161186160408a018a613136565b61186c92915061365e565b926118799392919061368a565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506118b79250505060608701876130f4565b6118c46080890189613136565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506127df92505050565b5f6119086040860186613136565b60026119176040890189613136565b61192292915061365e565b8181106119315761193161364a565b905060200201355f1c600381111561194b5761194b6134a1565b90506002816003811115611961576119616134a1565b141580156119815750600381600381111561197e5761197e6134a1565b14155b806119995750611999610120860161010087016129d7565b6119f65760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b60648201526084016105f5565b5f816003811115611a0957611a096134a1565b1480611a225750611a22610120860161010087016129d7565b611a825760405162461bcd60e51b815260206004820152602b60248201527f53616c746564206e756c6c69666965727320617265206e6f7420737570706f7260448201526a74656420666f72206e6f7760a81b60648201526084016105f5565b6007611a916040870187613136565b611a9c92915061365e565b611aa96080870187613136565b905014611b065760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b60648201526084016105f5565b6001600160a01b03821663ea50d0e4611b2260208801886130f4565b611b2f60408a018a613136565b6040518563ffffffff1660e01b8152600401611b4e94939291906131d3565b602060405180830381865afa158015611b69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8d91906136b5565b93505f6001611b9f6040880188613136565b611baa92915061365e565b9050611bb96040870187613136565b82818110611bc957611bc961364a565b905060200201359350505050915091565b5f6105b5836002846123d1565b5f6105b5836005846121b4565b5f6105b5836003846123d1565b5f6105b5836006846121b4565b5f6105b5836004846121b4565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611c4660608801886130f4565b611c5360808a018a613136565b8b6040518663ffffffff1660e01b8152600401611c749594939291906136d0565b606060405180830381865af4158015611c8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb39190613725565b925092509250611cc7838660a001356122de565b611ce35760405162461bcd60e51b81526004016105f59061350f565b600286600a811115611cf757611cf76134a1565b1480611d145750600386600a811115611d1257611d126134a1565b145b611d305760405162461bcd60e51b81526004016105f590613750565b600286600a811115611d4457611d446134a1565b03611de6578015611dcc5760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a4016105f5565b611dda6383aa7e808361365e565b871493505050506109ea565b8015611e6a5760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a4016105f5565b50851491506109ea9050565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f92611ea160608801886130f4565b611eae60808a018a613136565b8b6040518663ffffffff1660e01b8152600401611ecf9594939291906136d0565b606060405180830381865af4158015611eea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0e9190613725565b925092509250611f22838660a001356122de565b611f3e5760405162461bcd60e51b81526004016105f59061350f565b86881115611fa65760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b60648201526084016105f5565b600286600a811115611fba57611fba6134a1565b1480611fd75750600386600a811115611fd557611fd56134a1565b145b611ff35760405162461bcd60e51b81526004016105f590613750565b600286600a811115612007576120076134a1565b036120ed57815f0361209c5760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a4016105f5565b805f036120bb5760405162461bcd60e51b81526004016105f59061377c565b6120c96383aa7e808361365e565b881480156120e357506120e06383aa7e808261365e565b87145b935050505061085d565b815f0361217e5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a4016105f5565b805f0361219d5760405162461bcd60e51b81526004016105f5906137f4565b81881480156120e357509095149695505050505050565b5f808073__$144f4fe859debe4776cdef2b99f7b97a42$__6384d40ca06121de60608701876130f4565b6121eb6080890189613136565b8a6040518663ffffffff1660e01b815260040161220c9594939291906136d0565b5f60405180830381865af4158015612226573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261224d919081019061386d565b9150915080865114612263575f925050506109ea565b5f5b818110156122d1576122ba8782815181106122825761228261364a565b602002602001015184838151811061229c5761229c61364a565b60200260200101518051602091820120825192909101919091201490565b6122c9575f93505050506109ea565b600101612265565b5060019695505050505050565b5f806122ea83856130aa565b90508342101580156122fb57508381115b801561085d575042109392505050565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015612359573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061237d91906136b5565b6123c95760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f740060448201526064016105f5565b50565b511590565b5f80808073__$144f4fe859debe4776cdef2b99f7b97a42$__638a8b3f926123fc60608801886130f4565b61240960808a018a613136565b8b6040518663ffffffff1660e01b815260040161242a9594939291906136d0565b606060405180830381865af4158015612445573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124699190613725565b92509250925061247d838660a001356122de565b6124995760405162461bcd60e51b81526004016105f59061350f565b81156125175760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a4016105f5565b600286600a81111561252b5761252b6134a1565b14806125485750600386600a811115612546576125466134a1565b145b6125645760405162461bcd60e51b81526004016105f590613750565b600286600a811115612578576125786134a1565b036125aa57805f0361259c5760405162461bcd60e51b81526004016105f59061377c565b611dda6383aa7e808261365e565b805f036125c95760405162461bcd60e51b81526004016105f5906137f4565b861492506109ea915050565b5f818152600160205260408120546001600160a01b0316806105b85760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b60448201526064016105f5565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa15801561267c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a091906136b5565b6123c95760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b60648201526084016105f5565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa158015612744573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906136b5565b6123c95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f7400000060448201526064016105f5565b5f5f836002815181106127c9576127c961364a565b60200260200101515f1c905061085d81846122de565b5f805b8251811015612920575f60086002878786908887815181106128065761280661364a565b60200260200101518861281991906130aa565b9261282693929190613926565b604051602001612837929190613625565b60408051601f198184030181529082905261285191613634565b602060405180830381855afa15801561286c573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061288f919061360e565b901c90508682815181106128a5576128a561364a565b602002602001015181146128f05760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b60448201526064016105f5565b8382815181106129025761290261364a565b60200260200101518361291591906130aa565b9250506001016127e2565b508083146114475760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e6774680060448201526064016105f5565b5f6101208284031215612981575f5ffd5b50919050565b5f5f60408385031215612998575f5ffd5b8235915060208301356001600160401b038111156129b4575f5ffd5b6129c085828601612970565b9150509250929050565b80151581146123c9575f5ffd5b5f602082840312156129e7575f5ffd5b81356109ea816129ca565b6001600160a01b03811681146123c9575f5ffd5b5f60208284031215612a16575f5ffd5b81356109ea816129f2565b5f5f60408385031215612a32575f5ffd5b82356001600160401b03811115612a47575f5ffd5b612a5385828601612970565b9250506020830135612a64816129ca565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f82516101006020840152612aba610120840182612a6f565b90506020840151601f19848303016040850152612ad78282612a6f565b9150506040840151601f19848303016060850152612af58282612a6f565b9150506060840151601f19848303016080850152612b138282612a6f565b9150506080840151601f198483030160a0850152612b318282612a6f565b91505060a0840151601f198483030160c0850152612b4f8282612a6f565b91505060c0840151601f198483030160e0850152612b6d8282612a6f565b91505060e0840151601f1984830301610100850152612b8c8282612a6f565b95945050505050565b600381106123c9575f5ffd5b5f5f60408385031215612bb2575f5ffd5b8235612bbd81612b95565b915060208301356001600160401b038111156129b4575f5ffd5b60ff811681146123c9575f5ffd5b5f5f60408385031215612bf6575f5ffd5b8235612bbd81612bd7565b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b0381118282101715612c3857612c38612c01565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612c6657612c66612c01565b604052919050565b5f6001600160401b03821115612c8657612c86612c01565b5060051b60200190565b5f6001600160401b03821115612ca857612ca8612c01565b50601f01601f191660200190565b5f5f60408385031215612cc7575f5ffd5b82356001600160401b03811115612cdc575f5ffd5b8301601f81018513612cec575f5ffd5b8035612cff612cfa82612c6e565b612c3e565b8082825260208201915060208360051b850101925087831115612d20575f5ffd5b602084015b83811015612da05780356001600160401b03811115612d42575f5ffd5b8501603f81018a13612d52575f5ffd5b6020810135612d63612cfa82612c90565b8181526040838301018c1015612d77575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612d25565b50945050505060208301356001600160401b038111156129b4575f5ffd5b5f5f5f60608486031215612dd0575f5ffd5b833592506020840135915060408401356001600160401b03811115612df3575f5ffd5b612dff86828701612970565b9150509250925092565b5f60208284031215612e19575f5ffd5b81356001600160401b03811115612e2e575f5ffd5b61085d84828501612970565b6020815260018060a01b038251166020820152602082015160408201525f604083015160608084015261085d6080840182612a6f565b5f5f5f60608486031215612e82575f5ffd5b8335612e8d81612bd7565b92506020840135612e9d81612bd7565b915060408401356001600160401b03811115612df3575f5ffd5b5f60208284031215612ec7575f5ffd5b5035919050565b5f5f83601f840112612ede575f5ffd5b5081356001600160401b03811115612ef4575f5ffd5b6020830191508360208260051b8501011115612f0e575f5ffd5b9250929050565b5f5f83601f840112612f25575f5ffd5b5081356001600160401b03811115612f3b575f5ffd5b602083019150836020828501011115612f0e575f5ffd5b5f5f5f5f5f5f60608789031215612f67575f5ffd5b86356001600160401b03811115612f7c575f5ffd5b612f8889828a01612ece565b90975095505060208701356001600160401b03811115612fa6575f5ffd5b612fb289828a01612f15565b90955093505060408701356001600160401b03811115612fd0575f5ffd5b612fdc89828a01612f15565b979a9699509497509295939492505050565b5f5f60208385031215612fff575f5ffd5b82356001600160401b03811115613014575f5ffd5b61302085828601612ece565b90969095509350505050565b5f5f5f5f6040858703121561303f575f5ffd5b84356001600160401b03811115613054575f5ffd5b61306087828801612ece565b90955093505060208501356001600160401b0381111561307e575f5ffd5b61308a87828801612ece565b95989497509550505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105b8576105b8613096565b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f5f8335601e19843603018112613109575f5ffd5b8301803591506001600160401b03821115613122575f5ffd5b602001915036819003821315612f0e575f5ffd5b5f5f8335601e1984360301811261314b575f5ffd5b8301803591506001600160401b03821115613164575f5ffd5b6020019150600581901b3603821315612f0e575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b038311156131ba575f5ffd5b8260051b80836020870137939093016020019392505050565b604081525f6131e660408301868861317b565b8281036020840152610efb8185876131a3565b5f82601f830112613208575f5ffd5b8151602083015f61321b612cfa84612c90565b905082815285838301111561322e575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f5f60408385031215613259575f5ffd5b82516001600160401b0381111561326e575f5ffd5b61327a858286016131f9565b92505060208301516001600160401b03811115613295575f5ffd5b6129c0858286016131f9565b604081525f6132b36040830185612a6f565b905082151560208301529392505050565b5f602082840312156132d4575f5ffd5b81516001600160401b038111156132e9575f5ffd5b820161010081850312156132fb575f5ffd5b613303612c15565b81516001600160401b03811115613318575f5ffd5b613324868285016131f9565b82525060208201516001600160401b0381111561333f575f5ffd5b61334b868285016131f9565b60208301525060408201516001600160401b03811115613369575f5ffd5b613375868285016131f9565b60408301525060608201516001600160401b03811115613393575f5ffd5b61339f868285016131f9565b60608301525060808201516001600160401b038111156133bd575f5ffd5b6133c9868285016131f9565b60808301525060a08201516001600160401b038111156133e7575f5ffd5b6133f3868285016131f9565b60a08301525060c08201516001600160401b03811115613411575f5ffd5b61341d868285016131f9565b60c08301525060e08201516001600160401b0381111561343b575f5ffd5b613447868285016131f9565b60e083015250949350505050565b5f5f5f5f60808587031215613468575f5ffd5b845160208601519094506002811061347e575f5ffd5b60408601516060870151919450925061349681612b95565b939692955090935050565b634e487b7160e01b5f52602160045260245ffd5b60ff81811683821601908111156105b8576105b8613096565b5f5f5f606084860312156134e0575f5ffd5b835160208501519093506134f381612bd7565b604085015190925061350481612bd7565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b5f60208284031215613590575f5ffd5b81516001600160401b038111156135a5575f5ffd5b61085d848285016131f9565b602081525f6105b56020830184612a6f565b5f5f5f606084860312156135d5575f5ffd5b83516135e0816129f2565b6020850151604086015191945092506001600160401b03811115613602575f5ffd5b612dff868287016131f9565b5f6020828403121561361e575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b818103818111156105b8576105b8613096565b60ff82811682821603908111156105b8576105b8613096565b5f5f85851115613698575f5ffd5b838611156136a4575f5ffd5b5050600583901b0193919092039150565b5f602082840312156136c5575f5ffd5b81516109ea816129ca565b606081525f6136e360608301878961317b565b82810360208401526136f68186886131a3565b915050600b831061371557634e487b7160e01b5f52602160045260245ffd5b8260408301529695505050505050565b5f5f5f60608486031215613737575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f6040838503121561387e575f5ffd5b82516001600160401b03811115613893575f5ffd5b8301601f810185136138a3575f5ffd5b80516138b1612cfa82612c6e565b8082825260208201915060208360051b8501019250878311156138d2575f5ffd5b602084015b838110156139125780516001600160401b038111156138f4575f5ffd5b6139038a6020838901016131f9565b845250602092830192016138d7565b506020969096015195979596505050505050565b5f5f85851115613934575f5ffd5b83861115613940575f5ffd5b505082019391909203915056fea2646970667358221220623aa0f5d6fd1ed4b32bdfd3907fb8b21b1ba73e0a28815b6397c145a04864b764736f6c634300081d0033",
936
+ sourceMap: "674:28697:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12985:206;;;;;;:::i;:::-;;:::i;:::-;;;864:14:34;;857:22;839:41;;827:2;812:18;12985:206:26;;;;;;;;15024:192;;;;;;:::i;:::-;;:::i;2495:118::-;;;;;;:::i;:::-;;:::i;:::-;;3146:206;;;;;;:::i;:::-;;:::i;3887:369::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22499:700::-;;;;;;:::i;:::-;;:::i;5317:169::-;;;;;;:::i;:::-;;:::i;21021:230::-;;;;;;:::i;:::-;;:::i;706:69::-;;772:1;706:69;;;;;8483:25:34;;;8471:2;8456:18;706:69:26;8337:177:34;16569:227:26;;;;;;:::i;:::-;;:::i;15522:207::-;;;;;;:::i;:::-;;:::i;4534:541::-;;;;;;:::i;:::-;;:::i;21417:347::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;944:18::-;;;;;-1:-1:-1;;;944:18:26;;;;;;5811:766;;;;;;:::i;:::-;;:::i;848:67::-;;912:1;848:67;;21915:271;;;;;;:::i;:::-;;:::i;779:65::-;;841:1;779:65;;12517:204;;;;;;:::i;:::-;;:::i;2262:229::-;;;;;;:::i;:::-;;:::i;1052:53::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1052:53:26;;;;;;-1:-1:-1;;;;;11049:32:34;;;11031:51;;11019:2;11004:18;1052:53:26;10885:203:34;23538:706:26;;;;;;:::i;:::-;;:::i;2911:231::-;;;;;;:::i;:::-;;:::i;14544:210::-;;;;;;:::i;:::-;;:::i;2617:290::-;;;;;;:::i;:::-;;:::i;17587:211::-;;;;;;:::i;:::-;;:::i;6855:541::-;;;;;;:::i;:::-;;:::i;1179:33::-;;;;;-1:-1:-1;;;;;1179:33:26;;;7638:228;;;;;;:::i;:::-;;:::i;8114:159::-;;;;;;:::i;:::-;;:::i;13544:224::-;;;;;;:::i;:::-;;:::i;18074:195::-;;;;;;:::i;:::-;;:::i;15999:209::-;;;;;;:::i;:::-;;:::i;26163:3206::-;;;;;;:::i;:::-;;:::i;:::-;;;;14509:14:34;;14502:22;14484:41;;14556:2;14541:18;;14534:34;;;;14457:18;26163:3206:26;14316:258:34;14071:206:26;;;;;;:::i;:::-;;:::i;20388:223::-;;;;;;:::i;:::-;;:::i;17105:209::-;;;;;;:::i;:::-;;:::i;19757:229::-;;;;;;:::i;:::-;;:::i;920:20::-;;;;;-1:-1:-1;;;;;920:20:26;;;19203:222;;;;;;:::i;:::-;;:::i;12985:206::-;13102:4;13121:65;13140:16;:7;13150:6;13140:16;:::i;:::-;13158:19;13179:6;13121:18;:65::i;:::-;13114:72;;12985:206;;;;;:::o;15024:192::-;15138:4;15157:54;15171:4;15177;15183:19;15204:6;15157:13;:54::i;2495:118::-;2125:5;;-1:-1:-1;;;;;2125:5:26;2111:10;:19;2103:58;;;;-1:-1:-1;;;2103:58:26;;;;;;;:::i;:::-;;;;;;;;;2553:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;2553:16:26::1;-1:-1:-1::0;;;;2553:16:26;;::::1;;::::0;;2580:28:::1;::::0;::::1;::::0;::::1;::::0;2562:7;864:14:34;857:22;839:41;;827:2;812:18;;699:187;2580:28:26::1;;;;;;;;2495:118:::0;:::o;3146:206::-;2125:5;;-1:-1:-1;;;;;2125:5:26;2111:10;:19;2103:58;;;;-1:-1:-1;;;2103:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;3230:27:26;::::1;3222:76;;;::::0;-1:-1:-1;;;3222:76:26;;15398:2:34;3222:76:26::1;::::0;::::1;15380:21:34::0;15437:2;15417:18;;;15410:30;15476:34;15456:18;;;15449:62;-1:-1:-1;;;15527:18:34;;;15520:34;15571:19;;3222:76:26::1;15196:400:34::0;3222:76:26::1;3304:12;:43:::0;;-1:-1:-1;;;;;;3304:43:26::1;-1:-1:-1::0;;;;;3304:43:26;;;::::1;::::0;;;::::1;::::0;;3146:206::o;3887:369::-;4006:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4006:34:26;4051:26;4081:15;:38;4120:22;;;;:6;:22;:::i;:::-;4144:27;;;;:6;:27;:::i;:::-;4081:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4081:91:26;;;;;;;;;;;;:::i;:::-;4194:57;;-1:-1:-1;;;4194:57:26;;4048:124;;-1:-1:-1;4194:15:26;;-1:-1:-1;4194:32:26;;:57;;4048:124;;4242:8;;4194:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4194:57:26;;;;;;;;;;;;:::i;:::-;4178:73;3887:369;-1:-1:-1;;;;3887:369:26:o;22499:700::-;22631:4;;;;;22745:15;:39;22785:22;;;;:6;:22;:::i;:::-;22809:27;;;;:6;:27;:::i;:::-;22745:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22643:194;;-1:-1:-1;22643:194:26;;-1:-1:-1;22643:194:26;-1:-1:-1;22643:194:26;-1:-1:-1;22843:17:26;22878:22;22863:11;:37;;;;;;;;:::i;:::-;;22843:57;;22906:18;22953:13;22927:39;;;;;;;;:::i;:::-;:22;:39;;;;;;;;:::i;:::-;;;-1:-1:-1;5043:66:19;23000:44:26;;4934:66:19;23076:30:26;;23119:12;:29;;;;;23135:13;23119:29;:53;;;;;23152:20;23119:53;:75;;;;;23176:18;23119:75;23112:82;22499:700;-1:-1:-1;;;;;;;;;;;22499:700:26:o;5317:169::-;5425:4;5444:37;5462:10;:6;5471:1;5462:10;:::i;:::-;5474:6;5444:17;:37::i;21021:230::-;21153:4;21172:74;21189:11;21202:35;21239:6;21172:16;:74::i;16569:227::-;16710:4;16729:62;16743:7;16752;16761:21;16784:6;16729:13;:62::i;:::-;16722:69;;16569:227;;;;;;:::o;15522:207::-;15647:4;15666:58;15685:7;15694:21;15717:6;15666:18;:58::i;4534:541::-;4649:4;;;;4707:15;:33;4741:22;;;;:6;:22;:::i;:::-;4765:27;;;;:6;:27;:::i;:::-;4707:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4661:132;;;;;;4807:66;4829:11;4842:6;:30;;;4807:21;:66::i;:::-;4799:154;;;;-1:-1:-1;;;4799:154:26;;;;;;;:::i;:::-;4967:8;;;;4959:85;;;;;-1:-1:-1;;;4959:85:26;;23257:2:34;4959:85:26;;;23239:21:34;23276:18;;;23269:30;;;;23335:34;23315:18;;;23308:62;23406:34;23386:18;;;23379:62;23458:19;;4959:85:26;23055:428:34;4959:85:26;-1:-1:-1;5057:13:26;;;;;;;;-1:-1:-1;;4534:541:26;;;;:::o;21417:347::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;21543:17:26;21563:15;:34;21598:22;;;;:6;:22;:::i;:::-;21622:27;;;;:6;:27;:::i;:::-;21563:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21563:87:26;;;;;;;;;;;;:::i;:::-;21725:34;;-1:-1:-1;;;21725:34:26;;21543:107;;-1:-1:-1;21725:15:26;;:28;;:34;;21543:107;;21725:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21725:34:26;;;;;;;;;;;;:::i;:::-;21701:20;;;21656:103;21682:17;;;21656:103;-1:-1:-1;;;;;21656:103:26;;;-1:-1:-1;21657:9:26;21417:347;-1:-1:-1;21417:347:26:o;5811:766::-;5939:4;;;;5997:15;:33;6031:22;;;;:6;:22;:::i;:::-;6055:27;;;;:6;:27;:::i;:::-;5997:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5951:132;;;;;;6097:66;6119:11;6132:6;:30;;;6097:21;:66::i;:::-;6089:154;;;;-1:-1:-1;;;6089:154:26;;;;;;;:::i;:::-;6267:6;6257:16;;:6;:16;;;;6249:74;;;;-1:-1:-1;;;6249:74:26;;24843:2:34;6249:74:26;;;24825:21:34;24882:2;24862:18;;;24855:30;24921:34;24901:18;;;24894:62;-1:-1:-1;;;24972:18:34;;;24965:43;25025:19;;6249:74:26;24641:409:34;6249:74:26;6337:3;:8;;6344:1;6337:8;6329:97;;;;-1:-1:-1;;;6329:97:26;;25257:2:34;6329:97:26;;;25239:21:34;25296:2;25276:18;;;25269:30;25335:34;25315:18;;;25308:62;25406:34;25386:18;;;25379:62;-1:-1:-1;;;25457:19:34;;;25450:43;25510:19;;6329:97:26;25055:480:34;6329:97:26;6440:3;:8;;6447:1;6440:8;6432:97;;;;-1:-1:-1;;;6432:97:26;;25742:2:34;6432:97:26;;;25724:21:34;25781:2;25761:18;;;25754:30;25820:34;25800:18;;;25793:62;25891:34;25871:18;;;25864:62;-1:-1:-1;;;25942:19:34;;;25935:43;25995:19;;6432:97:26;25540:480:34;6432:97:26;6552:3;6542:13;;:6;:13;;;:30;;;;;6569:3;6559:13;;:6;:13;;;6542:30;6535:37;5811:766;-1:-1:-1;;;;;;;5811:766:26:o;21915:271::-;22012:26;22041:15;:39;22081:22;;;;:6;:22;:::i;:::-;22105:27;;;;:6;:27;:::i;:::-;22041:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22012:121;;22139:42;22162:18;22139:22;:42::i;:::-;22006:180;21915:271;:::o;12517:204::-;12641:4;12660:56;12679:7;12688:19;12709:6;12660:18;:56::i;2262:229::-;2125:5;;-1:-1:-1;;;;;2125:5:26;2111:10;:19;2103:58;;;;-1:-1:-1;;;2103:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;2336:22:26;::::1;2328:63;;;::::0;-1:-1:-1;;;2328:63:26;;26462:2:34;2328:63:26::1;::::0;::::1;26444:21:34::0;26501:2;26481:18;;;26474:30;26540;26520:18;;;26513:58;26588:18;;2328:63:26::1;26260:352:34::0;2328:63:26::1;2397:16;2416:5:::0;;-1:-1:-1;;;;;2427:16:26;;::::1;-1:-1:-1::0;;;;;;2427:16:26;::::1;::::0;::::1;::::0;;2454:32:::1;::::0;2416:5;;;::::1;::::0;;;2454:32:::1;::::0;2397:16;2454:32:::1;2322:169;2262:229:::0;:::o;23538:706::-;23677:4;23791:17;23811:27;23831:6;;23811:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23811:19:26;;-1:-1:-1;;;23811:27:26:i;:::-;:92;;23902:1;23866:32;23890:6;;23873:24;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23873:24:26;;;;;;;;;;23866:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;23811:92;;;23855:1;23811:92;23791:112;;24003:20;24026:26;24046:5;;24026:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24026:19:26;;-1:-1:-1;;;24026:26:26:i;:::-;:90;;24115:1;24080:31;24104:5;;24087:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24087:23:26;;;;;;;;;;24080:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;24026:90;;;24069:1;24026:90;24003:113;;24170:9;24129:12;;1108:1:19;24129:37:26;;;;;;;:::i;:::-;;;;;;;:50;:110;;;;;24227:12;24183;;1147:1:19;24183:40:26;;;;;;;:::i;:::-;;;;;;;:56;24129:110;24122:117;23538:706;-1:-1:-1;;;;;;;;;23538:706:26:o;2911:231::-;2125:5;;-1:-1:-1;;;;;2125:5:26;2111:10;:19;2103:58;;;;-1:-1:-1;;;2103:58:26;;;;;;;:::i;:::-;2997:9:::1;2992:146;3012:21:::0;;::::1;2992:146;;;3055:18;:33;3074:10;;3085:1;3074:13;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;3055:33:::0;;-1:-1:-1;3055:33:26;::::1;::::0;;;;;;-1:-1:-1;3055:33:26;3048:40;;-1:-1:-1;;;;;;3048:40:26::1;::::0;;3117:10;;3128:1;3117:13;;::::1;;;;;:::i;:::-;;;;;;;3101:30;;;;;;;;;;3035:3;;2992:146;;;;2911:231:::0;;:::o;14544:210::-;14664:4;14683:66;14703:16;14713:6;14703:7;:16;:::i;:::-;14721:19;14742:6;14683:19;:66::i;2617:290::-;2125:5;;-1:-1:-1;;;;;2125:5:26;2111:10;:19;2103:58;;;;-1:-1:-1;;;2103:58:26;;;;;;;:::i;:::-;2742:9:::1;2737:166;2757:21:::0;;::::1;2737:166;;;2829:9;;2839:1;2829:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2793:18;:33;2812:10;;2823:1;2812:13;;;;;;;:::i;:::-;;;;;;;2793:33;;;;;;;;;;;;:48;;;;;-1:-1:-1::0;;;;;2793:48:26::1;;;;;-1:-1:-1::0;;;;;2793:48:26::1;;;;;;2883:9;;2893:1;2883:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2854:42:26::1;2868:10;;2879:1;2868:13;;;;;;;:::i;:::-;;;;;;;2854:42;;;;;;;;;;2780:3;;2737:166;;;;2617:290:::0;;;;:::o;17587:211::-;17706:4;17725:68;17745:16;17755:6;17745:7;:16;:::i;:::-;17763:21;17786:6;17725:19;:68::i;6855:541::-;6970:4;;;;7028:15;:33;7062:22;;;;:6;:22;:::i;:::-;7086:27;;;;:6;:27;:::i;:::-;7028:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6982:132;;;;;;7128:66;7150:11;7163:6;:30;;;7128:21;:66::i;:::-;7120:154;;;;-1:-1:-1;;;7120:154:26;;;;;;;:::i;:::-;7288:8;;;;7280:85;;;;;-1:-1:-1;;;7280:85:26;;27668:2:34;7280:85:26;;;27650:21:34;27687:18;;;27680:30;;;;27746:34;27726:18;;;27719:62;27817:34;27797:18;;;27790:62;27869:19;;7280:85:26;27466:428:34;7280:85:26;7378:13;;;;;;;;-1:-1:-1;;;6855:541:26;;;;:::o;7638:228::-;7746:4;7775:1;7766:6;:10;;;7758:53;;;;-1:-1:-1;;;7758:53:26;;28101:2:34;7758:53:26;;;28083:21:34;28140:2;28120:18;;;28113:30;28179:32;28159:18;;;28152:60;28229:18;;7758:53:26;27899:354:34;7758:53:26;7824:37;7842:10;7851:1;7842:6;:10;:::i;:::-;7854:6;7824:17;:37::i;8114:159::-;8219:4;8238:30;8251:3;8256;8261:6;8238:12;:30::i;13544:224::-;13684:4;13703:60;13717:7;13726;13735:19;13756:6;13703:13;:60::i;18074:195::-;18189:4;18208:56;18222:4;18228;18234:21;18257:6;18208:13;:56::i;15999:209::-;16117:4;16136:67;16155:16;:7;16165:6;16155:16;:::i;:::-;16173:21;16196:6;16136:18;:67::i;26163:3206::-;26270:12;2217:6;;26270:12;;-1:-1:-1;;;2217:6:26;;;;2216:7;2208:38;;;;-1:-1:-1;;;2208:38:26;;28616:2:34;2208:38:26;;;28598:21:34;28655:2;28635:18;;;28628:30;-1:-1:-1;;;28674:18:34;;;28667:48;28732:18;;2208:38:26;28414:342:34;2208:38:26;26393:16:::1;26412:29;26425:15:::0;::::1;26412:12;:29::i;:::-;26393:48:::0;-1:-1:-1;26490:90:26::1;26515:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;977:1:19;26515:64:26;;;;;;;:::i;:::-;;;;;;;26490:24;:90::i;:::-;26625:82;26646:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;1029:1:19;26646:60:26;;;;;;;:::i;:::-;;;;;;;26625:20;:82::i;:::-;26765:62;26775:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;26765:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;26796:30:26::1;::::0;::::1;;26765:9;:62::i;:::-;26750:144;;;::::0;-1:-1:-1;;;26750:144:26;;29513:2:34;26750:144:26::1;::::0;::::1;29495:21:34::0;29552:2;29532:18;;;29525:30;29591:34;29571:18;;;29564:62;-1:-1:-1;;;29642:18:34;;;29635:49;29701:19;;26750:144:26::1;29311:415:34::0;26750:144:26::1;27238:62;27251:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;27272:13;;::::0;::::1;:6:::0;:13:::1;:::i;:::-;27287:12;;::::0;::::1;:6:::0;:12:::1;:::i;27238:62::-;27230:98;;;::::0;-1:-1:-1;;;27230:98:26;;30460:2:34;27230:98:26::1;::::0;::::1;30442:21:34::0;30499:2;30479:18;;;30472:30;30538:25;30518:18;;;30511:53;30581:18;;27230:98:26::1;30258:347:34::0;27230:98:26::1;27396:244;27482:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;1195:1:19;::::0;27567::26::1;27538:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;27538:30:26::1;:::i;:::-;27482:87;;;;;;;:::i;:::-;27396:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27577:22:26::1;::::0;-1:-1:-1;;;27577:22:26::1;::::0;::::1;::::0;::::1;:::i;:::-;27607:27;;::::0;::::1;:6:::0;:27:::1;:::i;:::-;27396:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27396:21:26::1;::::0;-1:-1:-1;;;27396:244:26:i:1;:::-;27647:27;27699:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;27748:1;27719:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;27719:30:26::1;:::i;:::-;27699:51;;;;;;;:::i;:::-;;;;;;;27691:60;;27677:75;;;;;;;;:::i;:::-;27647:105:::0;-1:-1:-1;28016:39:26::1;27999:13;:56;;;;;;;;:::i;:::-;;;:112;;;;-1:-1:-1::0;28076:35:26::1;28059:13;:52;;;;;;;;:::i;:::-;;;27999:112;27998:138;;;-1:-1:-1::0;28122:14:26::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;27983:209;;;::::0;-1:-1:-1;;;27983:209:26;;31172:2:34;27983:209:26::1;::::0;::::1;31154:21:34::0;31211:2;31191:18;;;31184:30;31250:34;31230:18;;;31223:62;-1:-1:-1;;;31301:18:34;;;31294:38;31349:19;;27983:209:26::1;30970:404:34::0;27983:209:26::1;28423:34;28406:13;:51;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1::0;28461:14:26::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;28391:143;;;::::0;-1:-1:-1;;;28391:143:26;;31581:2:34;28391:143:26::1;::::0;::::1;31563:21:34::0;31620:2;31600:18;;;31593:30;31659:34;31639:18;;;31632:62;-1:-1:-1;;;31710:18:34;;;31703:41;31761:19;;28391:143:26::1;31379:407:34::0;28391:143:26::1;1337:1:19;28752:19:26;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:89;::::0;;-1:-1:-1;28752:89:26::1;:::i;:::-;28714:27;;::::0;::::1;:6:::0;:27:::1;:::i;:::-;:34;;:127;28706:177;;;::::0;-1:-1:-1;;;28706:177:26;;31993:2:34;28706:177:26::1;::::0;::::1;31975:21:34::0;32032:2;32012:18;;;32005:30;32071:34;32051:18;;;32044:62;-1:-1:-1;;;32122:18:34;;;32115:35;32167:19;;28706:177:26::1;31791:401:34::0;28706:177:26::1;-1:-1:-1::0;;;;;29002:26:26;::::1;;29029:12;;::::0;::::1;:6:::0;:12:::1;:::i;:::-;29043:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;29002:61;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28992:71:::0;-1:-1:-1;29126:29:26::1;29187:1;29158:19;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;:30;::::0;;-1:-1:-1;29158:30:26::1;:::i;:::-;29126:62:::0;-1:-1:-1;29213:19:26::1;;::::0;::::1;:6:::0;:19:::1;:::i;:::-;29233:21;29213:42;;;;;;;:::i;:::-;;;;;;;29194:61;;29330:34;;;26163:3206:::0;;;:::o;14071:206::-;14196:4;14215:57;14235:7;14244:19;14265:6;14215:19;:57::i;20388:223::-;20517:4;20536:70;20553:11;20566:31;20599:6;20536:16;:70::i;17105:209::-;17231:4;17250:59;17270:7;17279:21;17302:6;17250:19;:59::i;19757:229::-;19888:4;19907:74;19924:11;19937:35;19974:6;19907:16;:74::i;19203:222::-;19331:4;19350:70;19367:11;19380:31;19413:6;19350:16;:70::i;8277:1133::-;8422:4;;;;8484:15;:34;8519:22;;;;:6;:22;:::i;:::-;8543:27;;;;:6;:27;:::i;:::-;8572:9;8484:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8434:148;;;;;;8596:66;8618:11;8631:6;:30;;;8596:21;:66::i;:::-;8588:154;;;;-1:-1:-1;;;8588:154:26;;;;;;;:::i;:::-;8769:19;8756:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;8805:21:26;8792:9;:34;;;;;;;;:::i;:::-;;8756:70;8748:101;;;;-1:-1:-1;;;8748:101:26;;;;;;;:::i;:::-;8872:19;8859:9;:32;;;;;;;;:::i;:::-;;8855:551;;8909:8;;8901:91;;;;-1:-1:-1;;;8901:91:26;;34663:2:34;8901:91:26;;;34645:21:34;34702:2;34682:18;;;34675:30;34741:34;34721:18;;;34714:62;34812:34;34792:18;;;34785:62;-1:-1:-1;;;34863:19:34;;;34856:37;34910:19;;8901:91:26;34461:474:34;8901:91:26;9222:35;144:10:19;9222:3:26;:35;:::i;:::-;9211:7;:46;9204:53;;;;;;;8855:551;9286:8;;9278:92;;;;-1:-1:-1;;;9278:92:26;;35142:2:34;9278:92:26;;;35124:21:34;35181:2;35161:18;;;35154:30;35220:34;35200:18;;;35193:62;35291:34;35271:18;;;35264:62;-1:-1:-1;;;35342:19:34;;;35335:38;35390:19;;9278:92:26;34940:475:34;9278:92:26;-1:-1:-1;9385:14:26;;;-1:-1:-1;9378:21:26;;-1:-1:-1;9378:21:26;9414:1549;9575:4;;;;9637:15;:34;9672:22;;;;:6;:22;:::i;:::-;9696:27;;;;:6;:27;:::i;:::-;9725:9;9637:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9587:148;;;;;;9749:66;9771:11;9784:6;:30;;;9749:21;:66::i;:::-;9741:154;;;;-1:-1:-1;;;9741:154:26;;;;;;;:::i;:::-;9920:7;9909;:18;;9901:78;;;;-1:-1:-1;;;9901:78:26;;35622:2:34;9901:78:26;;;35604:21:34;35661:2;35641:18;;;35634:30;35700:34;35680:18;;;35673:62;-1:-1:-1;;;35751:18:34;;;35744:45;35806:19;;9901:78:26;35420:411:34;9901:78:26;10006:19;9993:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;10042:21:26;10029:9;:34;;;;;;;;:::i;:::-;;9993:70;9985:101;;;;-1:-1:-1;;;9985:101:26;;;;;;;:::i;:::-;10109:19;10096:9;:32;;;;;;;;:::i;:::-;;10092:867;;10146:3;10153:1;10146:8;10138:103;;;;-1:-1:-1;;;10138:103:26;;36038:2:34;10138:103:26;;;36020:21:34;36077:2;36057:18;;;36050:30;36116:34;36096:18;;;36089:62;36187:34;36167:18;;;36160:62;-1:-1:-1;;;36238:19:34;;;36231:49;36297:19;;10138:103:26;35836:486:34;10138:103:26;10257:3;10264:1;10257:8;10249:103;;;;-1:-1:-1;;;10249:103:26;;;;;;;:::i;:::-;10583:35;144:10:19;10583:3:26;:35;:::i;:::-;10572:7;:46;:96;;;;-1:-1:-1;10633:35:26;144:10:19;10633:3:26;:35;:::i;:::-;10622:7;:46;10572:96;10565:103;;;;;;;10092:867;10697:3;10704:1;10697:8;10689:104;;;;-1:-1:-1;;;10689:104:26;;37020:2:34;10689:104:26;;;37002:21:34;37059:2;37039:18;;;37032:30;37098:34;37078:18;;;37071:62;37169:34;37149:18;;;37142:62;-1:-1:-1;;;37220:19:34;;;37213:50;37280:19;;10689:104:26;36818:487:34;10689:104:26;10809:3;10816:1;10809:8;10801:104;;;;-1:-1:-1;;;10801:104:26;;;;;;;:::i;:::-;10931:3;10920:7;:14;:32;;;;-1:-1:-1;10938:14:26;;;;9414:1549;-1:-1:-1;;;;;;9414:1549:26:o;18273:606::-;18428:4;;;18509:15;:37;18547:22;;;;:6;:22;:::i;:::-;18571:27;;;;:6;:27;:::i;:::-;18600:9;18509:101;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18509:101:26;;;;;;;;;;;;:::i;:::-;18440:170;;;;18642:22;18620:11;:18;:44;18616:77;;18681:5;18674:12;;;;;;18616:77;18703:9;18698:160;18722:22;18718:1;:26;18698:160;;;18764:55;18783:11;18795:1;18783:14;;;;;;;;:::i;:::-;;;;;;;18799:16;18816:1;18799:19;;;;;;;;:::i;:::-;;;;;;;234::24;;;;;;;211;;;;;;;;;;:42;;119:139;18764:55:26;18759:93;;18838:5;18831:12;;;;;;;18759:93;18746:3;;18698:160;;;-1:-1:-1;18870:4:26;;18273:606;-1:-1:-1;;;;;;18273: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;25666:204:26:-;25756:12;;:62;;-1:-1:-1;;;25756:62:26;;912:1;25756:62;;;39154:25:34;39195:18;;;39188:34;;;-1:-1:-1;;;;;25756:12:26;;;;:24;;39127:18:34;;25756:62:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25741:124;;;;-1:-1:-1;;;25741:124:26;;39435:2:34;25741:124:26;;;39417:21:34;39474:2;39454:18;;;39447:30;39513:33;39493:18;;;39486:61;39564:18;;25741:124:26;39233:355:34;25741:124:26;25666:204;:::o;262:101:24:-;338:15;:20;;262:101::o;10967:1250:26:-;11113:4;;;;11175:15;:34;11210:22;;;;:6;:22;:::i;:::-;11234:27;;;;:6;:27;:::i;:::-;11263:9;11175:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11125:148;;;;;;11287:66;11309:11;11322:6;:30;;;11287:21;:66::i;:::-;11279:154;;;;-1:-1:-1;;;11279:154:26;;;;;;;:::i;:::-;11447:8;;11439:86;;;;-1:-1:-1;;;11439:86:26;;39795:2:34;11439:86:26;;;39777:21:34;39834:2;39814:18;;;39807:30;39873:34;39853:18;;;39846:62;39944:34;39924:18;;;39917:62;-1:-1:-1;;;39995:19:34;;;39988:32;40037:19;;11439:86:26;39593:469:34;11439:86:26;11552:19;11539:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;11588:21:26;11575:9;:34;;;;;;;;:::i;:::-;;11539:70;11531:101;;;;-1:-1:-1;;;11531:101:26;;;;;;;:::i;:::-;11655:19;11642:9;:32;;;;;;;;:::i;:::-;;11638:575;;11692:3;11699:1;11692:8;11684:103;;;;-1:-1:-1;;;11684:103:26;;;;;;;:::i;:::-;12017:35;144:10:19;12017:3:26;:35;:::i;11638:575::-;12081:3;12088:1;12081:8;12073:104;;;;-1:-1:-1;;;12073:104:26;;;;;;;:::i;:::-;12192:14;;;-1:-1:-1;12185:21:26;;-1:-1:-1;;12185:21:26;25036:210;25099:7;25133:28;;;:18;:28;;;;;;-1:-1:-1;;;;;25133:28:26;;25167:53;;;;-1:-1:-1;;;25167:53:26;;40269:2:34;25167:53:26;;;40251:21:34;40308:2;40288:18;;;40281:30;-1:-1:-1;;;40327:18:34;;;40320:48;40385:18;;25167:53:26;40067:342:34;25250:214:26;25344:12;;:66;;-1:-1:-1;;;25344:66:26;;:12;:66;;;39154:25:34;39195:18;;;39188:34;;;-1:-1:-1;;;;;25344:12:26;;;;:24;;39127:18:34;;25344:66:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25329:130;;;;-1:-1:-1;;;25329:130:26;;40616:2:34;25329:130:26;;;40598:21:34;40655:2;40635:18;;;40628:30;40694:34;40674:18;;;40667:62;-1:-1:-1;;;40745:18:34;;;40738:31;40786:19;;25329:130:26;40414:397:34;25468:194:26;25554:12;;;:58;;-1:-1:-1;;;25554:58:26;;;;;39154:25:34;;;;39195:18;;;39188:34;;;-1:-1:-1;;;;;25554:12:26;;:24;;39127:18:34;;25554:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25539:118;;;;-1:-1:-1;;;25539:118:26;;41018:2:34;25539:118:26;;;41000:21:34;41057:2;41037:18;;;41030:30;41096:31;41076:18;;;41069:59;41145:18;;25539:118:26;40816:353:34;3356:300:26;3474:4;3486:28;3525:12;1072:1:19;3525:44:26;;;;;;;;:::i;:::-;;;;;;;3517:53;;3486:84;;3583:68;3605:20;3627:23;3583:21;:68::i;24248:784::-;24421:14;;24445:410;24469:20;:27;24465:1;:31;24445:410;;;24591:28;24724:1;24622:98;24655:15;;24671:6;24655:56;24687:20;24708:1;24687:23;;;;;;;;:::i;:::-;;;;;;;24678:6;:32;;;;:::i;:::-;24655:56;;;;;;;:::i;:::-;24638:74;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24638:74:26;;;;;;;;;;24622:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:103;;24591:134;;24765:16;24782:1;24765:19;;;;;;;;:::i;:::-;;;;;;;24741:20;:43;24733:74;;;;-1:-1:-1;;;24733:74:26;;41994:2:34;24733:74:26;;;41976:21:34;42033:2;42013:18;;;42006:30;-1:-1:-1;;;42052:18:34;;;42045:48;42110:18;;24733:74:26;41792:342:34;24733:74:26;24825:20;24846:1;24825:23;;;;;;;;:::i;:::-;;;;;;;24815:33;;;;;:::i;:::-;;-1:-1:-1;;24498:3:26;;24445:410;;;-1:-1:-1;24959:32:26;;;24951:76;;;;-1:-1:-1;;;24951:76:26;;42341:2:34;24951:76:26;;;42323:21:34;42380:2;42360:18;;;42353:30;42419:33;42399:18;;;42392:61;42470:18;;24951:76:26;42139:355:34;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:34;14:172;-1:-1:-1;14:172:34: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:34;508:18;;495:32;-1:-1:-1;;;;;539:30:34;;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:34;;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:34;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:34:o;4168:112::-;4254:1;4247:5;4244:12;4234:40;;4270:1;4267;4260:12;4285:554;4416:6;4424;4477:2;4465:9;4456:7;4452:23;4448:32;4445:52;;;4493:1;4490;4483:12;4445:52;4532:9;4519:23;4551:42;4587:5;4551:42;:::i;:::-;4612:5;-1:-1:-1;4668:2:34;4653:18;;4640:32;-1:-1:-1;;;;;4684:30:34;;4681:50;;;4727:1;4724;4717:12;4844:114;4928:4;4921:5;4917:16;4910:5;4907:27;4897:55;;4948:1;4945;4938:12;4963:520;5073:6;5081;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;5189:9;5176:23;5208:29;5231:5;5208:29;:::i;5488:127::-;5549:10;5544:3;5540:20;5537:1;5530:31;5580:4;5577:1;5570:15;5604:4;5601:1;5594:15;5620:255;5692:2;5686:9;5734:6;5722:19;;-1:-1:-1;;;;;5756:34:34;;5792:22;;;5753:62;5750:88;;;5818:18;;:::i;:::-;5854:2;5847:22;5620:255;:::o;5880:275::-;5951:2;5945:9;6016:2;5997:13;;-1:-1:-1;;5993:27:34;5981:40;;-1:-1:-1;;;;;6036:34:34;;6072:22;;;6033:62;6030:88;;;6098:18;;:::i;:::-;6134:2;6127:22;5880:275;;-1:-1:-1;5880:275:34:o;6160:182::-;6219:4;-1:-1:-1;;;;;6244:6:34;6241:30;6238:56;;;6274:18;;:::i;:::-;-1:-1:-1;6319:1:34;6315:14;6331:4;6311:25;;6160:182::o;6347:187::-;6396:4;-1:-1:-1;;;;;6421:6:34;6418:30;6415:56;;;6451:18;;:::i;:::-;-1:-1:-1;6517:2:34;6496:15;-1:-1:-1;;6492:29:34;6523:4;6488:40;;6347:187::o;6539:1793::-;6686:6;6694;6747:2;6735:9;6726:7;6722:23;6718:32;6715:52;;;6763:1;6760;6753:12;6715:52;6803:9;6790:23;-1:-1:-1;;;;;6828:6:34;6825:30;6822:50;;;6868:1;6865;6858:12;6822:50;6891:22;;6944:4;6936:13;;6932:27;-1:-1:-1;6922:55:34;;6973:1;6970;6963:12;6922:55;7013:2;7000:16;7036:63;7052:46;7091:6;7052:46;:::i;:::-;7036:63;:::i;:::-;7121:3;7145:6;7140:3;7133:19;7177:4;7172:3;7168:14;7161:21;;7234:4;7224:6;7221:1;7217:14;7213:2;7209:23;7205:34;7191:48;;7262:7;7254:6;7251:19;7248:39;;;7283:1;7280;7273:12;7248:39;7315:4;7311:2;7307:13;7329:749;7345:6;7340:3;7337:15;7329:749;;;7433:3;7420:17;-1:-1:-1;;;;;7456:11:34;7453:35;7450:55;;;7501:1;7498;7491:12;7450:55;7528:20;;7583:2;7575:11;;7571:25;-1:-1:-1;7561:53:34;;7610:1;7607;7600:12;7561:53;7664:4;7660:2;7656:13;7643:27;7698:55;7714:38;7743:8;7714:38;:::i;7698:55::-;7766:25;;;7810:39;7818:17;;;7810:39;7807:52;-1:-1:-1;7804:72:34;;;7872:1;7869;7862:12;7804:72;7935:8;7930:2;7926;7922:11;7915:4;7906:7;7902:18;7889:55;7999:1;7992:4;7981:8;7972:7;7968:22;7964:33;7957:44;8026:7;8021:3;8014:20;;;;8063:4;8058:3;8054:14;8047:21;;7371:4;7366:3;7362:14;7355:21;;7329:749;;;-1:-1:-1;8097:5:34;-1:-1:-1;;;;8155:4:34;8140:20;;8127:34;-1:-1:-1;;;;;8173:32:34;;8170:52;;;8218:1;8215;8208:12;8519:623;8640:6;8648;8656;8709:2;8697:9;8688:7;8684:23;8680:32;8677:52;;;8725:1;8722;8715:12;8677:52;8770:23;;;-1:-1:-1;8890:2:34;8875:18;;8862:32;;-1:-1:-1;8971:2:34;8956:18;;8943:32;-1:-1:-1;;;;;8987:30:34;;8984:50;;;9030:1;9027;9020:12;8984:50;9053:83;9128:7;9119:6;9108:9;9104:22;9053:83;:::i;:::-;9043:93;;;8519:623;;;;;:::o;9147:389::-;9250:6;9303:2;9291:9;9282:7;9278:23;9274:32;9271:52;;;9319:1;9316;9309:12;9271:52;9359:9;9346:23;-1:-1:-1;;;;;9384:6:34;9381:30;9378:50;;;9424:1;9421;9414:12;9378:50;9447:83;9522:7;9513:6;9502:9;9498:22;9447:83;:::i;9541:492::-;9726:2;9715:9;9708:21;9801:1;9797;9792:3;9788:11;9784:19;9775:6;9769:13;9765:39;9760:2;9749:9;9745:18;9738:67;9859:2;9851:6;9847:15;9841:22;9836:2;9825:9;9821:18;9814:50;9689:4;9911:2;9903:6;9899:15;9893:22;9953:4;9946;9935:9;9931:20;9924:34;9975:52;10022:3;10011:9;10007:19;9993:12;9975:52;:::i;10038:657::-;10155:6;10163;10171;10224:2;10212:9;10203:7;10199:23;10195:32;10192:52;;;10240:1;10237;10230:12;10192:52;10279:9;10266:23;10298:29;10321:5;10298:29;:::i;:::-;10346:5;-1:-1:-1;10403:2:34;10388:18;;10375:32;10416:31;10375:32;10416:31;:::i;:::-;10466:7;-1:-1:-1;10524:2:34;10509:18;;10496:32;-1:-1:-1;;;;;10540:30:34;;10537:50;;;10583:1;10580;10573:12;10700:180;10759:6;10812:2;10800:9;10791:7;10787:23;10783:32;10780:52;;;10828:1;10825;10818:12;10780:52;-1:-1:-1;10851:23:34;;10700:180;-1:-1:-1;10700:180:34:o;11093:367::-;11156:8;11166:6;11220:3;11213:4;11205:6;11201:17;11197:27;11187:55;;11238:1;11235;11228:12;11187:55;-1:-1:-1;11261:20:34;;-1:-1:-1;;;;;11293:30:34;;11290:50;;;11336:1;11333;11326:12;11290:50;11373:4;11365:6;11361:17;11349:29;;11433:3;11426:4;11416:6;11413:1;11409:14;11401:6;11397:27;11393:38;11390:47;11387:67;;;11450:1;11447;11440:12;11387:67;11093:367;;;;;:::o;11465:348::-;11517:8;11527:6;11581:3;11574:4;11566:6;11562:17;11558:27;11548:55;;11599:1;11596;11589:12;11548:55;-1:-1:-1;11622:20:34;;-1:-1:-1;;;;;11654:30:34;;11651:50;;;11697:1;11694;11687:12;11651:50;11734:4;11726:6;11722:17;11710:29;;11786:3;11779:4;11770:6;11762;11758:19;11754:30;11751:39;11748:59;;;11803:1;11800;11793:12;11818:1047;11946:6;11954;11962;11970;11978;11986;12039:2;12027:9;12018:7;12014:23;12010:32;12007:52;;;12055:1;12052;12045:12;12007:52;12095:9;12082:23;-1:-1:-1;;;;;12120:6:34;12117:30;12114:50;;;12160:1;12157;12150:12;12114:50;12199:70;12261:7;12252:6;12241:9;12237:22;12199:70;:::i;:::-;12288:8;;-1:-1:-1;12173:96:34;-1:-1:-1;;12376:2:34;12361:18;;12348:32;-1:-1:-1;;;;;12392:32:34;;12389:52;;;12437:1;12434;12427:12;12389:52;12476:61;12529:7;12518:8;12507:9;12503:24;12476:61;:::i;:::-;12556:8;;-1:-1:-1;12450:87:34;-1:-1:-1;;12644:2:34;12629:18;;12616:32;-1:-1:-1;;;;;12660:32:34;;12657:52;;;12705:1;12702;12695:12;12657:52;12744:61;12797:7;12786:8;12775:9;12771:24;12744:61;:::i;:::-;11818:1047;;;;-1:-1:-1;11818:1047:34;;-1:-1:-1;11818:1047:34;;12824:8;;11818:1047;-1:-1:-1;;;11818:1047:34:o;12870:437::-;12956:6;12964;13017:2;13005:9;12996:7;12992:23;12988:32;12985:52;;;13033:1;13030;13023:12;12985:52;13073:9;13060:23;-1:-1:-1;;;;;13098:6:34;13095:30;13092:50;;;13138:1;13135;13128:12;13092:50;13177:70;13239:7;13230:6;13219:9;13215:22;13177:70;:::i;:::-;13266:8;;13151:96;;-1:-1:-1;12870:437:34;-1:-1:-1;;;;12870:437:34:o;13312:768::-;13434:6;13442;13450;13458;13511:2;13499:9;13490:7;13486:23;13482:32;13479:52;;;13527:1;13524;13517:12;13479:52;13567:9;13554:23;-1:-1:-1;;;;;13592:6:34;13589:30;13586:50;;;13632:1;13629;13622:12;13586:50;13671:70;13733:7;13724:6;13713:9;13709:22;13671:70;:::i;:::-;13760:8;;-1:-1:-1;13645:96:34;-1:-1:-1;;13848:2:34;13833:18;;13820:32;-1:-1:-1;;;;;13864:32:34;;13861:52;;;13909:1;13906;13899:12;13861:52;13948:72;14012:7;14001:8;13990:9;13986:24;13948:72;:::i;:::-;13312:768;;;;-1:-1:-1;14039:8:34;-1:-1:-1;;;;13312:768:34:o;14579:127::-;14640:10;14635:3;14631:20;14628:1;14621:31;14671:4;14668:1;14661:15;14695:4;14692:1;14685:15;14711:125;14776:9;;;14797:10;;;14794:36;;;14810:18;;:::i;14841:350::-;15043:2;15025:21;;;15082:2;15062:18;;;15055:30;15121:28;15116:2;15101:18;;15094:56;15182:2;15167:18;;14841:350::o;15601:521::-;15678:4;15684:6;15744:11;15731:25;15838:2;15834:7;15823:8;15807:14;15803:29;15799:43;15779:18;15775:68;15765:96;;15857:1;15854;15847:12;15765:96;15884:33;;15936:20;;;-1:-1:-1;;;;;;15968:30:34;;15965:50;;;16011:1;16008;16001:12;15965:50;16044:4;16032:17;;-1:-1:-1;16075:14:34;16071:27;;;16061:38;;16058:58;;;16112:1;16109;16102:12;16127:545;16220:4;16226:6;16286:11;16273:25;16380:2;16376:7;16365:8;16349:14;16345:29;16341:43;16321:18;16317:68;16307:96;;16399:1;16396;16389:12;16307:96;16426:33;;16478:20;;;-1:-1:-1;;;;;;16510:30:34;;16507:50;;;16553:1;16550;16543:12;16507:50;16586:4;16574:17;;-1:-1:-1;16637:1:34;16633:14;;;16617;16613:35;16603:46;;16600:66;;;16662:1;16659;16652:12;16677:266;16765:6;16760:3;16753:19;16817:6;16810:5;16803:4;16798:3;16794:14;16781:43;-1:-1:-1;16869:1:34;16844:16;;;16862:4;16840:27;;;16833:38;;;;16925:2;16904:15;;;-1:-1:-1;;16900:29:34;16891:39;;;16887:50;;16677:266::o;16948:311::-;17036:19;;;17018:3;-1:-1:-1;;;;;17067:31:34;;17064:51;;;17111:1;17108;17101:12;17064:51;17147:6;17144:1;17140:14;17199:8;17192:5;17185:4;17180:3;17176:14;17163:45;17228:18;;;;17248:4;17224:29;;16948:311;-1:-1:-1;;;16948:311:34:o;17264:483::-;17517:2;17506:9;17499:21;17480:4;17543:61;17600:2;17589:9;17585:18;17577:6;17569;17543:61;:::i;:::-;17652:9;17644:6;17640:22;17635:2;17624:9;17620:18;17613:50;17680:61;17734:6;17726;17718;17680:61;:::i;17752:514::-;17805:5;17858:3;17851:4;17843:6;17839:17;17835:27;17825:55;;17876:1;17873;17866:12;17825:55;17909:6;17903:13;17948:4;17940:6;17936:17;17977:1;17998:53;18014:36;18043:6;18014:36;:::i;17998:53::-;17987:64;;18076:6;18067:7;18060:23;18116:3;18107:6;18102:3;18098:16;18095:25;18092:45;;;18133:1;18130;18123:12;18092:45;18177:6;18172:3;18165:4;18156:7;18152:18;18146:38;18233:1;18204:20;;;18226:4;18200:31;18193:42;;;;-1:-1:-1;18208:7:34;17752:514;-1:-1:-1;;;17752:514:34:o;18271:553::-;18368:6;18376;18429:2;18417:9;18408:7;18404:23;18400:32;18397:52;;;18445:1;18442;18435:12;18397:52;18478:9;18472:16;-1:-1:-1;;;;;18503:6:34;18500:30;18497:50;;;18543:1;18540;18533:12;18497:50;18566:60;18618:7;18609:6;18598:9;18594:22;18566:60;:::i;:::-;18556:70;;;18672:2;18661:9;18657:18;18651:25;-1:-1:-1;;;;;18691:8:34;18688:32;18685:52;;;18733:1;18730;18723:12;18685:52;18756:62;18810:7;18799:8;18788:9;18784:24;18756:62;:::i;18829:307::-;19006:2;18995:9;18988:21;18969:4;19026:45;19067:2;19056:9;19052:18;19044:6;19026:45;:::i;:::-;19018:53;;19121:6;19114:14;19107:22;19102:2;19091:9;19087:18;19080:50;18829:307;;;;;:::o;19141:1972::-;19243:6;19296:2;19284:9;19275:7;19271:23;19267:32;19264:52;;;19312:1;19309;19302:12;19264:52;19345:9;19339:16;-1:-1:-1;;;;;19370:6:34;19367:30;19364:50;;;19410:1;19407;19400:12;19364:50;19433:22;;19489:6;19471:16;;;19467:29;19464:49;;;19509:1;19506;19499:12;19464:49;19535:22;;:::i;:::-;19588:2;19582:9;-1:-1:-1;;;;;19606:8:34;19603:32;19600:52;;;19648:1;19645;19638:12;19600:52;19675:55;19722:7;19711:8;19707:2;19703:17;19675:55;:::i;:::-;19668:5;19661:70;;19770:2;19766;19762:11;19756:18;-1:-1:-1;;;;;19789:8:34;19786:32;19783:52;;;19831:1;19828;19821:12;19783:52;19867:55;19914:7;19903:8;19899:2;19895:17;19867:55;:::i;:::-;19862:2;19855:5;19851:14;19844:79;;19962:2;19958;19954:11;19948:18;-1:-1:-1;;;;;19981:8:34;19978:32;19975:52;;;20023:1;20020;20013:12;19975:52;20059:55;20106:7;20095:8;20091:2;20087:17;20059:55;:::i;:::-;20054:2;20047:5;20043:14;20036:79;;20154:2;20150;20146:11;20140:18;-1:-1:-1;;;;;20173:8:34;20170:32;20167:52;;;20215:1;20212;20205:12;20167:52;20251:55;20298:7;20287:8;20283:2;20279:17;20251:55;:::i;:::-;20246:2;20239:5;20235:14;20228:79;;20346:3;20342:2;20338:12;20332:19;-1:-1:-1;;;;;20366:8:34;20363:32;20360:52;;;20408:1;20405;20398:12;20360:52;20445:55;20492:7;20481:8;20477:2;20473:17;20445:55;:::i;:::-;20439:3;20432:5;20428:15;20421:80;;20540:3;20536:2;20532:12;20526:19;-1:-1:-1;;;;;20560:8:34;20557:32;20554:52;;;20602:1;20599;20592:12;20554:52;20639:55;20686:7;20675:8;20671:2;20667:17;20639:55;:::i;:::-;20633:3;20626:5;20622:15;20615:80;;20734:3;20730:2;20726:12;20720:19;-1:-1:-1;;;;;20754:8:34;20751:32;20748:52;;;20796:1;20793;20786:12;20748:52;20833:55;20880:7;20869:8;20865:2;20861:17;20833:55;:::i;:::-;20827:3;20820:5;20816:15;20809:80;;20928:3;20924:2;20920:12;20914:19;-1:-1:-1;;;;;20948:8:34;20945:32;20942:52;;;20990:1;20987;20980:12;20942:52;21027:55;21074:7;21063:8;21059:2;21055:17;21027:55;:::i;:::-;21021:3;21010:15;;21003:80;-1:-1:-1;21014:5:34;19141:1972;-1:-1:-1;;;;19141:1972:34:o;21118:668::-;21251:6;21259;21267;21275;21328:3;21316:9;21307:7;21303:23;21299:33;21296:53;;;21345:1;21342;21335:12;21296:53;21390:16;;21475:2;21460:18;;21454:25;21390:16;;-1:-1:-1;21510:1:34;21498:14;;21488:42;;21526:1;21523;21516:12;21488:42;21622:2;21607:18;;21601:25;21697:2;21682:18;;21676:25;21549:7;;-1:-1:-1;21601:25:34;-1:-1:-1;21710:44:34;21676:25;21710:44;:::i;:::-;21118:668;;;;-1:-1:-1;21118:668:34;;-1:-1:-1;;21118:668:34:o;21791:127::-;21852:10;21847:3;21843:20;21840:1;21833:31;21883:4;21880:1;21873:15;21907:4;21904:1;21897:15;21923:148;22011:4;21990:12;;;22004;;;21986:31;;22029:13;;22026:39;;;22045:18;;:::i;22076:490::-;22160:6;22168;22176;22229:2;22217:9;22208:7;22204:23;22200:32;22197:52;;;22245:1;22242;22235:12;22197:52;22290:16;;22375:2;22360:18;;22354:25;22290:16;;-1:-1:-1;22388:31:34;22354:25;22388:31;:::i;:::-;22490:2;22475:18;;22469:25;22438:7;;-1:-1:-1;22503:31:34;22469:25;22503:31;:::i;:::-;22553:7;22543:17;;;22076:490;;;;;:::o;22571:479::-;22773:2;22755:21;;;22812:2;22792:18;;;22785:30;22851:34;22846:2;22831:18;;22824:62;22922:34;22917:2;22902:18;;22895:62;-1:-1:-1;;;22988:3:34;22973:19;;22966:42;23040:3;23025:19;;22571:479::o;23488:335::-;23567:6;23620:2;23608:9;23599:7;23595:23;23591:32;23588:52;;;23636:1;23633;23626:12;23588:52;23669:9;23663:16;-1:-1:-1;;;;;23694:6:34;23691:30;23688:50;;;23734:1;23731;23724:12;23688:50;23757:60;23809:7;23800:6;23789:9;23785:22;23757:60;:::i;23828:226::-;23983:2;23972:9;23965:21;23946:4;24003:45;24044:2;24033:9;24029:18;24021:6;24003:45;:::i;24059:577::-;24157:6;24165;24173;24226:2;24214:9;24205:7;24201:23;24197:32;24194:52;;;24242:1;24239;24232:12;24194:52;24274:9;24268:16;24293:31;24318:5;24293:31;:::i;:::-;24414:2;24399:18;;24393:25;24488:2;24473:18;;24467:25;24343:5;;-1:-1:-1;24393:25:34;-1:-1:-1;;;;;;24504:30:34;;24501:50;;;24547:1;24544;24537:12;24501:50;24570:60;24622:7;24613:6;24602:9;24598:22;24570:60;:::i;26025:230::-;26095:6;26148:2;26136:9;26127:7;26123:23;26119:32;26116:52;;;26164:1;26161;26154:12;26116:52;-1:-1:-1;26209:16:34;;26025:230;-1:-1:-1;26025:230:34:o;26617:273::-;26802:6;26794;26789:3;26776:33;26758:3;26828:16;;26853:13;;;26828:16;26617:273;-1:-1:-1;26617:273:34:o;26895:301::-;27024:3;27062:6;27056:13;27108:6;27101:4;27093:6;27089:17;27084:3;27078:37;27170:1;27134:16;;27159:13;;;-1:-1:-1;27134:16:34;26895:301;-1:-1:-1;26895:301:34:o;27201:127::-;27262:10;27257:3;27253:20;27250:1;27243:31;27293:4;27290:1;27283:15;27317:4;27314:1;27307:15;27333:128;27400:9;;;27421:11;;;27418:37;;;27435:18;;:::i;28258:151::-;28348:4;28341:12;;;28327;;;28323:31;;28366:14;;28363:40;;;28383:18;;:::i;30610:355::-;30731:9;30742;30784:8;30772:10;30769:24;30766:44;;;30806:1;30803;30796:12;30766:44;30835:6;30825:8;30822:20;30819:40;;;30855:1;30852;30845:12;30819:40;-1:-1:-1;;30897:1:34;30893:18;;;30881:31;;30934:25;;;;;-1:-1:-1;30610:355:34:o;32677:245::-;32744:6;32797:2;32785:9;32776:7;32772:23;32768:32;32765:52;;;32813:1;32810;32803:12;32765:52;32845:9;32839:16;32864:28;32886:5;32864:28;:::i;32927:721::-;33221:2;33210:9;33203:21;33184:4;33247:61;33304:2;33293:9;33289:18;33281:6;33273;33247:61;:::i;:::-;33356:9;33348:6;33344:22;33339:2;33328:9;33324:18;33317:50;33384:61;33438:6;33430;33422;33384:61;:::i;:::-;33376:69;;;33475:2;33467:6;33464:14;33454:145;;33521:10;33516:3;33512:20;33509:1;33502:31;33556:4;33553:1;33546:15;33584:4;33581:1;33574:15;33454:145;33635:6;33630:2;33619:9;33615:18;33608:34;32927:721;;;;;;;;:::o;33653:456::-;33741:6;33749;33757;33810:2;33798:9;33789:7;33785:23;33781:32;33778:52;;;33826:1;33823;33816:12;33778:52;-1:-1:-1;;33871:16:34;;33977:2;33962:18;;33956:25;34073:2;34058:18;;;34052:25;33871:16;;33956:25;;-1:-1:-1;34052:25:34;33653:456;-1:-1:-1;33653:456:34:o;34114:342::-;34316:2;34298:21;;;34355:2;34335:18;;;34328:30;-1:-1:-1;;;34389:2:34;34374:18;;34367:48;34447:2;34432:18;;34114:342::o;36327:486::-;36529:2;36511:21;;;36568:2;36548:18;;;36541:30;36607:34;36602:2;36587:18;;36580:62;36678:34;36673:2;36658:18;;36651:62;-1:-1:-1;;;36744:3:34;36729:19;;36722:49;36803:3;36788:19;;36327:486::o;37310:487::-;37512:2;37494:21;;;37551:2;37531:18;;;37524:30;37590:34;37585:2;37570:18;;37563:62;37661:34;37656:2;37641:18;;37634:62;-1:-1:-1;;;37727:3:34;37712:19;;37705:50;37787:3;37772:19;;37310:487::o;37802:1173::-;37916:6;37924;37977:2;37965:9;37956:7;37952:23;37948:32;37945:52;;;37993:1;37990;37983:12;37945:52;38026:9;38020:16;-1:-1:-1;;;;;38051:6:34;38048:30;38045:50;;;38091:1;38088;38081:12;38045:50;38114:22;;38167:4;38159:13;;38155:27;-1:-1:-1;38145:55:34;;38196:1;38193;38186:12;38145:55;38229:2;38223:9;38252:63;38268:46;38307:6;38268:46;:::i;38252:63::-;38337:3;38361:6;38356:3;38349:19;38393:4;38388:3;38384:14;38377:21;;38450:4;38440:6;38437:1;38433:14;38429:2;38425:23;38421:34;38407:48;;38478:7;38470:6;38467:19;38464:39;;;38499:1;38496;38489:12;38464:39;38531:4;38527:2;38523:13;38545:308;38561:6;38556:3;38553:15;38545:308;;;38642:3;38636:10;-1:-1:-1;;;;;38665:11:34;38662:35;38659:55;;;38710:1;38707;38700:12;38659:55;38739:69;38800:7;38793:4;38779:11;38775:2;38771:20;38767:31;38739:69;:::i;:::-;38727:82;;-1:-1:-1;38838:4:34;38829:14;;;;38578;38545:308;;;-1:-1:-1;38939:4:34;38924:20;;;;38918:27;38872:5;;38918:27;;-1:-1:-1;;;;;;37802:1173:34:o;41174:331::-;41279:9;41290;41332:8;41320:10;41317:24;41314:44;;;41354:1;41351;41344:12;41314:44;41383:6;41373:8;41370:20;41367:40;;;41403:1;41400;41393:12;41367:40;-1:-1:-1;;41429:23:34;;;41474:25;;;;;-1:-1:-1;41174:331:34:o",
937
+ linkReferences: {
938
+ "src/InputsExtractor.sol": {
939
+ InputsExtractor: [
940
+ { start: 1869, length: 20 },
941
+ { start: 2033, length: 20 },
942
+ { start: 2156, length: 20 },
943
+ { start: 2564, length: 20 },
944
+ { start: 2925, length: 20 },
945
+ { start: 3089, length: 20 },
946
+ { start: 3227, length: 20 },
947
+ { start: 3849, length: 20 },
948
+ { start: 5229, length: 20 },
949
+ { start: 7201, length: 20 },
950
+ { start: 7804, length: 20 },
951
+ { start: 8633, length: 20 },
952
+ { start: 9175, length: 20 }
953
+ ]
954
+ }
955
+ }
956
+ },
957
+ methodIdentifiers: {
958
+ "CERTIFICATE_REGISTRY_ID()": "41a0e2c2",
959
+ "CIRCUIT_REGISTRY_ID()": "6c40d5d6",
960
+ "SANCTIONS_REGISTRY_ID()": "652ba33d",
961
+ "addVerifiers(bytes32[],address[])": "a6df2c01",
962
+ "admin()": "f851a440",
963
+ "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "653cfd81",
964
+ "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "59545f45",
965
+ "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": "1e26a9dc",
966
+ "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "37889655",
967
+ "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "54dbe4d1",
968
+ "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "bf73c26c",
969
+ "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "aa1346ea",
970
+ "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "62067c82",
971
+ "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "c0940ebd",
972
+ "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "04951b86",
973
+ "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "704876d6",
974
+ "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "921076c7",
975
+ "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "deb7c059",
976
+ "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "c4560786",
977
+ "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "0b90581b",
978
+ "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "d3f6ffff",
979
+ "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "4c127428",
980
+ "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "a88f1cef",
981
+ "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "e718bc32",
982
+ "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "46bd0a16",
983
+ "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "cfd9464a",
984
+ "isFaceMatchVerified(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "2e27242c",
985
+ "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "ec46f774",
986
+ "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "3a86bd3d",
987
+ "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "f87e19b1",
988
+ "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "e420e354",
989
+ "paused()": "5c975abb",
990
+ "removeVerifiers(bytes32[])": "8d6937b8",
991
+ "rootRegistry()": "b96b161c",
992
+ "setPaused(bool)": "16c38b3c",
993
+ "transferAdmin(address)": "75829def",
994
+ "updateRootRegistry(address)": "18677f2a",
995
+ "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": "d7bf616a",
996
+ "verifyScopes(bytes32[],string,string)": "847755e3",
997
+ "vkeyHashToVerifier(bytes32)": "8163f231"
998
+ },
999
+ 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":"enum FaceMatchMode","name":"faceMatchMode","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":"isFaceMatchVerified","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":"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"}},"isFaceMatchVerified(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"params":{"faceMatchMode":"The FaceMatch mode expected to be used in the verification","params":"The proof verification parameters"},"returns":{"_0":"True if the proof is tied to a valid FaceMatch verification, 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"},"isFaceMatchVerified(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))":{"notice":"Checks if the proof is tied to a FaceMatch verification"},"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":"0xedfdbd23c885320a6400c29a47cfd2e359fa67feaa7e72eb576a36ab47757126","license":"Apache-2.0","urls":["bzz-raw://752ce1099ed498206732837c776e1f364cb89a18356601f92c8c23c5b176a2cb","dweb:/ipfs/QmdnGyvFCHvtm2FVAAYUoTRRXUC1nLWXjz3pkHpAnM9rfn"]},"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":"0xfcf678bb8fead1820159845e47c2efefdca16452ab2f30b1704efc13253512eb","license":"Apache-2.0","urls":["bzz-raw://aa83383e296a2b748c093b017e12719aeb1897ca3a677f3def76929951440111","dweb:/ipfs/QmYSCdnm5EuQwrF2mnpRVtTLg4uPH1uUJQxYKyJtjEwq3y"]},"src/StringUtils.sol":{"keccak256":"0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1","license":"Apache-2.0","urls":["bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342","dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"]},"src/Types.sol":{"keccak256":"0x96820d882e9fbdfe5b8d28992a59c4df49733c39fa811282f42b6550fa0d4fe9","license":"Apache-2.0","urls":["bzz-raw://c1cc625bfa759185e433b71f5fc22eef47236f57d217354d180beef91077dcc1","dweb:/ipfs/QmXh6MDGjMx7AL4FjstCEtqNLHp9sCExw5CEzFpD8orYh2"]},"src/ZKPassportVerifier.sol":{"keccak256":"0xcb976ea606732493b4497f5f12e2c6296f397735b1286a8bb1477e7cde195e43","license":"Apache-2.0","urls":["bzz-raw://d186a469d3e30743ddbb719a1ecf71c9787359b2a8287e86c9ac294a17e6db38","dweb:/ipfs/QmSxzqPo33R3EhPzm8fF4k4ShUSp58Nr7qzBVadHWBXxMr"]},"src/ultra-honk-verifiers/OuterCount4.sol":{"keccak256":"0xc0b2358f1cb49d10ab783b6ccf321e8bde6eb8ce70efe325fdf49987f1688b94","license":"Apache-2.0","urls":["bzz-raw://c5ddd3b3c3e2522e766c5ab95d2559ce4e79fe54e9aeb50b1c995ad1d8ed18ee","dweb:/ipfs/Qmcu7WhWMk3TPxb3HuwEPiXF95F6eD8KmJ12RXxFBdCYgM"]}},"version":1}',
1000
+ metadata: {
1001
+ compiler: { version: "0.8.29+commit.ab55807c" },
1002
+ language: "Solidity",
1003
+ output: {
1004
+ abi: [
1005
+ {
1006
+ inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1007
+ stateMutability: "nonpayable",
1008
+ type: "constructor"
1009
+ },
1010
+ {
1011
+ inputs: [
1012
+ { internalType: "address", name: "oldAdmin", type: "address", indexed: true },
1013
+ { internalType: "address", name: "newAdmin", type: "address", indexed: true }
1014
+ ],
1015
+ type: "event",
1016
+ name: "AdminUpdated",
1017
+ anonymous: false
1018
+ },
1019
+ {
1020
+ inputs: [
1021
+ {
1022
+ internalType: "bytes32",
1023
+ name: "certificateRegistryRoot",
1024
+ type: "bytes32",
1025
+ indexed: true
1026
+ }
1027
+ ],
1028
+ type: "event",
1029
+ name: "CertificateRegistryRootAdded",
1030
+ anonymous: false
1031
+ },
1032
+ {
1033
+ inputs: [
1034
+ {
1035
+ internalType: "bytes32",
1036
+ name: "certificateRegistryRoot",
1037
+ type: "bytes32",
1038
+ indexed: true
1039
+ }
1040
+ ],
1041
+ type: "event",
1042
+ name: "CertificateRegistryRootRemoved",
1043
+ anonymous: false
1044
+ },
1045
+ {
1046
+ inputs: [
1047
+ { internalType: "bool", name: "paused", type: "bool", indexed: false }
1048
+ ],
1049
+ type: "event",
1050
+ name: "PausedStatusChanged",
1051
+ anonymous: false
1052
+ },
1053
+ {
1054
+ inputs: [
1055
+ {
1056
+ internalType: "bytes32",
1057
+ name: "_sanctionsTreesRoot",
1058
+ type: "bytes32",
1059
+ indexed: true
1060
+ }
1061
+ ],
1062
+ type: "event",
1063
+ name: "SanctionsTreesRootUpdates",
1064
+ anonymous: false
1065
+ },
1066
+ {
1067
+ inputs: [
1068
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true },
1069
+ { internalType: "address", name: "verifier", type: "address", indexed: true }
1070
+ ],
1071
+ type: "event",
1072
+ name: "VerifierAdded",
1073
+ anonymous: false
1074
+ },
1075
+ {
1076
+ inputs: [
1077
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true }
1078
+ ],
1079
+ type: "event",
1080
+ name: "VerifierRemoved",
1081
+ anonymous: false
1082
+ },
1083
+ {
1084
+ inputs: [
1085
+ { internalType: "address", name: "admin", type: "address", indexed: true },
1086
+ { internalType: "uint256", name: "timestamp", type: "uint256", indexed: false }
1087
+ ],
1088
+ type: "event",
1089
+ name: "ZKPassportVerifierDeployed",
1090
+ anonymous: false
1091
+ },
1092
+ {
1093
+ inputs: [],
1094
+ stateMutability: "view",
1095
+ type: "function",
1096
+ name: "CERTIFICATE_REGISTRY_ID",
1097
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1098
+ },
1099
+ {
1100
+ inputs: [],
1101
+ stateMutability: "view",
1102
+ type: "function",
1103
+ name: "CIRCUIT_REGISTRY_ID",
1104
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1105
+ },
1106
+ {
1107
+ inputs: [],
1108
+ stateMutability: "view",
1109
+ type: "function",
1110
+ name: "SANCTIONS_REGISTRY_ID",
1111
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1112
+ },
1113
+ {
1114
+ inputs: [
1115
+ { internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" },
1116
+ { internalType: "address[]", name: "verifiers", type: "address[]" }
1117
+ ],
1118
+ stateMutability: "nonpayable",
1119
+ type: "function",
1120
+ name: "addVerifiers"
1121
+ },
1122
+ {
1123
+ inputs: [],
1124
+ stateMutability: "view",
1125
+ type: "function",
1126
+ name: "admin",
1127
+ outputs: [{ internalType: "address", name: "", type: "address" }]
1128
+ },
1129
+ {
1130
+ inputs: [
1131
+ {
1132
+ internalType: "struct ProofVerificationParams",
1133
+ name: "params",
1134
+ type: "tuple",
1135
+ components: [
1136
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1137
+ { internalType: "bytes", name: "proof", type: "bytes" },
1138
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1139
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1140
+ {
1141
+ internalType: "uint256[]",
1142
+ name: "committedInputCounts",
1143
+ type: "uint256[]"
1144
+ },
1145
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1146
+ { internalType: "string", name: "domain", type: "string" },
1147
+ { internalType: "string", name: "scope", type: "string" },
1148
+ { internalType: "bool", name: "devMode", type: "bool" }
1149
+ ]
1150
+ }
1151
+ ],
1152
+ stateMutability: "view",
1153
+ type: "function",
1154
+ name: "enforceSanctionsRoot"
1155
+ },
1156
+ {
1157
+ inputs: [
1158
+ {
1159
+ internalType: "struct ProofVerificationParams",
1160
+ name: "params",
1161
+ type: "tuple",
1162
+ components: [
1163
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1164
+ { internalType: "bytes", name: "proof", type: "bytes" },
1165
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1166
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1167
+ {
1168
+ internalType: "uint256[]",
1169
+ name: "committedInputCounts",
1170
+ type: "uint256[]"
1171
+ },
1172
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1173
+ { internalType: "string", name: "domain", type: "string" },
1174
+ { internalType: "string", name: "scope", type: "string" },
1175
+ { internalType: "bool", name: "devMode", type: "bool" }
1176
+ ]
1177
+ }
1178
+ ],
1179
+ stateMutability: "pure",
1180
+ type: "function",
1181
+ name: "getBoundData",
1182
+ outputs: [
1183
+ {
1184
+ internalType: "struct BoundData",
1185
+ name: "boundData",
1186
+ type: "tuple",
1187
+ components: [
1188
+ { internalType: "address", name: "senderAddress", type: "address" },
1189
+ { internalType: "uint256", name: "chainId", type: "uint256" },
1190
+ { internalType: "string", name: "customData", type: "string" }
1191
+ ]
1192
+ }
1193
+ ]
1194
+ },
1195
+ {
1196
+ inputs: [
1197
+ {
1198
+ internalType: "struct ProofVerificationParams",
1199
+ name: "params",
1200
+ type: "tuple",
1201
+ components: [
1202
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1203
+ { internalType: "bytes", name: "proof", type: "bytes" },
1204
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1205
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1206
+ {
1207
+ internalType: "uint256[]",
1208
+ name: "committedInputCounts",
1209
+ type: "uint256[]"
1210
+ },
1211
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1212
+ { internalType: "string", name: "domain", type: "string" },
1213
+ { internalType: "string", name: "scope", type: "string" },
1214
+ { internalType: "bool", name: "devMode", type: "bool" }
1215
+ ]
1216
+ },
1217
+ { internalType: "bool", name: "isIDCard", type: "bool" }
1218
+ ],
1219
+ stateMutability: "pure",
1220
+ type: "function",
1221
+ name: "getDisclosedData",
1222
+ outputs: [
1223
+ {
1224
+ internalType: "struct DisclosedData",
1225
+ name: "disclosedData",
1226
+ type: "tuple",
1227
+ components: [
1228
+ { internalType: "string", name: "name", type: "string" },
1229
+ { internalType: "string", name: "issuingCountry", type: "string" },
1230
+ { internalType: "string", name: "nationality", type: "string" },
1231
+ { internalType: "string", name: "gender", type: "string" },
1232
+ { internalType: "string", name: "birthDate", type: "string" },
1233
+ { internalType: "string", name: "expiryDate", type: "string" },
1234
+ { internalType: "string", name: "documentNumber", type: "string" },
1235
+ { internalType: "string", name: "documentType", type: "string" }
1236
+ ]
1237
+ }
1238
+ ]
1239
+ },
1240
+ {
1241
+ inputs: [
1242
+ { internalType: "uint8", name: "minAge", type: "uint8" },
1243
+ {
1244
+ internalType: "struct ProofVerificationParams",
1245
+ name: "params",
1246
+ type: "tuple",
1247
+ components: [
1248
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1249
+ { internalType: "bytes", name: "proof", type: "bytes" },
1250
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1251
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1252
+ {
1253
+ internalType: "uint256[]",
1254
+ name: "committedInputCounts",
1255
+ type: "uint256[]"
1256
+ },
1257
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1258
+ { internalType: "string", name: "domain", type: "string" },
1259
+ { internalType: "string", name: "scope", type: "string" },
1260
+ { internalType: "bool", name: "devMode", type: "bool" }
1261
+ ]
1262
+ }
1263
+ ],
1264
+ stateMutability: "view",
1265
+ type: "function",
1266
+ name: "isAgeAbove",
1267
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1268
+ },
1269
+ {
1270
+ inputs: [
1271
+ { internalType: "uint8", name: "minAge", type: "uint8" },
1272
+ {
1273
+ internalType: "struct ProofVerificationParams",
1274
+ name: "params",
1275
+ type: "tuple",
1276
+ components: [
1277
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1278
+ { internalType: "bytes", name: "proof", type: "bytes" },
1279
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1280
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1281
+ {
1282
+ internalType: "uint256[]",
1283
+ name: "committedInputCounts",
1284
+ type: "uint256[]"
1285
+ },
1286
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1287
+ { internalType: "string", name: "domain", type: "string" },
1288
+ { internalType: "string", name: "scope", type: "string" },
1289
+ { internalType: "bool", name: "devMode", type: "bool" }
1290
+ ]
1291
+ }
1292
+ ],
1293
+ stateMutability: "view",
1294
+ type: "function",
1295
+ name: "isAgeAboveOrEqual",
1296
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1297
+ },
1298
+ {
1299
+ inputs: [
1300
+ { internalType: "uint8", name: "maxAge", type: "uint8" },
1301
+ {
1302
+ internalType: "struct ProofVerificationParams",
1303
+ name: "params",
1304
+ type: "tuple",
1305
+ components: [
1306
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1307
+ { internalType: "bytes", name: "proof", type: "bytes" },
1308
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1309
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1310
+ {
1311
+ internalType: "uint256[]",
1312
+ name: "committedInputCounts",
1313
+ type: "uint256[]"
1314
+ },
1315
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1316
+ { internalType: "string", name: "domain", type: "string" },
1317
+ { internalType: "string", name: "scope", type: "string" },
1318
+ { internalType: "bool", name: "devMode", type: "bool" }
1319
+ ]
1320
+ }
1321
+ ],
1322
+ stateMutability: "view",
1323
+ type: "function",
1324
+ name: "isAgeBelow",
1325
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1326
+ },
1327
+ {
1328
+ inputs: [
1329
+ { internalType: "uint8", name: "maxAge", type: "uint8" },
1330
+ {
1331
+ internalType: "struct ProofVerificationParams",
1332
+ name: "params",
1333
+ type: "tuple",
1334
+ components: [
1335
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1336
+ { internalType: "bytes", name: "proof", type: "bytes" },
1337
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1338
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1339
+ {
1340
+ internalType: "uint256[]",
1341
+ name: "committedInputCounts",
1342
+ type: "uint256[]"
1343
+ },
1344
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1345
+ { internalType: "string", name: "domain", type: "string" },
1346
+ { internalType: "string", name: "scope", type: "string" },
1347
+ { internalType: "bool", name: "devMode", type: "bool" }
1348
+ ]
1349
+ }
1350
+ ],
1351
+ stateMutability: "view",
1352
+ type: "function",
1353
+ name: "isAgeBelowOrEqual",
1354
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1355
+ },
1356
+ {
1357
+ inputs: [
1358
+ { internalType: "uint8", name: "minAge", type: "uint8" },
1359
+ { internalType: "uint8", name: "maxAge", type: "uint8" },
1360
+ {
1361
+ internalType: "struct ProofVerificationParams",
1362
+ name: "params",
1363
+ type: "tuple",
1364
+ components: [
1365
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1366
+ { internalType: "bytes", name: "proof", type: "bytes" },
1367
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1368
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1369
+ {
1370
+ internalType: "uint256[]",
1371
+ name: "committedInputCounts",
1372
+ type: "uint256[]"
1373
+ },
1374
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1375
+ { internalType: "string", name: "domain", type: "string" },
1376
+ { internalType: "string", name: "scope", type: "string" },
1377
+ { internalType: "bool", name: "devMode", type: "bool" }
1378
+ ]
1379
+ }
1380
+ ],
1381
+ stateMutability: "view",
1382
+ type: "function",
1383
+ name: "isAgeBetween",
1384
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1385
+ },
1386
+ {
1387
+ inputs: [
1388
+ { internalType: "uint8", name: "age", type: "uint8" },
1389
+ {
1390
+ internalType: "struct ProofVerificationParams",
1391
+ name: "params",
1392
+ type: "tuple",
1393
+ components: [
1394
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1395
+ { internalType: "bytes", name: "proof", type: "bytes" },
1396
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1397
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1398
+ {
1399
+ internalType: "uint256[]",
1400
+ name: "committedInputCounts",
1401
+ type: "uint256[]"
1402
+ },
1403
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1404
+ { internalType: "string", name: "domain", type: "string" },
1405
+ { internalType: "string", name: "scope", type: "string" },
1406
+ { internalType: "bool", name: "devMode", type: "bool" }
1407
+ ]
1408
+ }
1409
+ ],
1410
+ stateMutability: "view",
1411
+ type: "function",
1412
+ name: "isAgeEqual",
1413
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1414
+ },
1415
+ {
1416
+ inputs: [
1417
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1418
+ {
1419
+ internalType: "struct ProofVerificationParams",
1420
+ name: "params",
1421
+ type: "tuple",
1422
+ components: [
1423
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1424
+ { internalType: "bytes", name: "proof", type: "bytes" },
1425
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1426
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1427
+ {
1428
+ internalType: "uint256[]",
1429
+ name: "committedInputCounts",
1430
+ type: "uint256[]"
1431
+ },
1432
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1433
+ { internalType: "string", name: "domain", type: "string" },
1434
+ { internalType: "string", name: "scope", type: "string" },
1435
+ { internalType: "bool", name: "devMode", type: "bool" }
1436
+ ]
1437
+ }
1438
+ ],
1439
+ stateMutability: "view",
1440
+ type: "function",
1441
+ name: "isBirthdateAfter",
1442
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1443
+ },
1444
+ {
1445
+ inputs: [
1446
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1447
+ {
1448
+ internalType: "struct ProofVerificationParams",
1449
+ name: "params",
1450
+ type: "tuple",
1451
+ components: [
1452
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1453
+ { internalType: "bytes", name: "proof", type: "bytes" },
1454
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1455
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1456
+ {
1457
+ internalType: "uint256[]",
1458
+ name: "committedInputCounts",
1459
+ type: "uint256[]"
1460
+ },
1461
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1462
+ { internalType: "string", name: "domain", type: "string" },
1463
+ { internalType: "string", name: "scope", type: "string" },
1464
+ { internalType: "bool", name: "devMode", type: "bool" }
1465
+ ]
1466
+ }
1467
+ ],
1468
+ stateMutability: "view",
1469
+ type: "function",
1470
+ name: "isBirthdateAfterOrEqual",
1471
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1472
+ },
1473
+ {
1474
+ inputs: [
1475
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1476
+ {
1477
+ internalType: "struct ProofVerificationParams",
1478
+ name: "params",
1479
+ type: "tuple",
1480
+ components: [
1481
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1482
+ { internalType: "bytes", name: "proof", type: "bytes" },
1483
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1484
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1485
+ {
1486
+ internalType: "uint256[]",
1487
+ name: "committedInputCounts",
1488
+ type: "uint256[]"
1489
+ },
1490
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1491
+ { internalType: "string", name: "domain", type: "string" },
1492
+ { internalType: "string", name: "scope", type: "string" },
1493
+ { internalType: "bool", name: "devMode", type: "bool" }
1494
+ ]
1495
+ }
1496
+ ],
1497
+ stateMutability: "view",
1498
+ type: "function",
1499
+ name: "isBirthdateBefore",
1500
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1501
+ },
1502
+ {
1503
+ inputs: [
1504
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1505
+ {
1506
+ internalType: "struct ProofVerificationParams",
1507
+ name: "params",
1508
+ type: "tuple",
1509
+ components: [
1510
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1511
+ { internalType: "bytes", name: "proof", type: "bytes" },
1512
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1513
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1514
+ {
1515
+ internalType: "uint256[]",
1516
+ name: "committedInputCounts",
1517
+ type: "uint256[]"
1518
+ },
1519
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1520
+ { internalType: "string", name: "domain", type: "string" },
1521
+ { internalType: "string", name: "scope", type: "string" },
1522
+ { internalType: "bool", name: "devMode", type: "bool" }
1523
+ ]
1524
+ }
1525
+ ],
1526
+ stateMutability: "view",
1527
+ type: "function",
1528
+ name: "isBirthdateBeforeOrEqual",
1529
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1530
+ },
1531
+ {
1532
+ inputs: [
1533
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1534
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1535
+ {
1536
+ internalType: "struct ProofVerificationParams",
1537
+ name: "params",
1538
+ type: "tuple",
1539
+ components: [
1540
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1541
+ { internalType: "bytes", name: "proof", type: "bytes" },
1542
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1543
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1544
+ {
1545
+ internalType: "uint256[]",
1546
+ name: "committedInputCounts",
1547
+ type: "uint256[]"
1548
+ },
1549
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1550
+ { internalType: "string", name: "domain", type: "string" },
1551
+ { internalType: "string", name: "scope", type: "string" },
1552
+ { internalType: "bool", name: "devMode", type: "bool" }
1553
+ ]
1554
+ }
1555
+ ],
1556
+ stateMutability: "view",
1557
+ type: "function",
1558
+ name: "isBirthdateBetween",
1559
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1560
+ },
1561
+ {
1562
+ inputs: [
1563
+ { internalType: "uint256", name: "date", type: "uint256" },
1564
+ {
1565
+ internalType: "struct ProofVerificationParams",
1566
+ name: "params",
1567
+ type: "tuple",
1568
+ components: [
1569
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1570
+ { internalType: "bytes", name: "proof", type: "bytes" },
1571
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1572
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1573
+ {
1574
+ internalType: "uint256[]",
1575
+ name: "committedInputCounts",
1576
+ type: "uint256[]"
1577
+ },
1578
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1579
+ { internalType: "string", name: "domain", type: "string" },
1580
+ { internalType: "string", name: "scope", type: "string" },
1581
+ { internalType: "bool", name: "devMode", type: "bool" }
1582
+ ]
1583
+ }
1584
+ ],
1585
+ stateMutability: "view",
1586
+ type: "function",
1587
+ name: "isBirthdateEqual",
1588
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1589
+ },
1590
+ {
1591
+ inputs: [
1592
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1593
+ {
1594
+ internalType: "struct ProofVerificationParams",
1595
+ name: "params",
1596
+ type: "tuple",
1597
+ components: [
1598
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1599
+ { internalType: "bytes", name: "proof", type: "bytes" },
1600
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1601
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1602
+ {
1603
+ internalType: "uint256[]",
1604
+ name: "committedInputCounts",
1605
+ type: "uint256[]"
1606
+ },
1607
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1608
+ { internalType: "string", name: "domain", type: "string" },
1609
+ { internalType: "string", name: "scope", type: "string" },
1610
+ { internalType: "bool", name: "devMode", type: "bool" }
1611
+ ]
1612
+ }
1613
+ ],
1614
+ stateMutability: "view",
1615
+ type: "function",
1616
+ name: "isExpiryDateAfter",
1617
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1618
+ },
1619
+ {
1620
+ inputs: [
1621
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1622
+ {
1623
+ internalType: "struct ProofVerificationParams",
1624
+ name: "params",
1625
+ type: "tuple",
1626
+ components: [
1627
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1628
+ { internalType: "bytes", name: "proof", type: "bytes" },
1629
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1630
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1631
+ {
1632
+ internalType: "uint256[]",
1633
+ name: "committedInputCounts",
1634
+ type: "uint256[]"
1635
+ },
1636
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1637
+ { internalType: "string", name: "domain", type: "string" },
1638
+ { internalType: "string", name: "scope", type: "string" },
1639
+ { internalType: "bool", name: "devMode", type: "bool" }
1640
+ ]
1641
+ }
1642
+ ],
1643
+ stateMutability: "view",
1644
+ type: "function",
1645
+ name: "isExpiryDateAfterOrEqual",
1646
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1647
+ },
1648
+ {
1649
+ inputs: [
1650
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1651
+ {
1652
+ internalType: "struct ProofVerificationParams",
1653
+ name: "params",
1654
+ type: "tuple",
1655
+ components: [
1656
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1657
+ { internalType: "bytes", name: "proof", type: "bytes" },
1658
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1659
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1660
+ {
1661
+ internalType: "uint256[]",
1662
+ name: "committedInputCounts",
1663
+ type: "uint256[]"
1664
+ },
1665
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1666
+ { internalType: "string", name: "domain", type: "string" },
1667
+ { internalType: "string", name: "scope", type: "string" },
1668
+ { internalType: "bool", name: "devMode", type: "bool" }
1669
+ ]
1670
+ }
1671
+ ],
1672
+ stateMutability: "view",
1673
+ type: "function",
1674
+ name: "isExpiryDateBefore",
1675
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1676
+ },
1677
+ {
1678
+ inputs: [
1679
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1680
+ {
1681
+ internalType: "struct ProofVerificationParams",
1682
+ name: "params",
1683
+ type: "tuple",
1684
+ components: [
1685
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1686
+ { internalType: "bytes", name: "proof", type: "bytes" },
1687
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1688
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1689
+ {
1690
+ internalType: "uint256[]",
1691
+ name: "committedInputCounts",
1692
+ type: "uint256[]"
1693
+ },
1694
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1695
+ { internalType: "string", name: "domain", type: "string" },
1696
+ { internalType: "string", name: "scope", type: "string" },
1697
+ { internalType: "bool", name: "devMode", type: "bool" }
1698
+ ]
1699
+ }
1700
+ ],
1701
+ stateMutability: "view",
1702
+ type: "function",
1703
+ name: "isExpiryDateBeforeOrEqual",
1704
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1705
+ },
1706
+ {
1707
+ inputs: [
1708
+ { internalType: "uint256", name: "minDate", type: "uint256" },
1709
+ { internalType: "uint256", name: "maxDate", type: "uint256" },
1710
+ {
1711
+ internalType: "struct ProofVerificationParams",
1712
+ name: "params",
1713
+ type: "tuple",
1714
+ components: [
1715
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1716
+ { internalType: "bytes", name: "proof", type: "bytes" },
1717
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1718
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1719
+ {
1720
+ internalType: "uint256[]",
1721
+ name: "committedInputCounts",
1722
+ type: "uint256[]"
1723
+ },
1724
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1725
+ { internalType: "string", name: "domain", type: "string" },
1726
+ { internalType: "string", name: "scope", type: "string" },
1727
+ { internalType: "bool", name: "devMode", type: "bool" }
1728
+ ]
1729
+ }
1730
+ ],
1731
+ stateMutability: "view",
1732
+ type: "function",
1733
+ name: "isExpiryDateBetween",
1734
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1735
+ },
1736
+ {
1737
+ inputs: [
1738
+ { internalType: "uint256", name: "date", type: "uint256" },
1739
+ {
1740
+ internalType: "struct ProofVerificationParams",
1741
+ name: "params",
1742
+ type: "tuple",
1743
+ components: [
1744
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1745
+ { internalType: "bytes", name: "proof", type: "bytes" },
1746
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1747
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1748
+ {
1749
+ internalType: "uint256[]",
1750
+ name: "committedInputCounts",
1751
+ type: "uint256[]"
1752
+ },
1753
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1754
+ { internalType: "string", name: "domain", type: "string" },
1755
+ { internalType: "string", name: "scope", type: "string" },
1756
+ { internalType: "bool", name: "devMode", type: "bool" }
1757
+ ]
1758
+ }
1759
+ ],
1760
+ stateMutability: "view",
1761
+ type: "function",
1762
+ name: "isExpiryDateEqual",
1763
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1764
+ },
1765
+ {
1766
+ inputs: [
1767
+ { internalType: "enum FaceMatchMode", name: "faceMatchMode", type: "uint8" },
1768
+ {
1769
+ internalType: "struct ProofVerificationParams",
1770
+ name: "params",
1771
+ type: "tuple",
1772
+ components: [
1773
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1774
+ { internalType: "bytes", name: "proof", type: "bytes" },
1775
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1776
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1777
+ {
1778
+ internalType: "uint256[]",
1779
+ name: "committedInputCounts",
1780
+ type: "uint256[]"
1781
+ },
1782
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1783
+ { internalType: "string", name: "domain", type: "string" },
1784
+ { internalType: "string", name: "scope", type: "string" },
1785
+ { internalType: "bool", name: "devMode", type: "bool" }
1786
+ ]
1787
+ }
1788
+ ],
1789
+ stateMutability: "pure",
1790
+ type: "function",
1791
+ name: "isFaceMatchVerified",
1792
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1793
+ },
1794
+ {
1795
+ inputs: [
1796
+ { internalType: "string[]", name: "countryList", type: "string[]" },
1797
+ {
1798
+ internalType: "struct ProofVerificationParams",
1799
+ name: "params",
1800
+ type: "tuple",
1801
+ components: [
1802
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1803
+ { internalType: "bytes", name: "proof", type: "bytes" },
1804
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1805
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1806
+ {
1807
+ internalType: "uint256[]",
1808
+ name: "committedInputCounts",
1809
+ type: "uint256[]"
1810
+ },
1811
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1812
+ { internalType: "string", name: "domain", type: "string" },
1813
+ { internalType: "string", name: "scope", type: "string" },
1814
+ { internalType: "bool", name: "devMode", type: "bool" }
1815
+ ]
1816
+ }
1817
+ ],
1818
+ stateMutability: "pure",
1819
+ type: "function",
1820
+ name: "isIssuingCountryIn",
1821
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1822
+ },
1823
+ {
1824
+ inputs: [
1825
+ { internalType: "string[]", name: "countryList", type: "string[]" },
1826
+ {
1827
+ internalType: "struct ProofVerificationParams",
1828
+ name: "params",
1829
+ type: "tuple",
1830
+ components: [
1831
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1832
+ { internalType: "bytes", name: "proof", type: "bytes" },
1833
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1834
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1835
+ {
1836
+ internalType: "uint256[]",
1837
+ name: "committedInputCounts",
1838
+ type: "uint256[]"
1839
+ },
1840
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1841
+ { internalType: "string", name: "domain", type: "string" },
1842
+ { internalType: "string", name: "scope", type: "string" },
1843
+ { internalType: "bool", name: "devMode", type: "bool" }
1844
+ ]
1845
+ }
1846
+ ],
1847
+ stateMutability: "pure",
1848
+ type: "function",
1849
+ name: "isIssuingCountryOut",
1850
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1851
+ },
1852
+ {
1853
+ inputs: [
1854
+ { internalType: "string[]", name: "countryList", type: "string[]" },
1855
+ {
1856
+ internalType: "struct ProofVerificationParams",
1857
+ name: "params",
1858
+ type: "tuple",
1859
+ components: [
1860
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1861
+ { internalType: "bytes", name: "proof", type: "bytes" },
1862
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1863
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1864
+ {
1865
+ internalType: "uint256[]",
1866
+ name: "committedInputCounts",
1867
+ type: "uint256[]"
1868
+ },
1869
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1870
+ { internalType: "string", name: "domain", type: "string" },
1871
+ { internalType: "string", name: "scope", type: "string" },
1872
+ { internalType: "bool", name: "devMode", type: "bool" }
1873
+ ]
1874
+ }
1875
+ ],
1876
+ stateMutability: "pure",
1877
+ type: "function",
1878
+ name: "isNationalityIn",
1879
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1880
+ },
1881
+ {
1882
+ inputs: [
1883
+ { internalType: "string[]", name: "countryList", type: "string[]" },
1884
+ {
1885
+ internalType: "struct ProofVerificationParams",
1886
+ name: "params",
1887
+ type: "tuple",
1888
+ components: [
1889
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1890
+ { internalType: "bytes", name: "proof", type: "bytes" },
1891
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1892
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1893
+ {
1894
+ internalType: "uint256[]",
1895
+ name: "committedInputCounts",
1896
+ type: "uint256[]"
1897
+ },
1898
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1899
+ { internalType: "string", name: "domain", type: "string" },
1900
+ { internalType: "string", name: "scope", type: "string" },
1901
+ { internalType: "bool", name: "devMode", type: "bool" }
1902
+ ]
1903
+ }
1904
+ ],
1905
+ stateMutability: "pure",
1906
+ type: "function",
1907
+ name: "isNationalityOut",
1908
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1909
+ },
1910
+ {
1911
+ inputs: [],
1912
+ stateMutability: "view",
1913
+ type: "function",
1914
+ name: "paused",
1915
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1916
+ },
1917
+ {
1918
+ inputs: [{ internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" }],
1919
+ stateMutability: "nonpayable",
1920
+ type: "function",
1921
+ name: "removeVerifiers"
1922
+ },
1923
+ {
1924
+ inputs: [],
1925
+ stateMutability: "view",
1926
+ type: "function",
1927
+ name: "rootRegistry",
1928
+ outputs: [{ internalType: "contract IRootRegistry", name: "", type: "address" }]
1929
+ },
1930
+ {
1931
+ inputs: [{ internalType: "bool", name: "_paused", type: "bool" }],
1932
+ stateMutability: "nonpayable",
1933
+ type: "function",
1934
+ name: "setPaused"
1935
+ },
1936
+ {
1937
+ inputs: [{ internalType: "address", name: "newAdmin", type: "address" }],
1938
+ stateMutability: "nonpayable",
1939
+ type: "function",
1940
+ name: "transferAdmin"
1941
+ },
1942
+ {
1943
+ inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1944
+ stateMutability: "nonpayable",
1945
+ type: "function",
1946
+ name: "updateRootRegistry"
1947
+ },
1948
+ {
1949
+ inputs: [
1950
+ {
1951
+ internalType: "struct ProofVerificationParams",
1952
+ name: "params",
1953
+ type: "tuple",
1954
+ components: [
1955
+ { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1956
+ { internalType: "bytes", name: "proof", type: "bytes" },
1957
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1958
+ { internalType: "bytes", name: "committedInputs", type: "bytes" },
1959
+ {
1960
+ internalType: "uint256[]",
1961
+ name: "committedInputCounts",
1962
+ type: "uint256[]"
1963
+ },
1964
+ { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1965
+ { internalType: "string", name: "domain", type: "string" },
1966
+ { internalType: "string", name: "scope", type: "string" },
1967
+ { internalType: "bool", name: "devMode", type: "bool" }
1968
+ ]
1969
+ }
1970
+ ],
1971
+ stateMutability: "view",
1972
+ type: "function",
1973
+ name: "verifyProof",
1974
+ outputs: [
1975
+ { internalType: "bool", name: "isValid", type: "bool" },
1976
+ { internalType: "bytes32", name: "uniqueIdentifier", type: "bytes32" }
1977
+ ]
1978
+ },
1979
+ {
1980
+ inputs: [
1981
+ { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1982
+ { internalType: "string", name: "domain", type: "string" },
1983
+ { internalType: "string", name: "scope", type: "string" }
1984
+ ],
1985
+ stateMutability: "pure",
1986
+ type: "function",
1987
+ name: "verifyScopes",
1988
+ outputs: [{ internalType: "bool", name: "", type: "bool" }]
1989
+ },
1990
+ {
1991
+ inputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
1992
+ stateMutability: "view",
1993
+ type: "function",
1994
+ name: "vkeyHashToVerifier",
1995
+ outputs: [{ internalType: "address", name: "", type: "address" }]
1996
+ }
1997
+ ],
1998
+ devdoc: {
1999
+ kind: "dev",
2000
+ methods: {
2001
+ constructor: { details: "Constructor" },
2002
+ "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2003
+ params: { params: "The proof verification parameters" }
2004
+ },
2005
+ "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2006
+ params: { params: "The proof verification parameters" },
2007
+ returns: { boundData: "The data bound to the proof" }
2008
+ },
2009
+ "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": {
2010
+ params: {
2011
+ isIDCard: "Whether the proof is an ID card",
2012
+ params: "The proof verification parameters"
2013
+ },
2014
+ returns: { disclosedData: "The data disclosed by the proof" }
2015
+ },
2016
+ "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2017
+ params: {
2018
+ minAge: "The age must be above this age",
2019
+ params: "The proof verification parameters"
2020
+ },
2021
+ returns: { _0: "True if the age is above the given age, false otherwise" }
2022
+ },
2023
+ "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2024
+ params: {
2025
+ minAge: "The age must be above or equal to this age",
2026
+ params: "The proof verification parameters"
2027
+ },
2028
+ returns: {
2029
+ _0: "True if the age is above or equal to the given age, false otherwise"
2030
+ }
2031
+ },
2032
+ "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2033
+ params: {
2034
+ maxAge: "The age must be below this age",
2035
+ params: "The proof verification parameters"
2036
+ },
2037
+ returns: { _0: "True if the age is below the given age, false otherwise" }
2038
+ },
2039
+ "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2040
+ params: {
2041
+ maxAge: "The age must be below or equal to this age",
2042
+ params: "The proof verification parameters"
2043
+ },
2044
+ returns: {
2045
+ _0: "True if the age is below or equal to the given age, false otherwise"
2046
+ }
2047
+ },
2048
+ "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2049
+ params: {
2050
+ maxAge: "The age must be less than or equal to this age",
2051
+ minAge: "The age must be greater than or equal to this age",
2052
+ params: "The proof verification parameters"
2053
+ },
2054
+ returns: { _0: "True if the age is in the given range, false otherwise" }
2055
+ },
2056
+ "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2057
+ params: {
2058
+ age: "The age must be equal to this age",
2059
+ params: "The proof verification parameters"
2060
+ },
2061
+ returns: { _0: "True if the age is equal to the given age, false otherwise" }
2062
+ },
2063
+ "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2064
+ params: {
2065
+ minDate: "The birthdate must be after this date",
2066
+ params: "The proof verification parameters"
2067
+ },
2068
+ returns: { _0: "True if the birthdate is after the given date, false otherwise" }
2069
+ },
2070
+ "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2071
+ params: {
2072
+ minDate: "The birthdate must be after or equal to this date",
2073
+ params: "The proof verification parameters"
2074
+ },
2075
+ returns: {
2076
+ _0: "True if the birthdate is after or equal to the given date, false otherwise"
2077
+ }
2078
+ },
2079
+ "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2080
+ params: {
2081
+ maxDate: "The birthdate must be before this date",
2082
+ params: "The proof verification parameters"
2083
+ },
2084
+ returns: { _0: "True if the birthdate is before the given date, false otherwise" }
2085
+ },
2086
+ "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2087
+ params: {
2088
+ maxDate: "The birthdate must be before or equal to this date",
2089
+ params: "The proof verification parameters"
2090
+ },
2091
+ returns: {
2092
+ _0: "True if the birthdate is before or equal to the given date, false otherwise"
2093
+ }
2094
+ },
2095
+ "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2096
+ params: {
2097
+ maxDate: "The birthdate must be before or equal to this date",
2098
+ minDate: "The birthdate must be after or equal to this date",
2099
+ params: "The proof verification parameters"
2100
+ },
2101
+ returns: { _0: "True if the birthdate is between the given dates, false otherwise" }
2102
+ },
2103
+ "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2104
+ params: {
2105
+ date: "The birthdate must be equal to this date",
2106
+ params: "The proof verification parameters"
2107
+ },
2108
+ returns: { _0: "True if the birthdate is equal to the given date, false otherwise" }
2109
+ },
2110
+ "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2111
+ params: {
2112
+ minDate: "The expiry date must be after this date",
2113
+ params: "The proof verification parameters"
2114
+ },
2115
+ returns: { _0: "True if the expiry date is after the given date, false otherwise" }
2116
+ },
2117
+ "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2118
+ params: {
2119
+ minDate: "The expiry date must be after or equal to this date",
2120
+ params: "The proof verification parameters"
2121
+ },
2122
+ returns: {
2123
+ _0: "True if the expiry date is after or equal to the given date, false otherwise"
2124
+ }
2125
+ },
2126
+ "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2127
+ params: {
2128
+ maxDate: "The expiry date must be before this date",
2129
+ params: "The proof verification parameters"
2130
+ },
2131
+ returns: { _0: "True if the expiry date is before the given date, false otherwise" }
2132
+ },
2133
+ "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2134
+ params: {
2135
+ maxDate: "The expiry date must be before or equal to this date",
2136
+ params: "The proof verification parameters"
2137
+ },
2138
+ returns: {
2139
+ _0: "True if the expiry date is before or equal to the given date, false otherwise"
2140
+ }
2141
+ },
2142
+ "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2143
+ params: {
2144
+ maxDate: "The expiry date must be before or equal to this date",
2145
+ minDate: "The expiry date must be after or equal to this date",
2146
+ params: "The proof verification parameters"
2147
+ },
2148
+ returns: {
2149
+ _0: "True if the expiry date is between the given dates, false otherwise"
2150
+ }
2151
+ },
2152
+ "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2153
+ params: {
2154
+ date: "The expiry date must be equal to this date",
2155
+ params: "The proof verification parameters"
2156
+ },
2157
+ returns: {
2158
+ _0: "True if the expiry date is equal to the given date, false otherwise"
2159
+ }
2160
+ },
2161
+ "isFaceMatchVerified(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2162
+ params: {
2163
+ faceMatchMode: "The FaceMatch mode expected to be used in the verification",
2164
+ params: "The proof verification parameters"
2165
+ },
2166
+ returns: {
2167
+ _0: "True if the proof is tied to a valid FaceMatch verification, false otherwise"
2168
+ }
2169
+ },
2170
+ "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2171
+ params: {
2172
+ countryList: "The list of countries (needs to match exactly the list of countries in the proof)",
2173
+ params: "The proof verification parameters"
2174
+ },
2175
+ returns: {
2176
+ _0: "True if the issuing country is in the list of countries, false otherwise"
2177
+ }
2178
+ },
2179
+ "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2180
+ params: {
2181
+ 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",
2182
+ params: "The proof verification parameters"
2183
+ },
2184
+ returns: {
2185
+ _0: "True if the issuing country is not in the list of countries, false otherwise"
2186
+ }
2187
+ },
2188
+ "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2189
+ params: {
2190
+ countryList: "The list of countries (needs to match exactly the list of countries in the proof)",
2191
+ params: "The proof verification parameters"
2192
+ },
2193
+ returns: {
2194
+ _0: "True if the nationality is in the list of countries, false otherwise"
2195
+ }
2196
+ },
2197
+ "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2198
+ params: {
2199
+ 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",
2200
+ params: "The proof verification parameters"
2201
+ },
2202
+ returns: {
2203
+ _0: "True if the nationality is not in the list of countries, false otherwise"
2204
+ }
2205
+ },
2206
+ "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2207
+ params: { params: "The proof verification parameters" },
2208
+ returns: {
2209
+ isValid: "True if the proof is valid, false otherwise",
2210
+ uniqueIdentifier: "The unique identifier associated to the identity document that generated the proof"
2211
+ }
2212
+ },
2213
+ "verifyScopes(bytes32[],string,string)": {
2214
+ params: {
2215
+ domain: "The domain to check against",
2216
+ publicInputs: "The public inputs of the proof",
2217
+ scope: "The scope to check against"
2218
+ },
2219
+ returns: {
2220
+ _0: "True if the proof was generated for the given domain and scope, false otherwise"
2221
+ }
2222
+ }
2223
+ },
2224
+ version: 1
2225
+ },
2226
+ userdoc: {
2227
+ kind: "user",
2228
+ methods: {
2229
+ "enforceSanctionsRoot((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2230
+ notice: "Enforces that the proof checks against the expected sanction list(s)"
2231
+ },
2232
+ "getBoundData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2233
+ notice: "Gets the data bound to the proof"
2234
+ },
2235
+ "getDisclosedData((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool),bool)": {
2236
+ notice: "Gets the data disclosed by the proof"
2237
+ },
2238
+ "isAgeAbove(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2239
+ notice: "Checks if the age is above the given age"
2240
+ },
2241
+ "isAgeAboveOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2242
+ notice: "Checks if the age is above or equal to the given age"
2243
+ },
2244
+ "isAgeBelow(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2245
+ notice: "Checks if the age is below the given age"
2246
+ },
2247
+ "isAgeBelowOrEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2248
+ notice: "Checks if the age is below or equal to the given age"
2249
+ },
2250
+ "isAgeBetween(uint8,uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2251
+ notice: "Checks if the age is in the given range"
2252
+ },
2253
+ "isAgeEqual(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2254
+ notice: "Checks if the age is equal to the given age"
2255
+ },
2256
+ "isBirthdateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2257
+ notice: "Checks if the birthdate is after the given date"
2258
+ },
2259
+ "isBirthdateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2260
+ notice: "Checks if the birthdate is after or equal to the given date"
2261
+ },
2262
+ "isBirthdateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2263
+ notice: "Checks if the birthdate is before the given date"
2264
+ },
2265
+ "isBirthdateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2266
+ notice: "Checks if the birthdate is before or equal to the given date"
2267
+ },
2268
+ "isBirthdateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2269
+ notice: "Checks if the birthdate is between the given dates"
2270
+ },
2271
+ "isBirthdateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2272
+ notice: "Checks if the birthdate is equal to the given date"
2273
+ },
2274
+ "isExpiryDateAfter(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2275
+ notice: "Checks if the expiry date is after the given date"
2276
+ },
2277
+ "isExpiryDateAfterOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2278
+ notice: "Checks if the expiry date is after or equal to the given date"
2279
+ },
2280
+ "isExpiryDateBefore(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2281
+ notice: "Checks if the expiry date is before the given date"
2282
+ },
2283
+ "isExpiryDateBeforeOrEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2284
+ notice: "Checks if the expiry date is before or equal to the given date"
2285
+ },
2286
+ "isExpiryDateBetween(uint256,uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2287
+ notice: "Checks if the expiry date is between the given dates"
2288
+ },
2289
+ "isExpiryDateEqual(uint256,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2290
+ notice: "Checks if the expiry date is equal to the given date"
2291
+ },
2292
+ "isFaceMatchVerified(uint8,(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2293
+ notice: "Checks if the proof is tied to a FaceMatch verification"
2294
+ },
2295
+ "isIssuingCountryIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2296
+ notice: "Checks if the issuing country is in the list of countries"
2297
+ },
2298
+ "isIssuingCountryOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2299
+ notice: "Checks if the issuing country is not in the list of countries"
2300
+ },
2301
+ "isNationalityIn(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2302
+ notice: "Checks if the nationality is in the list of countries"
2303
+ },
2304
+ "isNationalityOut(string[],(bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2305
+ notice: "Checks if the nationality is not in the list of countries"
2306
+ },
2307
+ "verifyProof((bytes32,bytes,bytes32[],bytes,uint256[],uint256,string,string,bool))": {
2308
+ notice: "Verifies a proof from ZKPassport"
2309
+ },
2310
+ "verifyScopes(bytes32[],string,string)": {
2311
+ notice: "Verifies that the proof was generated for the given domain and scope"
2312
+ }
2313
+ },
2314
+ version: 1
2315
+ }
2316
+ },
2317
+ settings: {
2318
+ remappings: ["forge-std/=lib/forge-std/src/"],
2319
+ optimizer: { enabled: true, runs: 200 },
2320
+ metadata: { bytecodeHash: "ipfs" },
2321
+ compilationTarget: { "src/ZKPassportVerifier.sol": "ZKPassportVerifier" },
2322
+ evmVersion: "cancun",
2323
+ libraries: {}
2324
+ },
2325
+ sources: {
2326
+ "src/Constants.sol": {
2327
+ keccak256: "0xedfdbd23c885320a6400c29a47cfd2e359fa67feaa7e72eb576a36ab47757126",
2328
+ urls: [
2329
+ "bzz-raw://752ce1099ed498206732837c776e1f364cb89a18356601f92c8c23c5b176a2cb",
2330
+ "dweb:/ipfs/QmdnGyvFCHvtm2FVAAYUoTRRXUC1nLWXjz3pkHpAnM9rfn"
2331
+ ],
2332
+ license: "Apache-2.0"
2333
+ },
2334
+ "src/DateUtils.sol": {
2335
+ keccak256: "0xc04aef2f5732f8c3b28077a0af19e2fbbdec2f9178f3800563bf64ccdecefc77",
2336
+ urls: [
2337
+ "bzz-raw://bcc2610f3bdd3411fc040d39efe9e68f826b48986b2df7987f3adb6a1467c833",
2338
+ "dweb:/ipfs/Qmc7uyW8Y7ekaKEdjd3kU9e1eDcCiAqsujGc5ZavuzGx4w"
2339
+ ],
2340
+ license: "Apache-2.0"
2341
+ },
2342
+ "src/IRootRegistry.sol": {
2343
+ keccak256: "0xa9955e80821ca9ccbdf7d05a8ce9a3e237b4771e1f6e09190ed1c803a5e1e516",
2344
+ urls: [
2345
+ "bzz-raw://fd9fc9fbd7057a6bcc16a682e52be9ebd012954898626a11f0a0e8788644789d",
2346
+ "dweb:/ipfs/QmZYpMRHdv4gMCNXCQtGQu8XqRVtNR9Kgkzh7u1YMpvrEB"
2347
+ ],
2348
+ license: "MIT"
2349
+ },
2350
+ "src/InputsExtractor.sol": {
2351
+ keccak256: "0xfcf678bb8fead1820159845e47c2efefdca16452ab2f30b1704efc13253512eb",
2352
+ urls: [
2353
+ "bzz-raw://aa83383e296a2b748c093b017e12719aeb1897ca3a677f3def76929951440111",
2354
+ "dweb:/ipfs/QmYSCdnm5EuQwrF2mnpRVtTLg4uPH1uUJQxYKyJtjEwq3y"
2355
+ ],
2356
+ license: "Apache-2.0"
2357
+ },
2358
+ "src/StringUtils.sol": {
2359
+ keccak256: "0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1",
2360
+ urls: [
2361
+ "bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342",
2362
+ "dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"
2363
+ ],
2364
+ license: "Apache-2.0"
2365
+ },
2366
+ "src/Types.sol": {
2367
+ keccak256: "0x96820d882e9fbdfe5b8d28992a59c4df49733c39fa811282f42b6550fa0d4fe9",
2368
+ urls: [
2369
+ "bzz-raw://c1cc625bfa759185e433b71f5fc22eef47236f57d217354d180beef91077dcc1",
2370
+ "dweb:/ipfs/QmXh6MDGjMx7AL4FjstCEtqNLHp9sCExw5CEzFpD8orYh2"
2371
+ ],
2372
+ license: "Apache-2.0"
2373
+ },
2374
+ "src/ZKPassportVerifier.sol": {
2375
+ keccak256: "0xcb976ea606732493b4497f5f12e2c6296f397735b1286a8bb1477e7cde195e43",
2376
+ urls: [
2377
+ "bzz-raw://d186a469d3e30743ddbb719a1ecf71c9787359b2a8287e86c9ac294a17e6db38",
2378
+ "dweb:/ipfs/QmSxzqPo33R3EhPzm8fF4k4ShUSp58Nr7qzBVadHWBXxMr"
2379
+ ],
2380
+ license: "Apache-2.0"
2381
+ },
2382
+ "src/ultra-honk-verifiers/OuterCount4.sol": {
2383
+ keccak256: "0xc0b2358f1cb49d10ab783b6ccf321e8bde6eb8ce70efe325fdf49987f1688b94",
2384
+ urls: [
2385
+ "bzz-raw://c5ddd3b3c3e2522e766c5ab95d2559ce4e79fe54e9aeb50b1c995ad1d8ed18ee",
2386
+ "dweb:/ipfs/Qmcu7WhWMk3TPxb3HuwEPiXF95F6eD8KmJ12RXxFBdCYgM"
2387
+ ],
2388
+ license: "Apache-2.0"
2389
+ }
2390
+ },
2391
+ version: 1
2392
+ },
2393
+ id: 26
2394
+ };
2395
+
2396
+ // src/solidity-verifier.ts
2397
+ var SolidityVerifier = class {
2398
+ static getDetails(network) {
2399
+ const baseConfig = {
2400
+ functionName: "verifyProof",
2401
+ abi: ZKPassportVerifier_default.abi
2402
+ };
2403
+ if (network === "ethereum_sepolia") {
2404
+ return {
2405
+ ...baseConfig,
2406
+ address: "0xf7480fd0A9289c062C52532f11D31e0b7A30ABe3"
2407
+ };
2408
+ } else if (network === "local_anvil") {
2409
+ return {
2410
+ ...baseConfig,
2411
+ address: "0x0"
2412
+ };
2413
+ }
2414
+ throw new Error(`Unsupported network: ${network}`);
2415
+ }
2416
+ static getParameters({
2417
+ proof,
2418
+ validityPeriodInSeconds = DEFAULT_VALIDITY,
2419
+ domain,
2420
+ scope,
2421
+ devMode = false
2422
+ }) {
2423
+ if (!proof.name?.startsWith("outer_evm")) {
2424
+ throw new Error(
2425
+ "This proof cannot be verified on an EVM chain. Please make sure to use the `compressed-evm` mode."
2426
+ );
2427
+ }
2428
+ const proofData = getProofData(proof.proof, getNumberOfPublicInputs(proof.name));
2429
+ let committedInputCounts = [];
2430
+ let committedInputs = [];
2431
+ for (const key in proof.committedInputs) {
2432
+ const committedInputCount = getCommittedInputCount(key);
2433
+ const circuitName = key;
2434
+ committedInputCounts.push({ circuitName, count: committedInputCount });
2435
+ let compressedCommittedInputs2 = "";
2436
+ if (circuitName === "inclusion_check_issuing_country_evm" || circuitName === "inclusion_check_nationality_evm" || circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
2437
+ const value = proof.committedInputs[circuitName];
2438
+ const formattedCountries = value.countries;
2439
+ if (circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
2440
+ formattedCountries.sort((a, b) => a.localeCompare(b));
2441
+ }
2442
+ const proofType = (() => {
2443
+ switch (circuitName) {
2444
+ case "exclusion_check_issuing_country_evm":
2445
+ return ProofType.ISSUING_COUNTRY_EXCLUSION;
2446
+ case "exclusion_check_nationality_evm":
2447
+ return ProofType.NATIONALITY_EXCLUSION;
2448
+ case "inclusion_check_issuing_country_evm":
2449
+ return ProofType.ISSUING_COUNTRY_INCLUSION;
2450
+ case "inclusion_check_nationality_evm":
2451
+ return ProofType.NATIONALITY_INCLUSION;
2452
+ }
2453
+ })();
2454
+ compressedCommittedInputs2 = proofType.toString(16).padStart(2, "0") + rightPadArrayWithZeros(
2455
+ formattedCountries.map((c) => Array.from(new TextEncoder().encode(c))).flat(),
2456
+ 600
2457
+ ).map((x) => x.toString(16).padStart(2, "0")).join("");
2458
+ } else if (circuitName === "compare_age_evm") {
2459
+ const value = proof.committedInputs[circuitName];
2460
+ const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2461
+ 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");
2462
+ } else if (circuitName === "compare_birthdate_evm") {
2463
+ const value = proof.committedInputs[circuitName];
2464
+ const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2465
+ const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
2466
+ const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
2467
+ 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("");
2468
+ } else if (circuitName === "compare_expiry_evm") {
2469
+ const value = proof.committedInputs[circuitName];
2470
+ const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2471
+ const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
2472
+ const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
2473
+ 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("");
2474
+ } else if (circuitName === "disclose_bytes_evm") {
2475
+ const value = proof.committedInputs[circuitName];
2476
+ 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("");
2477
+ } else if (circuitName === "bind_evm") {
2478
+ const value = proof.committedInputs[circuitName];
2479
+ compressedCommittedInputs2 = ProofType.BIND.toString(16).padStart(2, "0") + rightPadArrayWithZeros(formatBoundData(value.data), 500).map((x) => x.toString(16).padStart(2, "0")).join("");
2480
+ } else if (circuitName === "exclusion_check_sanctions_evm") {
2481
+ const value = proof.committedInputs[circuitName];
2482
+ 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("");
2483
+ } else if (circuitName === "facematch_evm") {
2484
+ const value = proof.committedInputs[circuitName];
2485
+ compressedCommittedInputs2 += ProofType.FACEMATCH.toString(16).padStart(2, "0");
2486
+ compressedCommittedInputs2 += Array.from(numberToBytesBE(BigInt(value.rootKeyLeaf), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
2487
+ compressedCommittedInputs2 += value.environment === "development" ? "00" : "01";
2488
+ compressedCommittedInputs2 += Array.from(numberToBytesBE(BigInt(value.appId), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
2489
+ compressedCommittedInputs2 += "01";
2490
+ } else {
2491
+ throw new Error(`Unsupported circuit for EVM verification: ${circuitName}`);
2492
+ }
2493
+ committedInputs.push({ circuitName, inputs: compressedCommittedInputs2 });
2494
+ }
2495
+ const parameterCommitments = getParamCommitmentsFromOuterProof(proofData).map(
2496
+ (x) => x.toString(16).padStart(64, "0")
2497
+ );
2498
+ let compressedCommittedInputs = "";
2499
+ let committedInputCountsArray = [];
2500
+ for (const commitment of parameterCommitments) {
2501
+ const committedInput = committedInputs.find((x) => {
2502
+ const rawHashedInputs = sha256(hexToBytes(x.inputs));
2503
+ const hashedInputs = new Uint8Array(rawHashedInputs.length);
2504
+ for (let i = 0; i < rawHashedInputs.length - 1; i++) {
2505
+ hashedInputs[i + 1] = rawHashedInputs[i];
2506
+ }
2507
+ hashedInputs[0] = 0;
2508
+ return bytesToHex(hashedInputs) === commitment.replace("0x", "");
2509
+ });
2510
+ if (committedInput) {
2511
+ const count = committedInputCounts.find(
2512
+ (x) => x.circuitName === committedInput.circuitName
2513
+ )?.count;
2514
+ if (count) {
2515
+ committedInputCountsArray.push(count);
2516
+ compressedCommittedInputs += committedInput.inputs;
2517
+ } else {
2518
+ throw new Error(`Unknown circuit name: ${committedInput.circuitName}`);
2519
+ }
2520
+ } else {
2521
+ throw new Error(`Invalid commitment: ${commitment}`);
2522
+ }
2523
+ }
2524
+ const params = {
2525
+ // Make sure the vkeyHash is 32 bytes
2526
+ vkeyHash: `0x${proof.vkeyHash.replace("0x", "").padStart(64, "0")}`,
2527
+ proof: `0x${proofData.proof.join("")}`,
2528
+ publicInputs: proofData.publicInputs,
2529
+ committedInputs: `0x${compressedCommittedInputs}`,
2530
+ committedInputCounts: committedInputCountsArray,
2531
+ validityPeriodInSeconds,
2532
+ domain,
2533
+ scope: scope ?? "",
2534
+ devMode
2535
+ };
2536
+ return params;
2537
+ }
2538
+ };
2539
+
2540
+ export {
2541
+ SolidityVerifier
2542
+ };