S Price: $0.539489 (-10.51%)
    /

    Contract

    0xe513B4B0DD69BA1D964dc275C0D161F3018776d1

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo3,491.805885143946502869 S

    S Value

    $1,883.79 (@ $0.54/S)

    Token Holdings

    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount
    Sell133156802025-03-12 20:18:5416 days ago1741810734IN
    0xe513B4B0...3018776d1
    0 S0.0046174855.01
    Sell118607952025-03-05 16:19:4423 days ago1741191584IN
    0xe513B4B0...3018776d1
    0 S0.0138198855.01
    Sell102759382025-02-26 10:45:5530 days ago1740566755IN
    0xe513B4B0...3018776d1
    0 S0.0135661355
    Sell102754612025-02-26 10:42:5730 days ago1740566577IN
    0xe513B4B0...3018776d1
    0 S0.0137350455
    Sell94233332025-02-22 19:23:0834 days ago1740252188IN
    0xe513B4B0...3018776d1
    0 S0.0135914355
    Sell86107812025-02-19 8:25:0937 days ago1739953509IN
    0xe513B4B0...3018776d1
    0 S0.0142083655.01
    Sell86106372025-02-19 8:24:1537 days ago1739953455IN
    0xe513B4B0...3018776d1
    0 S0.0152456960.5
    Sell86104122025-02-19 8:22:4437 days ago1739953364IN
    0xe513B4B0...3018776d1
    0 S0.0139363955.01
    Sell86103112025-02-19 8:21:5837 days ago1739953318IN
    0xe513B4B0...3018776d1
    0 S0.0140847655.01
    Sell86102242025-02-19 8:21:1937 days ago1739953279IN
    0xe513B4B0...3018776d1
    0 S0.0146096857.77
    Sell86100902025-02-19 8:20:2537 days ago1739953225IN
    0xe513B4B0...3018776d1
    0 S0.0138900855.01
    Sell86099352025-02-19 8:19:2437 days ago1739953164IN
    0xe513B4B0...3018776d1
    0 S0.0143111456.19
    Sell74043062025-02-11 13:29:3245 days ago1739280572IN
    0xe513B4B0...3018776d1
    0 S0.0051252661.05
    Buy66130902025-02-05 4:42:1951 days ago1738730539IN
    0xe513B4B0...3018776d1
    0.5 S0.0140334755
    Buy56185622025-01-27 21:05:3960 days ago1738011939IN
    0xe513B4B0...3018776d1
    0.1 S0.0206782182.5
    Sell45161282025-01-19 10:22:1468 days ago1737282134IN
    0xe513B4B0...3018776d1
    0 S0.0131047455
    Sell42881772025-01-17 17:07:1370 days ago1737133633IN
    0xe513B4B0...3018776d1
    0 S0.02801998110.01
    Sell42867382025-01-17 16:49:0970 days ago1737132549IN
    0xe513B4B0...3018776d1
    0 S0.0087197110
    Sell41470202025-01-16 12:44:5571 days ago1737031495IN
    0xe513B4B0...3018776d1
    0 S0.02649064110
    Sell41469442025-01-16 12:44:0471 days ago1737031444IN
    0xe513B4B0...3018776d1
    0 S0.02625524110
    Sell41468692025-01-16 12:43:1471 days ago1737031394IN
    0xe513B4B0...3018776d1
    0 S0.02606692110
    Sell41466812025-01-16 12:41:0971 days ago1737031269IN
    0xe513B4B0...3018776d1
    0 S0.026114110
    Sell41299612025-01-16 9:38:5671 days ago1737020336IN
    0xe513B4B0...3018776d1
    0 S0.02766555110
    Sell41290142025-01-16 9:27:0671 days ago1737019626IN
    0xe513B4B0...3018776d1
    0 S0.02776158110
    Buy39722802025-01-15 9:08:2672 days ago1736932106IN
    0xe513B4B0...3018776d1
    0.5 S0.0082886133.01
    View all transactions

    Latest 25 internal transactions (View All)

    Parent Transaction Hash Block Age From To Amount
    133156802025-03-12 20:18:5416 days ago1741810734
    0xe513B4B0...3018776d1
    0.09801 S
    133156802025-03-12 20:18:5416 days ago1741810734
    0xe513B4B0...3018776d1
    0.00099 S
    118607952025-03-05 16:19:4423 days ago1741191584
    0xe513B4B0...3018776d1
    107.68782966 S
    118607952025-03-05 16:19:4423 days ago1741191584
    0xe513B4B0...3018776d1
    1.08775585 S
    102759382025-02-26 10:45:5530 days ago1740566755
    0xe513B4B0...3018776d1
    281.98984757 S
    102759382025-02-26 10:45:5530 days ago1740566755
    0xe513B4B0...3018776d1
    2.84838229 S
    102754612025-02-26 10:42:5730 days ago1740566577
    0xe513B4B0...3018776d1
    357.72158331 S
    102754612025-02-26 10:42:5730 days ago1740566577
    0xe513B4B0...3018776d1
    3.61334932 S
    94233332025-02-22 19:23:0834 days ago1740252188
    0xe513B4B0...3018776d1
    0.30715384 S
    94233332025-02-22 19:23:0834 days ago1740252188
    0xe513B4B0...3018776d1
    0.00310256 S
    86107812025-02-19 8:25:0937 days ago1739953509
    0xe513B4B0...3018776d1
    0.54428201 S
    86107812025-02-19 8:25:0937 days ago1739953509
    0xe513B4B0...3018776d1
    0.00549779 S
    86106372025-02-19 8:24:1537 days ago1739953455
    0xe513B4B0...3018776d1
    2.25595596 S
    86106372025-02-19 8:24:1537 days ago1739953455
    0xe513B4B0...3018776d1
    0.02278743 S
    86104122025-02-19 8:22:4437 days ago1739953364
    0xe513B4B0...3018776d1
    0.35639544 S
    86104122025-02-19 8:22:4437 days ago1739953364
    0xe513B4B0...3018776d1
    0.00359995 S
    86103112025-02-19 8:21:5837 days ago1739953318
    0xe513B4B0...3018776d1
    0.98023489 S
    86103112025-02-19 8:21:5837 days ago1739953318
    0xe513B4B0...3018776d1
    0.00990136 S
    86102242025-02-19 8:21:1937 days ago1739953279
    0xe513B4B0...3018776d1
    1.98560743 S
    86102242025-02-19 8:21:1937 days ago1739953279
    0xe513B4B0...3018776d1
    0.02005664 S
    86100902025-02-19 8:20:2537 days ago1739953225
    0xe513B4B0...3018776d1
    1.96886279 S
    86100902025-02-19 8:20:2537 days ago1739953225
    0xe513B4B0...3018776d1
    0.0198875 S
    86099352025-02-19 8:19:2437 days ago1739953164
    0xe513B4B0...3018776d1
    0.63815764 S
    86099352025-02-19 8:19:2437 days ago1739953164
    0xe513B4B0...3018776d1
    0.00644603 S
    74043062025-02-11 13:29:3245 days ago1739280572
    0xe513B4B0...3018776d1
    196.02 S
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    BondingCurveManager

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    No with 200 runs

    Other Settings:
    paris EvmVersion
    File 1 of 19 : BondingCurveManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import { BancorBondingCurve } from "./gate/BancorBondingCurve.sol";
    import "./BondingCurveToken.sol";
    import "./utils/owner/Ownable.sol";
    import "./interfaces/IUniswapV2Router02.sol";
    import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
    /**
    * @title BondingCurveManager
    * @dev Manages bonding curve tokens, allowing creation, buying, selling, and liquidity management.
    */
    contract BondingCurveManager is Ownable, ReentrancyGuard {
    BancorBondingCurve private bancorFormula;
    IUniswapV2Router02 private uniRouter;
    struct TokenInfo {
    BondingCurveToken token;
    uint256 tokenbalance;
    uint256 ethBalance;
    bool isListed;
    }
    mapping(address => TokenInfo) public tokens;
    address[] public tokenList;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 19 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 19 : SafeCast.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 19 : Panic.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 19 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Contract module that helps prevent reentrant calls to a function.
    *
    * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
    * available, which can be applied to functions to make sure there are no nested
    * (reentrant) calls to them.
    *
    * Note that because there is a single `nonReentrant` guard, functions marked as
    * `nonReentrant` may not call one another. This can be worked around by making
    * those functions `private`, and then adding `external` `nonReentrant` entry
    * points to them.
    *
    * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
    * consider using {ReentrancyGuardTransient} instead.
    *
    * TIP: If you would like to learn more about reentrancy and alternative ways
    * to protect against it, check out our blog post
    * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
    */
    abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 19 : BondingCurveToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    import "./utils/token/ERC20.sol";
    import "./utils/owner/Ownable.sol";
    import "./utils/token/extensions/ERC20Burnable.sol";
    contract BondingCurveToken is ERC20, ERC20Burnable, Ownable {
    uint256 private constant TOTAL_SUPPLY = 1_000_000_000 * 10**18;
    uint256 public constant TRADING_SUPPLY = 800_000_000 * 10**18;
    uint256 public constant LP_SUPPLY = 200_000_000 * 10**18;
    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
    // Mint total supply to the contract itself
    _mint(address(this), TOTAL_SUPPLY);
    }
    function transferTradingSupply(address manager) external onlyOwner {
    // Transfer trading supply to the bonding curve manager
    _transfer(address(this), manager, TRADING_SUPPLY);
    }
    function transferLPSupply(address manager) external onlyOwner {
    // Transfer LP supply to the bonding curve manager
    _transfer(address(this), manager, LP_SUPPLY);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 19 : BancorBondingCurve.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import "./BancorFormula.sol";
    import "prb-math/contracts/PRBMathSD59x18.sol";
    import "prb-math/contracts/PRBMathUD60x18.sol";
    // based on https://medium.com/relevant-community/bonding-curves-in-depth-intuition-parametrization-d3905a681e0a
    contract BancorBondingCurve is BancorFormula {
    using PRBMathSD59x18 for int256;
    using PRBMathUD60x18 for uint256;
    uint256 public immutable slope;
    uint32 public immutable reserveRatio;
    // reserveRatio = connectorWeight, but is scaled by MAX_WEIGHT (1000000)
    // also note that unscaled reserveRatio = 1 / (n+1), so a reserveRatio 1000000 means n=0, reserveRatio=2000000 means n=1, and so on
    // slope (denoted as m in the article) is only relevant when supply = 0. When supply is non-zero, the price for minting k tokens can be fully
            determined by current balance and supply
    constructor(uint256 _slope, uint32 _reserveRatio) {
    slope = _slope;
    reserveRatio = _reserveRatio;
    }
    // buy function
    /**
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 19 : BancorFormula.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    import "./Power.sol";
    import "@openzeppelin/contracts/utils/math/Math.sol";
    /**
    * @title Bancor formula by Bancor
    * @dev Modified from the original by Slava Balasanov
    * https://github.com/bancorprotocol/contracts
    * Split Power.sol out from BancorFormula.sol and replace SafeMath formulas with zeppelin's SafeMath
    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;
    * and to You under the Apache License, Version 2.0. "
    */
    contract BancorFormula is Power {
    string public constant version = "0.3.1";
    uint32 public constant MAX_WEIGHT = 1000000;
    /**
    * @dev given a token supply, connector balance, weight and a deposit amount (in the connector token),
    * calculates the return for a given conversion (in the main token)
    *
    * Formula:
    * Return = _supply * ((1 + _depositAmount / _connectorBalance) ^ (_connectorWeight / 1000000) - 1)
    *
    * @param _supply token total supply
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 19 : Power.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    // TODO: make this a library after constant uint256 array is supported
    /**
    * bancor formula by bancor
    * https://github.com/bancorprotocol/contracts
    * Modified from the original by Slava Balasanov
    * Split Power.sol out from BancorFormula.sol
    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements;
    * and to You under the Apache License, Version 2.0. "
    */
    contract Power {
    uint256 private constant ONE = 1;
    uint32 private constant MAX_WEIGHT = 1000000;
    uint8 private constant MIN_PRECISION = 32;
    uint8 private constant MAX_PRECISION = 127;
    /**
    The values below depend on MAX_PRECISION. If you choose to change it:
    Apply the same change in file 'PrintIntScalingFactors.py', run it and paste the results below.
    */
    uint256 private constant FIXED_1 = 0x080000000000000000000000000000000;
    uint256 private constant FIXED_2 = 0x100000000000000000000000000000000;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 19 : IUniswapV2Router02.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    interface IUniswapV2Router02 {
    function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 19 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
    pragma solidity ^0.8.0;
    import "../token/extensions/Context.sol";
    /**
    * @dev Contract module which provides a basic access control mechanism, where
    * there is an account (an owner) that can be granted exclusive access to
    * specific functions.
    *
    * By default, the owner account will be the one that deploys the contract. This
    * can later be changed with {transferOwnership}.
    *
    * This module is used through inheritance. It will make available the modifier
    * `onlyOwner`, which can be applied to your functions to restrict their use to
    * the owner.
    */
    abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 19 : ERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
    pragma solidity ^0.8.0;
    import "./IERC20.sol";
    import "./extensions/IERC20Metadata.sol";
    import "./extensions/Context.sol";
    /**
    * @dev Implementation of the {IERC20} interface.
    *
    * This implementation is agnostic to the way tokens are created. This means
    * that a supply mechanism has to be added in a derived contract using {_mint}.
    * For a generic mechanism see {ERC20PresetMinterPauser}.
    *
    * TIP: For a detailed writeup see our guide
    * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
    * to implement supply mechanisms].
    *
    * The default value of {decimals} is 18. To change this, you should override
    * this function so it returns a different value.
    *
    * We have followed general OpenZeppelin Contracts guidelines: functions revert
    * instead returning `false` on failure. This behavior is nonetheless
    * conventional and does not conflict with the expectations of ERC20
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 19 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 19 : ERC20Burnable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
    pragma solidity ^0.8.0;
    import "../ERC20.sol";
    import "./Context.sol";
    /**
    * @dev Extension of {ERC20} that allows token holders to destroy both their own
    * tokens and those that they have an allowance for, in a way that can be
    * recognized off-chain (via event analysis).
    */
    abstract contract ERC20Burnable is Context, ERC20 {
    /**
    * @dev Destroys `amount` tokens from the caller.
    *
    * See {ERC20-_burn}.
    */
    function burn(uint256 amount) public virtual {
    _burn(_msgSender(), amount);
    }
    /**
    * @dev Destroys `amount` tokens from `account`, deducting from the caller's
    * allowance.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 19 : IERC20Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
    pragma solidity ^0.8.0;
    import "../IERC20.sol";
    /**
    * @dev Interface for the optional metadata functions from the ERC20 standard.
    *
    * _Available since v4.1._
    */
    interface IERC20Metadata is IERC20 {
    /**
    * @dev Returns the name of the token.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the symbol of the token.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the decimals places of the token.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 19 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Interface of the ERC20 standard as defined in the EIP.
    */
    interface IERC20 {
    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);
    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Returns the amount of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 19 : PRBMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    /// @notice Emitted when the result overflows uint256.
    error PRBMath__MulDivFixedPointOverflow(uint256 prod1);
    /// @notice Emitted when the result overflows uint256.
    error PRBMath__MulDivOverflow(uint256 prod1, uint256 denominator);
    /// @notice Emitted when one of the inputs is type(int256).min.
    error PRBMath__MulDivSignedInputTooSmall();
    /// @notice Emitted when the intermediary absolute result overflows int256.
    error PRBMath__MulDivSignedOverflow(uint256 rAbs);
    /// @notice Emitted when the input is MIN_SD59x18.
    error PRBMathSD59x18__AbsInputTooSmall();
    /// @notice Emitted when ceiling a number overflows SD59x18.
    error PRBMathSD59x18__CeilOverflow(int256 x);
    /// @notice Emitted when one of the inputs is MIN_SD59x18.
    error PRBMathSD59x18__DivInputTooSmall();
    /// @notice Emitted when one of the intermediary unsigned results overflows SD59x18.
    error PRBMathSD59x18__DivOverflow(uint256 rAbs);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 19 : PRBMathSD59x18.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    import "./PRBMath.sol";
    /// @title PRBMathSD59x18
    /// @author Paul Razvan Berg
    /// @notice Smart contract library for advanced fixed-point math that works with int256 numbers considered to have 18
    /// trailing decimals. We call this number representation signed 59.18-decimal fixed-point, since the numbers can have
    /// a sign and there can be up to 59 digits in the integer part and up to 18 decimals in the fractional part. The numbers
    /// are bound by the minimum and the maximum values permitted by the Solidity type int256.
    library PRBMathSD59x18 {
    /// @dev log2(e) as a signed 59.18-decimal fixed-point number.
    int256 internal constant LOG2_E = 1_442695040888963407;
    /// @dev Half the SCALE number.
    int256 internal constant HALF_SCALE = 5e17;
    /// @dev The maximum value a signed 59.18-decimal fixed-point number can have.
    int256 internal constant MAX_SD59x18 =
    57896044618658097711785492504343953926634992332820282019728_792003956564819967;
    /// @dev The maximum whole value a signed 59.18-decimal fixed-point number can have.
    int256 internal constant MAX_WHOLE_SD59x18 =
    57896044618658097711785492504343953926634992332820282019728_000000000000000000;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 19 : PRBMathUD60x18.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: Unlicense
    pragma solidity >=0.8.4;
    import "./PRBMath.sol";
    /// @title PRBMathUD60x18
    /// @author Paul Razvan Berg
    /// @notice Smart contract library for advanced fixed-point math that works with uint256 numbers considered to have 18
    /// trailing decimals. We call this number representation unsigned 60.18-decimal fixed-point, since there can be up to 60
    /// digits in the integer part and up to 18 decimals in the fractional part. The numbers are bound by the minimum and the
    /// maximum values permitted by the Solidity type uint256.
    library PRBMathUD60x18 {
    /// @dev Half the SCALE number.
    uint256 internal constant HALF_SCALE = 5e17;
    /// @dev log2(e) as an unsigned 60.18-decimal fixed-point number.
    uint256 internal constant LOG2_E = 1_442695040888963407;
    /// @dev The maximum value an unsigned 60.18-decimal fixed-point number can have.
    uint256 internal constant MAX_UD60x18 =
    115792089237316195423570985008687907853269984665640564039457_584007913129639935;
    /// @dev The maximum whole value an unsigned 60.18-decimal fixed-point number can have.
    uint256 internal constant MAX_WHOLE_UD60x18 =
    115792089237316195423570985008687907853269984665640564039457_000000000000000000;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
    "evmVersion": "paris",
    "optimizer": {
    "enabled": false,
    "runs": 200
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_uniRouter","type":"address"},{"internalType":"address","name":"_bancorFormula","type":"address"},{"internalType":"address payable","name":"_feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedToSendEth","type":"error"},{"inputs":[],"name":"InsufficientPoolbalance","type":"error"},{"inputs":[],"name":"InvalidLpFeePercentage","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"MaxPoolBalanceReached","type":"error"},{"inputs":[],"name":"PairCreationFailed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"TokenAlreadyListed","type":"error"},{"inputs":[],"name":"TokenDoesNotExist","type":"error"},{"inputs":[],"name":"TokenTransferFailed","type":"error"},{"inputs":[],"name":"ZeroEthSent","type":"error"},{"inputs":[],"name":"ZeroTokenAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"TokensSold","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateCurvedBuyReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"calculateCurvedSellReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"create","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getCurrentTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getTokenEthBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bancorFormula","type":"address"}],"name":"setBancorFormula","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpFeePercentage","type":"uint256"}],"name":"setLpFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPoolBalance","type":"uint256"}],"name":"setMaxPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniRouter","type":"address"}],"name":"setUniRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"contract BondingCurveToken","name":"token","type":"address"},{"internalType":"uint256","name":"tokenbalance","type":"uint256"},{"internalType":"uint256","name":"ethBalance","type":"uint256"},{"internalType":"bool","name":"isListed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

    60a060405266b1a2bc2ec500006006556903120bec57b51c10000060075561dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561005e57600080fd5b5060405161603c38038061603c833981810160405281019061008091906102db565b61009c61009161016e60201b60201c565b61017660201b60201c565b6001808190555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505061032e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061026a8261023f565b9050919050565b61027a8161025f565b811461028557600080fd5b50565b60008151905061029781610271565b92915050565b60006102a88261023f565b9050919050565b6102b88161029d565b81146102c357600080fd5b50565b6000815190506102d5816102af565b92915050565b6000806000606084860312156102f4576102f361023a565b5b600061030286828701610288565b935050602061031386828701610288565b9250506040610324868287016102c6565b9150509250925092565b608051615cf36103496000396000612ed00152615cf36000f3fe6080604052600436106101185760003560e01c80638e72b23f116100a0578063e486033911610064578063e4860339146103bd578063e74b981b146103fd578063ee4e268714610426578063f088d5471461044f578063f2fde38b1461046b5761011f565b80638e72b23f146102b45780639ead7222146102dd578063be33f6bd1461031a578063d146d31d14610357578063ddf731f3146103945761011f565b80636c197ff5116100e75780636c197ff5146101f7578063715018a61461022057806376f728d814610237578063880af793146102605780638da5cb5b146102895761011f565b806309f72da314610124578063198e2b8a1461016157806331f3efba1461017d57806341528e72146101ba5761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061014b600480360381019061014691906130d0565b610494565b6040516101589190613116565b60405180910390f35b61017b60048036038101906101769190613196565b610656565b005b34801561018957600080fd5b506101a4600480360381019061019f9190613243565b6109f7565b6040516101b19190613116565b60405180910390f35b3480156101c657600080fd5b506101e160048036038101906101dc91906130d0565b610cb1565b6040516101ee9190613116565b60405180910390f35b34801561020357600080fd5b5061021e60048036038101906102199190613243565b610cfd565b005b34801561022c57600080fd5b506102356112b6565b005b34801561024357600080fd5b5061025e60048036038101906102599190613283565b6112ca565b005b34801561026c57600080fd5b5061028760048036038101906102829190613283565b6112dc565b005b34801561029557600080fd5b5061029e61132f565b6040516102ab91906132bf565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906130d0565b611358565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613283565b6113a4565b60405161031191906132bf565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613243565b6113e3565b60405161034e9190613116565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906130d0565b61169d565b60405161038b9190613116565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b691906130d0565b61187e565b005b3480156103c957600080fd5b506103e460048036038101906103df91906130d0565b6119bf565b6040516103f49493929190613354565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906133d7565b611a1c565b005b34801561043257600080fd5b5061044d600480360381019061044891906130d0565b611ace565b005b610469600480360381019061046491906130d0565b611b1a565b005b34801561047757600080fd5b50610492600480360381019061048d91906130d0565b612268565b005b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610567576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156105b0576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106349190613419565b61063e9190613475565b905061064a83826122eb565b95505050505050919050565b61065e6123c9565b6000848484846040516106709061305b565b61067d9493929190613507565b604051809103906000f080158015610699573d6000803e3d6000fd5b509050600081905060405180608001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160001515815250600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1663aa60b06b306040518263ffffffff1660e01b815260040161083691906132bf565b600060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108a391906132bf565b602060405180830381865afa1580156108c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e49190613419565b905060008103610920576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4898989896040516109ca9493929190613507565b60405180910390a360003411156109e6576109e5823461240f565b5b5050506109f16129a6565b50505050565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600082600201549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ad3576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260030160009054906101000a900460ff1615610b1c576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008503610b56576040517f82c4a8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd19190613419565b610bdb9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d2dfa4a85848b6040518463ffffffff1660e01b8152600401610c3e93929190613542565b602060405180830381865afa158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f9190613419565b90506000610c9482662386f26fc100006129af565b90508082610ca29190613475565b97505050505050505092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b610d056123c9565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dd7576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff1615610e20576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303610e5a576040517f82c4a8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190613419565b610ee89190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d2dfa4a85848a6040518463ffffffff1660e01b8152600401610f4b93929190613542565b602060405180830381865afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613419565b90506000610fa182662386f26fc100006129af565b905060008183610fb19190613475565b905082861015610fed576040517ff8ffc0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82886002016000828254039250508190555088886001016000828254019250508190555060008211156110e1576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611062906135aa565b60006040518083038185875af1925050503d806000811461109f576040519150601f19603f3d011682016040523d82523d6000602084013e6110a4565b606091505b50509050806110df576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308c6040518463ffffffff1660e01b815260040161111e939291906135bf565b6020604051808303816000875af115801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190613622565b611197576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516111bd906135aa565b60006040518083038185875af1925050503d80600081146111fa576040519150601f19603f3d011682016040523d82523d6000602084013e6111ff565b606091505b505090508061123a576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f32908c8560405161129992919061364f565b60405180910390a35050505050505050506112b26129a6565b5050565b6112be6129d8565b6112c86000612a56565b565b6112d26129d8565b8060078190555050565b6112e46129d8565b66b1a2bc2ec50000811115611325576040517fc99a8b3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113606129d8565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600581815481106113b457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114b6576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156114ff576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403611539576040517fa096c83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600201549050600061155586662386f26fc100006129af565b9050600081876115659190613475565b90506000856001015490506000818673ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190613419565b6115ec9190613475565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438683866040518463ffffffff1660e01b815260040161164d93929190613542565b602060405180830381865afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190613419565b97505050505050505092915050565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611770576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156117b9576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001015490506000818373ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118349190613419565b61183e9190613475565b9050600061184b87610494565b90506000670de0b6b3a764000082846118649190613678565b61186e91906136e9565b9050809650505050505050919050565b6118866129d8565b61188e6123c9565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611960576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156119a9576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b283612b1a565b50506119bc6129a6565b50565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b611a246129d8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a8a576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ad66129d8565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b226123c9565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf4576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff1615611c3d576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003403611c77576040517fa096c83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260020154905060008160075411611c92576000611ca1565b81600754611ca09190613475565b5b905060008103611cdd576040517f9876e37400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001015490506000818573ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190613419565b611d629190613475565b90506000662386f26fc10000670de0b6b3a7640000611d819190613475565b9050600081670de0b6b3a764000086611d9a9190613678565b611da491906136e9565b90506000813411611db55734611db7565b815b90506000611dcc82662386f26fc100006129af565b905060008183611ddc9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438b89856040518463ffffffff1660e01b8152600401611e3f93929190613542565b602060405180830381865afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e809190613419565b905087811115611f5157879050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8b89846040518463ffffffff1660e01b8152600401611eec93929190613542565b602060405180830381865afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190613419565b9150611f4082662386f26fc100006129af565b92508282611f4e919061371a565b93505b818a611f5d919061371a565b8c60020181905550808c6001016000828254611f799190613475565b925050819055506000831115612050576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611fd1906135aa565b60006040518083038185875af1925050503d806000811461200e576040519150601f19603f3d011682016040523d82523d6000602084013e612013565b606091505b505090508061204e576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8a73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161208b92919061374e565b6020604051808303816000875af11580156120aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ce9190613622565b612104576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000843411612114576000612121565b84346121209190613475565b5b905060008111156121d15760003373ffffffffffffffffffffffffffffffffffffffff1682604051612152906135aa565b60006040518083038185875af1925050503d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b50509050806121cf576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b3373ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c858560405161223092919061364f565b60405180910390a36122418d613014565b156122505761224f8e612b1a565b5b505050505050505050505050506122656129a6565b50565b6122706129d8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906137e9565b60405180910390fd5b6122e881612a56565b50565b600080670de0b6b3a764000090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8686856040518463ffffffff1660e01b815260040161235a93929190613542565b602060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239b9190613419565b905060006123b082662386f26fc100006129af565b905080826123be9190613475565b935050505092915050565b600260015403612405576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ff9190613419565b6125099190613475565b9050600061251e87662386f26fc100006129af565b90506000818861252e9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438786856040518463ffffffff1660e01b815260040161259193929190613542565b602060405180830381865afa1580156125ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d29190613419565b90508481111561269557849050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8786846040518463ffffffff1660e01b815260040161263e93929190613542565b602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f9190613419565b915061269282662386f26fc100006129af565b92505b818860020160008282546126a9919061371a565b92505081905550808860010160008282546126c49190613475565b92505081905550600083111561279b576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161271c906135aa565b60006040518083038185875af1925050503d8060008114612759576040519150601f19603f3d011682016040523d82523d6000602084013e61275e565b606091505b5050905080612799576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127d692919061374e565b6020604051808303816000875af11580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613622565b61284f576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838361285d919061371a565b8a1161286a576000612882565b8383612876919061371a565b8a6128819190613475565b5b905060008111156129325760003373ffffffffffffffffffffffffffffffffffffffff16826040516128b3906135aa565b60006040518083038185875af1925050503d80600081146128f0576040519150601f19603f3d011682016040523d82523d6000602084013e6128f5565b606091505b5050905080612930576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c858560405161299192919061364f565b60405180910390a35050505050505050505050565b60018081905550565b6000670de0b6b3a764000082846129c69190613678565b6129d091906136e9565b905092915050565b6129e0613053565b73ffffffffffffffffffffffffffffffffffffffff166129fe61132f565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90613855565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160030160009054906101000a900460ff1615612bcf576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000612be6826006546129af565b905060008183612bf69190613475565b90508373ffffffffffffffffffffffffffffffffffffffff16634f6ef09a306040518263ffffffff1660e01b8152600401612c3191906132bf565b600060405180830381600087803b158015612c4b57600080fd5b505af1158015612c5f573d6000803e3d6000fd5b50505050600085600101548573ffffffffffffffffffffffffffffffffffffffff1663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd99190613419565b612ce3919061371a565b9050600086600101819055506000866002018190555060018660030160006101000a81548160ff0219169083151502179055506000831115612de6576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612d67906135aa565b60006040518083038185875af1925050503d8060008114612da4576040519150601f19603f3d011682016040523d82523d6000602084013e612da9565b606091505b5050905080612de4576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612e4392919061374e565b6020604051808303816000875af1158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e869190613622565b50600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719858b866000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b8152600401612f11969594939291906138b0565b60606040518083038185885af1158015612f2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f549190613911565b50915091508673ffffffffffffffffffffffffffffffffffffffff1663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45828460405161300192919061364f565b60405180910390a2505050505050505050565b600080606460636007546130289190613678565b61303291906136e9565b905060008360010154148061304b575080836002015410155b915050919050565b600033905090565b6123598061396583390190565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061309d82613072565b9050919050565b6130ad81613092565b81146130b857600080fd5b50565b6000813590506130ca816130a4565b92915050565b6000602082840312156130e6576130e5613068565b5b60006130f4848285016130bb565b91505092915050565b6000819050919050565b613110816130fd565b82525050565b600060208201905061312b6000830184613107565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261315657613155613131565b5b8235905067ffffffffffffffff81111561317357613172613136565b5b60208301915083600182028301111561318f5761318e61313b565b5b9250929050565b600080600080604085870312156131b0576131af613068565b5b600085013567ffffffffffffffff8111156131ce576131cd61306d565b5b6131da87828801613140565b9450945050602085013567ffffffffffffffff8111156131fd576131fc61306d565b5b61320987828801613140565b925092505092959194509250565b613220816130fd565b811461322b57600080fd5b50565b60008135905061323d81613217565b92915050565b6000806040838503121561325a57613259613068565b5b6000613268858286016130bb565b92505060206132798582860161322e565b9150509250929050565b60006020828403121561329957613298613068565b5b60006132a78482850161322e565b91505092915050565b6132b981613092565b82525050565b60006020820190506132d460008301846132b0565b92915050565b6000819050919050565b60006132ff6132fa6132f584613072565b6132da565b613072565b9050919050565b6000613311826132e4565b9050919050565b600061332382613306565b9050919050565b61333381613318565b82525050565b60008115159050919050565b61334e81613339565b82525050565b6000608082019050613369600083018761332a565b6133766020830186613107565b6133836040830185613107565b6133906060830184613345565b95945050505050565b60006133a482613072565b9050919050565b6133b481613399565b81146133bf57600080fd5b50565b6000813590506133d1816133ab565b92915050565b6000602082840312156133ed576133ec613068565b5b60006133fb848285016133c2565b91505092915050565b60008151905061341381613217565b92915050565b60006020828403121561342f5761342e613068565b5b600061343d84828501613404565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613480826130fd565b915061348b836130fd565b92508282039050818111156134a3576134a2613446565b5b92915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006134e683856134a9565b93506134f38385846134ba565b6134fc836134c9565b840190509392505050565b600060408201905081810360008301526135228186886134da565b905081810360208301526135378184866134da565b905095945050505050565b60006060820190506135576000830186613107565b6135646020830185613107565b6135716040830184613107565b949350505050565b600081905092915050565b50565b6000613594600083613579565b915061359f82613584565b600082019050919050565b60006135b582613587565b9150819050919050565b60006060820190506135d460008301866132b0565b6135e160208301856132b0565b6135ee6040830184613107565b949350505050565b6135ff81613339565b811461360a57600080fd5b50565b60008151905061361c816135f6565b92915050565b60006020828403121561363857613637613068565b5b60006136468482850161360d565b91505092915050565b60006040820190506136646000830185613107565b6136716020830184613107565b9392505050565b6000613683826130fd565b915061368e836130fd565b925082820261369c816130fd565b915082820484148315176136b3576136b2613446565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136f4826130fd565b91506136ff836130fd565b92508261370f5761370e6136ba565b5b828204905092915050565b6000613725826130fd565b9150613730836130fd565b925082820190508082111561374857613747613446565b5b92915050565b600060408201905061376360008301856132b0565b6137706020830184613107565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137d36026836134a9565b91506137de82613777565b604082019050919050565b60006020820190508181036000830152613802816137c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061383f6020836134a9565b915061384a82613809565b602082019050919050565b6000602082019050818103600083015261386e81613832565b9050919050565b6000819050919050565b600061389a61389561389084613875565b6132da565b6130fd565b9050919050565b6138aa8161387f565b82525050565b600060c0820190506138c560008301896132b0565b6138d26020830188613107565b6138df60408301876138a1565b6138ec60608301866138a1565b6138f960808301856132b0565b61390660a0830184613107565b979650505050505050565b60008060006060848603121561392a57613929613068565b5b600061393886828701613404565b935050602061394986828701613404565b925050604061395a86828701613404565b915050925092509256fe608060405234801561001057600080fd5b5060405161235938038061235983398181016040528101906100329190610444565b8181816003908161004391906106dd565b50806004908161005391906106dd565b50505061007261006761009560201b60201c565b61009d60201b60201c565b61008e306b033b2e3c9fd0803ce800000061016360201b60201c565b50506108b9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99061080c565b60405180910390fd5b6101e4600083836102c560201b60201c565b80600260008282546101f6919061085b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102a7919061089e565b60405180910390a36102c1600083836102ca60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610336826102ed565b810181811067ffffffffffffffff82111715610355576103546102fe565b5b80604052505050565b60006103686102cf565b9050610374828261032d565b919050565b600067ffffffffffffffff821115610394576103936102fe565b5b61039d826102ed565b9050602081019050919050565b60005b838110156103c85780820151818401526020810190506103ad565b60008484015250505050565b60006103e76103e284610379565b61035e565b905082815260208101848484011115610403576104026102e8565b5b61040e8482856103aa565b509392505050565b600082601f83011261042b5761042a6102e3565b5b815161043b8482602086016103d4565b91505092915050565b6000806040838503121561045b5761045a6102d9565b5b600083015167ffffffffffffffff811115610479576104786102de565b5b61048585828601610416565b925050602083015167ffffffffffffffff8111156104a6576104a56102de565b5b6104b285828601610416565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061050e57607f821691505b602082108103610521576105206104c7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261054c565b610593868361054c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006105da6105d56105d0846105ab565b6105b5565b6105ab565b9050919050565b6000819050919050565b6105f4836105bf565b610608610600826105e1565b848454610559565b825550505050565b600090565b61061d610610565b6106288184846105eb565b505050565b5b8181101561064c57610641600082610615565b60018101905061062e565b5050565b601f8211156106915761066281610527565b61066b8461053c565b8101602085101561067a578190505b61068e6106868561053c565b83018261062d565b50505b505050565b600082821c905092915050565b60006106b460001984600802610696565b1980831691505092915050565b60006106cd83836106a3565b9150826002028217905092915050565b6106e6826104bc565b67ffffffffffffffff8111156106ff576106fe6102fe565b5b61070982546104f6565b610714828285610650565b600060209050601f8311600181146107475760008415610735578287015190505b61073f85826106c1565b8655506107a7565b601f19841661075586610527565b60005b8281101561077d57848901518255600182019150602085019450602081019050610758565b8683101561079a5784890151610796601f8916826106a3565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006107f6601f836107af565b9150610801826107c0565b602082019050919050565b60006020820190508181036000830152610825816107e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610866826105ab565b9150610871836105ab565b92508282019050808211156108895761088861082c565b5b92915050565b610898816105ab565b82525050565b60006020820190506108b3600083018461088f565b92915050565b611a91806108c86000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d714610321578063a9059cbb14610351578063aa60b06b14610381578063dd62ed3e1461039d578063f2fde38b146103cd5761012c565b806370a082311461028f578063715018a6146102bf57806379cc6790146102c95780638da5cb5b146102e557806395d89b41146103035761012c565b806339509351116100f457806339509351146101eb57806342966c681461021b5780634c0abcdb146102375780634f6ef09a14610255578063670171fd146102715761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103e9565b60405161014691906110f5565b60405180910390f35b610169600480360381019061016491906111b0565b61047b565b604051610176919061120b565b60405180910390f35b61018761049e565b6040516101949190611235565b60405180910390f35b6101b760048036038101906101b29190611250565b6104a8565b6040516101c4919061120b565b60405180910390f35b6101d56104d7565b6040516101e291906112bf565b60405180910390f35b610205600480360381019061020091906111b0565b6104e0565b604051610212919061120b565b60405180910390f35b610235600480360381019061023091906112da565b610517565b005b61023f61052b565b60405161024c9190611235565b60405180910390f35b61026f600480360381019061026a9190611307565b61053b565b005b61027961055c565b6040516102869190611235565b60405180910390f35b6102a960048036038101906102a49190611307565b61056b565b6040516102b69190611235565b60405180910390f35b6102c76105b3565b005b6102e360048036038101906102de91906111b0565b6105c7565b005b6102ed6105d5565b6040516102fa9190611343565b60405180910390f35b61030b6105ff565b60405161031891906110f5565b60405180910390f35b61033b600480360381019061033691906111b0565b610691565b604051610348919061120b565b60405180910390f35b61036b600480360381019061036691906111b0565b610708565b604051610378919061120b565b60405180910390f35b61039b60048036038101906103969190611307565b61072b565b005b6103b760048036038101906103b2919061135e565b61074d565b6040516103c49190611235565b60405180910390f35b6103e760048036038101906103e29190611307565b6107d4565b005b6060600380546103f8906113cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906113cd565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600080610486610857565b905061049381858561085f565b600191505092915050565b6000600254905090565b6000806104b3610857565b90506104c0858285610a28565b6104cb858585610ab4565b60019150509392505050565b60006012905090565b6000806104eb610857565b905061050c8185856104fd858961074d565b610507919061142d565b61085f565b600191505092915050565b610528610522610857565b82610d2a565b50565b6b0295be96e64066972000000081565b610543610ef7565b61055930826aa56fa5b99019a5c8000000610ab4565b50565b6aa56fa5b99019a5c800000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105bb610ef7565b6105c56000610f75565b565b6105d1828261103b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461060e906113cd565b80601f016020809104026020016040519081016040528092919081815260200182805461063a906113cd565b80156106875780601f1061065c57610100808354040283529160200191610687565b820191906000526020600020905b81548152906001019060200180831161066a57829003601f168201915b5050505050905090565b60008061069c610857565b905060006106aa828661074d565b9050838110156106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906114d3565b60405180910390fd5b6106fc828686840361085f565b60019250505092915050565b600080610713610857565b9050610720818585610ab4565b600191505092915050565b610733610ef7565b61074a30826b0295be96e640669720000000610ab4565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107dc610ef7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290611565565b60405180910390fd5b61085481610f75565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906115f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490611689565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a1b9190611235565b60405180910390a3505050565b6000610a34848461074d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aae5781811015610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a97906116f5565b60405180910390fd5b610aad848484840361085f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90611787565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990611819565b60405180910390fd5b610b9d83838361105b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a906118ab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d119190611235565b60405180910390a3610d24848484611060565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061193d565b60405180910390fd5b610da58260008361105b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906119cf565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ede9190611235565b60405180910390a3610ef283600084611060565b505050565b610eff610857565b73ffffffffffffffffffffffffffffffffffffffff16610f1d6105d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90611a3b565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61104d82611047610857565b83610a28565b6110578282610d2a565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561109f578082015181840152602081019050611084565b60008484015250505050565b6000601f19601f8301169050919050565b60006110c782611065565b6110d18185611070565b93506110e1818560208601611081565b6110ea816110ab565b840191505092915050565b6000602082019050818103600083015261110f81846110bc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111478261111c565b9050919050565b6111578161113c565b811461116257600080fd5b50565b6000813590506111748161114e565b92915050565b6000819050919050565b61118d8161117a565b811461119857600080fd5b50565b6000813590506111aa81611184565b92915050565b600080604083850312156111c7576111c6611117565b5b60006111d585828601611165565b92505060206111e68582860161119b565b9150509250929050565b60008115159050919050565b611205816111f0565b82525050565b600060208201905061122060008301846111fc565b92915050565b61122f8161117a565b82525050565b600060208201905061124a6000830184611226565b92915050565b60008060006060848603121561126957611268611117565b5b600061127786828701611165565b935050602061128886828701611165565b92505060406112998682870161119b565b9150509250925092565b600060ff82169050919050565b6112b9816112a3565b82525050565b60006020820190506112d460008301846112b0565b92915050565b6000602082840312156112f0576112ef611117565b5b60006112fe8482850161119b565b91505092915050565b60006020828403121561131d5761131c611117565b5b600061132b84828501611165565b91505092915050565b61133d8161113c565b82525050565b60006020820190506113586000830184611334565b92915050565b6000806040838503121561137557611374611117565b5b600061138385828601611165565b925050602061139485828601611165565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113e557607f821691505b6020821081036113f8576113f761139e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114388261117a565b91506114438361117a565b925082820190508082111561145b5761145a6113fe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006114bd602583611070565b91506114c882611461565b604082019050919050565b600060208201905081810360008301526114ec816114b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061154f602683611070565b915061155a826114f3565b604082019050919050565b6000602082019050818103600083015261157e81611542565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006115e1602483611070565b91506115ec82611585565b604082019050919050565b60006020820190508181036000830152611610816115d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611673602283611070565b915061167e82611617565b604082019050919050565b600060208201905081810360008301526116a281611666565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006116df601d83611070565b91506116ea826116a9565b602082019050919050565b6000602082019050818103600083015261170e816116d2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611771602583611070565b915061177c82611715565b604082019050919050565b600060208201905081810360008301526117a081611764565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611803602383611070565b915061180e826117a7565b604082019050919050565b60006020820190508181036000830152611832816117f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611895602683611070565b91506118a082611839565b604082019050919050565b600060208201905081810360008301526118c481611888565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611927602183611070565b9150611932826118cb565b604082019050919050565b600060208201905081810360008301526119568161191a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006119b9602283611070565b91506119c48261195d565b604082019050919050565b600060208201905081810360008301526119e8816119ac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a25602083611070565b9150611a30826119ef565b602082019050919050565b60006020820190508181036000830152611a5481611a18565b905091905056fea264697066735822122029fb9e3976dc34ea8c2335e8453d923920168f0fce0d170c0de7cdf7757ea4d564736f6c634300081c0033a264697066735822122003ef549fe9f08b32a444d1bcde97eff783a786f1092241eeb863fbfd63cd3dae64736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042cc8bef111e05f478cdd37950f1c06b0348184a0000000000000000000000009c1b8deb6d89a795bc2e45f86a9af6e034744774

    Deployed Bytecode

    0x6080604052600436106101185760003560e01c80638e72b23f116100a0578063e486033911610064578063e4860339146103bd578063e74b981b146103fd578063ee4e268714610426578063f088d5471461044f578063f2fde38b1461046b5761011f565b80638e72b23f146102b45780639ead7222146102dd578063be33f6bd1461031a578063d146d31d14610357578063ddf731f3146103945761011f565b80636c197ff5116100e75780636c197ff5146101f7578063715018a61461022057806376f728d814610237578063880af793146102605780638da5cb5b146102895761011f565b806309f72da314610124578063198e2b8a1461016157806331f3efba1461017d57806341528e72146101ba5761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061014b600480360381019061014691906130d0565b610494565b6040516101589190613116565b60405180910390f35b61017b60048036038101906101769190613196565b610656565b005b34801561018957600080fd5b506101a4600480360381019061019f9190613243565b6109f7565b6040516101b19190613116565b60405180910390f35b3480156101c657600080fd5b506101e160048036038101906101dc91906130d0565b610cb1565b6040516101ee9190613116565b60405180910390f35b34801561020357600080fd5b5061021e60048036038101906102199190613243565b610cfd565b005b34801561022c57600080fd5b506102356112b6565b005b34801561024357600080fd5b5061025e60048036038101906102599190613283565b6112ca565b005b34801561026c57600080fd5b5061028760048036038101906102829190613283565b6112dc565b005b34801561029557600080fd5b5061029e61132f565b6040516102ab91906132bf565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906130d0565b611358565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613283565b6113a4565b60405161031191906132bf565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613243565b6113e3565b60405161034e9190613116565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906130d0565b61169d565b60405161038b9190613116565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b691906130d0565b61187e565b005b3480156103c957600080fd5b506103e460048036038101906103df91906130d0565b6119bf565b6040516103f49493929190613354565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906133d7565b611a1c565b005b34801561043257600080fd5b5061044d600480360381019061044891906130d0565b611ace565b005b610469600480360381019061046491906130d0565b611b1a565b005b34801561047757600080fd5b50610492600480360381019061048d91906130d0565b612268565b005b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610567576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156105b0576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106349190613419565b61063e9190613475565b905061064a83826122eb565b95505050505050919050565b61065e6123c9565b6000848484846040516106709061305b565b61067d9493929190613507565b604051809103906000f080158015610699573d6000803e3d6000fd5b509050600081905060405180608001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160001515815250600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1663aa60b06b306040518263ffffffff1660e01b815260040161083691906132bf565b600060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108a391906132bf565b602060405180830381865afa1580156108c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e49190613419565b905060008103610920576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fd5d05a8421149c74fd223cfc823befb883babf9bf0b0e4d6bf9c8fdb70e59bb4898989896040516109ca9493929190613507565b60405180910390a360003411156109e6576109e5823461240f565b5b5050506109f16129a6565b50505050565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600082600201549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ad3576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260030160009054906101000a900460ff1615610b1c576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008503610b56576040517f82c4a8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd19190613419565b610bdb9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d2dfa4a85848b6040518463ffffffff1660e01b8152600401610c3e93929190613542565b602060405180830381865afa158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f9190613419565b90506000610c9482662386f26fc100006129af565b90508082610ca29190613475565b97505050505050505092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b610d056123c9565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dd7576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff1615610e20576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303610e5a576040517f82c4a8c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190613419565b610ee89190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d2dfa4a85848a6040518463ffffffff1660e01b8152600401610f4b93929190613542565b602060405180830381865afa158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8c9190613419565b90506000610fa182662386f26fc100006129af565b905060008183610fb19190613475565b905082861015610fed576040517ff8ffc0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82886002016000828254039250508190555088886001016000828254019250508190555060008211156110e1576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611062906135aa565b60006040518083038185875af1925050503d806000811461109f576040519150601f19603f3d011682016040523d82523d6000602084013e6110a4565b606091505b50509050806110df576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308c6040518463ffffffff1660e01b815260040161111e939291906135bf565b6020604051808303816000875af115801561113d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111619190613622565b611197576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16826040516111bd906135aa565b60006040518083038185875af1925050503d80600081146111fa576040519150601f19603f3d011682016040523d82523d6000602084013e6111ff565b606091505b505090508061123a576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f697c42d55a5e1fed3f464ec6f38b32546a0bd368dc8068b065c67566d73f32908c8560405161129992919061364f565b60405180910390a35050505050505050506112b26129a6565b5050565b6112be6129d8565b6112c86000612a56565b565b6112d26129d8565b8060078190555050565b6112e46129d8565b66b1a2bc2ec50000811115611325576040517fc99a8b3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060068190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113606129d8565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600581815481106113b457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114b6576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156114ff576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403611539576040517fa096c83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600201549050600061155586662386f26fc100006129af565b9050600081876115659190613475565b90506000856001015490506000818673ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190613419565b6115ec9190613475565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438683866040518463ffffffff1660e01b815260040161164d93929190613542565b602060405180830381865afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190613419565b97505050505050505092915050565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611770576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156117b9576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001015490506000818373ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118349190613419565b61183e9190613475565b9050600061184b87610494565b90506000670de0b6b3a764000082846118649190613678565b61186e91906136e9565b9050809650505050505050919050565b6118866129d8565b61188e6123c9565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611960576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff16156119a9576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b283612b1a565b50506119bc6129a6565b50565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b611a246129d8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a8a576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ad66129d8565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b226123c9565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf4576040517fceea21b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160030160009054906101000a900460ff1615611c3d576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003403611c77576040517fa096c83800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008260020154905060008160075411611c92576000611ca1565b81600754611ca09190613475565b5b905060008103611cdd576040517f9876e37400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000846001015490506000818573ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190613419565b611d629190613475565b90506000662386f26fc10000670de0b6b3a7640000611d819190613475565b9050600081670de0b6b3a764000086611d9a9190613678565b611da491906136e9565b90506000813411611db55734611db7565b815b90506000611dcc82662386f26fc100006129af565b905060008183611ddc9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438b89856040518463ffffffff1660e01b8152600401611e3f93929190613542565b602060405180830381865afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e809190613419565b905087811115611f5157879050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8b89846040518463ffffffff1660e01b8152600401611eec93929190613542565b602060405180830381865afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190613419565b9150611f4082662386f26fc100006129af565b92508282611f4e919061371a565b93505b818a611f5d919061371a565b8c60020181905550808c6001016000828254611f799190613475565b925050819055506000831115612050576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611fd1906135aa565b60006040518083038185875af1925050503d806000811461200e576040519150601f19603f3d011682016040523d82523d6000602084013e612013565b606091505b505090508061204e576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8a73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161208b92919061374e565b6020604051808303816000875af11580156120aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ce9190613622565b612104576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000843411612114576000612121565b84346121209190613475565b5b905060008111156121d15760003373ffffffffffffffffffffffffffffffffffffffff1682604051612152906135aa565b60006040518083038185875af1925050503d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b50509050806121cf576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b3373ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c858560405161223092919061364f565b60405180910390a36122418d613014565b156122505761224f8e612b1a565b5b505050505050505050505050506122656129a6565b50565b6122706129d8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d6906137e9565b60405180910390fd5b6122e881612a56565b50565b600080670de0b6b3a764000090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8686856040518463ffffffff1660e01b815260040161235a93929190613542565b602060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239b9190613419565b905060006123b082662386f26fc100006129af565b905080826123be9190613475565b935050505092915050565b600260015403612405576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000826002015490506000836001015490506000818473ffffffffffffffffffffffffffffffffffffffff16634c0abcdb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ff9190613419565b6125099190613475565b9050600061251e87662386f26fc100006129af565b90506000818861252e9190613475565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166388dc87438786856040518463ffffffff1660e01b815260040161259193929190613542565b602060405180830381865afa1580156125ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d29190613419565b90508481111561269557849050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a32926c8786846040518463ffffffff1660e01b815260040161263e93929190613542565b602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f9190613419565b915061269282662386f26fc100006129af565b92505b818860020160008282546126a9919061371a565b92505081905550808860010160008282546126c49190613475565b92505081905550600083111561279b576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161271c906135aa565b60006040518083038185875af1925050503d8060008114612759576040519150601f19603f3d011682016040523d82523d6000602084013e61275e565b606091505b5050905080612799576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127d692919061374e565b6020604051808303816000875af11580156127f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128199190613622565b61284f576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838361285d919061371a565b8a1161286a576000612882565b8383612876919061371a565b8a6128819190613475565b5b905060008111156129325760003373ffffffffffffffffffffffffffffffffffffffff16826040516128b3906135aa565b60006040518083038185875af1925050503d80600081146128f0576040519150601f19603f3d011682016040523d82523d6000602084013e6128f5565b606091505b5050905080612930576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fc244d500136edffae7025aaf7fbd7a07193ac544a1d0cc3132cf2a32452d340c858560405161299192919061364f565b60405180910390a35050505050505050505050565b60018081905550565b6000670de0b6b3a764000082846129c69190613678565b6129d091906136e9565b905092915050565b6129e0613053565b73ffffffffffffffffffffffffffffffffffffffff166129fe61132f565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90613855565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160030160009054906101000a900460ff1615612bcf576040517fdeaabdc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826002015490506000612be6826006546129af565b905060008183612bf69190613475565b90508373ffffffffffffffffffffffffffffffffffffffff16634f6ef09a306040518263ffffffff1660e01b8152600401612c3191906132bf565b600060405180830381600087803b158015612c4b57600080fd5b505af1158015612c5f573d6000803e3d6000fd5b50505050600085600101548573ffffffffffffffffffffffffffffffffffffffff1663670171fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd99190613419565b612ce3919061371a565b9050600086600101819055506000866002018190555060018660030160006101000a81548160ff0219169083151502179055506000831115612de6576000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612d67906135aa565b60006040518083038185875af1925050503d8060008114612da4576040519150601f19603f3d011682016040523d82523d6000602084013e612da9565b606091505b5050905080612de4576040517ffe8a94f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612e4392919061374e565b6020604051808303816000875af1158015612e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e869190613622565b50600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719858b866000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b8152600401612f11969594939291906138b0565b60606040518083038185885af1158015612f2f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f549190613911565b50915091508673ffffffffffffffffffffffffffffffffffffffff1663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fa157600080fd5b505af1158015612fb5573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167fac1d76749e5447b7b16f5ab61447e1bd502f3bb4807af3b28e620d1700a6ee45828460405161300192919061364f565b60405180910390a2505050505050505050565b600080606460636007546130289190613678565b61303291906136e9565b905060008360010154148061304b575080836002015410155b915050919050565b600033905090565b6123598061396583390190565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061309d82613072565b9050919050565b6130ad81613092565b81146130b857600080fd5b50565b6000813590506130ca816130a4565b92915050565b6000602082840312156130e6576130e5613068565b5b60006130f4848285016130bb565b91505092915050565b6000819050919050565b613110816130fd565b82525050565b600060208201905061312b6000830184613107565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261315657613155613131565b5b8235905067ffffffffffffffff81111561317357613172613136565b5b60208301915083600182028301111561318f5761318e61313b565b5b9250929050565b600080600080604085870312156131b0576131af613068565b5b600085013567ffffffffffffffff8111156131ce576131cd61306d565b5b6131da87828801613140565b9450945050602085013567ffffffffffffffff8111156131fd576131fc61306d565b5b61320987828801613140565b925092505092959194509250565b613220816130fd565b811461322b57600080fd5b50565b60008135905061323d81613217565b92915050565b6000806040838503121561325a57613259613068565b5b6000613268858286016130bb565b92505060206132798582860161322e565b9150509250929050565b60006020828403121561329957613298613068565b5b60006132a78482850161322e565b91505092915050565b6132b981613092565b82525050565b60006020820190506132d460008301846132b0565b92915050565b6000819050919050565b60006132ff6132fa6132f584613072565b6132da565b613072565b9050919050565b6000613311826132e4565b9050919050565b600061332382613306565b9050919050565b61333381613318565b82525050565b60008115159050919050565b61334e81613339565b82525050565b6000608082019050613369600083018761332a565b6133766020830186613107565b6133836040830185613107565b6133906060830184613345565b95945050505050565b60006133a482613072565b9050919050565b6133b481613399565b81146133bf57600080fd5b50565b6000813590506133d1816133ab565b92915050565b6000602082840312156133ed576133ec613068565b5b60006133fb848285016133c2565b91505092915050565b60008151905061341381613217565b92915050565b60006020828403121561342f5761342e613068565b5b600061343d84828501613404565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613480826130fd565b915061348b836130fd565b92508282039050818111156134a3576134a2613446565b5b92915050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006134e683856134a9565b93506134f38385846134ba565b6134fc836134c9565b840190509392505050565b600060408201905081810360008301526135228186886134da565b905081810360208301526135378184866134da565b905095945050505050565b60006060820190506135576000830186613107565b6135646020830185613107565b6135716040830184613107565b949350505050565b600081905092915050565b50565b6000613594600083613579565b915061359f82613584565b600082019050919050565b60006135b582613587565b9150819050919050565b60006060820190506135d460008301866132b0565b6135e160208301856132b0565b6135ee6040830184613107565b949350505050565b6135ff81613339565b811461360a57600080fd5b50565b60008151905061361c816135f6565b92915050565b60006020828403121561363857613637613068565b5b60006136468482850161360d565b91505092915050565b60006040820190506136646000830185613107565b6136716020830184613107565b9392505050565b6000613683826130fd565b915061368e836130fd565b925082820261369c816130fd565b915082820484148315176136b3576136b2613446565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136f4826130fd565b91506136ff836130fd565b92508261370f5761370e6136ba565b5b828204905092915050565b6000613725826130fd565b9150613730836130fd565b925082820190508082111561374857613747613446565b5b92915050565b600060408201905061376360008301856132b0565b6137706020830184613107565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137d36026836134a9565b91506137de82613777565b604082019050919050565b60006020820190508181036000830152613802816137c6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061383f6020836134a9565b915061384a82613809565b602082019050919050565b6000602082019050818103600083015261386e81613832565b9050919050565b6000819050919050565b600061389a61389561389084613875565b6132da565b6130fd565b9050919050565b6138aa8161387f565b82525050565b600060c0820190506138c560008301896132b0565b6138d26020830188613107565b6138df60408301876138a1565b6138ec60608301866138a1565b6138f960808301856132b0565b61390660a0830184613107565b979650505050505050565b60008060006060848603121561392a57613929613068565b5b600061393886828701613404565b935050602061394986828701613404565b925050604061395a86828701613404565b915050925092509256fe608060405234801561001057600080fd5b5060405161235938038061235983398181016040528101906100329190610444565b8181816003908161004391906106dd565b50806004908161005391906106dd565b50505061007261006761009560201b60201c565b61009d60201b60201c565b61008e306b033b2e3c9fd0803ce800000061016360201b60201c565b50506108b9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c99061080c565b60405180910390fd5b6101e4600083836102c560201b60201c565b80600260008282546101f6919061085b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102a7919061089e565b60405180910390a36102c1600083836102ca60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610336826102ed565b810181811067ffffffffffffffff82111715610355576103546102fe565b5b80604052505050565b60006103686102cf565b9050610374828261032d565b919050565b600067ffffffffffffffff821115610394576103936102fe565b5b61039d826102ed565b9050602081019050919050565b60005b838110156103c85780820151818401526020810190506103ad565b60008484015250505050565b60006103e76103e284610379565b61035e565b905082815260208101848484011115610403576104026102e8565b5b61040e8482856103aa565b509392505050565b600082601f83011261042b5761042a6102e3565b5b815161043b8482602086016103d4565b91505092915050565b6000806040838503121561045b5761045a6102d9565b5b600083015167ffffffffffffffff811115610479576104786102de565b5b61048585828601610416565b925050602083015167ffffffffffffffff8111156104a6576104a56102de565b5b6104b285828601610416565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061050e57607f821691505b602082108103610521576105206104c7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026105897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261054c565b610593868361054c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006105da6105d56105d0846105ab565b6105b5565b6105ab565b9050919050565b6000819050919050565b6105f4836105bf565b610608610600826105e1565b848454610559565b825550505050565b600090565b61061d610610565b6106288184846105eb565b505050565b5b8181101561064c57610641600082610615565b60018101905061062e565b5050565b601f8211156106915761066281610527565b61066b8461053c565b8101602085101561067a578190505b61068e6106868561053c565b83018261062d565b50505b505050565b600082821c905092915050565b60006106b460001984600802610696565b1980831691505092915050565b60006106cd83836106a3565b9150826002028217905092915050565b6106e6826104bc565b67ffffffffffffffff8111156106ff576106fe6102fe565b5b61070982546104f6565b610714828285610650565b600060209050601f8311600181146107475760008415610735578287015190505b61073f85826106c1565b8655506107a7565b601f19841661075586610527565b60005b8281101561077d57848901518255600182019150602085019450602081019050610758565b8683101561079a5784890151610796601f8916826106a3565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006107f6601f836107af565b9150610801826107c0565b602082019050919050565b60006020820190508181036000830152610825816107e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610866826105ab565b9150610871836105ab565b92508282019050808211156108895761088861082c565b5b92915050565b610898816105ab565b82525050565b60006020820190506108b3600083018461088f565b92915050565b611a91806108c86000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d714610321578063a9059cbb14610351578063aa60b06b14610381578063dd62ed3e1461039d578063f2fde38b146103cd5761012c565b806370a082311461028f578063715018a6146102bf57806379cc6790146102c95780638da5cb5b146102e557806395d89b41146103035761012c565b806339509351116100f457806339509351146101eb57806342966c681461021b5780634c0abcdb146102375780634f6ef09a14610255578063670171fd146102715761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103e9565b60405161014691906110f5565b60405180910390f35b610169600480360381019061016491906111b0565b61047b565b604051610176919061120b565b60405180910390f35b61018761049e565b6040516101949190611235565b60405180910390f35b6101b760048036038101906101b29190611250565b6104a8565b6040516101c4919061120b565b60405180910390f35b6101d56104d7565b6040516101e291906112bf565b60405180910390f35b610205600480360381019061020091906111b0565b6104e0565b604051610212919061120b565b60405180910390f35b610235600480360381019061023091906112da565b610517565b005b61023f61052b565b60405161024c9190611235565b60405180910390f35b61026f600480360381019061026a9190611307565b61053b565b005b61027961055c565b6040516102869190611235565b60405180910390f35b6102a960048036038101906102a49190611307565b61056b565b6040516102b69190611235565b60405180910390f35b6102c76105b3565b005b6102e360048036038101906102de91906111b0565b6105c7565b005b6102ed6105d5565b6040516102fa9190611343565b60405180910390f35b61030b6105ff565b60405161031891906110f5565b60405180910390f35b61033b600480360381019061033691906111b0565b610691565b604051610348919061120b565b60405180910390f35b61036b600480360381019061036691906111b0565b610708565b604051610378919061120b565b60405180910390f35b61039b60048036038101906103969190611307565b61072b565b005b6103b760048036038101906103b2919061135e565b61074d565b6040516103c49190611235565b60405180910390f35b6103e760048036038101906103e29190611307565b6107d4565b005b6060600380546103f8906113cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906113cd565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600080610486610857565b905061049381858561085f565b600191505092915050565b6000600254905090565b6000806104b3610857565b90506104c0858285610a28565b6104cb858585610ab4565b60019150509392505050565b60006012905090565b6000806104eb610857565b905061050c8185856104fd858961074d565b610507919061142d565b61085f565b600191505092915050565b610528610522610857565b82610d2a565b50565b6b0295be96e64066972000000081565b610543610ef7565b61055930826aa56fa5b99019a5c8000000610ab4565b50565b6aa56fa5b99019a5c800000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105bb610ef7565b6105c56000610f75565b565b6105d1828261103b565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461060e906113cd565b80601f016020809104026020016040519081016040528092919081815260200182805461063a906113cd565b80156106875780601f1061065c57610100808354040283529160200191610687565b820191906000526020600020905b81548152906001019060200180831161066a57829003601f168201915b5050505050905090565b60008061069c610857565b905060006106aa828661074d565b9050838110156106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906114d3565b60405180910390fd5b6106fc828686840361085f565b60019250505092915050565b600080610713610857565b9050610720818585610ab4565b600191505092915050565b610733610ef7565b61074a30826b0295be96e640669720000000610ab4565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107dc610ef7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361084b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084290611565565b60405180910390fd5b61085481610f75565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906115f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490611689565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a1b9190611235565b60405180910390a3505050565b6000610a34848461074d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610aae5781811015610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a97906116f5565b60405180910390fd5b610aad848484840361085f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90611787565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990611819565b60405180910390fd5b610b9d83838361105b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1a906118ab565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d119190611235565b60405180910390a3610d24848484611060565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061193d565b60405180910390fd5b610da58260008361105b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906119cf565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ede9190611235565b60405180910390a3610ef283600084611060565b505050565b610eff610857565b73ffffffffffffffffffffffffffffffffffffffff16610f1d6105d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90611a3b565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61104d82611047610857565b83610a28565b6110578282610d2a565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561109f578082015181840152602081019050611084565b60008484015250505050565b6000601f19601f8301169050919050565b60006110c782611065565b6110d18185611070565b93506110e1818560208601611081565b6110ea816110ab565b840191505092915050565b6000602082019050818103600083015261110f81846110bc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111478261111c565b9050919050565b6111578161113c565b811461116257600080fd5b50565b6000813590506111748161114e565b92915050565b6000819050919050565b61118d8161117a565b811461119857600080fd5b50565b6000813590506111aa81611184565b92915050565b600080604083850312156111c7576111c6611117565b5b60006111d585828601611165565b92505060206111e68582860161119b565b9150509250929050565b60008115159050919050565b611205816111f0565b82525050565b600060208201905061122060008301846111fc565b92915050565b61122f8161117a565b82525050565b600060208201905061124a6000830184611226565b92915050565b60008060006060848603121561126957611268611117565b5b600061127786828701611165565b935050602061128886828701611165565b92505060406112998682870161119b565b9150509250925092565b600060ff82169050919050565b6112b9816112a3565b82525050565b60006020820190506112d460008301846112b0565b92915050565b6000602082840312156112f0576112ef611117565b5b60006112fe8482850161119b565b91505092915050565b60006020828403121561131d5761131c611117565b5b600061132b84828501611165565b91505092915050565b61133d8161113c565b82525050565b60006020820190506113586000830184611334565b92915050565b6000806040838503121561137557611374611117565b5b600061138385828601611165565b925050602061139485828601611165565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113e557607f821691505b6020821081036113f8576113f761139e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114388261117a565b91506114438361117a565b925082820190508082111561145b5761145a6113fe565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006114bd602583611070565b91506114c882611461565b604082019050919050565b600060208201905081810360008301526114ec816114b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061154f602683611070565b915061155a826114f3565b604082019050919050565b6000602082019050818103600083015261157e81611542565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006115e1602483611070565b91506115ec82611585565b604082019050919050565b60006020820190508181036000830152611610816115d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611673602283611070565b915061167e82611617565b604082019050919050565b600060208201905081810360008301526116a281611666565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006116df601d83611070565b91506116ea826116a9565b602082019050919050565b6000602082019050818103600083015261170e816116d2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611771602583611070565b915061177c82611715565b604082019050919050565b600060208201905081810360008301526117a081611764565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611803602383611070565b915061180e826117a7565b604082019050919050565b60006020820190508181036000830152611832816117f6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611895602683611070565b91506118a082611839565b604082019050919050565b600060208201905081810360008301526118c481611888565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611927602183611070565b9150611932826118cb565b604082019050919050565b600060208201905081810360008301526119568161191a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006119b9602283611070565b91506119c48261195d565b604082019050919050565b600060208201905081810360008301526119e8816119ac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a25602083611070565b9150611a30826119ef565b602082019050919050565b60006020820190508181036000830152611a5481611a18565b905091905056fea264697066735822122029fb9e3976dc34ea8c2335e8453d923920168f0fce0d170c0de7cdf7757ea4d564736f6c634300081c0033a264697066735822122003ef549fe9f08b32a444d1bcde97eff783a786f1092241eeb863fbfd63cd3dae64736f6c634300081c0033

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

    000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042cc8bef111e05f478cdd37950f1c06b0348184a0000000000000000000000009c1b8deb6d89a795bc2e45f86a9af6e034744774

    -----Decoded View---------------
    Arg [0] : _uniRouter (address): 0x0000000000000000000000000000000000000000
    Arg [1] : _bancorFormula (address): 0x42cc8bef111E05f478CDd37950F1c06B0348184a
    Arg [2] : _feeRecipient (address): 0x9C1B8Deb6d89A795Bc2e45F86A9Af6e034744774

    -----Encoded View---------------
    3 Constructor Arguments found :
    Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
    Arg [1] : 00000000000000000000000042cc8bef111e05f478cdd37950f1c06b0348184a
    Arg [2] : 0000000000000000000000009c1b8deb6d89a795bc2e45f86a9af6e034744774


    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

    A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.