false
true
0

Contract Address Details

0xa46b5e615B3c5a754538252fF4CF6420B1452e86

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




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




Optimization runs
200
EVM Version
default




Verified at
2025-04-18T14:02:05.442959Z

Constructor Arguments

0x00000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b6700000000000000000000000036d8c21602ada33ab50070214c6e9e24be0ab97e

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

              

Contract source code

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.6.12;

interface VatLike {
    function move(address,address,uint) external;
    function suck(address,address,uint) external;
}
interface GemLike {
    function mint(address,uint) external;
}
interface VowLike {
    function Ash() external returns (uint);
    function kiss(uint) external;
}

contract Flopper {
    // --- 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, "Flopper/not-authorized");
        _;
    }

    // --- Data ---
    struct Bid {
        uint256 bid;  // dai paid                [rad]
        uint256 lot;  // gems in return for bid  [wad]
        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;
    GemLike  public   gem;
    uint256  constant ONE = 1.00E18;
    uint256  public   beg = 1.05E18;
    uint256  public   pad = 1.50E18;
    uint48   public   ttl = 3 hours;
    uint48   public   tau = 2 days;
    uint256  public   kicks = 0;
    uint256  public   live;
    address  public   vow;

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

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

    // --- Math ---
    function add(uint48 x, uint48 y) internal pure returns (uint48 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);
    }
    function min(uint x, uint y) internal pure returns (uint z) {
        if (x > y) { z = y; } else { z = x; }
    }

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

    // --- Auction ---
    function kick(address gal, uint lot, uint bid) external auth returns (uint id) {
        require(live == 1, "Flopper/not-live");
        require(kicks < uint(-1), "Flopper/overflow");
        id = ++kicks;

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

        emit Kick(id, lot, bid, gal);
    }
    function tick(uint id) external {
        require(bids[id].end < now, "Flopper/not-finished");
        require(bids[id].tic == 0, "Flopper/bid-already-placed");
        bids[id].lot = mul(pad, bids[id].lot) / ONE;
        bids[id].end = add(uint48(now), tau);
        emit Tick(id, bids[id].lot);
    }
    function dent(uint id, uint lot, uint bid) external {
        require(live == 1, "Flopper/not-live");
        require(bids[id].guy != address(0), "Flopper/guy-not-set");
        require(bids[id].tic > now || bids[id].tic == 0, "Flopper/already-finished-tic");
        require(bids[id].end > now, "Flopper/already-finished-end");

        require(bid == bids[id].bid, "Flopper/not-matching-bid");
        require(lot < bids[id].lot, "Flopper/lot-not-lower");
        require(mul(beg, lot) <= mul(bids[id].lot, ONE), "Flopper/insufficient-decrease");

        if (msg.sender != bids[id].guy) {
            vat.move(msg.sender, bids[id].guy, bid);
            if (bids[id].tic == 0) {
                uint Ash = VowLike(bids[id].guy).Ash();
                VowLike(bids[id].guy).kiss(min(bid, Ash));
            }
            bids[id].guy = msg.sender;
        }

        bids[id].lot = lot;
        bids[id].tic = add(uint48(now), ttl);
        emit Dent(id, lot, bids[id].guy);
    }
    function deal(uint id) external {
        require(live == 1, "Flopper/not-live");
        require(bids[id].tic != 0 && (bids[id].tic < now || bids[id].end < now), "Flopper/not-finished");
        gem.mint(bids[id].guy, bids[id].lot);
        emit Deal(id, bids[id].guy);
        delete bids[id];
    }

    // --- Shutdown ---
    function cage() external auth {
        live = 0;
        vow = msg.sender;
        emit Cage();
    }
    function yank(uint id) external {
        require(live == 0, "Flopper/still-live");
        require(bids[id].guy != address(0), "Flopper/guy-not-set");
        vat.suck(vow, bids[id].guy, bids[id].bid);
        emit Yank(id);
        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":[],"anonymous":false},{"type":"event","name":"Deal","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"address","name":"guy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Dent","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false},{"type":"address","name":"guy","internalType":"address","indexed":true}],"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},{"type":"address","name":"gal","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Rely","inputs":[{"type":"address","name":"usr","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Tick","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true},{"type":"uint256","name":"lot","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Yank","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":true}],"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":"function","stateMutability":"nonpayable","outputs":[],"name":"deal","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"dent","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":"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":"address","name":"","internalType":"contract GemLike"}],"name":"gem","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"id","internalType":"uint256"}],"name":"kick","inputs":[{"type":"address","name":"gal","internalType":"address"},{"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":"live","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"pad","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":"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":"address","name":"","internalType":"address"}],"name":"vow","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
0x6080604052670e92596fd62900006004556714d1120d7b16000060055560068054612a3065ffffffffffff199091161765ffffffffffff60301b19166802a300000000000000179055600060075534801561005957600080fd5b506040516115823803806115828339818101604052604081101561007c57600080fd5b508051602091820151336000908152928390526040909220600190819055600280546001600160a01b039384166001600160a01b03199182161790915560038054939094169216919091179091556008556114a6806100dc6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146102fe578063c959c42b14610324578063cfc4af5514610341578063cfdd330214610349578063fc7b6aee146103515761012c565b80637d780d821461027c5780639361266c14610296578063957aa58c1461029e5780639c52a7f1146102a6578063b7e9cd24146102cc5761012c565b80635ff3a382116100f45780635ff3a38214610215578063626cb3c51461023e57806365fae35e14610246578063692450091461026c5780637bd2bea7146102745761012c565b806326e027f11461013157806329ae81141461015057806336569e77146101735780634423c5f1146101975780634e8b1dd5146101f2575b600080fd5b61014e6004803603602081101561014757600080fd5b503561036e565b005b61014e6004803603604081101561016657600080fd5b50803590602001356104ea565b61017b610662565b604080516001600160a01b039092168252519081900360200190f35b6101b4600480360360208110156101ad57600080fd5b5035610671565b6040805195865260208601949094526001600160a01b039092168484015265ffffffffffff9081166060850152166080830152519081900360a00190f35b6101fa6106b5565b6040805165ffffffffffff9092168252519081900360200190f35b61014e6004803603606081101561022b57600080fd5b50803590602081013590604001356106c3565b61017b610c56565b61014e6004803603602081101561025c57600080fd5b50356001600160a01b0316610c65565b61014e610d07565b61017b610da6565b610284610db5565b60408051918252519081900360200190f35b610284610dbb565b610284610dc1565b61014e600480360360208110156102bc57600080fd5b50356001600160a01b0316610dc7565b610284600480360360608110156102e257600080fd5b506001600160a01b038135169060208101359060400135610e68565b6102846004803603602081101561031457600080fd5b50356001600160a01b031661103c565b61014e6004803603602081101561033a57600080fd5b503561104e565b6101fa611240565b610284611255565b61014e6004803603602081101561036757600080fd5b503561125b565b600854156103b8576040805162461bcd60e51b8152602060048201526012602482015271466c6f707065722f7374696c6c2d6c69766560701b604482015290519081900360640190fd5b6000818152600160205260409020600201546001600160a01b031661041a576040805162461bcd60e51b8152602060048201526013602482015272119b1bdc1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60028054600954600084815260016020526040808220948501549454815163f24e23eb60e01b81526001600160a01b0394851660048201529584166024870152604486015251919092169263f24e23eb92606480830193919282900301818387803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b50506040518392507f2c5d2826eb5903b8fc201cf48094b858f42f61c7eaac9aaf43ebed490138144e9150600090a26000908152600160208190526040822082815590810182905560020155565b33600090815260208190526040902054600114610547576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b816262656760e81b141561055f576004819055610628565b81621c185960ea1b1415610577576005819055610628565b81621d1d1b60ea1b14156105a3576006805465ffffffffffff191665ffffffffffff8316179055610628565b816274617560e81b14156105db57600680546bffffffffffff0000000000001916600160301b65ffffffffffff841602179055610628565b6040805162461bcd60e51b815260206004820152601f60248201527f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6002546001600160a01b031681565b60016020819052600091825260409091208054918101546002909101546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041685565b60065465ffffffffffff1681565b60085460011461070d576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b031661076f576040805162461bcd60e51b8152602060048201526013602482015272119b1bdc1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60008381526001602052604090206002015442600160a01b90910465ffffffffffff1611806107bc5750600083815260016020526040902060020154600160a01b900465ffffffffffff16155b61080d576040805162461bcd60e51b815260206004820152601c60248201527f466c6f707065722f616c72656164792d66696e69736865642d74696300000000604482015290519081900360640190fd5b60008381526001602052604090206002015442600160d01b90910465ffffffffffff1611610882576040805162461bcd60e51b815260206004820152601c60248201527f466c6f707065722f616c72656164792d66696e69736865642d656e6400000000604482015290519081900360640190fd5b60008381526001602052604090205481146108e4576040805162461bcd60e51b815260206004820152601860248201527f466c6f707065722f6e6f742d6d61746368696e672d6269640000000000000000604482015290519081900360640190fd5b600083815260016020819052604090912001548210610942576040805162461bcd60e51b8152602060048201526015602482015274233637b83832b917b637ba16b737ba16b637bbb2b960591b604482015290519081900360640190fd5b6000838152600160208190526040909120015461096790670de0b6b3a7640000611413565b61097360045484611413565b11156109c6576040805162461bcd60e51b815260206004820152601d60248201527f466c6f707065722f696e73756666696369656e742d6465637265617365000000604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b03163314610baa576002805460008581526001602052604080822090930154835163bb35783b60e01b81523360048201526001600160a01b03918216602482015260448101869052935192169263bb35783b926064808301939282900301818387803b158015610a4e57600080fd5b505af1158015610a62573d6000803e3d6000fd5b505050600084815260016020526040902060020154600160a01b900465ffffffffffff1615159050610b88576000838152600160209081526040808320600201548151630a874acf60e21b815291516001600160a01b0390911692632a1d2b3c926004808201939182900301818787803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050506040513d6020811015610b0957600080fd5b50516000858152600160205260409020600201549091506001600160a01b0316632506855a610b38848461143d565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b50505050505b600083815260016020526040902060020180546001600160a01b031916331790555b600083815260016020819052604090912001829055600654610bd590429065ffffffffffff16611455565b600084815260016020908152604091829020600201805465ffffffffffff94909416600160a01b0265ffffffffffff60a01b199094169390931792839055815185815291516001600160a01b039093169286927f2f333b98a7ca5a2ad9b4cc07bae4b381c5d9e99f6b1649775154bc4ed4aa38d692908290030190a3505050565b6009546001600160a01b031681565b33600090815260208190526040902054600114610cc2576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610d64576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b60006008819055600980546001600160a01b031916331790556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b6003546001600160a01b031681565b60045481565b60055481565b60085481565b33600090815260208190526040902054600114610e24576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b33600090815260208190526040812054600114610ec5576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600854600114610f0f576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b60001960075410610f5a576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6f766572666c6f7760801b604482015290519081900360640190fd5b5060078054600190810191829055600082815260208290526040902083815590810184905560020180546001600160a01b0319166001600160a01b038616179055600654610fb8904290600160301b900465ffffffffffff16611455565b600082815260016020908152604091829020600201805465ffffffffffff94909416600160d01b026001600160d01b0390941693909317909255805185815291820184905280516001600160a01b0387169284927f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df692918290030190a39392505050565b60006020819052908152604090205481565b600854600114611098576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615801590611111575060008181526001602052604090206002015442600160a01b90910465ffffffffffff161080611111575060008181526001602052604090206002015442600160d01b90910465ffffffffffff16105b611159576040805162461bcd60e51b8152602060048201526014602482015273119b1bdc1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b6003546000828152600160208190526040808320600281015492015481516340c10f1960e01b81526001600160a01b0393841660048201526024810191909152905191909316926340c10f1992604480830193919282900301818387803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b5050506000828152600160205260408082206002015490516001600160a01b03909116925083917fc96c02e77067d4055aea10b1ed7562c11110f174770e733b6d5c43bbf92041c491a36000908152600160208190526040822082815590810182905560020155565b600654600160301b900465ffffffffffff1681565b60075481565b60008181526001602052604090206002015442600160d01b90910465ffffffffffff16106112c7576040805162461bcd60e51b8152602060048201526014602482015273119b1bdc1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff161561133a576040805162461bcd60e51b815260206004820152601a60248201527f466c6f707065722f6269642d616c72656164792d706c61636564000000000000604482015290519081900360640190fd5b670de0b6b3a76400006113656005546001600085815260200190815260200160002060010154611413565b8161136c57fe5b6000838152600160208190526040909120929091049101556006546113a1904290600160301b900465ffffffffffff16611455565b60008281526001602081815260409283902060028101805465ffffffffffff96909616600160d01b026001600160d01b03909616959095179094559201548151908152905183927fef885d13ae547f2952755e35bb377846c2c38bfb21d20b5f5fabe27e4b68825f928290030190a250565b600081158061142e5750508082028282828161142b57fe5b04145b61143757600080fd5b92915050565b60008183111561144e575080611437565b5090919050565b80820165ffffffffffff808416908216101561143757600080fdfea264697066735822122022bede21a6b62e1da4da2d68a5731ac30b1b9d92d9783f86a5494393bb7fe7ae64736f6c634300060c003300000000000000000000000016ca93f2f65d5495c874109fff38d11d39850b6700000000000000000000000036d8c21602ada33ab50070214c6e9e24be0ab97e

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637d780d82116100ad578063bf353dbb11610071578063bf353dbb146102fe578063c959c42b14610324578063cfc4af5514610341578063cfdd330214610349578063fc7b6aee146103515761012c565b80637d780d821461027c5780639361266c14610296578063957aa58c1461029e5780639c52a7f1146102a6578063b7e9cd24146102cc5761012c565b80635ff3a382116100f45780635ff3a38214610215578063626cb3c51461023e57806365fae35e14610246578063692450091461026c5780637bd2bea7146102745761012c565b806326e027f11461013157806329ae81141461015057806336569e77146101735780634423c5f1146101975780634e8b1dd5146101f2575b600080fd5b61014e6004803603602081101561014757600080fd5b503561036e565b005b61014e6004803603604081101561016657600080fd5b50803590602001356104ea565b61017b610662565b604080516001600160a01b039092168252519081900360200190f35b6101b4600480360360208110156101ad57600080fd5b5035610671565b6040805195865260208601949094526001600160a01b039092168484015265ffffffffffff9081166060850152166080830152519081900360a00190f35b6101fa6106b5565b6040805165ffffffffffff9092168252519081900360200190f35b61014e6004803603606081101561022b57600080fd5b50803590602081013590604001356106c3565b61017b610c56565b61014e6004803603602081101561025c57600080fd5b50356001600160a01b0316610c65565b61014e610d07565b61017b610da6565b610284610db5565b60408051918252519081900360200190f35b610284610dbb565b610284610dc1565b61014e600480360360208110156102bc57600080fd5b50356001600160a01b0316610dc7565b610284600480360360608110156102e257600080fd5b506001600160a01b038135169060208101359060400135610e68565b6102846004803603602081101561031457600080fd5b50356001600160a01b031661103c565b61014e6004803603602081101561033a57600080fd5b503561104e565b6101fa611240565b610284611255565b61014e6004803603602081101561036757600080fd5b503561125b565b600854156103b8576040805162461bcd60e51b8152602060048201526012602482015271466c6f707065722f7374696c6c2d6c69766560701b604482015290519081900360640190fd5b6000818152600160205260409020600201546001600160a01b031661041a576040805162461bcd60e51b8152602060048201526013602482015272119b1bdc1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60028054600954600084815260016020526040808220948501549454815163f24e23eb60e01b81526001600160a01b0394851660048201529584166024870152604486015251919092169263f24e23eb92606480830193919282900301818387803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b50506040518392507f2c5d2826eb5903b8fc201cf48094b858f42f61c7eaac9aaf43ebed490138144e9150600090a26000908152600160208190526040822082815590810182905560020155565b33600090815260208190526040902054600114610547576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b816262656760e81b141561055f576004819055610628565b81621c185960ea1b1415610577576005819055610628565b81621d1d1b60ea1b14156105a3576006805465ffffffffffff191665ffffffffffff8316179055610628565b816274617560e81b14156105db57600680546bffffffffffff0000000000001916600160301b65ffffffffffff841602179055610628565b6040805162461bcd60e51b815260206004820152601f60248201527f466c6f707065722f66696c652d756e7265636f676e697a65642d706172616d00604482015290519081900360640190fd5b60408051828152905183917fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7919081900360200190a25050565b6002546001600160a01b031681565b60016020819052600091825260409091208054918101546002909101546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041685565b60065465ffffffffffff1681565b60085460011461070d576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b031661076f576040805162461bcd60e51b8152602060048201526013602482015272119b1bdc1c195c8bd9dd5e4b5b9bdd0b5cd95d606a1b604482015290519081900360640190fd5b60008381526001602052604090206002015442600160a01b90910465ffffffffffff1611806107bc5750600083815260016020526040902060020154600160a01b900465ffffffffffff16155b61080d576040805162461bcd60e51b815260206004820152601c60248201527f466c6f707065722f616c72656164792d66696e69736865642d74696300000000604482015290519081900360640190fd5b60008381526001602052604090206002015442600160d01b90910465ffffffffffff1611610882576040805162461bcd60e51b815260206004820152601c60248201527f466c6f707065722f616c72656164792d66696e69736865642d656e6400000000604482015290519081900360640190fd5b60008381526001602052604090205481146108e4576040805162461bcd60e51b815260206004820152601860248201527f466c6f707065722f6e6f742d6d61746368696e672d6269640000000000000000604482015290519081900360640190fd5b600083815260016020819052604090912001548210610942576040805162461bcd60e51b8152602060048201526015602482015274233637b83832b917b637ba16b737ba16b637bbb2b960591b604482015290519081900360640190fd5b6000838152600160208190526040909120015461096790670de0b6b3a7640000611413565b61097360045484611413565b11156109c6576040805162461bcd60e51b815260206004820152601d60248201527f466c6f707065722f696e73756666696369656e742d6465637265617365000000604482015290519081900360640190fd5b6000838152600160205260409020600201546001600160a01b03163314610baa576002805460008581526001602052604080822090930154835163bb35783b60e01b81523360048201526001600160a01b03918216602482015260448101869052935192169263bb35783b926064808301939282900301818387803b158015610a4e57600080fd5b505af1158015610a62573d6000803e3d6000fd5b505050600084815260016020526040902060020154600160a01b900465ffffffffffff1615159050610b88576000838152600160209081526040808320600201548151630a874acf60e21b815291516001600160a01b0390911692632a1d2b3c926004808201939182900301818787803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050506040513d6020811015610b0957600080fd5b50516000858152600160205260409020600201549091506001600160a01b0316632506855a610b38848461143d565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b50505050505b600083815260016020526040902060020180546001600160a01b031916331790555b600083815260016020819052604090912001829055600654610bd590429065ffffffffffff16611455565b600084815260016020908152604091829020600201805465ffffffffffff94909416600160a01b0265ffffffffffff60a01b199094169390931792839055815185815291516001600160a01b039093169286927f2f333b98a7ca5a2ad9b4cc07bae4b381c5d9e99f6b1649775154bc4ed4aa38d692908290030190a3505050565b6009546001600160a01b031681565b33600090815260208190526040902054600114610cc2576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b33600090815260208190526040902054600114610d64576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b60006008819055600980546001600160a01b031916331790556040517f2308ed18a14e800c39b86eb6ea43270105955ca385b603b64eca89f98ae8fbda9190a1565b6003546001600160a01b031681565b60045481565b60055481565b60085481565b33600090815260208190526040902054600114610e24576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b33600090815260208190526040812054600114610ec5576040805162461bcd60e51b8152602060048201526016602482015275119b1bdc1c195c8bdb9bdd0b585d5d1a1bdc9a5e995960521b604482015290519081900360640190fd5b600854600114610f0f576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b60001960075410610f5a576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6f766572666c6f7760801b604482015290519081900360640190fd5b5060078054600190810191829055600082815260208290526040902083815590810184905560020180546001600160a01b0319166001600160a01b038616179055600654610fb8904290600160301b900465ffffffffffff16611455565b600082815260016020908152604091829020600201805465ffffffffffff94909416600160d01b026001600160d01b0390941693909317909255805185815291820184905280516001600160a01b0387169284927f7e8881001566f9f89aedb9c5dc3d856a2b81e5235a8196413ed484be91cc0df692918290030190a39392505050565b60006020819052908152604090205481565b600854600114611098576040805162461bcd60e51b815260206004820152601060248201526f466c6f707065722f6e6f742d6c69766560801b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff1615801590611111575060008181526001602052604090206002015442600160a01b90910465ffffffffffff161080611111575060008181526001602052604090206002015442600160d01b90910465ffffffffffff16105b611159576040805162461bcd60e51b8152602060048201526014602482015273119b1bdc1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b6003546000828152600160208190526040808320600281015492015481516340c10f1960e01b81526001600160a01b0393841660048201526024810191909152905191909316926340c10f1992604480830193919282900301818387803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b5050506000828152600160205260408082206002015490516001600160a01b03909116925083917fc96c02e77067d4055aea10b1ed7562c11110f174770e733b6d5c43bbf92041c491a36000908152600160208190526040822082815590810182905560020155565b600654600160301b900465ffffffffffff1681565b60075481565b60008181526001602052604090206002015442600160d01b90910465ffffffffffff16106112c7576040805162461bcd60e51b8152602060048201526014602482015273119b1bdc1c195c8bdb9bdd0b599a5b9a5cda195960621b604482015290519081900360640190fd5b600081815260016020526040902060020154600160a01b900465ffffffffffff161561133a576040805162461bcd60e51b815260206004820152601a60248201527f466c6f707065722f6269642d616c72656164792d706c61636564000000000000604482015290519081900360640190fd5b670de0b6b3a76400006113656005546001600085815260200190815260200160002060010154611413565b8161136c57fe5b6000838152600160208190526040909120929091049101556006546113a1904290600160301b900465ffffffffffff16611455565b60008281526001602081815260409283902060028101805465ffffffffffff96909616600160d01b026001600160d01b03909616959095179094559201548151908152905183927fef885d13ae547f2952755e35bb377846c2c38bfb21d20b5f5fabe27e4b68825f928290030190a250565b600081158061142e5750508082028282828161142b57fe5b04145b61143757600080fd5b92915050565b60008183111561144e575080611437565b5090919050565b80820165ffffffffffff808416908216101561143757600080fdfea264697066735822122022bede21a6b62e1da4da2d68a5731ac30b1b9d92d9783f86a5494393bb7fe7ae64736f6c634300060c0033