false
true
0

Contract Address Details

0xf0dbe81A887a43859bfEd59Fe44BD3d5D3523D2D

Contract Name
Flapper
Creator
0xbcaee0–64cea5 at 0xc9485e–282cf8
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
5 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26336070
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Flapper




Optimization enabled
true
Compiler version
v0.6.12+commit.27d51765




Optimization runs
200
EVM Version
default




Verified at
2025-04-18T14:00:38.845813Z

Constructor Arguments

0x00000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b6700000000000000000000000036d8c21602ada33ab50070214c6e9e24be0ab97e

Arg [0] (address) : 0x16ca93f2f65d5495c874109fff38d11d39850b67
Arg [1] (address) : 0x36d8c21602ada33ab50070214c6e9e24be0ab97e

              

Contract source code

// SPDX-License-Identifier: AGPL-3.0-or-later

/// flap.sol -- Surplus auction

pragma solidity ^0.6.12;

interface VatLike {
    function move(address,address,uint) external;
}
interface GemLike {
    function move(address,address,uint) external;
    function burn(address,uint) external;
}

contract Flapper {
    // --- Auth ---
    mapping (address => uint) public wards;
    function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); }
    function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); }
    modifier auth {
        require(wards[msg.sender] == 1, "Flapper/not-authorized");
        _;
    }

    // --- Data ---
    struct Bid {
        uint256 bid;  // gems paid               [wad]
        uint256 lot;  // dai in return for bid   [rad]
        address guy;  // high bidder
        uint48  tic;  // bid expiry time         [unix epoch time]
        uint48  end;  // auction expiry time     [unix epoch time]
    }

    mapping (uint => Bid) public bids;

    VatLike  public   vat;  // CDP Engine
    GemLike  public   gem;  // FMKR token

    uint256  constant ONE = 1.00E18;
    uint256  public   beg = 1.05E18;  // 5% minimum bid increase
    uint48   public   ttl = 3 hours;  // 3 hours bid duration
    uint48   public   tau = 2 days;   // 2 days total auction length
    uint256  public   kicks = 0;
    uint256  public   live = 1;       // Active Flag
    uint256  public   lid;            // max dai in auction at one time [rad]
    uint256  public   fill;           // current dai in auction         [rad]

    // --- Events ---
    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event File(bytes32 indexed what, uint256 data);
    event Kick(uint256 indexed id, uint256 lot, uint256 bid);
    event Tend(uint256 indexed id, uint256 lot, uint256 bid, address indexed guy);
    event Deal(uint256 indexed id, address indexed guy, uint256 lot);
    event Cage(uint256 rad);
    event Yank(uint256 indexed id, address indexed guy, uint256 bid);

    // --- Init ---
    constructor(address vat_, address gem_) public {
        wards[msg.sender] = 1;
        vat = VatLike(vat_);
        gem = GemLike(gem_);
        live = 1;
        emit Rely(msg.sender);
    }

    // --- Math ---
    function add(uint48 x, uint48 y) internal pure returns (uint48 z) {
        require((z = x + y) >= x);
    }
    function add256(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    // --- Admin ---
    function file(bytes32 what, uint data) external auth {
        if (what == "beg") beg = data;
        else if (what == "ttl") ttl = uint48(data);
        else if (what == "tau") tau = uint48(data);
        else if (what == "lid") lid = data;
        else revert("Flapper/file-unrecognized-param");
        emit File(what, data);
    }

    // --- Auction ---
    function kick(uint lot, uint bid) external auth returns (uint id) {
        require(live == 1, "Flapper/not-live");
        require(kicks < uint(-1), "Flapper/overflow");
        fill = add256(fill, lot);
        require(fill <= lid, "Flapper/over-lid");
        id = ++kicks;

        bids[id].bid = bid;
        bids[id].lot = lot;
        bids[id].guy = msg.sender;
        bids[id].end = add(uint48(now), tau);

        vat.move(msg.sender, address(this), lot);

        emit Kick(id, lot, bid);
        return id;
    }

    function tick(uint id) external {
        require(bids[id].end < now, "Flapper/not-finished");
        require(bids[id].tic == 0, "Flapper/bid-already-placed");
        bids[id].end = add(uint48(now), tau);
        // No event needed for tick - just extends duration
    }

    function tend(uint id, uint lot, uint bid) external {
        require(live == 1, "Flapper/not-live");
        require(bids[id].guy != address(0), "Flapper/guy-not-set");
        require(bids[id].tic > now || bids[id].tic == 0, "Flapper/already-finished-tic");
        require(bids[id].end > now, "Flapper/already-finished-end");

        require(lot == bids[id].lot, "Flapper/lot-not-matching");
        require(bid > bids[id].bid, "Flapper/bid-not-higher");
        require(mul(bid, ONE) >= mul(beg, bids[id].bid), "Flapper/insufficient-increase");

        if (msg.sender != bids[id].guy) {
            gem.move(msg.sender, bids[id].guy, bids[id].bid);
            bids[id].guy = msg.sender;
        }
        gem.move(msg.sender, address(this), bid - bids[id].bid);

        bids[id].bid = bid;
        bids[id].tic = add(uint48(now), ttl);

        emit Tend(id, lot, bid, bids[id].guy);
    }

    function deal(uint id) external {
        require(live == 1, "Flapper/not-live");
        require(bids[id].tic != 0 && (bids[id].tic < now || bids[id].end < now), "Flapper/not-finished");
        uint256 lot = bids[id].lot;
        vat.move(address(this), bids[id].guy, lot);
        gem.burn(address(this), bids[id].bid);
        emit Deal(id, bids[id].guy, lot);
        delete bids[id];
        fill = sub(fill, lot);
    }

    function cage(uint rad) external auth {
        live = 0;
        vat.move(address(this), msg.sender, rad);
        emit Cage(rad);
    }

    function yank(uint id) external {
        require(live == 0, "Flapper/still-live");
        require(bids[id].guy != address(0), "Flapper/guy-not-set");
        gem.move(address(this), bids[id].guy, bids[id].bid);
        emit Yank(id, bids[id].guy, bids[id].bid);
        delete bids[id];
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"vat_","internalType":"address"},{"type":"address","name":"gem_","internalType":"address"}]},{"type":"event","name":"Cage","inputs":[{"type":"uint256","name":"rad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deal","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"address","name":"guy","internalType":"address","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Deny","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"File","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32","indexed":true},{"type":"uint256","name":"data","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Kick","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Tend","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false},{"type":"address","name":"guy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Yank","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"address","name":"guy","internalType":"address","indexed":true},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"beg","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"bid","internalType":"uint256"},{"type":"uint256","name":"lot","internalType":"uint256"},{"type":"address","name":"guy","internalType":"address"},{"type":"uint48","name":"tic","internalType":"uint48"},{"type":"uint48","name":"end","internalType":"uint48"}],"name":"bids","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cage","inputs":[{"type":"uint256","name":"rad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deal","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deny","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"file","inputs":[{"type":"bytes32","name":"what","internalType":"bytes32"},{"type":"uint256","name":"data","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fill","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract GemLike"}],"name":"gem","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"id","internalType":"uint256"}],"name":"kick","inputs":[{"type":"uint256","name":"lot","internalType":"uint256"},{"type":"uint256","name":"bid","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"kicks","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lid","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"live","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rely","inputs":[{"type":"address","name":"usr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint48","name":"","internalType":"uint48"}],"name":"tau","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tend","inputs":[{"type":"uint256","name":"id","internalType":"uint256"},{"type":"uint256","name":"lot","internalType":"uint256"},{"type":"uint256","name":"bid","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tick","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint48","name":"","internalType":"uint48"}],"name":"ttl","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract VatLike"}],"name":"vat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"wards","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"yank","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]}]
              

Contract Creation Code

Verify & Publish
0x6080604052670e92596fd629000060045560058054612a3065ffffffffffff199091161765ffffffffffff60301b19166802a3000000000000001790556000600655600160075534801561005257600080fd5b506040516116603803806116608339818101604052604081101561007557600080fd5b508051602091820151336000818152938490526040808520600190819055600280546001600160a01b038088166001600160a01b0319928316179092556003805492871692909116919091179055600755519293919290917fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6091a2505061155f806101016000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063957aa58c116100ad578063ca40c41911610071578063ca40c4191461031c578063cfc4af551461033f578063cfdd330214610347578063d9c55ce11461034f578063fc7b6aee146103575761012c565b8063957aa58c1461028e5780639c52a7f114610296578063a2f91af2146102bc578063bf353dbb146102d9578063c959c42b146102ff5761012c565b80634b43ed12116100f45780634b43ed121461020c5780634e8b1dd51461023557806365fae35e146102585780637bd2bea71461027e5780637d780d82146102865761012c565b806326d2addc1461013157806326e027f11461014b57806329ae81141461016a57806336569e771461018d5780634423c5f1146101b1575b600080fd5b610139610374565b60408051918252519081900360200190f35b6101686004803603602081101561016157600080fd5b503561037a565b005b6101686004803603604081101561018057600080fd5b5080359060200135610520565b610195610698565b604080516001600160a01b039092168252519081900360200190f35b6101ce600480360360208110156101c757600080fd5b50356106a7565b6040805195865260208601949094526001600160a01b039092168484015265ffffffffffff9081166060850152166080830152519081900360a00190f35b6101686004803603606081101561022257600080fd5b50803590602081013590604001356106eb565b61023d610bdd565b6040805165ffffffffffff9092168252519081900360200190f35b6101686004803603602081101561026e57600080fd5b50356001600160a01b0316610beb565b610195610c8d565b610139610c9c565b610139610ca2565b610168600480360360208110156102ac57600080fd5b50356001600160a01b0316610ca8565b610168600480360360208110156102d257600080fd5b5035610d49565b610139600480360360208110156102ef57600080fd5b50356001600160a01b0316610e4f565b6101686004803603602081101561031557600080fd5b5035610e61565b6101396004803603604081101561033257600080fd5b50803590602001356110ec565b61023d611375565b61013961138a565b610139611390565b6101686004803603602081101561036d57600080fd5b5035611396565b60085481565b600754156103c4576040805162461bcd60e51b8152602060048201526012602482015271466c61707065722f7374696c6c2d6c69766560701b604482015290519081900360640190fd5b6000818152600160205260409020600201546001600160a01b0316610426576040805162461bcd60e51b8152602060048201526013602482015272119b185c1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60035460008281526001602052604080822060028101549054825163bb35783b60e01b81523060048201526001600160a01b0392831660248201526044810191909152915193169263bb35783b9260648084019391929182900301818387803b15801561049257600080fd5b505af11580156104a6573d6000803e3d6000fd5b50505060008281526001602090815260409182902060028101549054835190815292516001600160a01b03909116935084927fd34d0306f17eb982bb36792fbd439475f8f128bb06b12a1ae4450bbe81ea846b92908290030190a36000908152600160208190526040822082815590810182905560020155565b3360009081526020819052604090205460011461057d576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b816262656760e81b141561059557600481905561065e565b81621d1d1b60ea1b14156105c1576005805465ffffffffffff191665ffffffffffff831617905561065e565b816274617560e81b14156105f957600580546bffffffffffff0000000000001916600160301b65ffffffffffff84160217905561065e565b81621b1a5960ea1b141561061157600881905561065e565b6040805162461bcd60e51b815260206004820152601f60248201527f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6002546001600160a01b031681565b60016020819052600091825260409091208054918101546002909101546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041685565b600754600114610735576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b0316610797576040805162461bcd60e51b8152602060048201526013602482015272119b185c1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60008381526001602052604090206002015442600160a01b90910465ffffffffffff1611806107e45750600083815260016020526040902060020154600160a01b900465ffffffffffff16155b610835576040805162461bcd60e51b815260206004820152601c60248201527f466c61707065722f616c72656164792d66696e69736865642d74696300000000604482015290519081900360640190fd5b60008381526001602052604090206002015442600160d01b90910465ffffffffffff16116108aa576040805162461bcd60e51b815260206004820152601c60248201527f466c61707065722f616c72656164792d66696e69736865642d656e6400000000604482015290519081900360640190fd5b600083815260016020819052604090912001548214610910576040805162461bcd60e51b815260206004820152601860248201527f466c61707065722f6c6f742d6e6f742d6d61746368696e670000000000000000604482015290519081900360640190fd5b600083815260016020526040902054811161096b576040805162461bcd60e51b8152602060048201526016602482015275233630b83832b917b134b216b737ba16b434b3b432b960511b604482015290519081900360640190fd5b60045460008481526001602052604090205461098791906114ca565b61099982670de0b6b3a76400006114ca565b10156109ec576040805162461bcd60e51b815260206004820152601d60248201527f466c61707065722f696e73756666696369656e742d696e637265617365000000604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b03163314610ab35760035460008481526001602052604080822060028101549054825163bb35783b60e01b81523360048201526001600160a01b0392831660248201526044810191909152915193169263bb35783b9260648084019391929182900301818387803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b505050600084815260016020526040902060020180546001600160a01b03191633179055505b60035460008481526001602052604080822054815163bb35783b60e01b8152336004820152306024820152908503604482015290516001600160a01b039093169263bb35783b9260648084019391929182900301818387803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050600084815260016020526040902082905550600554610b5790429065ffffffffffff166114ee565b600084815260016020908152604091829020600201805465ffffffffffff94909416600160a01b0265ffffffffffff60a01b199094169390931792839055815185815290810184905281516001600160a01b039093169286927f06bfc96ab8debf799ff9875dc21f6d7a6ea731c5b890a93a77b28e714ef9c21d928290030190a3505050565b60055465ffffffffffff1681565b33600090815260208190526040902054600114610c48576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6003546001600160a01b031681565b60045481565b60075481565b33600090815260208190526040902054600114610d05576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b33600090815260208190526040902054600114610da6576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600060078190556002546040805163bb35783b60e01b81523060048201523360248201526044810185905290516001600160a01b039092169263bb35783b9260648084019382900301818387803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b50506040805184815290517f8b2f35c645f75532175a00d9b4565154e45c8eb57ee0155e03d0958f3a4d4b899350908190036020019150a150565b60006020819052908152604090205481565b600754600114610eab576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615801590610f24575060008181526001602052604090206002015442600160a01b90910465ffffffffffff161080610f24575060008181526001602052604090206002015442600160d01b90910465ffffffffffff16105b610f6c576040805162461bcd60e51b8152602060048201526014602482015273119b185c1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b60008181526001602081905260408083209182015460028054930154825163bb35783b60e01b81523060048201526001600160a01b039182166024820152604481018390529251919493169263bb35783b926064808201939182900301818387803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b5050600354600085815260016020526040808220548151632770a7eb60e21b8152306004820152602481019190915290516001600160a01b039093169450639dc29fac93506044808201939182900301818387803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b50505060008381526001602090815260409182902060020154825185815292516001600160a01b03909116935085927f038bcec6c926055b895956d6038d64624b9a879f73dccd60e3a4c8124f93ec6792908290030190a360008281526001602081905260408220828155908101829055600201556009546110e59082611509565b6009555050565b33600090815260208190526040812054600114611149576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600754600114611193576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600019600654106111de576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6f766572666c6f7760801b604482015290519081900360640190fd5b6111ea60095484611519565b60098190556008541015611238576040805162461bcd60e51b815260206004820152601060248201526f119b185c1c195c8bdbdd995c8b5b1a5960821b604482015290519081900360640190fd5b5060068054600190810191829055600082815260208290526040902083815590810184905560020180546001600160a01b0319163317905560055461128e90429065ffffffffffff600160301b909104166114ee565b6000828152600160205260408082206002908101805465ffffffffffff95909516600160d01b026001600160d01b03909516949094179093559154825163bb35783b60e01b81523360048201523060248201526044810187905292516001600160a01b039091169263bb35783b92606480830193919282900301818387803b15801561131957600080fd5b505af115801561132d573d6000803e3d6000fd5b5050604080518681526020810186905281518594507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60993509081900390910190a25b92915050565b600554600160301b900465ffffffffffff1681565b60065481565b60095481565b60008181526001602052604090206002015442600160d01b90910465ffffffffffff1610611402576040805162461bcd60e51b8152602060048201526014602482015273119b185c1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615611475576040805162461bcd60e51b815260206004820152601a60248201527f466c61707065722f6269642d616c72656164792d706c61636564000000000000604482015290519081900360640190fd5b600554611492904290600160301b900465ffffffffffff166114ee565b600091825260016020526040909120600201805465ffffffffffff92909216600160d01b026001600160d01b03909216919091179055565b60008115806114e5575050808202828282816114e257fe5b04145b61136f57600080fd5b80820165ffffffffffff808416908216101561136f57600080fd5b8082038281111561136f57600080fd5b8082018281101561136f57600080fdfea2646970667358221220458228c79dffe304940736f1fadd3eb8f1a316599cc0006a26f17bce69c286e564736f6c634300060c003300000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b6700000000000000000000000036d8c21602ada33ab50070214c6e9e24be0ab97e

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063957aa58c116100ad578063ca40c41911610071578063ca40c4191461031c578063cfc4af551461033f578063cfdd330214610347578063d9c55ce11461034f578063fc7b6aee146103575761012c565b8063957aa58c1461028e5780639c52a7f114610296578063a2f91af2146102bc578063bf353dbb146102d9578063c959c42b146102ff5761012c565b80634b43ed12116100f45780634b43ed121461020c5780634e8b1dd51461023557806365fae35e146102585780637bd2bea71461027e5780637d780d82146102865761012c565b806326d2addc1461013157806326e027f11461014b57806329ae81141461016a57806336569e771461018d5780634423c5f1146101b1575b600080fd5b610139610374565b60408051918252519081900360200190f35b6101686004803603602081101561016157600080fd5b503561037a565b005b6101686004803603604081101561018057600080fd5b5080359060200135610520565b610195610698565b604080516001600160a01b039092168252519081900360200190f35b6101ce600480360360208110156101c757600080fd5b50356106a7565b6040805195865260208601949094526001600160a01b039092168484015265ffffffffffff9081166060850152166080830152519081900360a00190f35b6101686004803603606081101561022257600080fd5b50803590602081013590604001356106eb565b61023d610bdd565b6040805165ffffffffffff9092168252519081900360200190f35b6101686004803603602081101561026e57600080fd5b50356001600160a01b0316610beb565b610195610c8d565b610139610c9c565b610139610ca2565b610168600480360360208110156102ac57600080fd5b50356001600160a01b0316610ca8565b610168600480360360208110156102d257600080fd5b5035610d49565b610139600480360360208110156102ef57600080fd5b50356001600160a01b0316610e4f565b6101686004803603602081101561031557600080fd5b5035610e61565b6101396004803603604081101561033257600080fd5b50803590602001356110ec565b61023d611375565b61013961138a565b610139611390565b6101686004803603602081101561036d57600080fd5b5035611396565b60085481565b600754156103c4576040805162461bcd60e51b8152602060048201526012602482015271466c61707065722f7374696c6c2d6c69766560701b604482015290519081900360640190fd5b6000818152600160205260409020600201546001600160a01b0316610426576040805162461bcd60e51b8152602060048201526013602482015272119b185c1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60035460008281526001602052604080822060028101549054825163bb35783b60e01b81523060048201526001600160a01b0392831660248201526044810191909152915193169263bb35783b9260648084019391929182900301818387803b15801561049257600080fd5b505af11580156104a6573d6000803e3d6000fd5b50505060008281526001602090815260409182902060028101549054835190815292516001600160a01b03909116935084927fd34d0306f17eb982bb36792fbd439475f8f128bb06b12a1ae4450bbe81ea846b92908290030190a36000908152600160208190526040822082815590810182905560020155565b3360009081526020819052604090205460011461057d576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b816262656760e81b141561059557600481905561065e565b81621d1d1b60ea1b14156105c1576005805465ffffffffffff191665ffffffffffff831617905561065e565b816274617560e81b14156105f957600580546bffffffffffff0000000000001916600160301b65ffffffffffff84160217905561065e565b81621b1a5960ea1b141561061157600881905561065e565b6040805162461bcd60e51b815260206004820152601f60248201527f466c61707065722f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6002546001600160a01b031681565b60016020819052600091825260409091208054918101546002909101546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041685565b600754600114610735576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b0316610797576040805162461bcd60e51b8152602060048201526013602482015272119b185c1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60008381526001602052604090206002015442600160a01b90910465ffffffffffff1611806107e45750600083815260016020526040902060020154600160a01b900465ffffffffffff16155b610835576040805162461bcd60e51b815260206004820152601c60248201527f466c61707065722f616c72656164792d66696e69736865642d74696300000000604482015290519081900360640190fd5b60008381526001602052604090206002015442600160d01b90910465ffffffffffff16116108aa576040805162461bcd60e51b815260206004820152601c60248201527f466c61707065722f616c72656164792d66696e69736865642d656e6400000000604482015290519081900360640190fd5b600083815260016020819052604090912001548214610910576040805162461bcd60e51b815260206004820152601860248201527f466c61707065722f6c6f742d6e6f742d6d61746368696e670000000000000000604482015290519081900360640190fd5b600083815260016020526040902054811161096b576040805162461bcd60e51b8152602060048201526016602482015275233630b83832b917b134b216b737ba16b434b3b432b960511b604482015290519081900360640190fd5b60045460008481526001602052604090205461098791906114ca565b61099982670de0b6b3a76400006114ca565b10156109ec576040805162461bcd60e51b815260206004820152601d60248201527f466c61707065722f696e73756666696369656e742d696e637265617365000000604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b03163314610ab35760035460008481526001602052604080822060028101549054825163bb35783b60e01b81523360048201526001600160a01b0392831660248201526044810191909152915193169263bb35783b9260648084019391929182900301818387803b158015610a7957600080fd5b505af1158015610a8d573d6000803e3d6000fd5b505050600084815260016020526040902060020180546001600160a01b03191633179055505b60035460008481526001602052604080822054815163bb35783b60e01b8152336004820152306024820152908503604482015290516001600160a01b039093169263bb35783b9260648084019391929182900301818387803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050600084815260016020526040902082905550600554610b5790429065ffffffffffff166114ee565b600084815260016020908152604091829020600201805465ffffffffffff94909416600160a01b0265ffffffffffff60a01b199094169390931792839055815185815290810184905281516001600160a01b039093169286927f06bfc96ab8debf799ff9875dc21f6d7a6ea731c5b890a93a77b28e714ef9c21d928290030190a3505050565b60055465ffffffffffff1681565b33600090815260208190526040902054600114610c48576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6003546001600160a01b031681565b60045481565b60075481565b33600090815260208190526040902054600114610d05576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b33600090815260208190526040902054600114610da6576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600060078190556002546040805163bb35783b60e01b81523060048201523360248201526044810185905290516001600160a01b039092169263bb35783b9260648084019382900301818387803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b50506040805184815290517f8b2f35c645f75532175a00d9b4565154e45c8eb57ee0155e03d0958f3a4d4b899350908190036020019150a150565b60006020819052908152604090205481565b600754600114610eab576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615801590610f24575060008181526001602052604090206002015442600160a01b90910465ffffffffffff161080610f24575060008181526001602052604090206002015442600160d01b90910465ffffffffffff16105b610f6c576040805162461bcd60e51b8152602060048201526014602482015273119b185c1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b60008181526001602081905260408083209182015460028054930154825163bb35783b60e01b81523060048201526001600160a01b039182166024820152604481018390529251919493169263bb35783b926064808201939182900301818387803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b5050600354600085815260016020526040808220548151632770a7eb60e21b8152306004820152602481019190915290516001600160a01b039093169450639dc29fac93506044808201939182900301818387803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b50505060008381526001602090815260409182902060020154825185815292516001600160a01b03909116935085927f038bcec6c926055b895956d6038d64624b9a879f73dccd60e3a4c8124f93ec6792908290030190a360008281526001602081905260408220828155908101829055600201556009546110e59082611509565b6009555050565b33600090815260208190526040812054600114611149576040805162461bcd60e51b8152602060048201526016602482015275119b185c1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600754600114611193576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600019600654106111de576040805162461bcd60e51b815260206004820152601060248201526f466c61707065722f6f766572666c6f7760801b604482015290519081900360640190fd5b6111ea60095484611519565b60098190556008541015611238576040805162461bcd60e51b815260206004820152601060248201526f119b185c1c195c8bdbdd995c8b5b1a5960821b604482015290519081900360640190fd5b5060068054600190810191829055600082815260208290526040902083815590810184905560020180546001600160a01b0319163317905560055461128e90429065ffffffffffff600160301b909104166114ee565b6000828152600160205260408082206002908101805465ffffffffffff95909516600160d01b026001600160d01b03909516949094179093559154825163bb35783b60e01b81523360048201523060248201526044810187905292516001600160a01b039091169263bb35783b92606480830193919282900301818387803b15801561131957600080fd5b505af115801561132d573d6000803e3d6000fd5b5050604080518681526020810186905281518594507fe6dde59cbc017becba89714a037778d234a84ce7f0a137487142a007e580d60993509081900390910190a25b92915050565b600554600160301b900465ffffffffffff1681565b60065481565b60095481565b60008181526001602052604090206002015442600160d01b90910465ffffffffffff1610611402576040805162461bcd60e51b8152602060048201526014602482015273119b185c1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615611475576040805162461bcd60e51b815260206004820152601a60248201527f466c61707065722f6269642d616c72656164792d706c61636564000000000000604482015290519081900360640190fd5b600554611492904290600160301b900465ffffffffffff166114ee565b600091825260016020526040909120600201805465ffffffffffff92909216600160d01b026001600160d01b03909216919091179055565b60008115806114e5575050808202828282816114e257fe5b04145b61136f57600080fd5b80820165ffffffffffff808416908216101561136f57600080fd5b8082038281111561136f57600080fd5b8082018281101561136f57600080fdfea2646970667358221220458228c79dffe304940736f1fadd3eb8f1a316599cc0006a26f17bce69c286e564736f6c634300060c0033