Contract 0x7F249DBD212158e1ac449f0A37CA956C8186ac80

 

Contract Overview

Zapper.Fi: Balancer Add
Balance:
0 Ether

EtherValue:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value
0x498662cb0f3e0431c0e9123ab5d7fa27015b5f487b59e176286c481ed9050594Renounce Ownersh...126546852021-06-17 22:38:12471 days 10 hrs ago0xa0863436913b1b439ccaa6fbf89408116c1dde29 IN  Zapper.Fi: Balancer Add0 Ether0.000367113
0xa3a543636dbde558ca3642616cbdd2a997f00866ab418d0d832c7a3946050978Toggle Contract ...125006032021-05-25 1:34:42495 days 8 hrs ago0xa0863436913b1b439ccaa6fbf89408116c1dde29 IN  Zapper.Fi: Balancer Add0 Ether0.0011930845
0x4521b78dd0ec003a78c3b5fdfb02900355d3b928e554ee3ad97b4910c6faf0d8Zap In125004952021-05-25 1:10:47495 days 8 hrs ago0x63ddb0d7750aa11251330fea651e2a7fa1db53df IN  Zapper.Fi: Balancer Add10 Ether0.0069402851
0x6e93b67ad936cf7d7966a1a9d8b44436fe14471df40d07e521113ab66c6ea7e2Zap In125004262021-05-25 0:56:06495 days 8 hrs ago0x14b993eed8e8ff78195c7fda865ce6431ecaaeba IN  Zapper.Fi: Balancer Add7.5 Ether0.01588242
0x744a46495390bf9393885e827408d0a4d1d08edda1546d29af2a55d92c47bdb8Zap In125001972021-05-25 0:02:32495 days 9 hrs ago0xfdbce80f7b6ca1a01686aaa0fec27dc23864285d IN  Zapper.Fi: Balancer Add0.038155 Ether0.005579637
0x6076e345dc7d36c35ba5832980ef4ff7cbef9db97b0df31aef3488cf2e4876acZap In124999772021-05-24 23:12:24495 days 10 hrs ago0xab3971100eaf724c0cd523f3f3cc05ee3bf29c66 IN  Zapper.Fi: Balancer Add1.99 Ether0.0055582536
0x2d36bbdf1b1a811c4d809094f2ba5fbc2f02e5ea183e35b2b5f9449ca16692dbZap In124998252021-05-24 22:40:22495 days 10 hrs ago0x5e6e363eed7f6765a2165faa46cd53b3ab3e000f IN  Zapper.Fi: Balancer Add0.05 Ether0.0067854645
0xe1c52a4a88ce1d3f3c16eef94d41b39cca78459e8903849fc8b0c9d323695269Zap In124994032021-05-24 21:12:48495 days 12 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0 Ether0.0091609359.00000145
0x545fe2641eb47cbbf595e032ac919725b7167e7fde831b3ecb8597d7a2d47f78Zap In124985282021-05-24 18:02:44495 days 15 hrs ago0x1a34ca24ba989b784e48b1b17cd663e0cf178cc0 IN  Zapper.Fi: Balancer Add0 Ether0.0191870480
0xd3a0c73be8e729da7674e6a1e160ee565c5efad00b1c0efae15556f96ceb8879Zap In124969572021-05-24 12:20:44495 days 21 hrs ago0x27c94a942e2fc48547b5f8337db0a4b2aa892645 IN  Zapper.Fi: Balancer Add0 Ether0.0144645747
0x88278341615adc74f79e1567de3390df78aa62a17d4d0572a42225fa0dacbc7aZap In124956912021-05-24 7:34:28496 days 2 hrs ago0x63ddb0d7750aa11251330fea651e2a7fa1db53df IN  Zapper.Fi: Balancer Add10 Ether0.0070804552.03
0xd88b004ab68d4dd99638c9098165835b2a910fa8349d9c377ccbd12d80e2ecf0Zap In124956042021-05-24 7:13:15496 days 2 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0 Ether0.0068451748.8
0xc6f93312c85695d9a79ccabd0e452d42032e7812c555f65d2e28380a34f76dc8Zap In124949472021-05-24 4:40:13496 days 4 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0 Ether0.0074343153
0x6b8a0a3903073397b0c81466318efcfb6b38173c42de7b00f1e9e55f8abf92b9Zap In124946122021-05-24 3:26:00496 days 6 hrs agoENS Name *حمزہ.eth IN  Zapper.Fi: Balancer Add0 Ether0.0102951439
0xfae7f6ee64ef837cd52fda1443c43fd94d34a5bd23f89f7c432adc341290fe10Zap In124937972021-05-24 0:22:45496 days 9 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0 Ether0.010100372
0x5268d21c45eb97da9e1cd9c60777ffb8512375617df32df77bf1ea3dd825db90Zap In124923862021-05-23 19:09:39496 days 14 hrs ago0x79b56a1429a94e133ea30836b7bc298348f246a2 IN  Zapper.Fi: Balancer Add0 Ether0.0243780987.00000134
0x372fa09c0aecefc7b0a6b386e9414b40e54366e755459d4301f7b38228a6e0a3Zap In124923372021-05-23 18:59:03496 days 14 hrs ago0x79b56a1429a94e133ea30836b7bc298348f246a2 IN  Zapper.Fi: Balancer Add0 Ether0.0227868484
0x010849c14bbb5775794b8b4a704187fe1b6470863cfd8d149eaf6e503bd2c310Zap In124913332021-05-23 15:17:42496 days 18 hrs ago0xd89931d159a32516db452b157465935b4dde31a1 IN  Zapper.Fi: Balancer Add0 Ether0.01558162102
0xc7ca2856484d048881510ac0e6d681689f234da8524f333a0a59480c5e32be41Zap In124909102021-05-23 13:49:25496 days 19 hrs ago0x4c0b7c237ea8f6d1ee145587b68ef83cea0094a2 IN  Zapper.Fi: Balancer Add0 Ether0.05375078256
0x29aa1b2e549489af839468a9b9e450c48f0f9f9587bb115938adc24e3b9a86bdZap In124897012021-05-23 9:14:11497 days 23 mins agoENS Name chriscameronhann.eth IN  Zapper.Fi: Balancer Add0 Ether0.02556064160
0x2bef2280a70a893dc5dff7db4cabacf082fd4a11abc07723a9e9b4356b6977a3Zap In124892672021-05-23 7:32:59497 days 2 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0.08 Ether0.0060170445
0x9f66901e7a81d4221802c28faf1a864e5fb3ab38a4be1be662f7bcf471109bc8Zap In124890092021-05-23 6:35:35497 days 3 hrs ago0x98f9626154f44e3f30c112e9bb48b0678568b916 IN  Zapper.Fi: Balancer Add0 Ether0.0038772132.5125
0xb4b9d473a014721c44eb5ceb3c50a7271de060a38480aa43be51b881989f6f9eZap In124883692021-05-23 4:17:14497 days 5 hrs ago0x385bae68690c1b86e2f1ad75253d080c14fa6e16 IN  Zapper.Fi: Balancer Add0 Ether0.0066994633
0x91eaadea907092b467636e77f1e046103bb755b43974af7815a8ea9982f704abZap In124872942021-05-23 0:12:04497 days 9 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0.1 Ether0.0076215857
0x37f539cd36df6e76eb7975dc4fce93647c36c5352c957fad77a5fd939735054aZap In124861412021-05-22 20:03:18497 days 13 hrs ago0x088116a903b1546e011bde600f721da794240f80 IN  Zapper.Fi: Balancer Add0.1 Ether0.0076215857
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4521b78dd0ec003a78c3b5fdfb02900355d3b928e554ee3ad97b4910c6faf0d8125004952021-05-25 1:10:47495 days 8 hrs ago Zapper.Fi: Balancer Add Wrapped Ether10 Ether
0x6e93b67ad936cf7d7966a1a9d8b44436fe14471df40d07e521113ab66c6ea7e2125004262021-05-25 0:56:06495 days 8 hrs ago Zapper.Fi: Balancer Add 0x: Exchange Proxy7.5 Ether
0x744a46495390bf9393885e827408d0a4d1d08edda1546d29af2a55d92c47bdb8125001972021-05-25 0:02:32495 days 9 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.038155 Ether
0x6076e345dc7d36c35ba5832980ef4ff7cbef9db97b0df31aef3488cf2e4876ac124999772021-05-24 23:12:24495 days 10 hrs ago Zapper.Fi: Balancer Add Wrapped Ether1.99 Ether
0x2d36bbdf1b1a811c4d809094f2ba5fbc2f02e5ea183e35b2b5f9449ca16692db124998252021-05-24 22:40:22495 days 10 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.05 Ether
0x88278341615adc74f79e1567de3390df78aa62a17d4d0572a42225fa0dacbc7a124956912021-05-24 7:34:28496 days 2 hrs ago Zapper.Fi: Balancer Add Wrapped Ether10 Ether
0x2bef2280a70a893dc5dff7db4cabacf082fd4a11abc07723a9e9b4356b6977a3124892672021-05-23 7:32:59497 days 2 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.08 Ether
0x91eaadea907092b467636e77f1e046103bb755b43974af7815a8ea9982f704ab124872942021-05-23 0:12:04497 days 9 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.1 Ether
0x37f539cd36df6e76eb7975dc4fce93647c36c5352c957fad77a5fd939735054a124861412021-05-22 20:03:18497 days 13 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.1 Ether
0x6331817a01c182f91667017fbf5000fedc964383dc26471fefe38f5a3e43b127124760562021-05-21 6:21:26499 days 3 hrs ago Zapper.Fi: Balancer Add Wrapped Ether7 Ether
0x3279554eaf5c9ead4a98a37ffa0e9443112949dddcc1b521de8770a498650f77124721902021-05-20 15:49:20499 days 17 hrs ago Zapper.Fi: Balancer Add Wrapped Ether1 Ether
0x17f664cfe8c140ca1906dd69c0a16ec4a1e4e50c149d9b860f4d648f4e576de6124702992021-05-20 8:50:40500 days 46 mins ago Zapper.Fi: Balancer Add 0x: Exchange Proxy1 Ether
0xceff54c875b2321344f8c0430423c195b14b62cfd29bb89251b84a3bfe9328b1124691722021-05-20 4:46:39500 days 4 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.12 Ether
0x1c77c305049929f978c21f13161db763e1f8d4c3f2fc75510128b9bd325226ee124691702021-05-20 4:46:28500 days 4 hrs ago Zapper.Fi: Balancer Add Wrapped Ether2 Ether
0xe2480d8e862901476abced64e70b26cafdaa989da06da0c512324e382dc49b9e124687242021-05-20 3:10:18500 days 6 hrs ago Zapper.Fi: Balancer Add 0x: Exchange Proxy44 Ether
0x10cecdc40e509a006fe746f79ff2e5011acd364d7f57421f1dce047bc76d4628124663542021-05-19 18:12:42500 days 15 hrs ago Zapper.Fi: Balancer Add Wrapped Ether2 Ether
0x04453cf90dee3d1cfa98f4c0ac13d383b91c4fd28e050d74f643b991be555380124626122021-05-19 4:11:01501 days 5 hrs ago Zapper.Fi: Balancer Add Wrapped Ether6 Ether
0xf94c94a21fddb72aebc4b7f44507bc4ca8729dacc0c7cde9b5671df00546ff32124609382021-05-18 21:54:26501 days 11 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.1 Ether
0xdf6fc20659a86cadb2e00b29a63c7a8f8afdcbd8778fff2c6c031a085d0e5a46124522792021-05-17 13:56:28502 days 19 hrs ago Zapper.Fi: Balancer Add Wrapped Ether4.3 Ether
0xda9e8ea338edae481d4d594f3b9e169f1a08c187cba91a842ce644b80aa87a04124486302021-05-17 0:06:22503 days 9 hrs ago Zapper.Fi: Balancer Add Wrapped Ether2 Ether
0x9e05f20ec52109deab559c149f894cc50994d28d4a228af86a4a5086122b92ab124421302021-05-15 23:55:23504 days 9 hrs ago Zapper.Fi: Balancer Add Wrapped Ether0.9928 Ether
0x02b3ae65ae5c4a4f7660a1737b21fb04e574fbc80e2b2730d7a3466a3a2225f0124375692021-05-15 7:13:58505 days 2 hrs ago Zapper.Fi: Balancer Add Wrapped Ether7 Ether
0x2329256e545d3dee677a75990d4abefb91d738f3a942e56035f74cf40bb270dd124319412021-05-14 10:28:01505 days 23 hrs ago Zapper.Fi: Balancer Add Wrapped Ether3 Ether
0x56eedfbc4b4b0c2a519fdf24b4deda4488067289eecf65c11c97c34604513e20124317302021-05-14 9:37:26506 days ago Zapper.Fi: Balancer Add Wrapped Ether0.222 Ether
0x04456c30675efdd0e74f481b8913e159a3a2807f9119c71f9ebcec43d8defa4c124314032021-05-14 8:25:52506 days 1 hr ago Zapper.Fi: Balancer Add Wrapped Ether34.5 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Balancer_ZapIn_General_V2_6

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

// ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗
// ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║
// ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║
// ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║
// ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║
// ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝
// Copyright (C) 2020 zapper

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//

///@author Zapper
///@notice this contract adds liquidity to Balancer liquidity pools in one transaction

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.5.5;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account)
        internal
        pure
        returns (address payable)
    {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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
    );
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(
            value
        );
        callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            "SafeERC20: decreased allowance below zero"
        );
        callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ReentrancyGuard {
    bool private _notEntered;

    constructor() internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

interface IBFactory {
    function isBPool(address b) external view returns (bool);
}

interface IBPool {
    function joinswapExternAmountIn(
        address tokenIn,
        uint256 tokenAmountIn,
        uint256 minPoolAmountOut
    ) external payable returns (uint256 poolAmountOut);

    function isBound(address t) external view returns (bool);

    function getFinalTokens() external view returns (address[] memory tokens);

    function totalSupply() external view returns (uint256);

    function getDenormalizedWeight(address token)
        external
        view
        returns (uint256);

    function getTotalDenormalizedWeight() external view returns (uint256);

    function getSwapFee() external view returns (uint256);

    function calcPoolOutGivenSingleIn(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 poolSupply,
        uint256 totalWeight,
        uint256 tokenAmountIn,
        uint256 swapFee
    ) external pure returns (uint256 poolAmountOut);

    function getBalance(address token) external view returns (uint256);
}

contract Balancer_ZapIn_General_V2_6 is ReentrancyGuard, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;
    bool public stopped = false;
    uint16 public goodwill;

    IBFactory BalancerFactory = IBFactory(
        0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd
    );

    address payable
        public zgoodwillAddress = 0x3CE37278de6388532C3949ce4e886F365B14fB56;

    event Zapin(address userAddress, address balancerPool, uint256 LPTRec);

    constructor(uint16 _goodwill) public {
        goodwill = _goodwill;
    }

    // circuit breaker modifiers
    modifier stopInEmergency {
        if (stopped) {
            revert("Temporarily Paused");
        } else {
            _;
        }
    }

    /**
    @notice This function is used to invest in given balancer pool using ETH/ERC20 Tokens
    @param _FromTokenContractAddress The token used for investment (address(0x00) if ether)
    @param _ToBalancerPoolAddress The address of balancer pool to zapin
    @param _toTokenContractAddress The token with which we are adding liquidity
    @param _amount The amount of ERC to invest
    @param _minPoolTokens for slippage
    @param _allowanceTarget indiacates the spender for swap
    @param _swapTarget indicates the execution target for swap.
    @param swapCallData indicates the callData for execution
    @return quantity of Balancer pool tokens acquired
     */
    function ZapIn(
        address _FromTokenContractAddress,
        address _ToBalancerPoolAddress,
        address _toTokenContractAddress,
        uint256 _amount,
        uint256 _minPoolTokens,
        address _allowanceTarget,
        address _swapTarget,
        bytes calldata swapCallData
    ) external payable nonReentrant stopInEmergency returns (uint256 LPTRec) {
        require(
            BalancerFactory.isBPool(_ToBalancerPoolAddress),
            "Invalid Balancer Pool"
        );

        require(
            IBPool(_ToBalancerPoolAddress).isBound(_toTokenContractAddress),
            "Token not bound"
        );
        uint256 valueToSend;

        if (_FromTokenContractAddress == address(0)) {
            require(msg.value > 0, "ERR: No ETH sent");
            //transfer eth to goodwill
            uint256 goodwillPortion = _transferGoodwill(address(0), msg.value);
            valueToSend = msg.value.sub(goodwillPortion);
        } else {
            require(_amount > 0, "ERR: No ERC sent");
            require(msg.value == 0, "ERR: ETH sent with tokens");

            IERC20(_FromTokenContractAddress).safeTransferFrom(
                msg.sender,
                address(this),
                _amount
            );

            uint256 goodwillPortion = _transferGoodwill(
                _FromTokenContractAddress,
                _amount
            );
            valueToSend = _amount.sub(goodwillPortion);
        }

        LPTRec = _performZapIn(
            _FromTokenContractAddress,
            _ToBalancerPoolAddress,
            valueToSend,
            _toTokenContractAddress,
            _allowanceTarget,
            _swapTarget,
            swapCallData
        );

        require(LPTRec >= _minPoolTokens, "ERR: High Slippage");

        IERC20(_ToBalancerPoolAddress).safeTransfer(msg.sender, LPTRec);

        emit Zapin(msg.sender, _ToBalancerPoolAddress, LPTRec);

        return LPTRec;
    }

    /**
    @notice This function internally called by ZapIn() and EasyZapIn()
    @param _FromTokenContractAddress The token used for investment (address(0x00) if ether)
    @param _ToBalancerPoolAddress The address of balancer pool to zapin
    @param _amount The amount of ETH/ERC to invest
    @param _toTokenContractAddress The token with which we are adding liquidity
    @return Balancer pool tokens acquired
    **/
    function _performZapIn(
        address _FromTokenContractAddress,
        address _ToBalancerPoolAddress,
        uint256 _amount,
        address _toTokenContractAddress,
        address _allowanceTarget,
        address _swapTarget,
        bytes memory swapCallData
    ) internal returns (uint256 tokensBought) {
        // check if isBound()
        bool isBound = IBPool(_ToBalancerPoolAddress).isBound(
            _FromTokenContractAddress
        );

        uint256 balancerTokens;

        if (isBound) {
            balancerTokens = _enter2Balancer(
                _ToBalancerPoolAddress,
                _FromTokenContractAddress,
                _amount
            );
        } else {
            uint256 tokenBought = _fillQuote(
                _FromTokenContractAddress,
                _toTokenContractAddress,
                _amount,
                _allowanceTarget,
                _swapTarget,
                swapCallData
            );

            //get BPT
            balancerTokens = _enter2Balancer(
                _ToBalancerPoolAddress,
                _toTokenContractAddress,
                tokenBought
            );
        }

        return balancerTokens;
    }

    /**
    @notice this method is used to swap ETH/ERC20<>ERC20/ETH tokens
    @param _fromTokenAddress indicates the ETH/ERC20 token to zapIn with
    @param _bestPoolToken indicates the best pool token to which From tokens to swap
    @param _amount indicates the ETH/ERC20 amount to swap
    @param _allowanceTarget indiacates the spender for swap
    @param _swapTarget indicates the execution target for swap.
    @param swapCallData indicates the callData for execution
    @return amountBought tokens after 0x swap
    */
    function _fillQuote(
        address _fromTokenAddress,
        address _bestPoolToken,
        uint256 _amount,
        address _allowanceTarget,
        address _swapTarget,
        bytes memory swapCallData
    ) internal returns (uint256 amountBought) {
        uint256 valueToSend;

        if (_fromTokenAddress == address(0)) {
            valueToSend = _amount;
        } else {
            IERC20 fromToken = IERC20(_fromTokenAddress);

            require(
                fromToken.balanceOf(address(this)) >= _amount,
                "Insufficient Balance"
            );

            fromToken.safeApprove(address(_allowanceTarget), 0);
            fromToken.safeApprove(address(_allowanceTarget), _amount);
        }

        uint256 initialBalance = IERC20(_bestPoolToken).balanceOf(
            address(this)
        );

        (bool success, ) = _swapTarget.call.value(valueToSend)(swapCallData);
        require(success, "Error Swapping tokens");

        amountBought = IERC20(_bestPoolToken).balanceOf(address(this)).sub(
            initialBalance
        );

        require(amountBought > 0, "Swapped to Invalid Intermediate");
    }

    /**
    @notice This function is used to zapin to balancer pool
    @param _ToBalancerPoolAddress The address of balancer pool to zap in
    @param _FromTokenContractAddress The token used to zap in
    @param tokens2Trade The amount of tokens to invest
    @return The quantity of Balancer Pool tokens returned
     */
    function _enter2Balancer(
        address _ToBalancerPoolAddress,
        address _FromTokenContractAddress,
        uint256 tokens2Trade
    ) internal returns (uint256 poolTokensOut) {
        require(
            IBPool(_ToBalancerPoolAddress).isBound(_FromTokenContractAddress),
            "Token not bound"
        );

        uint256 allowance = IERC20(_FromTokenContractAddress).allowance(
            address(this),
            _ToBalancerPoolAddress
        );

        if (allowance < tokens2Trade) {
            IERC20(_FromTokenContractAddress).safeApprove(
                _ToBalancerPoolAddress,
                tokens2Trade
            );
        }

        poolTokensOut = IBPool(_ToBalancerPoolAddress).joinswapExternAmountIn(
            _FromTokenContractAddress,
            tokens2Trade,
            1
        );

        require(poolTokensOut > 0, "Error in entering balancer pool");
    }

    /**
    @notice This function is used to calculate and transfer goodwill
    @param _tokenContractAddress Token in which goodwill is deducted
    @param tokens2Trade The total amount of tokens to be zapped in
    @return The quantity of goodwill deducted
     */

    function _transferGoodwill(
        address _tokenContractAddress,
        uint256 tokens2Trade
    ) internal returns (uint256 goodwillPortion) {
        if (goodwill == 0) {
            return 0;
        }
        goodwillPortion = SafeMath.div(
            SafeMath.mul(tokens2Trade, goodwill),
            10000
        );

        if (_tokenContractAddress == address(0)) {
            Address.sendValue(zgoodwillAddress, goodwillPortion);
        } else {
            IERC20(_tokenContractAddress).safeTransfer(
                zgoodwillAddress,
                goodwillPortion
            );
        }
    }

    function set_new_goodwill(uint16 _new_goodwill) public onlyOwner {
        require(
            _new_goodwill >= 0 && _new_goodwill < 10000,
            "GoodWill Value not allowed"
        );
        goodwill = _new_goodwill;
    }

    function set_new_zgoodwillAddress(address payable _new_zgoodwillAddress)
        public
        onlyOwner
    {
        zgoodwillAddress = _new_zgoodwillAddress;
    }

    function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner {
        uint256 qty = _TokenAddress.balanceOf(address(this));
        IERC20(address(_TokenAddress)).safeTransfer(owner(), qty);
    }

    // - to Pause the contract
    function toggleContractActive() public onlyOwner {
        stopped = !stopped;
    }

    // - to withdraw any ETH balance sitting in the contract
    function withdraw() public onlyOwner {
        uint256 contractBalance = address(this).balance;
        address payable _to = owner().toPayable();
        _to.transfer(contractBalance);
    }

    function() external payable {
        require(msg.sender != tx.origin, "Do not send ETH directly");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address","name":"balancerPool","type":"address"},{"indexed":false,"internalType":"uint256","name":"LPTRec","type":"uint256"}],"name":"Zapin","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"address","name":"_toTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minPoolTokens","type":"uint256"},{"internalType":"address","name":"_allowanceTarget","type":"address"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"swapCallData","type":"bytes"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"LPTRec","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_new_zgoodwillAddress","type":"address"}],"name":"set_new_zgoodwillAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"zgoodwillAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526000805460ff60a81b19169055600180546001600160a01b0319908116739424b1412450d0f8fc2255faf6046b98213b76bd1790915560028054909116733ce37278de6388532c3949ce4e886f365b14fb5617905534801561006557600080fd5b50604051611d49380380611d498339818101604052602081101561008857600080fd5b50516000805460ff191660011781556100a86001600160e01b0361011f16565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805461ffff909216600160b01b0261ffff60b01b19909216919091179055610123565b3390565b611c17806101326000396000f3fe6080604052600436106100c25760003560e01c806375f12b211161007f5780638da5cb5b116100595780638da5cb5b146103045780638f32d59b14610319578063b10e1dbc1461032e578063f2fde38b1461035c576100c2565b806375f12b21146101e85780637810bf19146102115780638286e89a14610244576100c2565b80631385d24c146101195780632810c14e1461012e5780633ccfd60b1461015f578063551196d5146101745780635de0398e146101a7578063715018a6146101d3575b33321415610117576040805162461bcd60e51b815260206004820152601860248201527f446f206e6f742073656e6420455448206469726563746c790000000000000000604482015290519081900360640190fd5b005b34801561012557600080fd5b5061011761038f565b34801561013a57600080fd5b506101436103f7565b604080516001600160a01b039092168252519081900360200190f35b34801561016b57600080fd5b50610117610406565b34801561018057600080fd5b506101176004803603602081101561019757600080fd5b50356001600160a01b03166104a7565b3480156101b357600080fd5b506101bc61058c565b6040805161ffff9092168252519081900360200190f35b3480156101df57600080fd5b5061011761059d565b3480156101f457600080fd5b506101fd610633565b604080519115158252519081900360200190f35b34801561021d57600080fd5b506101176004803603602081101561023457600080fd5b50356001600160a01b0316610643565b6102f2600480360361010081101561025b57600080fd5b6001600160a01b0382358116926020810135821692604082013583169260608301359260808101359260a082013583169260c0830135169190810190610100810160e08201356401000000008111156102b357600080fd5b8201836020820111156102c557600080fd5b803590602001918460018302840111640100000000831117156102e757600080fd5b5090925090506106ac565b60408051918252519081900360200190f35b34801561031057600080fd5b50610143610b4d565b34801561032557600080fd5b506101fd610b61565b34801561033a57600080fd5b506101176004803603602081101561035157600080fd5b503561ffff16610b8a565b34801561036857600080fd5b506101176004803603602081101561037f57600080fd5b50356001600160a01b0316610c4d565b610397610b61565b6103d6576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6002546001600160a01b031681565b61040e610b61565b61044d576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b47600061046961045b610b4d565b6001600160a01b0316610ca0565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156104a2573d6000803e3d6000fd5b505050565b6104af610b61565b6104ee576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561053857600080fd5b505afa15801561054c573d6000803e3d6000fd5b505050506040513d602081101561056257600080fd5b50519050610588610571610b4d565b6001600160a01b038416908363ffffffff610ca316565b5050565b600054600160b01b900461ffff1681565b6105a5610b61565b6105e4576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b61064b610b61565b61068a576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000805460ff16610704576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610761576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b6001546040805163615db6e160e11b81526001600160a01b038c811660048301529151919092169163c2bb6dc2916024808301926020929190829003018186803b1580156107ae57600080fd5b505afa1580156107c2573d6000803e3d6000fd5b505050506040513d60208110156107d857600080fd5b5051610823576040805162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590810985b185b98d95c88141bdbdb605a1b604482015290519081900360640190fd5b886001600160a01b0316632f37b624896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b50516108e8576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08189bdd5b99608a1b604482015290519081900360640190fd5b60006001600160a01b038b166109675760003411610940576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b600061094d600034610cf5565b905061095f348263ffffffff610d8616565b915050610a3f565b600088116109af576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610a02576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b610a1d6001600160a01b038c1633308b63ffffffff610dcf16565b6000610a298c8a610cf5565b9050610a3b898263ffffffff610d8616565b9150505b610a848b8b838c8a8a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e2f92505050565b915086821015610ad0576040805162461bcd60e51b81526020600482015260126024820152714552523a204869676820536c69707061676560701b604482015290519081900360640190fd5b610aea6001600160a01b038b16338463ffffffff610ca316565b604080513381526001600160a01b038c16602082015280820184905290517f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f9181900360600190a1506000805460ff191660011790559998505050505050505050565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610b7b610efe565b6001600160a01b031614905090565b610b92610b61565b610bd1576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b6127108161ffff1610610c2b576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b610c55610b61565b610c94576040805162461bcd60e51b81526020600482018190526024820152600080516020611b63833981519152604482015290519081900360640190fd5b610c9d81610f02565b50565b90565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526104a2908490610fad565b60008054600160b01b900461ffff16610d1057506000610d80565b600054610d3590610d2d908490600160b01b900461ffff16611165565b6127106111be565b90506001600160a01b038316610d6057600254610d5b906001600160a01b031682611200565b610d80565b600254610d80906001600160a01b0385811691168363ffffffff610ca316565b92915050565b6000610dc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112e5565b9392505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610e29908590610fad565b50505050565b600080876001600160a01b0316632f37b6248a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610e8857600080fd5b505afa158015610e9c573d6000803e3d6000fd5b505050506040513d6020811015610eb257600080fd5b5051905060008115610ed057610ec9898b8a61137c565b9050610ef1565b6000610ee08b898b8a8a8a6115c6565b9050610eed8a898361137c565b9150505b9998505050505050505050565b3390565b6001600160a01b038116610f475760405162461bcd60e51b8152600401808060200182810382526026815260200180611ae26026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610fbf826001600160a01b031661192d565b611010576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061104e5780518252601f19909201916020918201910161102f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146110b0576040519150601f19603f3d011682016040523d82523d6000602084013e6110b5565b606091505b50915091508161110c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610e295780806020019051602081101561112857600080fd5b5051610e295760405162461bcd60e51b815260040180806020018281038252602a815260200180611b83602a913960400191505060405180910390fd5b60008261117457506000610d80565b8282028284828161118157fe5b0414610dc85760405162461bcd60e51b8152600401808060200182810382526021815260200180611b426021913960400191505060405180910390fd5b6000610dc883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611969565b80471015611255576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146112a0576040519150601f19603f3d011682016040523d82523d6000602084013e6112a5565b606091505b50509050806104a25760405162461bcd60e51b815260040180806020018281038252603a815260200180611b08603a913960400191505060405180910390fd5b600081848411156113745760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611339578181015183820152602001611321565b50505050905090810190601f1680156113665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000836001600160a01b0316632f37b624846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d60208110156113fe57600080fd5b5051611443576040805162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08189bdd5b99608a1b604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038681166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561149457600080fd5b505afa1580156114a8573d6000803e3d6000fd5b505050506040513d60208110156114be57600080fd5b50519050828110156114e4576114e46001600160a01b038516868563ffffffff6119ce16565b60408051635db3427760e01b81526001600160a01b0386811660048301526024820186905260016044830152915191871691635db34277916064808201926020929091908290030181600087803b15801561153e57600080fd5b505af1158015611552573d6000803e3d6000fd5b505050506040513d602081101561156857600080fd5b50519150816115be576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b509392505050565b6000806001600160a01b0388166115de5750846116d5565b604080516370a0823160e01b81523060048201529051899188916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561162857600080fd5b505afa15801561163c573d6000803e3d6000fd5b505050506040513d602081101561165257600080fd5b5051101561169e576040805162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b604482015290519081900360640190fd5b6116b96001600160a01b03821687600063ffffffff6119ce16565b6116d36001600160a01b038216878963ffffffff6119ce16565b505b604080516370a0823160e01b815230600482015290516000916001600160a01b038a16916370a0823191602480820192602092909190829003018186803b15801561171f57600080fd5b505afa158015611733573d6000803e3d6000fd5b505050506040513d602081101561174957600080fd5b505160405185519192506000916001600160a01b038816918591889190819060208401908083835b602083106117905780518252601f199092019160209182019101611771565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146117f2576040519150601f19603f3d011682016040523d82523d6000602084013e6117f7565b606091505b5050905080611845576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720746f6b656e7360581b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516118c99184916001600160a01b038d16916370a08231916024808301926020929190829003018186803b15801561189157600080fd5b505afa1580156118a5573d6000803e3d6000fd5b505050506040513d60208110156118bb57600080fd5b50519063ffffffff610d8616565b935060008411611920576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b5050509695505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061196157508115155b949350505050565b600081836119b85760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611339578181015183820152602001611321565b5060008385816119c457fe5b0495945050505050565b801580611a54575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d6020811015611a5057600080fd5b5051155b611a8f5760405162461bcd60e51b8152600401808060200182810382526036815260200180611bad6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526104a2908490610fad56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820e9dabadefedf6f426043b9af6d42ebea8de3ed335be3a06d5c55df8cd790fa1464736f6c634300051100320000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

21787:10269:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31993:10;32007:9;31993:23;;31985:60;;;;;-1:-1:-1;;;31985:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21787:10269;31587:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31587:86:0;;;:::i;22128:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22128:93:0;;;:::i;:::-;;;;-1:-1:-1;;;;;22128:93:0;;;;;;;;;;;;;;31743:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31743:195:0;;;:::i;31339:208::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31339:208:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31339:208:0;-1:-1:-1;;;;;31339:208:0;;:::i;21991:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21991:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18506:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18506:140:0;;;:::i;21957:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21957:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;31159:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31159:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31159:172:0;-1:-1:-1;;;;;31159:172:0;;:::i;23267:2015::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;23267:2015:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23267:2015:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23267:2015:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;23267:2015:0;;-1:-1:-1;23267:2015:0;-1:-1:-1;23267:2015:0;:::i;:::-;;;;;;;;;;;;;;;;17695:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17695:79:0;;;:::i;18061:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18061:94:0;;;:::i;30913:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30913:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30913:238:0;;;;:::i;18801:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18801:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18801:109:0;-1:-1:-1;;;;;18801:109:0;;:::i;31587:86::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;31658:7;;;-1:-1:-1;;;;31647:18:0;;-1:-1:-1;;;31658:7:0;;;;;;31657:8;31647:18;;;;;;31587:86::o;22128:93::-;;;-1:-1:-1;;;;;22128:93:0;;:::o;31743:195::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;31817:21;31791:23;31871:19;:7;:5;:7::i;:::-;-1:-1:-1;;;;;31871:17:0;;:19::i;:::-;31901:29;;31849:41;;-1:-1:-1;;;;;;31901:12:0;;;:29;;;;;31914:15;;31901:29;;;;31914:15;31901:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31901:29:0;17964:1;;31743:195::o;31339:208::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;31433:38;;;-1:-1:-1;;;31433:38:0;;31465:4;31433:38;;;;;;31419:11;;-1:-1:-1;;;;;31433:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;31433:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31433:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31433:38:0;;-1:-1:-1;31482:57:0;31526:7;:5;:7::i;:::-;-1:-1:-1;;;;;31482:43:0;;;31535:3;31482:57;:43;:57;:::i;:::-;17964:1;31339:208;:::o;21991:22::-;;;-1:-1:-1;;;21991:22:0;;;;;:::o;18506:140::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;18605:1;18589:6;;18568:40;;18589:6;;;;-1:-1:-1;;;;;18589:6:0;;18568:40;;18605:1;;18568:40;18636:1;18619:19;;-1:-1:-1;;;;;;18619:19:0;;;18506:140::o;21957:27::-;;;-1:-1:-1;;;21957:27:0;;;;;:::o;31159:172::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;31283:16;:40;;-1:-1:-1;;;;;;31283:40:0;-1:-1:-1;;;;;31283:40:0;;;;;;;;;;31159:172::o;23267:2015::-;23633:14;20331:11;;;;20323:55;;;;;-1:-1:-1;;;20323:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20470:5;20456:19;;-1:-1:-1;;20456:19:0;;;;;-1:-1:-1;;;22467:7:0;;20456:19;22467:7;22463:102;;;22491:28;;;-1:-1:-1;;;22491:28:0;;;;;;;;;;;;-1:-1:-1;;;22491:28:0;;;;;;;;;;;;;;22463:102;23682:15;;:47;;;-1:-1:-1;;;23682:47:0;;-1:-1:-1;;;;;23682:47:0;;;;;;;;;:15;;;;;:23;;:47;;;;;;;;;;;;;;:15;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;23682:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23682:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23682:47:0;23660:118;;;;;-1:-1:-1;;;23660:118:0;;;;;;;;;;;;-1:-1:-1;;;23660:118:0;;;;;;;;;;;;;;;23820:22;-1:-1:-1;;;;;23813:38:0;;23852:23;23813:63;;;;;;;;;;;;;-1:-1:-1;;;;;23813:63:0;-1:-1:-1;;;;;23813:63:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23813:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23813:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23813:63:0;23791:128;;;;;-1:-1:-1;;;23791:128:0;;;;;;;;;;;;-1:-1:-1;;;23791:128:0;;;;;;;;;;;;;;;23930:19;-1:-1:-1;;;;;23966:39:0;;23962:805;;24042:1;24030:9;:13;24022:42;;;;;-1:-1:-1;;;24022:42:0;;;;;;;;;;;;-1:-1:-1;;;24022:42:0;;;;;;;;;;;;;;;24119:23;24145:40;24171:1;24175:9;24145:17;:40::i;:::-;24119:66;-1:-1:-1;24214:30:0;:9;24119:66;24214:30;:13;:30;:::i;:::-;24200:44;;23962:805;;;;24295:1;24285:7;:11;24277:40;;;;;-1:-1:-1;;;24277:40:0;;;;;;;;;;;;-1:-1:-1;;;24277:40:0;;;;;;;;;;;;;;;24340:9;:14;24332:52;;;;;-1:-1:-1;;;24332:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24401:152;-1:-1:-1;;;;;24401:50:0;;24470:10;24507:4;24531:7;24401:152;:50;:152;:::i;:::-;24570:23;24596:102;24632:25;24676:7;24596:17;:102::i;:::-;24570:128;-1:-1:-1;24727:28:0;:7;24570:128;24727:28;:11;:28;:::i;:::-;24713:42;;23962:805;;24788:249;24816:25;24856:22;24893:11;24919:23;24957:16;24988:11;25014:12;;24788:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;24788:13:0;;-1:-1:-1;;;24788:249:0:i;:::-;24779:258;;25068:14;25058:6;:24;;25050:55;;;;;-1:-1:-1;;;25050:55:0;;;;;;;;;;;;-1:-1:-1;;;25050:55:0;;;;;;;;;;;;;;;25118:63;-1:-1:-1;;;;;25118:43:0;;25162:10;25174:6;25118:63;:43;:63;:::i;:::-;25199:49;;;25205:10;25199:49;;-1:-1:-1;;;;;25199:49:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20636:11:0;:18;;-1:-1:-1;;20636:18:0;20650:4;20636:18;;;23267:2015;;-1:-1:-1;;;;;;;;;23267:2015:0:o;17695:79::-;17733:7;17760:6;;;;-1:-1:-1;;;;;17760:6:0;;17695:79::o;18061:94::-;18101:4;18141:6;;;;;-1:-1:-1;;;;;18141:6:0;18125:12;:10;:12::i;:::-;-1:-1:-1;;;;;18125:22:0;;18118:29;;18061:94;:::o;30913:238::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;31049:5;31033:13;:21;;;30989:119;;;;;-1:-1:-1;;;30989:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31119:8;:24;;;;;;-1:-1:-1;;;31119:24:0;-1:-1:-1;;;;31119:24:0;;;;;;;;;30913:238::o;18801:109::-;17907:9;:7;:9::i;:::-;17899:54;;;;;-1:-1:-1;;;17899:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17899:54:0;;;;;;;;;;;;;;;18874:28;18893:8;18874:18;:28::i;:::-;18801:109;:::o;8338:159::-;8480:7;8338:159::o;12770:247::-;12940:58;;;-1:-1:-1;;;;;12940:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12940:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12887:122:0;;12920:5;;12887:18;:122::i;30271:634::-;30394:23;30434:8;;-1:-1:-1;;;30434:8:0;;;;30430:54;;-1:-1:-1;30471:1:0;30464:8;;30430:54;30566:8;;30512:94;;30539:36;;30552:12;;-1:-1:-1;;;30566:8:0;;;;30539:12;:36::i;:::-;30590:5;30512:12;:94::i;:::-;30494:112;-1:-1:-1;;;;;;30623:35:0;;30619:279;;30693:16;;30675:52;;-1:-1:-1;;;;;30693:16:0;30711:15;30675:17;:52::i;:::-;30619:279;;;30821:16;;30760:126;;-1:-1:-1;;;;;30760:42:0;;;;30821:16;30856:15;30760:126;:42;:126;:::i;:::-;30271:634;;;;:::o;2609:136::-;2667:7;2694:43;2698:1;2701;2694:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2687:50;2609:136;-1:-1:-1;;;2609:136:0:o;13025:284::-;13222:68;;;-1:-1:-1;;;;;13222:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13222:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13169:132:0;;13202:5;;13169:18;:132::i;:::-;13025:284;;;;:::o;25722:1245::-;26024:20;26088:12;26110:22;-1:-1:-1;;;;;26103:38:0;;26156:25;26103:89;;;;;;;;;;;;;-1:-1:-1;;;;;26103:89:0;-1:-1:-1;;;;;26103:89:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26103:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26103:89:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26103:89:0;;-1:-1:-1;26205:22:0;26240:686;;;;26285:141;26319:22;26360:25;26404:7;26285:15;:141::i;:::-;26268:158;;26240:686;;;26459:19;26481:233;26510:25;26554:23;26596:7;26622:16;26657:11;26687:12;26481:10;:233::i;:::-;26459:255;;26771:143;26805:22;26846:23;26888:11;26771:15;:143::i;:::-;26754:160;;26240:686;;26945:14;25722:1245;-1:-1:-1;;;;;;;;;25722:1245:0:o;16832:98::-;16912:10;16832:98;:::o;19016:266::-;-1:-1:-1;;;;;19104:22:0;;19082:110;;;;-1:-1:-1;;;19082:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19229:6;;;19208:38;;-1:-1:-1;;;;;19208:38:0;;;;19229:6;;;;;;19208:38;;;19257:6;:17;;-1:-1:-1;;;;;19257:17:0;;;;;-1:-1:-1;;;;;;19257:17:0;;;;;;;;;19016:266::o;15380:1176::-;15984:27;15992:5;-1:-1:-1;;;;;15984:25:0;;:27::i;:::-;15976:71;;;;;-1:-1:-1;;;15976:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16121:12;16135:23;16170:5;-1:-1:-1;;;;;16162:19:0;16182:4;16162:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16162:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;16120:67:0;;;;16206:7;16198:52;;;;;-1:-1:-1;;;16198:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16267:17;;:21;16263:286;;16440:10;16429:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16429:30:0;16403:134;;;;-1:-1:-1;;;16403:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3559:471;3617:7;3862:6;3858:47;;-1:-1:-1;3892:1:0;3885:8;;3858:47;3929:5;;;3933:1;3929;:5;:1;3953:5;;;;;:10;3945:56;;;;-1:-1:-1;;;3945:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4498:132;4556:7;4583:39;4587:1;4590;4583:39;;;;;;;;;;;;;;;;;:3;:39::i;9474:445::-;9603:6;9578:21;:31;;9556:110;;;;;-1:-1:-1;;;9556:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9753:32;;9735:12;;-1:-1:-1;;;;;9753:14:0;;;9774:6;;9735:12;9753:32;9735:12;9753:32;9774:6;9753:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9734:51:0;;;9818:7;9796:115;;;;-1:-1:-1;;;9796:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3082:226;3202:7;3238:12;3230:6;;;;3222:29;;;;-1:-1:-1;;;3222:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3222:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3274:5:0;;;3082:226::o;29047:941::-;29213:21;29276:22;-1:-1:-1;;;;;29269:38:0;;29308:25;29269:65;;;;;;;;;;;;;-1:-1:-1;;;;;29269:65:0;-1:-1:-1;;;;;29269:65:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29269:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29269:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29269:65:0;29247:130;;;;;-1:-1:-1;;;29247:130:0;;;;;;;;;;;;-1:-1:-1;;;29247:130:0;;;;;;;;;;;;;;;29410:119;;;-1:-1:-1;;;29410:119:0;;29476:4;29410:119;;;;-1:-1:-1;;;;;29410:119:0;;;;;;;;;29390:17;;29410:43;;;;;:119;;;;;;;;;;;;;;:43;:119;;;5:2:-1;;;;30:1;27;20:12;5:2;29410:119:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29410:119:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29410:119:0;;-1:-1:-1;29546:24:0;;;29542:189;;;29587:132;-1:-1:-1;;;;;29587:45:0;;29651:22;29692:12;29587:132;:45;:132;:::i;:::-;29759:147;;;-1:-1:-1;;;29759:147:0;;-1:-1:-1;;;;;29759:147:0;;;;;;;;;;;;;29894:1;29759:147;;;;;;:53;;;;;;:147;;;;;;;;;;;;;;;-1:-1:-1;29759:53:0;:147;;;5:2:-1;;;;30:1;27;20:12;5:2;29759:147:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29759:147:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29759:147:0;;-1:-1:-1;29927:17:0;29919:61;;;;;-1:-1:-1;;;29919:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29047:941;;;;;;:::o;27515:1193::-;27756:20;;-1:-1:-1;;;;;27825:31:0;;27821:446;;-1:-1:-1;27887:7:0;27821:446;;;28014:34;;;-1:-1:-1;;;28014:34:0;;28042:4;28014:34;;;;;;27953:17;;28052:7;;-1:-1:-1;;;;;28014:19:0;;;;;:34;;;;;;;;;;;;;;:19;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;28014:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28014:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28014:34:0;:45;;27988:127;;;;;-1:-1:-1;;;27988:127:0;;;;;;;;;;;;-1:-1:-1;;;27988:127:0;;;;;;;;;;;;;;;28132:51;-1:-1:-1;;;;;28132:21:0;;28162:16;28181:1;28132:51;:21;:51;:::i;:::-;28198:57;-1:-1:-1;;;;;28198:21:0;;28228:16;28247:7;28198:57;:21;:57;:::i;:::-;27821:446;;28304:71;;;-1:-1:-1;;;28304:71:0;;28359:4;28304:71;;;;;;28279:22;;-1:-1:-1;;;;;28304:32:0;;;;;:71;;;;;;;;;;;;;;;:32;:71;;;5:2:-1;;;;30:1;27;20:12;5:2;28304:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28304:71:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28304:71:0;28407:49;;;;28304:71;;-1:-1:-1;28389:12:0;;-1:-1:-1;;;;;28407:16:0;;;28430:11;;28443:12;;28407:49;;;28304:71;28407:49;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28407:49:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;28388:68:0;;;28475:7;28467:41;;;;;-1:-1:-1;;;28467:41:0;;;;;;;;;;;;-1:-1:-1;;;28467:41:0;;;;;;;;;;;;;;;28536:47;;;-1:-1:-1;;;28536:47:0;;28577:4;28536:47;;;;;;:91;;28602:14;;-1:-1:-1;;;;;28536:32:0;;;;;:47;;;;;;;;;;;;;;:32;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;28536:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28536:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28536:47:0;;:91;:51;:91;:::i;:::-;28521:106;;28663:1;28648:12;:16;28640:60;;;;;-1:-1:-1;;;28640:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27515:1193;;;;;;;;;;;:::o;7462:659::-;7522:4;8021:20;;7851:66;8070:23;;;;;;:42;;-1:-1:-1;8097:15:0;;;8070:42;8062:51;7462:659;-1:-1:-1;;;;7462:659:0:o;5160:379::-;5280:7;5382:12;5375:5;5367:28;;;;-1:-1:-1;;;5367:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5367:28:0;;5406:9;5422:1;5418;:5;;;;;;;5160:379;-1:-1:-1;;;;;5160:379:0:o;13317:706::-;13735:10;;;13734:62;;-1:-1:-1;13751:39:0;;;-1:-1:-1;;;13751:39:0;;13775:4;13751:39;;;;-1:-1:-1;;;;;13751:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;13751:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13751:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13751:39:0;:44;13734:62;13712:166;;;;-1:-1:-1;;;13712:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13942:62;;;-1:-1:-1;;;;;13942:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13942:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13889:126:0;;13922:5;;13889:18;:126::i

Swarm Source

bzzr://e9dabadefedf6f426043b9af6d42ebea8de3ed335be3a06d5c55df8cd790fa14
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.