ETH Price: $3,380.06 (-1.63%)
Gas: 2 Gwei

Token

AurusGOLD (AWG)
 

Overview

Max Total Supply

48,854 AWG

Holders

470 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
25 AWG

Value
$0.00
0x14d5660762f20074a85a512f7c75a0103f57bc64
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

InsertTokenName token contract has migrated to a new address.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AWG

Compiler Version
v0.5.4+commit.9549d8ff

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-04-28
*/

// File: openzeppelin-solidity/contracts/access/Roles.sol
pragma solidity 0.5.4;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: contracts/roles/BurnerRole.sol
/**
 * @title Burner Role
 * @dev Follows the openzeppelin's guidelines of working with roles.
 * @dev Derived contracts must implement the `addBurner` and the `removeBurner` functions.
 */
contract BurnerRole {

    using Roles for Roles.Role;

    Roles.Role private _burners;

    /**
     * @notice Fired when a new role is added.
     */
    event BurnerAdded(address indexed account);

    /**
     * @notice Fired when a new role is added.
     */
    event BurnerRemoved(address indexed account);

    /**
     * @dev The role is granted to the deployer.
     */
    constructor () internal {
        _addBurner(msg.sender);
    }

    /**
     * @dev Callers must have the role.
     */
    modifier onlyBurner() {
        require(isBurner(msg.sender), "BurnerRole: caller does not have the Burner role");
        _;
    }

    /**
     * @dev The role is removed for the caller.    
     */
    function renounceBurner() public {
        _removeBurner(msg.sender);
    }

    /**
     * @dev Checks if @param account has the role.
     */
    function isBurner(address account) public view returns (bool) {
        return _burners.has(account);
    }

    /**
     * @dev Assigns the role to @param account.
     */
    function _addBurner(address account) internal {
        _burners.add(account);
        emit BurnerAdded(account);
    }

    /**
     * @dev Removes the role from @param account.
     */
    function _removeBurner(address account) internal {
        _burners.remove(account);
        emit BurnerRemoved(account);
    }

}

// File: contracts/roles/MinterRole.sol
/**
 * @title Minter Role
 * @dev Follows the openzeppelin's guidelines of working with roles.
 * @dev Derived contracts must implement the `addMinter` and the `removeMinter` functions.
 */
contract MinterRole {
    
    using Roles for Roles.Role;

    Roles.Role private _minters;

    /**
     * @notice Fired when a new role is added.
     */
    event MinterAdded(address indexed account);

    /**
     * @notice Fired when a new role is added.
     */
    event MinterRemoved(address indexed account);

    /**
     * @dev The role is granted to the deployer.
     */
    constructor () internal {
        _addMinter(msg.sender);
    }

    /**
     * @dev Callers must have the role.
     */
    modifier onlyMinter() {
        require(isMinter(msg.sender), "MinterRole: caller does not have the Minter role");
        _;
    }

    /**
     * @dev The role is removed for the caller.    
     */
    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    /**
     * @dev Checks if @param account has the role.
     */
    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    /**
     * @dev Assigns the role to @param account.
     */
    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    /**
     * @dev Removes the role from @param account.
     */
    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }

}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Emitted when the `owner` initiates a force transfer
     *
     * Note that `value` may be zero.
     * Note that `details` may be zero.
     */
    event ForceTransfer(address indexed from, address indexed to, uint256 value, bytes32 details);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol
/**
 * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Fee.sol
/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20Fee is IERC20 {
    using SafeMath for uint256;


    mapping (address => uint256) private _balances;

    /**
     * @dev List of whitelisted accounts.
     * 0 = default (initial value for all accounts)
     * 1 = verified account
     * 2 = partner account
     * 3 = blacklisted account (cannot send or receive tokens)
     */
    mapping (address => uint8) public whitelist;

    /**
     * @dev The timestamp when the fee starts.
     */
    uint256 public feeStartTimestamp;

    /**
     * @dev List of daily storage fees in order of account level (0 to 2). Value is in mpip (milipip or 1/1000 of a PIP) per day (24 hours) per amount.
     */
    uint[] public dailyStorageFee = [uint32(0), uint32(0), uint32(0)];

    /**
     * @dev List of fixed transfer fees in order of account level (0 to 2). Value is in wei.
     */
    uint[] public fixedTransferFee = [uint32(0), uint32(0), uint32(0)];

    /**
     * @dev List of dynamic transfer fees in order of account level (0 to 2). Value is in mpip (milipip or 1/1000 of a PIP) per amount transferred.
     */
    uint[] public dynamicTransferFee = [uint32(0), uint32(0), uint32(0)];

    /**
     * @dev Minting fee in mpip (milipip or 1/1000 of a PIP) per amount.
     */
    uint256 public mintingFee = 0;

    /**
     * @dev Constant mpip divider
     */
    uint256 private constant mpipDivider = 10000000;

    /**
     * @dev Account mapping for last day of paid storage fees.
     */
    mapping (address => uint256) public storageFees;

    /**
     * @dev The account that receives the fees (minting, storage and transfer).
     */
    address public feeManager;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev Old AWG contract for migration
     */
    address public oldAWGContract = 0x32310F5Cf83BA8Ebb45cAe9454e072A08850e057;

    /**
     * @dev Returns the current storage day.
     */
    function getStorageDay() public view returns (uint256) {
        return (block.timestamp - feeStartTimestamp).div(86400);
    }

    /**
     * @dev Migrate the balances for an account. Update the total supply and issue Transfer event. The balance is taken from old contract.
     */
    function _migrateBalance(address account) internal {
        uint256 amount = ERC20Fee(oldAWGContract).balanceOf(account);
        emit Transfer(address(0), account, amount);
        _balances[account] = amount;
        _totalSupply = _totalSupply.add(amount);
    }

    /**
     * @dev Forced transfer from one account to another. Will contain details about AML procedure.
     */
    function _forceTransfer(address sender, address recipient, uint256 amount, bytes32 details) internal {
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        emit ForceTransfer(sender, recipient, amount, details);
    }

    /**
     * @dev Calculate the storage fees for an account.
     */
    function calculateStorageFees(address account) public view returns (uint256) {
        return (((getStorageDay().sub(storageFees[account])).mul(_balances[account])).mul(dailyStorageFee[whitelist[account]])).div(mpipDivider);
    }

    /**
     * @dev Retrieve the storage fees for an account.
     */
    function _retrieveStorageFee(address account) internal {
        uint256 storageFee = calculateStorageFees(account);
        storageFees[account] = getStorageDay();
        if (storageFee > 0) {
            _transfer(account,feeManager,storageFee);
        }
    }

    /**
     * @dev Retrieve the storage fees for an account.
     */
    function _resetStorageFee(address account) internal {
        storageFees[account] = getStorageDay();
    }

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");


        uint8 level = whitelist[sender];
        require(level != 3, "Sender is blacklisted");

        uint256 senderFee = calculateStorageFees(sender) + fixedTransferFee[level] + ((dynamicTransferFee[level].mul(amount)).div(mpipDivider));
        uint256 receiverStorageFee = calculateStorageFees(recipient);
        uint256 totalFee = senderFee.add(receiverStorageFee);

        _balances[sender] = (_balances[sender].sub(amount)).sub(senderFee);
        _balances[recipient] = (_balances[recipient].add(amount)).sub(receiverStorageFee);

        storageFees[sender] = getStorageDay();
        storageFees[recipient] = getStorageDay();
        emit Transfer(sender, recipient, amount);

        if (totalFee > 0) {
            _balances[feeManager] = _balances[feeManager].add(totalFee);
            emit Transfer(sender, feeManager, senderFee);
            emit Transfer(recipient, feeManager, receiverStorageFee);
            (bool success, ) = feeManager.call(abi.encodeWithSignature("processFee(uint256)",totalFee));
            require(success, "Fee Manager is not responding.");
        }
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        uint256 mintingFeeAmount = amount.mul(mintingFee).div(mpipDivider);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount).sub(mintingFeeAmount);
        emit Transfer(address(0), account, (amount.sub(mintingFeeAmount)));

        if (mintingFeeAmount > 0) {
            _balances[feeManager] = _balances[feeManager].add(mintingFeeAmount);
            emit Transfer(address(0), feeManager, mintingFeeAmount);
            (bool success, ) = feeManager.call(abi.encodeWithSignature("processFee(uint256)",mintingFeeAmount));
            require(success, "Fee Manager is not responding.");
        }
    }

     /**
     * @dev Destoys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See `_burn` and `_approve`.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
    }

}

// File: openzeppelin-solidity/contracts/access/roles/PauserRole.sol
contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender), "PauserRole: caller does not have the Pauser role");
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

// File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol
/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
contract Pausable is PauserRole {
    /**
     * @dev Emitted when the pause is triggered by a pauser (`account`).
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by a pauser (`account`).
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state. Assigns the Pauser role
     * to the deployer.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Called by a pauser to pause, triggers stopped state.
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev Called by a pauser to unpause, returns to normal state.
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20StorageFee.sol
/**
 * @title Pausable token
 * @dev ERC20 modified with pausable transfers.
 */
contract ERC20StorageFee is ERC20Fee, Pausable {
    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) public whenNotPaused returns (bool) {
        return super.transferFrom(from, to, value);
    }

    function approve(address spender, uint256 value) public whenNotPaused returns (bool) {
        return super.approve(spender, value);
    }

    function increaseAllowance(address spender, uint addedValue) public whenNotPaused returns (bool) {
        return super.increaseAllowance(spender, addedValue);
    }

    function decreaseAllowance(address spender, uint subtractedValue) public whenNotPaused returns (bool) {
        return super.decreaseAllowance(spender, subtractedValue);
    }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

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

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

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

// File: contracts/interfaces/IToken.sol
/**
 * @title Token Interface
 * @dev Exposes token functionality
 */
interface IToken {

    function burn(uint256 amount) external ;

    function mint(address account, uint256 amount) external ;

}

// File: contracts/token/ECRecovery.sol
/**
 * @title Eliptic curve signature operations
 * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
 * TODO Remove this library once solidity supports passing a signature to ecrecover.
 * See https://github.com/ethereum/solidity/issues/864
 */
library ECRecovery {

    /**
     * @dev Recover signer address from a message by using their signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param sig bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory sig)
        internal
        pure
        returns (address)
    {
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        if (sig.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables
        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }

        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            // solium-disable-next-line arg-overflow
            return ecrecover(hash, v, r, s);
        }
    }

    /**
     * toEthSignedMessageHash
     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
     * and hash the result
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
        );
    }
}

// File: contracts/token/Feeless.sol
/**
 * @title Feeless
 * @dev Usage: Used as an extension in contracts that want to execute feeless functions.
 * @dev Usage: Apply the feeless modifier.
 * @dev Based on https://github.com/bitclave/Feeless
 */
contract Feeless {

    /**
     * @dev The replacement for msg.sender on functions that use the feeless modifier.
     */ 
    address internal msgSender;

    /**
     * @dev Mimics the blockchain nonce relative to this contract (or contract that extents). 
     */ 
    mapping(address => uint256) public nonces;

    /**
     * @dev Holds reference to the initial signer of the transaction in the msgSender variable.
     * @dev After execution the variable is reset.
     */
    modifier feeless() {
        if (msgSender == address(0)) {
            msgSender = msg.sender;
            _;
            msgSender = address(0);
        } else {
            _;
        }
    }

    struct CallResult {
        bool success;
        bytes payload;
    }

    /// @notice Only the certSign owner can call this function.
    /// @dev Signed transactions are passed to this function.
    function performFeelessTransaction(
        address sender, 
        address target, 
        bytes memory data, 
        uint256 nonce, 
        bytes memory sig) public payable {
        require(address(this) == target, "Feeless: Target should be the extended contract");
    
        bytes memory prefix = "\x19Ethereum Signed Message:\n32";
        bytes32 hash = keccak256(abi.encodePacked(prefix, keccak256(abi.encodePacked(target, data, nonce))));
        msgSender = ECRecovery.recover(hash, sig);
        require(msgSender == sender, "Feeless: Unexpected sender");
        require(nonces[msgSender]++ == nonce, "Feeless: nonce does not comply");
        (bool _success, bytes memory _payload) = target.call.value(msg.value)(data);
        CallResult memory callResult = CallResult(_success, _payload);
        require(callResult.success, "Feeless: Call failed");
        msgSender = address(0);
    }
    
}

// File: contracts/token/AWG.sol
/**
 * @title AWG Token
 * @notice ERC20 token implementation.
 * @dev Implements mintable, burnable and pausable token interfaces.
 */
contract AWG is ERC20StorageFee, MinterRole, BurnerRole, Ownable, Feeless, IToken {

    /**
     * @dev Fired when a feeless transfer has been executed.
     */
    event TransferFeeless(address indexed account, uint256 indexed value);

    /**
     * @dev Fired when a feeless approve has been executed.
     */
    event ApproveFeeless(address indexed spender, uint256 indexed value);

    /**
     * @notice ERC20 convention.
     */
    uint8 public constant decimals = 18;

    /**
     * @notice ERC20 convention.
     */
    string public constant name = "AurusGOLD";
    
    /**
     * @notice ERC20 convention.
     */
    string public constant symbol = "AWG";

    /**
     * @dev Flag to indicate that the migration from old token has stopped.
     */
    bool private _migrationOpen = true;

    constructor() public {
        feeStartTimestamp = block.timestamp;
    }

    /**
     * @dev Stop migration by setting flag.
     */
    function stopMigration() public onlyOwner {
        _migrationOpen = false;
    }

    /**
     * @dev Check if migration is open.
     */
    modifier whenMigration() {
        require(_migrationOpen, "Migration: stopped");
        _;
    }

    /**
     * @dev Migrate balance from old token when migration is open, and both the old and the new token are paused.
     */
    function migrateBalances(address[] calldata _accounts) external whenPaused whenMigration onlyOwner {
        require(AWG(oldAWGContract).paused(), "Pausable: not paused");
        for (uint i=0; i<_accounts.length; i++) {
            _migrateBalance(_accounts[i]);
        }
    }

    /**
     * @dev Force a transfer between 2 accounts. AML logs on https://aurus.io/aml
     */
    function forceTransfer(address sender, address recipient, uint256 amount, bytes32 details) external onlyOwner {
        _forceTransfer(sender,recipient,amount,details);
    }

    /**
     * @dev Set the whitelisting level for an account.
     */
    function whitelistAddress(address account, uint8 level) external onlyOwner {
        require(level<=3, "Level: Please use level 0 to 3.");
        whitelist[account] = level;
    }

    /**
     * @dev Set the fees in the system. All the fees are in mpip, except fixedTransferFee that is in wei. Level is between 0 and 2
     */
    function setFees(uint256 _dailyStorageFee, uint256 _fixedTransferFee, uint256 _dynamicTransferFee, uint256 _mintingFee, uint8 level) external onlyOwner {
        require(level<=2, "Level: Please use level 0 to 2.");
        dailyStorageFee[level] = _dailyStorageFee;
        fixedTransferFee[level] = _fixedTransferFee;
        dynamicTransferFee[level] = _dynamicTransferFee;
        mintingFee = _mintingFee;
    }

    /**
     * @dev Set the address where the fees are forwarded.
     */
    function setFeeManager(address account) external onlyOwner {
        (bool success, ) = feeManager.call(abi.encodeWithSignature("processFee(uint256)",0));
        require(success);
        feeManager = account;
    }

    /**
     * @dev Function called by the owner to force an account to pay storage fee to date.
     */
    function retrieveStorageFee(address account) external onlyOwner {
        _retrieveStorageFee(account);
    }

    /**
     * @dev Function called by the owner to reset storage fees for selected accounts.
     */
    function resetStorageFees(address[] calldata _accounts) external onlyOwner {
        for (uint i=0; i<_accounts.length; i++) {
            _resetStorageFee(_accounts[i]);
        }
    }

    /**
     * @dev See `MinterRole._addMinter`.
     */
    function addMinter(address account) external onlyOwner {
        _addMinter(account);
    }

    /**
     * @dev See `MinterRole._removeMinter`.
     */
    function removeMinter(address account) external onlyOwner {
        _removeMinter(account);
    }

    /**
     * @dev See `BurnerRole._addBurner`.
     */
    function addBurner(address account) external onlyOwner {
        _addBurner(account);
    }

    /**
     * @dev See `BurnerRole._removeBurner`.
     */
    function removeBurner(address account) external onlyOwner {
        _removeBurner(account);
    }

    /**
     * @notice The caller must have the `BurnerRole`.
     * @dev See `ERC20._burn`.
     */
    function burn(uint256 amount) external onlyBurner {
        _burn(msg.sender, amount);
    }

    /**
     * @notice The caller must have the `MinterRole`.
     * @dev See `ERC20._mint`.
     */
    function mint(address account, uint256 amount) external onlyMinter {
        _mint(account, amount);
    }

    /**
     * @notice Feeless ERC20 transfer.
     */
    function transferFeeless(address account, uint256 value) feeless whenNotPaused external {
        _transfer(msgSender, account, value);
        emit TransferFeeless(account, value);
    }

    /**
     * @notice Feeless ERC20 transfer.
     */
    function approveFeeless(address spender, uint256 value) feeless whenNotPaused external {
        _approve(msgSender, spender, value);
        emit ApproveFeeless(spender, value);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"dynamicTransferFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"calculateStorageFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_accounts","type":"address[]"}],"name":"resetStorageFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFeeless","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"storageFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getStorageDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isBurner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"setFeeManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_accounts","type":"address[]"}],"name":"migrateBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"target","type":"address"},{"name":"data","type":"bytes"},{"name":"nonce","type":"uint256"},{"name":"sig","type":"bytes"}],"name":"performFeelessTransaction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approveFeeless","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintingFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dailyStorageFee","type":"uint256"},{"name":"_fixedTransferFee","type":"uint256"},{"name":"_dynamicTransferFee","type":"uint256"},{"name":"_mintingFee","type":"uint256"},{"name":"level","type":"uint8"}],"name":"setFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"level","type":"uint8"}],"name":"whitelistAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"nonces","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"dailyStorageFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fixedTransferFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"retrieveStorageFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeStartTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"details","type":"bytes32"}],"name":"forceTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"oldAWGContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"stopMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addBurner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"value","type":"uint256"}],"name":"TransferFeeless","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"value","type":"uint256"}],"name":"ApproveFeeless","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"BurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"BurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"details","type":"bytes32"}],"name":"ForceTransfer","type":"event"}]

60e06040526000608081815260a082905260c09190915262000025906003908162000386565b5060408051606081018252600080825260208201819052918101919091526200005390600490600362000386565b5060408051606081018252600080825260208201819052918101919091526200008190600590600362000386565b506000600655600b8054600160a060020a0319167332310f5cf83ba8ebb45cae9454e072a08850e0571790556013805460ff19166001179055348015620000c757600080fd5b50620000dc3364010000000062000164810204565b600d805460ff19169055620000fa33640100000000620001b6810204565b6200010e3364010000000062000208810204565b60108054600160a060020a031916331790819055604051600160a060020a0391909116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a342600255620003fe565b6200017f600c82640100000000620037e66200025a82021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b620001d1600e82640100000000620037e66200025a82021704565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b62000223600f82640100000000620037e66200025a82021704565b604051600160a060020a038216907f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456090600090a250565b6200026f828264010000000062000301810204565b15620002dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151562000366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062003f146022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054828255906000526020600020908101928215620003cc579160200282015b82811115620003cc578251829063ffffffff16905591602001919060010190620003a7565b50620003da929150620003de565b5090565b620003fb91905b80821115620003da5760008155600101620003e5565b90565b613b06806200040e6000396000f3fe608060405260043610610352576000357c0100000000000000000000000000000000000000000000000000000000900480636ef8d66d116101c85780639b19251a11610114578063dd62ed3e116100b2578063e19a7bc81161008c578063e19a7bc814610e1c578063e9ec9e8b14610e31578063f2fde38b14610e46578063f44637ba14610e7957610352565b8063dd62ed3e14610d83578063de94e0f614610dbe578063e05cdee214610e0757610352565b8063a9059cbb116100ee578063a9059cbb14610ced578063aa271e1a14610d26578063bfdd218414610d59578063d0fb020314610d6e57610352565b80639b19251a14610c4e5780639e6ff61014610c81578063a457c2d714610cb457610352565b80638456cb59116101815780638f32d59b1161015b5780638f32d59b14610bdc57806395d89b4114610bf1578063983b2d5614610c065780639865027514610c3957610352565b80638456cb5914610b6c5780638929b55e14610b815780638da5cb5b14610bab57610352565b80636ef8d66d14610a7f57806370a0823114610a94578063715018a614610ac75780637ecebe0014610adc57806382dc1ec414610b0f57806383ed379014610b4257610352565b806339509351116102a25780634b92738e116102405780635a64ad951161021a5780635a64ad95146109d45780635c975abb146109e957806367fcfc3f146109fe5780636b9a5c6c14610a4357610352565b80634b92738e146107d057806351b794951461084d5780635522498c1461099b57610352565b806342966c681161027c57806342966c681461070d5780634334614a1461073757806346fbf68e1461076a578063472d35b91461079d57610352565b806339509351146106865780633f4ba83a146106bf57806340c10f19146106d457610352565b806319feb0fa1161030f5780632f53e22f116102e95780632f53e22f146105e05780633092afd51461061357806330a6e8a414610646578063313ce5671461065b57610352565b806319feb0fa146104e75780631f48d35f1461056457806323b872dd1461059d57610352565b8063028468581461035757806305fff8f71461038c57806306fdde03146103c857806308286e1214610452578063095ea7b31461048557806318160ddd146104d2575b600080fd5b34801561036357600080fd5b5061038a6004803603602081101561037a57600080fd5b5035600160a060020a0316610eac565b005b34801561039857600080fd5b506103b6600480360360208110156103af57600080fd5b5035610f04565b60408051918252519081900360200190f35b3480156103d457600080fd5b506103dd610f23565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104175781810151838201526020016103ff565b50505050905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045e57600080fd5b506103b66004803603602081101561047557600080fd5b5035600160a060020a0316610f5a565b34801561049157600080fd5b506104be600480360360408110156104a857600080fd5b50600160a060020a038135169060200135610ff7565b604080519115158252519081900360200190f35b3480156104de57600080fd5b506103b6611054565b3480156104f357600080fd5b5061038a6004803603602081101561050a57600080fd5b81019060208101813564010000000081111561052557600080fd5b82018360208201111561053757600080fd5b8035906020019184602083028401116401000000008311171561055957600080fd5b50909250905061105a565b34801561057057600080fd5b5061038a6004803603604081101561058757600080fd5b50600160a060020a0381351690602001356110e2565b3480156105a957600080fd5b506104be600480360360608110156105c057600080fd5b50600160a060020a0381358116916020810135909116906040013561124c565b3480156105ec57600080fd5b506103b66004803603602081101561060357600080fd5b5035600160a060020a03166112ab565b34801561061f57600080fd5b5061038a6004803603602081101561063657600080fd5b5035600160a060020a03166112bd565b34801561065257600080fd5b506103b6611312565b34801561066757600080fd5b50610670611332565b6040805160ff9092168252519081900360200190f35b34801561069257600080fd5b506104be600480360360408110156106a957600080fd5b50600160a060020a038135169060200135611337565b3480156106cb57600080fd5b5061038a61138d565b3480156106e057600080fd5b5061038a600480360360408110156106f757600080fd5b50600160a060020a038135169060200135611471565b34801561071957600080fd5b5061038a6004803603602081101561073057600080fd5b50356114c4565b34801561074357600080fd5b506104be6004803603602081101561075a57600080fd5b5035600160a060020a0316611517565b34801561077657600080fd5b506104be6004803603602081101561078d57600080fd5b5035600160a060020a031661152a565b3480156107a957600080fd5b5061038a600480360360208110156107c057600080fd5b5035600160a060020a031661153d565b3480156107dc57600080fd5b5061038a600480360360208110156107f357600080fd5b81019060208101813564010000000081111561080e57600080fd5b82018360208201111561082057600080fd5b8035906020019184602083028401116401000000008311171561084257600080fd5b5090925090506116c5565b61038a600480360360a081101561086357600080fd5b600160a060020a03823581169260208101359091169181019060608101604082013564010000000081111561089757600080fd5b8201836020820111156108a957600080fd5b803590602001918460018302840111640100000000831117156108cb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295843595909490935060408101925060200135905064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118ec945050505050565b3480156109a757600080fd5b5061038a600480360360408110156109be57600080fd5b50600160a060020a038135169060200135611ca8565b3480156109e057600080fd5b506103b6611e11565b3480156109f557600080fd5b506104be611e17565b348015610a0a57600080fd5b5061038a600480360360a0811015610a2157600080fd5b508035906020810135906040810135906060810135906080013560ff16611e20565b348015610a4f57600080fd5b5061038a60048036036040811015610a6657600080fd5b508035600160a060020a0316906020013560ff16611f32565b348015610a8b57600080fd5b5061038a612007565b348015610aa057600080fd5b506103b660048036036020811015610ab757600080fd5b5035600160a060020a0316612012565b348015610ad357600080fd5b5061038a61202d565b348015610ae857600080fd5b506103b660048036036020811015610aff57600080fd5b5035600160a060020a03166120c3565b348015610b1b57600080fd5b5061038a60048036036020811015610b3257600080fd5b5035600160a060020a03166120d5565b348015610b4e57600080fd5b506103b660048036036020811015610b6557600080fd5b5035612127565b348015610b7857600080fd5b5061038a612135565b348015610b8d57600080fd5b506103b660048036036020811015610ba457600080fd5b5035612209565b348015610bb757600080fd5b50610bc0612217565b60408051600160a060020a039092168252519081900360200190f35b348015610be857600080fd5b506104be612226565b348015610bfd57600080fd5b506103dd612237565b348015610c1257600080fd5b5061038a60048036036020811015610c2957600080fd5b5035600160a060020a031661226e565b348015610c4557600080fd5b5061038a6122c3565b348015610c5a57600080fd5b5061067060048036036020811015610c7157600080fd5b5035600160a060020a03166122cc565b348015610c8d57600080fd5b5061038a60048036036020811015610ca457600080fd5b5035600160a060020a03166122e1565b348015610cc057600080fd5b506104be60048036036040811015610cd757600080fd5b50600160a060020a038135169060200135612336565b348015610cf957600080fd5b506104be60048036036040811015610d1057600080fd5b50600160a060020a03813516906020013561238c565b348015610d3257600080fd5b506104be60048036036020811015610d4957600080fd5b5035600160a060020a03166123e2565b348015610d6557600080fd5b506103b66123f5565b348015610d7a57600080fd5b50610bc06123fb565b348015610d8f57600080fd5b506103b660048036036040811015610da657600080fd5b50600160a060020a038135811691602001351661240a565b348015610dca57600080fd5b5061038a60048036036080811015610de157600080fd5b50600160a060020a03813581169160208101359091169060408101359060600135612435565b348015610e1357600080fd5b50610bc0612493565b348015610e2857600080fd5b5061038a6124a2565b348015610e3d57600080fd5b5061038a6124fa565b348015610e5257600080fd5b5061038a60048036036020811015610e6957600080fd5b5035600160a060020a0316612503565b348015610e8557600080fd5b5061038a60048036036020811015610e9c57600080fd5b5035600160a060020a0316612558565b610eb4612226565b1515610ef8576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f01816125ad565b50565b6005805482908110610f1257fe5b600091825260209091200154905081565b60408051808201909152600981527f4175727573474f4c440000000000000000000000000000000000000000000000602082015281565b600160a060020a03811660009081526001602052604081205460038054610ff1926298968092610fe592909160ff16908110610f9257fe5b6000918252602080832090910154600160a060020a0388168352828252604080842054600790935290922054610fd991908290610fcd611312565b9063ffffffff6125f516565b9063ffffffff61265516565b9063ffffffff6126b516565b92915050565b600d5460009060ff1615611043576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383612724565b9392505050565b600a5490565b611062612226565b15156110a6576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b60005b818110156110dd576110d58383838181106110c057fe5b90506020020135600160a060020a031661273a565b6001016110a9565b505050565b601154600160a060020a031615156111b15760118054600160a060020a03191633179055600d5460ff161561114f576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b60115461116690600160a060020a0316838361275e565b6040518190600160a060020a038416907f5667ad70f18b8164281540d6ea385a4b9e80eef045e39dc7e58a54b33c65978a90600090a360118054600160a060020a0319169055611248565b600d5460ff16156111fa576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b60115461121190600160a060020a0316838361275e565b6040518190600160a060020a038416907f5667ad70f18b8164281540d6ea385a4b9e80eef045e39dc7e58a54b33c65978a90600090a35b5050565b600d5460009060ff1615611298576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b6112a3848484612bf9565b949350505050565b60076020526000908152604090205481565b6112c5612226565b1515611309576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f0181612c50565b60025460009061132d9042036201518063ffffffff6126b516565b905090565b601281565b600d5460009060ff1615611383576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383612c98565b6113963361152a565b15156113d65760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b600d5460ff161515611432576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600d805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b61147a336123e2565b15156114ba5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061394e6030913960400191505060405180910390fd5b6112488282612cd4565b6114cd33611517565b151561150d5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061391e6030913960400191505060405180910390fd5b610f013382612fc2565b6000610ff1600f8363ffffffff61308e16565b6000610ff1600c8363ffffffff61308e16565b611545612226565b1515611589576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600854604080516000602480830182905283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b400000000000000000000000000000000000000000000000000000000178152925182519194600160a060020a03169390918291908083835b6020831061162b5780518252601f19909201916020918201910161160c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461168d576040519150601f19603f3d011682016040523d82523d6000602084013e611692565b606091505b505090508015156116a257600080fd5b5060088054600160a060020a031916600160a060020a0392909216919091179055565b600d5460ff161515611721576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60135460ff16151561177d576040805160e560020a62461bcd02815260206004820152601260248201527f4d6967726174696f6e3a2073746f707065640000000000000000000000000000604482015290519081900360640190fd5b611785612226565b15156117c9576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600b60009054906101000a9004600160a060020a0316600160a060020a0316635c975abb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b505115156118b5576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b818110156110dd576118e48383838181106118cf57fe5b90506020020135600160a060020a03166130fa565b6001016118b8565b30600160a060020a038516146119365760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613aac602f913960400191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818686866040516020018084600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140183805190602001908083835b602083106119cf5780518252601f1990920191602091820191016119b0565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381528483018252805190830120875190965093019350839290860191508083835b60208310611a365780518252601f199092019160209182019101611a17565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152938201905282519201919091209250611a7c9150829050846131f8565b60118054600160a060020a031916600160a060020a039283161790819055888216911614611af4576040805160e560020a62461bcd02815260206004820152601a60248201527f4665656c6573733a20556e65787065637465642073656e646572000000000000604482015290519081900360640190fd5b601154600160a060020a031660009081526012602052604090208054600181019091558414611b6d576040805160e560020a62461bcd02815260206004820152601e60248201527f4665656c6573733a206e6f6e636520646f6573206e6f7420636f6d706c790000604482015290519081900360640190fd5b6000606087600160a060020a031634886040518082805190602001908083835b60208310611bac5780518252601f199092019160209182019101611b8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5091509150611c2061386a565b506040805180820190915282151580825260208201839052611c8c576040805160e560020a62461bcd02815260206004820152601460248201527f4665656c6573733a2043616c6c206661696c6564000000000000000000000000604482015290519081900360640190fd5b505060118054600160a060020a03191690555050505050505050565b601154600160a060020a03161515611d775760118054600160a060020a03191633179055600d5460ff1615611d15576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b601154611d2c90600160a060020a031683836132ce565b6040518190600160a060020a038416907f47fd10448ce4fa2ed210fbbc62caf5a4102d280c8ee3888de704e90e8bf1ae7b90600090a360118054600160a060020a0319169055611248565b600d5460ff1615611dc0576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b601154611dd790600160a060020a031683836132ce565b6040518190600160a060020a038416907f47fd10448ce4fa2ed210fbbc62caf5a4102d280c8ee3888de704e90e8bf1ae7b90600090a35050565b60065481565b600d5460ff1690565b611e28612226565b1515611e6c576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600260ff82161115611ec8576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6576656c3a20506c6561736520757365206c6576656c203020746f20322e00604482015290519081900360640190fd5b8460038260ff16815481101515611edb57fe5b90600052602060002001819055508360048260ff16815481101515611efc57fe5b90600052602060002001819055508260058260ff16815481101515611f1d57fe5b60009182526020909120015550600655505050565b611f3a612226565b1515611f7e576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600360ff82161115611fda576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6576656c3a20506c6561736520757365206c6576656c203020746f20332e00604482015290519081900360640190fd5b600160a060020a03919091166000908152600160205260409020805460ff191660ff909216919091179055565b612010336133c4565b565b600160a060020a031660009081526020819052604090205490565b612035612226565b1515612079576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b601054604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360108054600160a060020a0319169055565b60126020526000908152604090205481565b6120de3361152a565b151561211e5760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b610f018161340c565b6003805482908110610f1257fe5b61213e3361152a565b151561217e5760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b600d5460ff16156121c7576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b600d805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6004805482908110610f1257fe5b601054600160a060020a031690565b601054600160a060020a0316331490565b60408051808201909152600381527f4157470000000000000000000000000000000000000000000000000000000000602082015281565b612276612226565b15156122ba576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f0181613454565b61201033612c50565b60016020526000908152604090205460ff1681565b6122e9612226565b151561232d576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f018161349c565b600d5460009060ff1615612382576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d83836134ec565b600d5460009060ff16156123d8576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383613528565b6000610ff1600e8363ffffffff61308e16565b60025481565b600854600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b61243d612226565b1515612481576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b61248d84848484613535565b50505050565b600b54600160a060020a031681565b6124aa612226565b15156124ee576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b6013805460ff19169055565b612010336125ad565b61250b612226565b151561254f576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f018161362f565b612560612226565b15156125a4576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f01816136d5565b6125be600f8263ffffffff61371d16565b604051600160a060020a038216907f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e90600090a250565b60008282111561264f576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082151561266657506000610ff1565b82820282848281151561267557fe5b041461104d5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061399f6021913960400191505060405180910390fd5b600080821161270e576040805160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481151561271b57fe5b04949350505050565b60006127313384846132ce565b50600192915050565b612742611312565b600160a060020a03909116600090815260076020526040902055565b600160a060020a03831615156127a85760405160e560020a62461bcd028152600401808060200182810382526025815260200180613a436025913960400191505060405180910390fd5b600160a060020a03821615156127f25760405160e560020a62461bcd0281526004018080602001828103825260238152602001806138836023913960400191505060405180910390fd5b600160a060020a03831660009081526001602052604090205460ff166003811415612867576040805160e560020a62461bcd02815260206004820152601560248201527f53656e64657220697320626c61636b6c69737465640000000000000000000000604482015290519081900360640190fd5b600061289f62989680610fe58560058660ff1681548110151561288657fe5b906000526020600020015461265590919063ffffffff16565b6004805460ff85169081106128b057fe5b90600052602060002001546128c487610f5a565b0101905060006128d385610f5a565b905060006128e7838363ffffffff61378916565b600160a060020a038816600090815260208190526040902054909150612919908490610fcd908863ffffffff6125f516565b600160a060020a038089166000908152602081905260408082209390935590881681522054612954908390610fcd908863ffffffff61378916565b600160a060020a038716600090815260208190526040902055612975611312565b600160a060020a038816600090815260076020526040902055612996611312565b600160a060020a0380881660008181526007602090815260409182902094909455805189815290519193928b1692600080516020613a0283398151915292918290030190a36000811115612bf057600854600160a060020a0316600090815260208190526040902054612a0f908263ffffffff61378916565b60088054600160a060020a03908116600090815260208181526040918290209490945591548251878152925190821693918b1692600080516020613a0283398151915292908290030190a3600854604080518481529051600160a060020a0392831692891691600080516020613a02833981519152919081900360200190a360085460408051602480820185905282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b40000000000000000000000000000000000000000000000000000000017815291518151600094600160a060020a03169382918083835b60208310612b2c5780518252601f199092019160209182019101612b0d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612b8e576040519150601f19603f3d011682016040523d82523d6000602084013e612b93565b606091505b50509050801515612bee576040805160e560020a62461bcd02815260206004820152601e60248201527f466565204d616e61676572206973206e6f7420726573706f6e64696e672e0000604482015290519081900360640190fd5b505b50505050505050565b6000612c0684848461275e565b600160a060020a038416600090815260096020908152604080832033808552925290912054612c46918691612c41908663ffffffff6125f516565b6132ce565b5060019392505050565b612c61600e8263ffffffff61371d16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b336000818152600960209081526040808320600160a060020a03871684529091528120549091612731918590612c41908663ffffffff61378916565b600160a060020a0382161515612d34576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6000612d5262989680610fe56006548561265590919063ffffffff16565b600a54909150612d68908363ffffffff61378916565b600a55600160a060020a038316600090815260208190526040902054612d9a908290610fcd908563ffffffff61378916565b600160a060020a03841660008181526020819052604081209290925590600080516020613a02833981519152612dd6858563ffffffff6125f516565b60408051918252519081900360200190a360008111156110dd57600854600160a060020a0316600090815260208190526040902054612e1b908263ffffffff61378916565b60088054600160a060020a03908116600090815260208181526040808320959095559254845186815294519216939092600080516020613a0283398151915292918290030190a360085460408051602480820185905282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b40000000000000000000000000000000000000000000000000000000017815291518151600094600160a060020a03169382918083835b60208310612f005780518252601f199092019160209182019101612ee1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f62576040519150601f19603f3d011682016040523d82523d6000602084013e612f67565b606091505b5050905080151561248d576040805160e560020a62461bcd02815260206004820152601e60248201527f466565204d616e61676572206973206e6f7420726573706f6e64696e672e0000604482015290519081900360640190fd5b600160a060020a038216151561300c5760405160e560020a62461bcd028152600401808060200182810382526021815260200180613a226021913960400191505060405180910390fd5b600a5461301f908263ffffffff6125f516565b600a55600160a060020a03821660009081526020819052604090205461304b908263ffffffff6125f516565b600160a060020a03831660008181526020818152604080832094909455835185815293519193600080516020613a02833981519152929081900390910190a35050565b6000600160a060020a03821615156130da5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806139e06022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600b54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561316457600080fd5b505afa158015613178573d6000803e3d6000fd5b505050506040513d602081101561318e57600080fd5b5051604080518281529051919250600160a060020a03841691600091600080516020613a02833981519152919081900360200190a3600160a060020a0382166000908152602081905260409020819055600a546131f1908263ffffffff61378916565b600a555050565b600080600080845160411415156132155760009350505050610ff1565b50505060208201516040830151606084015160001a601b60ff8216101561323a57601b015b8060ff16601b1415801561325257508060ff16601c14155b156132635760009350505050610ff1565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156132ba573d6000803e3d6000fd5b505050602060405103519350505050610ff1565b600160a060020a03831615156133185760405160e560020a62461bcd028152600401808060200182810382526024815260200180613a886024913960400191505060405180910390fd5b600160a060020a03821615156133625760405160e560020a62461bcd0281526004018080602001828103825260228152602001806138fc6022913960400191505060405180910390fd5b600160a060020a03808416600081815260096020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6133d5600c8263ffffffff61371d16565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61341d600c8263ffffffff6137e616565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b613465600e8263ffffffff6137e616565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b60006134a782610f5a565b90506134b1611312565b600160a060020a03831660009081526007602052604081209190915581111561124857600854611248908390600160a060020a03168361275e565b336000818152600960209081526040808320600160a060020a03871684529091528120549091612731918590612c41908663ffffffff6125f516565b600061273133848461275e565b600160a060020a03841660009081526020819052604090205461355e908363ffffffff6125f516565b600160a060020a038086166000908152602081905260408082209390935590851681522054613593908363ffffffff61378916565b600160a060020a03808516600081815260208181526040918290209490945580518681529051919392881692600080516020613a0283398151915292918290030190a382600160a060020a031684600160a060020a03167f91f8b835be584629107fbfe5be695e33c56ebe55697d7c8a30d309a2b8dce9378484604051808381526020018281526020019250505060405180910390a350505050565b600160a060020a03811615156136795760405160e560020a62461bcd0281526004018080602001828103825260268152602001806138d66026913960400191505060405180910390fd5b601054604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360108054600160a060020a031916600160a060020a0392909216919091179055565b6136e6600f8263ffffffff6137e616565b604051600160a060020a038216907f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456090600090a250565b613727828261308e565b15156137675760405160e560020a62461bcd02815260040180806020018281038252602181526020018061397e6021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60008282018381101561104d576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6137f0828261308e565b15613845576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6040805180820190915260008152606060208201529056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734275726e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204275726e657220726f6c654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573735061757361626c653a207061757365640000000000000000000000000000000045524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734665656c6573733a205461726765742073686f756c642062652074686520657874656e64656420636f6e7472616374a165627a7a723058209ce91c89b7de19f2f5221b1c3deead8577a2d45162c687c0054fc1889b0c61c80029526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed Bytecode

0x608060405260043610610352576000357c0100000000000000000000000000000000000000000000000000000000900480636ef8d66d116101c85780639b19251a11610114578063dd62ed3e116100b2578063e19a7bc81161008c578063e19a7bc814610e1c578063e9ec9e8b14610e31578063f2fde38b14610e46578063f44637ba14610e7957610352565b8063dd62ed3e14610d83578063de94e0f614610dbe578063e05cdee214610e0757610352565b8063a9059cbb116100ee578063a9059cbb14610ced578063aa271e1a14610d26578063bfdd218414610d59578063d0fb020314610d6e57610352565b80639b19251a14610c4e5780639e6ff61014610c81578063a457c2d714610cb457610352565b80638456cb59116101815780638f32d59b1161015b5780638f32d59b14610bdc57806395d89b4114610bf1578063983b2d5614610c065780639865027514610c3957610352565b80638456cb5914610b6c5780638929b55e14610b815780638da5cb5b14610bab57610352565b80636ef8d66d14610a7f57806370a0823114610a94578063715018a614610ac75780637ecebe0014610adc57806382dc1ec414610b0f57806383ed379014610b4257610352565b806339509351116102a25780634b92738e116102405780635a64ad951161021a5780635a64ad95146109d45780635c975abb146109e957806367fcfc3f146109fe5780636b9a5c6c14610a4357610352565b80634b92738e146107d057806351b794951461084d5780635522498c1461099b57610352565b806342966c681161027c57806342966c681461070d5780634334614a1461073757806346fbf68e1461076a578063472d35b91461079d57610352565b806339509351146106865780633f4ba83a146106bf57806340c10f19146106d457610352565b806319feb0fa1161030f5780632f53e22f116102e95780632f53e22f146105e05780633092afd51461061357806330a6e8a414610646578063313ce5671461065b57610352565b806319feb0fa146104e75780631f48d35f1461056457806323b872dd1461059d57610352565b8063028468581461035757806305fff8f71461038c57806306fdde03146103c857806308286e1214610452578063095ea7b31461048557806318160ddd146104d2575b600080fd5b34801561036357600080fd5b5061038a6004803603602081101561037a57600080fd5b5035600160a060020a0316610eac565b005b34801561039857600080fd5b506103b6600480360360208110156103af57600080fd5b5035610f04565b60408051918252519081900360200190f35b3480156103d457600080fd5b506103dd610f23565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104175781810151838201526020016103ff565b50505050905090810190601f1680156104445780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045e57600080fd5b506103b66004803603602081101561047557600080fd5b5035600160a060020a0316610f5a565b34801561049157600080fd5b506104be600480360360408110156104a857600080fd5b50600160a060020a038135169060200135610ff7565b604080519115158252519081900360200190f35b3480156104de57600080fd5b506103b6611054565b3480156104f357600080fd5b5061038a6004803603602081101561050a57600080fd5b81019060208101813564010000000081111561052557600080fd5b82018360208201111561053757600080fd5b8035906020019184602083028401116401000000008311171561055957600080fd5b50909250905061105a565b34801561057057600080fd5b5061038a6004803603604081101561058757600080fd5b50600160a060020a0381351690602001356110e2565b3480156105a957600080fd5b506104be600480360360608110156105c057600080fd5b50600160a060020a0381358116916020810135909116906040013561124c565b3480156105ec57600080fd5b506103b66004803603602081101561060357600080fd5b5035600160a060020a03166112ab565b34801561061f57600080fd5b5061038a6004803603602081101561063657600080fd5b5035600160a060020a03166112bd565b34801561065257600080fd5b506103b6611312565b34801561066757600080fd5b50610670611332565b6040805160ff9092168252519081900360200190f35b34801561069257600080fd5b506104be600480360360408110156106a957600080fd5b50600160a060020a038135169060200135611337565b3480156106cb57600080fd5b5061038a61138d565b3480156106e057600080fd5b5061038a600480360360408110156106f757600080fd5b50600160a060020a038135169060200135611471565b34801561071957600080fd5b5061038a6004803603602081101561073057600080fd5b50356114c4565b34801561074357600080fd5b506104be6004803603602081101561075a57600080fd5b5035600160a060020a0316611517565b34801561077657600080fd5b506104be6004803603602081101561078d57600080fd5b5035600160a060020a031661152a565b3480156107a957600080fd5b5061038a600480360360208110156107c057600080fd5b5035600160a060020a031661153d565b3480156107dc57600080fd5b5061038a600480360360208110156107f357600080fd5b81019060208101813564010000000081111561080e57600080fd5b82018360208201111561082057600080fd5b8035906020019184602083028401116401000000008311171561084257600080fd5b5090925090506116c5565b61038a600480360360a081101561086357600080fd5b600160a060020a03823581169260208101359091169181019060608101604082013564010000000081111561089757600080fd5b8201836020820111156108a957600080fd5b803590602001918460018302840111640100000000831117156108cb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295843595909490935060408101925060200135905064010000000081111561092657600080fd5b82018360208201111561093857600080fd5b8035906020019184600183028401116401000000008311171561095a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118ec945050505050565b3480156109a757600080fd5b5061038a600480360360408110156109be57600080fd5b50600160a060020a038135169060200135611ca8565b3480156109e057600080fd5b506103b6611e11565b3480156109f557600080fd5b506104be611e17565b348015610a0a57600080fd5b5061038a600480360360a0811015610a2157600080fd5b508035906020810135906040810135906060810135906080013560ff16611e20565b348015610a4f57600080fd5b5061038a60048036036040811015610a6657600080fd5b508035600160a060020a0316906020013560ff16611f32565b348015610a8b57600080fd5b5061038a612007565b348015610aa057600080fd5b506103b660048036036020811015610ab757600080fd5b5035600160a060020a0316612012565b348015610ad357600080fd5b5061038a61202d565b348015610ae857600080fd5b506103b660048036036020811015610aff57600080fd5b5035600160a060020a03166120c3565b348015610b1b57600080fd5b5061038a60048036036020811015610b3257600080fd5b5035600160a060020a03166120d5565b348015610b4e57600080fd5b506103b660048036036020811015610b6557600080fd5b5035612127565b348015610b7857600080fd5b5061038a612135565b348015610b8d57600080fd5b506103b660048036036020811015610ba457600080fd5b5035612209565b348015610bb757600080fd5b50610bc0612217565b60408051600160a060020a039092168252519081900360200190f35b348015610be857600080fd5b506104be612226565b348015610bfd57600080fd5b506103dd612237565b348015610c1257600080fd5b5061038a60048036036020811015610c2957600080fd5b5035600160a060020a031661226e565b348015610c4557600080fd5b5061038a6122c3565b348015610c5a57600080fd5b5061067060048036036020811015610c7157600080fd5b5035600160a060020a03166122cc565b348015610c8d57600080fd5b5061038a60048036036020811015610ca457600080fd5b5035600160a060020a03166122e1565b348015610cc057600080fd5b506104be60048036036040811015610cd757600080fd5b50600160a060020a038135169060200135612336565b348015610cf957600080fd5b506104be60048036036040811015610d1057600080fd5b50600160a060020a03813516906020013561238c565b348015610d3257600080fd5b506104be60048036036020811015610d4957600080fd5b5035600160a060020a03166123e2565b348015610d6557600080fd5b506103b66123f5565b348015610d7a57600080fd5b50610bc06123fb565b348015610d8f57600080fd5b506103b660048036036040811015610da657600080fd5b50600160a060020a038135811691602001351661240a565b348015610dca57600080fd5b5061038a60048036036080811015610de157600080fd5b50600160a060020a03813581169160208101359091169060408101359060600135612435565b348015610e1357600080fd5b50610bc0612493565b348015610e2857600080fd5b5061038a6124a2565b348015610e3d57600080fd5b5061038a6124fa565b348015610e5257600080fd5b5061038a60048036036020811015610e6957600080fd5b5035600160a060020a0316612503565b348015610e8557600080fd5b5061038a60048036036020811015610e9c57600080fd5b5035600160a060020a0316612558565b610eb4612226565b1515610ef8576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f01816125ad565b50565b6005805482908110610f1257fe5b600091825260209091200154905081565b60408051808201909152600981527f4175727573474f4c440000000000000000000000000000000000000000000000602082015281565b600160a060020a03811660009081526001602052604081205460038054610ff1926298968092610fe592909160ff16908110610f9257fe5b6000918252602080832090910154600160a060020a0388168352828252604080842054600790935290922054610fd991908290610fcd611312565b9063ffffffff6125f516565b9063ffffffff61265516565b9063ffffffff6126b516565b92915050565b600d5460009060ff1615611043576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383612724565b9392505050565b600a5490565b611062612226565b15156110a6576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b60005b818110156110dd576110d58383838181106110c057fe5b90506020020135600160a060020a031661273a565b6001016110a9565b505050565b601154600160a060020a031615156111b15760118054600160a060020a03191633179055600d5460ff161561114f576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b60115461116690600160a060020a0316838361275e565b6040518190600160a060020a038416907f5667ad70f18b8164281540d6ea385a4b9e80eef045e39dc7e58a54b33c65978a90600090a360118054600160a060020a0319169055611248565b600d5460ff16156111fa576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b60115461121190600160a060020a0316838361275e565b6040518190600160a060020a038416907f5667ad70f18b8164281540d6ea385a4b9e80eef045e39dc7e58a54b33c65978a90600090a35b5050565b600d5460009060ff1615611298576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b6112a3848484612bf9565b949350505050565b60076020526000908152604090205481565b6112c5612226565b1515611309576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f0181612c50565b60025460009061132d9042036201518063ffffffff6126b516565b905090565b601281565b600d5460009060ff1615611383576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383612c98565b6113963361152a565b15156113d65760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b600d5460ff161515611432576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600d805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b61147a336123e2565b15156114ba5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061394e6030913960400191505060405180910390fd5b6112488282612cd4565b6114cd33611517565b151561150d5760405160e560020a62461bcd02815260040180806020018281038252603081526020018061391e6030913960400191505060405180910390fd5b610f013382612fc2565b6000610ff1600f8363ffffffff61308e16565b6000610ff1600c8363ffffffff61308e16565b611545612226565b1515611589576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600854604080516000602480830182905283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b400000000000000000000000000000000000000000000000000000000178152925182519194600160a060020a03169390918291908083835b6020831061162b5780518252601f19909201916020918201910161160c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461168d576040519150601f19603f3d011682016040523d82523d6000602084013e611692565b606091505b505090508015156116a257600080fd5b5060088054600160a060020a031916600160a060020a0392909216919091179055565b600d5460ff161515611721576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60135460ff16151561177d576040805160e560020a62461bcd02815260206004820152601260248201527f4d6967726174696f6e3a2073746f707065640000000000000000000000000000604482015290519081900360640190fd5b611785612226565b15156117c9576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600b60009054906101000a9004600160a060020a0316600160a060020a0316635c975abb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561183357600080fd5b505afa158015611847573d6000803e3d6000fd5b505050506040513d602081101561185d57600080fd5b505115156118b5576040805160e560020a62461bcd02815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b60005b818110156110dd576118e48383838181106118cf57fe5b90506020020135600160a060020a03166130fa565b6001016118b8565b30600160a060020a038516146119365760405160e560020a62461bcd02815260040180806020018281038252602f815260200180613aac602f913960400191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818686866040516020018084600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140183805190602001908083835b602083106119cf5780518252601f1990920191602091820191016119b0565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381528483018252805190830120875190965093019350839290860191508083835b60208310611a365780518252601f199092019160209182019101611a17565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152938201905282519201919091209250611a7c9150829050846131f8565b60118054600160a060020a031916600160a060020a039283161790819055888216911614611af4576040805160e560020a62461bcd02815260206004820152601a60248201527f4665656c6573733a20556e65787065637465642073656e646572000000000000604482015290519081900360640190fd5b601154600160a060020a031660009081526012602052604090208054600181019091558414611b6d576040805160e560020a62461bcd02815260206004820152601e60248201527f4665656c6573733a206e6f6e636520646f6573206e6f7420636f6d706c790000604482015290519081900360640190fd5b6000606087600160a060020a031634886040518082805190602001908083835b60208310611bac5780518252601f199092019160209182019101611b8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b5091509150611c2061386a565b506040805180820190915282151580825260208201839052611c8c576040805160e560020a62461bcd02815260206004820152601460248201527f4665656c6573733a2043616c6c206661696c6564000000000000000000000000604482015290519081900360640190fd5b505060118054600160a060020a03191690555050505050505050565b601154600160a060020a03161515611d775760118054600160a060020a03191633179055600d5460ff1615611d15576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b601154611d2c90600160a060020a031683836132ce565b6040518190600160a060020a038416907f47fd10448ce4fa2ed210fbbc62caf5a4102d280c8ee3888de704e90e8bf1ae7b90600090a360118054600160a060020a0319169055611248565b600d5460ff1615611dc0576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b601154611dd790600160a060020a031683836132ce565b6040518190600160a060020a038416907f47fd10448ce4fa2ed210fbbc62caf5a4102d280c8ee3888de704e90e8bf1ae7b90600090a35050565b60065481565b600d5460ff1690565b611e28612226565b1515611e6c576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600260ff82161115611ec8576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6576656c3a20506c6561736520757365206c6576656c203020746f20322e00604482015290519081900360640190fd5b8460038260ff16815481101515611edb57fe5b90600052602060002001819055508360048260ff16815481101515611efc57fe5b90600052602060002001819055508260058260ff16815481101515611f1d57fe5b60009182526020909120015550600655505050565b611f3a612226565b1515611f7e576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b600360ff82161115611fda576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6576656c3a20506c6561736520757365206c6576656c203020746f20332e00604482015290519081900360640190fd5b600160a060020a03919091166000908152600160205260409020805460ff191660ff909216919091179055565b612010336133c4565b565b600160a060020a031660009081526020819052604090205490565b612035612226565b1515612079576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b601054604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360108054600160a060020a0319169055565b60126020526000908152604090205481565b6120de3361152a565b151561211e5760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b610f018161340c565b6003805482908110610f1257fe5b61213e3361152a565b151561217e5760405160e560020a62461bcd0281526004018080602001828103825260308152602001806138a66030913960400191505060405180910390fd5b600d5460ff16156121c7576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b600d805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6004805482908110610f1257fe5b601054600160a060020a031690565b601054600160a060020a0316331490565b60408051808201909152600381527f4157470000000000000000000000000000000000000000000000000000000000602082015281565b612276612226565b15156122ba576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f0181613454565b61201033612c50565b60016020526000908152604090205460ff1681565b6122e9612226565b151561232d576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f018161349c565b600d5460009060ff1615612382576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d83836134ec565b600d5460009060ff16156123d8576040805160e560020a62461bcd0281526020600482015260106024820152600080516020613a68833981519152604482015290519081900360640190fd5b61104d8383613528565b6000610ff1600e8363ffffffff61308e16565b60025481565b600854600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b61243d612226565b1515612481576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b61248d84848484613535565b50505050565b600b54600160a060020a031681565b6124aa612226565b15156124ee576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b6013805460ff19169055565b612010336125ad565b61250b612226565b151561254f576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f018161362f565b612560612226565b15156125a4576040805160e560020a62461bcd02815260206004820181905260248201526000805160206139c0833981519152604482015290519081900360640190fd5b610f01816136d5565b6125be600f8263ffffffff61371d16565b604051600160a060020a038216907f90eabbc0c667db2a5029ed6bc0f5fe9f356d11684a4ca9fcfaec0e53f12b9c8e90600090a250565b60008282111561264f576040805160e560020a62461bcd02815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082151561266657506000610ff1565b82820282848281151561267557fe5b041461104d5760405160e560020a62461bcd02815260040180806020018281038252602181526020018061399f6021913960400191505060405180910390fd5b600080821161270e576040805160e560020a62461bcd02815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481151561271b57fe5b04949350505050565b60006127313384846132ce565b50600192915050565b612742611312565b600160a060020a03909116600090815260076020526040902055565b600160a060020a03831615156127a85760405160e560020a62461bcd028152600401808060200182810382526025815260200180613a436025913960400191505060405180910390fd5b600160a060020a03821615156127f25760405160e560020a62461bcd0281526004018080602001828103825260238152602001806138836023913960400191505060405180910390fd5b600160a060020a03831660009081526001602052604090205460ff166003811415612867576040805160e560020a62461bcd02815260206004820152601560248201527f53656e64657220697320626c61636b6c69737465640000000000000000000000604482015290519081900360640190fd5b600061289f62989680610fe58560058660ff1681548110151561288657fe5b906000526020600020015461265590919063ffffffff16565b6004805460ff85169081106128b057fe5b90600052602060002001546128c487610f5a565b0101905060006128d385610f5a565b905060006128e7838363ffffffff61378916565b600160a060020a038816600090815260208190526040902054909150612919908490610fcd908863ffffffff6125f516565b600160a060020a038089166000908152602081905260408082209390935590881681522054612954908390610fcd908863ffffffff61378916565b600160a060020a038716600090815260208190526040902055612975611312565b600160a060020a038816600090815260076020526040902055612996611312565b600160a060020a0380881660008181526007602090815260409182902094909455805189815290519193928b1692600080516020613a0283398151915292918290030190a36000811115612bf057600854600160a060020a0316600090815260208190526040902054612a0f908263ffffffff61378916565b60088054600160a060020a03908116600090815260208181526040918290209490945591548251878152925190821693918b1692600080516020613a0283398151915292908290030190a3600854604080518481529051600160a060020a0392831692891691600080516020613a02833981519152919081900360200190a360085460408051602480820185905282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b40000000000000000000000000000000000000000000000000000000017815291518151600094600160a060020a03169382918083835b60208310612b2c5780518252601f199092019160209182019101612b0d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612b8e576040519150601f19603f3d011682016040523d82523d6000602084013e612b93565b606091505b50509050801515612bee576040805160e560020a62461bcd02815260206004820152601e60248201527f466565204d616e61676572206973206e6f7420726573706f6e64696e672e0000604482015290519081900360640190fd5b505b50505050505050565b6000612c0684848461275e565b600160a060020a038416600090815260096020908152604080832033808552925290912054612c46918691612c41908663ffffffff6125f516565b6132ce565b5060019392505050565b612c61600e8263ffffffff61371d16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b336000818152600960209081526040808320600160a060020a03871684529091528120549091612731918590612c41908663ffffffff61378916565b600160a060020a0382161515612d34576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6000612d5262989680610fe56006548561265590919063ffffffff16565b600a54909150612d68908363ffffffff61378916565b600a55600160a060020a038316600090815260208190526040902054612d9a908290610fcd908563ffffffff61378916565b600160a060020a03841660008181526020819052604081209290925590600080516020613a02833981519152612dd6858563ffffffff6125f516565b60408051918252519081900360200190a360008111156110dd57600854600160a060020a0316600090815260208190526040902054612e1b908263ffffffff61378916565b60088054600160a060020a03908116600090815260208181526040808320959095559254845186815294519216939092600080516020613a0283398151915292918290030190a360085460408051602480820185905282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe4474b40000000000000000000000000000000000000000000000000000000017815291518151600094600160a060020a03169382918083835b60208310612f005780518252601f199092019160209182019101612ee1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612f62576040519150601f19603f3d011682016040523d82523d6000602084013e612f67565b606091505b5050905080151561248d576040805160e560020a62461bcd02815260206004820152601e60248201527f466565204d616e61676572206973206e6f7420726573706f6e64696e672e0000604482015290519081900360640190fd5b600160a060020a038216151561300c5760405160e560020a62461bcd028152600401808060200182810382526021815260200180613a226021913960400191505060405180910390fd5b600a5461301f908263ffffffff6125f516565b600a55600160a060020a03821660009081526020819052604090205461304b908263ffffffff6125f516565b600160a060020a03831660008181526020818152604080832094909455835185815293519193600080516020613a02833981519152929081900390910190a35050565b6000600160a060020a03821615156130da5760405160e560020a62461bcd0281526004018080602001828103825260228152602001806139e06022913960400191505060405180910390fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600b54604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561316457600080fd5b505afa158015613178573d6000803e3d6000fd5b505050506040513d602081101561318e57600080fd5b5051604080518281529051919250600160a060020a03841691600091600080516020613a02833981519152919081900360200190a3600160a060020a0382166000908152602081905260409020819055600a546131f1908263ffffffff61378916565b600a555050565b600080600080845160411415156132155760009350505050610ff1565b50505060208201516040830151606084015160001a601b60ff8216101561323a57601b015b8060ff16601b1415801561325257508060ff16601c14155b156132635760009350505050610ff1565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156132ba573d6000803e3d6000fd5b505050602060405103519350505050610ff1565b600160a060020a03831615156133185760405160e560020a62461bcd028152600401808060200182810382526024815260200180613a886024913960400191505060405180910390fd5b600160a060020a03821615156133625760405160e560020a62461bcd0281526004018080602001828103825260228152602001806138fc6022913960400191505060405180910390fd5b600160a060020a03808416600081815260096020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6133d5600c8263ffffffff61371d16565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61341d600c8263ffffffff6137e616565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b613465600e8263ffffffff6137e616565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b60006134a782610f5a565b90506134b1611312565b600160a060020a03831660009081526007602052604081209190915581111561124857600854611248908390600160a060020a03168361275e565b336000818152600960209081526040808320600160a060020a03871684529091528120549091612731918590612c41908663ffffffff6125f516565b600061273133848461275e565b600160a060020a03841660009081526020819052604090205461355e908363ffffffff6125f516565b600160a060020a038086166000908152602081905260408082209390935590851681522054613593908363ffffffff61378916565b600160a060020a03808516600081815260208181526040918290209490945580518681529051919392881692600080516020613a0283398151915292918290030190a382600160a060020a031684600160a060020a03167f91f8b835be584629107fbfe5be695e33c56ebe55697d7c8a30d309a2b8dce9378484604051808381526020018281526020019250505060405180910390a350505050565b600160a060020a03811615156136795760405160e560020a62461bcd0281526004018080602001828103825260268152602001806138d66026913960400191505060405180910390fd5b601054604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360108054600160a060020a031916600160a060020a0392909216919091179055565b6136e6600f8263ffffffff6137e616565b604051600160a060020a038216907f86e57fd2b90329052917118de7c3f521f400d439b9650deaa906a25b08b9456090600090a250565b613727828261308e565b15156137675760405160e560020a62461bcd02815260040180806020018281038252602181526020018061397e6021913960400191505060405180910390fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60008282018381101561104d576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6137f0828261308e565b15613845576040805160e560020a62461bcd02815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6040805180820190915260008152606060208201529056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734275726e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204275726e657220726f6c654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f20616464726573735061757361626c653a207061757365640000000000000000000000000000000045524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734665656c6573733a205461726765742073686f756c642062652074686520657874656e64656420636f6e7472616374a165627a7a723058209ce91c89b7de19f2f5221b1c3deead8577a2d45162c687c0054fc1889b0c61c80029

Deployed Bytecode Sourcemap

35713:5233:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39907:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39907:99:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39907:99:0;-1:-1:-1;;;;;39907:99:0;;:::i;:::-;;13560:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13560:68:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13560:68:0;;:::i;:::-;;;;;;;;;;;;;;;;36266:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36266:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36266:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15596:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15596:232:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15596:232:0;-1:-1:-1;;;;;15596:232:0;;:::i;27987:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27987:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27987:140:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16434:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16434:91:0;;;:::i;39154:190::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39154:190:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39154:190:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;39154:190:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39154:190:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;39154:190:0;;-1:-1:-1;39154:190:0;-1:-1:-1;39154:190:0;:::i;40500:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40500:190:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40500:190:0;;;;;;;;:::i;27819:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27819:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27819:160:0;;;;;;;;;;;;;;;;;:::i;13958:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13958:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13958:47:0;-1:-1:-1;;;;;13958:47:0;;:::i;39576:99::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39576:99:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39576:99:0;-1:-1:-1;;;;;39576:99:0;;:::i;14471:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14471:129:0;;;:::i;36170:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36170:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28135:167;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28135:167:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28135:167:0;;;;;;;;:::i;27341:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27341:118:0;;;:::i;40326:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40326:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40326:108:0;;;;;;;;:::i;40119:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40119:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40119:94:0;;:::i;2218:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2218:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2218:109:0;-1:-1:-1;;;;;2218:109:0;;:::i;24858:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24858:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24858:109:0;-1:-1:-1;;;;;24858:109:0;;:::i;38594:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38594:220:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38594:220:0;-1:-1:-1;;;;;38594:220:0;;:::i;37094:285::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37094:285:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37094:285:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;37094:285:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37094:285:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;37094:285:0;;-1:-1:-1;37094:285:0;-1:-1:-1;37094:285:0;:::i;34599:926::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;34599:926:0;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;34599:926:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34599:926:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34599:926:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34599:926:0;;;;;;;;;-1:-1:-1;34599:926:0;;;;-1:-1:-1;34599:926:0;;;;-1:-1:-1;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;34599:926:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;34599:926:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;34599:926:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34599:926:0;;-1:-1:-1;34599:926:0;;-1:-1:-1;;;;;34599:926:0:i;40756:187::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40756:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40756:187:0;;;;;;;;:::i;13729:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13729:29:0;;;:::i;26550:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26550:78:0;;;:::i;38087:422::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38087:422:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;38087:422:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;37746:183::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37746:183:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37746:183:0;;-1:-1:-1;;;;;37746:183:0;;;;;;;;:::i;25075:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25075:77:0;;;:::i;16588:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16588:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16588:110:0;-1:-1:-1;;;;;16588:110:0;;:::i;30183:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30183:140:0;;;:::i;33963:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33963:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33963:41:0;-1:-1:-1;;;;;33963:41:0;;:::i;24975:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24975:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24975:92:0;-1:-1:-1;;;;;24975:92:0;;:::i;13132:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13132:65:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13132:65:0;;:::i;27130:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27130:116:0;;;:::i;13318:66::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13318:66:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13318:66:0;;:::i;29372:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29372:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;29372:79:0;;;;;;;;;;;;;;29738:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29738:92:0;;;:::i;36372:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36372:37:0;;;:::i;39412:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39412:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39412:93:0;-1:-1:-1;;;;;39412:93:0;;:::i;3729:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3729:77:0;;;:::i;12802:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12802:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12802:43:0;-1:-1:-1;;;;;12802:43:0;;:::i;38930:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38930:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38930:111:0;-1:-1:-1;;;;;38930:111:0;;:::i;28310:177::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28310:177:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28310:177:0;;;;;;;;:::i;27679:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27679:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27679:132:0;;;;;;;;:::i;3884:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3884:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3884:109:0;-1:-1:-1;;;;;3884:109:0;;:::i;12920:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12920:32:0;;;:::i;14113:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14113:25:0;;;:::i;17130:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17130:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17130:134:0;;;;;;;;;;:::i;37488:176::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37488:176:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;37488:176:0;;;;;;;;;;;;;;;;;;;;;;:::i;14324:74::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14324:74:0;;;:::i;36702:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36702:83:0;;;:::i;2063:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2063:77:0;;;:::i;30478:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30478:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30478:109:0;-1:-1:-1;;;;;30478:109:0;;:::i;39743:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39743:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39743:93:0;-1:-1:-1;;;;;39743:93:0;;:::i;39907:99::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39976:22;39990:7;39976:13;:22::i;:::-;39907:99;:::o;13560:68::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13560:68:0;:::o;36266:41::-;;;;;;;;;;;;;;;;;;;:::o;15596:232::-;-1:-1:-1;;;;;15782:18:0;;15664:7;15782:18;;;:9;:18;;;;;;15766:15;:35;;15691:129;;13859:8;;15692:110;;15766:15;;15782:18;;;15766:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15741:18:0;;;;;;;;;;;;15714:11;:20;;;;;;;15693:67;;15741:18;15693:67;;15694:15;:13;:15::i;:::-;:19;:41;:19;:41;:::i;:::-;15693:47;:67;:47;:67;:::i;15692:110::-;15691:116;:129;:116;:129;:::i;:::-;15684:136;15596:232;-1:-1:-1;;15596:232:0:o;27987:140::-;26787:7;;28066:4;;26787:7;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;28090:29;28104:7;28113:5;28090:13;:29::i;:::-;28083:36;27987:140;-1:-1:-1;;;27987:140:0:o;16434:91::-;16505:12;;16434:91;:::o;39154:190::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39245:6;39240:97;39255:18;;;39240:97;;;39295:30;39312:9;;39322:1;39312:12;;;;;;;;;;;;;-1:-1:-1;;;;;39312:12:0;39295:16;:30::i;:::-;39275:3;;39240:97;;;;39154:190;;:::o;40500:::-;34214:9;;-1:-1:-1;;;;;34214:9:0;:23;34210:165;;;34254:9;:22;;-1:-1:-1;;;;;;34254:22:0;34266:10;34254:22;;;26787:7;;;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;40609:9;;40599:36;;-1:-1:-1;;;;;40609:9:0;40620:7;40629:5;40599:9;:36::i;:::-;40651:31;;40676:5;;-1:-1:-1;;;;;40651:31:0;;;;;;;;34307:9;:22;;-1:-1:-1;;;;;;34307:22:0;;;34210:165;;;26787:7;;;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;40609:9;;40599:36;;-1:-1:-1;;;;;40609:9:0;40620:7;40629:5;40599:9;:36::i;:::-;40651:31;;40676:5;;-1:-1:-1;;;;;40651:31:0;;;;;;;;34210:165;40500:190;;:::o;27819:160::-;26787:7;;27912:4;;26787:7;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;27936:35;27955:4;27961:2;27965:5;27936:18;:35::i;:::-;27929:42;27819:160;-1:-1:-1;;;;27819:160:0:o;13958:47::-;;;;;;;;;;;;;:::o;39576:99::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39645:22;39659:7;39645:13;:22::i;14471:129::-;14563:17;;14517:7;;14544:48;;14545:15;:35;14586:5;14544:48;:41;:48;:::i;:::-;14537:55;;14471:129;:::o;36170:35::-;36203:2;36170:35;:::o;28135:167::-;26787:7;;28226:4;;26787:7;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;28250:44;28274:7;28283:10;28250:23;:44::i;27341:118::-;24757:20;24766:10;24757:8;:20::i;:::-;24749:81;;;;;;-1:-1:-1;;;;;24749:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26986:7;;;;26978:40;;;;;;;-1:-1:-1;;;;;26978:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27400:7;:15;;-1:-1:-1;;27400:15:0;;;27431:20;;;27440:10;27431:20;;;;;;;;;;;;;27341:118::o;40326:108::-;3557:20;3566:10;3557:8;:20::i;:::-;3549:81;;;;;;-1:-1:-1;;;;;3549:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40404:22;40410:7;40419:6;40404:5;:22::i;40119:94::-;1891:20;1900:10;1891:8;:20::i;:::-;1883:81;;;;;;-1:-1:-1;;;;;1883:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40180:25;40186:10;40198:6;40180:5;:25::i;2218:109::-;2274:4;2298:21;:8;2311:7;2298:21;:12;:21;:::i;24858:109::-;24914:4;24938:21;:8;24951:7;24938:21;:12;:21;:::i;38594:220::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;38683:10;;38699:48;;;38665:12;38699:48;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38699:48:0;;;;;;;25:18:-1;;61:17;;38699:48:0;182:15:-1;38699:48:0;179:29:-1;160:49;;38683:65:0;;;;38665:12;;-1:-1:-1;;;;;38683:10:0;;:65;;;;25:18:-1;38683:65:0;;25:18:-1;36:153;66:2;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;;;38683:65:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;38664:84:0;;;38767:7;38759:16;;;;;;;;-1:-1:-1;38786:10:0;:20;;-1:-1:-1;;;;;;38786:20:0;-1:-1:-1;;;;;38786:20:0;;;;;;;;;;38594:220::o;37094:285::-;26986:7;;;;26978:40;;;;;;;-1:-1:-1;;;;;26978:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36896:14;;;;36888:45;;;;;;;-1:-1:-1;;;;;36888:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;37216:14;;;;;;;;;-1:-1:-1;;;;;37216:14:0;-1:-1:-1;;;;;37212:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37212:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37212:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37212:28:0;37204:61;;;;;;;-1:-1:-1;;;;;37204:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37281:6;37276:96;37291:18;;;37276:96;;;37331:29;37347:9;;37357:1;37347:12;;;;;;;;;;;;;-1:-1:-1;;;;;37347:12:0;37331:15;:29::i;:::-;37311:3;;37276:96;;34599:926;34810:4;-1:-1:-1;;;;;34802:23:0;;;34794:83;;;;-1:-1:-1;;;;;34794:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34894:19;:56;;;;;;;;;;;;;;;;;;;;34961:12;35003:6;35038;35046:4;35052:5;35021:37;;;;;;-1:-1:-1;;;;;35021:37:0;-1:-1:-1;;;;;35021:37:0;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;35021:37:0;;;;;-1:-1:-1;35021:37:0;;;26:21:-1;;;6:49;;35021:37:0;;;;;35011:48;;;;;;34986:74;;35011:48;;-1:-1:-1;34986:74:0;;;-1:-1:-1;34986:74:0;;;;;;-1:-1:-1;34986:74:0;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;34986:74:0;;;;;-1:-1:-1;34986:74:0;;;26:21:-1;;;6:49;;34986:74:0;;;;;34976:85;;;;;;;;;-1:-1:-1;35084:29:0;;-1:-1:-1;34976:85:0;;-1:-1:-1;35109:3:0;35084:18;:29::i;:::-;35072:9;:41;;-1:-1:-1;;;;;;35072:41:0;-1:-1:-1;;;;;35072:41:0;;;;;;;;35132:19;;;:9;;:19;35124:58;;;;;-1:-1:-1;;;;;35124:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35208:9;;-1:-1:-1;;;;;35208:9:0;35201:17;;;;:6;:17;;;;;:19;;35208:9;35201:19;;;;;:28;;35193:71;;;;;-1:-1:-1;;;;;35193:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35276:13;35291:21;35316:6;-1:-1:-1;;;;;35316:11:0;35334:9;35345:4;35316:34;;;;;;;;;;;;;36:153:-1;66:2;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;;;35316:34:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;35275:75:0;;;;35361:28;;:::i;:::-;-1:-1:-1;35392:30:0;;;;;;;;;;;;;;;;;;;;;35433:51;;;;;-1:-1:-1;;;;;35433:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35495:9:0;:22;;-1:-1:-1;;;;;;35495:22:0;;;-1:-1:-1;;;;;;;;34599:926:0:o;40756:187::-;34214:9;;-1:-1:-1;;;;;34214:9:0;:23;34210:165;;;34254:9;:22;;-1:-1:-1;;;;;;34254:22:0;34266:10;34254:22;;;26787:7;;;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;40863:9;;40854:35;;-1:-1:-1;;;;;40863:9:0;40874:7;40883:5;40854:8;:35::i;:::-;40905:30;;40929:5;;-1:-1:-1;;;;;40905:30:0;;;;;;;;34307:9;:22;;-1:-1:-1;;;;;;34307:22:0;;;34210:165;;;26787:7;;;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;40863:9;;40854:35;;-1:-1:-1;;;;;40863:9:0;40874:7;40883:5;40854:8;:35::i;:::-;40905:30;;40929:5;;-1:-1:-1;;;;;40905:30:0;;;;;;;;40756:187;;:::o;13729:29::-;;;;:::o;26550:78::-;26613:7;;;;26550:78;:::o;38087:422::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;38265:1;38258:8;;;;;38250:52;;;;;-1:-1:-1;;;;;38250:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38338:16;38313:15;38329:5;38313:22;;;;;;;;;;;;;;;;;;;:41;;;;38391:17;38365:16;38382:5;38365:23;;;;;;;;;;;;;;;;;;;:43;;;;38447:19;38419:18;38438:5;38419:25;;;;;;;;;;;;;;;;;;;;;:47;-1:-1:-1;38477:10:0;:24;-1:-1:-1;;;38087:422:0:o;37746:183::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;37847:1;37840:8;;;;;37832:52;;;;;-1:-1:-1;;;;;37832:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37895:18:0;;;;;;;;:9;:18;;;;;:26;;-1:-1:-1;;37895:26:0;;;;;;;;;;;37746:183::o;25075:77::-;25119:25;25133:10;25119:13;:25::i;:::-;25075:77::o;16588:110::-;-1:-1:-1;;;;;16672:18:0;16645:7;16672:18;;;;;;;;;;;;16588:110::o;30183:140::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;30266:6;;30245:40;;30282:1;;-1:-1:-1;;;;;30266:6:0;;30245:40;;30282:1;;30245:40;30296:6;:19;;-1:-1:-1;;;;;;30296:19:0;;;30183:140::o;33963:41::-;;;;;;;;;;;;;:::o;24975:92::-;24757:20;24766:10;24757:8;:20::i;:::-;24749:81;;;;;;-1:-1:-1;;;;;24749:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25040:19;25051:7;25040:10;:19::i;13132:65::-;;;;;;;;;;;27130:116;24757:20;24766:10;24757:8;:20::i;:::-;24749:81;;;;;;-1:-1:-1;;;;;24749:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26787:7;;;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;27190:7;:14;;-1:-1:-1;;27190:14:0;27200:4;27190:14;;;27220:18;;;27227:10;27220:18;;;;;;;;;;;;;27130:116::o;13318:66::-;;;;;;;;;;;29372:79;29437:6;;-1:-1:-1;;;;;29437:6:0;29372:79;:::o;29738:92::-;29816:6;;-1:-1:-1;;;;;29816:6:0;29802:10;:20;;29738:92::o;36372:37::-;;;;;;;;;;;;;;;;;;;:::o;39412:93::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39478:19;39489:7;39478:10;:19::i;3729:77::-;3773:25;3787:10;3773:13;:25::i;12802:43::-;;;;;;;;;;;;;;;:::o;38930:111::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39005:28;39025:7;39005:19;:28::i;28310:177::-;26787:7;;28406:4;;26787:7;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;28430:49;28454:7;28463:15;28430:23;:49::i;27679:132::-;26787:7;;27754:4;;26787:7;;26786:8;26778:37;;;;;-1:-1:-1;;;;;26778:37:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26778:37:0;;;;;;;;;;;;;;;27778:25;27793:2;27797:5;27778:14;:25::i;3884:109::-;3940:4;3964:21;:8;3977:7;3964:21;:12;:21;:::i;12920:32::-;;;;:::o;14113:25::-;;;-1:-1:-1;;;;;14113:25:0;;:::o;17130:134::-;-1:-1:-1;;;;;17229:18:0;;;17202:7;17229:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17130:134::o;37488:176::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;37609:47;37624:6;37631:9;37641:6;37648:7;37609:14;:47::i;:::-;37488:176;;;;:::o;14324:74::-;;;-1:-1:-1;;;;;14324:74:0;;:::o;36702:83::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;36755:14;:22;;-1:-1:-1;;36755:22:0;;;36702:83::o;2063:77::-;2107:25;2121:10;2107:13;:25::i;30478:109::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;30551:28;30570:8;30551:18;:28::i;39743:93::-;29584:9;:7;:9::i;:::-;29576:54;;;;;;;-1:-1:-1;;;;;29576:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29576:54:0;;;;;;;;;;;;;;;39809:19;39820:7;39809:10;:19::i;2601:130::-;2661:24;:8;2677:7;2661:24;:15;:24;:::i;:::-;2701:22;;-1:-1:-1;;;;;2701:22:0;;;;;;;;2601:130;:::o;8879:184::-;8937:7;8965:6;;;;8957:49;;;;;-1:-1:-1;;;;;8957:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9029:5:0;;;8879:184::o;9314:470::-;9372:7;9616:6;;9612:47;;;-1:-1:-1;9646:1:0;9639:8;;9612:47;9683:5;;;9687:1;9683;:5;9707;;;;;;;;:10;9699:56;;;;-1:-1:-1;;;;;9699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10252:333;10310:7;10405:5;;;10397:44;;;;;-1:-1:-1;;;;;10397:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10452:9;10468:1;10464;:5;;;;;;;;;10252:333;-1:-1:-1;;;;10252:333:0:o;17411:148::-;17476:4;17493:36;17502:10;17514:7;17523:5;17493:8;:36::i;:::-;-1:-1:-1;17547:4:0;17411:148;;;;:::o;16260:109::-;16346:15;:13;:15::i;:::-;-1:-1:-1;;;;;16323:20:0;;;;;;;:11;:20;;;;;:38;16260:109::o;20110:1373::-;-1:-1:-1;;;;;20208:20:0;;;;20200:70;;;;-1:-1:-1;;;;;20200:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20289:23:0;;;;20281:71;;;;-1:-1:-1;;;;;20281:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20381:17:0;;20367:11;20381:17;;;:9;:17;;;;;;;;20426:1;20417:10;;;20409:44;;;;;-1:-1:-1;;;;;20409:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20466:17;20544:56;13859:8;20545:37;20575:6;20545:18;20564:5;20545:25;;;;;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;20544:56::-;20517:16;:23;;;;;;;;;;;;;;;;;;;;20486:28;20507:6;20486:20;:28::i;:::-;:54;:115;20466:135;;20612:26;20641:31;20662:9;20641:20;:31::i;:::-;20612:60;-1:-1:-1;20683:16:0;20702:33;:9;20612:60;20702:33;:13;:33;:::i;:::-;-1:-1:-1;;;;;20769:17:0;;:9;:17;;;;;;;;;;;20683:52;;-1:-1:-1;20768:46:0;;20804:9;;20769:29;;20791:6;20769:29;:21;:29;:::i;20768:46::-;-1:-1:-1;;;;;20748:17:0;;;:9;:17;;;;;;;;;;;:66;;;;20849:20;;;;;;;20848:58;;20887:18;;20849:32;;20874:6;20849:32;:24;:32;:::i;20848:58::-;-1:-1:-1;;;;;20825:20:0;;:9;:20;;;;;;;;;;:81;20941:15;:13;:15::i;:::-;-1:-1:-1;;;;;20919:19:0;;;;;;:11;:19;;;;;:37;20992:15;:13;:15::i;:::-;-1:-1:-1;;;;;20967:22:0;;;;;;;:11;:22;;;;;;;;;:40;;;;21023:35;;;;;;;20967:22;;21023:35;;;;-1:-1:-1;;;;;;;;;;;21023:35:0;;;;;;;;21086:1;21075:8;:12;21071:405;;;21138:10;;-1:-1:-1;;;;;21138:10:0;21128:9;:21;;;;;;;;;;;:35;;21154:8;21128:35;:25;:35;:::i;:::-;21114:10;;;-1:-1:-1;;;;;21114:10:0;;;21104:9;:21;;;;;;;;;;;;:59;;;;21200:10;;21183:39;;;;;;;21200:10;;;;21183:39;;;;-1:-1:-1;;;;;;;;;;;21183:39:0;;;;;;;;21262:10;;21242:51;;;;;;;;-1:-1:-1;;;;;21262:10:0;;;;21242:51;;;-1:-1:-1;;;;;;;;;;;21242:51:0;;;;;;;;;21327:10;;21343:55;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21343:55:0;;;;;;;25:18:-1;;61:17;;21343:55:0;182:15:-1;21343:55:0;179:29:-1;160:49;;21327:72:0;;;;21309:12;;-1:-1:-1;;;;;21327:10:0;;:72;;;;25:18:-1;36:153;66:2;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;;;21327:72:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;21308:91:0;;;21422:7;21414:50;;;;;;;-1:-1:-1;;;;;21414:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21071:405;;20110:1373;;;;;;;:::o;18030:256::-;18119:4;18136:36;18146:6;18154:9;18165:6;18136:9;:36::i;:::-;-1:-1:-1;;;;;18212:19:0;;;;;;:11;:19;;;;;;;;18200:10;18212:31;;;;;;;;;18183:73;;18192:6;;18212:43;;18248:6;18212:43;:35;:43;:::i;:::-;18183:8;:73::i;:::-;-1:-1:-1;18274:4:0;18030:256;;;;;:::o;4267:130::-;4327:24;:8;4343:7;4327:24;:15;:24;:::i;:::-;4367:22;;-1:-1:-1;;;;;4367:22:0;;;;;;;;4267:130;:::o;18695:206::-;18801:10;18775:4;18822:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18822:32:0;;;;;;;;;;18775:4;;18792:79;;18813:7;;18822:48;;18859:10;18822:48;:36;:48;:::i;21764:814::-;-1:-1:-1;;;;;21840:21:0;;;;21832:65;;;;;-1:-1:-1;;;;;21832:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21910:24;21937:39;13859:8;21937:22;21948:10;;21937:6;:10;;:22;;;;:::i;:39::-;22004:12;;21910:66;;-1:-1:-1;22004:24:0;;22021:6;22004:24;:16;:24;:::i;:::-;21989:12;:39;-1:-1:-1;;;;;22060:18:0;;:9;:18;;;;;;;;;;;:52;;22095:16;;22060:30;;22083:6;22060:30;:22;:30;:::i;:52::-;-1:-1:-1;;;;;22039:18:0;;:9;:18;;;;;;;;;;:73;;;;:18;-1:-1:-1;;;;;;;;;;;22159:28:0;:6;22170:16;22159:28;:10;:28;:::i;:::-;22128:61;;;;;;;;;;;;;;;22225:1;22206:16;:20;22202:369;;;22277:10;;-1:-1:-1;;;;;22277:10:0;22267:9;:21;;;;;;;;;;;:43;;22293:16;22267:43;:25;:43;:::i;:::-;22253:10;;;-1:-1:-1;;;;;22253:10:0;;;22243:9;:21;;;;;;;;;;;:67;;;;22351:10;;22330:50;;;;;;;22351:10;;;22243:9;;-1:-1:-1;;;;;;;;;;;22330:50:0;;;;;;;;22414:10;;22430:63;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22430:63:0;;;;;;;25:18:-1;;61:17;;22430:63:0;182:15:-1;22430:63:0;179:29:-1;160:49;;22414:80:0;;;;22396:12;;-1:-1:-1;;;;;22414:10:0;;:80;;;;25:18:-1;36:153;66:2;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;;;22414:80:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22395:99:0;;;22517:7;22509:50;;;;;;;-1:-1:-1;;;;;22509:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22910:306;-1:-1:-1;;;;;22985:21:0;;;;22977:67;;;;-1:-1:-1;;;;;22977:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23072:12;;:23;;23089:5;23072:23;:16;:23;:::i;:::-;23057:12;:38;-1:-1:-1;;;;;23127:18:0;;:9;:18;;;;;;;;;;;:29;;23150:5;23127:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;23106:18:0;;:9;:18;;;;;;;;;;;:50;;;;23172:36;;;;;;;23106:9;;-1:-1:-1;;;;;;;;;;;23172:36:0;;;;;;;;;;22910:306;;:::o;868:203::-;940:4;-1:-1:-1;;;;;965:21:0;;;;957:68;;;;-1:-1:-1;;;;;957:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1043:20:0;:11;:20;;;;;;;;;;;;;;;868:203::o;14766:271::-;14854:14;;14845:43;;;;;;-1:-1:-1;;;;;14845:43:0;;;;;;;;;14828:14;;14854;;;;;14845:34;;:43;;;;;;;;;;;;;;;14854:14;14845:43;;;5:2:-1;;;;30:1;27;20:12;5:2;14845:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14845:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14845:43:0;14904:37;;;;;;;;14845:43;;-1:-1:-1;;;;;;14904:37:0;;;14921:1;;-1:-1:-1;;;;;;;;;;;14904:37:0;;;;;14845:43;14904:37;;;-1:-1:-1;;;;;14952:18:0;;:9;:18;;;;;;;;;;:27;;;15005:12;;:24;;14973:6;15005:24;:16;:24;:::i;:::-;14990:12;:39;-1:-1:-1;;14766:271:0:o;31821:1115::-;31920:7;31945:9;31965;31985:7;32048:3;:10;32062:2;32048:16;;32044:68;;;32097:1;32081:19;;;;;;;32044:68;-1:-1:-1;;;32415:2:0;32406:12;;32400:19;32453:2;32444:12;;32438:19;32499:2;32490:12;;32484:19;32481:1;32476:28;32627:2;32623:6;;;;32619:46;;;32651:2;32646:7;32619:46;32745:1;:7;;32750:2;32745:7;;:18;;;;;32756:1;:7;;32761:2;32756:7;;32745:18;32741:188;;;32796:1;32780:19;;;;;;;32741:188;32893:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32893:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32893:24:0;;;;;;;;32886:31;;;;;;;23656:335;-1:-1:-1;;;;;23749:19:0;;;;23741:68;;;;-1:-1:-1;;;;;23741:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23828:21:0;;;;23820:68;;;;-1:-1:-1;;;;;23820:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23901:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;23952:31;;;;;;;;;;;;;;;;;23656:335;;;:::o;25290:130::-;25350:24;:8;25366:7;25350:24;:15;:24;:::i;:::-;25390:22;;-1:-1:-1;;;;;25390:22:0;;;;;;;;25290:130;:::o;25160:122::-;25217:21;:8;25230:7;25217:21;:12;:21;:::i;:::-;25254:20;;-1:-1:-1;;;;;25254:20:0;;;;;;;;25160:122;:::o;4068:::-;4125:21;:8;4138:7;4125:21;:12;:21;:::i;:::-;4162:20;;-1:-1:-1;;;;;4162:20:0;;;;;;;;4068:122;:::o;15909:270::-;15975:18;15996:29;16017:7;15996:20;:29::i;:::-;15975:50;;16059:15;:13;:15::i;:::-;-1:-1:-1;;;;;16036:20:0;;;;;;:11;:20;;;;;:38;;;;16089:14;;16085:87;;;16138:10;;16120:40;;16130:7;;-1:-1:-1;;;;;16138:10:0;16149;16120:9;:40::i;19404:216::-;19515:10;19489:4;19536:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19536:32:0;;;;;;;;;;19489:4;;19506:84;;19527:7;;19536:53;;19573:15;19536:53;:36;:53;:::i;16911:156::-;16980:4;16997:40;17007:10;17019:9;17030:6;16997:9;:40::i;15163:351::-;-1:-1:-1;;;;;15295:17:0;;:9;:17;;;;;;;;;;;:29;;15317:6;15295:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;15275:17:0;;;:9;:17;;;;;;;;;;;:49;;;;15358:20;;;;;;;:32;;15383:6;15358:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;15335:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;15406:35;;;;;;;15335:20;;15406:35;;;;-1:-1:-1;;;;;;;;;;;15406:35:0;;;;;;;;15479:9;-1:-1:-1;;;;;15457:49:0;15471:6;-1:-1:-1;;;;;15457:49:0;;15490:6;15498:7;15457:49;;;;;;;;;;;;;;;;;;;;;;;;15163:351;;;;:::o;30693:229::-;-1:-1:-1;;;;;30767:22:0;;;;30759:73;;;;-1:-1:-1;;;;;30759:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30869:6;;30848:38;;-1:-1:-1;;;;;30848:38:0;;;;30869:6;;30848:38;;30869:6;;30848:38;30897:6;:17;;-1:-1:-1;;;;;;30897:17:0;-1:-1:-1;;;;;30897:17:0;;;;;;;;;;30693:229::o;2402:122::-;2459:21;:8;2472:7;2459:21;:12;:21;:::i;:::-;2496:20;;-1:-1:-1;;;;;2496:20:0;;;;;;;;2402:122;:::o;590:183::-;670:18;674:4;680:7;670:3;:18::i;:::-;662:64;;;;;;-1:-1:-1;;;;;662:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;737:20:0;760:5;737:20;;;;;;;;;;;:28;;-1:-1:-1;;737:28:0;;;590:183::o;8423:181::-;8481:7;8513:5;;;8537:6;;;;8529:46;;;;;-1:-1:-1;;;;;8529:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;332:178;410:18;414:4;420:7;410:3;:18::i;:::-;409:19;401:63;;;;;-1:-1:-1;;;;;401:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;475:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;475:27:0;498:4;475:27;;;332:178::o;35713:5233::-;;;;;;;;;;-1:-1:-1;35713:5233:0;;;;;;;;:::o

Swarm Source

bzzr://9ce91c89b7de19f2f5221b1c3deead8577a2d45162c687c0054fc1889b0c61c8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.