x
1003
{ parameter (or (or (or (address %ChangeAdmin) (unit %ChangeState)) (or (address %ChangeSystem) (nat %ModifyFee))) (or (or (pair %Swap (pair (nat %MinimumTokenOut) (address %recipient)) (pair (address %requiredTokenAddress) (pair (nat %requiredTokenId) (nat %tokenAmountIn)))) (pair %add_liquidity (address %recipient) (pair (nat %token1_max) (nat %token2_max)))) (or (pair %forwardFee (nat %epoch) (address %feeDistributor)) (pair %remove_liquidity (pair (nat %lpAmount) (address %recipient)) (pair (nat %token1_min) (nat %token2_min)))))) ; storage (pair (pair (pair (pair (address %admin) (nat %lpFee)) (pair (address %lqtAddress) (nat %lqtTotal))) (pair (pair (bool %paused) (bool %state)) (pair (address %token1Address) (pair (bool %token1Check) (nat %token1Fee))))) (pair (pair (pair (nat %token1Id) (nat %token1Pool)) (pair (nat %token1Precision) (pair (address %token2Address) (bool %token2Check)))) (pair (pair (nat %token2Fee) (nat %token2Id)) (pair (nat %token2Pool) (pair (nat %token2Precision) (option %voterContract address)))))) ; code { LAMBDA nat nat { DUP ; PUSH nat 0 ; SWAP ; COMPARE ; GE ; IF {} { PUSH string "FlatSwap_Negative_Value" ; FAILWITH } ; DUP ; DUP ; DUG 2 ; SWAP ; DUP ; DUP ; DUG 3 ; MUL ; COMPARE ; GT ; LOOP { PUSH nat 2 ; SWAP ; DUP ; DUP 4 ; EDIV ; IF_NONE { PUSH int 63 ; FAILWITH } { CAR } ; ADD ; EDIV ; IF_NONE { PUSH int 63 ; FAILWITH } { CAR } ; SWAP ; DUP ; DUG 2 ; SWAP ; DUP ; DUP ; DUG 3 ; MUL ; COMPARE ; GT } ; SWAP ; DUP ; DUG 2 ; SWAP ; DUP ; DUP ; DUG 3 ; MUL ; COMPARE ; LE ; IF { DUP ; PUSH nat 1 ; ADD ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DIG 2 ; COMPARE ; LT } { SWAP ; DROP ; PUSH bool False } ; IF {} { PUSH string "WrongCondition: ((y.value * y.value) <= _x0) & (_x0 < ((y.value + 1) * (y.value + 1)))" ; FAILWITH } } ; SWAP ; UNPAIR ; IF_LEFT { DIG 2 ; DROP ; IF_LEFT { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CDR ; DIG 4 ; PAIR ; PAIR ; PAIR ; PAIR } { DROP ; DUP ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ; DUP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; CDR ; DIG 4 ; CAR ; GET 3 ; CAR ; NOT ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR } } { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ; SOME ; UPDATE 10 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; CAR ; PUSH bool True ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ; DUP ; PUSH nat 100 ; SWAP ; COMPARE ; GE ; IF {} { PUSH string "WrongCondition: params >= 100" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; DIG 4 ; SWAP ; PAIR ; PAIR ; PAIR ; PAIR } } ; NIL operation } { IF_LEFT { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; GET 3 ; CAR ; IF { PUSH string "FlatSwap_Paused_State" ; FAILWITH } {} ; DUP ; GET 6 ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; GET 5 ; SWAP ; DUP ; DUG 2 ; GET 3 ; COMPARE ; EQ ; IF { SWAP ; DUP ; DUG 2 ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; GET 5 ; COMPARE ; EQ } { PUSH bool False } ; IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 5 ; SWAP ; DUP ; DUG 2 ; GET 3 ; COMPARE ; EQ ; IF { SWAP ; DUP ; DUG 2 ; GET 5 ; CDR ; SWAP ; DUP ; DUG 2 ; GET 5 ; COMPARE ; EQ } { PUSH bool False } } ; IF {} { PUSH string "FlatSwap_Invalid_Pair" ; FAILWITH } ; SWAP ; DUP ; GET 3 ; GET 3 ; SWAP ; DUP ; DUG 3 ; GET 3 ; CAR ; CDR ; MUL ; DIG 2 ; DUP ; GET 9 ; SWAP ; DUP ; DUG 4 ; GET 7 ; MUL ; DUP 4 ; CAR ; GET 5 ; DUP 4 ; GET 3 ; COMPARE ; EQ ; IF { DUP 4 ; GET 3 ; CAR ; CAR ; DUP 4 ; GET 5 ; COMPARE ; EQ } { PUSH bool False } ; IF { PUSH int 5 ; PUSH nat 0 ; DUP ; DUP 5 ; SUB ; ABS ; DUP 7 ; GET 9 ; DUP 7 ; GET 6 ; MUL ; DUP 5 ; ADD ; ADD ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; ADD ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; MUL ; MUL ; MUL ; INT ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; SUB ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 6 ; DUP 10 ; SUB ; ABS ; DUP 12 ; GET 9 ; DUP 12 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; MUL ; MUL ; MUL ; ADD ; ABS ; PUSH nat 8 ; MUL ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; SUB ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; MUL ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 6 ; DUP 10 ; SUB ; ABS ; DUP 12 ; GET 9 ; DUP 12 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; PAIR ; DUP ; CAR ; SWAP ; DUP ; DUG 2 ; CDR ; PUSH int 0 ; DUP 6 ; COMPARE ; NEQ ; LOOP { DIG 2 ; DROP 3 ; DUP ; DUP 5 ; SUB ; ABS ; DUP 7 ; GET 9 ; DUP 7 ; GET 6 ; MUL ; DUP 5 ; ADD ; ADD ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; ADD ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; MUL ; MUL ; MUL ; INT ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; SUB ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 6 ; DUP 10 ; SUB ; ABS ; DUP 12 ; GET 9 ; DUP 12 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; MUL ; MUL ; MUL ; ADD ; ABS ; PUSH nat 8 ; MUL ; SWAP ; DUP ; DUG 2 ; DUP 6 ; SUB ; ABS ; DUP 8 ; GET 9 ; DUP 8 ; GET 6 ; MUL ; DUP 6 ; ADD ; SUB ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; MUL ; MUL ; DUP 3 ; DUP 7 ; SUB ; ABS ; DUP 9 ; GET 9 ; DUP 9 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; MUL ; DUP 4 ; DUP 8 ; SUB ; ABS ; DUP 10 ; GET 9 ; DUP 10 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 5 ; DUP 9 ; SUB ; ABS ; DUP 11 ; GET 9 ; DUP 11 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 6 ; DUP 10 ; SUB ; ABS ; DUP 12 ; GET 9 ; DUP 12 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; PAIR ; DUP ; CAR ; SWAP ; DUP ; DUG 2 ; CDR ; DUP ; DUP 8 ; DUP 8 ; SUB ; DUP 9 ; DUP 9 ; SUB ; MUL ; DUP 9 ; DUP 9 ; SUB ; DUP 10 ; DUP 10 ; SUB ; MUL ; MUL ; DUP 9 ; DUP 9 ; SUB ; DUP 10 ; DUP 10 ; SUB ; MUL ; DUP 10 ; DUP 10 ; SUB ; DUP 11 ; DUP 11 ; SUB ; MUL ; MUL ; MUL ; DUP 9 ; DUP 9 ; ADD ; DUP 10 ; DUP 10 ; ADD ; MUL ; DUP 10 ; DUP 10 ; ADD ; DUP 11 ; DUP 11 ; ADD ; MUL ; MUL ; DUP 10 ; DUP 10 ; ADD ; DUP 11 ; DUP 11 ; ADD ; MUL ; DUP 11 ; DUP 11 ; ADD ; DUP 12 ; DUP 12 ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; DUP 4 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 160 ; FAILWITH } { CAR } ; DIG 4 ; ADD ; DUG 3 ; PUSH int 1 ; DIG 5 ; SUB ; DUG 4 ; PUSH int 0 ; DUP 6 ; COMPARE ; NEQ } ; DROP 3 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 3 ; DROP ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; EDIV ; IF_NONE { PUSH int 280 ; FAILWITH } { CAR } ; DUP 3 ; CAR ; CAR ; DUP 5 ; GET 3 ; GET 3 ; DUP 3 ; DUP 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; COMPARE ; GE ; IF {} { PUSH string "FlatSwap_Min_Cash_Error" ; FAILWITH } ; DIG 3 ; DUP ; GET 3 ; CAR ; CDR ; SWAP ; DUP ; DUG 5 ; GET 3 ; GET 3 ; DUP 3 ; DUP 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; COMPARE ; LT ; IF {} { PUSH string "FlatSwap_Cash_Bought_Exceeds_Pool" ; FAILWITH } ; DUP 4 ; CAR ; GET 3 ; CDR ; IF { DUP 4 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; CAR ; DUP 8 ; GET 3 ; GET 3 ; DUP 7 ; EDIV ; IF_NONE { PUSH int 288 ; FAILWITH } { CAR } ; DIG 8 ; GET 3 ; CAR ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; DUG 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DIG 9 ; GET 3 ; GET 3 ; DUP 8 ; EDIV ; IF_NONE { PUSH int 289 ; FAILWITH } { CAR } ; ADD ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 3 } { DUP 4 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; CAR ; DUP 8 ; GET 3 ; GET 3 ; DUP 6 ; DUP 8 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; DIG 8 ; GET 3 ; CAR ; CDR ; SUB ; ABS ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 3 } ; DIG 3 ; DUP ; GET 7 ; DUP 5 ; GET 6 ; ADD ; UPDATE 7 ; DUG 3 ; PUSH nat 0 ; DUP 4 ; GET 6 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 4 ; GET 3 ; GET 6 ; IF { NIL operation ; DUP 5 ; GET 3 ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 8 ; GET 6 ; DUP 10 ; GET 5 ; CDR ; SELF_ADDRESS ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { NIL operation ; DUP 5 ; GET 3 ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 6 ; GET 6 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS } ; PUSH nat 0 ; DUP 6 ; GET 3 ; GET 3 ; DUP 4 ; DUP 6 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 5 ; CAR ; GET 7 ; IF { DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 9 ; GET 3 ; GET 3 ; DIG 6 ; DIG 7 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; DUP 8 ; GET 3 ; CAR ; CAR ; DIG 7 ; CAR ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 7 ; GET 3 ; GET 3 ; DIG 4 ; DIG 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ; DIG 4 ; CAR ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } } { PUSH int 5 ; PUSH nat 0 ; DUP ; DUP 4 ; SUB ; ABS ; DUP 7 ; GET 3 ; GET 3 ; DUP 7 ; GET 6 ; MUL ; DUP 6 ; ADD ; ADD ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; MUL ; MUL ; INT ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; DUP 6 ; DUP 9 ; SUB ; ABS ; DUP 12 ; GET 3 ; GET 3 ; DUP 12 ; GET 6 ; MUL ; DUP 11 ; ADD ; SUB ; MUL ; MUL ; MUL ; MUL ; ADD ; ABS ; PUSH nat 8 ; MUL ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; MUL ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; DUP 6 ; DUP 9 ; SUB ; ABS ; DUP 12 ; GET 3 ; GET 3 ; DUP 12 ; GET 6 ; MUL ; DUP 11 ; ADD ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; PAIR ; DUP ; CAR ; SWAP ; DUP ; DUG 2 ; CDR ; PUSH int 0 ; DUP 6 ; COMPARE ; NEQ ; LOOP { DIG 2 ; DROP 3 ; DUP ; DUP 4 ; SUB ; ABS ; DUP 7 ; GET 3 ; GET 3 ; DUP 7 ; GET 6 ; MUL ; DUP 6 ; ADD ; ADD ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; ADD ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; MUL ; MUL ; INT ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; DUP 6 ; DUP 9 ; SUB ; ABS ; DUP 12 ; GET 3 ; GET 3 ; DUP 12 ; GET 6 ; MUL ; DUP 11 ; ADD ; SUB ; MUL ; MUL ; MUL ; MUL ; ADD ; ABS ; PUSH nat 8 ; MUL ; SWAP ; DUP ; DUG 2 ; DUP 5 ; SUB ; ABS ; DUP 8 ; GET 3 ; GET 3 ; DUP 8 ; GET 6 ; MUL ; DUP 7 ; ADD ; SUB ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; SUB ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; SUB ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; SUB ; MUL ; MUL ; MUL ; DUP 3 ; DUP 6 ; SUB ; ABS ; DUP 9 ; GET 3 ; GET 3 ; DUP 9 ; GET 6 ; MUL ; DUP 8 ; ADD ; ADD ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; MUL ; DUP 4 ; DUP 7 ; SUB ; ABS ; DUP 10 ; GET 3 ; GET 3 ; DUP 10 ; GET 6 ; MUL ; DUP 9 ; ADD ; ADD ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; MUL ; DUP 5 ; DUP 8 ; SUB ; ABS ; DUP 11 ; GET 3 ; GET 3 ; DUP 11 ; GET 6 ; MUL ; DUP 10 ; ADD ; ADD ; DUP 6 ; DUP 9 ; SUB ; ABS ; DUP 12 ; GET 3 ; GET 3 ; DUP 12 ; GET 6 ; MUL ; DUP 11 ; ADD ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; PAIR ; DUP ; CAR ; SWAP ; DUP ; DUG 2 ; CDR ; DUP ; DUP 7 ; DUP 9 ; SUB ; DUP 8 ; DUP 10 ; SUB ; MUL ; DUP 8 ; DUP 10 ; SUB ; DUP 9 ; DUP 11 ; SUB ; MUL ; MUL ; DUP 8 ; DUP 10 ; SUB ; DUP 9 ; DUP 11 ; SUB ; MUL ; DUP 9 ; DUP 11 ; SUB ; DUP 10 ; DUP 12 ; SUB ; MUL ; MUL ; MUL ; DUP 8 ; DUP 10 ; ADD ; DUP 9 ; DUP 11 ; ADD ; MUL ; DUP 9 ; DUP 11 ; ADD ; DUP 10 ; DUP 12 ; ADD ; MUL ; MUL ; DUP 9 ; DUP 11 ; ADD ; DUP 10 ; DUP 12 ; ADD ; MUL ; DUP 10 ; DUP 12 ; ADD ; DUP 11 ; DUP 13 ; ADD ; MUL ; MUL ; MUL ; INT ; SUB ; ABS ; DUP 4 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 160 ; FAILWITH } { CAR } ; DIG 4 ; ADD ; DUG 3 ; PUSH int 1 ; DIG 5 ; SUB ; DUG 4 ; PUSH int 0 ; DUP 6 ; COMPARE ; NEQ } ; DROP 3 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 3 ; DROP ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; EDIV ; IF_NONE { PUSH int 303 ; FAILWITH } { CAR } ; DUP 3 ; CAR ; CAR ; DUP 5 ; GET 9 ; DUP 3 ; DUP 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; COMPARE ; GE ; IF {} { PUSH string "FlatSwap_Min_Cash_Error" ; FAILWITH } ; DIG 3 ; DUP ; GET 7 ; SWAP ; DUP ; DUG 5 ; GET 9 ; DUP 3 ; DUP 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; COMPARE ; LT ; IF {} { PUSH string "FlatSwap_Cash_Bought_Exceeds_Pool" ; FAILWITH } ; DUP 4 ; CAR ; GET 3 ; CDR ; IF { DIG 3 ; DUP ; DUP ; DUG 5 ; GET 9 ; DUP 4 ; EDIV ; IF_NONE { PUSH int 311 ; FAILWITH } { CAR } ; DIG 5 ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 311 ; FAILWITH } {} ; UPDATE 7 ; DUP ; DUG 4 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DIG 8 ; GET 9 ; DUP 7 ; EDIV ; IF_NONE { PUSH int 312 ; FAILWITH } { CAR } ; ADD ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 3 } { DIG 3 ; DUP ; DUP ; DUG 5 ; GET 9 ; DUP 3 ; DUP 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; DIG 5 ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 316 ; FAILWITH } {} ; UPDATE 7 ; DUG 3 } ; DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; DUP 8 ; GET 6 ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 3 ; PUSH nat 0 ; DUP 4 ; GET 6 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 4 ; CAR ; GET 7 ; IF { NIL operation ; DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 8 ; GET 6 ; DUP 10 ; GET 3 ; CAR ; CAR ; SELF_ADDRESS ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { NIL operation ; DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 6 ; GET 6 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS } ; PUSH nat 0 ; DUP 6 ; GET 9 ; DUP 4 ; DUP 6 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 5 ; GET 3 ; GET 6 ; IF { DUP 5 ; GET 3 ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 9 ; GET 9 ; DIG 6 ; DIG 7 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; DUP 8 ; GET 5 ; CDR ; DIG 7 ; CAR ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 5 ; GET 3 ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 7 ; GET 9 ; DIG 4 ; DIG 5 ; SUB ; ABS ; EDIV ; IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ; DIG 4 ; CAR ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } } } { PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; DUP 5 ; CAR ; CAR ; GET 4 ; COMPARE ; NEQ ; IF { DUP 3 ; GET 4 ; DIG 4 ; DUP ; GET 3 ; CAR ; CDR ; SWAP ; DUP ; DUG 6 ; GET 7 ; DUP 6 ; GET 3 ; MUL ; EDIV ; IF_NONE { PUSH int 185 ; FAILWITH } { CAR } ; COMPARE ; LE ; IF { DROP 2 ; DUP ; GET 3 ; DIG 2 ; DUP ; GET 3 ; CAR ; CDR ; SWAP ; DUP ; DUG 4 ; GET 7 ; DUP 4 ; GET 3 ; MUL ; EDIV ; IF_NONE { PUSH int 187 ; FAILWITH } { CAR } } {} ; DUP 3 ; GET 3 ; DIG 4 ; DUP ; GET 7 ; SWAP ; DUP ; DUG 6 ; GET 3 ; CAR ; CDR ; DUP 6 ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 188 ; FAILWITH } { CAR } ; COMPARE ; LE ; IF { DROP 2 ; DIG 2 ; DROP ; DUP ; GET 4 ; DIG 2 ; DUP ; GET 7 ; SWAP ; DUP ; DUG 4 ; GET 3 ; CAR ; CDR ; DUP 4 ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 190 ; FAILWITH } { CAR } ; SWAP } { DIG 4 ; DROP } ; PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ; DIG 3 ; DUP ; GET 7 ; SWAP ; DUP ; DUG 5 ; CAR ; CAR ; GET 4 ; DUP 3 ; MUL ; EDIV ; IF_NONE { PUSH int 194 ; FAILWITH } { CAR } ; DIG 4 ; DUP ; GET 3 ; CAR ; CDR ; SWAP ; DUP ; DUG 6 ; CAR ; CAR ; GET 4 ; DUP 5 ; MUL ; EDIV ; IF_NONE { PUSH int 194 ; FAILWITH } { CAR } ; COMPARE ; LT ; IF { DIG 3 ; DUP ; GET 3 ; CAR ; CDR ; SWAP ; DUP ; DUG 5 ; CAR ; CAR ; GET 4 ; DUP 4 ; MUL ; EDIV ; IF_NONE { PUSH int 195 ; FAILWITH } { CAR } } { DIG 3 ; DUP ; GET 7 ; SWAP ; DUP ; DUG 5 ; CAR ; CAR ; GET 4 ; DUP 3 ; MUL ; EDIV ; IF_NONE { PUSH int 197 ; FAILWITH } { CAR } } } { DROP 2 ; SWAP ; DUP ; DUG 2 ; GET 9 ; SWAP ; DUP ; DUG 2 ; GET 4 ; MUL ; DUP 3 ; GET 3 ; GET 3 ; DUP 3 ; GET 3 ; MUL ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ; PUSH nat 1000 ; DIG 3 ; DIG 2 ; DUP ; GET 4 ; SWAP ; DUP ; DUG 4 ; GET 3 ; MUL ; EXEC ; PUSH nat 2 ; MUL ; SUB ; ISNAT ; IF_NONE { PUSH int 202 ; FAILWITH } {} ; DIG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH nat 1000 ; ADD ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; DUG 2 ; SWAP ; DUP ; DUG 2 ; GET 3 ; SWAP ; DUP 3 ; GET 4 ; SWAP } ; DUP ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "WrongCondition: liquidity.value > 0" ; FAILWITH } ; DUP 4 ; GET 3 ; DUP 4 ; COMPARE ; LE ; IF {} { PUSH string "WrongCondition: token1Amount.value <= params.token1_max" ; FAILWITH } ; DUP 4 ; GET 4 ; DUP 3 ; COMPARE ; LE ; IF {} { PUSH string "WrongCondition: token2Amount.value <= params.token2_max" ; FAILWITH } ; PUSH nat 0 ; DUP 4 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 5 ; CAR ; GET 7 ; IF { NIL operation ; DUP 6 ; CAR ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 8 ; DUP 11 ; GET 3 ; CAR ; CAR ; SELF_ADDRESS ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { NIL operation ; DUP 6 ; CAR ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 6 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS } ; PUSH nat 0 ; DUP 4 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 6 ; GET 3 ; GET 6 ; IF { DUP 6 ; GET 3 ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DUP 7 ; DUP 11 ; GET 5 ; CDR ; SELF_ADDRESS ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 6 ; GET 3 ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; SELF_ADDRESS ; SENDER ; PAIR 3 ; TRANSFER_TOKENS ; CONS } ; DIG 5 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; DIG 8 ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; GET 7 ; DIG 4 ; ADD ; UPDATE 7 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP 7 ; ADD ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; DUG 3 ; PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 4 ; CAR ; CAR ; GET 3 ; CONTRACT %mint (pair (address %address) (nat %value)) ; IF_NONE { PUSH int 132 ; FAILWITH } {} ; PUSH mutez 0 ; DIG 3 ; DIG 4 ; CAR ; PAIR ; TRANSFER_TOKENS ; CONS } } { IF_LEFT { DIG 2 ; DROP ; SWAP ; DUP ; DUG 2 ; CAR ; GET 3 ; CDR ; IF {} { PUSH string "FlatSwap_Invalid_State" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 10 ; IF_NONE { PUSH int 385 ; FAILWITH } {} ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FlatSwap_Not_Voter" ; FAILWITH } ; PUSH nat 0 ; DUP 3 ; CAR ; GET 8 ; COMPARE ; NEQ ; IF { PUSH nat 0 ; DUP 3 ; CAR ; GET 8 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; GET 7 ; IF { NIL operation ; DUP 3 ; CAR ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 6 ; DUP ; CAR ; GET 8 ; SWAP ; DUP ; DUG 8 ; GET 3 ; CAR ; CAR ; DUP 8 ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { NIL operation ; DUP 3 ; CAR ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; CAR ; GET 8 ; DUP 5 ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } } { NIL operation } ; PUSH nat 0 ; DUP 4 ; GET 5 ; CAR ; COMPARE ; NEQ ; IF { PUSH nat 0 ; DUP 4 ; GET 5 ; CAR ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 3 ; GET 3 ; GET 6 ; IF { DUP 3 ; GET 3 ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 6 ; DUP ; GET 5 ; CAR ; SWAP ; DUP ; DUG 8 ; GET 5 ; CDR ; DUP 8 ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 3 ; GET 3 ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; GET 5 ; CAR ; DUP 5 ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } } {} ; EMPTY_MAP (or address (or (pair address nat) unit)) nat ; DUP 4 ; CAR ; GET 7 ; IF { DUP 4 ; CAR ; GET 8 ; SOME ; DIG 4 ; DUP ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 6 ; CAR ; GET 5 ; PAIR ; LEFT unit ; RIGHT address ; UPDATE } { DUP 4 ; CAR ; GET 8 ; SOME ; DUP 5 ; CAR ; GET 5 ; LEFT (or (pair address nat) unit) ; UPDATE } ; DUP 4 ; GET 3 ; GET 6 ; IF { DUP 4 ; GET 5 ; CAR ; SOME ; DIG 4 ; DUP ; GET 5 ; CDR ; SWAP ; DUP ; DUG 6 ; GET 3 ; GET 5 ; PAIR ; LEFT unit ; RIGHT address ; UPDATE } { DUP 4 ; GET 5 ; CAR ; SOME ; DUP 5 ; GET 3 ; GET 5 ; LEFT (or (pair address nat) unit) ; UPDATE } ; SWAP ; DUP 3 ; CDR ; CONTRACT %add_fees (pair (nat %epoch) (map %fees (or (address %fa12) (or (pair %fa2 address nat) (unit %tez))) nat)) ; IF_NONE { PUSH int 422 ; FAILWITH } {} ; PUSH mutez 0 ; DIG 3 ; DIG 4 ; CAR ; PAIR ; TRANSFER_TOKENS ; CONS ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CAR ; PUSH nat 0 ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; PUSH nat 0 ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } { DIG 2 ; DROP ; PUSH nat 0 ; DUP 3 ; CAR ; CAR ; GET 4 ; COMPARE ; NEQ ; IF {} { PUSH string "FlatSwap_Not_Initialized" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; GET 4 ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; COMPARE ; LE ; IF {} { PUSH string "FlatSwap_Insufficient_Balance" ; FAILWITH } ; SWAP ; DUP ; CAR ; CAR ; GET 4 ; SWAP ; DUP ; DUG 3 ; GET 3 ; CAR ; CDR ; DUP 3 ; CAR ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 241 ; FAILWITH } { CAR } ; DIG 2 ; DUP ; CAR ; CAR ; GET 4 ; SWAP ; DUP ; DUG 4 ; GET 7 ; DUP 4 ; CAR ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 242 ; FAILWITH } { CAR } ; DUP 3 ; GET 3 ; DUP 3 ; COMPARE ; GE ; IF {} { PUSH string "WrongCondition: token1Amount.value >= params.token1_min" ; FAILWITH } ; DUP 3 ; GET 4 ; SWAP ; DUP ; DUG 2 ; COMPARE ; GE ; IF {} { PUSH string "WrongCondition: token2Amount.value >= params.token2_min" ; FAILWITH } ; DUP 4 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; CAR ; DUP 6 ; DIG 8 ; GET 3 ; CAR ; CDR ; SUB ; ISNAT ; IF_NONE { PUSH int 247 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; DUP ; DUG 4 ; SWAP ; DUP ; DUG 2 ; DIG 5 ; GET 7 ; SUB ; ISNAT ; IF_NONE { PUSH int 248 ; FAILWITH } {} ; UPDATE 7 ; DUP ; DUG 4 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; CAR ; DUP 7 ; CAR ; CAR ; DIG 8 ; CAR ; CAR ; GET 4 ; SUB ; ISNAT ; IF_NONE { PUSH int 249 ; FAILWITH } {} ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; DUG 3 ; NIL operation ; DUP 5 ; CAR ; CAR ; GET 3 ; CONTRACT %burn (pair (address %address) (nat %value)) ; IF_NONE { PUSH int 126 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 6 ; CAR ; CAR ; SENDER ; PAIR ; TRANSFER_TOKENS ; CONS ; PUSH nat 0 ; DUP 4 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 5 ; CAR ; GET 7 ; IF { DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 6 ; DUP 9 ; GET 3 ; CAR ; CAR ; DUP 9 ; CAR ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 5 ; CAR ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DIG 4 ; DUP 6 ; CAR ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } ; PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ; DUP 4 ; GET 3 ; GET 6 ; IF { DUP 4 ; GET 3 ; GET 5 ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 22 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 5 ; DUP 8 ; GET 5 ; CDR ; DIG 7 ; CAR ; CDR ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DUP 4 ; GET 3 ; GET 5 ; CONTRACT %transfer (pair (address %from) (pair (address %to) (nat %value))) ; IF_NONE { PUSH int 38 ; FAILWITH } {} ; PUSH mutez 0 ; DIG 3 ; DIG 4 ; CAR ; CDR ; SELF_ADDRESS ; PAIR 3 ; TRANSFER_TOKENS ; CONS } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "getReserveBalance" unit (pair (nat %token1Pool) (nat %token2Pool)) { CDR ; DUP ; GET 7 ; SWAP ; GET 3 ; CAR ; CDR ; PAIR } }