Contract 0x9154c2684aef8d106babcb19aa81d4fabf7581ec

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xfeccbe9e202e1489a6e6c5547c608ce30c139a4de2b9a1aa4622dccf042986f383347892021-06-16 2:25:5411 mins ago0x11c232d2e6d17b84f436eba4dd186a07d2a7d137 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00051304
0x9b5859b737322380f0e51a18c87b852d5f44c97189b1b6b28251ee9ed0e55a1583327672021-06-16 0:43:491 hr 53 mins ago0x768486950737ffe51d46de820e29a5f2b65b12b0 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0x8cbbab1a0133548bb25cc16944b5057f926fd903dbd69a601d45879d8182c83683300792021-06-15 22:28:394 hrs 8 mins ago0xc4156b0617cff62316955710b0a418f4b260c793 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00043804
0x6c793fa570134482f1c2c5d77a027dff83fafd36037cbcb875d434031536943b83292722021-06-15 21:48:084 hrs 49 mins ago0xa378258f6bec14606dcdd350f04720f19b88b116 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0x6e5b5f381007f50e0374cd94d7e4d6153ca7c82223e6487342268ec828a02f2f83234772021-06-15 16:56:269 hrs 40 mins ago0xfb9da6837b316365c983d8a050312481a8f67410 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031458
0x9a8e927d6b9c63c3cd12a0f3ee56feda230baf2a27f1bbfd8b0d285550921a3083178012021-06-15 12:06:2614 hrs 30 mins ago0x9115bbac621c20e6728bf7b43b98ea26ee262bf2 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116975
0x9317d9b70ed8eabfc8eea54f28bf399216e85fab829f37d9c809a300e9b38f0f83143152021-06-15 9:07:4917 hrs 29 mins ago0x6a786ee9173f89d8f2906da5e2ba364e7256f25b IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00023952
0x45d25ac664decf2b41cb33814978b2f653168cb642c1a03ff132e56018ed1c8e83128612021-06-15 7:54:0718 hrs 43 mins ago0x77b8f19f1df44140e076a64ee36ac0a0b3d8c9ba IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116975
0x4c6f32b2922cf0bc20f5b9dff0b16398a4693c30d62d5514e5a907cc0ed671ea83091812021-06-15 4:47:2121 hrs 49 mins ago0x9115bbac621c20e6728bf7b43b98ea26ee262bf2 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.0004381
0xa87fdf14d183bccb1df111bf1c1273bc6ded7425ab936153a953e0d46f9857fa83004872021-06-14 21:25:591 day 5 hrs ago0xe96681b5d42e9d0425b49caf89732f65020671cc IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031458
0x774e7e8ea5ccb6806b165f553c86f8b3a83f94fa64903123ee209b65a6461ed883001532021-06-14 21:09:141 day 5 hrs ago0x77b8f19f1df44140e076a64ee36ac0a0b3d8c9ba IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116975
0x6576411d45b7886fb023356d8a1ba8634e5d08e178536c605456e43a80a7845282975522021-06-14 18:57:201 day 7 hrs ago0x46c97a0764259102b14ee3a52c3850a15b6797cd IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031446
0x8246b8dfeed4543a6444624ff1b20798a5c4fb211db02bbebc61ae33e707371b82943362021-06-14 16:15:501 day 10 hrs ago0x768486950737ffe51d46de820e29a5f2b65b12b0 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0x4d8c1358fe5fac2f5172b6e4f01400147416b0d7010d2db9dfb463057b5ebf1c82939992021-06-14 15:58:591 day 10 hrs ago0xd1ca769d12392d329e08fb651b33b2539b85dfd1 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116975
0x2ed9ba319e1dc5f619091c8960ea7df6c4d37d44488964779806645df53de39082903812021-06-14 12:57:261 day 13 hrs ago0x1f723d4c5382805328e74c5e882a8d3f5a04f589 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031458
0xba179d6a8f8183164d245ccd40c8b77fff5d7ca31c0972bb9fbd05c22304fb8f82881282021-06-14 11:03:221 day 15 hrs ago0xd1250ecb85eaa3818f653ddc6fdbdb1601d76ff2 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031458
0xbb1d5f383c6a4f765c106a9fa08613608198ad250c59509157697eb599ca652982864962021-06-14 9:41:261 day 16 hrs ago0x9b452f8f00879a9568935af363387b2bafb6aee4 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00031452
0x0d12ee0ed11ca002ec31b2e537103b119a11538578de15f1420ea4fea3d0443982853162021-06-14 8:40:101 day 17 hrs ago0x6016988a5e542acb90dc17e68767eafdbb86da3f IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.0005131
0xa9d13b59b6266cbd82192ddc14e5d9230d6461547b7abe230a97bef75a5c928c82818982021-06-14 5:47:121 day 20 hrs ago0xcc8e077865d35b56ec35e4271c8717e52609c5b9 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.00023952
0xc2ca23af46e07f7a722e964aa13929c85ea8d8767b9cf6dc86f7439836e8e35c82806902021-06-14 4:46:021 day 21 hrs ago0x768486950737ffe51d46de820e29a5f2b65b12b0 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0xd07d44defad0977c892dd804547732ba0f28717ee480daf516e22d8163ad937f82806522021-06-14 4:44:081 day 21 hrs ago0x768486950737ffe51d46de820e29a5f2b65b12b0 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0xcf47e957d1fc79c9460e9e161eb07ece8b7d0e5c5ea9a1bba7021a7af9823fde82806272021-06-14 4:42:531 day 21 hrs ago0x768486950737ffe51d46de820e29a5f2b65b12b0 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0xc94970331a9db1c730d781bc92e843e9573b7bdbe432d498b0a633fc0f89cfd282794182021-06-14 3:41:291 day 22 hrs ago0xbd91efe3c3078cdb2b298cefe246b6e928d51160 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116915
0xb81275e2baa9c9ca661fd6816e785bd33e8713a7b6eb1695e0fdd0b87ff8a78982709062021-06-13 20:28:272 days 6 hrs ago0x77b8f19f1df44140e076a64ee36ac0a0b3d8c9ba IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.0004381
0xc2f30434e5105f6a470a62bbc66df4a9c83998b93c4141d1ba7ae3a18765c59a82700402021-06-13 19:44:592 days 6 hrs ago0x0ab1a516d354b04f9c86e342572853c9d8fe1f17 IN  0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB0.000116975
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:51100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:51100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xdcd0149b14a698675e675c69ccda4857faf58378474efbd660c49fb6c179bed754712352021-03-07 11:54:42100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xdcd0149b14a698675e675c69ccda4857faf58378474efbd660c49fb6c179bed754712352021-03-07 11:54:42100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0x3f92c143186ca7433d4d28c9ac9ac1f7ddcb975b25816d7f4502a54e2c35c80654711752021-03-07 11:51:42100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x3f92c143186ca7433d4d28c9ac9ac1f7ddcb975b25816d7f4502a54e2c35c80654711752021-03-07 11:51:42100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0x3f92c143186ca7433d4d28c9ac9ac1f7ddcb975b25816d7f4502a54e2c35c80654711752021-03-07 11:51:42100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x3f92c143186ca7433d4d28c9ac9ac1f7ddcb975b25816d7f4502a54e2c35c80654711752021-03-07 11:51:42100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xba9833a4c10083a06954f5040df4066e6fb8fa48c0c466ad3001a76b040bfa4054710342021-03-07 11:44:39100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xba9833a4c10083a06954f5040df4066e6fb8fa48c0c466ad3001a76b040bfa4054710342021-03-07 11:44:39100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xba9833a4c10083a06954f5040df4066e6fb8fa48c0c466ad3001a76b040bfa4054710342021-03-07 11:44:39100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xba9833a4c10083a06954f5040df4066e6fb8fa48c0c466ad3001a76b040bfa4054710342021-03-07 11:44:39100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xd52edfd1dbafb22f83f454c601989614eb645197c8970812dbf49ac0bb42bc2054710332021-03-07 11:44:36100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xd52edfd1dbafb22f83f454c601989614eb645197c8970812dbf49ac0bb42bc2054710332021-03-07 11:44:36100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xd52edfd1dbafb22f83f454c601989614eb645197c8970812dbf49ac0bb42bc2054710332021-03-07 11:44:36100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xd52edfd1dbafb22f83f454c601989614eb645197c8970812dbf49ac0bb42bc2054710332021-03-07 11:44:36100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0x827adafaf4a1d325b0bfd740d59a63449dd5f44f4a798e3d2ca5989f5260d1f054710132021-03-07 11:43:36100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x827adafaf4a1d325b0bfd740d59a63449dd5f44f4a798e3d2ca5989f5260d1f054710132021-03-07 11:43:36100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xb49d97e8903c8505cd7017cecd8aa613825a2ebcd94272dd241b42a3759bf5e054709592021-03-07 11:40:54100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xb49d97e8903c8505cd7017cecd8aa613825a2ebcd94272dd241b42a3759bf5e054709592021-03-07 11:40:54100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0x3a2026c5a48f1378a87b0dc02bbcd80f0d19c38451a80e2db97b16c39525931854709222021-03-07 11:39:03100 days 14 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x3a2026c5a48f1378a87b0dc02bbcd80f0d19c38451a80e2db97b16c39525931854709222021-03-07 11:39:03100 days 14 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xb478a36754b45c856d914646cce28c5630e634625af03c15f13b33a40e906d5f54708842021-03-07 11:37:09100 days 15 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0xb478a36754b45c856d914646cce28c5630e634625af03c15f13b33a40e906d5f54708842021-03-07 11:37:09100 days 15 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 0x9154c2684aef8d106babcb19aa81d4fabf7581ec0 BNB
0xb478a36754b45c856d914646cce28c5630e634625af03c15f13b33a40e906d5f54708842021-03-07 11:37:09100 days 15 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DemaxGovernance

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-09-10
*/

// Dependency file: contracts/modules/BaseToken.sol

// pragma solidity >=0.5.16;

contract BaseToken {
    address public baseToken;

    // called after deployment
    function initBaseToken(address _baseToken) internal {
        require(baseToken == address(0), 'INITIALIZED');
        require(_baseToken != address(0), 'ADDRESS_IS_ZERO');
        baseToken = _baseToken;  // it should be dgas token address
    }
}
// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// Dependency file: contracts/libraries/SafeMath.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when 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 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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
// Dependency file: contracts/modules/Ownable.sol

// pragma solidity >=0.5.16;

contract Ownable {
    address public owner;

    event OwnerChanged(address indexed _oldOwner, address indexed _newOwner);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, 'Ownable: FORBIDDEN');
        _;
    }

    function changeOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), 'Ownable: INVALID_ADDRESS');
        emit OwnerChanged(owner, _newOwner);
        owner = _newOwner;
    }

}

// Dependency file: contracts/modules/DgasStaking.sol

// pragma solidity >=0.5.16;

// import '../libraries/TransferHelper.sol';
// import '../libraries/SafeMath.sol';
// import '../interfaces/IERC20.sol';
// import '../interfaces/IDemaxConfig.sol';
// import '../modules/BaseToken.sol';


contract DgasStaking is BaseToken {
    using SafeMath for uint;

    uint public lockTime;
    uint public totalSupply;
    uint public stakingSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => uint) public allowance;


    constructor (address _baseToken) public {
        initBaseToken(_baseToken);
    }

    function _add(address user, uint value) internal {
        require(value > 0, 'ZERO');
        balanceOf[user] = balanceOf[user].add(value);
        stakingSupply = stakingSupply.add(value);
        allowance[user] = block.number;
    }

    function _reduce(address user, uint value) internal {
        require(balanceOf[user] >= value && value > 0, 'DgasStaking: INSUFFICIENT_BALANCE');
        balanceOf[user] = balanceOf[user].sub(value);
        stakingSupply = stakingSupply.sub(value);
    }

    function deposit(uint _amount) external returns (bool) {
        TransferHelper.safeTransferFrom(baseToken, msg.sender, address(this), _amount);
        _add(msg.sender, _amount);
        totalSupply = IERC20(baseToken).balanceOf(address(this));
        return true;
    }

    function withdraw(uint _amount) external returns (bool) {
        require(block.number > allowance[msg.sender] + lockTime, 'DgasStaking: NOT_DUE');
        TransferHelper.safeTransfer(baseToken, msg.sender, _amount);
        _reduce(msg.sender, _amount);
        totalSupply = IERC20(baseToken).balanceOf(address(this));
        return true;
    }

}
// Dependency file: contracts/libraries/TransferHelper.sol

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

// pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

// Dependency file: contracts/libraries/ConfigNames.sol

// pragma solidity >=0.5.16;

library ConfigNames {
    bytes32 public constant PRODUCE_DGAS_RATE = bytes32('PRODUCE_DGAS_RATE');
    bytes32 public constant SWAP_FEE_PERCENT = bytes32('SWAP_FEE_PERCENT');
    bytes32 public constant LIST_DGAS_AMOUNT = bytes32('LIST_DGAS_AMOUNT');
    bytes32 public constant UNSTAKE_DURATION = bytes32('UNSTAKE_DURATION');
    bytes32 public constant REMOVE_LIQUIDITY_DURATION = bytes32('REMOVE_LIQUIDITY_DURATION');
    bytes32 public constant TOKEN_TO_DGAS_PAIR_MIN_PERCENT = bytes32('TOKEN_TO_DGAS_PAIR_MIN_PERCENT');
    bytes32 public constant LIST_TOKEN_FAILURE_BURN_PRECENT = bytes32('LIST_TOKEN_FAILURE_BURN_PRECENT');
    bytes32 public constant LIST_TOKEN_SUCCESS_BURN_PRECENT = bytes32('LIST_TOKEN_SUCCESS_BURN_PRECENT');
    bytes32 public constant PROPOSAL_DGAS_AMOUNT = bytes32('PROPOSAL_DGAS_AMOUNT');
    bytes32 public constant VOTE_DURATION = bytes32('VOTE_DURATION');
    bytes32 public constant VOTE_REWARD_PERCENT = bytes32('VOTE_REWARD_PERCENT');
    bytes32 public constant TOKEN_PENGDING_SWITCH = bytes32('TOKEN_PENGDING_SWITCH');
    bytes32 public constant TOKEN_PENGDING_TIME = bytes32('TOKEN_PENGDING_TIME');
    bytes32 public constant LIST_TOKEN_SWITCH = bytes32('LIST_TOKEN_SWITCH');
    bytes32 public constant DEV_PRECENT = bytes32('DEV_PRECENT');
}
// Dependency file: contracts/interfaces/ITokenRegistry.sol

// pragma solidity >=0.5.16;

interface ITokenRegistry {
    function tokenStatus(address _token) external view returns(uint);
    function pairStatus(address tokenA, address tokenB) external view returns (uint);
    function NONE() external view returns(uint);
    function REGISTERED() external view returns(uint);
    function PENDING() external view returns(uint);
    function OPENED() external view returns(uint);
    function CLOSED() external view returns(uint);
    function registryToken(address _token) external returns (bool);
    function publishToken(address _token) external returns (bool);
    function updateToken(address _token, uint _status) external returns (bool);
    function updatePair(address tokenA, address tokenB, uint _status) external returns (bool);
    function tokenCount() external view returns(uint);
    function validTokens() external view returns(address[] memory);
    function iterateValidTokens(uint32 _start, uint32 _end) external view returns (address[] memory);
}
// Dependency file: contracts/interfaces/IDgas.sol

// pragma solidity >=0.5.0;

interface IDgas {
    function amountPerBlock() external view returns (uint);
    function changeInterestRatePerBlock(uint value) external returns (bool);
    function getProductivity(address user) external view returns (uint, uint);
    function increaseProductivity(address user, uint value) external returns (bool);
    function decreaseProductivity(address user, uint value) external returns (bool);
    function take() external view returns (uint);
    function takeWithBlock() external view returns (uint, uint);
    function mint() external returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function upgradeImpl(address _newImpl) external;
    function upgradeGovernance(address _newGovernor) external;
}
// Dependency file: contracts/interfaces/IDemaxBallot.sol

// pragma solidity >=0.5.0;

interface IDemaxBallot {
    function proposer() external view returns(address);
    function endBlockNumber() external view returns(uint);
    function value() external view returns(uint);
    function result() external view returns(bool);
    function end() external returns (bool);
    function total() external view returns(uint);
    function weight(address user) external view returns (uint);
}

// Dependency file: contracts/interfaces/IDemaxBallotFactory.sol

// pragma solidity >=0.5.0;

interface IDemaxBallotFactory {
    function create(
        address _proposer,
        uint _value,
        uint _endBlockNumber,
        string calldata _subject,
        string calldata _content
    ) external returns (address);
}

// Dependency file: contracts/interfaces/IDemaxConfig.sol

// pragma solidity >=0.5.0;

interface IDemaxConfig {
    function governor() external view returns (address);
    function dev() external view returns (address);
    function PERCENT_DENOMINATOR() external view returns (uint);
    function getConfig(bytes32 _name) external view returns (uint minValue, uint maxValue, uint maxSpan, uint value, uint enable);
    function getConfigValue(bytes32 _name) external view returns (uint);
    function changeConfigValue(bytes32 _name, uint _value) external returns (bool);
    function checkToken(address _token) external view returns(bool);
    function checkPair(address tokenA, address tokenB) external view returns (bool);
    function listToken(address _token) external returns (bool);
    function getDefaultListTokens() external returns (address[] memory);
    function platform() external view returns  (address);
    function addToken(address _token) external returns (bool);
}
pragma solidity >=0.6.6;

// import './interfaces/IDemaxConfig.sol';
// import './interfaces/IDemaxBallotFactory.sol';
// import './interfaces/IDemaxBallot.sol';
// import './interfaces/IDgas.sol';
// import './interfaces/ITokenRegistry.sol';
// import './libraries/ConfigNames.sol';
// import './libraries/TransferHelper.sol';
// import './modules/DgasStaking.sol';
// import './modules/Ownable.sol';

contract DemaxGovernance is DgasStaking, Ownable {
    uint public version = 1;
    address public configAddr;
    address public ballotFactoryAddr;
    address public rewardAddr;

    uint public T_CONFIG = 1;
    uint public T_LIST_TOKEN = 2;
    uint public T_TOKEN = 3;
    mapping(address => uint) public ballotTypes;
    mapping(address => bytes32) public configBallots;
    mapping(address => address) public tokenBallots;
    mapping(address => uint) public rewardOf;
    mapping(address => uint) public ballotOf;
    mapping(address => mapping(address => uint)) public applyTokenOf;
    mapping(address => mapping(address => bool)) public collectUsers;
    mapping(address => address) public tokenUsers;

    address[] public ballots;

    event ConfigAudited(bytes32 name, address indexed ballot, uint proposal);
    event ConfigBallotCreated(address indexed proposer, bytes32 name, uint value, address indexed ballotAddr, uint reward);
    event TokenBallotCreated(address indexed proposer, address indexed token, uint value, address indexed ballotAddr, uint reward);
    event ProposalerRewardRateUpdated(uint oldVaue, uint newValue);
    event RewardTransfered(address indexed from, address indexed to, uint value);
    event TokenListed(address user, address token, uint amount);
    event ListTokenAudited(address user, address token, uint status, uint burn, uint reward, uint refund);
    event TokenAudited(address user, address token, uint status, bool result);
    event RewardCollected(address indexed user, address indexed ballot, uint value);
    event RewardReceived(address indexed user, uint value);

    modifier onlyRewarder() {
        require(msg.sender == rewardAddr, 'DemaxGovernance: ONLY_REWARDER');
        _;
    }

    constructor (address _dgas) DgasStaking(_dgas) public {
    }

    // called after deployment
    function initialize(address _rewardAddr, address _configContractAddr, address _ballotFactoryAddr) external onlyOwner {
        require(_rewardAddr != address(0) && _configContractAddr != address(0) && _ballotFactoryAddr != address(0), 'DemaxGovernance: INPUT_ADDRESS_IS_ZERO');

        rewardAddr = _rewardAddr;
        configAddr = _configContractAddr;
        ballotFactoryAddr = _ballotFactoryAddr;
        lockTime = getConfigValue(ConfigNames.UNSTAKE_DURATION);
    }

    function audit(address _ballot) external returns (bool) {
        if(ballotTypes[_ballot] == T_CONFIG) {
            return auditConfig(_ballot);
        } else if (ballotTypes[_ballot] == T_LIST_TOKEN) {
            return auditListToken(_ballot);
        } else if (ballotTypes[_ballot] == T_TOKEN) {
            return auditToken(_ballot);
        } else {
            revert('DemaxGovernance: UNKNOWN_TYPE');
        }
    }

    function auditConfig(address _ballot) public returns (bool) {
        bool result = IDemaxBallot(_ballot).end();
        require(result, 'DemaxGovernance: NO_PASS');
        uint value = IDemaxBallot(_ballot).value();
        bytes32 name = configBallots[_ballot];
        result = IDemaxConfig(configAddr).changeConfigValue(name, value);
        if (name == ConfigNames.UNSTAKE_DURATION) {
            lockTime = value;
        } else if (name == ConfigNames.PRODUCE_DGAS_RATE) {
            _changeAmountPerBlock(value);
        }
        emit ConfigAudited(name, _ballot, value);
        return result;
    }

    function auditListToken(address _ballot) public returns (bool) {
        bool result = IDemaxBallot(_ballot).end();
        address token = tokenBallots[_ballot];
        address user = tokenUsers[token];
        require(ITokenRegistry(configAddr).tokenStatus(token) == ITokenRegistry(configAddr).REGISTERED(), 'DemaxGovernance: AUDITED');
        uint status = result ? ITokenRegistry(configAddr).PENDING() : ITokenRegistry(configAddr).CLOSED();
	    uint amount = applyTokenOf[user][token];
        (uint burnAmount, uint rewardAmount, uint refundAmount) = (0, 0, 0);
        if (result) {
            burnAmount = amount * getConfigValue(ConfigNames.LIST_TOKEN_SUCCESS_BURN_PRECENT) / IDemaxConfig(configAddr).PERCENT_DENOMINATOR();
            rewardAmount = amount - burnAmount;
            if (burnAmount > 0) {
                TransferHelper.safeTransfer(baseToken, address(0), burnAmount);
                totalSupply = totalSupply.sub(burnAmount);
            }
            if (rewardAmount > 0) {
                rewardOf[rewardAddr] = rewardOf[rewardAddr].add(rewardAmount);
                ballotOf[_ballot] = ballotOf[_ballot].add(rewardAmount);
                _rewardTransfer(rewardAddr, _ballot, rewardAmount);
            }
            ITokenRegistry(configAddr).publishToken(token);
        } else {
            burnAmount = amount * getConfigValue(ConfigNames.LIST_TOKEN_FAILURE_BURN_PRECENT) / IDemaxConfig(configAddr).PERCENT_DENOMINATOR();
            refundAmount = amount - burnAmount;
            if (burnAmount > 0) TransferHelper.safeTransfer(baseToken, address(0), burnAmount);
            if (refundAmount > 0) TransferHelper.safeTransfer(baseToken, user, refundAmount);
            totalSupply = totalSupply.sub(amount);
            ITokenRegistry(configAddr).updateToken(token, status);
        }
	    emit ListTokenAudited(user, token, status, burnAmount, rewardAmount, refundAmount);
        return result;
    }

    function auditToken(address _ballot) public returns (bool) {
        bool result = IDemaxBallot(_ballot).end();
        uint status = IDemaxBallot(_ballot).value();
        address token = tokenBallots[_ballot];
        address user = tokenUsers[token];
        require(ITokenRegistry(configAddr).tokenStatus(token) != status, 'DemaxGovernance: TOKEN_STATUS_NO_CHANGE');
        if (result) {
            ITokenRegistry(configAddr).updateToken(token, status);
        } else {
            status = ITokenRegistry(configAddr).tokenStatus(token);
        }
	    emit TokenAudited(user, token, status, result);
        return result;
    }

    function getConfigValue(bytes32 _name) public view returns (uint) {
        return IDemaxConfig(configAddr).getConfigValue(_name);
    }

    function createConfigBallot(bytes32 _name, uint _value, uint _amount, bool _wallet, string calldata _subject, string calldata _content) external returns (address) {
        require(_value >= 0, 'DemaxGovernance: INVALID_PARAMTERS');
        { // avoids stack too deep errors
        (uint minValue, uint maxValue, uint maxSpan, uint value, uint enable) = IDemaxConfig(configAddr).getConfig(_name);
        require(enable == 1, "DemaxGovernance: CONFIG_DISABLE");
        require(_value >= minValue && _value <= maxValue, "DemaxGovernance: OUTSIDE");
        uint span = _value >= value? (_value - value) : (value - _value);
        require(maxSpan >= span, "DemaxGovernance: OVERSTEP");
        }
        require(_amount >= getConfigValue(ConfigNames.PROPOSAL_DGAS_AMOUNT), "DemaxGovernance: NOT_ENOUGH_AMOUNT_TO_PROPOSAL");
        if(_amount > 0) {
            _amount = _transferForBallot(_amount, _wallet);
            rewardOf[rewardAddr] = rewardOf[rewardAddr].add(_amount);
        }
        uint endBlockNumber = block.number + getConfigValue(ConfigNames.VOTE_DURATION);
        address ballotAddr = IDemaxBallotFactory(ballotFactoryAddr).create(msg.sender, _value, endBlockNumber, _subject, _content);
        configBallots[ballotAddr] = _name;
        uint reward = _createdBallot(ballotAddr, T_CONFIG);
        emit ConfigBallotCreated(msg.sender, _name, _value, ballotAddr, reward);
        return ballotAddr;
    }

    function createTokenBallot(address _token, uint _value, uint _amount, bool _wallet, string calldata _subject, string calldata _content) external returns (address) {
        require(!_isDefaultToken(_token), 'DemaxGovernance: DEFAULT_LIST_TOKENS_PROPOSAL_DENY');
        uint status = ITokenRegistry(configAddr).tokenStatus(_token);
        require(status == ITokenRegistry(configAddr).PENDING(), 'DemaxGovernance: ONLY_ALLOW_PENDING');
        require(_value == ITokenRegistry(configAddr).OPENED() || _value == ITokenRegistry(configAddr).CLOSED(), 'DemaxGovernance: INVALID_STATUS');
        require(status != _value, 'DemaxGovernance: STATUS_NO_CHANGE');
        require(_amount >= getConfigValue(ConfigNames.PROPOSAL_DGAS_AMOUNT), "DemaxGovernance: NOT_ENOUGH_AMOUNT_TO_PROPOSAL");
        if(_amount > 0) {
            _amount = _transferForBallot(_amount, _wallet);
            rewardOf[rewardAddr] = rewardOf[rewardAddr].add(_amount);
        }
        address ballotAddr = _createTokenBallot(T_TOKEN, _token, _value, _subject, _content);
        return ballotAddr;
    }

	function listToken(address _token, uint _amount, bool _wallet, string calldata _subject, string calldata _content) external returns (address) {
        uint status = ITokenRegistry(configAddr).tokenStatus(_token);
        require(status == ITokenRegistry(configAddr).NONE() || status == ITokenRegistry(configAddr).CLOSED(), 'DemaxGovernance: LISTED');
	    require(_amount >= getConfigValue(ConfigNames.LIST_DGAS_AMOUNT), "DemaxGovernance: NOT_ENOUGH_AMOUNT_TO_LIST");
	    tokenUsers[_token] = msg.sender;
        if(_amount > 0) {
            applyTokenOf[msg.sender][_token] = _transferForBallot(_amount, _wallet);
        }
	    ITokenRegistry(configAddr).registryToken(_token);
        address ballotAddr = _createTokenBallot(T_LIST_TOKEN, _token, ITokenRegistry(configAddr).PENDING(), _subject, _content);
	    emit TokenListed(msg.sender, _token, _amount);
        return ballotAddr;
	}

    function _createTokenBallot(uint _type, address _token, uint _value, string memory _subject, string memory _content) private returns (address) {
        uint endBlockNumber = block.number + getConfigValue(ConfigNames.VOTE_DURATION);
        address ballotAddr = IDemaxBallotFactory(ballotFactoryAddr).create(msg.sender, _value, endBlockNumber, _subject, _content);
        uint reward = _createdBallot(ballotAddr, _type);
        ballotOf[ballotAddr] = reward;
        tokenBallots[ballotAddr] = _token;
        emit TokenBallotCreated(msg.sender, _token, _value, ballotAddr, reward);
        return ballotAddr;
    }

    function collectReward(address _ballot) external returns (uint) {
        require(block.number >= IDemaxBallot(_ballot).endBlockNumber(), "DemaxGovernance: NOT_YET_ENDED");
        require(!collectUsers[_ballot][msg.sender], 'DemaxGovernance: REWARD_COLLECTED');
        uint amount = getReward(_ballot);
        _rewardTransfer(_ballot, msg.sender, amount);
        balanceOf[msg.sender] = balanceOf[msg.sender].add(amount);
        stakingSupply = stakingSupply.add(amount);
        rewardOf[msg.sender] = rewardOf[msg.sender].sub(amount);
        collectUsers[_ballot][msg.sender] = true;
        emit RewardCollected(msg.sender, _ballot, amount);
    }

    function getReward(address _ballot) public view returns (uint) {
        if (block.number < IDemaxBallot(_ballot).endBlockNumber() || collectUsers[_ballot][msg.sender]) {
            return 0;
        }
        uint amount;
        uint shares = ballotOf[_ballot];
        if (IDemaxBallot(_ballot).result()) {
            uint extra;
            uint rewardRate = getConfigValue(ConfigNames.VOTE_REWARD_PERCENT);
            if ( rewardRate > 0) {
               extra = shares * rewardRate / IDemaxConfig(configAddr).PERCENT_DENOMINATOR();
               shares -= extra;
            }
            if (msg.sender == IDemaxBallot(_ballot).proposer()) {
                amount = extra;
            }
        }

        if (IDemaxBallot(_ballot).total() > 0) {
            amount += shares * IDemaxBallot(_ballot).weight(msg.sender) / IDemaxBallot(_ballot).total();
        }
        return amount;
    }

    function addReward(uint _value) external onlyRewarder returns (bool) {
        require(_value > 0, 'DemaxGovernance: ADD_REWARD_VALUE_IS_ZERO');
        uint total = IERC20(baseToken).balanceOf(address(this));
        uint diff = total.sub(totalSupply);
        require(_value <= diff, 'DemaxGovernance: ADD_REWARD_EXCEED');
        rewardOf[rewardAddr] = rewardOf[rewardAddr].add(_value);
        totalSupply = total;
        emit RewardReceived(rewardAddr, _value);
    }

    function _rewardTransfer(address _from, address _to, uint _value) private returns (bool) {
        require(_value >= 0 && rewardOf[_from] >= _value, 'DemaxGovernance: INSUFFICIENT_BALANCE');
        rewardOf[_from] = rewardOf[_from].sub(_value);
        rewardOf[_to] = rewardOf[_to].add(_value);
        emit RewardTransfered(_from, _to, _value);
    }

    function _isDefaultToken(address _token) internal returns (bool) {
        address[] memory tokens = IDemaxConfig(configAddr).getDefaultListTokens();
        for(uint i = 0 ; i < tokens.length; i++){
            if (tokens[i] == _token) {
                return true;
            }
        }
        return false;
    }

    function _transferForBallot(uint _amount, bool _wallet) internal returns (uint) {
        if (_wallet) {
            TransferHelper.safeTransferFrom(baseToken, msg.sender, address(this), _amount);
            totalSupply += _amount;
        } else {
            _reduce(msg.sender, _amount);
        }
        return _amount;
    }

    function _createdBallot(address _ballot, uint _type) internal returns (uint) {
        uint reward = rewardOf[rewardAddr];
        ballotOf[_ballot] = reward;
        _rewardTransfer(rewardAddr, _ballot, reward);
        ballots.push(_ballot);
        ballotTypes[_ballot] = _type;
        return reward;
    }

    function ballotCount() external view returns (uint) {
        return ballots.length;
    }

    function _changeAmountPerBlock(uint _value) internal returns (bool) {
        return IDgas(baseToken).changeInterestRatePerBlock(_value);
    }

    function updateDgasGovernor(address _new) external onlyOwner {
        IDgas(baseToken).upgradeGovernance(_new);
    }

    function upgradeApproveReward() external returns (uint) {
        require(rewardOf[rewardAddr] > 0, 'DemaxGovernance: UPGRADE_NO_REWARD');
        require(IDemaxConfig(configAddr).governor() != address(this), 'DemaxGovernance: UPGRADE_NO_CHANGE');
        TransferHelper.safeApprove(baseToken, IDemaxConfig(configAddr).governor(), rewardOf[rewardAddr]);
        return rewardOf[rewardAddr]; 
    }

    function receiveReward(address _from, uint _value) external returns (bool) {
        require(_value > 0, 'DemaxGovernance: RECEIVE_REWARD_VALUE_IS_ZERO');
        TransferHelper.safeTransferFrom(baseToken, _from, address(this), _value);
        rewardOf[rewardAddr] += _value;
        totalSupply += _value;
        emit RewardReceived(_from, _value);
        return true;
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dgas","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"ballot","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposal","type":"uint256"}],"name":"ConfigAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"ballotAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ConfigBallotCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"status","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"refund","type":"uint256"}],"name":"ListTokenAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVaue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"ProposalerRewardRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"ballot","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RewardCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RewardReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RewardTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"status","type":"uint256"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"TokenAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposer","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"ballotAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"TokenBallotCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenListed","type":"event"},{"inputs":[],"name":"T_CONFIG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"T_LIST_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"T_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"addReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"applyTokenOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"audit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"auditConfig","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"auditListToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"auditToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ballotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ballotFactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ballotOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ballotTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ballots","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"collectReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"collectUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"configBallots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_wallet","type":"bool"},{"internalType":"string","name":"_subject","type":"string"},{"internalType":"string","name":"_content","type":"string"}],"name":"createConfigBallot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_wallet","type":"bool"},{"internalType":"string","name":"_subject","type":"string"},{"internalType":"string","name":"_content","type":"string"}],"name":"createTokenBallot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"}],"name":"getConfigValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ballot","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardAddr","type":"address"},{"internalType":"address","name":"_configContractAddr","type":"address"},{"internalType":"address","name":"_ballotFactoryAddr","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_wallet","type":"bool"},{"internalType":"string","name":"_subject","type":"string"},{"internalType":"string","name":"_content","type":"string"}],"name":"listToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"receiveReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenBallots","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"updateDgasGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeApproveReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405260016007556001600b556002600c556003600d553480156200002557600080fd5b506040516200447c3803806200447c833981810160405260208110156200004b57600080fd5b50518062000062816001600160e01b036200007c16565b5050600680546001600160a01b0319163317905562000139565b6000546001600160a01b031615620000c9576040805162461bcd60e51b815260206004820152600b60248201526a125392551250531256915160aa1b604482015290519081900360640190fd5b6001600160a01b03811662000117576040805162461bcd60e51b815260206004820152600f60248201526e414444524553535f49535f5a45524f60881b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b61433380620001496000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806374c3e71311610146578063c0030032116100c3578063dc01262611610087578063dc012626146107fa578063dc39202314610820578063e97b63fe14610846578063ee15a07d14610927578063eec5f1dc1461092f578063f377e7cf146109555761025e565b8063c00300321461076f578063c0c53b8b14610777578063c199de32146107af578063c25d0bab146107cc578063c55dae63146107f25761025e565b8063a6f9dae11161010a578063a6f9dae1146106d8578063ad3385f6146106fe578063aee4dd5a14610706578063b6b55f251461072c578063c00007b0146107495761025e565b806374c3e7131461065757806374de4ec41461068557806382c97b8d146106a25780638975211c146106c85780638da5cb5b146106d05761025e565b80633e05d1d2116101df5780635a8e1ca9116101a35780635a8e1ca9146105b85780635c632b38146105de5780635c820c96146105fb5780637015e95e1461060357806370a082311461060b578063739a8827146106315761025e565b80633e05d1d2146104805780633e5beab91461048857806343a6b1c8146104ae578063537f97641461058a57806354fd4d50146105b05761025e565b806321d948af1161022657806321d948af146102f357806322d59bc61461031b5780632d65f4891461040f5780632e1a7d4d1461043d5780633a9300551461045a5761025e565b8063053ff9ee1461026357806306466620146102a35780630d668087146102bd57806318160ddd146102c55780631d62ebd9146102cd575b600080fd5b61028f6004803603604081101561027957600080fd5b506001600160a01b03813516906020013561095d565b604080519115158252519081900360200190f35b6102ab610a21565b60408051918252519081900360200190f35b6102ab610a27565b6102ab610a2d565b6102ab600480360360208110156102e357600080fd5b50356001600160a01b0316610a33565b6103196004803603602081101561030957600080fd5b50356001600160a01b0316610a45565b005b6103f3600480360360c081101561033157600080fd5b813591602081013591604082013591606081013515159181019060a081016080820135600160201b81111561036557600080fd5b82018360208201111561037757600080fd5b803590602001918460018302840111600160201b8311171561039857600080fd5b919390929091602081019035600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460018302840111600160201b831117156103e857600080fd5b509092509050610aff565b604080516001600160a01b039092168252519081900360200190f35b61028f6004803603604081101561042557600080fd5b506001600160a01b0381358116916020013516610f48565b61028f6004803603602081101561045357600080fd5b5035610f68565b6103f36004803603602081101561047057600080fd5b50356001600160a01b031661106c565b6102ab611087565b6102ab6004803603602081101561049e57600080fd5b50356001600160a01b031661124b565b6103f3600480360360a08110156104c457600080fd5b6001600160a01b0382351691602081013591604082013515159190810190608081016060820135600160201b8111156104fc57600080fd5b82018360208201111561050e57600080fd5b803590602001918460018302840111600160201b8311171561052f57600080fd5b919390929091602081019035600160201b81111561054c57600080fd5b82018360208201111561055e57600080fd5b803590602001918460018302840111600160201b8311171561057f57600080fd5b50909250905061125d565b61028f600480360360208110156105a057600080fd5b50356001600160a01b031661169a565b6102ab6119b6565b6102ab600480360360208110156105ce57600080fd5b50356001600160a01b03166119bc565b6103f3600480360360208110156105f457600080fd5b50356119ce565b6103f36119f5565b6103f3611a04565b6102ab6004803603602081101561062157600080fd5b50356001600160a01b0316611a13565b6102ab6004803603602081101561064757600080fd5b50356001600160a01b0316611a25565b6102ab6004803603604081101561066d57600080fd5b506001600160a01b0381358116916020013516611a37565b61028f6004803603602081101561069b57600080fd5b5035611a54565b6102ab600480360360208110156106b857600080fd5b50356001600160a01b0316611c58565b6103f3611e6d565b6103f3611e7c565b610319600480360360208110156106ee57600080fd5b50356001600160a01b0316611e8b565b6102ab611f96565b61028f6004803603602081101561071c57600080fd5b50356001600160a01b0316611f9c565b61028f6004803603602081101561074257600080fd5b503561269e565b6102ab6004803603602081101561075f57600080fd5b50356001600160a01b03166126c1565b6102ab612a74565b6103196004803603606081101561078d57600080fd5b506001600160a01b038135811691602081013582169160409091013516612a7a565b6102ab600480360360208110156107c557600080fd5b5035612b9e565b6103f3600480360360208110156107e257600080fd5b50356001600160a01b0316612c1c565b6103f3612c37565b6102ab6004803603602081101561081057600080fd5b50356001600160a01b0316612c46565b61028f6004803603602081101561083657600080fd5b50356001600160a01b0316612c58565b6103f3600480360360c081101561085c57600080fd5b6001600160a01b0382351691602081013591604082013591606081013515159181019060a081016080820135600160201b81111561089957600080fd5b8201836020820111156108ab57600080fd5b803590602001918460018302840111600160201b831117156108cc57600080fd5b919390929091602081019035600160201b8111156108e957600080fd5b8201836020820111156108fb57600080fd5b803590602001918460018302840111600160201b8311171561091c57600080fd5b509092509050612eaa565b6102ab6132ef565b61028f6004803603602081101561094557600080fd5b50356001600160a01b03166132f5565b6102ab6133cc565b600080821161099d5760405162461bcd60e51b815260040180806020018281038252602d815260200180614126602d913960400191505060405180910390fd5b6000546109b5906001600160a01b03168430856133d2565b600a546001600160a01b03908116600090815260116020908152604091829020805486019055600280548601905581518581529151928616927f9ac954606f877c9c9e6deec30e9265abff5a57c7123a34777ca9321eb6c26d8e9281900390910190a250600192915050565b600b5481565b60015481565b60025481565b60116020526000908152604090205481565b6006546001600160a01b03163314610a99576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6000805460408051631fedded560e01b81526001600160a01b03858116600483015291519190921692631fedded5926024808201939182900301818387803b158015610ae457600080fd5b505af1158015610af8573d6000803e3d6000fd5b5050505050565b600080806000806000600860009054906101000a90046001600160a01b03166001600160a01b0316636dd5b69d8f6040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b158015610b6157600080fd5b505afa158015610b75573d6000803e3d6000fd5b505050506040513d60a0811015610b8b57600080fd5b5080516020820151604083015160608401516080909401519298509096509450909250905060018114610c05576040805162461bcd60e51b815260206004820152601f60248201527f44656d6178476f7665726e616e63653a20434f4e4649475f44495341424c4500604482015290519081900360640190fd5b848d10158015610c155750838d11155b610c66576040805162461bcd60e51b815260206004820152601860248201527f44656d6178476f7665726e616e63653a204f5554534944450000000000000000604482015290519081900360640190fd5b6000828e1015610c78578d8303610c7c565b828e035b905080841015610cd3576040805162461bcd60e51b815260206004820152601960248201527f44656d6178476f7665726e616e63653a204f5645525354455000000000000000604482015290519081900360640190fd5b505050505050610cf973141493d413d4d05317d111d054d7d05353d5539560621b612b9e565b871015610d375760405162461bcd60e51b815260040180806020018281038252602e81526020018061419e602e913960400191505060405180910390fd5b8615610d9157610d47878761352f565b600a546001600160a01b0316600090815260116020526040902054909750610d75908863ffffffff61356d16565b600a546001600160a01b03166000908152601160205260409020555b6000610dac6c2b27aa22afa22aa920aa24a7a760991b612b9e565b430190506000600960009054906101000a90046001600160a01b03166001600160a01b03166325c8b428338c858b8b8b8b6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b0316815260200187815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509950505050505050505050602060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d6020811015610eb957600080fd5b50516001600160a01b0381166000908152600f602052604081208d9055600b5491925090610ee89083906135ce565b604080518e8152602081018e905280820183905290519192506001600160a01b0384169133917f324ff77aed889bbe0650aaa1156c76e87e08dc58a8372f556003a299296fbe27919081900360600190a3509a9950505050505050505050565b601460209081526000928352604080842090915290825290205460ff1681565b600154336000908152600560205260408120549091014311610fc8576040805162461bcd60e51b8152602060048201526014602482015273446761735374616b696e673a204e4f545f44554560601b604482015290519081900360640190fd5b600054610fdf906001600160a01b03163384613671565b610fe933836137d4565b600054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561103457600080fd5b505afa158015611048573d6000803e3d6000fd5b505050506040513d602081101561105e57600080fd5b50516002555060015b919050565b6015602052600090815260409020546001600160a01b031681565b600a546001600160a01b03166000908152601160205260408120546110dd5760405162461bcd60e51b81526004018080602001828103825260228152602001806140bd6022913960400191505060405180910390fd5b6008546040805163030d028960e21b8152905130926001600160a01b031691630c340a24916004808301926020929190829003018186803b15801561112157600080fd5b505afa158015611135573d6000803e3d6000fd5b505050506040513d602081101561114b57600080fd5b50516001600160a01b031614156111935760405162461bcd60e51b815260040180806020018281038252602281526020018061417c6022913960400191505060405180910390fd5b6000546008546040805163030d028960e21b8152905161122c936001600160a01b03908116931691630c340a24916004808301926020929190829003018186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d602081101561120a57600080fd5b5051600a546001600160a01b0316600090815260116020526040902054613893565b50600a546001600160a01b031660009081526011602052604090205490565b60056020526000908152604090205481565b6008546040805163056564a160e11b81526001600160a01b038a81166004830152915160009384931691630acac942916024808301926020929190829003018186803b1580156112ac57600080fd5b505afa1580156112c0573d6000803e3d6000fd5b505050506040513d60208110156112d657600080fd5b5051600854604080516320d494e560e21b815290519293506001600160a01b0390911691638352539491600480820192602092909190829003018186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d602081101561134a57600080fd5b50518114806113d15750600860009054906101000a90046001600160a01b03166001600160a01b0316630e2636a36040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b505181145b611422576040805162461bcd60e51b815260206004820152601760248201527f44656d6178476f7665726e616e63653a204c4953544544000000000000000000604482015290519081900360640190fd5b61143e6f131254d517d111d054d7d05353d5539560821b612b9e565b88101561147c5760405162461bcd60e51b815260040180806020018281038252602a81526020018061426d602a913960400191505060405180910390fd5b6001600160a01b038916600090815260156020526040902080546001600160a01b0319163317905587156114d9576114b4888861352f565b3360009081526013602090815260408083206001600160a01b038e1684529091529020555b6008546040805163111cf59d60e11b81526001600160a01b038c8116600483015291519190921691632239eb3a9160248083019260209291908290030181600087803b15801561152857600080fd5b505af115801561153c573d6000803e3d6000fd5b505050506040513d602081101561155257600080fd5b5050600c5460085460408051630982797d60e21b815290516000936116419390928e926001600160a01b0390921691632609e5f491600480820192602092909190829003018186803b1580156115a757600080fd5b505afa1580156115bb573d6000803e3d6000fd5b505050506040513d60208110156115d157600080fd5b5051604080516020601f8d018190048102820181019092528b8152908c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506139f692505050565b604080513381526001600160a01b038d1660208201528082018c905290519192507f48a4867ae1de558174634fbaacefa7e5f70d61c782ceaeba4770449f19ab62c1919081900360600190a19998505050505050505050565b600080826001600160a01b031663efbe1c1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b505050506040513d602081101561170257600080fd5b505160408051633fa4f24560e01b815290519192506000916001600160a01b03861691633fa4f245916004808301926020929190829003018186803b15801561174a57600080fd5b505afa15801561175e573d6000803e3d6000fd5b505050506040513d602081101561177457600080fd5b50516001600160a01b038086166000908152601060209081526040808320548416808452601583529281902054600854825163056564a160e11b815260048101869052925196975093959085169487941692630acac9429260248082019391829003018186803b1580156117e757600080fd5b505afa1580156117fb573d6000803e3d6000fd5b505050506040513d602081101561181157600080fd5b505114156118505760405162461bcd60e51b81526004018080602001828103825260278152602001806141cc6027913960400191505060405180910390fd5b83156118de5760085460408051632bce9e7b60e01b81526001600160a01b0385811660048301526024820187905291519190921691632bce9e7b9160448083019260209291908290030181600087803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b505050506040513d60208110156118d657600080fd5b5061195a9050565b6008546040805163056564a160e11b81526001600160a01b03858116600483015291519190921691630acac942916024808301926020929190829003018186803b15801561192b57600080fd5b505afa15801561193f573d6000803e3d6000fd5b505050506040513d602081101561195557600080fd5b505192505b604080516001600160a01b03808416825284166020820152808201859052851515606082015290517fb9fca8100d801faf854377cb46530c8e9fcb90562c8e746e8f16edec66ac053e9181900360800190a15091949350505050565b60075481565b600e6020526000908152604090205481565b601681815481106119db57fe5b6000918252602090912001546001600160a01b0316905081565b6008546001600160a01b031681565b600a546001600160a01b031681565b60046020526000908152604090205481565b600f6020526000908152604090205481565b601360209081526000928352604080842090915290825290205481565b600a546000906001600160a01b03163314611ab6576040805162461bcd60e51b815260206004820152601e60248201527f44656d6178476f7665726e616e63653a204f4e4c595f52455741524445520000604482015290519081900360640190fd5b60008211611af55760405162461bcd60e51b81526004018080602001828103825260298152602001806141536029913960400191505060405180910390fd5b60008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611b4157600080fd5b505afa158015611b55573d6000803e3d6000fd5b505050506040513d6020811015611b6b57600080fd5b5051600254909150600090611b8790839063ffffffff613c2416565b905080841115611bc85760405162461bcd60e51b81526004018080602001828103825260228152602001806142976022913960400191505060405180910390fd5b600a546001600160a01b0316600090815260116020526040902054611bf3908563ffffffff61356d16565b600a80546001600160a01b039081166000908152601160209081526040918290209490945560028690559154825188815292519116927f9ac954606f877c9c9e6deec30e9265abff5a57c7123a34777ca9321eb6c26d8e928290030190a25050919050565b6000816001600160a01b031663b4999e856040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9357600080fd5b505afa158015611ca7573d6000803e3d6000fd5b505050506040513d6020811015611cbd57600080fd5b5051431015611d13576040805162461bcd60e51b815260206004820152601e60248201527f44656d6178476f7665726e616e63653a204e4f545f5945545f454e4445440000604482015290519081900360640190fd5b6001600160a01b038216600090815260146020908152604080832033845290915290205460ff1615611d765760405162461bcd60e51b81526004018080602001828103825260218152602001806141056021913960400191505060405180910390fd5b6000611d81836126c1565b9050611d8e833383613c66565b5033600090815260046020526040902054611daf908263ffffffff61356d16565b33600090815260046020526040902055600354611dd2908263ffffffff61356d16565b60035533600090815260116020526040902054611df5908263ffffffff613c2416565b336000818152601160209081526040808320949094556001600160a01b03871680835260148252848320848452825291849020805460ff191660011790558351858152935191937fba54b13b72478bb0dfb7f4fefd826a0fce43df924cfddf6cb402702d6ce4d45b929081900390910190a350919050565b6009546001600160a01b031681565b6006546001600160a01b031681565b6006546001600160a01b03163314611edf576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b038116611f3a576040805162461bcd60e51b815260206004820152601860248201527f4f776e61626c653a20494e56414c49445f414444524553530000000000000000604482015290519081900360640190fd5b6006546040516001600160a01b038084169216907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b600080826001600160a01b031663efbe1c1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611fda57600080fd5b505af1158015611fee573d6000803e3d6000fd5b505050506040513d602081101561200457600080fd5b50516001600160a01b03808516600090815260106020908152604080832054841680845260158352928190205460085482516305855bbb60e11b815292519697509395908516949390931692630b0ab77692600480840193919291829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b50516008546040805163056564a160e11b81526001600160a01b03868116600483015291519190921691630acac942916024808301926020929190829003018186803b1580156120ec57600080fd5b505afa158015612100573d6000803e3d6000fd5b505050506040513d602081101561211657600080fd5b50511461216a576040805162461bcd60e51b815260206004820152601860248201527f44656d6178476f7665726e616e63653a20415544495445440000000000000000604482015290519081900360640190fd5b6000836121f057600860009054906101000a90046001600160a01b03166001600160a01b0316630e2636a36040518163ffffffff1660e01b815260040160206040518083038186803b1580156121bf57600080fd5b505afa1580156121d3573d6000803e3d6000fd5b505050506040513d60208110156121e957600080fd5b505161226b565b600860009054906101000a90046001600160a01b03166001600160a01b0316632609e5f46040518163ffffffff1660e01b815260040160206040518083038186803b15801561223e57600080fd5b505afa158015612252573d6000803e3d6000fd5b505050506040513d602081101561226857600080fd5b50515b6001600160a01b038084166000908152601360209081526040808320938816835292905290812054919250808087156124a857600860009054906101000a90046001600160a01b03166001600160a01b0316639e6c29596040518163ffffffff1660e01b815260040160206040518083038186803b1580156122ec57600080fd5b505afa158015612300573d6000803e3d6000fd5b505050506040513d602081101561231657600080fd5b50516123417f4c4953545f544f4b454e5f535543434553535f4255524e5f50524543454e5400612b9e565b85028161234a57fe5b049250828403915082156123895760008054612372916001600160a01b039091169085613671565b600254612385908463ffffffff613c2416565b6002555b811561242757600a546001600160a01b03166000908152601160205260409020546123ba908363ffffffff61356d16565b600a546001600160a01b03908116600090815260116020908152604080832094909455918d168152601290915220546123f9908363ffffffff61356d16565b6001600160a01b03808c16600090815260126020526040902091909155600a5461242591168b84613c66565b505b600854604080516337309f4160e21b81526001600160a01b038a811660048301529151919092169163dcc27d049160248083019260209291908290030181600087803b15801561247657600080fd5b505af115801561248a573d6000803e3d6000fd5b505050506040513d60208110156124a057600080fd5b506126319050565b600860009054906101000a90046001600160a01b03166001600160a01b0316639e6c29596040518163ffffffff1660e01b815260040160206040518083038186803b1580156124f657600080fd5b505afa15801561250a573d6000803e3d6000fd5b505050506040513d602081101561252057600080fd5b505161254b7f4c4953545f544f4b454e5f4641494c5552455f4255524e5f50524543454e5400612b9e565b85028161255457fe5b04925050818303821561257b576000805461257b916001600160a01b039091169085613671565b801561259857600054612598906001600160a01b03168783613671565b6002546125ab908563ffffffff613c2416565b60025560085460408051632bce9e7b60e01b81526001600160a01b038a811660048301526024820189905291519190921691632bce9e7b9160448083019260209291908290030181600087803b15801561260457600080fd5b505af1158015612618573d6000803e3d6000fd5b505050506040513d602081101561262e57600080fd5b50505b604080516001600160a01b03808916825289166020820152808201879052606081018590526080810184905260a0810183905290517f1a3a32e14a4314895ddf948c94dc9b7c31ec2bd6553420c18d8089d10b53f1309181900360c00190a1509598975050505050505050565b600080546126b7906001600160a01b03163330856133d2565b610fe93383613d79565b6000816001600160a01b031663b4999e856040518163ffffffff1660e01b815260040160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d602081101561272657600080fd5b505143108061275857506001600160a01b038216600090815260146020908152604080832033845290915290205460ff165b1561276557506000611067565b6001600160a01b0382166000818152601260209081526040808320548151636537214760e01b8152915193949093909263653721479260048082019391829003018186803b1580156127b657600080fd5b505afa1580156127ca573d6000803e3d6000fd5b505050506040513d60208110156127e057600080fd5b50511561291a57600080612809721593d51157d49155d0549117d4115490d15395606a1b612b9e565b9050801561289e57600860009054906101000a90046001600160a01b03166001600160a01b0316639e6c29596040518163ffffffff1660e01b815260040160206040518083038186803b15801561285f57600080fd5b505afa158015612873573d6000803e3d6000fd5b505050506040513d602081101561288957600080fd5b50518382028161289557fe5b04915081830392505b856001600160a01b031663a8e4fb906040518163ffffffff1660e01b815260040160206040518083038186803b1580156128d757600080fd5b505afa1580156128eb573d6000803e3d6000fd5b505050506040513d602081101561290157600080fd5b50516001600160a01b0316331415612917578193505b50505b6000846001600160a01b0316632ddbd13a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561295557600080fd5b505afa158015612969573d6000803e3d6000fd5b505050506040513d602081101561297f57600080fd5b50511115612a6d57836001600160a01b0316632ddbd13a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129c057600080fd5b505afa1580156129d4573d6000803e3d6000fd5b505050506040513d60208110156129ea57600080fd5b505160408051637a1cb71560e11b815233600482015290516001600160a01b0387169163f4396e2a916024808301926020929190829003018186803b158015612a3257600080fd5b505afa158015612a46573d6000803e3d6000fd5b505050506040513d6020811015612a5c57600080fd5b5051820281612a6757fe5b04820191505b5092915050565b60165490565b6006546001600160a01b03163314612ace576040805162461bcd60e51b815260206004820152601260248201527127bbb730b136329d102327a92124a22222a760711b604482015290519081900360640190fd5b6001600160a01b03831615801590612aee57506001600160a01b03821615155b8015612b0257506001600160a01b03811615155b612b3d5760405162461bcd60e51b81526004018080602001828103825260268152602001806140df6026913960400191505060405180910390fd5b600a80546001600160a01b038086166001600160a01b031992831617909255600880548584169083161790556009805492841692909116919091179055612b966f2aa729aa20a5a2afa22aa920aa24a7a760811b612b9e565b600155505050565b600854604080516360ccef1960e11b81526004810184905290516000926001600160a01b03169163c199de32916024808301926020929190829003018186803b158015612bea57600080fd5b505afa158015612bfe573d6000803e3d6000fd5b505050506040513d6020811015612c1457600080fd5b505192915050565b6010602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b60126020526000908152604090205481565b600080826001600160a01b031663efbe1c1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c9657600080fd5b505af1158015612caa573d6000803e3d6000fd5b505050506040513d6020811015612cc057600080fd5b5051905080612d16576040805162461bcd60e51b815260206004820152601860248201527f44656d6178476f7665726e616e63653a204e4f5f504153530000000000000000604482015290519081900360640190fd5b6000836001600160a01b0316633fa4f2456040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5157600080fd5b505afa158015612d65573d6000803e3d6000fd5b505050506040513d6020811015612d7b57600080fd5b50516001600160a01b038086166000908152600f60209081526040808320546008548251630484ac5d60e31b815260048101839052602481018890529251969750909594169363242562e893604480840194938390030190829087803b158015612de457600080fd5b505af1158015612df8573d6000803e3d6000fd5b505050506040513d6020811015612e0e57600080fd5b505192506f2aa729aa20a5a2afa22aa920aa24a7a760811b811415612e37576001829055612e5e565b7050524f445543455f444741535f5241544560781b811415612e5e57612e5c82613e2c565b505b604080518281526020810184905281516001600160a01b038816927f6ad8f80cc263288264e5e06e0c41aa75bb224b02b362a4724a881dfa2da5d420928290030190a250909392505050565b6000612eb589613e8e565b15612ef15760405162461bcd60e51b815260040180806020018281038252603281526020018061423b6032913960400191505060405180910390fd5b6008546040805163056564a160e11b81526001600160a01b038c8116600483015291516000939290921691630acac94291602480820192602092909190829003018186803b158015612f4257600080fd5b505afa158015612f56573d6000803e3d6000fd5b505050506040513d6020811015612f6c57600080fd5b505160085460408051630982797d60e21b815290519293506001600160a01b0390911691632609e5f491600480820192602092909190829003018186803b158015612fb657600080fd5b505afa158015612fca573d6000803e3d6000fd5b505050506040513d6020811015612fe057600080fd5b5051811461301f5760405162461bcd60e51b81526004018080602001828103825260238152602001806141f36023913960400191505060405180910390fd5b600860009054906101000a90046001600160a01b03166001600160a01b031663aa23a8f46040518163ffffffff1660e01b815260040160206040518083038186803b15801561306d57600080fd5b505afa158015613081573d6000803e3d6000fd5b505050506040513d602081101561309757600080fd5b505189148061311e5750600860009054906101000a90046001600160a01b03166001600160a01b0316630e2636a36040518163ffffffff1660e01b815260040160206040518083038186803b1580156130ef57600080fd5b505afa158015613103573d6000803e3d6000fd5b505050506040513d602081101561311957600080fd5b505189145b61316f576040805162461bcd60e51b815260206004820152601f60248201527f44656d6178476f7665726e616e63653a20494e56414c49445f53544154555300604482015290519081900360640190fd5b888114156131ae5760405162461bcd60e51b81526004018080602001828103825260218152602001806142dd6021913960400191505060405180910390fd5b6131ce73141493d413d4d05317d111d054d7d05353d5539560621b612b9e565b88101561320c5760405162461bcd60e51b815260040180806020018281038252602e81526020018061419e602e913960400191505060405180910390fd5b87156132665761321c888861352f565b600a546001600160a01b031660009081526011602052604090205490985061324a908963ffffffff61356d16565b600a546001600160a01b03166000908152601160205260409020555b60006132e0600d548c8c8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506139f692505050565b9b9a5050505050505050505050565b600d5481565b600b546001600160a01b0382166000908152600e6020526040812054909114156133295761332282612c58565b9050611067565b600c546001600160a01b0383166000908152600e602052604090205414156133545761332282611f9c565b600d546001600160a01b0383166000908152600e6020526040902054141561337f576133228261169a565b6040805162461bcd60e51b815260206004820152601d60248201527f44656d6178476f7665726e616e63653a20554e4b4e4f574e5f54595045000000604482015290519081900360640190fd5b60035481565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106134575780518252601f199092019160209182019101613438565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146134b9576040519150601f19603f3d011682016040523d82523d6000602084013e6134be565b606091505b50915091508180156134ec5750805115806134ec57508080602001905160208110156134e957600080fd5b50515b6135275760405162461bcd60e51b81526004018080602001828103825260248152602001806142b96024913960400191505060405180910390fd5b505050505050565b6000811561355c5760005461354f906001600160a01b03163330866133d2565b6002805484019055613566565b61356633846137d4565b5090919050565b6000828201838110156135c7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600a80546001600160a01b03908116600090815260116020908152604080832054878516845260129092528220819055925490929161360f91168583613c66565b5060168054600181019091557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b039590951694851790556000938452600e6020526040909320919091555090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106136ee5780518252601f1990920191602091820191016136cf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613750576040519150601f19603f3d011682016040523d82523d6000602084013e613755565b606091505b5091509150818015613783575080511580613783575080806020019051602081101561378057600080fd5b50515b610af8576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b6001600160a01b03821660009081526004602052604090205481118015906137fc5750600081115b6138375760405162461bcd60e51b815260040180806020018281038252602181526020018061409c6021913960400191505060405180910390fd5b6001600160a01b038216600090815260046020526040902054613860908263ffffffff613c2416565b6001600160a01b03831660009081526004602052604090205560035461388c908263ffffffff613c2416565b6003555050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b178152925182516000946060949389169392918291908083835b602083106139105780518252601f1990920191602091820191016138f1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613972576040519150601f19603f3d011682016040523d82523d6000602084013e613977565b606091505b50915091508180156139a55750805115806139a557508080602001905160208110156139a257600080fd5b50515b610af8576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015290519081900360640190fd5b600080613a126c2b27aa22afa22aa920aa24a7a760991b612b9e565b430190506000600960009054906101000a90046001600160a01b03166001600160a01b03166325c8b42833888589896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b031681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613ab5578181015183820152602001613a9d565b50505050905090810190601f168015613ae25780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015613b15578181015183820152602001613afd565b50505050905090810190601f168015613b425780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b158015613b6657600080fd5b505af1158015613b7a573d6000803e3d6000fd5b505050506040513d6020811015613b9057600080fd5b505190506000613ba0828a6135ce565b6001600160a01b038381166000818152601260209081526040808320869055601082529182902080546001600160a01b031916948e16948517905581518c81529081018590528151949550919333927fbecc1c59284d3a0002610e2053ae509b936a7cc48b89c8e4ae512d88439482c692908290030190a450979650505050505050565b60006135c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614004565b6001600160a01b038316600090815260116020526040812054821115613cbd5760405162461bcd60e51b81526004018080602001828103825260258152602001806142166025913960400191505060405180910390fd5b6001600160a01b038416600090815260116020526040902054613ce6908363ffffffff613c2416565b6001600160a01b038086166000908152601160205260408082209390935590851681522054613d1b908363ffffffff61356d16565b6001600160a01b0380851660008181526011602090815260409182902094909455805186815290519193928816927f9a1235bd046c2240be8591059e10f06d41c18eda175b31373d512ad82fafa35a92918290030190a39392505050565b60008111613db7576040805162461bcd60e51b815260206004808301919091526024820152635a45524f60e01b604482015290519081900360640190fd5b6001600160a01b038216600090815260046020526040902054613de0908263ffffffff61356d16565b6001600160a01b038316600090815260046020526040902055600354613e0c908263ffffffff61356d16565b600355506001600160a01b03166000908152600560205260409020439055565b6000805460408051637b381b3560e01b81526004810185905290516001600160a01b0390921691637b381b359160248082019260209290919082900301818787803b158015613e7a57600080fd5b505af1158015612bfe573d6000803e3d6000fd5b60006060600860009054906101000a90046001600160a01b03166001600160a01b031663c7099b8a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613f1f57600080fd5b8101908080516040519392919084600160201b821115613f3e57600080fd5b908301906020820185811115613f5357600080fd5b82518660208202830111600160201b82111715613f6f57600080fd5b82525081516020918201928201910280838360005b83811015613f9c578181015183820152602001613f84565b50505050905001604052505050905060008090505b8151811015613ffa57836001600160a01b0316828281518110613fd057fe5b60200260200101516001600160a01b03161415613ff257600192505050611067565b600101613fb1565b5060009392505050565b600081848411156140935760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614058578181015183820152602001614040565b50505050905090810190601f1680156140855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe446761735374616b696e673a20494e53554646494349454e545f42414c414e434544656d6178476f7665726e616e63653a20555047524144455f4e4f5f52455741524444656d6178476f7665726e616e63653a20494e5055545f414444524553535f49535f5a45524f44656d6178476f7665726e616e63653a205245574152445f434f4c4c454354454444656d6178476f7665726e616e63653a20524543454956455f5245574152445f56414c55455f49535f5a45524f44656d6178476f7665726e616e63653a204144445f5245574152445f56414c55455f49535f5a45524f44656d6178476f7665726e616e63653a20555047524144455f4e4f5f4348414e474544656d6178476f7665726e616e63653a204e4f545f454e4f5547485f414d4f554e545f544f5f50524f504f53414c44656d6178476f7665726e616e63653a20544f4b454e5f5354415455535f4e4f5f4348414e474544656d6178476f7665726e616e63653a204f4e4c595f414c4c4f575f50454e44494e4744656d6178476f7665726e616e63653a20494e53554646494349454e545f42414c414e434544656d6178476f7665726e616e63653a2044454641554c545f4c4953545f544f4b454e535f50524f504f53414c5f44454e5944656d6178476f7665726e616e63653a204e4f545f454e4f5547485f414d4f554e545f544f5f4c49535444656d6178476f7665726e616e63653a204144445f5245574152445f4558434545445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454444656d6178476f7665726e616e63653a205354415455535f4e4f5f4348414e4745a2646970667358221220e1489db896bf6f78a500b244eb0d5d522292325e53e126363ca420322339079b64736f6c63430006060033000000000000000000000000ae9269f27437f0fcbc232d39ec814844a51d6b8f

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

000000000000000000000000ae9269f27437f0fcbc232d39ec814844a51d6b8f

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


Deployed ByteCode Sourcemap

16417:14991:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16417:14991:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;31018:385:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;31018:385:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16608:24;;;:::i;:::-;;;;;;;;;;;;;;;;7741:20;;;:::i;7768:23::-;;;:::i;16863:40::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16863:40:0;-1:-1:-1;;;;;16863:40:0;;:::i;30480:120::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30480:120:0;-1:-1:-1;;;;;30480:120:0;;:::i;:::-;;22663:1447;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22663:1447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22663:1447:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22663:1447:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;22663:1447:0;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22663:1447:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22663:1447:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;22663:1447:0;;-1:-1:-1;22663:1447:0;-1:-1:-1;22663:1447:0;:::i;:::-;;;;-1:-1:-1;;;;;22663:1447:0;;;;;;;;;;;;;;17028:64;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17028:64:0;;;;;;;;;;:::i;8824:353::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8824:353:0;;:::i;17099:45::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17099:45:0;-1:-1:-1;;;;;17099:45:0;;:::i;30608:402::-;;;:::i;7878:41::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7878:41:0;-1:-1:-1;;;;;7878:41:0;;:::i;25212:905::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;25212:905:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25212:905:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25212:905:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25212:905:0;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25212:905:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25212:905:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;25212:905:0;;-1:-1:-1;25212:905:0;-1:-1:-1;25212:905:0;:::i;21860:649::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21860:649:0;-1:-1:-1;;;;;21860:649:0;;:::i;16473:23::-;;;:::i;16704:43::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16704:43:0;-1:-1:-1;;;;;16704:43:0;;:::i;17153:24::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17153:24:0;;:::i;16503:25::-;;;:::i;16574:::-;;;:::i;7830:41::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7830:41:0;-1:-1:-1;;;;;7830:41:0;;:::i;16754:48::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16754:48:0;-1:-1:-1;;;;;16754:48:0;;:::i;16957:64::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16957:64:0;;;;;;;;;;:::i;28365:481::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28365:481:0;;:::i;26758:666::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26758:666:0;-1:-1:-1;;;;;26758:666:0;;:::i;16535:32::-;;;:::i;6861:20::-;;;:::i;7147:210::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7147:210:0;-1:-1:-1;;;;;7147:210:0;;:::i;16639:28::-;;;:::i;19876:1976::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19876:1976:0;-1:-1:-1;;;;;19876:1976:0;;:::i;8539:277::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8539:277:0;;:::i;27432:925::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27432:925:0;-1:-1:-1;;;;;27432:925:0;;:::i;30227:92::-;;;:::i;18310:480::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18310:480:0;;;;;;;;;;;;;;;;;;;:::i;22517:138::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22517:138:0;;:::i;16809:47::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16809:47:0;-1:-1:-1;;;;;16809:47:0;;:::i;113:24::-;;;:::i;16910:40::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16910:40:0;-1:-1:-1;;;;;16910:40:0;;:::i;19244:624::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19244:624:0;-1:-1:-1;;;;;19244:624:0;;:::i;24118:1089::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;24118:1089:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24118:1089:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24118:1089:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24118:1089:0;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24118:1089:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24118:1089:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;24118:1089:0;;-1:-1:-1;24118:1089:0;-1:-1:-1;24118:1089:0;:::i;16674:23::-;;;:::i;18798:438::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18798:438:0;-1:-1:-1;;;;;18798:438:0;;:::i;7798:25::-;;;:::i;31018:385::-;31087:4;31121:1;31112:6;:10;31104:68;;;;-1:-1:-1;;;31104:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31215:9;;31183:72;;-1:-1:-1;;;;;31215:9:0;31226:5;31241:4;31248:6;31183:31;:72::i;:::-;31275:10;;-1:-1:-1;;;;;31275:10:0;;;31266:20;;;;:8;:20;;;;;;;;;:30;;;;;;31307:11;:21;;;;;;31344:29;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31391:4:0;31018:385;;;;:::o;16608:24::-;;;;:::o;7741:20::-;;;;:::o;7768:23::-;;;;:::o;16863:40::-;;;;;;;;;;;;;:::o;30480:120::-;7091:5;;-1:-1:-1;;;;;7091:5:0;7077:10;:19;7069:50;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;;;;30558:9:::1;::::0;;30552:40:::1;::::0;;-1:-1:-1;;;30552:40:0;;-1:-1:-1;;;;;30552:40:0;;::::1;;::::0;::::1;::::0;;;30558:9;;;::::1;::::0;30552:34:::1;::::0;:40;;;;;;;;;;;30558:9;;30552:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;30552:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30552:40:0;;;;30480:120:::0;:::o;22663:1447::-;22817:7;22950:13;22965;22980:12;22994:10;23006:11;23034:10;;;;;;;;;-1:-1:-1;;;;;23034:10:0;-1:-1:-1;;;;;23021:34:0;;23056:5;23021:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23021:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23021:41:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23021:41:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23021:41:0;;-1:-1:-1;23021:41:0;-1:-1:-1;23021:41:0;;-1:-1:-1;23021:41:0;-1:-1:-1;23091:1:0;23081:11;;23073:55;;;;;-1:-1:-1;;;23073:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23157:8;23147:6;:18;;:40;;;;;23179:8;23169:6;:18;;23147:40;23139:77;;;;;-1:-1:-1;;;23139:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23227:9;23249:5;23239:6;:15;;:52;;23284:6;23276:5;:14;23239:52;;;23266:5;23257:6;:14;23239:52;23227:64;;23321:4;23310:7;:15;;23302:53;;;;;-1:-1:-1;;;23302:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22663:1447;;;;;;23396:48;-1:-1:-1;;;23396:14:0;:48::i;:::-;23385:7;:59;;23377:118;;;;-1:-1:-1;;;23377:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23509:11;;23506:160;;23547:36;23566:7;23575;23547:18;:36::i;:::-;23630:10;;-1:-1:-1;;;;;23630:10:0;23621:20;;;;:8;:20;;;;;;23537:46;;-1:-1:-1;23621:33:0;;23537:46;23621:33;:24;:33;:::i;:::-;23607:10;;-1:-1:-1;;;;;23607:10:0;23598:20;;;;:8;:20;;;;;:56;23506:160;23676:19;23713:41;-1:-1:-1;;;23713:14:0;:41::i;:::-;23698:12;:56;23676:78;;23765:18;23806:17;;;;;;;;;-1:-1:-1;;;;;23806:17:0;-1:-1:-1;;;;;23786:45:0;;23832:10;23844:6;23852:14;23868:8;;23878;;23786:101;;;;;;;;;;;;;-1:-1:-1;;;;;23786:101:0;-1:-1:-1;;;;;23786:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;23786:101:0;;;;;;;;;;;-1:-1:-1;23786:101:0;;;;;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23786:101:0;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23786:101:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23786:101:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23786:101:0;-1:-1:-1;;;;;23898:25:0;;;;;;:13;23786:101;23898:25;;;;:33;;;23983:8;;23786:101;;-1:-1:-1;23898:25:0;23956:36;;23786:101;;23956:14;:36::i;:::-;24008:66;;;;;;;;;;;;;;;;;;;;23942:50;;-1:-1:-1;;;;;;24008:66:0;;;24028:10;;24008:66;;;;;;;;;;-1:-1:-1;24092:10:0;22663:1447;-1:-1:-1;;;;;;;;;;22663:1447:0:o;17028:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8824:353::-;8938:8;;8924:10;8874:4;8914:21;;;:9;:21;;;;;;8874:4;;8914:32;8899:12;:47;8891:80;;;;;-1:-1:-1;;;8891:80:0;;;;;;;;;;;;-1:-1:-1;;;8891:80:0;;;;;;;;;;;;;;;9010:9;;8982:59;;-1:-1:-1;;;;;9010:9:0;9021:10;9033:7;8982:27;:59::i;:::-;9052:28;9060:10;9072:7;9052;:28::i;:::-;9112:9;;9105:42;;;-1:-1:-1;;;9105:42:0;;9141:4;9105:42;;;;;;-1:-1:-1;;;;;9112:9:0;;;;9105:27;;:42;;;;;;;;;;;;;;;9112:9;9105:42;;;2:2:-1;;;;27:1;24;17:12;2:2;9105:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9105:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9105:42:0;9091:11;:56;-1:-1:-1;9165:4:0;8824:353;;;;:::o;17099:45::-;;;;;;;;;;;;-1:-1:-1;;;;;17099:45:0;;:::o;30608:402::-;30692:10;;-1:-1:-1;;;;;30692:10:0;30658:4;30683:20;;;:8;:20;;;;;;30675:71;;;;-1:-1:-1;;;30675:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30778:10;;30765:35;;;-1:-1:-1;;;30765:35:0;;;;30812:4;;-1:-1:-1;;;;;30778:10:0;;30765:33;;:35;;;;;;;;;;;;;;30778:10;30765:35;;;2:2:-1;;;;27:1;24;17:12;2:2;30765:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30765:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30765:35:0;-1:-1:-1;;;;;30765:52:0;;;30757:99;;;;-1:-1:-1;;;30757:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30894:9;;30918:10;;30905:35;;;-1:-1:-1;;;30905:35:0;;;;30867:96;;-1:-1:-1;;;;;30894:9:0;;;;30918:10;;30905:33;;:35;;;;;;;;;;;;;;30918:10;30905:35;;;2:2:-1;;;;27:1;24;17:12;2:2;30905:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30905:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30905:35:0;30951:10;;-1:-1:-1;;;;;30951:10:0;30942:20;;;;:8;30905:35;30942:20;;;;;30867:26;:96::i;:::-;-1:-1:-1;30990:10:0;;-1:-1:-1;;;;;30990:10:0;30981:20;;;;:8;:20;;;;;;30608:402;:::o;7878:41::-;;;;;;;;;;;;;:::o;25212:905::-;25394:10;;25379:46;;;-1:-1:-1;;;25379:46:0;;-1:-1:-1;;;;;25379:46:0;;;;;;;;;25345:7;;;;25394:10;;25379:38;;:46;;;;;;;;;;;;;;25394:10;25379:46;;;2:2:-1;;;;27:1;24;17:12;2:2;25379:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25379:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25379:46:0;25469:10;;25454:33;;;-1:-1:-1;;;25454:33:0;;;;25379:46;;-1:-1:-1;;;;;;25469:10:0;;;;25454:31;;:33;;;;;25379:46;;25454:33;;;;;;;;25469:10;25454:33;;;2:2:-1;;;;27:1;24;17:12;2:2;25454:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25454:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25454:33:0;25444:43;;;:92;;;25516:10;;;;;;;;;-1:-1:-1;;;;;25516:10:0;-1:-1:-1;;;;;25501:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25501:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25501:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25501:35:0;25491:45;;25444:92;25436:128;;;;;-1:-1:-1;;;25436:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25591:44;-1:-1:-1;;;25591:14:0;:44::i;:::-;25580:7;:55;;25572:110;;;;-1:-1:-1;;;25572:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25690:18:0;;;;;;:10;:18;;;;;:31;;-1:-1:-1;;;;;;25690:31:0;25711:10;25690:31;;;25735:11;;25732:114;;25798:36;25817:7;25826;25798:18;:36::i;:::-;25776:10;25763:24;;;;:12;:24;;;;;;;;-1:-1:-1;;;;;25763:32:0;;;;;;;;;:71;25732:114;25868:10;;25853:48;;;-1:-1:-1;;;25853:48:0;;-1:-1:-1;;;;;25853:48:0;;;;;;;;;25868:10;;;;;25853:40;;:48;;;;;;;;;;;;;;25868:10;;25853:48;;;2:2:-1;;;;27:1;24;17:12;2:2;25853:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25853:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25952:12:0;;25989:10;;25974:36;;;-1:-1:-1;;;25974:36:0;;;;25912:18;;25933:98;;25952:12;;25966:6;;-1:-1:-1;;;;;25989:10:0;;;;25974:34;;:36;;;;;25853:48;;25974:36;;;;;;;;25989:10;25974:36;;;2:2:-1;;;;27:1;24;17:12;2:2;25974:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25974:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25974:36:0;25933:98;;;25974:36;25933:98;;;;;;;;;;;;;;;;;;;26012:8;;;;;;25933:98;;26012:8;;;;25933:98;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;25933:98:0;;;;137:4:-1;25933:98:0;;;;;;;;;;;;;;;;;;-1:-1:-1;26022:8:0;;-1:-1:-1;26022:8:0;;;;25933:98;;26022:8;;;;25933:98;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;25933:18:0;;-1:-1:-1;;;25933:98:0:i;:::-;26044:40;;;26056:10;26044:40;;-1:-1:-1;;;;;26044:40:0;;;;;;;;;;;;;;25912:119;;-1:-1:-1;26044:40:0;;;;;;;;;;26102:10;25212:905;-1:-1:-1;;;;;;;;;25212:905:0:o;21860:649::-;21913:4;21930:11;21957:7;-1:-1:-1;;;;;21944:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21944:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21944:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21944:27:0;21996:29;;;-1:-1:-1;;;21996:29:0;;;;21944:27;;-1:-1:-1;21982:11:0;;-1:-1:-1;;;;;21996:27:0;;;;;:29;;;;;21944:27;;21996:29;;;;;;;:27;:29;;;2:2:-1;;;;27:1;24;17:12;2:2;21996:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21996:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21996:29:0;-1:-1:-1;;;;;22052:21:0;;;22036:13;22052:21;;;:12;21996:29;22052:21;;;;;;;;;;22099:17;;;:10;:17;;;;;;;22150:10;;22135:45;;-1:-1:-1;;;22135:45:0;;;;;;;;;;21996:29;;-1:-1:-1;22052:21:0;;22099:17;;;;21996:29;;22150:10;;22135:38;;:45;;;;;;;;;;;22150:10;22135:45;;;2:2:-1;;;;27:1;24;17:12;2:2;22135:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22135:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22135:45:0;:55;;22127:107;;;;-1:-1:-1;;;22127:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22249:6;22245:179;;;22287:10;;22272:53;;;-1:-1:-1;;;22272:53:0;;-1:-1:-1;;;;;22272:53:0;;;;;;;;;;;;;;;22287:10;;;;;22272:38;;:53;;;;;;;;;;;;;;22287:10;;22272:53;;;2:2:-1;;;;27:1;24;17:12;2:2;22272:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22272:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22245:179:0;;-1:-1:-1;22245:179:0;;22382:10;;22367:45;;;-1:-1:-1;;;22367:45:0;;-1:-1:-1;;;;;22367:45:0;;;;;;;;;22382:10;;;;;22367:38;;:45;;;;;;;;;;;;;;22382:10;22367:45;;;2:2:-1;;;;27:1;24;17:12;2:2;22367:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22367:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22367:45:0;;-1:-1:-1;22245:179:0;22436:41;;;-1:-1:-1;;;;;22436:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22495:6:0;;21860:649;-1:-1:-1;;;;21860:649:0:o;16473:23::-;;;;:::o;16704:43::-;;;;;;;;;;;;;:::o;17153:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17153:24:0;;-1:-1:-1;17153:24:0;:::o;16503:25::-;;;-1:-1:-1;;;;;16503:25:0;;:::o;16574:::-;;;-1:-1:-1;;;;;16574:25:0;;:::o;7830:41::-;;;;;;;;;;;;;:::o;16754:48::-;;;;;;;;;;;;;:::o;16957:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;28365:481::-;18135:10;;28428:4;;-1:-1:-1;;;;;18135:10:0;18121;:24;18113:67;;;;;-1:-1:-1;;;18113:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28462:1:::1;28453:6;:10;28445:64;;;;-1:-1:-1::0;;;28445:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28520:10;28540:9:::0;;28533:42:::1;::::0;;-1:-1:-1;;;28533:42:0;;28569:4:::1;28533:42;::::0;::::1;::::0;;;-1:-1:-1;;;;;28540:9:0;;::::1;::::0;28533:27:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;28540:9;28533:42;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28533:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28533:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28533:42:0;28608:11:::1;::::0;28533:42;;-1:-1:-1;28586:9:0::1;::::0;28598:22:::1;::::0;28533:42;;28598:22:::1;:9;:22;:::i;:::-;28586:34;;28649:4;28639:6;:14;;28631:61;;;;-1:-1:-1::0;;;28631:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28735:10;::::0;-1:-1:-1;;;;;28735:10:0::1;28726:20;::::0;;;:8:::1;:20;::::0;;;;;:32:::1;::::0;28751:6;28726:32:::1;:24;:32;:::i;:::-;28712:10;::::0;;-1:-1:-1;;;;;28712:10:0;;::::1;28703:20;::::0;;;:8:::1;:20;::::0;;;;;;;;:55;;;;28769:11:::1;:19:::0;;;28819:10;;28804:34;;;;;;;28819:10;::::1;::::0;28804:34:::1;::::0;;;;;;::::1;18191:1;;28365:481:::0;;;:::o;26758:666::-;26816:4;26870:7;-1:-1:-1;;;;;26857:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26857:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26857:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26857:38:0;26841:12;:54;;26833:97;;;;;-1:-1:-1;;;26833:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26950:21:0;;;;;;:12;:21;;;;;;;;26972:10;26950:33;;;;;;;;;;26949:34;26941:80;;;;-1:-1:-1;;;26941:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27032:11;27046:18;27056:7;27046:9;:18::i;:::-;27032:32;;27075:44;27091:7;27100:10;27112:6;27075:15;:44::i;:::-;-1:-1:-1;27164:10:0;27154:21;;;;:9;:21;;;;;;:33;;27180:6;27154:33;:25;:33;:::i;:::-;27140:10;27130:21;;;;:9;:21;;;;;:57;27214:13;;:25;;27232:6;27214:25;:17;:25;:::i;:::-;27198:13;:41;27282:10;27273:20;;;;:8;:20;;;;;;:32;;27298:6;27273:32;:24;:32;:::i;:::-;27259:10;27250:20;;;;:8;:20;;;;;;;;:55;;;;-1:-1:-1;;;;;27316:21:0;;;;;:12;:21;;;;;:33;;;;;;;;;:40;;-1:-1:-1;;27316:40:0;27352:4;27316:40;;;27372:44;;;;;;;27316:21;;27372:44;;;;;;;;;;;26758:666;;;;:::o;16535:32::-;;;-1:-1:-1;;;;;16535:32:0;;:::o;6861:20::-;;;-1:-1:-1;;;;;6861:20:0;;:::o;7147:210::-;7091:5;;-1:-1:-1;;;;;7091:5:0;7077:10;:19;7069:50;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7223:23:0;::::1;7215:60;;;::::0;;-1:-1:-1;;;7215:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7304:5;::::0;7291:30:::1;::::0;-1:-1:-1;;;;;7291:30:0;;::::1;::::0;7304:5:::1;::::0;7291:30:::1;::::0;7304:5:::1;::::0;7291:30:::1;7332:5;:17:::0;;-1:-1:-1;;;;;;7332:17:0::1;-1:-1:-1::0;;;;;7332:17:0;;;::::1;::::0;;;::::1;::::0;;7147:210::o;16639:28::-;;;;:::o;19876:1976::-;19933:4;19950:11;19977:7;-1:-1:-1;;;;;19964:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19964:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19964:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19964:27:0;-1:-1:-1;;;;;20018:21:0;;;20002:13;20018:21;;;:12;19964:27;20018:21;;;;;;;;;;20065:17;;;:10;:17;;;;;;;20165:10;;20150:39;;-1:-1:-1;;;20150:39:0;;;;19964:27;;-1:-1:-1;20018:21:0;;20065:17;;;;20165:10;;;;;20150:37;;:39;;;;;19964:27;;20150:39;;;;;;20165:10;20150:39;;;2:2:-1;;;;27:1;24;17:12;2:2;20150:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20150:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20150:39:0;20116:10;;20101:45;;;-1:-1:-1;;;20101:45:0;;-1:-1:-1;;;;;20101:45:0;;;;;;;;;20116:10;;;;;20101:38;;:45;;;;;20150:39;;20101:45;;;;;;;20116:10;20101:45;;;2:2:-1;;;;27:1;24;17:12;2:2;20101:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20101:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20101:45:0;:88;20093:125;;;;;-1:-1:-1;;;20093:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20229:11;20243:6;:83;;20306:10;;;;;;;;;-1:-1:-1;;;;;20306:10:0;-1:-1:-1;;;;;20291:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20291:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20291:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20291:35:0;20243:83;;;20267:10;;;;;;;;;-1:-1:-1;;;;;20267:10:0;-1:-1:-1;;;;;20252:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20252:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20252:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20252:36:0;20243:83;-1:-1:-1;;;;;20348:18:0;;;20334:11;20348:18;;;:12;:18;;;;;;;;:25;;;;;;;;;;;;20229:97;;-1:-1:-1;20334:11:0;;20462:1269;;;;20586:10;;;;;;;;;-1:-1:-1;;;;;20586:10:0;-1:-1:-1;;;;;20573:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20573:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20573:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20573:46:0;20511:59;11607:42;20511:14;:59::i;:::-;20502:6;:68;:117;;;;;;;-1:-1:-1;20649:19:0;;;;-1:-1:-1;20687:14:0;;20683:177;;20750:9;;;20722:62;;-1:-1:-1;;;;;20750:9:0;;;;20773:10;20722:27;:62::i;:::-;20817:11;;:27;;20833:10;20817:27;:15;:27;:::i;:::-;20803:11;:41;20683:177;20878:16;;20874:261;;20947:10;;-1:-1:-1;;;;;20947:10:0;20938:20;;;;:8;:20;;;;;;:38;;20963:12;20938:38;:24;:38;:::i;:::-;20924:10;;-1:-1:-1;;;;;20924:10:0;;;20915:20;;;;:8;:20;;;;;;;;:61;;;;21015:17;;;;;:8;:17;;;;;:35;;21037:12;21015:35;:21;:35;:::i;:::-;-1:-1:-1;;;;;20995:17:0;;;;;;;:8;:17;;;;;:55;;;;21085:10;;21069:50;;21085:10;21004:7;21106:12;21069:15;:50::i;:::-;;20874:261;21164:10;;21149:46;;;-1:-1:-1;;;21149:46:0;;-1:-1:-1;;;;;21149:46:0;;;;;;;;;21164:10;;;;;21149:39;;:46;;;;;;;;;;;;;;21164:10;;21149:46;;;2:2:-1;;;;27:1;24;17:12;2:2;21149:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21149:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20462:1269:0;;-1:-1:-1;20462:1269:0;;21325:10;;;;;;;;;-1:-1:-1;;;;;21325:10:0;-1:-1:-1;;;;;21312:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21312:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21312:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21312:46:0;21250:59;11500:42;21250:14;:59::i;:::-;21241:6;:68;:117;;;;;;;-1:-1:-1;;21388:19:0;;;21426:14;;21422:82;;21470:9;;;21442:62;;-1:-1:-1;;;;;21470:9:0;;;;21493:10;21442:27;:62::i;:::-;21523:16;;21519:80;;21569:9;;21541:58;;-1:-1:-1;;;;;21569:9:0;21580:4;21586:12;21541:27;:58::i;:::-;21628:11;;:23;;21644:6;21628:23;:15;:23;:::i;:::-;21614:11;:37;21681:10;;21666:53;;;-1:-1:-1;;;21666:53:0;;-1:-1:-1;;;;;21666:53:0;;;;;;;;;;;;;;;21681:10;;;;;21666:38;;:53;;;;;;;;;;;;;;21681:10;;21666:53;;;2:2:-1;;;;27:1;24;17:12;2:2;21666:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21666:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;20462:1269:0;21743:77;;;-1:-1:-1;;;;;21743:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21838:6:0;;19876:1976;-1:-1:-1;;;;;;;;19876:1976:0:o;8539:277::-;8588:4;8637:9;;8605:78;;-1:-1:-1;;;;;8637:9:0;8648:10;8668:4;8675:7;8605:31;:78::i;:::-;8694:25;8699:10;8711:7;8694:4;:25::i;27432:925::-;27489:4;27538:7;-1:-1:-1;;;;;27525:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27525:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27525:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27525:38:0;27510:12;:53;;:90;;-1:-1:-1;;;;;;27567:21:0;;;;;;:12;:21;;;;;;;;27589:10;27567:33;;;;;;;;;;27510:90;27506:131;;;-1:-1:-1;27624:1:0;27617:8;;27506:131;-1:-1:-1;;;;;27683:17:0;;27647:11;27683:17;;;:8;:17;;;;;;;;;27715:30;;-1:-1:-1;;;27715:30:0;;;;27647:11;;27683:17;;;;27715:28;;:30;;;;;;;;;;;27683:17;27715:30;;;2:2:-1;;;;27:1;24;17:12;2:2;27715:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27715:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27715:30:0;27711:446;;;27762:10;27787:15;27805:47;-1:-1:-1;;;27805:14:0;:47::i;:::-;27787:65;-1:-1:-1;27872:14:0;;27867:164;;27949:10;;;;;;;;;-1:-1:-1;;;;;27949:10:0;-1:-1:-1;;;;;27936:44:0;;:46;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27936:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27936:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27936:46:0;27914:19;;;27936:46;27914:68;;;;;27906:76;;28010:5;28000:15;;;;27867:164;28076:7;-1:-1:-1;;;;;28063:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28063:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28063:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28063:32:0;-1:-1:-1;;;;;28049:46:0;:10;:46;28045:101;;;28125:5;28116:14;;28045:101;27711:446;;;28205:1;28186:7;-1:-1:-1;;;;;28173:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28173:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28173:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28173:29:0;:33;28169:157;;;28298:7;-1:-1:-1;;;;;28285:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28285:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28285:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28285:29:0;28242:40;;;-1:-1:-1;;;28242:40:0;;28271:10;28242:40;;;;;;-1:-1:-1;;;;;28242:28:0;;;;;:40;;;;;28285:29;;28242:40;;;;;;;:28;:40;;;2:2:-1;;;;27:1;24;17:12;2:2;28242:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28242:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28242:40:0;28233:49;;:81;;;;;;28223:91;;;;28169:157;-1:-1:-1;28343:6:0;27432:925;-1:-1:-1;;27432:925:0:o;30227:92::-;30297:7;:14;30227:92;:::o;18310:480::-;7091:5;;-1:-1:-1;;;;;7091:5:0;7077:10;:19;7069:50;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;-1:-1:-1;;;7069:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18446:25:0;::::1;::::0;;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;18475:33:0;::::1;::::0;::::1;18446:62;:98;;;;-1:-1:-1::0;;;;;;18512:32:0;::::1;::::0;::::1;18446:98;18438:149;;;;-1:-1:-1::0;;;18438:149:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18600:10;:24:::0;;-1:-1:-1;;;;;18600:24:0;;::::1;-1:-1:-1::0;;;;;;18600:24:0;;::::1;;::::0;;;18635:10:::1;:32:::0;;;;::::1;::::0;;::::1;;::::0;;18678:17:::1;:38:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;18738:44:::1;-1:-1:-1::0;;;18738:14:0::1;:44::i;:::-;18727:8;:55:::0;-1:-1:-1;;;18310:480:0:o;22517:138::-;22614:10;;22601:46;;;-1:-1:-1;;;22601:46:0;;;;;;;;;;22577:4;;-1:-1:-1;;;;;22614:10:0;;22601:39;;:46;;;;;;;;;;;;;;22614:10;22601:46;;;2:2:-1;;;;27:1;24;17:12;2:2;22601:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22601:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22601:46:0;;22517:138;-1:-1:-1;;22517:138:0:o;16809:47::-;;;;;;;;;;;;-1:-1:-1;;;;;16809:47:0;;:::o;113:24::-;;;-1:-1:-1;;;;;113:24:0;;:::o;16910:40::-;;;;;;;;;;;;;:::o;19244:624::-;19298:4;19315:11;19342:7;-1:-1:-1;;;;;19329:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19329:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19329:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19329:27:0;;-1:-1:-1;19329:27:0;19367:43;;;;;-1:-1:-1;;;19367:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19421:10;19447:7;-1:-1:-1;;;;;19434:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19434:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19434:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19434:29:0;-1:-1:-1;;;;;19489:22:0;;;19474:12;19489:22;;;:13;19434:29;19489:22;;;;;;;;19544:10;;19531:55;;-1:-1:-1;;;19531:55:0;;;;;;;;;;;;;;;;19434:29;;-1:-1:-1;19489:22:0;;19544:10;;;19531:42;;:55;;;;;19434:29;19531:55;;;;;;;19544:10;19531:55;;;2:2:-1;;;;27:1;24;17:12;2:2;19531:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19531:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19531:55:0;;-1:-1:-1;;;;19601:36:0;;19597:189;;;19654:8;:16;;;19597:189;;;-1:-1:-1;;;19692:4:0;:37;19688:98;;;19746:28;19768:5;19746:21;:28::i;:::-;;19688:98;19801:35;;;;;;;;;;;;;;-1:-1:-1;;;;;19801:35:0;;;;;;;;;;;-1:-1:-1;19854:6:0;;19244:624;-1:-1:-1;;;19244:624:0:o;24118:1089::-;24272:7;24301:23;24317:6;24301:15;:23::i;:::-;24300:24;24292:87;;;;-1:-1:-1;;;24292:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24419:10;;24404:46;;;-1:-1:-1;;;24404:46:0;;-1:-1:-1;;;;;24404:46:0;;;;;;;;;24390:11;;24419:10;;;;;24404:38;;:46;;;;;;;;;;;;;;;24419:10;24404:46;;;2:2:-1;;;;27:1;24;17:12;2:2;24404:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24404:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24404:46:0;24494:10;;24479:36;;;-1:-1:-1;;;24479:36:0;;;;24404:46;;-1:-1:-1;;;;;;24494:10:0;;;;24479:34;;:36;;;;;24404:46;;24479:36;;;;;;;;24494:10;24479:36;;;2:2:-1;;;;27:1;24;17:12;2:2;24479:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24479:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24479:36:0;24469:46;;24461:94;;;;-1:-1:-1;;;24461:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24599:10;;;;;;;;;-1:-1:-1;;;;;24599:10:0;-1:-1:-1;;;;;24584:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24584:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24584:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24584:35:0;24574:45;;;:94;;;24648:10;;;;;;;;;-1:-1:-1;;;;;24648:10:0;-1:-1:-1;;;;;24633:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24633:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24633:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24633:35:0;24623:45;;24574:94;24566:138;;;;;-1:-1:-1;;;24566:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24733:6;24723;:16;;24715:62;;;;-1:-1:-1;;;24715:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24807:48;-1:-1:-1;;;24807:14:0;:48::i;:::-;24796:7;:59;;24788:118;;;;-1:-1:-1;;;24788:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24920:11;;24917:160;;24958:36;24977:7;24986;24958:18;:36::i;:::-;25041:10;;-1:-1:-1;;;;;25041:10:0;25032:20;;;;:8;:20;;;;;;24948:46;;-1:-1:-1;25032:33:0;;24948:46;25032:33;:24;:33;:::i;:::-;25018:10;;-1:-1:-1;;;;;25018:10:0;25009:20;;;;:8;:20;;;;;:56;24917:160;25087:18;25108:63;25127:7;;25136:6;25144;25152:8;;25108:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;25108:63:0;;;;137:4:-1;25108:63:0;;;;;;;;;;;;;;;;;;-1:-1:-1;25162:8:0;;-1:-1:-1;25162:8:0;;;;25108:63;;25162:8;;;;25108:63;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;25108:18:0;;-1:-1:-1;;;25108:63:0:i;:::-;25087:84;24118:1089;-1:-1:-1;;;;;;;;;;;24118:1089:0:o;16674:23::-;;;;:::o;18798:438::-;18892:8;;-1:-1:-1;;;;;18868:20:0;;18848:4;18868:20;;;:11;:20;;;;;;18848:4;;18868:32;18865:364;;;18924:20;18936:7;18924:11;:20::i;:::-;18917:27;;;;18865:364;18990:12;;-1:-1:-1;;;;;18966:20:0;;;;;;:11;:20;;;;;;:36;18962:267;;;19026:23;19041:7;19026:14;:23::i;18962:267::-;19095:7;;-1:-1:-1;;;;;19071:20:0;;;;;;:11;:20;;;;;;:31;19067:162;;;19126:19;19137:7;19126:10;:19::i;19067:162::-;19178:39;;;-1:-1:-1;;;19178:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7798:25;;;;:::o;10202:402::-;10427:51;;;-1:-1:-1;;;;;10427:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10427:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10416:63:0;;;;10381:12;;10395:17;;10416:10;;;;10427:51;10416:63;;;25:18:-1;10416:63:0;;25:18:-1;36:153;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;;;10416:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10380:99:0;;;;10498:7;:57;;;;-1:-1:-1;10510:11:0;;:16;;:44;;;10541:4;10530:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10530:24:0;10510:44;10490:106;;;;-1:-1:-1;;;10490:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10202:402;;;;;;:::o;29555:339::-;29629:4;29650:7;29646:216;;;29706:9;;29674:78;;-1:-1:-1;;;;;29706:9:0;29717:10;29737:4;29744:7;29674:31;:78::i;:::-;29767:11;:22;;;;;;29646:216;;;29822:28;29830:10;29842:7;29822;:28::i;:::-;-1:-1:-1;29879:7:0;;29555:339;-1:-1:-1;29555:339:0:o;2294:181::-;2352:7;2384:5;;;2408:6;;;;2400:46;;;;;-1:-1:-1;;;2400:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2466:1;2294:181;-1:-1:-1;;;2294:181:0:o;29902:317::-;30013:10;;;-1:-1:-1;;;;;30013:10:0;;;29973:4;30004:20;;;:8;:20;;;;;;;;;30035:17;;;;;:8;:17;;;;;:26;;;30088:10;;29973:4;;30004:20;30072:44;;30088:10;30044:7;30004:20;30072:15;:44::i;:::-;-1:-1:-1;30127:7:0;27:10:-1;;39:1;23:18;;45:23;;;30127:21:0;;;;-1:-1:-1;;;;;;30127:21:0;-1:-1:-1;;;;;30127:21:0;;;;;;;;;-1:-1:-1;30159:20:0;;;:11;30127:21;30159:20;;;;;:28;;;;-1:-1:-1;30205:6:0;29902:317::o;9833:361::-;10028:45;;;-1:-1:-1;;;;;10028:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10028:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10017:57:0;;;;9982:12;;9996:17;;10017:10;;;;10028:45;10017:57;;;25:18:-1;10017:57:0;;25:18:-1;36:153;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;;;10017:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9981:93:0;;;;10093:7;:57;;;;-1:-1:-1;10105:11:0;;:16;;:44;;;10136:4;10125:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10125:24:0;10105:44;10085:101;;;;;-1:-1:-1;;;10085:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8271:260;-1:-1:-1;;;;;8342:15:0;;;;;;:9;:15;;;;;;:24;-1:-1:-1;8342:24:0;;;:37;;;8378:1;8370:5;:9;8342:37;8334:83;;;;-1:-1:-1;;;8334:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8446:15:0;;;;;;:9;:15;;;;;;:26;;8466:5;8446:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;8428:15:0;;;;;;:9;:15;;;;;:44;8499:13;;:24;;8517:5;8499:24;:17;:24;:::i;:::-;8483:13;:40;-1:-1:-1;;8271:260:0:o;9467:358::-;9660:45;;;-1:-1:-1;;;;;9660:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9660:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9649:57:0;;;;9614:12;;9628:17;;9649:10;;;;9660:45;9649:57;;;25:18:-1;9649:57:0;;25:18:-1;36:153;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;;;9649:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;9613:93:0;;;;9725:7;:57;;;;-1:-1:-1;9737:11:0;;:16;;:44;;;9768:4;9757:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9757:24:0;9737:44;9717:100;;;;;-1:-1:-1;;;9717:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26125:625;26259:7;26279:19;26316:41;-1:-1:-1;;;26316:14:0;:41::i;:::-;26301:12;:56;26279:78;;26368:18;26409:17;;;;;;;;;-1:-1:-1;;;;;26409:17:0;-1:-1:-1;;;;;26389:45:0;;26435:10;26447:6;26455:14;26471:8;26481;26389:101;;;;;;;;;;;;;-1:-1:-1;;;;;26389:101:0;-1:-1:-1;;;;;26389:101: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;26389:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26389:101: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;26389:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26389:101:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26389:101:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26389:101:0;;-1:-1:-1;26501:11:0;26515:33;26389:101;26542:5;26515:14;:33::i;:::-;-1:-1:-1;;;;;26559:20:0;;;;;;;:8;:20;;;;;;;;:29;;;26599:12;:24;;;;;;:33;;-1:-1:-1;;;;;;26599:33:0;;;;;;;;;26648:66;;;;;;;;;;;;;26559:29;;-1:-1:-1;26559:20:0;;26667:10;;26648:66;;;;;;;;;-1:-1:-1;26732:10:0;26125:625;-1:-1:-1;;;;;;;26125:625:0:o;2758:136::-;2816:7;2843:43;2847:1;2850;2843:43;;;;;;;;;;;;;;;;;:3;:43::i;28854:358::-;-1:-1:-1;;;;;28977:15:0;;28937:4;28977:15;;;:8;:15;;;;;;-1:-1:-1;;28977:25:0;28954:90;;;;-1:-1:-1;;;28954:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29073:15:0;;;;;;:8;:15;;;;;;:27;;29093:6;29073:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;29055:15:0;;;;;;;:8;:15;;;;;;:45;;;;29127:13;;;;;;;:25;;29145:6;29127:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;29111:13:0;;;;;;;:8;:13;;;;;;;;;:41;;;;29168:36;;;;;;;29111:13;;29168:36;;;;;;;;;;;;;28854:358;;;;;:::o;8022:241::-;8098:1;8090:5;:9;8082:26;;;;;-1:-1:-1;;;8082:26:0;;;;;;;;;;;;;;;-1:-1:-1;;;8082:26:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8137:15:0;;;;;;:9;:15;;;;;;:26;;8157:5;8137:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;8119:15:0;;;;;;:9;:15;;;;;:44;8190:13;;:24;;8208:5;8190:24;:17;:24;:::i;:::-;8174:13;:40;-1:-1:-1;;;;;;8225:15:0;;;;;:9;:15;;;;;8243:12;8225:30;;8022:241::o;30327:145::-;30389:4;30419:9;;30413:51;;;-1:-1:-1;;;30413:51:0;;;;;;;;;;-1:-1:-1;;;;;30419:9:0;;;;30413:43;;:51;;;;;;;;;;;;;;;30389:4;30419:9;30413:51;;;2:2:-1;;;;27:1;24;17:12;2:2;30413:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;29220:327:0;29279:4;29296:23;29335:10;;;;;;;;;-1:-1:-1;;;;;29335:10:0;-1:-1:-1;;;;;29322:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29322:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29322:47:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29322:47:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;29322:47:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;29322:47:0;;421:4:-1;412:14;;;;29322:47:0;;;;;412:14:-1;29322:47: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;29322:47:0;;;;;;;;;;;29296:73;;29384:6;29393:1;29384:10;;29380:137;29401:6;:13;29397:1;:17;29380:137;;;29452:6;-1:-1:-1;;;;;29439:19:0;:6;29446:1;29439:9;;;;;;;;;;;;;;-1:-1:-1;;;;;29439:19:0;;29435:71;;;29486:4;29479:11;;;;;;29435:71;29416:3;;29380:137;;;-1:-1:-1;29534:5:0;;29220:327;-1:-1:-1;;;29220:327:0:o;3197:192::-;3283:7;3319:12;3311:6;;;;3303:29;;;;-1:-1:-1;;;3303: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;3303:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3355:5:0;;;3197:192::o

Swarm Source

ipfs://e1489db896bf6f78a500b244eb0d5d522292325e53e126363ca420322339079b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.