BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Tezos Virtual Hug
FA2Ledger
operations (170)Storage Code Interact Tokens Metadata Fork Views Statistics Details
Latest
​x
872
1057
 
1
parameter (or
2
            (or
3
              (or (address %add_manager)
4
                  (or
5
                    (pair %balance_of
6
                      (list %requests (pair (address %owner) (nat %token_id)))
7
                      (contract %callback (list (pair
8
                                                (pair %request (address %owner)
9
                                                               (nat %token_id))
10
                                                (nat %balance)))))
11
                    (list %burn (pair (nat %amount)
12
                                     (pair (address %from_) (nat %token_id))))))
13
              (or
14
                (or
15
                  (pair %mint (address %address)
16
                              (pair (nat %amount)
17
                                    (pair (map %metadata string bytes) (nat %token_id))))
18
                  (address %remove_manager))
19
                (or (pair %send_hug (address %address) (map %metadata string bytes))
20
                    (address %set_administrator))))
21
            (or
22
              (or (or (pair %set_metadata (string %k) (bytes %v)) (unit %toggle_pause))
23
                  (or
24
                    (list %transfer (pair (address %from_)
25
                                         (list %txs (pair (address %to_)
26
                                                         (pair (nat %token_id)
27
                                                               (nat %amount))))))
28
                    (address %update_hux_address)))
29
              (or
30
                (or
31
                  (list %update_operators (or
32
                                           (pair %add_operator (address %owner)
33
                                                               (pair (address %operator)
34
                                                                     (nat %token_id)))
35
                                           (pair %remove_operator (address %owner)
36
                                                                  (pair
37
                                                                    (address %operator)
38
                                                                    (nat %token_id)))))
39
                  (nat %update_price_of_a_hug))
40
                (or
41
                  (pair %update_token_metadata (map %metadata string bytes)
42
                                               (nat %token_id))
43
                  (unit %verify_administrator)))));
44
storage (pair
45
          (pair
46
            (pair
47
              (pair %administration_panel
48
                (pair (address %administrator) (set %managers address))
49
                (pair (bool %paused) (option %pending_administrator address)))
50
              (nat %all_tokens))
51
            (pair (address %hux_token_address) (big_map %ledger (pair address nat) nat)))
52
          (pair
53
            (pair (big_map %metadata string bytes)
54
                  (big_map %operators
55
                    (pair (address %owner) (pair (address %operator) (nat %token_id)))
56
                    unit))
57
            (pair (nat %price_of_a_hug)
58
                  (pair
59
                    (big_map %token_metadata nat
60
                                             (pair (nat %token_id)
61
                                                   (map %token_info string bytes)))
62
                    (big_map %total_supply nat nat)))));
63
code { CAST (pair
64
              (or
65
                (or
66
                  (or address
67
                      (or
68
                        (pair (list (pair address nat))
69
                              (contract (list (pair (pair address nat) nat))))
70
                        (list (pair nat (pair address nat)))))
71
                  (or
72
                    (or (pair address (pair nat (pair (map string bytes) nat))) address)
73
                    (or (pair address (map string bytes)) address)))
74
                (or
75
                  (or (or (pair string bytes) unit)
76
                      (or (list (pair address (list (pair address (pair nat nat)))))
77
                          address))
78
                  (or
79
                    (or
80
                      (list (or (pair address (pair address nat))
81
                               (pair address (pair address nat))))
82
                      nat)
83
                    (or (pair (map string bytes) nat) unit))))
84
              (pair
85
                (pair
86
                  (pair (pair (pair address (set address)) (pair bool (option address)))
87
                        nat)
88
                  (pair address (big_map (pair address nat) nat)))
89
                (pair
90
                  (pair (big_map string bytes)
91
                        (big_map (pair address (pair address nat)) unit))
92
                  (pair nat
93
                        (pair (big_map nat (pair nat (map string bytes)))
94
                              (big_map nat nat)))))) ;
95
       UNPAIR ;
96
       IF_LEFT
97
         { IF_LEFT
98
             { IF_LEFT
99
                 { SWAP ;
100
                   DUP ;
101
                   DUG 2 ;
102
                   CAR ;
103
                   CAR ;
104
                   CAR ;
105
                   CAR ;
106
                   CAR ;
107
                   SENDER ;
108
                   COMPARE ;
109
                   EQ ;
110
                   IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
111
                   SWAP ;
112
                   UNPAIR ;
113
                   UNPAIR ;
114
                   UNPAIR ;
115
                   UNPAIR ;
116
                   UNPAIR ;
117
                   SWAP ;
118
                   PUSH bool True ;
119
                   DIG 7 ;
120
                   UPDATE ;
121
                   SWAP ;
122
                   PAIR ;
123
                   PAIR ;
124
                   PAIR ;
125
                   PAIR ;
126
                   PAIR ;
127
                   NIL operation }
128
                 { IF_LEFT
129
                     { SWAP ;
130
                       DUP ;
131
                       DUG 2 ;
132
                       CAR ;
133
                       CAR ;
134
                       CAR ;
135
                       GET 3 ;
136
                       IF { PUSH string "FA2_PAUSED" ; FAILWITH } {} ;
137
                       DUP ;
138
                       CAR ;
139
                       MAP { DUP 3 ;
140
                             GET 7 ;
141
                             SWAP ;
142
                             DUP ;
143
                             DUG 2 ;
144
                             CDR ;
145
                             MEM ;
146
                             IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
147
                             DUP 3 ;
148
                             CAR ;
149
                             GET 4 ;
150
                             SWAP ;
151
                             DUP ;
152
                             CDR ;
153
                             SWAP ;
154
                             DUP ;
155
                             DUG 3 ;
156
                             CAR ;
157
                             PAIR ;
158
                             MEM ;
159
                             IF
160
                               { DUP 3 ;
161
                                 CAR ;
162
                                 GET 4 ;
163
                                 SWAP ;
164
                                 DUP ;
165
                                 CDR ;
166
                                 SWAP ;
167
                                 DUP ;
168
                                 DUG 3 ;
169
                                 CAR ;
170
                                 PAIR ;
171
                                 GET ;
172
                                 IF_NONE { PUSH int 418 ; FAILWITH } {} ;
173
                                 SWAP ;
174
                                 PAIR }
175
                               { PUSH nat 0 ; SWAP ; PAIR } } ;
176
                       NIL operation ;
177
                       DIG 2 ;
178
                       CDR ;
179
                       PUSH mutez 0 ;
180
                       DIG 3 ;
181
                       TRANSFER_TOKENS ;
182
                       CONS }
183
                     { SWAP ;
184
                       DUP ;
185
                       DUG 2 ;
186
                       CAR ;
187
                       CAR ;
188
                       CAR ;
189
                       GET 3 ;
190
                       IF { PUSH string "FA2_PAUSED" ; FAILWITH } {} ;
191
                       DUP ;
192
                       ITER { DUP 3 ;
193
                              GET 7 ;
194
                              SWAP ;
195
                              DUP ;
196
                              DUG 2 ;
197
                              GET 4 ;
198
                              MEM ;
199
                              IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
200
                              DUP ;
201
                              CAR ;
202
                              DUP 4 ;
203
                              CAR ;
204
                              GET 4 ;
205
                              DIG 2 ;
206
                              DUP ;
207
                              GET 4 ;
208
                              SWAP ;
209
                              DUP ;
210
                              DUG 4 ;
211
                              GET 3 ;
212
                              PAIR ;
213
                              GET ;
214
                              IF_NONE { PUSH int 190 ; FAILWITH } {} ;
215
                              COMPARE ;
216
                              GE ;
217
                              IF
218
                                {}
219
                                { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } ;
220
                              DUP 3 ;
221
                              CAR ;
222
                              CAR ;
223
                              CAR ;
224
                              CAR ;
225
                              CAR ;
226
                              SENDER ;
227
                              COMPARE ;
228
                              EQ ;
229
                              IF
230
                                { PUSH bool True }
231
                                { DUP ; GET 3 ; SENDER ; COMPARE ; EQ } ;
232
                              IF
233
                                { PUSH bool True }
234
                                { DUP 3 ; CAR ; CAR ; CAR ; CAR ; CDR ; SENDER ; MEM } ;
235
                              IF
236
                                {}
237
                                { PUSH string "FA2_NOT_ADMIN_OR_OPERATOR" ; FAILWITH } ;
238
                              DUP 3 ;
239
                              UNPAIR ;
240
                              UNPAIR ;
241
                              SWAP ;
242
                              UNPAIR ;
243
                              SWAP ;
244
                              DUP ;
245
                              DIG 5 ;
246
                              DUP ;
247
                              GET 4 ;
248
                              SWAP ;
249
                              DUP ;
250
                              DUG 7 ;
251
                              GET 3 ;
252
                              PAIR ;
253
                              DUP ;
254
                              DUG 2 ;
255
                              GET ;
256
                              IF_NONE { PUSH int 323 ; FAILWITH } { DROP } ;
257
                              DUP 6 ;
258
                              CAR ;
259
                              DIG 8 ;
260
                              CAR ;
261
                              GET 4 ;
262
                              DIG 7 ;
263
                              DUP ;
264
                              GET 4 ;
265
                              SWAP ;
266
                              DUP ;
267
                              DUG 9 ;
268
                              GET 3 ;
269
                              PAIR ;
270
                              GET ;
271
                              IF_NONE { PUSH int 324 ; FAILWITH } {} ;
272
                              SUB ;
273
                              ISNAT ;
274
                              IF_NONE { PUSH int 323 ; FAILWITH } {} ;
275
                              SOME ;
276
                              SWAP ;
277
                              UPDATE ;
278
                              SWAP ;
279
                              PAIR ;
280
                              SWAP ;
281
                              PAIR ;
282
                              PAIR ;
283
                              DUP ;
284
                              DUG 3 ;
285
                              DUP ;
286
                              GET 8 ;
287
                              DUP 3 ;
288
                              CAR ;
289
                              DIG 5 ;
290
                              GET 8 ;
291
                              DUP 5 ;
292
                              GET 4 ;
293
                              GET ;
294
                              IF_NONE { PUSH int 327 ; FAILWITH } {} ;
295
                              SUB ;
296
                              ISNAT ;
297
                              IF_NONE { PUSH int 326 ; FAILWITH } {} ;
298
                              SOME ;
299
                              DIG 3 ;
300
                              GET 4 ;
301
                              UPDATE ;
302
                              UPDATE 8 ;
303
                              SWAP } ;
304
                       DROP ;
305
                       NIL operation } } }
306
             { IF_LEFT
307
                 { IF_LEFT
308
                     { SWAP ;
309
                       DUP ;
310
                       DUG 2 ;
311
                       CAR ;
312
                       CAR ;
313
                       CAR ;
314
                       CAR ;
315
                       CAR ;
316
                       SENDER ;
317
                       COMPARE ;
318
                       EQ ;
319
                       IF
320
                         { PUSH bool True }
321
                         { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ;
322
                       IF
323
                         { PUSH bool True }
324
                         { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CDR ; SENDER ; MEM } ;
325
                       IF {} { PUSH string "FA2_NOT_ADMIN_OR_OPERATOR" ; FAILWITH } ;
326
                       SWAP ;
327
                       DUP ;
328
                       DUG 2 ;
329
                       CAR ;
330
                       GET 4 ;
331
                       SWAP ;
332
                       DUP ;
333
                       GET 6 ;
334
                       SWAP ;
335
                       DUP ;
336
                       DUG 3 ;
337
                       CAR ;
338
                       PAIR ;
339
                       MEM ;
340
                       IF
341
                         { SWAP ;
342
                           UNPAIR ;
343
                           UNPAIR ;
344
                           SWAP ;
345
                           UNPAIR ;
346
                           SWAP ;
347
                           DUP ;
348
                           DIG 5 ;
349
                           DUP ;
350
                           GET 6 ;
351
                           SWAP ;
352
                           DUP ;
353
                           DUG 7 ;
354
                           CAR ;
355
                           PAIR ;
356
                           DUP ;
357
                           DUG 2 ;
358
                           GET ;
359
                           IF_NONE { PUSH int 221 ; FAILWITH } {} ;
360
                           DUP 7 ;
361
                           GET 3 ;
362
                           ADD ;
363
                           SOME ;
364
                           SWAP ;
365
                           UPDATE ;
366
                           SWAP ;
367
                           PAIR ;
368
                           SWAP ;
369
                           PAIR ;
370
                           PAIR ;
371
                           SWAP }
372
                         { SWAP ;
373
                           UNPAIR ;
374
                           UNPAIR ;
375
                           SWAP ;
376
                           UNPAIR ;
377
                           SWAP ;
378
                           DUP 5 ;
379
                           GET 3 ;
380
                           SOME ;
381
                           DIG 5 ;
382
                           DUP ;
383
                           GET 6 ;
384
                           SWAP ;
385
                           DUP ;
386
                           DUG 7 ;
387
                           CAR ;
388
                           PAIR ;
389
                           UPDATE ;
390
                           SWAP ;
391
                           PAIR ;
392
                           SWAP ;
393
                           PAIR ;
394
                           PAIR ;
395
                           SWAP } ;
396
                       SWAP ;
397
                       DUP ;
398
                       DUG 2 ;
399
                       CAR ;
400
                       CAR ;
401
                       CDR ;
402
                       SWAP ;
403
                       DUP ;
404
                       DUG 2 ;
405
                       GET 6 ;
406
                       COMPARE ;
407
                       LT ;
408
                       IF
409
                         { SWAP ;
410
                           DUP ;
411
                           GET 8 ;
412
                           DUP ;
413
                           DUP 4 ;
414
                           GET 6 ;
415
                           DUP ;
416
                           DUG 2 ;
417
                           GET ;
418
                           IF_NONE { PUSH int 228 ; FAILWITH } {} ;
419
                           DIG 4 ;
420
                           GET 3 ;
421
                           ADD ;
422
                           SOME ;
423
                           SWAP ;
424
                           UPDATE ;
425
                           UPDATE 8 }
426
                         { DUP ;
427
                           GET 6 ;
428
                           DUP 3 ;
429
                           CAR ;
430
                           CAR ;
431
                           CDR ;
432
                           COMPARE ;
433
                           EQ ;
434
                           IF
435
                             {}
436
                             { PUSH string "Token-IDs should be consecutive" ; FAILWITH } ;
437
                           SWAP ;
438
                           DUP ;
439
                           GET 8 ;
440
                           DUP 3 ;
441
                           GET 3 ;
442
                           SOME ;
443
                           DUP 4 ;
444
                           GET 6 ;
445
                           UPDATE ;
446
                           UPDATE 8 ;
447
                           DUP ;
448
                           GET 7 ;
449
                           DIG 2 ;
450
                           DUP ;
451
                           GET 5 ;
452
                           SWAP ;
453
                           DUP ;
454
                           DUG 4 ;
455
                           GET 6 ;
456
                           PAIR ;
457
                           SOME ;
458
                           DIG 3 ;
459
                           GET 6 ;
460
                           UPDATE ;
461
                           UPDATE 7 ;
462
                           UNPAIR ;
463
                           UNPAIR ;
464
                           UNPAIR ;
465
                           SWAP ;
466
                           PUSH nat 1 ;
467
                           ADD ;
468
                           SWAP ;
469
                           PAIR ;
470
                           PAIR ;
471
                           PAIR } }
472
                     { SWAP ;
473
                       DUP ;
474
                       DUG 2 ;
475
                       CAR ;
476
                       CAR ;
477
                       CAR ;
478
                       CAR ;
479
                       CAR ;
480
                       SENDER ;
481
                       COMPARE ;
482
                       EQ ;
483
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
484
                       SWAP ;
485
                       UNPAIR ;
486
                       UNPAIR ;
487
                       UNPAIR ;
488
                       UNPAIR ;
489
                       UNPAIR ;
490
                       SWAP ;
491
                       PUSH bool False ;
492
                       DIG 7 ;
493
                       UPDATE ;
494
                       SWAP ;
495
                       PAIR ;
496
                       PAIR ;
497
                       PAIR ;
498
                       PAIR ;
499
                       PAIR } ;
500
                   NIL operation }
501
                 { IF_LEFT
502
                     { SWAP ;
503
                       DUP ;
504
                       DUG 2 ;
505
                       CAR ;
506
                       CAR ;
507
                       CAR ;
508
                       GET 3 ;
509
                       IF { PUSH string "FA2_PAUSED" ; FAILWITH } {} ;
510
                       NIL operation ;
511
                       DUP 3 ;
512
                       CAR ;
513
                       GET 3 ;
514
                       CONTRACT %transfer (list (pair (address %from_)
515
                                                     (list %txs (pair (address %to_)
516
                                                                     (pair
517
                                                                       (nat %token_id)
518
                                                                       (nat %amount)))))) ;
519
                       IF_NONE { PUSH string "Err: here" ; FAILWITH } {} ;
520
                       PUSH mutez 0 ;
521
                       NIL (pair address (list (pair address (pair nat nat)))) ;
522
                       NIL (pair address (pair nat nat)) ;
523
                       DUP 7 ;
524
                       GET 5 ;
525
                       PUSH nat 0 ;
526
                       DUP 8 ;
527
                       CAR ;
528
                       PAIR 3 ;
529
                       CONS ;
530
                       SENDER ;
531
                       PAIR ;
532
                       CONS ;
533
                       TRANSFER_TOKENS ;
534
                       CONS ;
535
                       DUP 3 ;
536
                       UNPAIR ;
537
                       UNPAIR ;
538
                       SWAP ;
539
                       UNPAIR ;
540
                       SWAP ;
541
                       PUSH (option nat) (Some 1) ;
542
                       DIG 7 ;
543
                       CAR ;
544
                       CAR ;
545
                       CDR ;
546
                       DUP 8 ;
547
                       CAR ;
548
                       PAIR ;
549
                       UPDATE ;
550
                       SWAP ;
551
                       PAIR ;
552
                       SWAP ;
553
                       PAIR ;
554
                       PAIR ;
555
                       DUP ;
556
                       DUG 3 ;
557
                       UNPAIR ;
558
                       UNPAIR ;
559
                       SWAP ;
560
                       UNPAIR ;
561
                       SWAP ;
562
                       PUSH (option nat) (Some 1) ;
563
                       DIG 7 ;
564
                       CAR ;
565
                       CAR ;
566
                       CDR ;
567
                       SENDER ;
568
                       PAIR ;
569
                       UPDATE ;
570
                       SWAP ;
571
                       PAIR ;
572
                       SWAP ;
573
                       PAIR ;
574
                       PAIR ;
575
                       DUP ;
576
                       DUG 3 ;
577
                       DUP ;
578
                       GET 8 ;
579
                       PUSH (option nat) (Some 2) ;
580
                       DIG 5 ;
581
                       CAR ;
582
                       CAR ;
583
                       CDR ;
584
                       UPDATE ;
585
                       UPDATE 8 ;
586
                       DUP ;
587
                       DUG 3 ;
588
                       DUP ;
589
                       GET 7 ;
590
                       DIG 3 ;
591
                       CDR ;
592
                       DUP 5 ;
593
                       CAR ;
594
                       CAR ;
595
                       CDR ;
596
                       PAIR ;
597
                       SOME ;
598
                       DIG 4 ;
599
                       CAR ;
600
                       CAR ;
601
                       CDR ;
602
                       UPDATE ;
603
                       UPDATE 7 ;
604
                       UNPAIR ;
605
                       UNPAIR ;
606
                       UNPAIR ;
607
                       SWAP ;
608
                       PUSH nat 1 ;
609
                       ADD ;
610
                       SWAP ;
611
                       PAIR ;
612
                       PAIR ;
613
                       PAIR ;
614
                       SWAP }
615
                     { SWAP ;
616
                       DUP ;
617
                       DUG 2 ;
618
                       CAR ;
619
                       CAR ;
620
                       CAR ;
621
                       CAR ;
622
                       CAR ;
623
                       SENDER ;
624
                       COMPARE ;
625
                       EQ ;
626
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
627
                       SWAP ;
628
                       UNPAIR ;
629
                       UNPAIR ;
630
                       UNPAIR ;
631
                       DIG 4 ;
632
                       SOME ;
633
                       UPDATE 4 ;
634
                       PAIR ;
635
                       PAIR ;
636
                       PAIR ;
637
                       NIL operation } } } }
638
         { IF_LEFT
639
             { IF_LEFT
640
                 { IF_LEFT
641
                     { SWAP ;
642
                       DUP ;
643
                       DUG 2 ;
644
                       CAR ;
645
                       CAR ;
646
                       CAR ;
647
                       CAR ;
648
                       CAR ;
649
                       SENDER ;
650
                       COMPARE ;
651
                       EQ ;
652
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
653
                       SWAP ;
654
                       UNPAIR ;
655
                       SWAP ;
656
                       UNPAIR ;
657
                       UNPAIR ;
658
                       DUP 5 ;
659
                       CDR ;
660
                       SOME ;
661
                       DIG 5 ;
662
                       CAR ;
663
                       UPDATE ;
664
                       PAIR ;
665
                       PAIR ;
666
                       SWAP ;
667
                       PAIR }
668
                     { DROP ;
669
                       DUP ;
670
                       CAR ;
671
                       CAR ;
672
                       CAR ;
673
                       CAR ;
674
                       CAR ;
675
                       SENDER ;
676
                       COMPARE ;
677
                       EQ ;
678
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
679
                       DUP ;
680
                       UNPAIR ;
681
                       UNPAIR ;
682
                       UNPAIR ;
683
                       DIG 4 ;
684
                       CAR ;
685
                       CAR ;
686
                       CAR ;
687
                       GET 3 ;
688
                       NOT ;
689
                       UPDATE 3 ;
690
                       PAIR ;
691
                       PAIR ;
692
                       PAIR } }
693
                 { IF_LEFT
694
                     { SWAP ;
695
                       DUP ;
696
                       DUG 2 ;
697
                       CAR ;
698
                       CAR ;
699
                       CAR ;
700
                       GET 3 ;
701
                       IF { PUSH string "FA2_PAUSED" ; FAILWITH } {} ;
702
                       DUP ;
703
                       ITER { DUP ;
704
                              CDR ;
705
                              ITER { DUP 4 ;
706
                                     CAR ;
707
                                     CAR ;
708
                                     CAR ;
709
                                     CAR ;
710
                                     CAR ;
711
                                     SENDER ;
712
                                     COMPARE ;
713
                                     EQ ;
714
                                     IF
715
                                       { PUSH bool True }
716
                                       { SWAP ; DUP ; DUG 2 ; CAR ; SENDER ; COMPARE ; EQ } ;
717
                                     IF
718
                                       { PUSH bool True }
719
                                       { DUP 4 ;
720
                                         GET 3 ;
721
                                         CDR ;
722
                                         SWAP ;
723
                                         DUP ;
724
                                         DUG 2 ;
725
                                         GET 3 ;
726
                                         SENDER ;
727
                                         DUP 5 ;
728
                                         CAR ;
729
                                         PAIR 3 ;
730
                                         MEM } ;
731
                                     IF
732
                                       {}
733
                                       { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
734
                                     DUP 4 ;
735
                                     GET 7 ;
736
                                     SWAP ;
737
                                     DUP ;
738
                                     DUG 2 ;
739
                                     GET 3 ;
740
                                     MEM ;
741
                                     IF
742
                                       {}
743
                                       { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
744
                                     DUP ;
745
                                     GET 4 ;
746
                                     PUSH nat 0 ;
747
                                     COMPARE ;
748
                                     LT ;
749
                                     IF
750
                                       { DUP ;
751
                                         GET 4 ;
752
                                         DUP 5 ;
753
                                         CAR ;
754
                                         GET 4 ;
755
                                         DUP 3 ;
756
                                         GET 3 ;
757
                                         DUP 5 ;
758
                                         CAR ;
759
                                         PAIR ;
760
                                         GET ;
761
                                         IF_NONE { PUSH int 190 ; FAILWITH } {} ;
762
                                         COMPARE ;
763
                                         GE ;
764
                                         IF
765
                                           {}
766
                                           { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
767
                                             FAILWITH } ;
768
                                         DUP 4 ;
769
                                         UNPAIR ;
770
                                         UNPAIR ;
771
                                         SWAP ;
772
                                         UNPAIR ;
773
                                         SWAP ;
774
                                         DUP ;
775
                                         DUP 6 ;
776
                                         GET 3 ;
777
                                         DUP 8 ;
778
                                         CAR ;
779
                                         PAIR ;
780
                                         DUP ;
781
                                         DUG 2 ;
782
                                         GET ;
783
                                         IF_NONE { PUSH int 369 ; FAILWITH } { DROP } ;
784
                                         DUP 6 ;
785
                                         GET 4 ;
786
                                         DIG 9 ;
787
                                         CAR ;
788
                                         GET 4 ;
789
                                         DUP 8 ;
790
                                         GET 3 ;
791
                                         DUP 10 ;
792
                                         CAR ;
793
                                         PAIR ;
794
                                         GET ;
795
                                         IF_NONE { PUSH int 370 ; FAILWITH } {} ;
796
                                         SUB ;
797
                                         ISNAT ;
798
                                         IF_NONE { PUSH int 369 ; FAILWITH } {} ;
799
                                         SOME ;
800
                                         SWAP ;
801
                                         UPDATE ;
802
                                         SWAP ;
803
                                         PAIR ;
804
                                         SWAP ;
805
                                         PAIR ;
806
                                         PAIR ;
807
                                         DUP ;
808
                                         DUG 4 ;
809
                                         CAR ;
810
                                         GET 4 ;
811
                                         SWAP ;
812
                                         DUP ;
813
                                         GET 3 ;
814
                                         SWAP ;
815
                                         DUP ;
816
                                         DUG 3 ;
817
                                         CAR ;
818
                                         PAIR ;
819
                                         MEM ;
820
                                         IF
821
                                           { DIG 3 ;
822
                                             UNPAIR ;
823
                                             UNPAIR ;
824
                                             SWAP ;
825
                                             UNPAIR ;
826
                                             SWAP ;
827
                                             DUP ;
828
                                             DIG 5 ;
829
                                             DUP ;
830
                                             GET 3 ;
831
                                             SWAP ;
832
                                             DUP ;
833
                                             DUG 7 ;
834
                                             CAR ;
835
                                             PAIR ;
836
                                             DUP ;
837
                                             DUG 2 ;
838
                                             GET ;
839
                                             IF_NONE { PUSH int 377 ; FAILWITH } {} ;
840
                                             DIG 6 ;
841
                                             GET 4 ;
842
                                             ADD ;
843
                                             SOME ;
844
                                             SWAP ;
845
                                             UPDATE ;
846
                                             SWAP ;
847
                                             PAIR ;
848
                                             SWAP ;
849
                                             PAIR ;
850
                                             PAIR ;
851
                                             DUG 2 }
852
                                           { DIG 3 ;
853
                                             UNPAIR ;
854
                                             UNPAIR ;
855
                                             SWAP ;
856
                                             UNPAIR ;
857
                                             SWAP ;
858
                                             DUP 5 ;
859
                                             GET 4 ;
860
                                             SOME ;
861
                                             DIG 5 ;
862
                                             DUP ;
863
                                             GET 3 ;
864
                                             SWAP ;
865
                                             CAR ;
866
                                             PAIR ;
867
                                             UPDATE ;
868
                                             SWAP ;
869
                                             PAIR ;
870
                                             SWAP ;
871
                                             PAIR ;
872
                                             PAIR ;
873
                                             DUG 2 } }
874
                                       { DROP } } ;
875
                              DROP } ;
876
                       DROP }
877
                     { SWAP ;
878
                       DUP ;
879
                       DUG 2 ;
880
                       CAR ;
881
                       CAR ;
882
                       CAR ;
883
                       CAR ;
884
                       CAR ;
885
                       SENDER ;
886
                       COMPARE ;
887
                       EQ ;
888
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
889
                       SWAP ;
890
                       UNPAIR ;
891
                       UNPAIR ;
892
                       SWAP ;
893
                       CDR ;
894
                       DIG 3 ;
895
                       PAIR ;
896
                       SWAP ;
897
                       PAIR ;
898
                       PAIR } } }
899
             { IF_LEFT
900
                 { IF_LEFT
901
                     { DUP ;
902
                       ITER { IF_LEFT
903
                                { DUP 3 ;
904
                                  CAR ;
905
                                  CAR ;
906
                                  CAR ;
907
                                  CAR ;
908
                                  CAR ;
909
                                  SENDER ;
910
                                  COMPARE ;
911
                                  EQ ;
912
                                  IF
913
                                    { PUSH bool True }
914
                                    { DUP ; CAR ; SENDER ; COMPARE ; EQ } ;
915
                                  IF
916
                                    { PUSH bool True }
917
                                    { DUP 3 ; CAR ; CAR ; CAR ; CAR ; CDR ; SENDER ; MEM } ;
918
                                  IF
919
                                    {}
920
                                    { PUSH string "FA2_NOT_ADMIN_OR_OPERATOR" ; FAILWITH } ;
921
                                  DIG 2 ;
922
                                  UNPAIR ;
923
                                  SWAP ;
924
                                  UNPAIR ;
925
                                  UNPAIR ;
926
                                  SWAP ;
927
                                  PUSH (option unit) (Some Unit) ;
928
                                  DIG 5 ;
929
                                  UPDATE ;
930
                                  SWAP ;
931
                                  PAIR ;
932
                                  PAIR ;
933
                                  SWAP ;
934
                                  PAIR ;
935
                                  SWAP }
936
                                { DUP 3 ;
937
                                  CAR ;
938
                                  CAR ;
939
                                  CAR ;
940
                                  CAR ;
941
                                  CAR ;
942
                                  SENDER ;
943
                                  COMPARE ;
944
                                  EQ ;
945
                                  IF
946
                                    { PUSH bool True }
947
                                    { DUP ; CAR ; SENDER ; COMPARE ; EQ } ;
948
                                  IF
949
                                    { PUSH bool True }
950
                                    { DUP 3 ; CAR ; CAR ; CAR ; CAR ; CDR ; SENDER ; MEM } ;
951
                                  IF
952
                                    {}
953
                                    { PUSH string "FA2_NOT_ADMIN_OR_OPERATOR" ; FAILWITH } ;
954
                                  DIG 2 ;
955
                                  UNPAIR ;
956
                                  SWAP ;
957
                                  UNPAIR ;
958
                                  UNPAIR ;
959
                                  SWAP ;
960
                                  NONE unit ;
961
                                  DIG 5 ;
962
                                  UPDATE ;
963
                                  SWAP ;
964
                                  PAIR ;
965
                                  PAIR ;
966
                                  SWAP ;
967
                                  PAIR ;
968
                                  SWAP } } ;
969
                       DROP }
970
                     { SWAP ;
971
                       DUP ;
972
                       DUG 2 ;
973
                       CAR ;
974
                       CAR ;
975
                       CAR ;
976
                       CAR ;
977
                       CAR ;
978
                       SENDER ;
979
                       COMPARE ;
980
                       EQ ;
981
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
982
                       UPDATE 5 } }
983
                 { IF_LEFT
984
                     { SWAP ;
985
                       DUP ;
986
                       DUG 2 ;
987
                       CAR ;
988
                       CAR ;
989
                       CAR ;
990
                       CAR ;
991
                       CAR ;
992
                       SENDER ;
993
                       COMPARE ;
994
                       EQ ;
995
                       IF { PUSH bool True } { SENDER ; SENDER ; COMPARE ; EQ } ;
996
                       IF
997
                         { PUSH bool True }
998
                         { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; CDR ; SENDER ; MEM } ;
999
                       IF {} { PUSH string "FA2_NOT_ADMIN_OR_OPERATOR" ; FAILWITH } ;
1000
                       SWAP ;
1001
                       DUP ;
1002
                       DUG 2 ;
1003
                       GET 7 ;
1004
                       SWAP ;
1005
                       DUP ;
1006
                       DUG 2 ;
1007
                       CDR ;
1008
                       MEM ;
1009
                       IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
1010
                       SWAP ;
1011
                       DUP ;
1012
                       GET 7 ;
1013
                       DIG 2 ;
1014
                       DUP ;
1015
                       CAR ;
1016
                       SWAP ;
1017
                       DUP ;
1018
                       DUG 4 ;
1019
                       CDR ;
1020
                       PAIR ;
1021
                       SOME ;
1022
                       DIG 3 ;
1023
                       CDR ;
1024
                       UPDATE ;
1025
                       UPDATE 7 }
1026
                     { DROP ;
1027
                       DUP ;
1028
                       CAR ;
1029
                       CAR ;
1030
                       CAR ;
1031
                       GET 4 ;
1032
                       IF_NONE { PUSH int 480 ; FAILWITH } {} ;
1033
                       SENDER ;
1034
                       COMPARE ;
1035
                       EQ ;
1036
                       IF {} { PUSH string "FA2_NOT_PENDING_ADMIN" ; FAILWITH } ;
1037
                       DUP ;
1038
                       UNPAIR ;
1039
                       UNPAIR ;
1040
                       UNPAIR ;
1041
                       UNPAIR ;
1042
                       CDR ;
1043
                       DIG 5 ;
1044
                       CAR ;
1045
                       CAR ;
1046
                       CAR ;
1047
                       GET 4 ;
1048
                       IF_NONE { PUSH int 480 ; FAILWITH } {} ;
1049
                       PAIR ;
1050
                       PAIR ;
1051
                       NONE address ;
1052
                       UPDATE 4 ;
1053
                       PAIR ;
1054
                       PAIR ;
1055
                       PAIR } } } ;
1056
           NIL operation } ;
1057
       PAIR }