ETH Price: $3,122.18 (-0.42%)
Gas: 5 Gwei

Token

Paxos Gold (PAXG)
 

Overview

Max Total Supply

0 PAXG

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PAXGImplementation

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-29
*/

// File: contracts/zeppelin/SafeMath.sol

pragma solidity 0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    /**
    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two numbers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Multiplies two unsigned integers, reverts on 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);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

// File: contracts/PAXGImplementation.sol

pragma solidity 0.4.24;
pragma experimental "v0.5.0";



/**
 * @title PAXGImplementation
 * @dev this contract is a Pausable ERC20 token with Burn and Mint
 * controlled by a central SupplyController. By implementing PaxosImplementation
 * this contract also includes external methods for setting
 * a new implementation contract for the Proxy.
 * NOTE: The storage defined here will actually be held in the Proxy
 * contract and all calls to this contract should be made through
 * the proxy, including admin actions done as owner or supplyController.
 * Any call to transfer against this contract should fail
 * with insufficient funds since no tokens will be issued there.
 */
contract PAXGImplementation {

    /**
     * MATH
     */

    using SafeMath for uint256;

    /**
     * DATA
     */

    // INITIALIZATION DATA
    bool private initialized = false;

    // ERC20 BASIC DATA
    mapping(address => uint256) internal balances;
    uint256 internal totalSupply_;
    string public constant name = "Paxos Gold"; // solium-disable-line
    string public constant symbol = "PAXG"; // solium-disable-line uppercase
    uint8 public constant decimals = 18; // solium-disable-line uppercase

    // ERC20 DATA
    mapping(address => mapping(address => uint256)) internal allowed;

    // OWNER DATA
    address public owner;
    address public proposedOwner;

    // PAUSABILITY DATA
    bool public paused = false;

    // ASSET PROTECTION DATA
    address public assetProtectionRole;
    mapping(address => bool) internal frozen;

    // SUPPLY CONTROL DATA
    address public supplyController;

    // DELEGATED TRANSFER DATA
    address public betaDelegateWhitelister;
    mapping(address => bool) internal betaDelegateWhitelist;
    mapping(address => uint256) internal nextSeqs;
    // EIP191 header for EIP712 prefix
    string constant internal EIP191_HEADER = "\x19\x01";
    // Hash of the EIP712 Domain Separator Schema
    bytes32 constant internal EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH = keccak256(
        "EIP712Domain(string name,address verifyingContract)"
    );
    bytes32 constant internal EIP712_DELEGATED_TRANSFER_SCHEMA_HASH = keccak256(
        "BetaDelegatedTransfer(address to,uint256 value,uint256 serviceFee,uint256 seq,uint256 deadline)"
    );
    // Hash of the EIP712 Domain Separator data
    // solhint-disable-next-line var-name-mixedcase
    bytes32 public EIP712_DOMAIN_HASH;

    // FEE CONTROLLER DATA
    // fee decimals is only set for informational purposes.
    // 1 feeRate = .000001 oz of gold
    uint8 public constant feeDecimals = 6;

    // feeRate is measured in 100th of a basis point (parts per 1,000,000)
    // ex: a fee rate of 200 = 0.02% of an oz of gold
    uint256 public constant feeParts = 1000000;
    uint256 public feeRate;
    address public feeController;
    address public feeRecipient;

    /**
     * EVENTS
     */

    // ERC20 BASIC EVENTS
    event Transfer(address indexed from, address indexed to, uint256 value);

    // ERC20 EVENTS
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    // OWNABLE EVENTS
    event OwnershipTransferProposed(
        address indexed currentOwner,
        address indexed proposedOwner
    );
    event OwnershipTransferDisregarded(
        address indexed oldProposedOwner
    );
    event OwnershipTransferred(
        address indexed oldOwner,
        address indexed newOwner
    );

    // PAUSABLE EVENTS
    event Pause();
    event Unpause();

    // ASSET PROTECTION EVENTS
    event AddressFrozen(address indexed addr);
    event AddressUnfrozen(address indexed addr);
    event FrozenAddressWiped(address indexed addr);
    event AssetProtectionRoleSet (
        address indexed oldAssetProtectionRole,
        address indexed newAssetProtectionRole
    );

    // SUPPLY CONTROL EVENTS
    event SupplyIncreased(address indexed to, uint256 value);
    event SupplyDecreased(address indexed from, uint256 value);
    event SupplyControllerSet(
        address indexed oldSupplyController,
        address indexed newSupplyController
    );

    // DELEGATED TRANSFER EVENTS
    event BetaDelegatedTransfer(
        address indexed from, address indexed to, uint256 value, uint256 seq, uint256 serviceFee
    );
    event BetaDelegateWhitelisterSet(
        address indexed oldWhitelister,
        address indexed newWhitelister
    );
    event BetaDelegateWhitelisted(address indexed newDelegate);
    event BetaDelegateUnwhitelisted(address indexed oldDelegate);

    // FEE CONTROLLER EVENTS
    event FeeCollected(address indexed from, address indexed to, uint256 value);
    event FeeRateSet(
        uint256 indexed oldFeeRate,
        uint256 indexed newFeeRate
    );
    event FeeControllerSet(
        address indexed oldFeeController,
        address indexed newFeeController
    );
    event FeeRecipientSet(
        address indexed oldFeeRecipient,
        address indexed newFeeRecipient
    );

    /**
     * FUNCTIONALITY
     */

    // INITIALIZATION FUNCTIONALITY

    /**
     * @dev sets 0 initial tokens, the owner, the supplyController,
     * the fee controller and fee recipient.
     * this serves as the constructor for the proxy but compiles to the
     * memory model of the Implementation contract.
     */
    function initialize() public {
        require(!initialized, "already initialized");
        owner = msg.sender;
        proposedOwner = address(0);
        assetProtectionRole = address(0);
        totalSupply_ = 0;
        supplyController = msg.sender;
        feeRate = 0;
        feeController = msg.sender;
        feeRecipient = msg.sender;
        initializeDomainSeparator();
        initialized = true;
    }

    /**
     * The constructor is used here to ensure that the implementation
     * contract is initialized. An uncontrolled implementation
     * contract might lead to misleading state
     * for users who accidentally interact with it.
     */
    constructor() public {
        initialize();
        pause();
    }

    /**
     * @dev To be called when upgrading the contract using upgradeAndCall to add delegated transfers
     */
    function initializeDomainSeparator() public {
        // hash the name context with the contract address
        EIP712_DOMAIN_HASH = keccak256(abi.encodePacked(// solium-disable-line
                EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,
                keccak256(bytes(name)),
                bytes32(address(this))
            ));
    }

    // ERC20 BASIC FUNCTIONALITY

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    /**
    * @dev Transfer token to a specified address from msg.sender
    * Transfer additionally sends the fee to the fee controller
    * Note: the use of Safemath ensures that _value is nonnegative.
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
        require(_to != address(0), "cannot transfer to address zero");
        require(!frozen[_to] && !frozen[msg.sender], "address frozen");
        require(_value <= balances[msg.sender], "insufficient funds");

        _transfer(msg.sender, _to, _value);
        return true;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param _addr The address to query the the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address _addr) public view returns (uint256) {
        return balances[_addr];
    }

    // ERC20 FUNCTIONALITY

    /**
     * @dev Transfer tokens from one address to another
     * @param _from address The address which you want to send tokens from
     * @param _to address The address which you want to transfer to
     * @param _value uint256 the amount of tokens to be transferred
     */
    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    )
    public
    whenNotPaused
    returns (bool)
    {
        require(_to != address(0), "cannot transfer to address zero");
        require(!frozen[_to] && !frozen[_from] && !frozen[msg.sender], "address frozen");
        require(_value <= balances[_from], "insufficient funds");
        require(_value <= allowed[_from][msg.sender], "insufficient allowance");

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        _transfer(_from, _to, _value);

        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * 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
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     */
    function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
        require(!frozen[_spender] && !frozen[msg.sender], "address frozen");
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param _owner address The address which owns the funds.
     * @param _spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(
        address _owner,
        address _spender
    )
    public
    view
    returns (uint256)
    {
        return allowed[_owner][_spender];
    }

    function _transfer(address _from, address _to, uint256 _value) internal returns (uint256) {
        uint256 _fee = getFeeFor(_value);
        uint256 _principle = _value.sub(_fee);
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_principle);
        emit Transfer(_from, _to, _principle);
        emit Transfer(_from, feeRecipient, _fee);
        if (_fee > 0) {
            balances[feeRecipient] = balances[feeRecipient].add(_fee);
            emit FeeCollected(_from, feeRecipient, _fee);
        }

        return _principle;
    }

    // OWNER FUNCTIONALITY

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "onlyOwner");
        _;
    }

    /**
     * @dev Allows the current owner to begin transferring control of the contract to a proposedOwner
     * @param _proposedOwner The address to transfer ownership to.
     */
    function proposeOwner(address _proposedOwner) public onlyOwner {
        require(_proposedOwner != address(0), "cannot transfer ownership to address zero");
        require(msg.sender != _proposedOwner, "caller already is owner");
        proposedOwner = _proposedOwner;
        emit OwnershipTransferProposed(owner, proposedOwner);
    }

    /**
     * @dev Allows the current owner or proposed owner to cancel transferring control of the contract to a proposedOwner
     */
    function disregardProposeOwner() public {
        require(msg.sender == proposedOwner || msg.sender == owner, "only proposedOwner or owner");
        require(proposedOwner != address(0), "can only disregard a proposed owner that was previously set");
        address _oldProposedOwner = proposedOwner;
        proposedOwner = address(0);
        emit OwnershipTransferDisregarded(_oldProposedOwner);
    }

    /**
     * @dev Allows the proposed owner to complete transferring control of the contract to the proposedOwner.
     */
    function claimOwnership() public {
        require(msg.sender == proposedOwner, "onlyProposedOwner");
        address _oldOwner = owner;
        owner = proposedOwner;
        proposedOwner = address(0);
        emit OwnershipTransferred(_oldOwner, owner);
    }

    /**
     * @dev Reclaim all PAXG at the contract address.
     * This sends the PAXG tokens that this contract add holding to the owner.
     * Note: this is not affected by freeze constraints.
     */
    function reclaimPAXG() external onlyOwner {
        uint256 _balance = balances[this];
        balances[this] = 0;
        balances[owner] = balances[owner].add(_balance);
        emit Transfer(this, owner, _balance);
    }

    // PAUSABILITY FUNCTIONALITY

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

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyOwner {
        require(!paused, "already paused");
        paused = true;
        emit Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyOwner {
        require(paused, "already unpaused");
        paused = false;
        emit Unpause();
    }

    // ASSET PROTECTION FUNCTIONALITY

    /**
     * @dev Sets a new asset protection role address.
     * @param _newAssetProtectionRole The new address allowed to freeze/unfreeze addresses and seize their tokens.
     */
    function setAssetProtectionRole(address _newAssetProtectionRole) public {
        require(msg.sender == assetProtectionRole || msg.sender == owner, "only assetProtectionRole or Owner");
        emit AssetProtectionRoleSet(assetProtectionRole, _newAssetProtectionRole);
        assetProtectionRole = _newAssetProtectionRole;
    }

    modifier onlyAssetProtectionRole() {
        require(msg.sender == assetProtectionRole, "onlyAssetProtectionRole");
        _;
    }

    /**
     * @dev Freezes an address balance from being transferred.
     * @param _addr The new address to freeze.
     */
    function freeze(address _addr) public onlyAssetProtectionRole {
        require(!frozen[_addr], "address already frozen");
        frozen[_addr] = true;
        emit AddressFrozen(_addr);
    }

    /**
     * @dev Unfreezes an address balance allowing transfer.
     * @param _addr The new address to unfreeze.
     */
    function unfreeze(address _addr) public onlyAssetProtectionRole {
        require(frozen[_addr], "address already unfrozen");
        frozen[_addr] = false;
        emit AddressUnfrozen(_addr);
    }

    /**
     * @dev Wipes the balance of a frozen address, burning the tokens
     * and setting the approval to zero.
     * @param _addr The new frozen address to wipe.
     */
    function wipeFrozenAddress(address _addr) public onlyAssetProtectionRole {
        require(frozen[_addr], "address is not frozen");
        uint256 _balance = balances[_addr];
        balances[_addr] = 0;
        totalSupply_ = totalSupply_.sub(_balance);
        emit FrozenAddressWiped(_addr);
        emit SupplyDecreased(_addr, _balance);
        emit Transfer(_addr, address(0), _balance);
    }

    /**
    * @dev Gets whether the address is currently frozen.
    * @param _addr The address to check if frozen.
    * @return A bool representing whether the given address is frozen.
    */
    function isFrozen(address _addr) public view returns (bool) {
        return frozen[_addr];
    }

    // SUPPLY CONTROL FUNCTIONALITY

    /**
     * @dev Sets a new supply controller address.
     * @param _newSupplyController The address allowed to burn/mint tokens to control supply.
     */
    function setSupplyController(address _newSupplyController) public {
        require(msg.sender == supplyController || msg.sender == owner, "only SupplyController or Owner");
        require(_newSupplyController != address(0), "cannot set supply controller to address zero");
        emit SupplyControllerSet(supplyController, _newSupplyController);
        supplyController = _newSupplyController;
    }

    modifier onlySupplyController() {
        require(msg.sender == supplyController, "onlySupplyController");
        _;
    }

    /**
     * @dev Increases the total supply by minting the specified number of tokens to the supply controller account.
     * @param _value The number of tokens to add.
     * @return A boolean that indicates if the operation was successful.
     */
    function increaseSupply(uint256 _value) public onlySupplyController returns (bool success) {
        totalSupply_ = totalSupply_.add(_value);
        balances[supplyController] = balances[supplyController].add(_value);
        emit SupplyIncreased(supplyController, _value);
        emit Transfer(address(0), supplyController, _value);
        return true;
    }

    /**
     * @dev Decreases the total supply by burning the specified number of tokens from the supply controller account.
     * @param _value The number of tokens to remove.
     * @return A boolean that indicates if the operation was successful.
     */
    function decreaseSupply(uint256 _value) public onlySupplyController returns (bool success) {
        require(_value <= balances[supplyController], "not enough supply");
        balances[supplyController] = balances[supplyController].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit SupplyDecreased(supplyController, _value);
        emit Transfer(supplyController, address(0), _value);
        return true;
    }

    // DELEGATED TRANSFER FUNCTIONALITY

    /**
     * @dev returns the next seq for a target address.
     * The transactor must submit nextSeqOf(transactor) in the next transaction for it to be valid.
     * Note: that the seq context is specific to this smart contract.
     * @param target The target address.
     * @return the seq.
     */
    //
    function nextSeqOf(address target) public view returns (uint256) {
        return nextSeqs[target];
    }

    /**
     * @dev Performs a transfer on behalf of the from address, identified by its signature on the delegatedTransfer msg.
     * Splits a signature byte array into r,s,v for convenience.
     * @param sig the signature of the delgatedTransfer msg.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @param serviceFee an optional ERC20 service fee paid to the executor of betaDelegatedTransfer by the from address.
     * @param seq a sequencing number included by the from address specific to this contract to protect from replays.
     * @param deadline a block number after which the pre-signed transaction has expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function betaDelegatedTransfer(
        bytes sig, address to, uint256 value, uint256 serviceFee, uint256 seq, uint256 deadline
    ) public returns (bool) {
        require(sig.length == 65, "signature should have length 65");
        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }
        require(_betaDelegatedTransfer(r, s, v, to, value, serviceFee, seq, deadline), "failed transfer");
        return true;
    }

    /**
     * @dev Performs a transfer on behalf of the from address, identified by its signature on the betaDelegatedTransfer msg.
     * Note: both the delegate and transactor sign in the service fees. The transactor, however,
     * has no control over the gas price, and therefore no control over the transaction time.
     * Beta prefix chosen to avoid a name clash with an emerging standard in ERC865 or elsewhere.
     * Internal to the contract - see betaDelegatedTransfer and betaDelegatedTransferBatch.
     * @param r the r signature of the delgatedTransfer msg.
     * @param s the s signature of the delgatedTransfer msg.
     * @param v the v signature of the delgatedTransfer msg.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @param serviceFee an optional ERC20 service fee paid to the delegate of betaDelegatedTransfer by the from address.
     * @param seq a sequencing number included by the from address specific to this contract to protect from replays.
     * @param deadline a block number after which the pre-signed transaction has expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function _betaDelegatedTransfer(
        bytes32 r, bytes32 s, uint8 v, address to, uint256 value, uint256 serviceFee, uint256 seq, uint256 deadline
    ) internal whenNotPaused returns (bool) {
        require(betaDelegateWhitelist[msg.sender], "Beta feature only accepts whitelisted delegates");
        require(value > 0 || serviceFee > 0, "cannot transfer zero tokens with zero service fee");
        require(block.number <= deadline, "transaction expired");
        // prevent sig malleability from ecrecover()
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "signature incorrect");
        require(v == 27 || v == 28, "signature incorrect");

        // EIP712 scheme: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md
        bytes32 hash = keccak256(abi.encodePacked(EIP191_HEADER, EIP712_DOMAIN_HASH, keccak256(abi.encodePacked(// solium-disable-line
                EIP712_DELEGATED_TRANSFER_SCHEMA_HASH, bytes32(to), value, serviceFee, seq, deadline
        ))));
        address _from = ecrecover(hash, v, r, s);

        require(_from != address(0), "error determining from address from signature");
        require(to != address(0), "cannot use address zero");
        require(!frozen[to] && !frozen[_from] && !frozen[msg.sender], "address frozen");
        require(value.add(serviceFee) <= balances[_from], "insufficient funds or bad signature");
        require(nextSeqs[_from] == seq, "incorrect seq");

        nextSeqs[_from] = nextSeqs[_from].add(1);

        uint256 _principle = _transfer(_from, to, value);

        if (serviceFee != 0) {
            balances[_from] = balances[_from].sub(serviceFee);
            balances[msg.sender] = balances[msg.sender].add(serviceFee);
            emit Transfer(_from, msg.sender, serviceFee);
        }

        emit BetaDelegatedTransfer(_from, to, _principle, seq, serviceFee);
        return true;
    }

    /**
     * @dev Performs an atomic batch of transfers on behalf of the from addresses, identified by their signatures.
     * Lack of nested array support in arguments requires all arguments to be passed as equal size arrays where
     * delegated transfer number i is the combination of all arguments at index i
     * @param r the r signatures of the delgatedTransfer msg.
     * @param s the s signatures of the delgatedTransfer msg.
     * @param v the v signatures of the delgatedTransfer msg.
     * @param to The addresses to transfer to.
     * @param value The amounts to be transferred.
     * @param serviceFee optional ERC20 service fees paid to the delegate of betaDelegatedTransfer by the from address.
     * @param seq sequencing numbers included by the from address specific to this contract to protect from replays.
     * @param deadline block numbers after which the pre-signed transactions have expired.
     * @return A boolean that indicates if the operation was successful.
     */
    function betaDelegatedTransferBatch(
        bytes32[] r, bytes32[] s, uint8[] v, address[] to, uint256[] value, uint256[] serviceFee, uint256[] seq, uint256[] deadline
    ) public returns (bool) {
        require(r.length == s.length && r.length == v.length && r.length == to.length && r.length == value.length, "length mismatch");
        require(r.length == serviceFee.length && r.length == seq.length && r.length == deadline.length, "length mismatch");

        for (uint i = 0; i < r.length; i++) {
            require(
                _betaDelegatedTransfer(r[i], s[i], v[i], to[i], value[i], serviceFee[i], seq[i], deadline[i]),
                "failed transfer"
            );
        }
        return true;
    }

    /**
    * @dev Gets whether the address is currently whitelisted for betaDelegateTransfer.
    * @param _addr The address to check if whitelisted.
    * @return A bool representing whether the given address is whitelisted.
    */
    function isWhitelistedBetaDelegate(address _addr) public view returns (bool) {
        return betaDelegateWhitelist[_addr];
    }

    /**
     * @dev Sets a new betaDelegate whitelister.
     * @param _newWhitelister The address allowed to whitelist betaDelegates.
     */
    function setBetaDelegateWhitelister(address _newWhitelister) public {
        require(msg.sender == betaDelegateWhitelister || msg.sender == owner, "only Whitelister or Owner");
        betaDelegateWhitelister = _newWhitelister;
        emit BetaDelegateWhitelisterSet(betaDelegateWhitelister, _newWhitelister);
    }

    modifier onlyBetaDelegateWhitelister() {
        require(msg.sender == betaDelegateWhitelister, "onlyBetaDelegateWhitelister");
        _;
    }

    /**
     * @dev Whitelists an address to allow calling BetaDelegatedTransfer.
     * @param _addr The new address to whitelist.
     */
    function whitelistBetaDelegate(address _addr) public onlyBetaDelegateWhitelister {
        require(!betaDelegateWhitelist[_addr], "delegate already whitelisted");
        betaDelegateWhitelist[_addr] = true;
        emit BetaDelegateWhitelisted(_addr);
    }

    /**
     * @dev Unwhitelists an address to disallow calling BetaDelegatedTransfer.
     * @param _addr The new address to whitelist.
     */
    function unwhitelistBetaDelegate(address _addr) public onlyBetaDelegateWhitelister {
        require(betaDelegateWhitelist[_addr], "delegate not whitelisted");
        betaDelegateWhitelist[_addr] = false;
        emit BetaDelegateUnwhitelisted(_addr);
    }

    // FEE CONTROLLER FUNCTIONALITY

    /**
     * @dev Sets a new fee controller address.
     * @param _newFeeController The address allowed to set the fee rate and the fee recipient.
     */
    function setFeeController(address _newFeeController) public {
        require(msg.sender == feeController || msg.sender == owner, "only FeeController or Owner");
        require(_newFeeController != address(0), "cannot set fee controller to address zero");
        address _oldFeeController = feeController;
        feeController = _newFeeController;
        emit FeeControllerSet(_oldFeeController, feeController);
    }

    modifier onlyFeeController() {
        require(msg.sender == feeController, "only FeeController");
        _;
    }

    /**
     * @dev Sets a new fee recipient address.
     * @param _newFeeRecipient The address allowed to collect transfer fees for transfers.
     */
    function setFeeRecipient(address _newFeeRecipient) public onlyFeeController {
        require(_newFeeRecipient != address(0), "cannot set fee recipient to address zero");
        address _oldFeeRecipient = feeRecipient;
        feeRecipient = _newFeeRecipient;
        emit FeeRecipientSet(_oldFeeRecipient, feeRecipient);
    }

    /**
     * @dev Sets a new fee rate.
     * @param _newFeeRate The new fee rate to collect as transfer fees for transfers.
     */
    function setFeeRate(uint256 _newFeeRate) public onlyFeeController {
        require(_newFeeRate <= feeParts, "cannot set fee rate above 100%");
        uint256 _oldFeeRate = feeRate;
        feeRate = _newFeeRate;
        emit FeeRateSet(_oldFeeRate, feeRate);
    }

    /**
    * @dev Gets a fee for a given value
    * ex: given feeRate = 200 and feeParts = 1,000,000 then getFeeFor(10000) = 2
    * @param _value The amount to get the fee for.
    */
    function getFeeFor(uint256 _value) public view returns (uint256) {
        if (feeRate == 0) {
            return 0;
        }

        return _value.mul(feeRate).div(feeParts);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"disregardProposeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimPAXG","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"assetProtectionRole","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"getFeeFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"r","type":"bytes32[]"},{"name":"s","type":"bytes32[]"},{"name":"v","type":"uint8[]"},{"name":"to","type":"address[]"},{"name":"value","type":"uint256[]"},{"name":"serviceFee","type":"uint256[]"},{"name":"seq","type":"uint256[]"},{"name":"deadline","type":"uint256[]"}],"name":"betaDelegatedTransferBatch","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sig","type":"bytes"},{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"serviceFee","type":"uint256"},{"name":"seq","type":"uint256"},{"name":"deadline","type":"uint256"}],"name":"betaDelegatedTransfer","outputs":[{"name":"","type":"bool"}],"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":false,"inputs":[],"name":"initializeDomainSeparator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newFeeController","type":"address"}],"name":"setFeeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newFeeRate","type":"uint256"}],"name":"setFeeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"unfreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newSupplyController","type":"address"}],"name":"setSupplyController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeParts","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":true,"inputs":[],"name":"feeController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"nextSeqOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAssetProtectionRole","type":"address"}],"name":"setAssetProtectionRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"setBetaDelegateWhitelister","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"decreaseSupply","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isWhitelistedBetaDelegate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_addr","type":"address"}],"name":"whitelistBetaDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"proposeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"increaseSupply","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"betaDelegateWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeDecimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"unwhitelistBetaDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"_addr","type":"address"}],"name":"wipeFrozenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"EIP712_DOMAIN_HASH","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isFrozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newFeeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"supplyController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"currentOwner","type":"address"},{"indexed":true,"name":"proposedOwner","type":"address"}],"name":"OwnershipTransferProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldProposedOwner","type":"address"}],"name":"OwnershipTransferDisregarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"AddressFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"AddressUnfrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"FrozenAddressWiped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldAssetProtectionRole","type":"address"},{"indexed":true,"name":"newAssetProtectionRole","type":"address"}],"name":"AssetProtectionRoleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"SupplyIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"SupplyDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldSupplyController","type":"address"},{"indexed":true,"name":"newSupplyController","type":"address"}],"name":"SupplyControllerSet","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":"seq","type":"uint256"},{"indexed":false,"name":"serviceFee","type":"uint256"}],"name":"BetaDelegatedTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldWhitelister","type":"address"},{"indexed":true,"name":"newWhitelister","type":"address"}],"name":"BetaDelegateWhitelisterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newDelegate","type":"address"}],"name":"BetaDelegateWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldDelegate","type":"address"}],"name":"BetaDelegateUnwhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"FeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldFeeRate","type":"uint256"},{"indexed":true,"name":"newFeeRate","type":"uint256"}],"name":"FeeRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldFeeController","type":"address"},{"indexed":true,"name":"newFeeController","type":"address"}],"name":"FeeControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldFeeRecipient","type":"address"},{"indexed":true,"name":"newFeeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"}]

60806040526000805460ff191690556005805460a060020a60ff02191690553480156200002b57600080fd5b506200003f64010000000062000058810204565b620000526401000000006200013d810204565b62000406565b60005460ff1615620000cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6004805433600160a060020a03199182168117909255600580548216905560068054821690556000600281905560088054831684179055600d55600e8054821683179055600f805490911690911790556200012e64010000000062000294810204565b6000805460ff19166001179055565b600454600160a060020a03163314620001b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156200024257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6005805460a060020a60ff021916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f5061786f7320476f6c640000000000000000000000000000000000000000000092840192835293519093909182918083835b602083106200034e5780518252601f1990920191602091820191016200032d565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b60208310620003d55780518252601f199092019160209182019101620003b4565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c55505050565b61394880620004166000396000f3006080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303acb448811461024a57806306fdde031461026157806308abdeba146102eb578063095ea7b3146103005780630a91b601146103385780630abe469a1461036957806318160ddd146103935780631b670561146103a857806321ab11f71461058c57806323b872dd146106055780632ff791611461062f578063313ce567146106445780633ed4c6781461066f5780633f4ba83a1461069057806345596e2e146106a557806345c8b1a6146106bd57806346904840146106de5780634e71e0c8146106f357806352875bc31461070857806357526b3f146107295780635c975abb1461073e5780636999b3771461075357806370a08231146107685780638129fc1c146107895780638456cb591461079e57806389f72c21146107b35780638ceed9cb146107d45780638d1fdf2f146107f55780638da5cb5b1461081657806395d89b411461082b578063978bbdb91461084057806397d60d561461085557806398e52f9a14610876578063a7d87ed01461088e578063a9059cbb146108af578063ac69275c146108d3578063b5ed298a146108f4578063b921e16314610915578063c4f62fee1461092d578063cc0f178614610942578063d153b60c14610957578063d990c6181461096c578063dd62ed3e1461098d578063e2f72f03146109b4578063e306f779146109d5578063e5839836146109ea578063e74b981b14610a0b578063e7ba101214610a2c575b600080fd5b34801561025657600080fd5b5061025f610a41565b005b34801561026d57600080fd5b50610276610b92565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b0578181015183820152602001610298565b50505050905090810190601f1680156102dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f757600080fd5b5061025f610bc9565b34801561030c57600080fd5b50610324600160a060020a0360043516602435610ca3565b604080519115158252519081900360200190f35b34801561034457600080fd5b5061034d610dda565b60408051600160a060020a039092168252519081900360200190f35b34801561037557600080fd5b50610381600435610de9565b60408051918252519081900360200190f35b34801561039f57600080fd5b50610381610e2e565b3480156103b457600080fd5b506040805160206004803580820135838102808601850190965280855261032495369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610e349650505050505050565b34801561059857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261032494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050602083013592604081013592506060810135915060800135611071565b34801561061157600080fd5b50610324600160a060020a036004358116906024351660443561114d565b34801561063b57600080fd5b5061025f6113fb565b34801561065057600080fd5b50610659611569565b6040805160ff9092168252519081900360200190f35b34801561067b57600080fd5b5061025f600160a060020a036004351661156e565b34801561069c57600080fd5b5061025f6116c5565b3480156106b157600080fd5b5061025f6004356117c1565b3480156106c957600080fd5b5061025f600160a060020a03600435166118bb565b3480156106ea57600080fd5b5061034d6119d8565b3480156106ff57600080fd5b5061025f6119e7565b34801561071457600080fd5b5061025f600160a060020a0360043516611aad565b34801561073557600080fd5b50610381611c08565b34801561074a57600080fd5b50610324611c0f565b34801561075f57600080fd5b5061034d611c1f565b34801561077457600080fd5b50610381600160a060020a0360043516611c2e565b34801561079557600080fd5b5061025f611c49565b3480156107aa57600080fd5b5061025f611d0b565b3480156107bf57600080fd5b50610381600160a060020a0360043516611e0c565b3480156107e057600080fd5b5061025f600160a060020a0360043516611e27565b34801561080157600080fd5b5061025f600160a060020a0360043516611f22565b34801561082257600080fd5b5061034d612041565b34801561083757600080fd5b50610276612050565b34801561084c57600080fd5b50610381612087565b34801561086157600080fd5b5061025f600160a060020a036004351661208d565b34801561088257600080fd5b50610324600435612156565b34801561089a57600080fd5b50610324600160a060020a0360043516612305565b3480156108bb57600080fd5b50610324600160a060020a0360043516602435612323565b3480156108df57600080fd5b5061025f600160a060020a03600435166124cf565b34801561090057600080fd5b5061025f600160a060020a03600435166125ee565b34801561092157600080fd5b5061032460043561277c565b34801561093957600080fd5b5061034d6128b7565b34801561094e57600080fd5b506106596128c6565b34801561096357600080fd5b5061034d6128cb565b34801561097857600080fd5b5061025f600160a060020a03600435166128da565b34801561099957600080fd5b50610381600160a060020a03600435811690602435166129f7565b3480156109c057600080fd5b5061025f600160a060020a0360043516612a22565b3480156109e157600080fd5b50610381612bd3565b3480156109f657600080fd5b50610324600160a060020a0360043516612bd9565b348015610a1757600080fd5b5061025f600160a060020a0360043516612bf7565b348015610a3857600080fd5b5061034d612d37565b600554600090600160a060020a0316331480610a675750600454600160a060020a031633145b1515610abd576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b600554600160a060020a03161515610b45576040805160e560020a62461bcd02815260206004820152603b60248201527f63616e206f6e6c792064697372656761726420612070726f706f736564206f7760448201527f6e65722074686174207761732070726576696f75736c79207365740000000000606482015290519081900360840190fd5b5060058054600160a060020a03198116909155604051600160a060020a039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b60408051808201909152600a81527f5061786f7320476f6c6400000000000000000000000000000000000000000000602082015281565b600454600090600160a060020a03163314610c1c576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b5030600090815260016020526040808220805490839055600454600160a060020a03168352912054610c54908263ffffffff612d4616565b60048054600160a060020a039081166000908152600160209081526040918290209490945591548251858152925191169230926000805160206138dd833981519152929081900390910190a350565b60055460009060a060020a900460ff1615610cf6576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff16158015610d2f57503360009081526007602052604090205460ff16155b1515610d73576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600654600160a060020a031681565b6000600d5460001415610dfe57506000610e29565b610e26620f4240610e1a600d5485612d6390919063ffffffff16565b9063ffffffff612d9116565b90505b919050565b60025490565b60008088518a51148015610e49575087518a51145b8015610e56575086518a51145b8015610e63575085518a51145b1515610eb9576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b84518a51148015610ecb575083518a51145b8015610ed8575082518a51145b1515610f2e576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8951811015611061576110038a82815181101515610f4c57fe5b906020019060200201518a83815181101515610f6457fe5b906020019060200201518a84815181101515610f7c57fe5b906020019060200201518a85815181101515610f9457fe5b906020019060200201518a86815181101515610fac57fe5b906020019060200201518a87815181101515610fc457fe5b906020019060200201518a88815181101515610fdc57fe5b906020019060200201518a89815181101515610ff457fe5b90602001906020020151612db4565b1515611059576040805160e560020a62461bcd02815260206004820152600f60248201527f6661696c6564207472616e736665720000000000000000000000000000000000604482015290519081900360640190fd5b600101610f32565b5060019998505050505050505050565b600080600080895160411415156110d2576040805160e560020a62461bcd02815260206004820152601f60248201527f7369676e61747572652073686f756c642068617665206c656e67746820363500604482015290519081900360640190fd5b50505060208701516040880151606089015160001a6110f78383838c8c8c8c8c612db4565b1515611061576040805160e560020a62461bcd02815260206004820152600f60248201527f6661696c6564207472616e736665720000000000000000000000000000000000604482015290519081900360640190fd5b60055460009060a060020a900460ff16156111a0576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a0383161515611200576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff161580156112425750600160a060020a03841660009081526007602052604090205460ff16155b801561125e57503360009081526007602052604090205460ff16155b15156112a2576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b600160a060020a038416600090815260016020526040902054821115611312576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416600090815260036020908152604080832033845290915290205482111561138d576040805160e560020a62461bcd02815260206004820152601660248201527f696e73756666696369656e7420616c6c6f77616e636500000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602090815260408083203384529091529020546113c1908363ffffffff6136ee16565b600160a060020a03851660009081526003602090815260408083203384529091529020556113f0848484613705565b506001949350505050565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f5061786f7320476f6c640000000000000000000000000000000000000000000092840192835293519093909182918083835b602083106114b35780518252601f199092019160209182019101611494565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b602083106115385780518252601f199092019160209182019101611519565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c55505050565b601281565b600e54600090600160a060020a03163314806115945750600454600160a060020a031633145b15156115ea576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c7920466565436f6e74726f6c6c6572206f72204f776e65720000000000604482015290519081900360640190fd5b600160a060020a0382161515611670576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207365742066656520636f6e74726f6c6c657220746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600e8054600160a060020a03838116600160a060020a03198316179283905560405191811692169082907f9f67a87fdd653dfcdb36c8e3f851b597fb84328e3e90b118af01dc93a94e2eb590600090a35050565b600454600160a060020a03163314611715576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b60055460a060020a900460ff161515611778576040805160e560020a62461bcd02815260206004820152601060248201527f616c726561647920756e70617573656400000000000000000000000000000000604482015290519081900360640190fd5b6005805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600e54600090600160a060020a03163314611826576040805160e560020a62461bcd02815260206004820152601260248201527f6f6e6c7920466565436f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b620f4240821115611881576040805160e560020a62461bcd02815260206004820152601e60248201527f63616e6e6f74207365742066656520726174652061626f766520313030250000604482015290519081900360640190fd5b50600d805490829055604051829082907f959ec4191db1bd972bfbc60dc7d735d4cfb897ca3fd297f4ebd6ee918feb84d490600090a35050565b600654600160a060020a0316331461191d576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526007602052604090205460ff16151561198f576040805160e560020a62461bcd02815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260076020526040808220805460ff19169055517fc3776b472ebf54114339eec9e4dc924e7ce307a97f5c1ee72b6d474e6e5e8b7c9190a250565b600f54600160a060020a031681565b600554600090600160a060020a03163314611a4c576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c7950726f706f7365644f776e6572000000000000000000000000000000604482015290519081900360640190fd5b506004805460058054600160a060020a0319808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600854600160a060020a0316331480611ad05750600454600160a060020a031633145b1515611b26576040805160e560020a62461bcd02815260206004820152601e60248201527f6f6e6c7920537570706c79436f6e74726f6c6c6572206f72204f776e65720000604482015290519081900360640190fd5b600160a060020a0381161515611bac576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f742073657420737570706c7920636f6e74726f6c6c657220746f2060448201527f61646472657373207a65726f0000000000000000000000000000000000000000606482015290519081900360840190fd5b600854604051600160a060020a038084169216907f40d53b0b666e4424f29d55244e7e171a1dc332acc11d04ed4abd884629d8cc9790600090a360088054600160a060020a031916600160a060020a0392909216919091179055565b620f424081565b60055460a060020a900460ff1681565b600e54600160a060020a031681565b600160a060020a031660009081526001602052604090205490565b60005460ff1615611ca4576040805160e560020a62461bcd02815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6004805433600160a060020a03199182168117909255600580548216905560068054821690556000600281905560088054831684179055600d55600e8054821683179055600f80549091169091179055611cfc6113fb565b6000805460ff19166001179055565b600454600160a060020a03163314611d5b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b60055460a060020a900460ff1615611dbd576040805160e560020a62461bcd02815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600160a060020a03166000908152600b602052604090205490565b600654600160a060020a0316331480611e4a5750600454600160a060020a031633145b1515611ec6576040805160e560020a62461bcd02815260206004820152602160248201527f6f6e6c7920617373657450726f74656374696f6e526f6c65206f72204f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600654604051600160a060020a038084169216907fd0c36a0ac0fe0d375386bd568fa2947a2dae7523a0a0cfdab20b7532a105bd1b90600090a360068054600160a060020a031916600160a060020a0392909216919091179055565b600654600160a060020a03163314611f84576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526007602052604090205460ff1615611ff5576040805160e560020a62461bcd02815260206004820152601660248201527f6164647265737320616c72656164792066726f7a656e00000000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260076020526040808220805460ff19166001179055517f90811a8edd3b3c17eeaefffc17f639cc69145d41a359c9843994dc25382036909190a250565b600454600160a060020a031681565b60408051808201909152600481527f5041584700000000000000000000000000000000000000000000000000000000602082015281565b600d5481565b600954600160a060020a03163314806120b05750600454600160a060020a031633145b1515612106576040805160e560020a62461bcd02815260206004820152601960248201527f6f6e6c792057686974656c6973746572206f72204f776e657200000000000000604482015290519081900360640190fd5b60098054600160a060020a031916600160a060020a0383811691821792839055604051919216907f54e20b07412504aee4d17519747ae2f01b9924f7f30059793fe5576c4220a0c390600090a350565b600854600090600160a060020a031633146121bb576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a031660009081526001602052604090205482111561222d576040805160e560020a62461bcd02815260206004820152601160248201527f6e6f7420656e6f75676820737570706c79000000000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a0316600090815260016020526040902054612258908363ffffffff6136ee16565b600854600160a060020a0316600090815260016020526040902055600254612286908363ffffffff6136ee16565b600255600854604080518481529051600160a060020a03909216917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a639181900360200190a2600854604080518481529051600092600160a060020a0316916000805160206138dd833981519152919081900360200190a3506001919050565b600160a060020a03166000908152600a602052604090205460ff1690565b60055460009060a060020a900460ff1615612376576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a03831615156123d6576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff1615801561240f57503360009081526007602052604090205460ff16155b1515612453576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b336000908152600160205260409020548211156124ba576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b6124c5338484613705565b5060019392505050565b600954600160a060020a03163314612531576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156125a2576040805160e560020a62461bcd02815260206004820152601c60248201527f64656c656761746520616c72656164792077686974656c697374656400000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f8a22e0d8ecb02260464e9a55b7d82b17482735ae1f765de59dee573dfec5b36d9190a250565b600454600160a060020a0316331461263e576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b600160a060020a03811615156126c4576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572206f776e65727368697020746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161415612725576040805160e560020a62461bcd02815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b60058054600160a060020a031916600160a060020a038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b600854600090600160a060020a031633146127e1576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b6002546127f4908363ffffffff612d4616565b600255600854600160a060020a0316600090815260016020526040902054612822908363ffffffff612d4616565b60088054600160a060020a03908116600090815260016020908152604091829020949094559154825186815292519116927ff5c174d57843e57fea3c649fdde37f015ef08750759cbee88060390566a98797928290030190a2600854604080518481529051600160a060020a03909216916000916000805160206138dd833981519152919081900360200190a3506001919050565b600954600160a060020a031681565b600681565b600554600160a060020a031681565b600954600160a060020a0316331461293c576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff1615156129ae576040805160e560020a62461bcd02815260206004820152601860248201527f64656c6567617465206e6f742077686974656c69737465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19169055517f12acb305bec2ecc1e4568decc9c8e0423749ceb6ae249eaef4ef375ec174a49c9190a250565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600654600090600160a060020a03163314612a87576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526007602052604090205460ff161515612af9576040805160e560020a62461bcd02815260206004820152601560248201527f61646472657373206973206e6f742066726f7a656e0000000000000000000000604482015290519081900360640190fd5b50600160a060020a03811660009081526001602052604081208054919055600254612b2a908263ffffffff6136ee16565b600255604051600160a060020a038316907ffc5960f1c5a5d2b60f031bf534af053b1bf7d9881989afaeb8b1d164db23aede90600090a2604080518281529051600160a060020a038416917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a63919081900360200190a2604080518281529051600091600160a060020a038516916000805160206138dd8339815191529181900360200190a35050565b600c5481565b600160a060020a031660009081526007602052604090205460ff1690565b600e54600090600160a060020a03163314612c5c576040805160e560020a62461bcd02815260206004820152601260248201527f6f6e6c7920466565436f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515612ce2576040805160e560020a62461bcd02815260206004820152602860248201527f63616e6e6f74207365742066656520726563697069656e7420746f206164647260448201527f657373207a65726f000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600f8054600160a060020a03838116600160a060020a03198316179283905560405191811692169082907f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa7084015272190600090a35050565b600854600160a060020a031681565b600082820183811015612d5857600080fd5b8091505b5092915050565b600080831515612d765760009150612d5c565b50828202828482811515612d8657fe5b0414612d5857600080fd5b600080808311612da057600080fd5b8284811515612dab57fe5b04949350505050565b60055460009081908190819060a060020a900460ff1615612e0d576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b336000908152600a602052604090205460ff161515612e9c576040805160e560020a62461bcd02815260206004820152602f60248201527f426574612066656174757265206f6e6c7920616363657074732077686974656c60448201527f69737465642064656c6567617465730000000000000000000000000000000000606482015290519081900360840190fd5b6000881180612eab5750600087115b1515612f27576040805160e560020a62461bcd02815260206004820152603160248201527f63616e6e6f74207472616e73666572207a65726f20746f6b656e73207769746860448201527f207a65726f207365727669636520666565000000000000000000000000000000606482015290519081900360840190fd5b43851015612f7f576040805160e560020a62461bcd02815260206004820152601360248201527f7472616e73616374696f6e206578706972656400000000000000000000000000604482015290519081900360640190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08b1115612ff7576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b8960ff16601b148061300c57508960ff16601c145b1515613062576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b604080518082018252600281527f1901000000000000000000000000000000000000000000000000000000000000602080830191909152600c5483517f4265746144656c6567617465645472616e73666572286164647265737320746f81527f2c75696e743235362076616c75652c75696e7432353620736572766963654665818401527f652c75696e74323536207365712c75696e7432353620646561646c696e65290081860152845190819003605f01812081840152600160a060020a038e1681860152606081018d9052608081018c905260a081018b905260c08082018b90528551808303909101815260e09091019485905280519394919390928291908401908083835b602083106131895780518252601f19909201916020918201910161316a565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955090830193508392870191508083835b602083106131e25780518252601f1990920191602091820191016131c3565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061324a5780518252601f19909201916020918201910161322b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902092506001838b8e8e604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa1580156132ee573d6000803e3d6000fd5b5050604051601f190151925050600160a060020a0382161515613381576040805160e560020a62461bcd02815260206004820152602d60248201527f6572726f722064657465726d696e696e672066726f6d2061646472657373206660448201527f726f6d207369676e617475726500000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03891615156133e1576040805160e560020a62461bcd02815260206004820152601760248201527f63616e6e6f74207573652061646472657373207a65726f000000000000000000604482015290519081900360640190fd5b600160a060020a03891660009081526007602052604090205460ff161580156134235750600160a060020a03821660009081526007602052604090205460ff16155b801561343f57503360009081526007602052604090205460ff16155b1515613483576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600160205260409020546134ac898963ffffffff612d4616565b1115613528576040805160e560020a62461bcd02815260206004820152602360248201527f696e73756666696369656e742066756e6473206f7220626164207369676e617460448201527f7572650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600b60205260409020548614613597576040805160e560020a62461bcd02815260206004820152600d60248201527f696e636f72726563742073657100000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600b60205260409020546135c190600163ffffffff612d4616565b600160a060020a0383166000908152600b60205260409020556135e5828a8a613705565b9050861561368c57600160a060020a038216600090815260016020526040902054613616908863ffffffff6136ee16565b600160a060020a038316600090815260016020526040808220929092553381522054613648908863ffffffff612d4616565b336000818152600160209081526040918290209390935580518a815290519192600160a060020a038616926000805160206138dd8339815191529281900390910190a35b60408051828152602081018890528082018990529051600160a060020a03808c1692908516917fe526c2818be85606ab8e0ea3f317c198ef15baabbb4430bcf2d836eed3c7769b9181900360600190a35060019b9a5050505050505050505050565b600080838311156136fe57600080fd5b5050900390565b600080600061371384610de9565b9150613725848363ffffffff6136ee16565b600160a060020a038716600090815260016020526040902054909150613751908563ffffffff6136ee16565b600160a060020a038088166000908152600160205260408082209390935590871681522054613786908263ffffffff612d4616565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519193928a16926000805160206138dd83398151915292918290030190a3600f54604080518481529051600160a060020a03928316928916916000805160206138dd833981519152919081900360200190a3600082111561389357600f54600160a060020a0316600090815260016020526040902054613833908363ffffffff612d4616565b600f8054600160a060020a039081166000908152600160209081526040918290209490945591548251868152925190821693918a16927ff228de527fc1b9843baac03b9a04565473a263375950e63435d4138464386f4692908290030190a35b959450505050505600616464726573732066726f7a656e0000000000000000000000000000000000007768656e4e6f7450617573656400000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6f6e6c794f776e65720000000000000000000000000000000000000000000000a165627a7a72305820ca1dace5f1d0c195200133853c37ad52167d0710955f9e58b9755e28fbdb656c0029

Deployed Bytecode

0x6080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166303acb448811461024a57806306fdde031461026157806308abdeba146102eb578063095ea7b3146103005780630a91b601146103385780630abe469a1461036957806318160ddd146103935780631b670561146103a857806321ab11f71461058c57806323b872dd146106055780632ff791611461062f578063313ce567146106445780633ed4c6781461066f5780633f4ba83a1461069057806345596e2e146106a557806345c8b1a6146106bd57806346904840146106de5780634e71e0c8146106f357806352875bc31461070857806357526b3f146107295780635c975abb1461073e5780636999b3771461075357806370a08231146107685780638129fc1c146107895780638456cb591461079e57806389f72c21146107b35780638ceed9cb146107d45780638d1fdf2f146107f55780638da5cb5b1461081657806395d89b411461082b578063978bbdb91461084057806397d60d561461085557806398e52f9a14610876578063a7d87ed01461088e578063a9059cbb146108af578063ac69275c146108d3578063b5ed298a146108f4578063b921e16314610915578063c4f62fee1461092d578063cc0f178614610942578063d153b60c14610957578063d990c6181461096c578063dd62ed3e1461098d578063e2f72f03146109b4578063e306f779146109d5578063e5839836146109ea578063e74b981b14610a0b578063e7ba101214610a2c575b600080fd5b34801561025657600080fd5b5061025f610a41565b005b34801561026d57600080fd5b50610276610b92565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b0578181015183820152602001610298565b50505050905090810190601f1680156102dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f757600080fd5b5061025f610bc9565b34801561030c57600080fd5b50610324600160a060020a0360043516602435610ca3565b604080519115158252519081900360200190f35b34801561034457600080fd5b5061034d610dda565b60408051600160a060020a039092168252519081900360200190f35b34801561037557600080fd5b50610381600435610de9565b60408051918252519081900360200190f35b34801561039f57600080fd5b50610381610e2e565b3480156103b457600080fd5b506040805160206004803580820135838102808601850190965280855261032495369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750610e349650505050505050565b34801561059857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261032494369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050602083013592604081013592506060810135915060800135611071565b34801561061157600080fd5b50610324600160a060020a036004358116906024351660443561114d565b34801561063b57600080fd5b5061025f6113fb565b34801561065057600080fd5b50610659611569565b6040805160ff9092168252519081900360200190f35b34801561067b57600080fd5b5061025f600160a060020a036004351661156e565b34801561069c57600080fd5b5061025f6116c5565b3480156106b157600080fd5b5061025f6004356117c1565b3480156106c957600080fd5b5061025f600160a060020a03600435166118bb565b3480156106ea57600080fd5b5061034d6119d8565b3480156106ff57600080fd5b5061025f6119e7565b34801561071457600080fd5b5061025f600160a060020a0360043516611aad565b34801561073557600080fd5b50610381611c08565b34801561074a57600080fd5b50610324611c0f565b34801561075f57600080fd5b5061034d611c1f565b34801561077457600080fd5b50610381600160a060020a0360043516611c2e565b34801561079557600080fd5b5061025f611c49565b3480156107aa57600080fd5b5061025f611d0b565b3480156107bf57600080fd5b50610381600160a060020a0360043516611e0c565b3480156107e057600080fd5b5061025f600160a060020a0360043516611e27565b34801561080157600080fd5b5061025f600160a060020a0360043516611f22565b34801561082257600080fd5b5061034d612041565b34801561083757600080fd5b50610276612050565b34801561084c57600080fd5b50610381612087565b34801561086157600080fd5b5061025f600160a060020a036004351661208d565b34801561088257600080fd5b50610324600435612156565b34801561089a57600080fd5b50610324600160a060020a0360043516612305565b3480156108bb57600080fd5b50610324600160a060020a0360043516602435612323565b3480156108df57600080fd5b5061025f600160a060020a03600435166124cf565b34801561090057600080fd5b5061025f600160a060020a03600435166125ee565b34801561092157600080fd5b5061032460043561277c565b34801561093957600080fd5b5061034d6128b7565b34801561094e57600080fd5b506106596128c6565b34801561096357600080fd5b5061034d6128cb565b34801561097857600080fd5b5061025f600160a060020a03600435166128da565b34801561099957600080fd5b50610381600160a060020a03600435811690602435166129f7565b3480156109c057600080fd5b5061025f600160a060020a0360043516612a22565b3480156109e157600080fd5b50610381612bd3565b3480156109f657600080fd5b50610324600160a060020a0360043516612bd9565b348015610a1757600080fd5b5061025f600160a060020a0360043516612bf7565b348015610a3857600080fd5b5061034d612d37565b600554600090600160a060020a0316331480610a675750600454600160a060020a031633145b1515610abd576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c792070726f706f7365644f776e6572206f72206f776e65720000000000604482015290519081900360640190fd5b600554600160a060020a03161515610b45576040805160e560020a62461bcd02815260206004820152603b60248201527f63616e206f6e6c792064697372656761726420612070726f706f736564206f7760448201527f6e65722074686174207761732070726576696f75736c79207365740000000000606482015290519081900360840190fd5b5060058054600160a060020a03198116909155604051600160a060020a039091169081907f24f4590b0077912a4db89e7430de7986175c27bede1b47ee039e3b421c2e798e90600090a250565b60408051808201909152600a81527f5061786f7320476f6c6400000000000000000000000000000000000000000000602082015281565b600454600090600160a060020a03163314610c1c576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b5030600090815260016020526040808220805490839055600454600160a060020a03168352912054610c54908263ffffffff612d4616565b60048054600160a060020a039081166000908152600160209081526040918290209490945591548251858152925191169230926000805160206138dd833981519152929081900390910190a350565b60055460009060a060020a900460ff1615610cf6576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff16158015610d2f57503360009081526007602052604090205460ff16155b1515610d73576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600654600160a060020a031681565b6000600d5460001415610dfe57506000610e29565b610e26620f4240610e1a600d5485612d6390919063ffffffff16565b9063ffffffff612d9116565b90505b919050565b60025490565b60008088518a51148015610e49575087518a51145b8015610e56575086518a51145b8015610e63575085518a51145b1515610eb9576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b84518a51148015610ecb575083518a51145b8015610ed8575082518a51145b1515610f2e576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206d69736d617463680000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8951811015611061576110038a82815181101515610f4c57fe5b906020019060200201518a83815181101515610f6457fe5b906020019060200201518a84815181101515610f7c57fe5b906020019060200201518a85815181101515610f9457fe5b906020019060200201518a86815181101515610fac57fe5b906020019060200201518a87815181101515610fc457fe5b906020019060200201518a88815181101515610fdc57fe5b906020019060200201518a89815181101515610ff457fe5b90602001906020020151612db4565b1515611059576040805160e560020a62461bcd02815260206004820152600f60248201527f6661696c6564207472616e736665720000000000000000000000000000000000604482015290519081900360640190fd5b600101610f32565b5060019998505050505050505050565b600080600080895160411415156110d2576040805160e560020a62461bcd02815260206004820152601f60248201527f7369676e61747572652073686f756c642068617665206c656e67746820363500604482015290519081900360640190fd5b50505060208701516040880151606089015160001a6110f78383838c8c8c8c8c612db4565b1515611061576040805160e560020a62461bcd02815260206004820152600f60248201527f6661696c6564207472616e736665720000000000000000000000000000000000604482015290519081900360640190fd5b60055460009060a060020a900460ff16156111a0576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a0383161515611200576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff161580156112425750600160a060020a03841660009081526007602052604090205460ff16155b801561125e57503360009081526007602052604090205460ff16155b15156112a2576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b600160a060020a038416600090815260016020526040902054821115611312576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416600090815260036020908152604080832033845290915290205482111561138d576040805160e560020a62461bcd02815260206004820152601660248201527f696e73756666696369656e7420616c6c6f77616e636500000000000000000000604482015290519081900360640190fd5b600160a060020a03841660009081526003602090815260408083203384529091529020546113c1908363ffffffff6136ee16565b600160a060020a03851660009081526003602090815260408083203384529091529020556113f0848484613705565b506001949350505050565b604080517f454950373132446f6d61696e28737472696e67206e616d652c6164647265737381527f20766572696679696e67436f6e7472616374290000000000000000000000000060208083019190915282519182900360330182208284018452600a8084527f5061786f7320476f6c640000000000000000000000000000000000000000000092840192835293519093909182918083835b602083106114b35780518252601f199092019160209182019101611494565b51815160209384036101000a60001901801990921691161790526040805192909401829003822082820197909752818401969096523060608083019190915283518083039091018152608090910192839052805190959294508493509185019190508083835b602083106115385780518252601f199092019160209182019101611519565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600c55505050565b601281565b600e54600090600160a060020a03163314806115945750600454600160a060020a031633145b15156115ea576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c7920466565436f6e74726f6c6c6572206f72204f776e65720000000000604482015290519081900360640190fd5b600160a060020a0382161515611670576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207365742066656520636f6e74726f6c6c657220746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600e8054600160a060020a03838116600160a060020a03198316179283905560405191811692169082907f9f67a87fdd653dfcdb36c8e3f851b597fb84328e3e90b118af01dc93a94e2eb590600090a35050565b600454600160a060020a03163314611715576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b60055460a060020a900460ff161515611778576040805160e560020a62461bcd02815260206004820152601060248201527f616c726561647920756e70617573656400000000000000000000000000000000604482015290519081900360640190fd5b6005805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600e54600090600160a060020a03163314611826576040805160e560020a62461bcd02815260206004820152601260248201527f6f6e6c7920466565436f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b620f4240821115611881576040805160e560020a62461bcd02815260206004820152601e60248201527f63616e6e6f74207365742066656520726174652061626f766520313030250000604482015290519081900360640190fd5b50600d805490829055604051829082907f959ec4191db1bd972bfbc60dc7d735d4cfb897ca3fd297f4ebd6ee918feb84d490600090a35050565b600654600160a060020a0316331461191d576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526007602052604090205460ff16151561198f576040805160e560020a62461bcd02815260206004820152601860248201527f6164647265737320616c726561647920756e66726f7a656e0000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260076020526040808220805460ff19169055517fc3776b472ebf54114339eec9e4dc924e7ce307a97f5c1ee72b6d474e6e5e8b7c9190a250565b600f54600160a060020a031681565b600554600090600160a060020a03163314611a4c576040805160e560020a62461bcd02815260206004820152601160248201527f6f6e6c7950726f706f7365644f776e6572000000000000000000000000000000604482015290519081900360640190fd5b506004805460058054600160a060020a0319808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600854600160a060020a0316331480611ad05750600454600160a060020a031633145b1515611b26576040805160e560020a62461bcd02815260206004820152601e60248201527f6f6e6c7920537570706c79436f6e74726f6c6c6572206f72204f776e65720000604482015290519081900360640190fd5b600160a060020a0381161515611bac576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f742073657420737570706c7920636f6e74726f6c6c657220746f2060448201527f61646472657373207a65726f0000000000000000000000000000000000000000606482015290519081900360840190fd5b600854604051600160a060020a038084169216907f40d53b0b666e4424f29d55244e7e171a1dc332acc11d04ed4abd884629d8cc9790600090a360088054600160a060020a031916600160a060020a0392909216919091179055565b620f424081565b60055460a060020a900460ff1681565b600e54600160a060020a031681565b600160a060020a031660009081526001602052604090205490565b60005460ff1615611ca4576040805160e560020a62461bcd02815260206004820152601360248201527f616c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6004805433600160a060020a03199182168117909255600580548216905560068054821690556000600281905560088054831684179055600d55600e8054821683179055600f80549091169091179055611cfc6113fb565b6000805460ff19166001179055565b600454600160a060020a03163314611d5b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b60055460a060020a900460ff1615611dbd576040805160e560020a62461bcd02815260206004820152600e60248201527f616c726561647920706175736564000000000000000000000000000000000000604482015290519081900360640190fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600160a060020a03166000908152600b602052604090205490565b600654600160a060020a0316331480611e4a5750600454600160a060020a031633145b1515611ec6576040805160e560020a62461bcd02815260206004820152602160248201527f6f6e6c7920617373657450726f74656374696f6e526f6c65206f72204f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600654604051600160a060020a038084169216907fd0c36a0ac0fe0d375386bd568fa2947a2dae7523a0a0cfdab20b7532a105bd1b90600090a360068054600160a060020a031916600160a060020a0392909216919091179055565b600654600160a060020a03163314611f84576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03811660009081526007602052604090205460ff1615611ff5576040805160e560020a62461bcd02815260206004820152601660248201527f6164647265737320616c72656164792066726f7a656e00000000000000000000604482015290519081900360640190fd5b600160a060020a038116600081815260076020526040808220805460ff19166001179055517f90811a8edd3b3c17eeaefffc17f639cc69145d41a359c9843994dc25382036909190a250565b600454600160a060020a031681565b60408051808201909152600481527f5041584700000000000000000000000000000000000000000000000000000000602082015281565b600d5481565b600954600160a060020a03163314806120b05750600454600160a060020a031633145b1515612106576040805160e560020a62461bcd02815260206004820152601960248201527f6f6e6c792057686974656c6973746572206f72204f776e657200000000000000604482015290519081900360640190fd5b60098054600160a060020a031916600160a060020a0383811691821792839055604051919216907f54e20b07412504aee4d17519747ae2f01b9924f7f30059793fe5576c4220a0c390600090a350565b600854600090600160a060020a031633146121bb576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a031660009081526001602052604090205482111561222d576040805160e560020a62461bcd02815260206004820152601160248201527f6e6f7420656e6f75676820737570706c79000000000000000000000000000000604482015290519081900360640190fd5b600854600160a060020a0316600090815260016020526040902054612258908363ffffffff6136ee16565b600854600160a060020a0316600090815260016020526040902055600254612286908363ffffffff6136ee16565b600255600854604080518481529051600160a060020a03909216917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a639181900360200190a2600854604080518481529051600092600160a060020a0316916000805160206138dd833981519152919081900360200190a3506001919050565b600160a060020a03166000908152600a602052604090205460ff1690565b60055460009060a060020a900460ff1615612376576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b600160a060020a03831615156123d6576040805160e560020a62461bcd02815260206004820152601f60248201527f63616e6e6f74207472616e7366657220746f2061646472657373207a65726f00604482015290519081900360640190fd5b600160a060020a03831660009081526007602052604090205460ff1615801561240f57503360009081526007602052604090205460ff16155b1515612453576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b336000908152600160205260409020548211156124ba576040805160e560020a62461bcd02815260206004820152601260248201527f696e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b6124c5338484613705565b5060019392505050565b600954600160a060020a03163314612531576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff16156125a2576040805160e560020a62461bcd02815260206004820152601c60248201527f64656c656761746520616c72656164792077686974656c697374656400000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19166001179055517f8a22e0d8ecb02260464e9a55b7d82b17482735ae1f765de59dee573dfec5b36d9190a250565b600454600160a060020a0316331461263e576040805160e560020a62461bcd02815260206004820152600960248201526000805160206138fd833981519152604482015290519081900360640190fd5b600160a060020a03811615156126c4576040805160e560020a62461bcd02815260206004820152602960248201527f63616e6e6f74207472616e73666572206f776e65727368697020746f2061646460448201527f72657373207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a0382161415612725576040805160e560020a62461bcd02815260206004820152601760248201527f63616c6c657220616c7265616479206973206f776e6572000000000000000000604482015290519081900360640190fd5b60058054600160a060020a031916600160a060020a038381169190911791829055600454604051928216929116907ff4e75b79500ab730f8a026ed3cba6d55331bcb64c9e9f60c548e371356e5e3c090600090a350565b600854600090600160a060020a031633146127e1576040805160e560020a62461bcd02815260206004820152601460248201527f6f6e6c79537570706c79436f6e74726f6c6c6572000000000000000000000000604482015290519081900360640190fd5b6002546127f4908363ffffffff612d4616565b600255600854600160a060020a0316600090815260016020526040902054612822908363ffffffff612d4616565b60088054600160a060020a03908116600090815260016020908152604091829020949094559154825186815292519116927ff5c174d57843e57fea3c649fdde37f015ef08750759cbee88060390566a98797928290030190a2600854604080518481529051600160a060020a03909216916000916000805160206138dd833981519152919081900360200190a3506001919050565b600954600160a060020a031681565b600681565b600554600160a060020a031681565b600954600160a060020a0316331461293c576040805160e560020a62461bcd02815260206004820152601b60248201527f6f6e6c794265746144656c656761746557686974656c69737465720000000000604482015290519081900360640190fd5b600160a060020a0381166000908152600a602052604090205460ff1615156129ae576040805160e560020a62461bcd02815260206004820152601860248201527f64656c6567617465206e6f742077686974656c69737465640000000000000000604482015290519081900360640190fd5b600160a060020a0381166000818152600a6020526040808220805460ff19169055517f12acb305bec2ecc1e4568decc9c8e0423749ceb6ae249eaef4ef375ec174a49c9190a250565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600654600090600160a060020a03163314612a87576040805160e560020a62461bcd02815260206004820152601760248201527f6f6e6c79417373657450726f74656374696f6e526f6c65000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526007602052604090205460ff161515612af9576040805160e560020a62461bcd02815260206004820152601560248201527f61646472657373206973206e6f742066726f7a656e0000000000000000000000604482015290519081900360640190fd5b50600160a060020a03811660009081526001602052604081208054919055600254612b2a908263ffffffff6136ee16565b600255604051600160a060020a038316907ffc5960f1c5a5d2b60f031bf534af053b1bf7d9881989afaeb8b1d164db23aede90600090a2604080518281529051600160a060020a038416917f1b7e18241beced0d7f41fbab1ea8ed468732edbcb74ec4420151654ca71c8a63919081900360200190a2604080518281529051600091600160a060020a038516916000805160206138dd8339815191529181900360200190a35050565b600c5481565b600160a060020a031660009081526007602052604090205460ff1690565b600e54600090600160a060020a03163314612c5c576040805160e560020a62461bcd02815260206004820152601260248201527f6f6e6c7920466565436f6e74726f6c6c65720000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515612ce2576040805160e560020a62461bcd02815260206004820152602860248201527f63616e6e6f74207365742066656520726563697069656e7420746f206164647260448201527f657373207a65726f000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50600f8054600160a060020a03838116600160a060020a03198316179283905560405191811692169082907f15d80a013f22151bc7246e3bc132e12828cde19de98870475e3fa7084015272190600090a35050565b600854600160a060020a031681565b600082820183811015612d5857600080fd5b8091505b5092915050565b600080831515612d765760009150612d5c565b50828202828482811515612d8657fe5b0414612d5857600080fd5b600080808311612da057600080fd5b8284811515612dab57fe5b04949350505050565b60055460009081908190819060a060020a900460ff1615612e0d576040805160e560020a62461bcd02815260206004820152600d60248201526000805160206138bd833981519152604482015290519081900360640190fd5b336000908152600a602052604090205460ff161515612e9c576040805160e560020a62461bcd02815260206004820152602f60248201527f426574612066656174757265206f6e6c7920616363657074732077686974656c60448201527f69737465642064656c6567617465730000000000000000000000000000000000606482015290519081900360840190fd5b6000881180612eab5750600087115b1515612f27576040805160e560020a62461bcd02815260206004820152603160248201527f63616e6e6f74207472616e73666572207a65726f20746f6b656e73207769746860448201527f207a65726f207365727669636520666565000000000000000000000000000000606482015290519081900360840190fd5b43851015612f7f576040805160e560020a62461bcd02815260206004820152601360248201527f7472616e73616374696f6e206578706972656400000000000000000000000000604482015290519081900360640190fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08b1115612ff7576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b8960ff16601b148061300c57508960ff16601c145b1515613062576040805160e560020a62461bcd02815260206004820152601360248201527f7369676e617475726520696e636f727265637400000000000000000000000000604482015290519081900360640190fd5b604080518082018252600281527f1901000000000000000000000000000000000000000000000000000000000000602080830191909152600c5483517f4265746144656c6567617465645472616e73666572286164647265737320746f81527f2c75696e743235362076616c75652c75696e7432353620736572766963654665818401527f652c75696e74323536207365712c75696e7432353620646561646c696e65290081860152845190819003605f01812081840152600160a060020a038e1681860152606081018d9052608081018c905260a081018b905260c08082018b90528551808303909101815260e09091019485905280519394919390928291908401908083835b602083106131895780518252601f19909201916020918201910161316a565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955090830193508392870191508083835b602083106131e25780518252601f1990920191602091820191016131c3565b51815160209384036101000a6000190180199092169116179052920194855250838101929092525060408051808403830181529281019081905282519293509182918401908083835b6020831061324a5780518252601f19909201916020918201910161322b565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902092506001838b8e8e604051600081526020016040526040518085600019166000191681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019450505050506020604051602081039080840390855afa1580156132ee573d6000803e3d6000fd5b5050604051601f190151925050600160a060020a0382161515613381576040805160e560020a62461bcd02815260206004820152602d60248201527f6572726f722064657465726d696e696e672066726f6d2061646472657373206660448201527f726f6d207369676e617475726500000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03891615156133e1576040805160e560020a62461bcd02815260206004820152601760248201527f63616e6e6f74207573652061646472657373207a65726f000000000000000000604482015290519081900360640190fd5b600160a060020a03891660009081526007602052604090205460ff161580156134235750600160a060020a03821660009081526007602052604090205460ff16155b801561343f57503360009081526007602052604090205460ff16155b1515613483576040805160e560020a62461bcd02815260206004820152600e602482015260008051602061389d833981519152604482015290519081900360640190fd5b600160a060020a0382166000908152600160205260409020546134ac898963ffffffff612d4616565b1115613528576040805160e560020a62461bcd02815260206004820152602360248201527f696e73756666696369656e742066756e6473206f7220626164207369676e617460448201527f7572650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0382166000908152600b60205260409020548614613597576040805160e560020a62461bcd02815260206004820152600d60248201527f696e636f72726563742073657100000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382166000908152600b60205260409020546135c190600163ffffffff612d4616565b600160a060020a0383166000908152600b60205260409020556135e5828a8a613705565b9050861561368c57600160a060020a038216600090815260016020526040902054613616908863ffffffff6136ee16565b600160a060020a038316600090815260016020526040808220929092553381522054613648908863ffffffff612d4616565b336000818152600160209081526040918290209390935580518a815290519192600160a060020a038616926000805160206138dd8339815191529281900390910190a35b60408051828152602081018890528082018990529051600160a060020a03808c1692908516917fe526c2818be85606ab8e0ea3f317c198ef15baabbb4430bcf2d836eed3c7769b9181900360600190a35060019b9a5050505050505050505050565b600080838311156136fe57600080fd5b5050900390565b600080600061371384610de9565b9150613725848363ffffffff6136ee16565b600160a060020a038716600090815260016020526040902054909150613751908563ffffffff6136ee16565b600160a060020a038088166000908152600160205260408082209390935590871681522054613786908263ffffffff612d4616565b600160a060020a0380871660008181526001602090815260409182902094909455805185815290519193928a16926000805160206138dd83398151915292918290030190a3600f54604080518481529051600160a060020a03928316928916916000805160206138dd833981519152919081900360200190a3600082111561389357600f54600160a060020a0316600090815260016020526040902054613833908363ffffffff612d4616565b600f8054600160a060020a039081166000908152600160209081526040918290209490945591548251868152925190821693918a16927ff228de527fc1b9843baac03b9a04565473a263375950e63435d4138464386f4692908290030190a35b959450505050505600616464726573732066726f7a656e0000000000000000000000000000000000007768656e4e6f7450617573656400000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6f6e6c794f776e65720000000000000000000000000000000000000000000000a165627a7a72305820ca1dace5f1d0c195200133853c37ad52167d0710955f9e58b9755e28fbdb656c0029

Deployed Bytecode Sourcemap

2396:28260:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13586:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13586:411:0;;;;;;2716:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2716:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2716:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14620:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14620:228:0;;;;11259:298;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11259:298:0;-1:-1:-1;;;;;11259:298:0;;;;;;;;;;;;;;;;;;;;;;;;;3208:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3208:34:0;;;;;;;;-1:-1:-1;;;;;3208:34:0;;;;;;;;;;;;;;30464:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30464:189:0;;;;;;;;;;;;;;;;;;;;;8548:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8548:91:0;;;;26009:735;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;;26009:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26009:735:0;;;;-1:-1:-1;26009:735:0;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;;;;;;;;-1:-1:-1;26009:735:0;;-1:-1:-1;26009:735:0;;-1:-1:-1;;;;;;;26009:735:0;21207:579;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21207:579:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21207:579:0;;-1:-1:-1;;;;;;;21207:579:0;;;;-1:-1:-1;;;21207:579:0;;;;;;;;;;-1:-1:-1;21207:579:0;;;;;-1:-1:-1;21207:579:0;;;;;9990:620;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9990:620:0;-1:-1:-1;;;;;9990:620:0;;;;;;;;;;;;8095:344;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8095:344:0;;;;2866:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2866:35:0;;;;;;;;;;;;;;;;;;;;;;;28795:427;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28795:427:0;-1:-1:-1;;;;;28795:427:0;;;;;15408:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15408:140:0;;;;29993:271;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29993:271:0;;;;;16734:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16734:203:0;-1:-1:-1;;;;;16734:203:0;;;;;4616:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4616:27:0;;;;14133:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14133:268:0;;;;18054:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18054:408:0;-1:-1:-1;;;;;18054:408:0;;;;;4503:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4503:42:0;;;;3143:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3143:26:0;;;;4581:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4581:28:0;;;;9558:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9558:105:0;-1:-1:-1;;;;;9558:105:0;;;;;7205:430;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7205:430:0;;;;15179:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15179:134:0;;;;20320:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20320:107:0;-1:-1:-1;;;;;20320:107:0;;;;;15786:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15786:333:0;-1:-1:-1;;;;;15786:333:0;;;;;16400:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16400:197:0;-1:-1:-1;;;;;16400:197:0;;;;;3054:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3054:20:0;;;;2788:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2788:38:0;;;;4552:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4552:22:0;;;;27277:321;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27277:321:0;-1:-1:-1;;;;;27277:321:0;;;;;19503:445;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19503:445:0;;;;;26991:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26991:131:0;-1:-1:-1;;;;;26991:131:0;;;;;8961:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8961:377:0;-1:-1:-1;;;;;8961:377:0;;;;;;;27905:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27905:262:0;-1:-1:-1;;;;;27905:262:0;;;;;13095:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13095:343:0;-1:-1:-1;;;;;13095:343:0;;;;;18863:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18863:368:0;;;;;3398:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3398:38:0;;;;4326:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4326:37:0;;;;3081:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3081:28:0;;;;28324:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28324:262:0;-1:-1:-1;;;;;28324:262:0;;;;;11898:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11898:179:0;-1:-1:-1;;;;;11898:179:0;;;;;;;;;;17129:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17129:408:0;-1:-1:-1;;;;;17129:408:0;;;;;4156:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4156:33:0;;;;17744:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17744:99:0;-1:-1:-1;;;;;17744:99:0;;;;;29513:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29513:333:0;-1:-1:-1;;;;;29513:333:0;;;;;3326:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3326:31:0;;;;13586:411;13659:13;;13848:25;;-1:-1:-1;;;;;13659:13:0;13645:10;:27;;:50;;-1:-1:-1;13690:5:0;;-1:-1:-1;;;;;13690:5:0;13676:10;:19;13645:50;13637:90;;;;;;;-1:-1:-1;;;;;13637:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13746:13;;-1:-1:-1;;;;;13746:13:0;:27;;13738:99;;;;;-1:-1:-1;;;;;13738:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13876:13:0;;;-1:-1:-1;;;;;;13900:26:0;;;;;13942:47;;-1:-1:-1;;;;;13876:13:0;;;;;;13942:47;;13876:13;;13942:47;13586:411;:::o;2716:42::-;;;;;;;;;;;;;;;;;;;:::o;14620:228::-;12859:5;;14673:16;;-1:-1:-1;;;;;12859:5:0;12845:10;:19;12837:41;;;;;-1:-1:-1;;;;;12837:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12837:41:0;;;;;;;;;;;;;;;-1:-1:-1;14701:4:0;14692:14;;;;:8;:14;;;;;;;;14717:18;;;;14773:5;;-1:-1:-1;;;;;14773:5:0;14764:15;;;;;:29;;14692:14;14764:29;:19;:29;:::i;:::-;14755:5;;;-1:-1:-1;;;;;14755:5:0;;;14746:15;;;;:8;:15;;;;;;;;;:47;;;;14824:5;;14809:31;;;;;;;14824:5;;;14818:4;;-1:-1:-1;;;;;;;;;;;14809:31:0;;;;;;;;;;14620:228;:::o;11259:298::-;15043:6;;11340:4;;-1:-1:-1;;;15043:6:0;;;;15042:7;15034:33;;;;;-1:-1:-1;;;;;15034:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15034:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11366:16:0;;;;;;:6;:16;;;;;;;;11365:17;:40;;;;-1:-1:-1;11394:10:0;11387:18;;;;:6;:18;;;;;;;;11386:19;11365:40;11357:67;;;;;;;-1:-1:-1;;;;;11357:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11357:67:0;;;;;;;;;;;;;;;11443:10;11435:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11435:29:0;;;;;;;;;;;;:38;;;11489;;;;;;;11435:29;;11443:10;11489:38;;;;;;;;;;;-1:-1:-1;11545:4:0;11259:298;;;;:::o;3208:34::-;;;-1:-1:-1;;;;;3208:34:0;;:::o;30464:189::-;30520:7;30544;;30555:1;30544:12;30540:53;;;-1:-1:-1;30580:1:0;30573:8;;30540:53;30612:33;4538:7;30612:19;30623:7;;30612:6;:10;;:19;;;;:::i;:::-;:23;:33;:23;:33;:::i;:::-;30605:40;;30464:189;;;;:::o;8548:91::-;8619:12;;8548:91;:::o;26009:735::-;26202:4;26487:6;26239:1;:8;26227:1;:8;:20;:44;;;;;26263:1;:8;26251:1;:8;:20;26227:44;:69;;;;;26287:2;:9;26275:1;:8;:21;26227:69;:97;;;;;26312:5;:12;26300:1;:8;:24;26227:97;26219:125;;;;;;;-1:-1:-1;;;;;26219:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26375:10;:17;26363:1;:8;:29;:55;;;;;26408:3;:10;26396:1;:8;:22;26363:55;:86;;;;;26434:8;:15;26422:1;:8;:27;26363:86;26355:114;;;;;;;-1:-1:-1;;;;;26355:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26496:1:0;26482:233;26503:1;:8;26499:1;:12;26482:233;;;26559:93;26582:1;26584;26582:4;;;;;;;;;;;;;;;;;;26588:1;26590;26588:4;;;;;;;;;;;;;;;;;;26594:1;26596;26594:4;;;;;;;;;;;;;;;;;;26600:2;26603:1;26600:5;;;;;;;;;;;;;;;;;;26607;26613:1;26607:8;;;;;;;;;;;;;;;;;;26617:10;26628:1;26617:13;;;;;;;;;;;;;;;;;;26632:3;26636:1;26632:6;;;;;;;;;;;;;;;;;;26640:8;26649:1;26640:11;;;;;;;;;;;;;;;;;;26559:22;:93::i;:::-;26533:170;;;;;;;-1:-1:-1;;;;;26533:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26513:3;;26482:233;;;-1:-1:-1;26732:4:0;;26009:735;-1:-1:-1;;;;;;;;;26009:735:0:o;21207:579::-;21359:4;21447:9;21467;21487:7;21384:3;:10;21398:2;21384:16;21376:60;;;;;;;-1:-1:-1;;;;;21376:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21549:2:0;21540:12;;21534:19;21587:2;21578:12;;21572:19;21633:2;21624:12;;21618:19;21615:1;21610:28;21667:69;21534:19;21572;21610:28;21699:2;21703:5;21710:10;21722:3;21727:8;21667:22;:69::i;:::-;21659:97;;;;;;;-1:-1:-1;;;;;21659:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9990:620;15043:6;;10135:4;;-1:-1:-1;;;15043:6:0;;;;15042:7;15034:33;;;;;-1:-1:-1;;;;;15034:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15034:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10165:17:0;;;;10157:61;;;;;-1:-1:-1;;;;;10157:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10238:11:0;;;;;;:6;:11;;;;;;;;10237:12;:30;;;;-1:-1:-1;;;;;;10254:13:0;;;;;;:6;:13;;;;;;;;10253:14;10237:30;:53;;;;-1:-1:-1;10279:10:0;10272:18;;;;:6;:18;;;;;;;;10271:19;10237:53;10229:80;;;;;;;-1:-1:-1;;;;;10229:80:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10229:80:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10338:15:0;;;;;;:8;:15;;;;;;10328:25;;;10320:56;;;;;-1:-1:-1;;;;;10320:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10405:14:0;;;;;;:7;:14;;;;;;;;10420:10;10405:26;;;;;;;;10395:36;;;10387:71;;;;;-1:-1:-1;;;;;10387:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10500:14:0;;;;;;:7;:14;;;;;;;;10515:10;10500:26;;;;;;;;:38;;10531:6;10500:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;10471:14:0;;;;;;:7;:14;;;;;;;;10486:10;10471:26;;;;;;;:67;10549:29;10479:5;10566:3;10571:6;10549:9;:29::i;:::-;-1:-1:-1;10598:4:0;;9990:620;-1:-1:-1;;;;9990:620:0:o;8095:344::-;3770:80;;;;;;;;;;;;;;;;;;;;;;;;;8368:4;;;;;;;;;;;;;;;;8352:22;;3770:80;;8352:22;;;;8368:4;8352:22;8368:4;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;;8352:22:0;;;;;;;;;;;;8241:189;;;;;;;;;;;;;;8409:4;8241:189;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8241:189:0;;;;;;;;8231:200;;8241:189;;;;-1:-1:-1;8241:189:0;;-1:-1:-1;8231:200:0;;;;;-1:-1:-1;8231:200:0;8241:189;8231:200;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;;8231:200:0;;;;;;;;;;8210:18;:221;-1:-1:-1;;;8095:344:0:o;2866:35::-;2899:2;2866:35;:::o;28795:427::-;28888:13;;29063:25;;-1:-1:-1;;;;;28888:13:0;28874:10;:27;;:50;;-1:-1:-1;28919:5:0;;-1:-1:-1;;;;;28919:5:0;28905:10;:19;28874:50;28866:90;;;;;;;-1:-1:-1;;;;;28866:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28975:31:0;;;;28967:85;;;;;-1:-1:-1;;;;;28967:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29091:13:0;;;-1:-1:-1;;;;;29115:33:0;;;-1:-1:-1;;;;;;29115:33:0;;;;;;;29164:50;;29091:13;;;;29200;;29091;;29164:50;;29091:13;;29164:50;28795:427;;:::o;15408:140::-;12859:5;;-1:-1:-1;;;;;12859:5:0;12845:10;:19;12837:41;;;;;-1:-1:-1;;;;;12837:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12837:41:0;;;;;;;;;;;;;;;15463:6;;-1:-1:-1;;;15463:6:0;;;;15455:35;;;;;;;-1:-1:-1;;;;;15455:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15501:6;:14;;-1:-1:-1;;15501:14:0;;;15531:9;;;;15510:5;;15531:9;15408:140::o;29993:271::-;29292:13;;30147:19;;-1:-1:-1;;;;;29292:13:0;29278:10;:27;29270:58;;;;;-1:-1:-1;;;;;29270:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:7;30078:23;;;30070:66;;;;;-1:-1:-1;;;;;30070:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30169:7:0;;;30187:21;;;;30224:32;;30197:11;;30169:7;;30224:32;;-1:-1:-1;;30224:32:0;29993:271;;:::o;16734:203::-;16195:19;;-1:-1:-1;;;;;16195:19:0;16181:10;:33;16173:69;;;;;-1:-1:-1;;;;;16173:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16817:13:0;;;;;;:6;:13;;;;;;;;16809:50;;;;;;;-1:-1:-1;;;;;16809:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16870:13:0;;16886:5;16870:13;;;:6;:13;;;;;;:21;;-1:-1:-1;;16870:21:0;;;16907:22;;;16886:5;16907:22;16734:203;:::o;4616:27::-;;;-1:-1:-1;;;;;4616:27:0;;:::o;14133:268::-;14199:13;;14245:17;;-1:-1:-1;;;;;14199:13:0;14185:10;:27;14177:57;;;;;-1:-1:-1;;;;;14177:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14265:5:0;;;14289:13;;;-1:-1:-1;;;;;;14281:21:0;;;-1:-1:-1;;;;;14289:13:0;;;14281:21;;;;;;;;14313:26;;;;;14355:38;;14265:5;;;;14387;;14265;;14355:38;;14265:5;;14355:38;14133:268;:::o;18054:408::-;18153:16;;-1:-1:-1;;;;;18153:16:0;18139:10;:30;;:53;;-1:-1:-1;18187:5:0;;-1:-1:-1;;;;;18187:5:0;18173:10;:19;18139:53;18131:96;;;;;;;-1:-1:-1;;;;;18131:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18246:34:0;;;;18238:91;;;;;-1:-1:-1;;;;;18238:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18365:16;;18345:59;;-1:-1:-1;;;;;18345:59:0;;;;18365:16;;18345:59;;18365:16;;18345:59;18415:16;:39;;-1:-1:-1;;;;;;18415:39:0;-1:-1:-1;;;;;18415:39:0;;;;;;;;;;18054:408::o;4503:42::-;4538:7;4503:42;:::o;3143:26::-;;;-1:-1:-1;;;3143:26:0;;;;;:::o;4581:28::-;;;-1:-1:-1;;;;;4581:28:0;;:::o;9558:105::-;-1:-1:-1;;;;;9640:15:0;9613:7;9640:15;;;:8;:15;;;;;;;9558:105::o;7205:430::-;7254:11;;;;7253:12;7245:44;;;;;-1:-1:-1;;;;;7245:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7300:5;:18;;7308:10;-1:-1:-1;;;;;;7300:18:0;;;;;;;;7329:13;:26;;;;;;7366:19;:32;;;;;;-1:-1:-1;7409:12:0;:16;;;7436;:29;;;;;;;;7476:7;:11;7498:13;:26;;;;;;;;7535:12;:25;;;;;;;;;;7571:27;:25;:27::i;:::-;7609:11;:18;;-1:-1:-1;;7609:18:0;7623:4;7609:18;;;7205:430::o;15179:134::-;12859:5;;-1:-1:-1;;;;;12859:5:0;12845:10;:19;12837:41;;;;;-1:-1:-1;;;;;12837:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12837:41:0;;;;;;;;;;;;;;;15233:6;;-1:-1:-1;;;15233:6:0;;;;15232:7;15224:34;;;;;-1:-1:-1;;;;;15224:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15269:6;:13;;-1:-1:-1;;15269:13:0;-1:-1:-1;;;15269:13:0;;;15298:7;;;;15269:13;;15298:7;15179:134::o;20320:107::-;-1:-1:-1;;;;;20403:16:0;20376:7;20403:16;;;:8;:16;;;;;;;20320:107::o;15786:333::-;15891:19;;-1:-1:-1;;;;;15891:19:0;15877:10;:33;;:56;;-1:-1:-1;15928:5:0;;-1:-1:-1;;;;;15928:5:0;15914:10;:19;15877:56;15869:102;;;;;;;-1:-1:-1;;;;;15869:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16010:19;;15987:68;;-1:-1:-1;;;;;15987:68:0;;;;16010:19;;15987:68;;16010:19;;15987:68;16066:19;:45;;-1:-1:-1;;;;;;16066:45:0;-1:-1:-1;;;;;16066:45:0;;;;;;;;;;15786:333::o;16400:197::-;16195:19;;-1:-1:-1;;;;;16195:19:0;16181:10;:33;16173:69;;;;;-1:-1:-1;;;;;16173:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16482:13:0;;;;;;:6;:13;;;;;;;;16481:14;16473:49;;;;;-1:-1:-1;;;;;16473:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16533:13:0;;;;;;:6;:13;;;;;;:20;;-1:-1:-1;;16533:20:0;16549:4;16533:20;;;16569;;;16533:13;16569:20;16400:197;:::o;3054:20::-;;;-1:-1:-1;;;;;3054:20:0;;:::o;2788:38::-;;;;;;;;;;;;;;;;;;;:::o;4552:22::-;;;;:::o;27277:321::-;27378:23;;-1:-1:-1;;;;;27378:23:0;27364:10;:37;;:60;;-1:-1:-1;27419:5:0;;-1:-1:-1;;;;;27419:5:0;27405:10;:19;27364:60;27356:98;;;;;;;-1:-1:-1;;;;;27356:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27465:23;:41;;-1:-1:-1;;;;;;27465:41:0;-1:-1:-1;;;;;27465:41:0;;;;;;;;;;27522:68;;27465:41;;27549:23;;27522:68;;-1:-1:-1;;27522:68:0;27277:321;:::o;19503:445::-;18535:16;;19580:12;;-1:-1:-1;;;;;18535:16:0;18521:10;:30;18513:63;;;;;-1:-1:-1;;;;;18513:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19632:16;;-1:-1:-1;;;;;19632:16:0;19623:26;;;;:8;:26;;;;;;19613:36;;;19605:66;;;;;-1:-1:-1;;;;;19605:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19720:16;;-1:-1:-1;;;;;19720:16:0;19711:26;;;;:8;:26;;;;;;:38;;19742:6;19711:38;:30;:38;:::i;:::-;19691:16;;-1:-1:-1;;;;;19691:16:0;19682:26;;;;:8;:26;;;;;:67;19775:12;;:24;;19792:6;19775:24;:16;:24;:::i;:::-;19760:12;:39;19831:16;;19815:41;;;;;;;;-1:-1:-1;;;;;19831:16:0;;;;19815:41;;;;;;;;;19881:16;;19872:46;;;;;;;;19907:1;;-1:-1:-1;;;;;19881:16:0;;-1:-1:-1;;;;;;;;;;;19872:46:0;;;;;;;;;-1:-1:-1;19936:4:0;19503:445;;;:::o;26991:131::-;-1:-1:-1;;;;;27086:28:0;27062:4;27086:28;;;:21;:28;;;;;;;;;26991:131::o;8961:377::-;15043:6;;9038:4;;-1:-1:-1;;;15043:6:0;;;;15042:7;15034:33;;;;;-1:-1:-1;;;;;15034:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15034:33:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9063:17:0;;;;9055:61;;;;;-1:-1:-1;;;;;9055:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9136:11:0;;;;;;:6;:11;;;;;;;;9135:12;:35;;;;-1:-1:-1;9159:10:0;9152:18;;;;:6;:18;;;;;;;;9151:19;9135:35;9127:62;;;;;;;-1:-1:-1;;;;;9127:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9127:62:0;;;;;;;;;;;;;;;9227:10;9218:20;;;;:8;:20;;;;;;9208:30;;;9200:61;;;;;-1:-1:-1;;;;;9200:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9274:34;9284:10;9296:3;9301:6;9274:9;:34::i;:::-;-1:-1:-1;9326:4:0;;8961:377;-1:-1:-1;;;8961:377:0:o;27905:262::-;27678:23;;-1:-1:-1;;;;;27678:23:0;27664:10;:37;27656:77;;;;;-1:-1:-1;;;;;27656:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28006:28:0;;;;;;:21;:28;;;;;;;;28005:29;27997:70;;;;;-1:-1:-1;;;;;27997:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28078:28:0;;;;;;:21;:28;;;;;;:35;;-1:-1:-1;;28078:35:0;28109:4;28078:35;;;28129:30;;;28078:28;28129:30;27905:262;:::o;13095:343::-;12859:5;;-1:-1:-1;;;;;12859:5:0;12845:10;:19;12837:41;;;;;-1:-1:-1;;;;;12837:41:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12837:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13177:28:0;;;;13169:82;;;;;-1:-1:-1;;;;;13169:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13270:10;-1:-1:-1;;;;;13270:28:0;;;;13262:64;;;;;-1:-1:-1;;;;;13262:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13337:13;:30;;-1:-1:-1;;;;;;13337:30:0;-1:-1:-1;;;;;13337:30:0;;;;;;;;;;;13409:5;;13383:47;;13416:13;;;;13409:5;;;13383:47;;-1:-1:-1;;13383:47:0;13095:343;:::o;18863:368::-;18535:16;;18940:12;;-1:-1:-1;;;;;18535:16:0;18521:10;:30;18513:63;;;;;-1:-1:-1;;;;;18513:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18980:12;;:24;;18997:6;18980:24;:16;:24;:::i;:::-;18965:12;:39;19053:16;;-1:-1:-1;;;;;19053:16:0;19044:26;;;;:8;:26;;;;;;:38;;19075:6;19044:38;:30;:38;:::i;:::-;19024:16;;;-1:-1:-1;;;;;19024:16:0;;;19015:26;;;;:8;:26;;;;;;;;;:67;;;;19114:16;;19098:41;;;;;;;19114:16;;;19098:41;;;;;;;;19176:16;;19155:46;;;;;;;;-1:-1:-1;;;;;19176:16:0;;;;;;-1:-1:-1;;;;;;;;;;;19155:46:0;;;;;;;;;-1:-1:-1;19219:4:0;18863:368;;;:::o;3398:38::-;;;-1:-1:-1;;;;;3398:38:0;;:::o;4326:37::-;4362:1;4326:37;:::o;3081:28::-;;;-1:-1:-1;;;;;3081:28:0;;:::o;28324:262::-;27678:23;;-1:-1:-1;;;;;27678:23:0;27664:10;:37;27656:77;;;;;-1:-1:-1;;;;;27656:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28426:28:0;;;;;;:21;:28;;;;;;;;28418:65;;;;;;;-1:-1:-1;;;;;28418:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28494:28:0;;28525:5;28494:28;;;:21;:28;;;;;;:36;;-1:-1:-1;;28494:36:0;;;28546:32;;;28525:5;28546:32;28324:262;:::o;11898:179::-;-1:-1:-1;;;;;12044:15:0;;;12012:7;12044:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;11898:179::o;17129:408::-;16195:19;;17271:16;;-1:-1:-1;;;;;16195:19:0;16181:10;:33;16173:69;;;;;-1:-1:-1;;;;;16173:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17221:13:0;;;;;;:6;:13;;;;;;;;17213:47;;;;;;;-1:-1:-1;;;;;17213:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17290:15:0;;;;;;:8;:15;;;;;;;17316:19;;;17361:12;;:26;;17290:15;17361:26;:16;:26;:::i;:::-;17346:12;:41;17403:25;;-1:-1:-1;;;;;17403:25:0;;;;;;;;17444:32;;;;;;;;-1:-1:-1;;;;;17444:32:0;;;;;;;;;;;;;17492:37;;;;;;;;17516:1;;-1:-1:-1;;;;;17492:37:0;;;-1:-1:-1;;;;;;;;;;;17492:37:0;;;;;;;;17129:408;;:::o;4156:33::-;;;;:::o;17744:99::-;-1:-1:-1;;;;;17822:13:0;17798:4;17822:13;;;:6;:13;;;;;;;;;17744:99::o;29513:333::-;29292:13;;29694:24;;-1:-1:-1;;;;;29292:13:0;29278:10;:27;29270:58;;;;;-1:-1:-1;;;;;29270:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29608:30:0;;;;29600:83;;;;;-1:-1:-1;;;;;29600:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29721:12:0;;;-1:-1:-1;;;;;29744:31:0;;;-1:-1:-1;;;;;;29744:31:0;;;;;;;29791:47;;29721:12;;;;29825;;29721;;29791:47;;29721:12;;29791:47;29513:333;;:::o;3326:31::-;;;-1:-1:-1;;;;;3326:31:0;;:::o;535:150::-;593:7;625:5;;;649:6;;;;641:15;;;;;;676:1;669:8;;535:150;;;;;;:::o;777:433::-;835:7;;1079:6;;1075:47;;;1109:1;1102:8;;;;1075:47;-1:-1:-1;1146:5:0;;;1150:1;1146;:5;1170;;;;;;;;:10;1162:19;;;;;1343:303;1401:7;;1496:5;;;1488:14;;;;;;1529:1;1525;:5;;;;;;;;;1343:303;-1:-1:-1;;;;1343:303:0:o;23013:1964::-;15043:6;;23202:4;;;;;;;;-1:-1:-1;;;15043:6:0;;;;15042:7;15034:33;;;;;-1:-1:-1;;;;;15034:33:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15034:33:0;;;;;;;;;;;;;;;23249:10;23227:33;;;;:21;:33;;;;;;;;23219:93;;;;;;;-1:-1:-1;;;;;23219:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23339:1;23331:5;:9;:27;;;;23357:1;23344:10;:14;23331:27;23323:89;;;;;;;-1:-1:-1;;;;;23323:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23431:12;:24;-1:-1:-1;23431:24:0;23423:56;;;;;-1:-1:-1;;;;;23423:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23566:66;23552:80;;;23544:112;;;;;-1:-1:-1;;;;;23544:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23675:1;:7;;23680:2;23675:7;:18;;;;23686:1;:7;;23691:2;23686:7;23675:18;23667:50;;;;;;;-1:-1:-1;;;;;23667:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23860:13;;;;;;;;;;;;;;;;;;;;23875:18;;3923:124;;;;;;;;;;;;;;;;;;;;;;;;;23905:152;;;;-1:-1:-1;;;;;24001:11:0;;23905:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23905:152:0;;;;;;;;23895:163;;23860:13;;23875:18;;23905:152;;;;23895:163;;;;;23905:152;23895:163;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;;23895:163:0;;;;;;;;;;;23843:216;;23895:163;;-1:-1:-1;23843:216:0;;;;-1:-1:-1;23843:216:0;;;;;-1:-1:-1;23843:216: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;;23843:216:0;;;;;-1:-1:-1;23843:216:0;;;;;;;-1:-1:-1;23843:216:0;;;26:21:-1;;;22:32;;6:49;;23843:216:0;;;;;;;23833:227;;23843:216;;-1:-1:-1;23843:216:0;;;23833:227;;;;23843:216;23833:227;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;;;23833:227:0;;;;;;;;;;;;;;;;23818:242;;24087:24;24097:4;24103:1;24106;24109;24087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24087:24:0;;-1:-1:-1;;24087:24:0;;;-1:-1:-1;;;;;;;24132:19:0;;;;24124:77;;;;;-1:-1:-1;;;;;24124:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24220:16:0;;;;24212:52;;;;;-1:-1:-1;;;;;24212:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24284:10:0;;;;;;:6;:10;;;;;;;;24283:11;:29;;;;-1:-1:-1;;;;;;24299:13:0;;;;;;:6;:13;;;;;;;;24298:14;24283:29;:52;;;;-1:-1:-1;24324:10:0;24317:18;;;;:6;:18;;;;;;;;24316:19;24283:52;24275:79;;;;;;;-1:-1:-1;;;;;24275:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24275:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24398:15:0;;;;;;:8;:15;;;;;;24373:21;:5;24383:10;24373:21;:9;:21;:::i;:::-;:40;;24365:88;;;;;-1:-1:-1;;;;;24365:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24472:15:0;;;;;;:8;:15;;;;;;:22;;24464:48;;;;;-1:-1:-1;;;;;24464:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24543:15:0;;;;;;:8;:15;;;;;;:22;;24563:1;24543:22;:19;:22;:::i;:::-;-1:-1:-1;;;;;24525:15:0;;;;;;:8;:15;;;;;:40;24599:27;24534:5;24616:2;24620:5;24599:9;:27::i;:::-;24578:48;-1:-1:-1;24643:15:0;;24639:230;;-1:-1:-1;;;;;24693:15:0;;;;;;:8;:15;;;;;;:31;;24713:10;24693:31;:19;:31;:::i;:::-;-1:-1:-1;;;;;24675:15:0;;;;;;:8;:15;;;;;;:49;;;;24771:10;24762:20;;;;:36;;24787:10;24762:36;:24;:36;:::i;:::-;24748:10;24739:20;;;;:8;:20;;;;;;;;;:59;;;;24818:39;;;;;;;24748:10;;-1:-1:-1;;;;;24818:39:0;;;-1:-1:-1;;;;;;;;;;;24818:39:0;;;;;;;;;24639:230;24886:61;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24886:61:0;;;;;;;;;;;;;;;;;-1:-1:-1;24965:4:0;;23013:1964;-1:-1:-1;;;;;;;;;;;23013:1964:0:o;309:150::-;367:7;;395:6;;;;387:15;;;;;;-1:-1:-1;;425:5:0;;;309:150::o;12085:597::-;12166:7;12186:12;12229:18;12201:17;12211:6;12201:9;:17::i;:::-;12186:32;-1:-1:-1;12250:16:0;:6;12186:32;12250:16;:10;:16;:::i;:::-;-1:-1:-1;;;;;12295:15:0;;;;;;:8;:15;;;;;;12229:37;;-1:-1:-1;12295:27:0;;12315:6;12295:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;12277:15:0;;;;;;;:8;:15;;;;;;:45;;;;12349:13;;;;;;;:29;;12367:10;12349:29;:17;:29;:::i;:::-;-1:-1:-1;;;;;12333:13:0;;;;;;;:8;:13;;;;;;;;;:45;;;;12394:32;;;;;;;12333:13;;12394:32;;;;-1:-1:-1;;;;;;;;;;;12394:32:0;;;;;;;;12458:12;;12442:35;;;;;;;;-1:-1:-1;;;;;12458:12:0;;;;12442:35;;;-1:-1:-1;;;;;;;;;;;12442:35:0;;;;;;;;;12499:1;12492:4;:8;12488:157;;;12551:12;;-1:-1:-1;;;;;12551:12:0;12542:22;;;;:8;:22;;;;;;:32;;12569:4;12542:32;:26;:32;:::i;:::-;12526:12;;;-1:-1:-1;;;;;12526:12:0;;;12517:22;;;;:8;:22;;;;;;;;;:57;;;;12614:12;;12594:39;;;;;;;12614:12;;;;12594:39;;;;;;;;;;;;;12488:157;12664:10;12085:597;-1:-1:-1;;;;;12085:597:0:o

Swarm Source

bzzr://ca1dace5f1d0c195200133853c37ad52167d0710955f9e58b9755e28fbdb656c
Loading...
Loading
[ 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.