evmlib 0.4.9

Safe Network EVM
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
{
  "_format": "hh-sol-artifact-1",
  "contractName": "AutonomiNetworkToken",
  "sourceName": "contracts/AutonomiNetworkToken.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CheckpointUnorderedInsertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "increasedSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "cap",
          "type": "uint256"
        }
      ],
      "name": "ERC20ExceededSafeSupply",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC2612ExpiredSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC2612InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        },
        {
          "internalType": "uint48",
          "name": "clock",
          "type": "uint48"
        }
      ],
      "name": "ERC5805FutureLookup",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC6372InconsistentClock",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        }
      ],
      "name": "VotesExpiredSignature",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousVotes",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotes",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint48",
              "name": "_key",
              "type": "uint48"
            },
            {
              "internalType": "uint208",
              "name": "_value",
              "type": "uint208"
            }
          ],
          "internalType": "struct Checkpoints.Checkpoint208",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b506040518060400160405280601481526020017f4175746f6e6f6d694e6574776f726b546f6b656e00000000000000000000000081525080604051806040016040528060018152602001603160f81b8152506040518060400160405280601481526020017f4175746f6e6f6d694e6574776f726b546f6b656e0000000000000000000000008152506040518060400160405280600381526020016210539560ea1b8152508160039081620000c79190620009b4565b506004620000d68282620009b4565b50620000e891508390506005620001bf565b61012052620000f9816006620001bf565b61014052815160208084019190912060e052815190820120610100524660a0526200018760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05250620001b933620001a46012600a62000b93565b620001b390622625a062000ba4565b620001f8565b62000cad565b6000602083511015620001df57620001d7836200023a565b9050620001f2565b81620001ec8482620009b4565b5060ff90505b92915050565b6001600160a01b038216620002285760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b62000236600083836200027d565b5050565b600080829050601f8151111562000268578260405163305a27a960e01b81526004016200021f919062000bbe565b8051620002758262000c0f565b179392505050565b6200028a8383836200028f565b505050565b6200029c838383620002fe565b6001600160a01b038316620002f1576000620002b760025490565b90506001600160d01b0380821115620002ee57604051630e58ae9360e11b815260048101839052602481018290526044016200021f565b50505b6200028a83838362000431565b6001600160a01b0383166200032d57806002600082825462000321919062000c34565b90915550620003a19050565b6001600160a01b03831660009081526020819052604090205481811015620003825760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016200021f565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620003bf57600280548290039055620003de565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200042491815260200190565b60405180910390a3505050565b6001600160a01b038316620004665762000463600a62000953620004c960201b176200045d84620004de565b62000518565b50505b6001600160a01b038216620004955762000492600a6200095f6200055560201b176200045d84620004de565b50505b6001600160a01b038381166000908152600860205260408082205485841683529120546200028a9291821691168362000563565b6000620004d7828462000c4a565b9392505050565b60006001600160d01b0382111562000514576040516306dfcc6560e41b815260d06004820152602481018390526044016200021f565b5090565b6000806200054862000529620006ca565b6200053f6200053888620006db565b868860201c565b8791906200072a565b915091505b935093915050565b6000620004d7828462000c74565b816001600160a01b0316836001600160a01b031614158015620005865750600081115b156200028a576001600160a01b0383161562000629576001600160a01b038316600090815260096020908152604082208291620005d4919062000555901b6200095f176200045d86620004de565b6001600160d01b031691506001600160d01b03169150846001600160a01b031660008051602062002bd983398151915283836040516200061e929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200028a576001600160a01b038216600090815260096020908152604082208291620006719190620004c9901b62000953176200045d86620004de565b6001600160d01b031691506001600160d01b03169150836001600160a01b031660008051602062002bd98339815191528383604051620006bb929190918252602082015260400190565b60405180910390a25050505050565b6000620006d66200073a565b905090565b8054600090801562000721576200070783620006f960018462000c97565b600091825260209091200190565b54660100000000000090046001600160d01b0316620004d7565b60009392505050565b6000806200054885858562000747565b6000620006d643620008d9565b8254600090819080156200087a5760006200076987620006f960018562000c97565b60408051808201909152905465ffffffffffff80821680845266010000000000009092046001600160d01b031660208401529192509087161015620007c157604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603620008155784620007e888620006f960018662000c97565b80546001600160d01b039290921666010000000000000265ffffffffffff90921691909117905562000869565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d815291909120945191519092166601000000000000029216919091179101555b6020015192508391506200054d9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a81529182209551925190931666010000000000000291909316179201919091559050816200054d565b600065ffffffffffff82111562000514576040516306dfcc6560e41b815260306004820152602481018390526044016200021f565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200093957607f821691505b6020821081036200095a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028a576000816000526020600020601f850160051c810160208610156200098b5750805b601f850160051c820191505b81811015620009ac5782815560010162000997565b505050505050565b81516001600160401b03811115620009d057620009d06200090e565b620009e881620009e1845462000924565b8462000960565b602080601f83116001811462000a20576000841562000a075750858301515b600019600386901b1c1916600185901b178555620009ac565b600085815260208120601f198616915b8281101562000a515788860151825594840194600190910190840162000a30565b508582101562000a705787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ad757816000190482111562000abb5762000abb62000a80565b8085161562000ac957918102915b93841c939080029062000a9b565b509250929050565b60008262000af057506001620001f2565b8162000aff57506000620001f2565b816001811462000b18576002811462000b235762000b43565b6001915050620001f2565b60ff84111562000b375762000b3762000a80565b50506001821b620001f2565b5060208310610133831016604e8410600b841016171562000b68575081810a620001f2565b62000b74838362000a96565b806000190482111562000b8b5762000b8b62000a80565b029392505050565b6000620004d760ff84168362000adf565b8082028115828204841417620001f257620001f262000a80565b60006020808352835180602085015260005b8181101562000bee5785810183015185820160400152820162000bd0565b506000604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200095a5760001960209190910360031b1b16919050565b80820180821115620001f257620001f262000a80565b6001600160d01b0381811683821601908082111562000c6d5762000c6d62000a80565b5092915050565b6001600160d01b0382811682821603908082111562000c6d5762000c6d62000a80565b81810381811115620001f257620001f262000a80565b60805160a05160c05160e051610100516101205161014051611ed162000d086000396000610d9901526000610d6c01526000610b3401526000610b0c01526000610a6701526000610a9101526000610abb0152611ed16000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de57806395d89b4111610097578063c3cda52011610071578063c3cda5201461036e578063d505accf14610381578063dd62ed3e14610394578063f1127ed8146103cd57600080fd5b806395d89b41146103405780639ab24eb014610348578063a9059cbb1461035b57600080fd5b806370a08231146102a457806379cc6790146102cd5780637ecebe00146102e057806384b0196e146102f35780638e539e8c1461030e57806391ddadf41461032157600080fd5b80633a46b1a8116101305780633a46b1a8146101f557806342966c68146102085780634bf5d7e91461021d578063587cde1e146102255780635c19a95c146102695780636fcfff451461027c57600080fd5b806306fdde0314610178578063095ea7b31461019657806318160ddd146101b957806323b872dd146101cb578063313ce567146101de5780633644e515146101ed575b600080fd5b61018061040c565b60405161018d9190611ad2565b60405180910390f35b6101a96101a4366004611b01565b61049e565b604051901515815260200161018d565b6002545b60405190815260200161018d565b6101a96101d9366004611b2b565b6104b8565b6040516012815260200161018d565b6101bd6104dc565b6101bd610203366004611b01565b6104eb565b61021b610216366004611b67565b610571565b005b61018061057e565b610251610233366004611b80565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b03909116815260200161018d565b61021b610277366004611b80565b6105f6565b61028f61028a366004611b80565b610605565b60405163ffffffff909116815260200161018d565b6101bd6102b2366004611b80565b6001600160a01b031660009081526020819052604090205490565b61021b6102db366004611b01565b610610565b6101bd6102ee366004611b80565b610625565b6102fb610630565b60405161018d9796959493929190611b9b565b6101bd61031c366004611b67565b610676565b6103296106e0565b60405165ffffffffffff909116815260200161018d565b6101806106ea565b6101bd610356366004611b80565b6106f9565b6101a9610369366004611b01565b610729565b61021b61037c366004611c45565b610737565b61021b61038f366004611c9d565b6107f4565b6101bd6103a2366004611d07565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103e06103db366004611d3a565b61092e565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161018d565b60606003805461041b90611d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461044790611d7a565b80156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b6000336104ac81858561096b565b60019150505b92915050565b6000336104c685828561097d565b6104d18585856109fb565b506001949350505050565b60006104e6610a5a565b905090565b6000806104f66106e0565b90508065ffffffffffff16831061053657604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b61056061054284610b85565b6001600160a01b038616600090815260096020526040902090610bbc565b6001600160d01b0316949350505050565b61057b3382610c72565b50565b6060610588610ca8565b65ffffffffffff166105986106e0565b65ffffffffffff16146105be576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336106018183610cb3565b5050565b60006104b282610d25565b61061b82338361097d565b6106018282610c72565b60006104b282610d47565b600060608060008060006060610644610d65565b61064c610d92565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806106816106e0565b90508065ffffffffffff1683106106bc57604051637669fc0f60e11b81526004810184905265ffffffffffff8216602482015260440161052d565b6106d06106c884610b85565b600a90610bbc565b6001600160d01b03169392505050565b60006104e6610ca8565b60606004805461041b90611d7a565b6001600160a01b038116600090815260096020526040812061071a90610dbf565b6001600160d01b031692915050565b6000336104ac8185856109fb565b8342111561075b57604051632341d78760e11b81526004810185905260240161052d565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906107d5906107cd9060a00160405160208183030381529060405280519060200120610df8565b858585610e25565b90506107e18187610e53565b6107eb8188610cb3565b50505050505050565b834211156108185760405163313c898160e11b81526004810185905260240161052d565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108658c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108c082610df8565b905060006108d082878787610e25565b9050896001600160a01b0316816001600160a01b031614610917576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161052d565b6109228a8a8a61096b565b50505050505050505050565b604080518082019091526000808252602082015261094c8383610ea6565b9392505050565b600061094c8284611dca565b600061094c8284611df1565b6109788383836001610edc565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146109f557818110156109e657604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161052d565b6109f584848484036000610edc565b50505050565b6001600160a01b038316610a2557604051634b637e8f60e11b81526000600482015260240161052d565b6001600160a01b038216610a4f5760405163ec442f0560e01b81526000600482015260240161052d565b610978838383610fb1565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ab357507f000000000000000000000000000000000000000000000000000000000000000046145b15610add57507f000000000000000000000000000000000000000000000000000000000000000090565b6104e6604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610bb8576040516306dfcc6560e41b8152603060048201526024810183905260440161052d565b5090565b815460009081816005811115610c1b576000610bd784610fbc565b610be19085611e11565b60008881526020902090915081015465ffffffffffff9081169087161015610c0b57809150610c19565b610c16816001611e24565b92505b505b6000610c29878785856110a4565b90508015610c6457610c4e87610c40600184611e11565b600091825260209091200190565b54600160301b90046001600160d01b0316610c67565b60005b979650505050505050565b6001600160a01b038216610c9c57604051634b637e8f60e11b81526000600482015260240161052d565b61060182600083610fb1565b60006104e643610b85565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46109788183610d2086611106565b611124565b6001600160a01b0381166000908152600960205260408120546104b290611290565b6001600160a01b0381166000908152600760205260408120546104b2565b60606104e67f000000000000000000000000000000000000000000000000000000000000000060056112c1565b60606104e67f000000000000000000000000000000000000000000000000000000000000000060066112c1565b80546000908015610def57610dd983610c40600184611e11565b54600160301b90046001600160d01b031661094c565b60009392505050565b60006104b2610e05610a5a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610e378888888861136c565b925092509250610e47828261143b565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610978576040516301d4b62360e61b81526001600160a01b03841660048201526024810182905260440161052d565b60408051808201909152600080825260208201526001600160a01b038316600090815260096020526040902061094c90836114f4565b6001600160a01b038416610f065760405163e602df0560e01b81526000600482015260240161052d565b6001600160a01b038316610f3057604051634a1406b160e11b81526000600482015260240161052d565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156109f557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fa391815260200190565b60405180910390a350505050565b610978838383611564565b600081600003610fce57506000919050565b60006001610fdb846115cb565b901c6001901b90506001818481610ff457610ff4611e37565b048201901c9050600181848161100c5761100c611e37565b048201901c9050600181848161102457611024611e37565b048201901c9050600181848161103c5761103c611e37565b048201901c9050600181848161105457611054611e37565b048201901c9050600181848161106c5761106c611e37565b048201901c9050600181848161108457611084611e37565b048201901c905061094c8182858161109e5761109e611e37565b0461165f565b60005b818310156110fe5760006110bb8484611675565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156110ea578092506110f8565b6110f5816001611e24565b93505b506110a7565b509392505050565b6001600160a01b0381166000908152602081905260408120546104b2565b816001600160a01b0316836001600160a01b0316141580156111465750600081115b15610978576001600160a01b038316156111ee576001600160a01b038316600090815260096020526040812081906111899061095f61118486611690565b6116c4565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516111e3929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610978576001600160a01b038216600090815260096020526040812081906112279061095361118486611690565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611281929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610bb8576040516306dfcc6560e41b8152602060048201526024810183905260440161052d565b606060ff83146112db576112d4836116fd565b90506104b2565b8180546112e790611d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461131390611d7a565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b505050505090506104b2565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113a75750600091506003905082611431565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156113fb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661142757506000925060019150829050611431565b9250600091508190505b9450945094915050565b600082600381111561144f5761144f611e4d565b03611458575050565b600182600381111561146c5761146c611e4d565b0361148a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561149e5761149e611e4d565b036114bf5760405163fce698f760e01b81526004810182905260240161052d565b60038260038111156114d3576114d3611e4d565b03610601576040516335e2f38360e21b81526004810182905260240161052d565b6040805180820190915260008082526020820152826000018263ffffffff168154811061152357611523611e63565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b61156f83838361173c565b6001600160a01b0383166115c057600061158860025490565b90506001600160d01b03808211156115bd57604051630e58ae9360e11b8152600481018390526024810182905260440161052d565b50505b610978838383611866565b600080608083901c156115e057608092831c92015b604083901c156115f257604092831c92015b602083901c1561160457602092831c92015b601083901c1561161657601092831c92015b600883901c1561162857600892831c92015b600483901c1561163a57600492831c92015b600283901c1561164c57600292831c92015b600183901c156104b25760010192915050565b600081831061166e578161094c565b5090919050565b60006116846002848418611e79565b61094c90848416611e24565b60006001600160d01b03821115610bb8576040516306dfcc6560e41b815260d060048201526024810183905260440161052d565b6000806116f06116d26106e0565b6116e86116de88610dbf565b868863ffffffff16565b8791906118dc565b915091505b935093915050565b6060600061170a836118ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b03831661176757806002600082825461175c9190611e24565b909155506117d99050565b6001600160a01b038316600090815260208190526040902054818110156117ba5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161052d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166117f557600280548290039055611814565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185991815260200190565b60405180910390a3505050565b6001600160a01b03831661188857611885600a61095361118484611690565b50505b6001600160a01b0382166118aa576118a7600a61095f61118484611690565b50505b6001600160a01b0383811660009081526008602052604080822054858416835291205461097892918216911683611124565b6000806116f0858585611912565b600060ff8216601f8111156104b257604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611a3157600061193087610c40600185611e11565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561198457604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff8088169116036119d057846119a788610c40600186611e11565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611a21565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506116f59050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b0291909316179201919091559050816116f5565b6000815180845260005b81811015611ab257602081850181015186830182015201611a96565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061094c6020830184611a8c565b80356001600160a01b0381168114611afc57600080fd5b919050565b60008060408385031215611b1457600080fd5b611b1d83611ae5565b946020939093013593505050565b600080600060608486031215611b4057600080fd5b611b4984611ae5565b9250611b5760208501611ae5565b9150604084013590509250925092565b600060208284031215611b7957600080fd5b5035919050565b600060208284031215611b9257600080fd5b61094c82611ae5565b60ff60f81b881681526000602060e06020840152611bbc60e084018a611a8c565b8381036040850152611bce818a611a8c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611c2257835183529284019291840191600101611c06565b50909c9b505050505050505050505050565b803560ff81168114611afc57600080fd5b60008060008060008060c08789031215611c5e57600080fd5b611c6787611ae5565b95506020870135945060408701359350611c8360608801611c34565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611cb857600080fd5b611cc188611ae5565b9650611ccf60208901611ae5565b95506040880135945060608801359350611ceb60808901611c34565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d1a57600080fd5b611d2383611ae5565b9150611d3160208401611ae5565b90509250929050565b60008060408385031215611d4d57600080fd5b611d5683611ae5565b9150602083013563ffffffff81168114611d6f57600080fd5b809150509250929050565b600181811c90821680611d8e57607f821691505b602082108103611dae57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160d01b03818116838216019080821115611dea57611dea611db4565b5092915050565b6001600160d01b03828116828216039080821115611dea57611dea611db4565b818103818111156104b2576104b2611db4565b808201808211156104b2576104b2611db4565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611e9657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e6593b092e1a24b35f83124c9f1435eef683cc4ae5be2f7a133072dc046158f264736f6c63430008180033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de57806395d89b4111610097578063c3cda52011610071578063c3cda5201461036e578063d505accf14610381578063dd62ed3e14610394578063f1127ed8146103cd57600080fd5b806395d89b41146103405780639ab24eb014610348578063a9059cbb1461035b57600080fd5b806370a08231146102a457806379cc6790146102cd5780637ecebe00146102e057806384b0196e146102f35780638e539e8c1461030e57806391ddadf41461032157600080fd5b80633a46b1a8116101305780633a46b1a8146101f557806342966c68146102085780634bf5d7e91461021d578063587cde1e146102255780635c19a95c146102695780636fcfff451461027c57600080fd5b806306fdde0314610178578063095ea7b31461019657806318160ddd146101b957806323b872dd146101cb578063313ce567146101de5780633644e515146101ed575b600080fd5b61018061040c565b60405161018d9190611ad2565b60405180910390f35b6101a96101a4366004611b01565b61049e565b604051901515815260200161018d565b6002545b60405190815260200161018d565b6101a96101d9366004611b2b565b6104b8565b6040516012815260200161018d565b6101bd6104dc565b6101bd610203366004611b01565b6104eb565b61021b610216366004611b67565b610571565b005b61018061057e565b610251610233366004611b80565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b03909116815260200161018d565b61021b610277366004611b80565b6105f6565b61028f61028a366004611b80565b610605565b60405163ffffffff909116815260200161018d565b6101bd6102b2366004611b80565b6001600160a01b031660009081526020819052604090205490565b61021b6102db366004611b01565b610610565b6101bd6102ee366004611b80565b610625565b6102fb610630565b60405161018d9796959493929190611b9b565b6101bd61031c366004611b67565b610676565b6103296106e0565b60405165ffffffffffff909116815260200161018d565b6101806106ea565b6101bd610356366004611b80565b6106f9565b6101a9610369366004611b01565b610729565b61021b61037c366004611c45565b610737565b61021b61038f366004611c9d565b6107f4565b6101bd6103a2366004611d07565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103e06103db366004611d3a565b61092e565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161018d565b60606003805461041b90611d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461044790611d7a565b80156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b6000336104ac81858561096b565b60019150505b92915050565b6000336104c685828561097d565b6104d18585856109fb565b506001949350505050565b60006104e6610a5a565b905090565b6000806104f66106e0565b90508065ffffffffffff16831061053657604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b61056061054284610b85565b6001600160a01b038616600090815260096020526040902090610bbc565b6001600160d01b0316949350505050565b61057b3382610c72565b50565b6060610588610ca8565b65ffffffffffff166105986106e0565b65ffffffffffff16146105be576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336106018183610cb3565b5050565b60006104b282610d25565b61061b82338361097d565b6106018282610c72565b60006104b282610d47565b600060608060008060006060610644610d65565b61064c610d92565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806106816106e0565b90508065ffffffffffff1683106106bc57604051637669fc0f60e11b81526004810184905265ffffffffffff8216602482015260440161052d565b6106d06106c884610b85565b600a90610bbc565b6001600160d01b03169392505050565b60006104e6610ca8565b60606004805461041b90611d7a565b6001600160a01b038116600090815260096020526040812061071a90610dbf565b6001600160d01b031692915050565b6000336104ac8185856109fb565b8342111561075b57604051632341d78760e11b81526004810185905260240161052d565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906107d5906107cd9060a00160405160208183030381529060405280519060200120610df8565b858585610e25565b90506107e18187610e53565b6107eb8188610cb3565b50505050505050565b834211156108185760405163313c898160e11b81526004810185905260240161052d565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108658c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006108c082610df8565b905060006108d082878787610e25565b9050896001600160a01b0316816001600160a01b031614610917576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161052d565b6109228a8a8a61096b565b50505050505050505050565b604080518082019091526000808252602082015261094c8383610ea6565b9392505050565b600061094c8284611dca565b600061094c8284611df1565b6109788383836001610edc565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146109f557818110156109e657604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161052d565b6109f584848484036000610edc565b50505050565b6001600160a01b038316610a2557604051634b637e8f60e11b81526000600482015260240161052d565b6001600160a01b038216610a4f5760405163ec442f0560e01b81526000600482015260240161052d565b610978838383610fb1565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610ab357507f000000000000000000000000000000000000000000000000000000000000000046145b15610add57507f000000000000000000000000000000000000000000000000000000000000000090565b6104e6604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600065ffffffffffff821115610bb8576040516306dfcc6560e41b8152603060048201526024810183905260440161052d565b5090565b815460009081816005811115610c1b576000610bd784610fbc565b610be19085611e11565b60008881526020902090915081015465ffffffffffff9081169087161015610c0b57809150610c19565b610c16816001611e24565b92505b505b6000610c29878785856110a4565b90508015610c6457610c4e87610c40600184611e11565b600091825260209091200190565b54600160301b90046001600160d01b0316610c67565b60005b979650505050505050565b6001600160a01b038216610c9c57604051634b637e8f60e11b81526000600482015260240161052d565b61060182600083610fb1565b60006104e643610b85565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46109788183610d2086611106565b611124565b6001600160a01b0381166000908152600960205260408120546104b290611290565b6001600160a01b0381166000908152600760205260408120546104b2565b60606104e67f000000000000000000000000000000000000000000000000000000000000000060056112c1565b60606104e67f000000000000000000000000000000000000000000000000000000000000000060066112c1565b80546000908015610def57610dd983610c40600184611e11565b54600160301b90046001600160d01b031661094c565b60009392505050565b60006104b2610e05610a5a565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610e378888888861136c565b925092509250610e47828261143b565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610978576040516301d4b62360e61b81526001600160a01b03841660048201526024810182905260440161052d565b60408051808201909152600080825260208201526001600160a01b038316600090815260096020526040902061094c90836114f4565b6001600160a01b038416610f065760405163e602df0560e01b81526000600482015260240161052d565b6001600160a01b038316610f3057604051634a1406b160e11b81526000600482015260240161052d565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156109f557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fa391815260200190565b60405180910390a350505050565b610978838383611564565b600081600003610fce57506000919050565b60006001610fdb846115cb565b901c6001901b90506001818481610ff457610ff4611e37565b048201901c9050600181848161100c5761100c611e37565b048201901c9050600181848161102457611024611e37565b048201901c9050600181848161103c5761103c611e37565b048201901c9050600181848161105457611054611e37565b048201901c9050600181848161106c5761106c611e37565b048201901c9050600181848161108457611084611e37565b048201901c905061094c8182858161109e5761109e611e37565b0461165f565b60005b818310156110fe5760006110bb8484611675565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156110ea578092506110f8565b6110f5816001611e24565b93505b506110a7565b509392505050565b6001600160a01b0381166000908152602081905260408120546104b2565b816001600160a01b0316836001600160a01b0316141580156111465750600081115b15610978576001600160a01b038316156111ee576001600160a01b038316600090815260096020526040812081906111899061095f61118486611690565b6116c4565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516111e3929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610978576001600160a01b038216600090815260096020526040812081906112279061095361118486611690565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611281929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610bb8576040516306dfcc6560e41b8152602060048201526024810183905260440161052d565b606060ff83146112db576112d4836116fd565b90506104b2565b8180546112e790611d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461131390611d7a565b80156113605780601f1061133557610100808354040283529160200191611360565b820191906000526020600020905b81548152906001019060200180831161134357829003601f168201915b505050505090506104b2565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156113a75750600091506003905082611431565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156113fb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661142757506000925060019150829050611431565b9250600091508190505b9450945094915050565b600082600381111561144f5761144f611e4d565b03611458575050565b600182600381111561146c5761146c611e4d565b0361148a5760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561149e5761149e611e4d565b036114bf5760405163fce698f760e01b81526004810182905260240161052d565b60038260038111156114d3576114d3611e4d565b03610601576040516335e2f38360e21b81526004810182905260240161052d565b6040805180820190915260008082526020820152826000018263ffffffff168154811061152357611523611e63565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b61156f83838361173c565b6001600160a01b0383166115c057600061158860025490565b90506001600160d01b03808211156115bd57604051630e58ae9360e11b8152600481018390526024810182905260440161052d565b50505b610978838383611866565b600080608083901c156115e057608092831c92015b604083901c156115f257604092831c92015b602083901c1561160457602092831c92015b601083901c1561161657601092831c92015b600883901c1561162857600892831c92015b600483901c1561163a57600492831c92015b600283901c1561164c57600292831c92015b600183901c156104b25760010192915050565b600081831061166e578161094c565b5090919050565b60006116846002848418611e79565b61094c90848416611e24565b60006001600160d01b03821115610bb8576040516306dfcc6560e41b815260d060048201526024810183905260440161052d565b6000806116f06116d26106e0565b6116e86116de88610dbf565b868863ffffffff16565b8791906118dc565b915091505b935093915050565b6060600061170a836118ea565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b03831661176757806002600082825461175c9190611e24565b909155506117d99050565b6001600160a01b038316600090815260208190526040902054818110156117ba5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161052d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166117f557600280548290039055611814565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161185991815260200190565b60405180910390a3505050565b6001600160a01b03831661188857611885600a61095361118484611690565b50505b6001600160a01b0382166118aa576118a7600a61095f61118484611690565b50505b6001600160a01b0383811660009081526008602052604080822054858416835291205461097892918216911683611124565b6000806116f0858585611912565b600060ff8216601f8111156104b257604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611a3157600061193087610c40600185611e11565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b03166020840152919250908716101561198457604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff8088169116036119d057846119a788610c40600186611e11565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055611a21565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b6020015192508391506116f59050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b0291909316179201919091559050816116f5565b6000815180845260005b81811015611ab257602081850181015186830182015201611a96565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061094c6020830184611a8c565b80356001600160a01b0381168114611afc57600080fd5b919050565b60008060408385031215611b1457600080fd5b611b1d83611ae5565b946020939093013593505050565b600080600060608486031215611b4057600080fd5b611b4984611ae5565b9250611b5760208501611ae5565b9150604084013590509250925092565b600060208284031215611b7957600080fd5b5035919050565b600060208284031215611b9257600080fd5b61094c82611ae5565b60ff60f81b881681526000602060e06020840152611bbc60e084018a611a8c565b8381036040850152611bce818a611a8c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611c2257835183529284019291840191600101611c06565b50909c9b505050505050505050505050565b803560ff81168114611afc57600080fd5b60008060008060008060c08789031215611c5e57600080fd5b611c6787611ae5565b95506020870135945060408701359350611c8360608801611c34565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611cb857600080fd5b611cc188611ae5565b9650611ccf60208901611ae5565b95506040880135945060608801359350611ceb60808901611c34565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d1a57600080fd5b611d2383611ae5565b9150611d3160208401611ae5565b90509250929050565b60008060408385031215611d4d57600080fd5b611d5683611ae5565b9150602083013563ffffffff81168114611d6f57600080fd5b809150509250929050565b600181811c90821680611d8e57607f821691505b602082108103611dae57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160d01b03818116838216019080821115611dea57611dea611db4565b5092915050565b6001600160d01b03828116828216039080821115611dea57611dea611db4565b818103818111156104b2576104b2611db4565b808201808211156104b2576104b2611db4565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082611e9657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e6593b092e1a24b35f83124c9f1435eef683cc4ae5be2f7a133072dc046158f264736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}