BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • objkt.com Collection Factory v3
Contract factory
operations (9.47K)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
538
1065
 
1
parameter (pair %deploy_contract (option %admin address) (bytes %metadata));
2
storage (pair (big_map %metadata string bytes)
3
              (big_map %minted_collections address unit));
4
code { UNPAIR ;
5
       SENDER ;
6
       SWAP ;
7
       DUP ;
8
       DUG 2 ;
9
       CAR ;
10
       IF_NONE {} { DROP 2 ; DUP ; CAR ; IF_NONE { PUSH int 523 ; FAILWITH } {} } ;
11
       NIL operation ;
12
       EMPTY_BIG_MAP nat (pair nat (map string bytes)) ;
13
       EMPTY_BIG_MAP nat nat ;
14
       PAIR ;
15
       EMPTY_BIG_MAP (pair address (pair address nat)) unit ;
16
       PAIR ;
17
       EMPTY_BIG_MAP string bytes ;
18
       DIG 4 ;
19
       CDR ;
20
       SOME ;
21
       PUSH string "" ;
22
       UPDATE ;
23
       EMPTY_BIG_MAP address unit ;
24
       PAIR ;
25
       EMPTY_BIG_MAP nat (pair bool bool) ;
26
       PAIR ;
27
       PAIR ;
28
       EMPTY_BIG_MAP (pair address nat) nat ;
29
       PUSH nat 0 ;
30
       PAIR ;
31
       EMPTY_BIG_MAP nat
32
                      (pair
33
                        (pair (pair nat (list (map address (map (option nat) nat))))
34
                              (pair (option (pair address bytes)) timestamp))
35
                        (pair (pair nat mutez)
36
                              (pair (pair (map address nat) nat) timestamp))) ;
37
       PAIR ;
38
       EMPTY_BIG_MAP (pair address nat) nat ;
39
       DIG 4 ;
40
       PAIR ;
41
       PAIR ;
42
       PAIR ;
43
       PUSH mutez 0 ;
44
       NONE key_hash ;
45
       CREATE_CONTRACT { parameter (or
46
                                     (or
47
                                       (or (address %add_manager)
48
                                           (or
49
                                             (map %airdrop nat
50
                                                           (list (pair (nat %amount)
51
                                                                      (address %recipient))))
52
                                             (pair %balance_of
53
                                               (list %requests (pair (address %owner)
54
                                                                    (nat %token_id)))
55
                                               (contract %callback (list (pair
56
                                                                         (pair %request
57
                                                                           (address %owner)
58
                                                                           (nat %token_id))
59
                                                                         (nat %balance)))))))
60
                                       (or
61
                                         (or
62
                                           (list %burn (pair (address %from_)
63
                                                            (pair (nat %token_id)
64
                                                                  (nat %amount))))
65
                                           (pair %claim
66
                                             (pair (nat %amount)
67
                                                   (list %burn_tokens (pair
68
                                                                       (address %address)
69
                                                                       (nat %token_id))))
70
                                             (pair (option %condition_extra bytes)
71
                                                   (pair (option %proxy_for address)
72
                                                         (nat %token_id)))))
73
                                         (or
74
                                           (pair %create_claim (nat %token_id)
75
                                                               (pair
76
                                                                 (timestamp %start_time)
77
                                                                 (pair
78
                                                                   (timestamp %end_time)
79
                                                                   (pair (mutez %price)
80
                                                                         (pair
81
                                                                           (list %burn_recipe (map
82
                                                                                               address
83
                                                                                               (map
84
                                                                                                 (option nat)
85
                                                                                                 nat)))
86
                                                                           (pair
87
                                                                             (nat %max_per_wallet)
88
                                                                             (pair
89
                                                                               (nat %airdrop_capacity)
90
                                                                               (pair
91
                                                                                 (pair %split
92
                                                                                   (map %shares
93
                                                                                     address
94
                                                                                     nat)
95
                                                                                   (nat %total))
96
                                                                                 (option %condition (pair
97
                                                                                                     (address %address)
98
                                                                                                     (bytes %id)))))))))))
99
                                           (map %create_token string bytes))))
100
                                     (or
101
                                       (or
102
                                         (or
103
                                           (pair %lock (bool %metadata)
104
                                                       (pair (bool %mint)
105
                                                             (nat %token_id)))
106
                                           (pair %mint
107
                                             (list %mint_items (pair (nat %amount)
108
                                                                    (address %to_)))
109
                                             (nat %token_id)))
110
                                         (or (address %remove_manager)
111
                                             (address %set_administrator)))
112
                                       (or
113
                                         (or (big_map %set_metadata string bytes)
114
                                             (list %transfer (pair (address %from_)
115
                                                                  (list %txs (pair
116
                                                                              (address %to_)
117
                                                                              (pair
118
                                                                                (nat %token_id)
119
                                                                                (nat %amount)))))))
120
                                         (or
121
                                           (list %update_operators (or
122
                                                                    (pair %add_operator
123
                                                                      (address %owner)
124
                                                                      (pair
125
                                                                        (address %operator)
126
                                                                        (nat %token_id)))
127
                                                                    (pair %remove_operator
128
                                                                      (address %owner)
129
                                                                      (pair
130
                                                                        (address %operator)
131
                                                                        (nat %token_id)))))
132
                                           (list %update_token_metadata (pair
133
                                                                         (nat %token_id)
134
                                                                         (map %token_info
135
                                                                           string
136
                                                                           bytes))))))) ;
137
                         storage (pair
138
                                   (pair
139
                                     (pair (address %administrator)
140
                                           (big_map %claimed (pair address nat) nat))
141
                                     (pair
142
                                       (big_map %claims nat
143
                                                        (pair
144
                                                          (pair
145
                                                            (pair
146
                                                              (nat %airdrop_capacity)
147
                                                              (list %burn_recipe (map
148
                                                                                  address
149
                                                                                  (map
150
                                                                                    (option nat)
151
                                                                                    nat))))
152
                                                            (pair
153
                                                              (option %condition (pair
154
                                                                                  (address %address)
155
                                                                                  (bytes %id)))
156
                                                              (timestamp %end_time)))
157
                                                          (pair
158
                                                            (pair (nat %max_per_wallet)
159
                                                                  (mutez %price))
160
                                                            (pair
161
                                                              (pair %split
162
                                                                (map %shares address nat)
163
                                                                (nat %total))
164
                                                              (timestamp %start_time)))))
165
                                       (pair (nat %last_token_id)
166
                                             (big_map %ledger (pair address nat) nat))))
167
                                   (pair
168
                                     (pair
169
                                       (big_map %locked nat
170
                                                        (pair (bool %metadata)
171
                                                              (bool %mint)))
172
                                       (pair (big_map %managers address unit)
173
                                             (big_map %metadata string bytes)))
174
                                     (pair
175
                                       (big_map %operators
176
                                         (pair (address %owner)
177
                                               (pair (address %operator) (nat %token_id)))
178
                                         unit)
179
                                       (pair (big_map %supply nat nat)
180
                                             (big_map %token_metadata nat
181
                                                                      (pair
182
                                                                        (nat %token_id)
183
                                                                        (map %token_info
184
                                                                          string
185
                                                                          bytes))))))) ;
186
                         code { UNPAIR ;
187
                                IF_LEFT
188
                                  { IF_LEFT
189
                                      { IF_LEFT
190
                                          { SWAP ;
191
                                            DUP ;
192
                                            DUG 2 ;
193
                                            CAR ;
194
                                            CAR ;
195
                                            CAR ;
196
                                            SENDER ;
197
                                            COMPARE ;
198
                                            EQ ;
199
                                            IF
200
                                              {}
201
                                              { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
202
                                            SWAP ;
203
                                            UNPAIR ;
204
                                            SWAP ;
205
                                            UNPAIR ;
206
                                            UNPAIR ;
207
                                            SWAP ;
208
                                            UNPAIR ;
209
                                            PUSH (option unit) (Some Unit) ;
210
                                            DIG 6 ;
211
                                            UPDATE ;
212
                                            PAIR ;
213
                                            SWAP ;
214
                                            PAIR ;
215
                                            PAIR ;
216
                                            SWAP ;
217
                                            PAIR ;
218
                                            NIL operation }
219
                                          { IF_LEFT
220
                                              { SWAP ;
221
                                                DUP ;
222
                                                DUG 2 ;
223
                                                CAR ;
224
                                                CAR ;
225
                                                CAR ;
226
                                                SENDER ;
227
                                                COMPARE ;
228
                                                EQ ;
229
                                                IF
230
                                                  { PUSH bool True }
231
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
232
                                                IF
233
                                                  {}
234
                                                  { PUSH string "FA2_NOT_MANAGER" ;
235
                                                    FAILWITH } ;
236
                                                DUP ;
237
                                                ITER { DUP 3 ;
238
                                                       CAR ;
239
                                                       GET 3 ;
240
                                                       SWAP ;
241
                                                       DUP ;
242
                                                       DUG 2 ;
243
                                                       CAR ;
244
                                                       MEM ;
245
                                                       IF
246
                                                         {}
247
                                                         { PUSH string "OE_NO_SALE" ;
248
                                                           FAILWITH } ;
249
                                                       DUP ;
250
                                                       CDR ;
251
                                                       ITER { DUP 4 ;
252
                                                              CAR ;
253
                                                              GET 3 ;
254
                                                              DUP 3 ;
255
                                                              CAR ;
256
                                                              GET ;
257
                                                              IF_NONE
258
                                                                { PUSH int 420 ;
259
                                                                  FAILWITH }
260
                                                                {} ;
261
                                                              CAR ;
262
                                                              CAR ;
263
                                                              CAR ;
264
                                                              DUP 3 ;
265
                                                              CAR ;
266
                                                              DUP 3 ;
267
                                                              CDR ;
268
                                                              PAIR ;
269
                                                              DUP 6 ;
270
                                                              UNPAIR ;
271
                                                              UNPAIR ;
272
                                                              SWAP ;
273
                                                              UNPAIR ;
274
                                                              SWAP ;
275
                                                              UNPAIR ;
276
                                                              SWAP ;
277
                                                              DUP 8 ;
278
                                                              CAR ;
279
                                                              DIG 11 ;
280
                                                              CAR ;
281
                                                              GET 6 ;
282
                                                              DUP 8 ;
283
                                                              GET ;
284
                                                              IF_NONE
285
                                                                { PUSH nat 0 }
286
                                                                {} ;
287
                                                              ADD ;
288
                                                              SOME ;
289
                                                              DIG 6 ;
290
                                                              UPDATE ;
291
                                                              SWAP ;
292
                                                              PAIR ;
293
                                                              SWAP ;
294
                                                              PAIR ;
295
                                                              SWAP ;
296
                                                              PAIR ;
297
                                                              PAIR ;
298
                                                              DUP ;
299
                                                              GET 7 ;
300
                                                              DUP ;
301
                                                              DUP 6 ;
302
                                                              CAR ;
303
                                                              DUP ;
304
                                                              DUG 2 ;
305
                                                              GET ;
306
                                                              IF_NONE
307
                                                                { PUSH int 426 ;
308
                                                                  FAILWITH }
309
                                                                {} ;
310
                                                              DUP 6 ;
311
                                                              CAR ;
312
                                                              ADD ;
313
                                                              SOME ;
314
                                                              SWAP ;
315
                                                              UPDATE ;
316
                                                              UPDATE 7 ;
317
                                                              UNPAIR ;
318
                                                              UNPAIR ;
319
                                                              SWAP ;
320
                                                              UNPAIR ;
321
                                                              DUP ;
322
                                                              DUP 8 ;
323
                                                              CAR ;
324
                                                              DUP ;
325
                                                              DUG 2 ;
326
                                                              GET ;
327
                                                              IF_NONE
328
                                                                { PUSH int 427 ;
329
                                                                  FAILWITH }
330
                                                                {} ;
331
                                                              UNPAIR ;
332
                                                              UNPAIR ;
333
                                                              CDR ;
334
                                                              DIG 9 ;
335
                                                              CAR ;
336
                                                              DIG 9 ;
337
                                                              SUB ;
338
                                                              ISNAT ;
339
                                                              IF_NONE
340
                                                                { PUSH string "OE_AIRDROP_CAP_REACHED" ;
341
                                                                  FAILWITH }
342
                                                                {} ;
343
                                                              PAIR ;
344
                                                              PAIR ;
345
                                                              PAIR ;
346
                                                              SOME ;
347
                                                              SWAP ;
348
                                                              UPDATE ;
349
                                                              PAIR ;
350
                                                              SWAP ;
351
                                                              PAIR ;
352
                                                              PAIR ;
353
                                                              DUG 2 } ;
354
                                                       DROP } ;
355
                                                DROP ;
356
                                                NIL operation }
357
                                              { NIL operation ;
358
                                                DUP ;
359
                                                DUP 3 ;
360
                                                CDR ;
361
                                                PUSH mutez 0 ;
362
                                                DUP 5 ;
363
                                                CAR ;
364
                                                MAP { DUP 7 ;
365
                                                      GET 8 ;
366
                                                      SWAP ;
367
                                                      DUP ;
368
                                                      DUG 2 ;
369
                                                      CDR ;
370
                                                      MEM ;
371
                                                      IF
372
                                                        {}
373
                                                        { PUSH string "FA2_TOKEN_UNDEFINED" ;
374
                                                          FAILWITH } ;
375
                                                      DUP 7 ;
376
                                                      CAR ;
377
                                                      GET 6 ;
378
                                                      SWAP ;
379
                                                      DUP ;
380
                                                      CDR ;
381
                                                      SWAP ;
382
                                                      DUP ;
383
                                                      DUG 3 ;
384
                                                      CAR ;
385
                                                      PAIR ;
386
                                                      GET ;
387
                                                      IF_NONE { PUSH nat 0 } {} ;
388
                                                      SWAP ;
389
                                                      PAIR } ;
390
                                                DIG 4 ;
391
                                                DROP ;
392
                                                DIG 4 ;
393
                                                DROP ;
394
                                                TRANSFER_TOKENS ;
395
                                                CONS } } }
396
                                      { IF_LEFT
397
                                          { IF_LEFT
398
                                              { DUP ;
399
                                                ITER { DUP 3 ;
400
                                                       GET 8 ;
401
                                                       SWAP ;
402
                                                       DUP ;
403
                                                       DUG 2 ;
404
                                                       GET 3 ;
405
                                                       MEM ;
406
                                                       IF
407
                                                         {}
408
                                                         { PUSH string "FA2_TOKEN_UNDEFINED" ;
409
                                                           FAILWITH } ;
410
                                                       DUP ;
411
                                                       CAR ;
412
                                                       SENDER ;
413
                                                       COMPARE ;
414
                                                       EQ ;
415
                                                       IF
416
                                                         { PUSH bool True }
417
                                                         { DUP 3 ;
418
                                                           GET 5 ;
419
                                                           SWAP ;
420
                                                           DUP ;
421
                                                           DUG 2 ;
422
                                                           GET 3 ;
423
                                                           SENDER ;
424
                                                           DUP 4 ;
425
                                                           CAR ;
426
                                                           PAIR 3 ;
427
                                                           MEM } ;
428
                                                       IF
429
                                                         {}
430
                                                         { PUSH string "FA2_NOT_OPERATOR" ;
431
                                                           FAILWITH } ;
432
                                                       DUP 3 ;
433
                                                       UNPAIR ;
434
                                                       UNPAIR ;
435
                                                       SWAP ;
436
                                                       UNPAIR ;
437
                                                       SWAP ;
438
                                                       UNPAIR ;
439
                                                       SWAP ;
440
                                                       DUP 6 ;
441
                                                       GET 4 ;
442
                                                       DIG 8 ;
443
                                                       CAR ;
444
                                                       GET 6 ;
445
                                                       DIG 7 ;
446
                                                       DUP ;
447
                                                       GET 3 ;
448
                                                       SWAP ;
449
                                                       DUP ;
450
                                                       DUG 9 ;
451
                                                       CAR ;
452
                                                       PAIR ;
453
                                                       GET ;
454
                                                       IF_NONE { PUSH nat 0 } {} ;
455
                                                       SUB ;
456
                                                       ISNAT ;
457
                                                       IF_NONE
458
                                                         { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
459
                                                           FAILWITH }
460
                                                         {} ;
461
                                                       SOME ;
462
                                                       DIG 6 ;
463
                                                       DUP ;
464
                                                       GET 3 ;
465
                                                       SWAP ;
466
                                                       DUP ;
467
                                                       DUG 8 ;
468
                                                       CAR ;
469
                                                       PAIR ;
470
                                                       UPDATE ;
471
                                                       SWAP ;
472
                                                       PAIR ;
473
                                                       SWAP ;
474
                                                       PAIR ;
475
                                                       SWAP ;
476
                                                       PAIR ;
477
                                                       PAIR ;
478
                                                       DUG 2 ;
479
                                                       DUP ;
480
                                                       GET 4 ;
481
                                                       DUP 4 ;
482
                                                       GET 7 ;
483
                                                       DUP 3 ;
484
                                                       GET 3 ;
485
                                                       GET ;
486
                                                       IF_NONE { PUSH nat 0 } {} ;
487
                                                       SUB ;
488
                                                       ISNAT ;
489
                                                       IF_NONE
490
                                                         { DIG 2 ;
491
                                                           DUP ;
492
                                                           GET 7 ;
493
                                                           PUSH (option nat) (Some 0) ;
494
                                                           DIG 3 ;
495
                                                           GET 3 ;
496
                                                           UPDATE ;
497
                                                           UPDATE 7 ;
498
                                                           SWAP }
499
                                                         { DIG 3 ;
500
                                                           DUP ;
501
                                                           GET 7 ;
502
                                                           DIG 2 ;
503
                                                           SOME ;
504
                                                           DIG 3 ;
505
                                                           GET 3 ;
506
                                                           UPDATE ;
507
                                                           UPDATE 7 ;
508
                                                           SWAP } } ;
509
                                                DROP ;
510
                                                NIL operation }
511
                                              { SWAP ;
512
                                                DUP ;
513
                                                DUG 2 ;
514
                                                CAR ;
515
                                                GET 3 ;
516
                                                SWAP ;
517
                                                DUP ;
518
                                                DUG 2 ;
519
                                                GET 6 ;
520
                                                MEM ;
521
                                                IF
522
                                                  {}
523
                                                  { PUSH string "OE_NO_SALE_ACTIVE" ;
524
                                                    FAILWITH } ;
525
                                                SWAP ;
526
                                                DUP ;
527
                                                DUG 2 ;
528
                                                CAR ;
529
                                                GET 3 ;
530
                                                SWAP ;
531
                                                DUP ;
532
                                                DUG 2 ;
533
                                                GET 6 ;
534
                                                GET ;
535
                                                IF_NONE { PUSH int 236 ; FAILWITH } {} ;
536
                                                DUP ;
537
                                                GET 6 ;
538
                                                NOW ;
539
                                                COMPARE ;
540
                                                GE ;
541
                                                IF
542
                                                  { DUP ; CAR ; GET 4 ; NOW ; COMPARE ; LE }
543
                                                  { PUSH bool False } ;
544
                                                IF
545
                                                  {}
546
                                                  { PUSH string "OE_NOT_IN_SALE_TIME" ;
547
                                                    FAILWITH } ;
548
                                                SENDER ;
549
                                                DUP 3 ;
550
                                                GET 5 ;
551
                                                IF_NONE {} { SWAP ; DROP } ;
552
                                                DUP 3 ;
553
                                                GET 6 ;
554
                                                SWAP ;
555
                                                DUP ;
556
                                                DUG 2 ;
557
                                                PAIR ;
558
                                                PUSH nat 0 ;
559
                                                DUP 5 ;
560
                                                CAR ;
561
                                                CAR ;
562
                                                COMPARE ;
563
                                                GT ;
564
                                                IF
565
                                                  {}
566
                                                  { PUSH string "OE_WRONG_AMOUNT" ;
567
                                                    FAILWITH } ;
568
                                                PUSH nat 0 ;
569
                                                DUP 4 ;
570
                                                GET 3 ;
571
                                                CAR ;
572
                                                COMPARE ;
573
                                                GT ;
574
                                                IF
575
                                                  { DUP 5 ;
576
                                                    CAR ;
577
                                                    CAR ;
578
                                                    CDR ;
579
                                                    SWAP ;
580
                                                    DUP ;
581
                                                    DUG 2 ;
582
                                                    GET ;
583
                                                    IF_NONE { PUSH nat 0 } {} ;
584
                                                    DUP 4 ;
585
                                                    GET 3 ;
586
                                                    CAR ;
587
                                                    SUB ;
588
                                                    ISNAT ;
589
                                                    IF_NONE
590
                                                      { PUSH int 261 ; FAILWITH }
591
                                                      {} ;
592
                                                    DUP 5 ;
593
                                                    CAR ;
594
                                                    CAR ;
595
                                                    COMPARE ;
596
                                                    LE ;
597
                                                    IF
598
                                                      {}
599
                                                      { PUSH string "OE_MAX_REACHED" ;
600
                                                        FAILWITH } }
601
                                                  {} ;
602
                                                DUP 5 ;
603
                                                UNPAIR ;
604
                                                UNPAIR ;
605
                                                UNPAIR ;
606
                                                SWAP ;
607
                                                DUP 8 ;
608
                                                CAR ;
609
                                                CAR ;
610
                                                DIG 9 ;
611
                                                CAR ;
612
                                                CAR ;
613
                                                CDR ;
614
                                                DUP 7 ;
615
                                                GET ;
616
                                                IF_NONE { PUSH nat 0 } {} ;
617
                                                ADD ;
618
                                                SOME ;
619
                                                DUP 6 ;
620
                                                UPDATE ;
621
                                                SWAP ;
622
                                                PAIR ;
623
                                                PAIR ;
624
                                                PAIR ;
625
                                                DUG 4 ;
626
                                                PUSH nat 0 ;
627
                                                DUP 4 ;
628
                                                CAR ;
629
                                                CAR ;
630
                                                CDR ;
631
                                                SIZE ;
632
                                                COMPARE ;
633
                                                GT ;
634
                                                IF
635
                                                  { DUP 4 ;
636
                                                    CAR ;
637
                                                    CDR ;
638
                                                    NIL operation ;
639
                                                    DUP 6 ;
640
                                                    CAR ;
641
                                                    CAR ;
642
                                                    PUSH nat 0 ;
643
                                                    DUP ;
644
                                                    DUP 3 ;
645
                                                    COMPARE ;
646
                                                    GT ;
647
                                                    LOOP { DUP 7 ;
648
                                                           CAR ;
649
                                                           CAR ;
650
                                                           CDR ;
651
                                                           ITER { DIG 4 ;
652
                                                                  IF_CONS
653
                                                                    { SWAP ;
654
                                                                      DUP ;
655
                                                                      DUG 2 ;
656
                                                                      DUG 6 ;
657
                                                                      DUP 3 ;
658
                                                                      SWAP ;
659
                                                                      DUP ;
660
                                                                      DUG 2 ;
661
                                                                      CAR ;
662
                                                                      MEM ;
663
                                                                      IF
664
                                                                        {}
665
                                                                        { PUSH string "OE_REDEEM_MISTMACH_FA2" ;
666
                                                                          FAILWITH } ;
667
                                                                      DUP 3 ;
668
                                                                      SWAP ;
669
                                                                      DUP ;
670
                                                                      DUG 2 ;
671
                                                                      CAR ;
672
                                                                      GET ;
673
                                                                      IF_NONE
674
                                                                        { PUSH int 279 ;
675
                                                                          FAILWITH }
676
                                                                        {} ;
677
                                                                      NONE nat ;
678
                                                                      SWAP ;
679
                                                                      DUP ;
680
                                                                      DUG 2 ;
681
                                                                      NONE nat ;
682
                                                                      MEM ;
683
                                                                      IF
684
                                                                        { DIG 3 ;
685
                                                                          DROP ;
686
                                                                          DIG 3 ;
687
                                                                          DROP }
688
                                                                        { DROP ;
689
                                                                          DIG 2 ;
690
                                                                          DROP ;
691
                                                                          DIG 2 ;
692
                                                                          DROP ;
693
                                                                          SWAP ;
694
                                                                          DUP ;
695
                                                                          DUG 2 ;
696
                                                                          CDR ;
697
                                                                          SOME ;
698
                                                                          SWAP ;
699
                                                                          DUP ;
700
                                                                          DUG 2 ;
701
                                                                          SWAP ;
702
                                                                          DUP ;
703
                                                                          DUG 2 ;
704
                                                                          MEM ;
705
                                                                          IF
706
                                                                            {}
707
                                                                            { PUSH string "OE_REDEEM_MISTMATCH_ID" ;
708
                                                                              FAILWITH } } ;
709
                                                                      DIG 5 ;
710
                                                                      DUP 4 ;
711
                                                                      CAR ;
712
                                                                      CONTRACT %transfer (list (pair
713
                                                                                                (address %from_)
714
                                                                                                (list %txs (pair
715
                                                                                                            (address %to_)
716
                                                                                                            (pair
717
                                                                                                              (nat %token_id)
718
                                                                                                              (nat %amount)))))) ;
719
                                                                      IF_NONE
720
                                                                        { PUSH int 490 ;
721
                                                                          FAILWITH }
722
                                                                        {} ;
723
                                                                      PUSH mutez 0 ;
724
                                                                      NIL (pair address
725
                                                                                (list (pair
726
                                                                                       address
727
                                                                                       (pair
728
                                                                                         nat
729
                                                                                         nat)))) ;
730
                                                                      NIL (pair address
731
                                                                                (pair
732
                                                                                  nat
733
                                                                                  nat)) ;
734
                                                                      DIG 6 ;
735
                                                                      DIG 6 ;
736
                                                                      GET ;
737
                                                                      IF_NONE
738
                                                                        { PUSH int 294 ;
739
                                                                          FAILWITH }
740
                                                                        {} ;
741
                                                                      DIG 6 ;
742
                                                                      CDR ;
743
                                                                      PUSH address "tz1burnburnburnburnburnburnburjAYjjX" ;
744
                                                                      PAIR 3 ;
745
                                                                      CONS ;
746
                                                                      SENDER ;
747
                                                                      PAIR ;
748
                                                                      CONS ;
749
                                                                      TRANSFER_TOKENS ;
750
                                                                      CONS ;
751
                                                                      DUG 2 }
752
                                                                    { PUSH string "OE_MISSING_BURN" ;
753
                                                                      FAILWITH } } ;
754
                                                           PUSH nat 1 ;
755
                                                           ADD ;
756
                                                           DUP ;
757
                                                           DUP 3 ;
758
                                                           COMPARE ;
759
                                                           GT } ;
760
                                                    DROP 2 ;
761
                                                    SWAP ;
762
                                                    DROP }
763
                                                  { NIL operation } ;
764
                                                PUSH mutez 0 ;
765
                                                DUP 5 ;
766
                                                GET 3 ;
767
                                                CDR ;
768
                                                COMPARE ;
769
                                                GT ;
770
                                                IF
771
                                                  { DUP 4 ;
772
                                                    GET 3 ;
773
                                                    CDR ;
774
                                                    DUP 6 ;
775
                                                    CAR ;
776
                                                    CAR ;
777
                                                    MUL ;
778
                                                    AMOUNT ;
779
                                                    COMPARE ;
780
                                                    EQ ;
781
                                                    IF
782
                                                      {}
783
                                                      { PUSH string "OE_WRONG_AMOUNT" ;
784
                                                        FAILWITH } ;
785
                                                    DUP 4 ;
786
                                                    GET 5 ;
787
                                                    CAR ;
788
                                                    ITER { DUP 5 ;
789
                                                           GET 5 ;
790
                                                           CDR ;
791
                                                           SWAP ;
792
                                                           DUP ;
793
                                                           DUG 2 ;
794
                                                           CDR ;
795
                                                           AMOUNT ;
796
                                                           MUL ;
797
                                                           EDIV ;
798
                                                           IF_NONE
799
                                                             { PUSH int 306 ; FAILWITH }
800
                                                             {} ;
801
                                                           CAR ;
802
                                                           DUP ;
803
                                                           PUSH mutez 0 ;
804
                                                           COMPARE ;
805
                                                           LT ;
806
                                                           IF
807
                                                             { DUG 2 ;
808
                                                               CAR ;
809
                                                               CONTRACT unit ;
810
                                                               IF_NONE
811
                                                                 { PUSH int 310 ;
812
                                                                   FAILWITH }
813
                                                                 {} ;
814
                                                               DIG 2 ;
815
                                                               UNIT ;
816
                                                               TRANSFER_TOKENS ;
817
                                                               CONS }
818
                                                             { DROP 2 } } }
819
                                                  {} ;
820
                                                DUP 4 ;
821
                                                CAR ;
822
                                                GET 3 ;
823
                                                IF_NONE
824
                                                  { DIG 2 ; DROP ; DIG 2 ; DROP }
825
                                                  { DIG 4 ;
826
                                                    DROP ;
827
                                                    DUP ;
828
                                                    DUG 2 ;
829
                                                    CAR ;
830
                                                    CONTRACT %enforce_conditions (list (pair
831
                                                                                        (pair
832
                                                                                          (nat %amount)
833
                                                                                          (address %claimer))
834
                                                                                        (pair
835
                                                                                          (bytes %condition_id)
836
                                                                                          (pair
837
                                                                                            (option %extra bytes)
838
                                                                                            (pair %token
839
                                                                                              (address %address)
840
                                                                                              (nat %token_id)))))) ;
841
                                                    IF_NONE
842
                                                      { PUSH int 27 ; FAILWITH }
843
                                                      {} ;
844
                                                    PUSH mutez 0 ;
845
                                                    NIL (pair (pair nat address)
846
                                                              (pair bytes
847
                                                                    (pair (option bytes)
848
                                                                          (pair address
849
                                                                                nat)))) ;
850
                                                    DUP 8 ;
851
                                                    GET 6 ;
852
                                                    SELF_ADDRESS ;
853
                                                    PAIR ;
854
                                                    DUP 9 ;
855
                                                    GET 3 ;
856
                                                    PAIR ;
857
                                                    DIG 5 ;
858
                                                    CDR ;
859
                                                    PAIR ;
860
                                                    DIG 6 ;
861
                                                    DUP 8 ;
862
                                                    CAR ;
863
                                                    CAR ;
864
                                                    PAIR ;
865
                                                    PAIR ;
866
                                                    CONS ;
867
                                                    TRANSFER_TOKENS ;
868
                                                    CONS } ;
869
                                                DUP 4 ;
870
                                                UNPAIR ;
871
                                                UNPAIR ;
872
                                                SWAP ;
873
                                                UNPAIR ;
874
                                                SWAP ;
875
                                                UNPAIR ;
876
                                                SWAP ;
877
                                                DUP 8 ;
878
                                                CAR ;
879
                                                CAR ;
880
                                                DIG 9 ;
881
                                                CAR ;
882
                                                GET 6 ;
883
                                                DUP 9 ;
884
                                                GET ;
885
                                                IF_NONE { PUSH nat 0 } {} ;
886
                                                ADD ;
887
                                                SOME ;
888
                                                DIG 7 ;
889
                                                UPDATE ;
890
                                                SWAP ;
891
                                                PAIR ;
892
                                                SWAP ;
893
                                                PAIR ;
894
                                                SWAP ;
895
                                                PAIR ;
896
                                                PAIR ;
897
                                                DUP ;
898
                                                GET 7 ;
899
                                                DUP ;
900
                                                DUP 5 ;
901
                                                GET 6 ;
902
                                                DUP ;
903
                                                DUG 2 ;
904
                                                GET ;
905
                                                IF_NONE { PUSH int 333 ; FAILWITH } {} ;
906
                                                DUP 6 ;
907
                                                CAR ;
908
                                                CAR ;
909
                                                ADD ;
910
                                                SOME ;
911
                                                SWAP ;
912
                                                UPDATE ;
913
                                                UPDATE 7 ;
914
                                                DUP ;
915
                                                DUG 3 ;
916
                                                GET 3 ;
917
                                                CAR ;
918
                                                DUP 3 ;
919
                                                GET 6 ;
920
                                                MEM ;
921
                                                IF
922
                                                  { DIG 2 ;
923
                                                    UNPAIR ;
924
                                                    SWAP ;
925
                                                    UNPAIR ;
926
                                                    UNPAIR ;
927
                                                    DUP ;
928
                                                    DIG 6 ;
929
                                                    GET 6 ;
930
                                                    DUP ;
931
                                                    DUG 2 ;
932
                                                    GET ;
933
                                                    IF_NONE
934
                                                      { PUSH int 339 ; FAILWITH }
935
                                                      {} ;
936
                                                    PUSH bool True ;
937
                                                    UPDATE 2 ;
938
                                                    SOME ;
939
                                                    SWAP ;
940
                                                    UPDATE ;
941
                                                    PAIR ;
942
                                                    PAIR ;
943
                                                    SWAP ;
944
                                                    PAIR ;
945
                                                    SWAP }
946
                                                  { DIG 2 ;
947
                                                    UNPAIR ;
948
                                                    SWAP ;
949
                                                    UNPAIR ;
950
                                                    UNPAIR ;
951
                                                    PUSH (option (pair bool bool)) (Some (Pair False True)) ;
952
                                                    DIG 6 ;
953
                                                    GET 6 ;
954
                                                    UPDATE ;
955
                                                    PAIR ;
956
                                                    PAIR ;
957
                                                    SWAP ;
958
                                                    PAIR ;
959
                                                    SWAP } } }
960
                                          { IF_LEFT
961
                                              { SWAP ;
962
                                                DUP ;
963
                                                DUG 2 ;
964
                                                CAR ;
965
                                                CAR ;
966
                                                CAR ;
967
                                                SENDER ;
968
                                                COMPARE ;
969
                                                EQ ;
970
                                                IF
971
                                                  { PUSH bool True }
972
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
973
                                                IF
974
                                                  {}
975
                                                  { PUSH string "FA2_NOT_MANAGER" ;
976
                                                    FAILWITH } ;
977
                                                PUSH nat 0 ;
978
                                                DUP 3 ;
979
                                                GET 7 ;
980
                                                DUP 3 ;
981
                                                CAR ;
982
                                                GET ;
983
                                                IF_NONE { PUSH int 179 ; FAILWITH } {} ;
984
                                                COMPARE ;
985
                                                EQ ;
986
                                                IF
987
                                                  {}
988
                                                  { PUSH string "OE_TOKEN_EXISTS" ;
989
                                                    FAILWITH } ;
990
                                                DUP ;
991
                                                GET 9 ;
992
                                                ITER { DUP ;
993
                                                       SIZE ;
994
                                                       PUSH nat 0 ;
995
                                                       COMPARE ;
996
                                                       LT ;
997
                                                       IF
998
                                                         {}
999
                                                         { PUSH string "OE_NO_BURN_OPT" ;
1000
                                                           FAILWITH } ;
1001
                                                       DUP ;
1002
                                                       ITER { CDR ;
1003
                                                              SIZE ;
1004
                                                              PUSH nat 0 ;
1005
                                                              COMPARE ;
1006
                                                              LT ;
1007
                                                              IF
1008
                                                                {}
1009
                                                                { PUSH string "OE_BURN_OPT_EMPTY" ;
1010
                                                                  FAILWITH } } ;
1011
                                                       DROP } ;
1012
                                                SWAP ;
1013
                                                DUP ;
1014
                                                DUG 2 ;
1015
                                                GET 8 ;
1016
                                                SWAP ;
1017
                                                DUP ;
1018
                                                DUG 2 ;
1019
                                                CAR ;
1020
                                                MEM ;
1021
                                                IF
1022
                                                  {}
1023
                                                  { PUSH string "OE_TOKEN_N_EXISTS" ;
1024
                                                    FAILWITH } ;
1025
                                                DUP ;
1026
                                                GET 15 ;
1027
                                                CDR ;
1028
                                                PUSH nat 0 ;
1029
                                                COMPARE ;
1030
                                                LT ;
1031
                                                IF
1032
                                                  {}
1033
                                                  { PUSH string "OE_NO_TOTAL" ; FAILWITH } ;
1034
                                                PUSH nat 0 ;
1035
                                                SWAP ;
1036
                                                DUP ;
1037
                                                DUG 2 ;
1038
                                                GET 15 ;
1039
                                                CAR ;
1040
                                                ITER { CDR ; ADD } ;
1041
                                                SWAP ;
1042
                                                DUP ;
1043
                                                DUG 2 ;
1044
                                                GET 15 ;
1045
                                                CDR ;
1046
                                                COMPARE ;
1047
                                                EQ ;
1048
                                                IF
1049
                                                  {}
1050
                                                  { PUSH string "OE_SHARE_MISMATCH" ;
1051
                                                    FAILWITH } ;
1052
                                                DUP ;
1053
                                                GET 3 ;
1054
                                                SWAP ;
1055
                                                DUP ;
1056
                                                DUG 2 ;
1057
                                                GET 5 ;
1058
                                                SUB ;
1059
                                                PUSH int 300 ;
1060
                                                SWAP ;
1061
                                                COMPARE ;
1062
                                                GE ;
1063
                                                IF
1064
                                                  {}
1065
                                                  { PUSH string "OE_AT_LEAST_300" ;
1066
                                                    FAILWITH } ;
1067
                                                SWAP ;
1068
                                                UNPAIR ;
1069
                                                UNPAIR ;
1070
                                                SWAP ;
1071
                                                UNPAIR ;
1072
                                                DIG 4 ;
1073
                                                DUP ;
1074
                                                GET 3 ;
1075
                                                SWAP ;
1076
                                                DUP ;
1077
                                                DUG 6 ;
1078
                                                GET 15 ;
1079
                                                PAIR ;
1080
                                                DIG 5 ;
1081
                                                DUP ;
1082
                                                GET 7 ;
1083
                                                SWAP ;
1084
                                                DUP ;
1085
                                                DUG 7 ;
1086
                                                GET 11 ;
1087
                                                PAIR ;
1088
                                                PAIR ;
1089
                                                DIG 5 ;
1090
                                                DUP ;
1091
                                                GET 5 ;
1092
                                                SWAP ;
1093
                                                DUP ;
1094
                                                DUG 7 ;
1095
                                                GET 16 ;
1096
                                                PAIR ;
1097
                                                DIG 6 ;
1098
                                                DUP ;
1099
                                                GET 9 ;
1100
                                                SWAP ;
1101
                                                DUP ;
1102
                                                DUG 8 ;
1103
                                                GET 13 ;
1104
                                                PAIR ;
1105
                                                PAIR ;
1106
                                                PAIR ;
1107
                                                SOME ;
1108
                                                DIG 5 ;
1109
                                                CAR ;
1110
                                                UPDATE ;
1111
                                                PAIR ;
1112
                                                SWAP ;
1113
                                                PAIR ;
1114
                                                PAIR }
1115
                                              { SWAP ;
1116
                                                DUP ;
1117
                                                DUG 2 ;
1118
                                                CAR ;
1119
                                                CAR ;
1120
                                                CAR ;
1121
                                                SENDER ;
1122
                                                COMPARE ;
1123
                                                EQ ;
1124
                                                IF
1125
                                                  { PUSH bool True }
1126
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1127
                                                IF
1128
                                                  {}
1129
                                                  { PUSH string "FA2_NOT_MANAGER" ;
1130
                                                    FAILWITH } ;
1131
                                                PUSH nat 1 ;
1132
                                                DUP 3 ;
1133
                                                CAR ;
1134
                                                GET 5 ;
1135
                                                ADD ;
1136
                                                DIG 2 ;
1137
                                                DUP ;
1138
                                                GET 8 ;
1139
                                                DIG 3 ;
1140
                                                DUP 4 ;
1141
                                                PAIR ;
1142
                                                SOME ;
1143
                                                DUP 4 ;
1144
                                                UPDATE ;
1145
                                                UPDATE 8 ;
1146
                                                DUP ;
1147
                                                GET 7 ;
1148
                                                PUSH (option nat) (Some 0) ;
1149
                                                DIG 3 ;
1150
                                                UPDATE ;
1151
                                                UPDATE 7 ;
1152
                                                UNPAIR ;
1153
                                                UNPAIR ;
1154
                                                SWAP ;
1155
                                                UNPAIR ;
1156
                                                SWAP ;
1157
                                                UNPAIR ;
1158
                                                PUSH nat 1 ;
1159
                                                ADD ;
1160
                                                PAIR ;
1161
                                                SWAP ;
1162
                                                PAIR ;
1163
                                                SWAP ;
1164
                                                PAIR ;
1165
                                                PAIR } ;
1166
                                            NIL operation } } }
1167
                                  { IF_LEFT
1168
                                      { IF_LEFT
1169
                                          { IF_LEFT
1170
                                              { SWAP ;
1171
                                                DUP ;
1172
                                                DUG 2 ;
1173
                                                CAR ;
1174
                                                CAR ;
1175
                                                CAR ;
1176
                                                SENDER ;
1177
                                                COMPARE ;
1178
                                                EQ ;
1179
                                                IF
1180
                                                  { PUSH bool True }
1181
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1182
                                                IF
1183
                                                  {}
1184
                                                  { PUSH string "FA2_NOT_MANAGER" ;
1185
                                                    FAILWITH } ;
1186
                                                SWAP ;
1187
                                                DUP ;
1188
                                                DUG 2 ;
1189
                                                GET 8 ;
1190
                                                SWAP ;
1191
                                                DUP ;
1192
                                                DUG 2 ;
1193
                                                GET 4 ;
1194
                                                MEM ;
1195
                                                IF
1196
                                                  {}
1197
                                                  { PUSH string "OE_TOKEN_MISSING" ;
1198
                                                    FAILWITH } ;
1199
                                                SWAP ;
1200
                                                DUP ;
1201
                                                DUG 2 ;
1202
                                                GET 3 ;
1203
                                                CAR ;
1204
                                                SWAP ;
1205
                                                DUP ;
1206
                                                DUG 2 ;
1207
                                                GET 4 ;
1208
                                                GET ;
1209
                                                IF_NONE
1210
                                                  { PUSH (pair bool bool) (Pair False False) }
1211
                                                  {} ;
1212
                                                DUP ;
1213
                                                CAR ;
1214
                                                IF
1215
                                                  { PUSH bool True }
1216
                                                  { SWAP ; DUP ; DUG 2 ; CAR } ;
1217
                                                UPDATE 1 ;
1218
                                                DUP ;
1219
                                                CDR ;
1220
                                                IF
1221
                                                  { PUSH bool True }
1222
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 } ;
1223
                                                UPDATE 2 ;
1224
                                                DIG 2 ;
1225
                                                UNPAIR ;
1226
                                                SWAP ;
1227
                                                UNPAIR ;
1228
                                                UNPAIR ;
1229
                                                DIG 4 ;
1230
                                                SOME ;
1231
                                                DIG 5 ;
1232
                                                GET 4 ;
1233
                                                UPDATE ;
1234
                                                PAIR ;
1235
                                                PAIR ;
1236
                                                SWAP ;
1237
                                                PAIR }
1238
                                              { SWAP ;
1239
                                                DUP ;
1240
                                                DUG 2 ;
1241
                                                CAR ;
1242
                                                CAR ;
1243
                                                CAR ;
1244
                                                SENDER ;
1245
                                                COMPARE ;
1246
                                                EQ ;
1247
                                                IF
1248
                                                  { PUSH bool True }
1249
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1250
                                                IF
1251
                                                  {}
1252
                                                  { PUSH string "FA2_NOT_MANAGER" ;
1253
                                                    FAILWITH } ;
1254
                                                SWAP ;
1255
                                                DUP ;
1256
                                                DUG 2 ;
1257
                                                GET 8 ;
1258
                                                SWAP ;
1259
                                                DUP ;
1260
                                                DUG 2 ;
1261
                                                CDR ;
1262
                                                MEM ;
1263
                                                IF
1264
                                                  {}
1265
                                                  { PUSH string "OE_TOKEN_N_EXTIST" ;
1266
                                                    FAILWITH } ;
1267
                                                SWAP ;
1268
                                                DUP ;
1269
                                                DUG 2 ;
1270
                                                GET 3 ;
1271
                                                CAR ;
1272
                                                SWAP ;
1273
                                                DUP ;
1274
                                                DUG 2 ;
1275
                                                CDR ;
1276
                                                MEM ;
1277
                                                IF
1278
                                                  { SWAP ;
1279
                                                    DUP ;
1280
                                                    DUG 2 ;
1281
                                                    GET 3 ;
1282
                                                    CAR ;
1283
                                                    SWAP ;
1284
                                                    DUP ;
1285
                                                    DUG 2 ;
1286
                                                    CDR ;
1287
                                                    GET ;
1288
                                                    IF_NONE
1289
                                                      { PUSH int 452 ; FAILWITH }
1290
                                                      {} ;
1291
                                                    CDR ;
1292
                                                    NOT }
1293
                                                  { PUSH bool True } ;
1294
                                                IF
1295
                                                  {}
1296
                                                  { PUSH string "OE_MINT_LOCKED" ;
1297
                                                    FAILWITH } ;
1298
                                                SWAP ;
1299
                                                DUP ;
1300
                                                DUG 2 ;
1301
                                                CAR ;
1302
                                                GET 3 ;
1303
                                                SWAP ;
1304
                                                DUP ;
1305
                                                DUG 2 ;
1306
                                                CDR ;
1307
                                                MEM ;
1308
                                                IF
1309
                                                  { NOW ;
1310
                                                    DUP 3 ;
1311
                                                    CAR ;
1312
                                                    GET 3 ;
1313
                                                    DUP 3 ;
1314
                                                    CDR ;
1315
                                                    GET ;
1316
                                                    IF_NONE
1317
                                                      { PUSH int 459 ; FAILWITH }
1318
                                                      {} ;
1319
                                                    CAR ;
1320
                                                    GET 4 ;
1321
                                                    COMPARE ;
1322
                                                    LT }
1323
                                                  { PUSH bool True } ;
1324
                                                IF
1325
                                                  {}
1326
                                                  { PUSH string "OE_TOKEN_CONFIGURED_FOR_SALE" ;
1327
                                                    FAILWITH } ;
1328
                                                PUSH nat 0 ;
1329
                                                SWAP ;
1330
                                                DUP ;
1331
                                                DUG 2 ;
1332
                                                CAR ;
1333
                                                ITER { DUP 4 ;
1334
                                                       UNPAIR ;
1335
                                                       UNPAIR ;
1336
                                                       SWAP ;
1337
                                                       UNPAIR ;
1338
                                                       SWAP ;
1339
                                                       UNPAIR ;
1340
                                                       SWAP ;
1341
                                                       DUP 6 ;
1342
                                                       CAR ;
1343
                                                       DIG 9 ;
1344
                                                       CAR ;
1345
                                                       GET 6 ;
1346
                                                       DUP 10 ;
1347
                                                       CDR ;
1348
                                                       DUP 9 ;
1349
                                                       CDR ;
1350
                                                       PAIR ;
1351
                                                       GET ;
1352
                                                       IF_NONE { PUSH nat 0 } {} ;
1353
                                                       ADD ;
1354
                                                       SOME ;
1355
                                                       DUP 9 ;
1356
                                                       CDR ;
1357
                                                       DUP 8 ;
1358
                                                       CDR ;
1359
                                                       PAIR ;
1360
                                                       UPDATE ;
1361
                                                       SWAP ;
1362
                                                       PAIR ;
1363
                                                       SWAP ;
1364
                                                       PAIR ;
1365
                                                       SWAP ;
1366
                                                       PAIR ;
1367
                                                       PAIR ;
1368
                                                       DUG 3 ;
1369
                                                       CAR ;
1370
                                                       ADD } ;
1371
                                                DUP 3 ;
1372
                                                GET 7 ;
1373
                                                DUP 3 ;
1374
                                                CDR ;
1375
                                                GET ;
1376
                                                IF_NONE { PUSH nat 0 } {} ;
1377
                                                DIG 3 ;
1378
                                                DUP ;
1379
                                                GET 7 ;
1380
                                                DIG 3 ;
1381
                                                DIG 3 ;
1382
                                                ADD ;
1383
                                                SOME ;
1384
                                                DIG 3 ;
1385
                                                CDR ;
1386
                                                UPDATE ;
1387
                                                UPDATE 7 } }
1388
                                          { IF_LEFT
1389
                                              { SWAP ;
1390
                                                DUP ;
1391
                                                DUG 2 ;
1392
                                                CAR ;
1393
                                                CAR ;
1394
                                                CAR ;
1395
                                                SENDER ;
1396
                                                COMPARE ;
1397
                                                EQ ;
1398
                                                IF
1399
                                                  {}
1400
                                                  { PUSH string "FA2_NOT_ADMIN" ;
1401
                                                    FAILWITH } ;
1402
                                                SWAP ;
1403
                                                UNPAIR ;
1404
                                                SWAP ;
1405
                                                UNPAIR ;
1406
                                                UNPAIR ;
1407
                                                SWAP ;
1408
                                                UNPAIR ;
1409
                                                NONE unit ;
1410
                                                DIG 6 ;
1411
                                                UPDATE ;
1412
                                                PAIR ;
1413
                                                SWAP ;
1414
                                                PAIR ;
1415
                                                PAIR ;
1416
                                                SWAP ;
1417
                                                PAIR }
1418
                                              { SWAP ;
1419
                                                DUP ;
1420
                                                DUG 2 ;
1421
                                                CAR ;
1422
                                                CAR ;
1423
                                                CAR ;
1424
                                                SENDER ;
1425
                                                COMPARE ;
1426
                                                EQ ;
1427
                                                IF
1428
                                                  {}
1429
                                                  { PUSH string "FA2_NOT_ADMIN" ;
1430
                                                    FAILWITH } ;
1431
                                                SWAP ;
1432
                                                UNPAIR ;
1433
                                                UNPAIR ;
1434
                                                CDR ;
1435
                                                DIG 3 ;
1436
                                                PAIR ;
1437
                                                PAIR ;
1438
                                                PAIR } } }
1439
                                      { IF_LEFT
1440
                                          { IF_LEFT
1441
                                              { SWAP ;
1442
                                                DUP ;
1443
                                                DUG 2 ;
1444
                                                CAR ;
1445
                                                CAR ;
1446
                                                CAR ;
1447
                                                SENDER ;
1448
                                                COMPARE ;
1449
                                                EQ ;
1450
                                                IF
1451
                                                  {}
1452
                                                  { PUSH string "FA2_NOT_ADMIN" ;
1453
                                                    FAILWITH } ;
1454
                                                SWAP ;
1455
                                                UNPAIR ;
1456
                                                SWAP ;
1457
                                                UNPAIR ;
1458
                                                UNPAIR ;
1459
                                                SWAP ;
1460
                                                CAR ;
1461
                                                DIG 4 ;
1462
                                                SWAP ;
1463
                                                PAIR ;
1464
                                                SWAP ;
1465
                                                PAIR ;
1466
                                                PAIR ;
1467
                                                SWAP ;
1468
                                                PAIR }
1469
                                              { DUP ;
1470
                                                ITER { DUP ;
1471
                                                       CDR ;
1472
                                                       ITER { DUP 4 ;
1473
                                                              GET 8 ;
1474
                                                              SWAP ;
1475
                                                              DUP ;
1476
                                                              DUG 2 ;
1477
                                                              GET 3 ;
1478
                                                              MEM ;
1479
                                                              IF
1480
                                                                {}
1481
                                                                { PUSH string "FA2_TOKEN_UNDEFINED" ;
1482
                                                                  FAILWITH } ;
1483
                                                              SWAP ;
1484
                                                              DUP ;
1485
                                                              DUG 2 ;
1486
                                                              CAR ;
1487
                                                              SENDER ;
1488
                                                              COMPARE ;
1489
                                                              EQ ;
1490
                                                              IF
1491
                                                                { PUSH bool True }
1492
                                                                { DUP 4 ;
1493
                                                                  GET 5 ;
1494
                                                                  SWAP ;
1495
                                                                  DUP ;
1496
                                                                  DUG 2 ;
1497
                                                                  GET 3 ;
1498
                                                                  SENDER ;
1499
                                                                  DUP 5 ;
1500
                                                                  CAR ;
1501
                                                                  PAIR 3 ;
1502
                                                                  MEM } ;
1503
                                                              IF
1504
                                                                {}
1505
                                                                { PUSH string "FA2_NOT_OPERATOR" ;
1506
                                                                  FAILWITH } ;
1507
                                                              DUP ;
1508
                                                              GET 4 ;
1509
                                                              PUSH nat 0 ;
1510
                                                              COMPARE ;
1511
                                                              LT ;
1512
                                                              IF
1513
                                                                { DUP 4 ;
1514
                                                                  UNPAIR ;
1515
                                                                  UNPAIR ;
1516
                                                                  SWAP ;
1517
                                                                  UNPAIR ;
1518
                                                                  SWAP ;
1519
                                                                  UNPAIR ;
1520
                                                                  SWAP ;
1521
                                                                  DUP 6 ;
1522
                                                                  GET 4 ;
1523
                                                                  DIG 9 ;
1524
                                                                  CAR ;
1525
                                                                  GET 6 ;
1526
                                                                  DUP 8 ;
1527
                                                                  GET 3 ;
1528
                                                                  DUP 10 ;
1529
                                                                  CAR ;
1530
                                                                  PAIR ;
1531
                                                                  GET ;
1532
                                                                  IF_NONE
1533
                                                                    { PUSH nat 0 }
1534
                                                                    {} ;
1535
                                                                  SUB ;
1536
                                                                  ISNAT ;
1537
                                                                  IF_NONE
1538
                                                                    { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
1539
                                                                      FAILWITH }
1540
                                                                    {} ;
1541
                                                                  SOME ;
1542
                                                                  DUP 7 ;
1543
                                                                  GET 3 ;
1544
                                                                  DUP 9 ;
1545
                                                                  CAR ;
1546
                                                                  PAIR ;
1547
                                                                  UPDATE ;
1548
                                                                  SWAP ;
1549
                                                                  PAIR ;
1550
                                                                  SWAP ;
1551
                                                                  PAIR ;
1552
                                                                  SWAP ;
1553
                                                                  PAIR ;
1554
                                                                  PAIR ;
1555
                                                                  DUP ;
1556
                                                                  DUG 4 ;
1557
                                                                  UNPAIR ;
1558
                                                                  UNPAIR ;
1559
                                                                  SWAP ;
1560
                                                                  UNPAIR ;
1561
                                                                  SWAP ;
1562
                                                                  UNPAIR ;
1563
                                                                  SWAP ;
1564
                                                                  DUP 6 ;
1565
                                                                  GET 4 ;
1566
                                                                  DIG 9 ;
1567
                                                                  CAR ;
1568
                                                                  GET 6 ;
1569
                                                                  DIG 7 ;
1570
                                                                  DUP ;
1571
                                                                  GET 3 ;
1572
                                                                  SWAP ;
1573
                                                                  DUP ;
1574
                                                                  DUG 9 ;
1575
                                                                  CAR ;
1576
                                                                  PAIR ;
1577
                                                                  GET ;
1578
                                                                  IF_NONE
1579
                                                                    { PUSH nat 0 }
1580
                                                                    {} ;
1581
                                                                  ADD ;
1582
                                                                  SOME ;
1583
                                                                  DIG 6 ;
1584
                                                                  DUP ;
1585
                                                                  GET 3 ;
1586
                                                                  SWAP ;
1587
                                                                  CAR ;
1588
                                                                  PAIR ;
1589
                                                                  UPDATE ;
1590
                                                                  SWAP ;
1591
                                                                  PAIR ;
1592
                                                                  SWAP ;
1593
                                                                  PAIR ;
1594
                                                                  SWAP ;
1595
                                                                  PAIR ;
1596
                                                                  PAIR ;
1597
                                                                  DUG 2 }
1598
                                                                { DROP } } ;
1599
                                                       DROP } ;
1600
                                                DROP } }
1601
                                          { IF_LEFT
1602
                                              { DUP ;
1603
                                                ITER { IF_LEFT
1604
                                                         { DUP ;
1605
                                                           CAR ;
1606
                                                           SENDER ;
1607
                                                           COMPARE ;
1608
                                                           EQ ;
1609
                                                           IF
1610
                                                             {}
1611
                                                             { PUSH string "FA2_NOT_OWNER" ;
1612
                                                               FAILWITH } ;
1613
                                                           DIG 2 ;
1614
                                                           DUP ;
1615
                                                           GET 5 ;
1616
                                                           PUSH (option unit) (Some Unit) ;
1617
                                                           DIG 3 ;
1618
                                                           UPDATE ;
1619
                                                           UPDATE 5 ;
1620
                                                           SWAP }
1621
                                                         { DUP ;
1622
                                                           CAR ;
1623
                                                           SENDER ;
1624
                                                           COMPARE ;
1625
                                                           EQ ;
1626
                                                           IF
1627
                                                             {}
1628
                                                             { PUSH string "FA2_NOT_OWNER" ;
1629
                                                               FAILWITH } ;
1630
                                                           DIG 2 ;
1631
                                                           DUP ;
1632
                                                           GET 5 ;
1633
                                                           NONE unit ;
1634
                                                           DIG 3 ;
1635
                                                           UPDATE ;
1636
                                                           UPDATE 5 ;
1637
                                                           SWAP } } ;
1638
                                                DROP }
1639
                                              { SWAP ;
1640
                                                DUP ;
1641
                                                DUG 2 ;
1642
                                                CAR ;
1643
                                                CAR ;
1644
                                                CAR ;
1645
                                                SENDER ;
1646
                                                COMPARE ;
1647
                                                EQ ;
1648
                                                IF
1649
                                                  { PUSH bool True }
1650
                                                  { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1651
                                                IF
1652
                                                  {}
1653
                                                  { PUSH string "FA2_NOT_MANAGER" ;
1654
                                                    FAILWITH } ;
1655
                                                DUP ;
1656
                                                ITER { DUP 3 ;
1657
                                                       GET 3 ;
1658
                                                       CAR ;
1659
                                                       SWAP ;
1660
                                                       DUP ;
1661
                                                       DUG 2 ;
1662
                                                       CAR ;
1663
                                                       MEM ;
1664
                                                       IF
1665
                                                         { DUP 3 ;
1666
                                                           GET 3 ;
1667
                                                           CAR ;
1668
                                                           SWAP ;
1669
                                                           DUP ;
1670
                                                           DUG 2 ;
1671
                                                           CAR ;
1672
                                                           GET ;
1673
                                                           IF_NONE
1674
                                                             { PUSH int 357 ; FAILWITH }
1675
                                                             {} ;
1676
                                                           CAR ;
1677
                                                           NOT }
1678
                                                         { PUSH bool True } ;
1679
                                                       IF
1680
                                                         {}
1681
                                                         { PUSH string "OE_TOKEN_LOCKED" ;
1682
                                                           FAILWITH } ;
1683
                                                       DIG 2 ;
1684
                                                       DUP ;
1685
                                                       GET 8 ;
1686
                                                       DIG 2 ;
1687
                                                       DUP ;
1688
                                                       CDR ;
1689
                                                       SWAP ;
1690
                                                       DUP ;
1691
                                                       DUG 4 ;
1692
                                                       CAR ;
1693
                                                       PAIR ;
1694
                                                       SOME ;
1695
                                                       DIG 3 ;
1696
                                                       CAR ;
1697
                                                       UPDATE ;
1698
                                                       UPDATE 8 ;
1699
                                                       SWAP } ;
1700
                                                DROP } } } ;
1701
                                    NIL operation } ;
1702
                                NIL operation ;
1703
                                SWAP ;
1704
                                ITER { CONS } ;
1705
                                PAIR } } ;
1706
       PAIR ;
1707
       DUP ;
1708
       DUG 2 ;
1709
       CAR ;
1710
       CONS ;
1711
       SWAP ;
1712
       DIG 2 ;
1713
       DUP ;
1714
       CDR ;
1715
       PUSH (option unit) (Some Unit) ;
1716
       DIG 3 ;
1717
       CDR ;
1718
       UPDATE ;
1719
       UPDATE 2 ;
1720
       SWAP ;
1721
       NIL operation ;
1722
       SWAP ;
1723
       ITER { CONS } ;
1724
       PAIR }