@lfdecentralizedtrust/paladin-sdk 0.13.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +21 -0
  2. package/build/domains/abis/INoto.json +448 -0
  3. package/build/domains/abis/INotoPrivate.json +347 -0
  4. package/build/domains/abis/IZetoFungible.json +197 -0
  5. package/build/domains/abis/PentePrivacyGroup.json +613 -0
  6. package/build/domains/abis/Zeto_Anon.json +1263 -0
  7. package/build/domains/noto.d.ts +117 -0
  8. package/build/domains/noto.js +292 -0
  9. package/build/domains/pente.d.ts +84 -0
  10. package/build/domains/pente.js +191 -0
  11. package/build/domains/zeto.d.ts +83 -0
  12. package/build/domains/zeto.js +201 -0
  13. package/build/index.d.ts +9 -0
  14. package/build/index.js +28 -0
  15. package/build/interfaces/algorithms.d.ts +3 -0
  16. package/build/interfaces/algorithms.js +9 -0
  17. package/build/interfaces/blockchainevent.d.ts +15 -0
  18. package/build/interfaces/blockchainevent.js +2 -0
  19. package/build/interfaces/blockindex.d.ts +30 -0
  20. package/build/interfaces/blockindex.js +2 -0
  21. package/build/interfaces/domains.d.ts +9 -0
  22. package/build/interfaces/domains.js +2 -0
  23. package/build/interfaces/index.d.ts +15 -0
  24. package/build/interfaces/index.js +31 -0
  25. package/build/interfaces/keymanager.d.ts +32 -0
  26. package/build/interfaces/keymanager.js +2 -0
  27. package/build/interfaces/logger.d.ts +8 -0
  28. package/build/interfaces/logger.js +2 -0
  29. package/build/interfaces/paladin.d.ts +14 -0
  30. package/build/interfaces/paladin.js +2 -0
  31. package/build/interfaces/privacygroups.d.ts +76 -0
  32. package/build/interfaces/privacygroups.js +2 -0
  33. package/build/interfaces/query.d.ts +33 -0
  34. package/build/interfaces/query.js +2 -0
  35. package/build/interfaces/registry.d.ts +26 -0
  36. package/build/interfaces/registry.js +2 -0
  37. package/build/interfaces/states.d.ts +61 -0
  38. package/build/interfaces/states.js +2 -0
  39. package/build/interfaces/transaction.d.ts +159 -0
  40. package/build/interfaces/transaction.js +12 -0
  41. package/build/interfaces/transport.d.ts +32 -0
  42. package/build/interfaces/transport.js +2 -0
  43. package/build/interfaces/verifiers.d.ts +6 -0
  44. package/build/interfaces/verifiers.js +10 -0
  45. package/build/interfaces/websocket.d.ts +57 -0
  46. package/build/interfaces/websocket.js +2 -0
  47. package/build/paladin.d.ts +265 -0
  48. package/build/paladin.js +739 -0
  49. package/build/transaction.d.ts +8 -0
  50. package/build/transaction.js +17 -0
  51. package/build/utils.d.ts +5 -0
  52. package/build/utils.js +49 -0
  53. package/build/verifier.d.ts +16 -0
  54. package/build/verifier.js +24 -0
  55. package/build/websocket.d.ts +35 -0
  56. package/build/websocket.js +177 -0
  57. package/build.gradle +75 -0
  58. package/package.json +32 -0
  59. package/scripts/abi.mjs +19 -0
  60. package/scripts/contracts.mjs +20 -0
  61. package/scripts/download.mjs +27 -0
  62. package/scripts/util.mjs +42 -0
  63. package/src/domains/noto.ts +420 -0
  64. package/src/domains/pente.ts +287 -0
  65. package/src/domains/zeto.ts +282 -0
  66. package/src/index.ts +10 -0
  67. package/src/interfaces/algorithms.ts +6 -0
  68. package/src/interfaces/blockchainevent.ts +18 -0
  69. package/src/interfaces/blockindex.ts +33 -0
  70. package/src/interfaces/domains.ts +10 -0
  71. package/src/interfaces/index.ts +15 -0
  72. package/src/interfaces/keymanager.ts +35 -0
  73. package/src/interfaces/logger.ts +8 -0
  74. package/src/interfaces/paladin.ts +17 -0
  75. package/src/interfaces/privacygroups.ts +86 -0
  76. package/src/interfaces/query.ts +37 -0
  77. package/src/interfaces/registry.ts +27 -0
  78. package/src/interfaces/states.ts +77 -0
  79. package/src/interfaces/transaction.ts +179 -0
  80. package/src/interfaces/transport.ts +35 -0
  81. package/src/interfaces/verifiers.ts +6 -0
  82. package/src/interfaces/websocket.ts +67 -0
  83. package/src/paladin.ts +1295 -0
  84. package/src/transaction.ts +17 -0
  85. package/src/utils.ts +24 -0
  86. package/src/verifier.ts +27 -0
  87. package/src/websocket.ts +217 -0
  88. package/tsconfig.json +14 -0
@@ -0,0 +1,613 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "PentePrivacyGroup",
4
+ "sourceName": "contracts/domains/pente/PentePrivacyGroup.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [],
8
+ "stateMutability": "nonpayable",
9
+ "type": "constructor"
10
+ },
11
+ {
12
+ "inputs": [
13
+ {
14
+ "internalType": "address",
15
+ "name": "target",
16
+ "type": "address"
17
+ }
18
+ ],
19
+ "name": "AddressEmptyCode",
20
+ "type": "error"
21
+ },
22
+ {
23
+ "inputs": [],
24
+ "name": "ECDSAInvalidSignature",
25
+ "type": "error"
26
+ },
27
+ {
28
+ "inputs": [
29
+ {
30
+ "internalType": "uint256",
31
+ "name": "length",
32
+ "type": "uint256"
33
+ }
34
+ ],
35
+ "name": "ECDSAInvalidSignatureLength",
36
+ "type": "error"
37
+ },
38
+ {
39
+ "inputs": [
40
+ {
41
+ "internalType": "bytes32",
42
+ "name": "s",
43
+ "type": "bytes32"
44
+ }
45
+ ],
46
+ "name": "ECDSAInvalidSignatureS",
47
+ "type": "error"
48
+ },
49
+ {
50
+ "inputs": [
51
+ {
52
+ "internalType": "address",
53
+ "name": "implementation",
54
+ "type": "address"
55
+ }
56
+ ],
57
+ "name": "ERC1967InvalidImplementation",
58
+ "type": "error"
59
+ },
60
+ {
61
+ "inputs": [],
62
+ "name": "ERC1967NonPayable",
63
+ "type": "error"
64
+ },
65
+ {
66
+ "inputs": [],
67
+ "name": "FailedCall",
68
+ "type": "error"
69
+ },
70
+ {
71
+ "inputs": [
72
+ {
73
+ "internalType": "uint256",
74
+ "name": "balance",
75
+ "type": "uint256"
76
+ },
77
+ {
78
+ "internalType": "uint256",
79
+ "name": "needed",
80
+ "type": "uint256"
81
+ }
82
+ ],
83
+ "name": "InsufficientBalance",
84
+ "type": "error"
85
+ },
86
+ {
87
+ "inputs": [],
88
+ "name": "InvalidInitialization",
89
+ "type": "error"
90
+ },
91
+ {
92
+ "inputs": [],
93
+ "name": "NotInitializing",
94
+ "type": "error"
95
+ },
96
+ {
97
+ "inputs": [
98
+ {
99
+ "internalType": "address",
100
+ "name": "signer",
101
+ "type": "address"
102
+ }
103
+ ],
104
+ "name": "PenteDuplicateEndorser",
105
+ "type": "error"
106
+ },
107
+ {
108
+ "inputs": [
109
+ {
110
+ "internalType": "bytes32",
111
+ "name": "txId",
112
+ "type": "bytes32"
113
+ }
114
+ ],
115
+ "name": "PenteDuplicateTransaction",
116
+ "type": "error"
117
+ },
118
+ {
119
+ "inputs": [
120
+ {
121
+ "internalType": "uint256",
122
+ "name": "obtained",
123
+ "type": "uint256"
124
+ },
125
+ {
126
+ "internalType": "uint256",
127
+ "name": "required",
128
+ "type": "uint256"
129
+ }
130
+ ],
131
+ "name": "PenteEndorsementThreshold",
132
+ "type": "error"
133
+ },
134
+ {
135
+ "inputs": [],
136
+ "name": "PenteExternalCallsDisabled",
137
+ "type": "error"
138
+ },
139
+ {
140
+ "inputs": [
141
+ {
142
+ "internalType": "bytes32",
143
+ "name": "input",
144
+ "type": "bytes32"
145
+ }
146
+ ],
147
+ "name": "PenteInputNotAvailable",
148
+ "type": "error"
149
+ },
150
+ {
151
+ "inputs": [
152
+ {
153
+ "internalType": "bytes32",
154
+ "name": "txhash",
155
+ "type": "bytes32"
156
+ },
157
+ {
158
+ "internalType": "address",
159
+ "name": "delegate",
160
+ "type": "address"
161
+ },
162
+ {
163
+ "internalType": "address",
164
+ "name": "sender",
165
+ "type": "address"
166
+ }
167
+ ],
168
+ "name": "PenteInvalidDelegate",
169
+ "type": "error"
170
+ },
171
+ {
172
+ "inputs": [
173
+ {
174
+ "internalType": "address",
175
+ "name": "signer",
176
+ "type": "address"
177
+ }
178
+ ],
179
+ "name": "PenteInvalidEndorser",
180
+ "type": "error"
181
+ },
182
+ {
183
+ "inputs": [
184
+ {
185
+ "internalType": "bytes32",
186
+ "name": "output",
187
+ "type": "bytes32"
188
+ }
189
+ ],
190
+ "name": "PenteOutputAlreadyUnspent",
191
+ "type": "error"
192
+ },
193
+ {
194
+ "inputs": [
195
+ {
196
+ "internalType": "bytes32",
197
+ "name": "read",
198
+ "type": "bytes32"
199
+ }
200
+ ],
201
+ "name": "PenteReadNotAvailable",
202
+ "type": "error"
203
+ },
204
+ {
205
+ "inputs": [
206
+ {
207
+ "internalType": "bytes4",
208
+ "name": "configSelector",
209
+ "type": "bytes4"
210
+ }
211
+ ],
212
+ "name": "PenteUnsupportedConfigType",
213
+ "type": "error"
214
+ },
215
+ {
216
+ "inputs": [],
217
+ "name": "PenteUpgradeNotPreauthorized",
218
+ "type": "error"
219
+ },
220
+ {
221
+ "inputs": [],
222
+ "name": "UUPSUnauthorizedCallContext",
223
+ "type": "error"
224
+ },
225
+ {
226
+ "inputs": [
227
+ {
228
+ "internalType": "bytes32",
229
+ "name": "slot",
230
+ "type": "bytes32"
231
+ }
232
+ ],
233
+ "name": "UUPSUnsupportedProxiableUUID",
234
+ "type": "error"
235
+ },
236
+ {
237
+ "anonymous": false,
238
+ "inputs": [],
239
+ "name": "EIP712DomainChanged",
240
+ "type": "event"
241
+ },
242
+ {
243
+ "anonymous": false,
244
+ "inputs": [
245
+ {
246
+ "indexed": false,
247
+ "internalType": "uint64",
248
+ "name": "version",
249
+ "type": "uint64"
250
+ }
251
+ ],
252
+ "name": "Initialized",
253
+ "type": "event"
254
+ },
255
+ {
256
+ "anonymous": false,
257
+ "inputs": [
258
+ {
259
+ "indexed": false,
260
+ "internalType": "bytes32",
261
+ "name": "txId",
262
+ "type": "bytes32"
263
+ },
264
+ {
265
+ "indexed": false,
266
+ "internalType": "address",
267
+ "name": "delegate",
268
+ "type": "address"
269
+ },
270
+ {
271
+ "indexed": false,
272
+ "internalType": "bytes32",
273
+ "name": "transitionHash",
274
+ "type": "bytes32"
275
+ }
276
+ ],
277
+ "name": "PenteApproved",
278
+ "type": "event"
279
+ },
280
+ {
281
+ "anonymous": false,
282
+ "inputs": [
283
+ {
284
+ "indexed": false,
285
+ "internalType": "bytes32",
286
+ "name": "txId",
287
+ "type": "bytes32"
288
+ },
289
+ {
290
+ "indexed": false,
291
+ "internalType": "bytes32[]",
292
+ "name": "inputs",
293
+ "type": "bytes32[]"
294
+ },
295
+ {
296
+ "indexed": false,
297
+ "internalType": "bytes32[]",
298
+ "name": "reads",
299
+ "type": "bytes32[]"
300
+ },
301
+ {
302
+ "indexed": false,
303
+ "internalType": "bytes32[]",
304
+ "name": "outputs",
305
+ "type": "bytes32[]"
306
+ },
307
+ {
308
+ "indexed": false,
309
+ "internalType": "bytes32[]",
310
+ "name": "info",
311
+ "type": "bytes32[]"
312
+ }
313
+ ],
314
+ "name": "PenteTransition",
315
+ "type": "event"
316
+ },
317
+ {
318
+ "anonymous": false,
319
+ "inputs": [
320
+ {
321
+ "indexed": true,
322
+ "internalType": "address",
323
+ "name": "implementation",
324
+ "type": "address"
325
+ }
326
+ ],
327
+ "name": "Upgraded",
328
+ "type": "event"
329
+ },
330
+ {
331
+ "inputs": [],
332
+ "name": "PenteConfig_V0",
333
+ "outputs": [
334
+ {
335
+ "internalType": "bytes4",
336
+ "name": "",
337
+ "type": "bytes4"
338
+ }
339
+ ],
340
+ "stateMutability": "view",
341
+ "type": "function"
342
+ },
343
+ {
344
+ "inputs": [],
345
+ "name": "UPGRADE_INTERFACE_VERSION",
346
+ "outputs": [
347
+ {
348
+ "internalType": "string",
349
+ "name": "",
350
+ "type": "string"
351
+ }
352
+ ],
353
+ "stateMutability": "view",
354
+ "type": "function"
355
+ },
356
+ {
357
+ "inputs": [
358
+ {
359
+ "internalType": "bytes32",
360
+ "name": "txId",
361
+ "type": "bytes32"
362
+ },
363
+ {
364
+ "internalType": "address",
365
+ "name": "delegate",
366
+ "type": "address"
367
+ },
368
+ {
369
+ "internalType": "bytes32",
370
+ "name": "transitionHash",
371
+ "type": "bytes32"
372
+ },
373
+ {
374
+ "internalType": "bytes[]",
375
+ "name": "signatures",
376
+ "type": "bytes[]"
377
+ }
378
+ ],
379
+ "name": "approveTransition",
380
+ "outputs": [],
381
+ "stateMutability": "nonpayable",
382
+ "type": "function"
383
+ },
384
+ {
385
+ "inputs": [],
386
+ "name": "eip712Domain",
387
+ "outputs": [
388
+ {
389
+ "internalType": "bytes1",
390
+ "name": "fields",
391
+ "type": "bytes1"
392
+ },
393
+ {
394
+ "internalType": "string",
395
+ "name": "name",
396
+ "type": "string"
397
+ },
398
+ {
399
+ "internalType": "string",
400
+ "name": "version",
401
+ "type": "string"
402
+ },
403
+ {
404
+ "internalType": "uint256",
405
+ "name": "chainId",
406
+ "type": "uint256"
407
+ },
408
+ {
409
+ "internalType": "address",
410
+ "name": "verifyingContract",
411
+ "type": "address"
412
+ },
413
+ {
414
+ "internalType": "bytes32",
415
+ "name": "salt",
416
+ "type": "bytes32"
417
+ },
418
+ {
419
+ "internalType": "uint256[]",
420
+ "name": "extensions",
421
+ "type": "uint256[]"
422
+ }
423
+ ],
424
+ "stateMutability": "view",
425
+ "type": "function"
426
+ },
427
+ {
428
+ "inputs": [
429
+ {
430
+ "internalType": "bytes",
431
+ "name": "config",
432
+ "type": "bytes"
433
+ }
434
+ ],
435
+ "name": "initialize",
436
+ "outputs": [],
437
+ "stateMutability": "nonpayable",
438
+ "type": "function"
439
+ },
440
+ {
441
+ "inputs": [
442
+ {
443
+ "internalType": "address",
444
+ "name": "newImplementation",
445
+ "type": "address"
446
+ },
447
+ {
448
+ "internalType": "bytes[]",
449
+ "name": "signatures",
450
+ "type": "bytes[]"
451
+ }
452
+ ],
453
+ "name": "preAuthorizeUpgrade",
454
+ "outputs": [],
455
+ "stateMutability": "nonpayable",
456
+ "type": "function"
457
+ },
458
+ {
459
+ "inputs": [],
460
+ "name": "proxiableUUID",
461
+ "outputs": [
462
+ {
463
+ "internalType": "bytes32",
464
+ "name": "",
465
+ "type": "bytes32"
466
+ }
467
+ ],
468
+ "stateMutability": "view",
469
+ "type": "function"
470
+ },
471
+ {
472
+ "inputs": [
473
+ {
474
+ "internalType": "bytes32",
475
+ "name": "txId",
476
+ "type": "bytes32"
477
+ },
478
+ {
479
+ "components": [
480
+ {
481
+ "internalType": "bytes32[]",
482
+ "name": "inputs",
483
+ "type": "bytes32[]"
484
+ },
485
+ {
486
+ "internalType": "bytes32[]",
487
+ "name": "reads",
488
+ "type": "bytes32[]"
489
+ },
490
+ {
491
+ "internalType": "bytes32[]",
492
+ "name": "outputs",
493
+ "type": "bytes32[]"
494
+ },
495
+ {
496
+ "internalType": "bytes32[]",
497
+ "name": "info",
498
+ "type": "bytes32[]"
499
+ }
500
+ ],
501
+ "internalType": "struct PentePrivacyGroup.States",
502
+ "name": "states",
503
+ "type": "tuple"
504
+ },
505
+ {
506
+ "components": [
507
+ {
508
+ "internalType": "address",
509
+ "name": "contractAddress",
510
+ "type": "address"
511
+ },
512
+ {
513
+ "internalType": "bytes",
514
+ "name": "encodedCall",
515
+ "type": "bytes"
516
+ }
517
+ ],
518
+ "internalType": "struct PentePrivacyGroup.ExternalCall[]",
519
+ "name": "externalCalls",
520
+ "type": "tuple[]"
521
+ },
522
+ {
523
+ "internalType": "bytes[]",
524
+ "name": "signatures",
525
+ "type": "bytes[]"
526
+ }
527
+ ],
528
+ "name": "transition",
529
+ "outputs": [],
530
+ "stateMutability": "nonpayable",
531
+ "type": "function"
532
+ },
533
+ {
534
+ "inputs": [
535
+ {
536
+ "internalType": "bytes32",
537
+ "name": "txId",
538
+ "type": "bytes32"
539
+ },
540
+ {
541
+ "components": [
542
+ {
543
+ "internalType": "bytes32[]",
544
+ "name": "inputs",
545
+ "type": "bytes32[]"
546
+ },
547
+ {
548
+ "internalType": "bytes32[]",
549
+ "name": "reads",
550
+ "type": "bytes32[]"
551
+ },
552
+ {
553
+ "internalType": "bytes32[]",
554
+ "name": "outputs",
555
+ "type": "bytes32[]"
556
+ },
557
+ {
558
+ "internalType": "bytes32[]",
559
+ "name": "info",
560
+ "type": "bytes32[]"
561
+ }
562
+ ],
563
+ "internalType": "struct PentePrivacyGroup.States",
564
+ "name": "states",
565
+ "type": "tuple"
566
+ },
567
+ {
568
+ "components": [
569
+ {
570
+ "internalType": "address",
571
+ "name": "contractAddress",
572
+ "type": "address"
573
+ },
574
+ {
575
+ "internalType": "bytes",
576
+ "name": "encodedCall",
577
+ "type": "bytes"
578
+ }
579
+ ],
580
+ "internalType": "struct PentePrivacyGroup.ExternalCall[]",
581
+ "name": "externalCalls",
582
+ "type": "tuple[]"
583
+ }
584
+ ],
585
+ "name": "transitionWithApproval",
586
+ "outputs": [],
587
+ "stateMutability": "nonpayable",
588
+ "type": "function"
589
+ },
590
+ {
591
+ "inputs": [
592
+ {
593
+ "internalType": "address",
594
+ "name": "newImplementation",
595
+ "type": "address"
596
+ },
597
+ {
598
+ "internalType": "bytes",
599
+ "name": "data",
600
+ "type": "bytes"
601
+ }
602
+ ],
603
+ "name": "upgradeToAndCall",
604
+ "outputs": [],
605
+ "stateMutability": "payable",
606
+ "type": "function"
607
+ }
608
+ ],
609
+ "bytecode": "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161005660201b60201c565b6101d1565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161014891906101b8565b60405180910390a15b50565b5f5f61016461016d60201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101b281610196565b82525050565b5f6020820190506101cb5f8301846101a9565b92915050565b608051613b976101f75f395f81816113f60152818161144b01526116830152613b975ff3fe6080604052600436106100b0575f3560e01c806377516f8c11610068578063ac3cd44f1161004d578063ac3cd44f146101ca578063ad3cb1cc146101f4578063d3e889ce1461021e576100b0565b806377516f8c1461017257806384b0196e1461019a576100b0565b8063439fab9111610099578063439fab91146101045780634f1ef2861461012c57806352d1902d14610148576100b0565b80630a78b6c5146100b4578063223ce098146100dc575b5f5ffd5b3480156100bf575f5ffd5b506100da60048036038101906100d5919061254a565b610246565b005b3480156100e7575f5ffd5b5061010260048036038101906100fd9190612651565b6102a3565b005b34801561010f575f5ffd5b5061012a60048036038101906101259190612765565b6102d1565b005b610146600480360381019061014191906128e8565b610601565b005b348015610153575f5ffd5b5061015c610620565b6040516101699190612951565b60405180910390f35b34801561017d575f5ffd5b506101986004803603810190610193919061296a565b610651565b005b3480156101a5575f5ffd5b506101ae6106ed565b6040516101c19796959493929190612b80565b60405180910390f35b3480156101d5575f5ffd5b506101de6107f6565b6040516101eb9190612c3c565b60405180910390f35b3480156101ff575f5ffd5b50610208610800565b6040516102159190612c55565b60405180910390f35b348015610229575f5ffd5b50610244600480360381019061023f9190612c75565b610839565b005b5f6102508461092e565b905061025d81848461098c565b8360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f6102af868686610d4d565b90506102bc81848461098c565b6102c887878787610ecd565b50505050505050565b5f6102da6113cb565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156103225750825b90505f60018367ffffffffffffffff1614801561035557505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610363575080155b1561039a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156103e7576001855f0160086101000a81548160ff0219169083151502179055505b61045b6040518060400160405280600581526020017f70656e74650000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e310000000000000000000000000000000000000000000000000000008152506113de565b5f87875f9060049261046f93929190612d0a565b9061047a9190612d5a565b90506201000060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610560575f5f5f8a8a60049080926104dd93929190612d0a565b8101906104ea9190612f40565b9350935093505060405180604001604052808481526020018381525060045f820151815f0155602082015181600101908051906020019061052c9291906123dc565b509050505f811461053e576001610540565b5f5b60065f6101000a81548160ff02191690831515021790555050505061059d565b806040517f1eb38a7c0000000000000000000000000000000000000000000000000000000081526004016105949190612c3c565b60405180910390fd5b5083156105f8575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516105ef9190613031565b60405180910390a15b50505050505050565b6106096113f4565b610612826114da565b61061c8282611563565b5050565b5f610629611681565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61065c83838361098c565b8360015f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb9ae1f7c1a7315ba3a1ca3b57db9ff65646e18265c9b0e79e8423b0fd7c4839c8585856040516106de9392919061304a565b60405180910390a15050505050565b5f6060805f5f5f60605f6106ff611708565b90505f5f1b815f015414801561071a57505f5f1b8160010154145b610759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610750906130c9565b60405180910390fd5b61076161172f565b6107696117cd565b46305f5f1b5f67ffffffffffffffff811115610788576107876127c4565b5b6040519080825280602002602001820160405280156107b65781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6201000060e01b81565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f610845848484610d4d565b90503373ffffffffffffffffffffffffffffffffffffffff1660015f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461091b578060015f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517fa69a6005000000000000000000000000000000000000000000000000000000008152600401610912939291906130e7565b60405180910390fd5b61092785858585610ecd565b5050505050565b5f5f7f43c66ea365f48b9715a163ea21bbc96c68341d6bf224d1d6cb216b57b8c4ea398360405160200161096392919061311c565b6040516020818303038152906040528051906020012090506109848161186b565b915050919050565b5f6004600101805480602002602001604051908101604052809291908181526020018280548015610a0f57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116109c6575b505050505090505f8383905067ffffffffffffffff811115610a3457610a336127c4565b5b604051908082528060200260200182016040528015610a625781602001602082028036833780820191505090505b5090505f5f5f90505b85859050811015610cf5575f610ae788888885818110610a8e57610a8d613143565b5b9050602002810190610aa0919061317c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611884565b90505f5f90505b83811015610b8d57848181518110610b0957610b08613143565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b8057816040517f4f8d7016000000000000000000000000000000000000000000000000000000008152600401610b7791906131de565b60405180910390fd5b8080600101915050610aee565b505f5f5f90505b8651811015610c1957868181518110610bb057610baf613143565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c0c57868181518110610bfd57610bfc613143565b5b60200260200101519150610c19565b8080600101915050610b94565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c8a57816040517fb9cb6d18000000000000000000000000000000000000000000000000000000008152600401610c8191906131de565b60405180910390fd5b80858581518110610c9e57610c9d613143565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508380610ce390613224565b94505050508080600101915050610a6b565b5060045f0154811015610d45578060045f01546040517f71261549000000000000000000000000000000000000000000000000000000008152600401610d3c92919061326b565b60405180910390fd5b505050505050565b5f5f6040518060a00160405280606a8152602001613ac1606a9139604051806060016040528060378152602001613b2b60379139604051602001610d929291906132cc565b6040516020818303038152906040528051906020012085805f0190610db791906132ef565b604051602001610dc89291906133c3565b60405160208183030381529060405280519060200120868060200190610dee91906132ef565b604051602001610dff9291906133c3565b60405160208183030381529060405280519060200120878060400190610e2591906132ef565b604051602001610e369291906133c3565b60405160208183030381529060405280519060200120888060600190610e5c91906132ef565b604051602001610e6d9291906133c3565b60405160208183030381529060405280519060200120610e8d89896118ae565b604051602001610ea2969594939291906133db565b604051602081830303815290604052805190602001209050610ec38161186b565b9150509392505050565b5f151560025f8681526020019081526020015f205f9054906101000a900460ff16151514610f3257836040517fbcffec87000000000000000000000000000000000000000000000000000000008152600401610f299190612951565b60405180910390fd5b600160025f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5f90505b83805f0190610f6f91906132ef565b9050811015611074575f5f85805f0190610f8991906132ef565b84818110610f9a57610f99613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff166110225783805f0190610fce91906132ef565b82818110610fdf57610fde613143565b5b905060200201356040517fa80f89f40000000000000000000000000000000000000000000000000000000081526004016110199190612951565b60405180910390fd5b5f5f85805f019061103391906132ef565b8481811061104457611043613143565b5b9050602002013581526020019081526020015f205f6101000a81549060ff02191690558080600101915050610f60565b505f5f90505b83806020019061108a91906132ef565b905081101561114c575f5f8580602001906110a591906132ef565b848181106110b6576110b5613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff1661113f578380602001906110eb91906132ef565b828181106110fc576110fb613143565b5b905060200201356040517fa7a3ace30000000000000000000000000000000000000000000000000000000081526004016111369190612951565b60405180910390fd5b808060010191505061107a565b505f5f90505b83806040019061116291906132ef565b9050811015611274575f5f85806040019061117d91906132ef565b8481811061118e5761118d613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff1615611218578380604001906111c491906132ef565b828181106111d5576111d4613143565b5b905060200201356040517ff6b3931c00000000000000000000000000000000000000000000000000000000815260040161120f9190612951565b60405180910390fd5b60015f5f86806040019061122c91906132ef565b8581811061123d5761123c613143565b5b9050602002013581526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611152565b507f156c14fb5e9a70b196a7d32f40d526ee002750cb79cc5be80567856f30aeab228484805f01906112a691906132ef565b8680602001906112b691906132ef565b8880604001906112c691906132ef565b8a80606001906112d691906132ef565b6040516112eb999897969594939291906134a5565b60405180910390a15f5f90505b828290508110156113c4576113b783838381811061131957611318613143565b5b905060200281019061132b919061351a565b5f01602081019061133c9190613541565b84848481811061134f5761134e613143565b5b9050602002810190611361919061351a565b8060200190611370919061317c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611a52565b80806001019150506112f8565b5050505050565b5f5f6113d5611ac5565b90508091505090565b6113e6611aee565b6113f08282611b2e565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806114a157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611488611b7f565b73ffffffffffffffffffffffffffffffffffffffff1614155b156114d8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611560576040517fa5762b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156115cb57506040513d601f19601f820116820180604052508101906115c89190613580565b60015b61160c57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161160391906131de565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461167257806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016116699190612951565b60405180910390fd5b61167c8383611bd2565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611706576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f61173a611708565b905080600201805461174b906135d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611777906135d8565b80156117c25780601f10611799576101008083540402835291602001916117c2565b820191905f5260205f20905b8154815290600101906020018083116117a557829003601f168201915b505050505091505090565b60605f6117d8611708565b90508060030180546117e9906135d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611815906135d8565b80156118605780601f1061183757610100808354040283529160200191611860565b820191905f5260205f20905b81548152906001019060200180831161184357829003601f168201915b505050505091505090565b5f61187d611877611c44565b83611c52565b9050919050565b5f5f5f5f6118928686611c92565b9250925092506118a28282611ce7565b82935050505092915050565b5f5f8383905067ffffffffffffffff8111156118cd576118cc6127c4565b5b6040519080825280602002602001820160405280156118fb5781602001602082028036833780820191505090505b5090505f5f90505b84849050811015611a2157604051806060016040528060378152602001613b2b603791396040516020016119379190613608565b604051602081830303815290604052805190602001208585838181106119605761195f613143565b5b9050602002810190611972919061351a565b5f0160208101906119839190613541565b86868481811061199657611995613143565b5b90506020028101906119a8919061351a565b80602001906119b7919061317c565b6040516119c592919061364c565b60405180910390206040516020016119df9392919061304a565b60405160208183030381529060405280519060200120828281518110611a0857611a07613143565b5b6020026020010181815250508080600101915050611903565b5080604051602001611a33919061370b565b6040516020818303038152906040528051906020012091505092915050565b60065f9054906101000a900460ff16611a97576040517f3802fedd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac0818373ffffffffffffffffffffffffffffffffffffffff16611e4990919063ffffffff16565b505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b611af6611e5e565b611b2c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611b36611aee565b5f611b3f611708565b905082816002019081611b5291906138ac565b5081816003019081611b6491906138ac565b505f5f1b815f01819055505f5f1b8160010181905550505050565b5f611bab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b611e7c565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bdb82611e85565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115611c3757611c318282611f4e565b50611c40565b611c3f611fce565b5b5050565b5f611c4d61200a565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f6041845103611cd2575f5f5f602087015192506040870151915060608701515f1a9050611cc48882858561206d565b955095509550505050611ce0565b5f600285515f1b9250925092505b9250925092565b5f6003811115611cfa57611cf961397b565b5b826003811115611d0d57611d0c61397b565b5b0315611e455760016003811115611d2757611d2661397b565b5b826003811115611d3a57611d3961397b565b5b03611d71576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611d8557611d8461397b565b5b826003811115611d9857611d9761397b565b5b03611ddc57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611dd391906139a8565b60405180910390fd5b600380811115611def57611dee61397b565b5b826003811115611e0257611e0161397b565b5b03611e4457806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611e3b9190612951565b60405180910390fd5b5b5050565b6060611e5683835f612154565b905092915050565b5f611e676113cb565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03611ee057806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611ed791906131de565b60405180910390fd5b80611f0c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b611e7c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611f7791906139fb565b5f60405180830381855af49150503d805f8114611faf576040519150601f19603f3d011682016040523d82523d5f602084013e611fb4565b606091505b5091509150611fc485838361221f565b9250505092915050565b5f341115612008576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6120346122ac565b61203c612322565b4630604051602001612052959493929190613a11565b60405160208183030381529060405280519060200120905090565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156120a9575f60038592509250925061214a565b5f6001888888886040515f81526020016040526040516120cc9493929190613a7d565b6020604051602081039080840390855afa1580156120ec573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361213d575f60015f5f1b9350935093505061214a565b805f5f5f1b935093509350505b9450945094915050565b60608147101561219d5747826040517fcf47918100000000000000000000000000000000000000000000000000000000815260040161219492919061326b565b60405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff1684866040516121c591906139fb565b5f6040518083038185875af1925050503d805f81146121ff576040519150601f19603f3d011682016040523d82523d5f602084013e612204565b606091505b509150915061221486838361221f565b925050509392505050565b6060826122345761222f82612399565b6122a4565b5f825114801561225a57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561229c57836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161229391906131de565b60405180910390fd5b8190506122a5565b5b9392505050565b5f5f6122b6611708565b90505f6122c161172f565b90505f815111156122dd5780805190602001209250505061231f565b5f825f015490505f5f1b81146122f85780935050505061231f565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f5f61232c611708565b90505f6123376117cd565b90505f8151111561235357808051906020012092505050612396565b5f826001015490505f5f1b811461236f57809350505050612396565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156123aa57805160208201fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215612452579160200282015b82811115612451578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906123fa565b5b50905061245f9190612463565b5090565b5b8082111561247a575f815f905550600101612464565b5090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b88261248f565b9050919050565b6124c8816124ae565b81146124d2575f5ffd5b50565b5f813590506124e3816124bf565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261250a576125096124e9565b5b8235905067ffffffffffffffff811115612527576125266124ed565b5b602083019150836020820283011115612543576125426124f1565b5b9250929050565b5f5f5f6040848603121561256157612560612487565b5b5f61256e868287016124d5565b935050602084013567ffffffffffffffff81111561258f5761258e61248b565b5b61259b868287016124f5565b92509250509250925092565b5f819050919050565b6125b9816125a7565b81146125c3575f5ffd5b50565b5f813590506125d4816125b0565b92915050565b5f5ffd5b5f608082840312156125f3576125f26125da565b5b81905092915050565b5f5f83601f840112612611576126106124e9565b5b8235905067ffffffffffffffff81111561262e5761262d6124ed565b5b60208301915083602082028301111561264a576126496124f1565b5b9250929050565b5f5f5f5f5f5f6080878903121561266b5761266a612487565b5b5f61267889828a016125c6565b965050602087013567ffffffffffffffff8111156126995761269861248b565b5b6126a589828a016125de565b955050604087013567ffffffffffffffff8111156126c6576126c561248b565b5b6126d289828a016125fc565b9450945050606087013567ffffffffffffffff8111156126f5576126f461248b565b5b61270189828a016124f5565b92509250509295509295509295565b5f5f83601f840112612725576127246124e9565b5b8235905067ffffffffffffffff811115612742576127416124ed565b5b60208301915083600182028301111561275e5761275d6124f1565b5b9250929050565b5f5f6020838503121561277b5761277a612487565b5b5f83013567ffffffffffffffff8111156127985761279761248b565b5b6127a485828601612710565b92509250509250929050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127fa826127b4565b810181811067ffffffffffffffff82111715612819576128186127c4565b5b80604052505050565b5f61282b61247e565b905061283782826127f1565b919050565b5f67ffffffffffffffff821115612856576128556127c4565b5b61285f826127b4565b9050602081019050919050565b828183375f83830152505050565b5f61288c6128878461283c565b612822565b9050828152602081018484840111156128a8576128a76127b0565b5b6128b384828561286c565b509392505050565b5f82601f8301126128cf576128ce6124e9565b5b81356128df84826020860161287a565b91505092915050565b5f5f604083850312156128fe576128fd612487565b5b5f61290b858286016124d5565b925050602083013567ffffffffffffffff81111561292c5761292b61248b565b5b612938858286016128bb565b9150509250929050565b61294b816125a7565b82525050565b5f6020820190506129645f830184612942565b92915050565b5f5f5f5f5f6080868803121561298357612982612487565b5b5f612990888289016125c6565b95505060206129a1888289016124d5565b94505060406129b2888289016125c6565b935050606086013567ffffffffffffffff8111156129d3576129d261248b565b5b6129df888289016124f5565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612a22816129ee565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a5f578082015181840152602081019050612a44565b5f8484015250505050565b5f612a7482612a28565b612a7e8185612a32565b9350612a8e818560208601612a42565b612a97816127b4565b840191505092915050565b5f819050919050565b612ab481612aa2565b82525050565b612ac3816124ae565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612afb81612aa2565b82525050565b5f612b0c8383612af2565b60208301905092915050565b5f602082019050919050565b5f612b2e82612ac9565b612b388185612ad3565b9350612b4383612ae3565b805f5b83811015612b73578151612b5a8882612b01565b9750612b6583612b18565b925050600181019050612b46565b5085935050505092915050565b5f60e082019050612b935f83018a612a19565b8181036020830152612ba58189612a6a565b90508181036040830152612bb98188612a6a565b9050612bc86060830187612aab565b612bd56080830186612aba565b612be260a0830185612942565b81810360c0830152612bf48184612b24565b905098975050505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3681612c02565b82525050565b5f602082019050612c4f5f830184612c2d565b92915050565b5f6020820190508181035f830152612c6d8184612a6a565b905092915050565b5f5f5f5f60608587031215612c8d57612c8c612487565b5b5f612c9a878288016125c6565b945050602085013567ffffffffffffffff811115612cbb57612cba61248b565b5b612cc7878288016125de565b935050604085013567ffffffffffffffff811115612ce857612ce761248b565b5b612cf4878288016125fc565b925092505092959194509250565b5f5ffd5b5f5ffd5b5f5f85851115612d1d57612d1c612d02565b5b83861115612d2e57612d2d612d06565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f612d658383612d44565b82612d708135612c02565b92506004821015612db057612dab7fffffffff0000000000000000000000000000000000000000000000000000000083600403600802612d4e565b831692505b505092915050565b5f67ffffffffffffffff821115612dd257612dd16127c4565b5b612ddb826127b4565b9050602081019050919050565b5f612dfa612df584612db8565b612822565b905082815260208101848484011115612e1657612e156127b0565b5b612e2184828561286c565b509392505050565b5f82601f830112612e3d57612e3c6124e9565b5b8135612e4d848260208601612de8565b91505092915050565b612e5f81612aa2565b8114612e69575f5ffd5b50565b5f81359050612e7a81612e56565b92915050565b5f67ffffffffffffffff821115612e9a57612e996127c4565b5b602082029050602081019050919050565b5f612ebd612eb884612e80565b612822565b90508083825260208201905060208402830185811115612ee057612edf6124f1565b5b835b81811015612f095780612ef588826124d5565b845260208401935050602081019050612ee2565b5050509392505050565b5f82601f830112612f2757612f266124e9565b5b8135612f37848260208601612eab565b91505092915050565b5f5f5f5f60808587031215612f5857612f57612487565b5b5f85013567ffffffffffffffff811115612f7557612f7461248b565b5b612f8187828801612e29565b9450506020612f9287828801612e6c565b935050604085013567ffffffffffffffff811115612fb357612fb261248b565b5b612fbf87828801612f13565b9250506060612fd087828801612e6c565b91505092959194509250565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61301b61301661301184612fdc565b612ff8565b612fe5565b9050919050565b61302b81613001565b82525050565b5f6020820190506130445f830184613022565b92915050565b5f60608201905061305d5f830186612942565b61306a6020830185612aba565b6130776040830184612942565b949350505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f6130b3601583612a32565b91506130be8261307f565b602082019050919050565b5f6020820190508181035f8301526130e0816130a7565b9050919050565b5f6060820190506130fa5f830186612942565b6131076020830185612aba565b6131146040830184612aba565b949350505050565b5f60408201905061312f5f830185612942565b61313c6020830184612aba565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f8335600160200384360303811261319857613197613170565b5b80840192508235915067ffffffffffffffff8211156131ba576131b9613174565b5b6020830192506001820236038313156131d6576131d5613178565b5b509250929050565b5f6020820190506131f15f830184612aba565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61322e82612aa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132605761325f6131f7565b5b600182019050919050565b5f60408201905061327e5f830185612aab565b61328b6020830184612aab565b9392505050565b5f81905092915050565b5f6132a682612a28565b6132b08185613292565b93506132c0818560208601612a42565b80840191505092915050565b5f6132d7828561329c565b91506132e3828461329c565b91508190509392505050565b5f5f8335600160200384360303811261330b5761330a613170565b5b80840192508235915067ffffffffffffffff82111561332d5761332c613174565b5b60208301925060208202360383131561334957613348613178565b5b509250929050565b5f81905092915050565b5f5ffd5b82818337505050565b5f6133738385613351565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156133a6576133a561335b565b5b6020830292506133b783858461335f565b82840190509392505050565b5f6133cf828486613368565b91508190509392505050565b5f60c0820190506133ee5f830189612942565b6133fb6020830188612942565b6134086040830187612942565b6134156060830186612942565b6134226080830185612942565b61342f60a0830184612942565b979650505050505050565b5f82825260208201905092915050565b5f613455838561343a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156134885761348761335b565b5b60208302925061349983858461335f565b82840190509392505050565b5f60a0820190506134b85f83018c612942565b81810360208301526134cb818a8c61344a565b905081810360408301526134e081888a61344a565b905081810360608301526134f581868861344a565b9050818103608083015261350a81848661344a565b90509a9950505050505050505050565b5f8235600160400383360303811261353557613534613170565b5b80830191505092915050565b5f6020828403121561355657613555612487565b5b5f613563848285016124d5565b91505092915050565b5f8151905061357a816125b0565b92915050565b5f6020828403121561359557613594612487565b5b5f6135a28482850161356c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135ef57607f821691505b602082108103613602576136016135ab565b5b50919050565b5f613613828461329c565b915081905092915050565b5f81905092915050565b5f613633838561361e565b935061364083858461286c565b82840190509392505050565b5f613658828486613628565b91508190509392505050565b5f81519050919050565b5f819050602082019050919050565b613686816125a7565b82525050565b5f613697838361367d565b60208301905092915050565b5f602082019050919050565b5f6136b982613664565b6136c38185613351565b93506136ce8361366e565b805f5b838110156136fe5781516136e5888261368c565b97506136f0836136a3565b9250506001810190506136d1565b5085935050505092915050565b5f61371682846136af565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f600883026137717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d4e565b61377b8683612d4e565b95508019841693508086168417925050509392505050565b5f6137ad6137a86137a384612aa2565b612ff8565b612aa2565b9050919050565b5f819050919050565b6137c683613793565b6137da6137d2826137b4565b848454613742565b825550505050565b5f5f905090565b6137f16137e2565b6137fc8184846137bd565b505050565b5b8181101561381f576138145f826137e9565b600181019050613802565b5050565b601f8211156138645761383581613721565b61383e84613733565b8101602085101561384d578190505b61386161385985613733565b830182613801565b50505b505050565b5f82821c905092915050565b5f6138845f1984600802613869565b1980831691505092915050565b5f61389c8383613875565b9150826002028217905092915050565b6138b582612a28565b67ffffffffffffffff8111156138ce576138cd6127c4565b5b6138d882546135d8565b6138e3828285613823565b5f60209050601f831160018114613914575f8415613902578287015190505b61390c8582613891565b865550613973565b601f19841661392286613721565b5f5b8281101561394957848901518255600182019150602085019450602081019050613924565b868310156139665784890151613962601f891682613875565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6020820190506139bb5f830184612aab565b92915050565b5f81519050919050565b5f6139d5826139c1565b6139df818561361e565b93506139ef818560208601612a42565b80840191505092915050565b5f613a0682846139cb565b915081905092915050565b5f60a082019050613a245f830188612942565b613a316020830187612942565b613a3e6040830186612942565b613a4b6060830185612aab565b613a586080830184612aba565b9695505050505050565b5f60ff82169050919050565b613a7781613a62565b82525050565b5f608082019050613a905f830187612942565b613a9d6020830186613a6e565b613aaa6040830185612942565b613ab76060830184612942565b9594505050505056fe5472616e736974696f6e28627974657333325b5d20696e707574732c627974657333325b5d2072656164732c627974657333325b5d206f7574707574732c627974657333325b5d20696e666f2c45787465726e616c43616c6c5b5d2065787465726e616c43616c6c732945787465726e616c43616c6c286164647265737320636f6e7472616374416464726573732c627974657320656e636f64656443616c6c29a2646970667358221220f6cd270be5ed83c7702cdf6c1bcd5208637052664c24195bd0d977212118d97d64736f6c634300081e0033",
610
+ "deployedBytecode": "0x6080604052600436106100b0575f3560e01c806377516f8c11610068578063ac3cd44f1161004d578063ac3cd44f146101ca578063ad3cb1cc146101f4578063d3e889ce1461021e576100b0565b806377516f8c1461017257806384b0196e1461019a576100b0565b8063439fab9111610099578063439fab91146101045780634f1ef2861461012c57806352d1902d14610148576100b0565b80630a78b6c5146100b4578063223ce098146100dc575b5f5ffd5b3480156100bf575f5ffd5b506100da60048036038101906100d5919061254a565b610246565b005b3480156100e7575f5ffd5b5061010260048036038101906100fd9190612651565b6102a3565b005b34801561010f575f5ffd5b5061012a60048036038101906101259190612765565b6102d1565b005b610146600480360381019061014191906128e8565b610601565b005b348015610153575f5ffd5b5061015c610620565b6040516101699190612951565b60405180910390f35b34801561017d575f5ffd5b506101986004803603810190610193919061296a565b610651565b005b3480156101a5575f5ffd5b506101ae6106ed565b6040516101c19796959493929190612b80565b60405180910390f35b3480156101d5575f5ffd5b506101de6107f6565b6040516101eb9190612c3c565b60405180910390f35b3480156101ff575f5ffd5b50610208610800565b6040516102159190612c55565b60405180910390f35b348015610229575f5ffd5b50610244600480360381019061023f9190612c75565b610839565b005b5f6102508461092e565b905061025d81848461098c565b8360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f6102af868686610d4d565b90506102bc81848461098c565b6102c887878787610ecd565b50505050505050565b5f6102da6113cb565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156103225750825b90505f60018367ffffffffffffffff1614801561035557505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610363575080155b1561039a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156103e7576001855f0160086101000a81548160ff0219169083151502179055505b61045b6040518060400160405280600581526020017f70656e74650000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f302e302e310000000000000000000000000000000000000000000000000000008152506113de565b5f87875f9060049261046f93929190612d0a565b9061047a9190612d5a565b90506201000060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610560575f5f5f8a8a60049080926104dd93929190612d0a565b8101906104ea9190612f40565b9350935093505060405180604001604052808481526020018381525060045f820151815f0155602082015181600101908051906020019061052c9291906123dc565b509050505f811461053e576001610540565b5f5b60065f6101000a81548160ff02191690831515021790555050505061059d565b806040517f1eb38a7c0000000000000000000000000000000000000000000000000000000081526004016105949190612c3c565b60405180910390fd5b5083156105f8575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516105ef9190613031565b60405180910390a15b50505050505050565b6106096113f4565b610612826114da565b61061c8282611563565b5050565b5f610629611681565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b61065c83838361098c565b8360015f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb9ae1f7c1a7315ba3a1ca3b57db9ff65646e18265c9b0e79e8423b0fd7c4839c8585856040516106de9392919061304a565b60405180910390a15050505050565b5f6060805f5f5f60605f6106ff611708565b90505f5f1b815f015414801561071a57505f5f1b8160010154145b610759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610750906130c9565b60405180910390fd5b61076161172f565b6107696117cd565b46305f5f1b5f67ffffffffffffffff811115610788576107876127c4565b5b6040519080825280602002602001820160405280156107b65781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b6201000060e01b81565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f610845848484610d4d565b90503373ffffffffffffffffffffffffffffffffffffffff1660015f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461091b578060015f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336040517fa69a6005000000000000000000000000000000000000000000000000000000008152600401610912939291906130e7565b60405180910390fd5b61092785858585610ecd565b5050505050565b5f5f7f43c66ea365f48b9715a163ea21bbc96c68341d6bf224d1d6cb216b57b8c4ea398360405160200161096392919061311c565b6040516020818303038152906040528051906020012090506109848161186b565b915050919050565b5f6004600101805480602002602001604051908101604052809291908181526020018280548015610a0f57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116109c6575b505050505090505f8383905067ffffffffffffffff811115610a3457610a336127c4565b5b604051908082528060200260200182016040528015610a625781602001602082028036833780820191505090505b5090505f5f5f90505b85859050811015610cf5575f610ae788888885818110610a8e57610a8d613143565b5b9050602002810190610aa0919061317c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611884565b90505f5f90505b83811015610b8d57848181518110610b0957610b08613143565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b8057816040517f4f8d7016000000000000000000000000000000000000000000000000000000008152600401610b7791906131de565b60405180910390fd5b8080600101915050610aee565b505f5f5f90505b8651811015610c1957868181518110610bb057610baf613143565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c0c57868181518110610bfd57610bfc613143565b5b60200260200101519150610c19565b8080600101915050610b94565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c8a57816040517fb9cb6d18000000000000000000000000000000000000000000000000000000008152600401610c8191906131de565b60405180910390fd5b80858581518110610c9e57610c9d613143565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508380610ce390613224565b94505050508080600101915050610a6b565b5060045f0154811015610d45578060045f01546040517f71261549000000000000000000000000000000000000000000000000000000008152600401610d3c92919061326b565b60405180910390fd5b505050505050565b5f5f6040518060a00160405280606a8152602001613ac1606a9139604051806060016040528060378152602001613b2b60379139604051602001610d929291906132cc565b6040516020818303038152906040528051906020012085805f0190610db791906132ef565b604051602001610dc89291906133c3565b60405160208183030381529060405280519060200120868060200190610dee91906132ef565b604051602001610dff9291906133c3565b60405160208183030381529060405280519060200120878060400190610e2591906132ef565b604051602001610e369291906133c3565b60405160208183030381529060405280519060200120888060600190610e5c91906132ef565b604051602001610e6d9291906133c3565b60405160208183030381529060405280519060200120610e8d89896118ae565b604051602001610ea2969594939291906133db565b604051602081830303815290604052805190602001209050610ec38161186b565b9150509392505050565b5f151560025f8681526020019081526020015f205f9054906101000a900460ff16151514610f3257836040517fbcffec87000000000000000000000000000000000000000000000000000000008152600401610f299190612951565b60405180910390fd5b600160025f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f5f90505b83805f0190610f6f91906132ef565b9050811015611074575f5f85805f0190610f8991906132ef565b84818110610f9a57610f99613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff166110225783805f0190610fce91906132ef565b82818110610fdf57610fde613143565b5b905060200201356040517fa80f89f40000000000000000000000000000000000000000000000000000000081526004016110199190612951565b60405180910390fd5b5f5f85805f019061103391906132ef565b8481811061104457611043613143565b5b9050602002013581526020019081526020015f205f6101000a81549060ff02191690558080600101915050610f60565b505f5f90505b83806020019061108a91906132ef565b905081101561114c575f5f8580602001906110a591906132ef565b848181106110b6576110b5613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff1661113f578380602001906110eb91906132ef565b828181106110fc576110fb613143565b5b905060200201356040517fa7a3ace30000000000000000000000000000000000000000000000000000000081526004016111369190612951565b60405180910390fd5b808060010191505061107a565b505f5f90505b83806040019061116291906132ef565b9050811015611274575f5f85806040019061117d91906132ef565b8481811061118e5761118d613143565b5b9050602002013581526020019081526020015f205f9054906101000a900460ff1615611218578380604001906111c491906132ef565b828181106111d5576111d4613143565b5b905060200201356040517ff6b3931c00000000000000000000000000000000000000000000000000000000815260040161120f9190612951565b60405180910390fd5b60015f5f86806040019061122c91906132ef565b8581811061123d5761123c613143565b5b9050602002013581526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611152565b507f156c14fb5e9a70b196a7d32f40d526ee002750cb79cc5be80567856f30aeab228484805f01906112a691906132ef565b8680602001906112b691906132ef565b8880604001906112c691906132ef565b8a80606001906112d691906132ef565b6040516112eb999897969594939291906134a5565b60405180910390a15f5f90505b828290508110156113c4576113b783838381811061131957611318613143565b5b905060200281019061132b919061351a565b5f01602081019061133c9190613541565b84848481811061134f5761134e613143565b5b9050602002810190611361919061351a565b8060200190611370919061317c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611a52565b80806001019150506112f8565b5050505050565b5f5f6113d5611ac5565b90508091505090565b6113e6611aee565b6113f08282611b2e565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806114a157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611488611b7f565b73ffffffffffffffffffffffffffffffffffffffff1614155b156114d8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611560576040517fa5762b7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156115cb57506040513d601f19601f820116820180604052508101906115c89190613580565b60015b61160c57816040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161160391906131de565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b811461167257806040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004016116699190612951565b60405180910390fd5b61167c8383611bd2565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611706576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f61173a611708565b905080600201805461174b906135d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611777906135d8565b80156117c25780601f10611799576101008083540402835291602001916117c2565b820191905f5260205f20905b8154815290600101906020018083116117a557829003601f168201915b505050505091505090565b60605f6117d8611708565b90508060030180546117e9906135d8565b80601f0160208091040260200160405190810160405280929190818152602001828054611815906135d8565b80156118605780601f1061183757610100808354040283529160200191611860565b820191905f5260205f20905b81548152906001019060200180831161184357829003601f168201915b505050505091505090565b5f61187d611877611c44565b83611c52565b9050919050565b5f5f5f5f6118928686611c92565b9250925092506118a28282611ce7565b82935050505092915050565b5f5f8383905067ffffffffffffffff8111156118cd576118cc6127c4565b5b6040519080825280602002602001820160405280156118fb5781602001602082028036833780820191505090505b5090505f5f90505b84849050811015611a2157604051806060016040528060378152602001613b2b603791396040516020016119379190613608565b604051602081830303815290604052805190602001208585838181106119605761195f613143565b5b9050602002810190611972919061351a565b5f0160208101906119839190613541565b86868481811061199657611995613143565b5b90506020028101906119a8919061351a565b80602001906119b7919061317c565b6040516119c592919061364c565b60405180910390206040516020016119df9392919061304a565b60405160208183030381529060405280519060200120828281518110611a0857611a07613143565b5b6020026020010181815250508080600101915050611903565b5080604051602001611a33919061370b565b6040516020818303038152906040528051906020012091505092915050565b60065f9054906101000a900460ff16611a97576040517f3802fedd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ac0818373ffffffffffffffffffffffffffffffffffffffff16611e4990919063ffffffff16565b505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b611af6611e5e565b611b2c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611b36611aee565b5f611b3f611708565b905082816002019081611b5291906138ac565b5081816003019081611b6491906138ac565b505f5f1b815f01819055505f5f1b8160010181905550505050565b5f611bab7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b611e7c565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bdb82611e85565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115611c3757611c318282611f4e565b50611c40565b611c3f611fce565b5b5050565b5f611c4d61200a565b905090565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f6041845103611cd2575f5f5f602087015192506040870151915060608701515f1a9050611cc48882858561206d565b955095509550505050611ce0565b5f600285515f1b9250925092505b9250925092565b5f6003811115611cfa57611cf961397b565b5b826003811115611d0d57611d0c61397b565b5b0315611e455760016003811115611d2757611d2661397b565b5b826003811115611d3a57611d3961397b565b5b03611d71576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611d8557611d8461397b565b5b826003811115611d9857611d9761397b565b5b03611ddc57805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611dd391906139a8565b60405180910390fd5b600380811115611def57611dee61397b565b5b826003811115611e0257611e0161397b565b5b03611e4457806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611e3b9190612951565b60405180910390fd5b5b5050565b6060611e5683835f612154565b905092915050565b5f611e676113cb565b5f0160089054906101000a900460ff16905090565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b03611ee057806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611ed791906131de565b60405180910390fd5b80611f0c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b611e7c565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611f7791906139fb565b5f60405180830381855af49150503d805f8114611faf576040519150601f19603f3d011682016040523d82523d5f602084013e611fb4565b606091505b5091509150611fc485838361221f565b9250505092915050565b5f341115612008576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6120346122ac565b61203c612322565b4630604051602001612052959493929190613a11565b60405160208183030381529060405280519060200120905090565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156120a9575f60038592509250925061214a565b5f6001888888886040515f81526020016040526040516120cc9493929190613a7d565b6020604051602081039080840390855afa1580156120ec573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361213d575f60015f5f1b9350935093505061214a565b805f5f5f1b935093509350505b9450945094915050565b60608147101561219d5747826040517fcf47918100000000000000000000000000000000000000000000000000000000815260040161219492919061326b565b60405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff1684866040516121c591906139fb565b5f6040518083038185875af1925050503d805f81146121ff576040519150601f19603f3d011682016040523d82523d5f602084013e612204565b606091505b509150915061221486838361221f565b925050509392505050565b6060826122345761222f82612399565b6122a4565b5f825114801561225a57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561229c57836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161229391906131de565b60405180910390fd5b8190506122a5565b5b9392505050565b5f5f6122b6611708565b90505f6122c161172f565b90505f815111156122dd5780805190602001209250505061231f565b5f825f015490505f5f1b81146122f85780935050505061231f565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f5f61232c611708565b90505f6123376117cd565b90505f8151111561235357808051906020012092505050612396565b5f826001015490505f5f1b811461236f57809350505050612396565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f815111156123aa57805160208201fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828054828255905f5260205f20908101928215612452579160200282015b82811115612451578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906123fa565b5b50905061245f9190612463565b5090565b5b8082111561247a575f815f905550600101612464565b5090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b88261248f565b9050919050565b6124c8816124ae565b81146124d2575f5ffd5b50565b5f813590506124e3816124bf565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261250a576125096124e9565b5b8235905067ffffffffffffffff811115612527576125266124ed565b5b602083019150836020820283011115612543576125426124f1565b5b9250929050565b5f5f5f6040848603121561256157612560612487565b5b5f61256e868287016124d5565b935050602084013567ffffffffffffffff81111561258f5761258e61248b565b5b61259b868287016124f5565b92509250509250925092565b5f819050919050565b6125b9816125a7565b81146125c3575f5ffd5b50565b5f813590506125d4816125b0565b92915050565b5f5ffd5b5f608082840312156125f3576125f26125da565b5b81905092915050565b5f5f83601f840112612611576126106124e9565b5b8235905067ffffffffffffffff81111561262e5761262d6124ed565b5b60208301915083602082028301111561264a576126496124f1565b5b9250929050565b5f5f5f5f5f5f6080878903121561266b5761266a612487565b5b5f61267889828a016125c6565b965050602087013567ffffffffffffffff8111156126995761269861248b565b5b6126a589828a016125de565b955050604087013567ffffffffffffffff8111156126c6576126c561248b565b5b6126d289828a016125fc565b9450945050606087013567ffffffffffffffff8111156126f5576126f461248b565b5b61270189828a016124f5565b92509250509295509295509295565b5f5f83601f840112612725576127246124e9565b5b8235905067ffffffffffffffff811115612742576127416124ed565b5b60208301915083600182028301111561275e5761275d6124f1565b5b9250929050565b5f5f6020838503121561277b5761277a612487565b5b5f83013567ffffffffffffffff8111156127985761279761248b565b5b6127a485828601612710565b92509250509250929050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6127fa826127b4565b810181811067ffffffffffffffff82111715612819576128186127c4565b5b80604052505050565b5f61282b61247e565b905061283782826127f1565b919050565b5f67ffffffffffffffff821115612856576128556127c4565b5b61285f826127b4565b9050602081019050919050565b828183375f83830152505050565b5f61288c6128878461283c565b612822565b9050828152602081018484840111156128a8576128a76127b0565b5b6128b384828561286c565b509392505050565b5f82601f8301126128cf576128ce6124e9565b5b81356128df84826020860161287a565b91505092915050565b5f5f604083850312156128fe576128fd612487565b5b5f61290b858286016124d5565b925050602083013567ffffffffffffffff81111561292c5761292b61248b565b5b612938858286016128bb565b9150509250929050565b61294b816125a7565b82525050565b5f6020820190506129645f830184612942565b92915050565b5f5f5f5f5f6080868803121561298357612982612487565b5b5f612990888289016125c6565b95505060206129a1888289016124d5565b94505060406129b2888289016125c6565b935050606086013567ffffffffffffffff8111156129d3576129d261248b565b5b6129df888289016124f5565b92509250509295509295909350565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612a22816129ee565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612a5f578082015181840152602081019050612a44565b5f8484015250505050565b5f612a7482612a28565b612a7e8185612a32565b9350612a8e818560208601612a42565b612a97816127b4565b840191505092915050565b5f819050919050565b612ab481612aa2565b82525050565b612ac3816124ae565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612afb81612aa2565b82525050565b5f612b0c8383612af2565b60208301905092915050565b5f602082019050919050565b5f612b2e82612ac9565b612b388185612ad3565b9350612b4383612ae3565b805f5b83811015612b73578151612b5a8882612b01565b9750612b6583612b18565b925050600181019050612b46565b5085935050505092915050565b5f60e082019050612b935f83018a612a19565b8181036020830152612ba58189612a6a565b90508181036040830152612bb98188612a6a565b9050612bc86060830187612aab565b612bd56080830186612aba565b612be260a0830185612942565b81810360c0830152612bf48184612b24565b905098975050505050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c3681612c02565b82525050565b5f602082019050612c4f5f830184612c2d565b92915050565b5f6020820190508181035f830152612c6d8184612a6a565b905092915050565b5f5f5f5f60608587031215612c8d57612c8c612487565b5b5f612c9a878288016125c6565b945050602085013567ffffffffffffffff811115612cbb57612cba61248b565b5b612cc7878288016125de565b935050604085013567ffffffffffffffff811115612ce857612ce761248b565b5b612cf4878288016125fc565b925092505092959194509250565b5f5ffd5b5f5ffd5b5f5f85851115612d1d57612d1c612d02565b5b83861115612d2e57612d2d612d06565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f612d658383612d44565b82612d708135612c02565b92506004821015612db057612dab7fffffffff0000000000000000000000000000000000000000000000000000000083600403600802612d4e565b831692505b505092915050565b5f67ffffffffffffffff821115612dd257612dd16127c4565b5b612ddb826127b4565b9050602081019050919050565b5f612dfa612df584612db8565b612822565b905082815260208101848484011115612e1657612e156127b0565b5b612e2184828561286c565b509392505050565b5f82601f830112612e3d57612e3c6124e9565b5b8135612e4d848260208601612de8565b91505092915050565b612e5f81612aa2565b8114612e69575f5ffd5b50565b5f81359050612e7a81612e56565b92915050565b5f67ffffffffffffffff821115612e9a57612e996127c4565b5b602082029050602081019050919050565b5f612ebd612eb884612e80565b612822565b90508083825260208201905060208402830185811115612ee057612edf6124f1565b5b835b81811015612f095780612ef588826124d5565b845260208401935050602081019050612ee2565b5050509392505050565b5f82601f830112612f2757612f266124e9565b5b8135612f37848260208601612eab565b91505092915050565b5f5f5f5f60808587031215612f5857612f57612487565b5b5f85013567ffffffffffffffff811115612f7557612f7461248b565b5b612f8187828801612e29565b9450506020612f9287828801612e6c565b935050604085013567ffffffffffffffff811115612fb357612fb261248b565b5b612fbf87828801612f13565b9250506060612fd087828801612e6c565b91505092959194509250565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61301b61301661301184612fdc565b612ff8565b612fe5565b9050919050565b61302b81613001565b82525050565b5f6020820190506130445f830184613022565b92915050565b5f60608201905061305d5f830186612942565b61306a6020830185612aba565b6130776040830184612942565b949350505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f6130b3601583612a32565b91506130be8261307f565b602082019050919050565b5f6020820190508181035f8301526130e0816130a7565b9050919050565b5f6060820190506130fa5f830186612942565b6131076020830185612aba565b6131146040830184612aba565b949350505050565b5f60408201905061312f5f830185612942565b61313c6020830184612aba565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f8335600160200384360303811261319857613197613170565b5b80840192508235915067ffffffffffffffff8211156131ba576131b9613174565b5b6020830192506001820236038313156131d6576131d5613178565b5b509250929050565b5f6020820190506131f15f830184612aba565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61322e82612aa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036132605761325f6131f7565b5b600182019050919050565b5f60408201905061327e5f830185612aab565b61328b6020830184612aab565b9392505050565b5f81905092915050565b5f6132a682612a28565b6132b08185613292565b93506132c0818560208601612a42565b80840191505092915050565b5f6132d7828561329c565b91506132e3828461329c565b91508190509392505050565b5f5f8335600160200384360303811261330b5761330a613170565b5b80840192508235915067ffffffffffffffff82111561332d5761332c613174565b5b60208301925060208202360383131561334957613348613178565b5b509250929050565b5f81905092915050565b5f5ffd5b82818337505050565b5f6133738385613351565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156133a6576133a561335b565b5b6020830292506133b783858461335f565b82840190509392505050565b5f6133cf828486613368565b91508190509392505050565b5f60c0820190506133ee5f830189612942565b6133fb6020830188612942565b6134086040830187612942565b6134156060830186612942565b6134226080830185612942565b61342f60a0830184612942565b979650505050505050565b5f82825260208201905092915050565b5f613455838561343a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156134885761348761335b565b5b60208302925061349983858461335f565b82840190509392505050565b5f60a0820190506134b85f83018c612942565b81810360208301526134cb818a8c61344a565b905081810360408301526134e081888a61344a565b905081810360608301526134f581868861344a565b9050818103608083015261350a81848661344a565b90509a9950505050505050505050565b5f8235600160400383360303811261353557613534613170565b5b80830191505092915050565b5f6020828403121561355657613555612487565b5b5f613563848285016124d5565b91505092915050565b5f8151905061357a816125b0565b92915050565b5f6020828403121561359557613594612487565b5b5f6135a28482850161356c565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806135ef57607f821691505b602082108103613602576136016135ab565b5b50919050565b5f613613828461329c565b915081905092915050565b5f81905092915050565b5f613633838561361e565b935061364083858461286c565b82840190509392505050565b5f613658828486613628565b91508190509392505050565b5f81519050919050565b5f819050602082019050919050565b613686816125a7565b82525050565b5f613697838361367d565b60208301905092915050565b5f602082019050919050565b5f6136b982613664565b6136c38185613351565b93506136ce8361366e565b805f5b838110156136fe5781516136e5888261368c565b97506136f0836136a3565b9250506001810190506136d1565b5085935050505092915050565b5f61371682846136af565b915081905092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f600883026137717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612d4e565b61377b8683612d4e565b95508019841693508086168417925050509392505050565b5f6137ad6137a86137a384612aa2565b612ff8565b612aa2565b9050919050565b5f819050919050565b6137c683613793565b6137da6137d2826137b4565b848454613742565b825550505050565b5f5f905090565b6137f16137e2565b6137fc8184846137bd565b505050565b5b8181101561381f576138145f826137e9565b600181019050613802565b5050565b601f8211156138645761383581613721565b61383e84613733565b8101602085101561384d578190505b61386161385985613733565b830182613801565b50505b505050565b5f82821c905092915050565b5f6138845f1984600802613869565b1980831691505092915050565b5f61389c8383613875565b9150826002028217905092915050565b6138b582612a28565b67ffffffffffffffff8111156138ce576138cd6127c4565b5b6138d882546135d8565b6138e3828285613823565b5f60209050601f831160018114613914575f8415613902578287015190505b61390c8582613891565b865550613973565b601f19841661392286613721565b5f5b8281101561394957848901518255600182019150602085019450602081019050613924565b868310156139665784890151613962601f891682613875565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6020820190506139bb5f830184612aab565b92915050565b5f81519050919050565b5f6139d5826139c1565b6139df818561361e565b93506139ef818560208601612a42565b80840191505092915050565b5f613a0682846139cb565b915081905092915050565b5f60a082019050613a245f830188612942565b613a316020830187612942565b613a3e6040830186612942565b613a4b6060830185612aab565b613a586080830184612aba565b9695505050505050565b5f60ff82169050919050565b613a7781613a62565b82525050565b5f608082019050613a905f830187612942565b613a9d6020830186613a6e565b613aaa6040830185612942565b613ab76060830184612942565b9594505050505056fe5472616e736974696f6e28627974657333325b5d20696e707574732c627974657333325b5d2072656164732c627974657333325b5d206f7574707574732c627974657333325b5d20696e666f2c45787465726e616c43616c6c5b5d2065787465726e616c43616c6c732945787465726e616c43616c6c286164647265737320636f6e7472616374416464726573732c627974657320656e636f64656443616c6c29a2646970667358221220f6cd270be5ed83c7702cdf6c1bcd5208637052664c24195bd0d977212118d97d64736f6c634300081e0033",
611
+ "linkReferences": {},
612
+ "deployedLinkReferences": {}
613
+ }