{ parameter
    (or (or (or (or %admin (or (unit %confirm_admin) (bool %pause)) (pair %set_admin
                                                                        (nat %bid)
                       (list %transfers (or (pair %xtz_transfer_type (mutez %amount) (address %recipient))
                                 (pair %token_transfer_type
                                    (address %contract_address)
                                    (list %transfer_list
                                       (pair (address %from_)
                                             (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))))))
                                                                    ))
                (nat %bid))
            (or (nat %cancel)
                (pair %configure
                   (mutez %opening_price)
                   (pair (nat %min_raise_percent)
                         (pair (mutez %min_raise)
                               (pair (nat %round_time)
                                     (pair (nat %extend_time)
                                           (pair (list %asset
                                                    (pair (address %fa2_address) (list %fa2_batch (pair (nat %token_id) (nat %amount)))))
                                                 (pair (timestamp %start_time) (timestamp %end_time))))))))))
            (pair %propose
                  (nat %frozen_token)
                  (map %proposal_metadata string 
                       (list (or (pair %xtz_transfer_type (mutez %amount) (address %recipient))
                                 (pair %token_transfer_type
                                    (address %contract_address)
                                    (list %transfer_list
                                       (pair (address %from_)
                                             (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))))))
                  )
            )
            ) ;

  storage                        (list %transfers (or (pair %xtz_transfer_type (mutez %amount) (address %recipient))
                                 (pair %token_transfer_type
                                    (address %contract_address)
                                    (list %transfer_list
                                       (pair (address %from_)
                                             (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))))));

code { LAMBDA
           (option (pair (pair address bool) (option address)))
           (lambda (option string) unit)
           { LAMBDA
               (pair (option (pair (pair address bool) (option address))) (option string))
               unit
               { DUP ;
                 CDR ;
                 SWAP ;
                 CAR ;
                 IF_NONE
                   { DROP ; UNIT }
                   { CAR ;
                     CAR ;
                     SENDER ;
                     COMPARE ;
                     NEQ ;
                     IF { IF_NONE
                            { PUSH string "NOT_AN_ADMIN" ; FAILWITH }
                            { PUSH string " " ; CONCAT ; PUSH string "NOT_AN_ADMIN" ; CONCAT ; FAILWITH } }
                        { DROP ; UNIT } } } ;
             SWAP ;
             APPLY } ;
         LAMBDA
           (option (pair (pair address bool) (option address)))
           unit
           { IF_NONE
               { UNIT }
               { CAR ; CDR ; IF { PUSH string "PAUSED" ; FAILWITH } { UNIT } } } ;
         LAMBDA
           (pair bool string)
           unit
           { UNPAIR ; NOT ; IF { FAILWITH } { DROP ; UNIT } } ;
         LAMBDA
           (pair (pair (list (pair address (list (pair nat nat)))) address) address)
           (list operation)
           { UNPAIR ;
             UNPAIR ;
             MAP { DIG 2 ;
                   DUP ;
                   DUG 3 ;
                   DIG 2 ;
                   DUP ;
                   DUG 3 ;
                   PAIR ;
                   LAMBDA
                     (pair (pair address address) (pair address (list (pair nat nat))))
                     operation
                     { DUP ;
                       CDR ;
                       SWAP ;
                       CAR ;
                       DUP ;
                       CDR ;
                       SWAP ;
                       CAR ;
                       DIG 2 ;
                       DUP ;
                       DUG 3 ;
                       CDR ;
                       MAP { DIG 2 ; DUP ; DUG 3 ; PAIR } ;
                       DIG 2 ;
                       DROP ;
                       NIL (pair address (list (pair address (pair nat nat)))) ;
                       SWAP ;
                       DIG 2 ;
                       PAIR ;
                       CONS ;
                       SWAP ;
                       CAR ;
                       CONTRACT %transfer
                         (list (pair (address %from_)
                                     (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ;
                       IF_NONE { PUSH string "Invalid FA2 Address" ; FAILWITH } {} ;
                       PUSH mutez 0 ;
                       DIG 2 ;
                       TRANSFER_TOKENS } ;
                   SWAP ;
                   APPLY ;
                   SWAP ;
                   EXEC } ;
             SWAP ;
             DROP ;
             SWAP ;
             DROP } ;
         LAMBDA
           (pair nat
                 (pair (option (pair (pair address bool) (option address)))
                       (pair nat
                             (pair nat
                                   (pair nat
                                         (big_map
                                            nat
                                            (pair address
                                                  (pair mutez
                                                        (pair timestamp
                                                              (pair timestamp
                                                                    (pair int
                                                                          (pair int
                                                                                (pair (list (pair address (list (pair nat nat))))
                                                                                      (pair nat (pair mutez (pair timestamp address))))))))))))))))
           (pair address
                 (pair mutez
                       (pair timestamp
                             (pair timestamp
                                   (pair int
                                         (pair int
                                               (pair (list (pair address (list (pair nat nat))))
                                                     (pair nat (pair mutez (pair timestamp address))))))))))
           { UNPAIR ;
             SWAP ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             SWAP ;
             GET ;
             IF_NONE
               { PUSH string "Auction does not exist for given asset_id" ; FAILWITH }
               {} } ;
         LAMBDA
           address
           (contract unit)
           { CONTRACT unit ;
             IF_NONE
               { PUSH string "Return address does not resolve to contract" ; FAILWITH }
               {} } ;
         LAMBDA
           (pair address
                 (pair mutez
                       (pair timestamp
                             (pair timestamp
                                   (pair int
                                         (pair int
                                               (pair (list (pair address (list (pair nat nat))))
                                                     (pair nat (pair mutez (pair timestamp address))))))))))
           bool
           { DUP ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CAR ;
             SWAP ;
             DUP ;
             DUG 2 ;
             CDR ;
             CDR ;
             CDR ;
             CAR ;
             ADD ;
             NOW ;
             COMPARE ;
             GT ;
             SWAP ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CAR ;
             NOW ;
             COMPARE ;
             GE ;
             OR } ;
         DIG 7 ;
         UNPAIR ;
         IF_LEFT
           { IF_LEFT
               { DIG 5 ;
                 DROP ;
                 IF_LEFT
                   { DIG 2 ;
                     DROP ;
                     DIG 2 ;
                     DROP ;
                     DIG 2 ;
                     DROP ;
                     DIG 3 ;
                     DROP ;
                     PUSH string "Amount must be 0mutez" ;
                     PUSH mutez 0 ;
                     AMOUNT ;
                     COMPARE ;
                     EQ ;
                     PAIR ;
                     DIG 3 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     SWAP ;
                     IF_LEFT
                       { IF_LEFT
                           { DROP ;
                             DIG 2 ;
                             DROP ;
                             IF_NONE
                               { PUSH string "NO_ADMIN_CAPABILITIES_CONFIGURED" ; FAILWITH }
                               { DUP ;
                                 CDR ;
                                 IF_NONE
                                   { DROP ; PUSH string "NO_PENDING_ADMIN" ; FAILWITH }
                                   { SENDER ;
                                     COMPARE ;
                                     EQ ;
                                     IF { NONE address ; SWAP ; CAR ; CDR ; SENDER ; PAIR ; PAIR ; SOME }
                                        { DROP ; PUSH string "NOT_A_PENDING_ADMIN" ; FAILWITH } } } ;
                             NIL operation ;
                             PAIR }
                           { SWAP ;
                             DUP ;
                             DUG 2 ;
                             DIG 4 ;
                             SWAP ;
                             EXEC ;
                             DROP ;
                             SWAP ;
                             IF_NONE
                               { DROP ; PUSH string "NO_ADMIN_CAPABILITIES_CONFIGURED" ; FAILWITH }
                               { DUP ; CDR ; DUG 2 ; CAR ; CAR ; PAIR ; PAIR ; SOME } ;
                             NIL operation ;
                             PAIR } }
                       { SWAP ;
                         DUP ;
                         DUG 2 ;
                         DIG 4 ;
                         SWAP ;
                         EXEC ;
                         DROP ;
                         SWAP ;
                         IF_NONE
                           { DROP ; PUSH string "NO_ADMIN_CAPABILITIES_CONFIGURED" ; FAILWITH }
                           { SWAP ; SOME ; SWAP ; CAR ; PAIR ; SOME } ;
                         NIL operation ;
                         PAIR } ;
                     UNPAIR ;
                     DIG 2 ;
                     CDR ;
                     DIG 2 ;
                     PAIR ;
                     SWAP ;
                     PAIR }
                   { DIG 7 ;
                     DROP ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     PAIR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     PUSH string "Bidder must be an implicit account" ;
                     SOURCE ;
                     SENDER ;
                     COMPARE ;
                     EQ ;
                     PAIR ;
                     DIG 6 ;
                     DUP ;
                     DUG 7 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CAR ;
                     DIG 7 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Auction must be in progress" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     NOT ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     NOW ;
                     COMPARE ;
                     GE ;
                     AND ;
                     PAIR ;
                     DIG 5 ;
                     DUP ;
                     DUG 6 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Seller cannot place a bid" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     SENDER ;
                     COMPARE ;
                     NEQ ;
                     PAIR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     DUP ;
                     CAR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     COMPARE ;
                     EQ ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     AMOUNT ;
                     COMPARE ;
                     GE ;
                     AND ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CAR ;
                     ADD ;
                     AMOUNT ;
                     COMPARE ;
                     GE ;
                     PUSH nat 100 ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CAR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     MUL ;
                     EDIV ;
                     IF_NONE
                       { PUSH string "DIVISION_BY_ZERO" ; FAILWITH }
                       { UNPAIR ;
                         PUSH mutez 0 ;
                         DIG 2 ;
                         COMPARE ;
                         GT ;
                         IF { PUSH mutez 1 ; ADD } {} } ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CAR ;
                     ADD ;
                     AMOUNT ;
                     COMPARE ;
                     GE ;
                     OR ;
                     OR ;
                     NOT ;
                     IF { NOW ;
                          SWAP ;
                          DUP ;
                          DUG 2 ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CAR ;
                          DIG 2 ;
                          DUP ;
                          DUG 3 ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          PAIR ;
                          AMOUNT ;
                          DIG 3 ;
                          DUP ;
                          DUG 4 ;
                          CDR ;
                          CAR ;
                          PAIR ;
                          PAIR ;
                          PAIR ;
                          PUSH string "Invalid Bid amount" ;
                          PAIR ;
                          FAILWITH }
                        {} ;
                     DUP ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     DIG 4 ;
                     SWAP ;
                     EXEC ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     UNIT ;
                     TRANSFER_TOKENS ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     NOW ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     SUB ;
                     COMPARE ;
                     LE ;
                     IF { SWAP ; DUP ; DUG 2 ; CDR ; CDR ; CDR ; CDR ; CDR ; CAR ; NOW ; ADD }
                        { SWAP ;
                          DUP ;
                          DUG 2 ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CDR ;
                          CAR } ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     AMOUNT ;
                     PAIR ;
                     DIG 3 ;
                     CAR ;
                     PAIR ;
                     SENDER ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     CAR ;
                     PAIR ;
                     DUP ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     NOW ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     CAR ;
                     PAIR ;
                     DUP ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     DIG 2 ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     CAR ;
                     PAIR ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     SWAP ;
                     SOME ;
                     DIG 3 ;
                     UPDATE ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     CAR ;
                     PAIR ;
                     NIL operation ;
                     DIG 2 ;
                     CONS ;
                     PAIR } }
               { IF_LEFT
                   { DIG 8 ;
                     DROP ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     DIG 8 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     PAIR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     PUSH string "Only seller can cancel auction" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     SENDER ;
                     COMPARE ;
                     EQ ;
                     PAIR ;
                     DIG 7 ;
                     DUP ;
                     DUG 8 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Auction must not have ended" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     NOT ;
                     PAIR ;
                     DIG 6 ;
                     DUP ;
                     DUG 7 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Amount must be 0mutez" ;
                     PUSH mutez 0 ;
                     AMOUNT ;
                     COMPARE ;
                     EQ ;
                     PAIR ;
                     DIG 6 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     DUP ;
                     CAR ;
                     SELF_ADDRESS ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     PAIR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     DIG 2 ;
                     CDR ;
                     CAR ;
                     UNIT ;
                     TRANSFER_TOKENS ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     DIG 3 ;
                     NONE (pair address
                                (pair mutez
                                      (pair timestamp
                                            (pair timestamp
                                                  (pair int
                                                        (pair int
                                                              (pair (list (pair address (list (pair nat nat))))
                                                                    (pair nat (pair mutez (pair timestamp address)))))))))) ;
                     SWAP ;
                     UPDATE ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 3 ;
                     CAR ;
                     PAIR ;
                     DUG 2 ;
                     CONS ;
                     PAIR }
                   { DIG 2 ;
                     DROP ;
                     DIG 2 ;
                     DROP ;
                     DIG 2 ;
                     DROP ;
                     NONE string ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CAR ;
                     DIG 7 ;
                     SWAP ;
                     EXEC ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     DIG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "end_time must be after start_time" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     COMPARE ;
                     GT ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Auction time must be less than max_auction_time" ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     SUB ;
                     ABS ;
                     COMPARE ;
                     LE ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Start_time must not have already passed" ;
                     NOW ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     COMPARE ;
                     GE ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string
                          "start_time must not be greater than the sum of current time and max_config_to_start_time" ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     NOW ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     SUB ;
                     ABS ;
                     COMPARE ;
                     LE ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Opening price must be greater than 0mutez" ;
                     PUSH mutez 0 ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CAR ;
                     COMPARE ;
                     GT ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Amount must be equal to opening_price" ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     AMOUNT ;
                     COMPARE ;
                     EQ ;
                     PAIR ;
                     DIG 4 ;
                     DUP ;
                     DUG 5 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     PUSH string "Round_time must be greater than 0 seconds" ;
                     PUSH nat 0 ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     COMPARE ;
                     GT ;
                     PAIR ;
                     DIG 4 ;
                     SWAP ;
                     EXEC ;
                     DROP ;
                     SENDER ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     INT ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     INT ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     DUP ;
                     DUG 2 ;
                     CAR ;
                     PAIR ;
                     SENDER ;
                     PAIR ;
                     SELF_ADDRESS ;
                     SENDER ;
                     DIG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     PAIR ;
                     DIG 3 ;
                     SWAP ;
                     EXEC ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CDR ;
                     DIG 2 ;
                     SOME ;
                     DIG 3 ;
                     DUP ;
                     DUG 4 ;
                     CDR ;
                     CAR ;
                     UPDATE ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CDR ;
                     CAR ;
                     PAIR ;
                     DIG 2 ;
                     DUP ;
                     DUG 3 ;
                     CAR ;
                     PAIR ;
                     DUP ;
                     CDR ;
                     CDR ;
                     PUSH nat 1 ;
                     DIG 4 ;
                     CDR ;
                     CAR ;
                     ADD ;
                     PAIR ;
                     SWAP ;
                     CAR ;
                     PAIR ;
                     SWAP ;
                     PAIR } } }
           { DIG 8 ;
             DROP ;
             SWAP ;
             DUP ;
             DUG 2 ;
             CAR ;
             DIG 8 ;
             SWAP ;
             EXEC ;
             DROP ;
             SWAP ;
             DUP ;
             DUG 2 ;
             SWAP ;
             DUP ;
             DUG 2 ;
             PAIR ;
             DIG 5 ;
             SWAP ;
             EXEC ;
             PUSH string "Auction must have ended" ;
             SWAP ;
             DUP ;
             DUG 2 ;
             DIG 5 ;
             SWAP ;
             EXEC ;
             PAIR ;
             DIG 6 ;
             DUP ;
             DUG 7 ;
             SWAP ;
             EXEC ;
             DROP ;
             PUSH string "Amount must be 0mutez" ;
             PUSH mutez 0 ;
             AMOUNT ;
             COMPARE ;
             EQ ;
             PAIR ;
             DIG 6 ;
             SWAP ;
             EXEC ;
             DROP ;
             DUP ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             SELF_ADDRESS ;
             DIG 2 ;
             DUP ;
             DUG 3 ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             CAR ;
             PAIR ;
             PAIR ;
             DIG 5 ;
             SWAP ;
             EXEC ;
             SWAP ;
             DUP ;
             DUG 2 ;
             CAR ;
             DIG 5 ;
             SWAP ;
             EXEC ;
             DIG 2 ;
             CDR ;
             CAR ;
             UNIT ;
             TRANSFER_TOKENS ;
             DIG 3 ;
             DUP ;
             DUG 4 ;
             CDR ;
             CDR ;
             CDR ;
             CDR ;
             DIG 3 ;
             NONE (pair address
                        (pair mutez
                              (pair timestamp
                                    (pair timestamp
                                          (pair int
                                                (pair int
                                                      (pair (list (pair address (list (pair nat nat))))
                                                            (pair nat (pair mutez (pair timestamp address)))))))))) ;
             SWAP ;
             UPDATE ;
             DIG 3 ;
             DUP ;
             DUG 4 ;
             CDR ;
             CDR ;
             CDR ;
             CAR ;
             PAIR ;
             DIG 3 ;
             DUP ;
             DUG 4 ;
             CDR ;
             CDR ;
             CAR ;
             PAIR ;
             DIG 3 ;
             DUP ;
             DUG 4 ;
             CDR ;
             CAR ;
             PAIR ;
             DIG 3 ;
             CAR ;
             PAIR ;
             DUG 2 ;
             CONS ;
             PAIR } } }







