false
true
0

Contract Address Details

0x3cF8F33789aB2C9EC6a8F6Fd5f074f4A8a0547f1

Contract Name
AddressesProvider
Creator
0x64e7ff–1c04a3 at 0x59cae3–bbc1ab
Balance
0 PLS
Tokens
Fetching tokens...
Transactions
14 Transactions
Transfers
0 Transfers
Gas Used
643,384
Last Balance Update
25677529
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
AddressesProvider




Optimization enabled
true
Compiler version
v0.7.6+commit.7338295f




Optimization runs
200
EVM Version
istanbul




Verified at
2024-06-07T06:54:56.074315Z

contracts/protocol/core/AddressesProvider.sol

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;

import {Ownable} from "../../dependencies/openzeppelin/contracts/Ownable.sol";
import {IAddressesProvider} from "../../interfaces/IAddressesProvider.sol";

contract AddressesProvider is Ownable, IAddressesProvider {
    event UsdphUpdated(address indexed newAddress);
    event PhlpUpdated(address indexed newAddress);
    event PhlpManagerUpdated(address indexed newAddress);
    event VaultUpdated(address indexed newAddress);
    event VaultConfiguratorUpdated(address indexed newAddress);
    event RouterUpdated(address indexed newAddress);
    event OrderBookUpdated(address indexed newAddress);
    event PositionManagerUpdated(address indexed newAddress);
    event PositionRouterUpdated(address indexed newAddress);
    event PriceOracleUpdated(address indexed newAddress);
    event ShortsTrackerUpdated(address indexed newAddress);
    event TreasuryUpdated(address indexed newAddress);
    event FeeDistributionUpdated(address indexed newAddress);

    mapping(bytes32 => address) private _addresses;

    bytes32 private constant USDPH = "USDPH";
    bytes32 private constant PHLP = "PHLP";
    bytes32 private constant PHLP_MANAGER = "PHLP_MANAGER";
    bytes32 private constant VAULT = "VAULT";
    bytes32 private constant VAULT_CONFIGURATOR = "VAULT_CONFIGURATOR";
    bytes32 private constant ROUTER = "ROUTER";
    bytes32 private constant ORDER_BOOK = "ORDER_BOOK";
    bytes32 private constant POSITION_MANAGER = "POSITION_MANAGER";
    bytes32 private constant POSITION_ROUTER = "POSITION_ROUTER";
    bytes32 private constant PRICE_ORACLE = "PRICE_ORACLE";
    bytes32 private constant SHORTS_TRACKER = "SHORTS_TRACKER";
    bytes32 private constant TREASURY = "TREASURY";
    bytes32 private constant FEE_DISTRIBUTION = "FEE_DISTRIBUTION";

    constructor() Ownable() {}

    /**
     * @dev Returns the address of the USDPH
     * @return The USDPH address
     **/
    function getUsdph() external view override returns (address) {
        return _addresses[USDPH];
    }

    /**
     * @dev Updates the address of the USDPH
     * @param usdph The new USDPH
     **/
    function setUsdph(address usdph) external onlyOwner {
        _addresses[USDPH] = usdph;
        emit UsdphUpdated(usdph);
    }

    /**
     * @dev Returns the address of the PHLP
     * @return The PHLP address
     **/
    function getPhlp() external view override returns (address) {
        return _addresses[PHLP];
    }

    /**
     * @dev Updates the address of the PHLP
     * @param phlp The new PHLP
     **/
    function setPhlp(address phlp) external onlyOwner {
        _addresses[PHLP] = phlp;
        emit PhlpUpdated(phlp);
    }

    /**
     * @dev Returns the address of the PHLP Manager
     * @return The PHLP Manager address
     **/
    function getPhlpManager() external view override returns (address) {
        return _addresses[PHLP_MANAGER];
    }

    /**
     * @dev Updates the address of the PHLP Manager
     * @param phlpManager The new PHLP Manager
     **/
    function setPhlpManager(address phlpManager) external onlyOwner {
        _addresses[PHLP_MANAGER] = phlpManager;
        emit PhlpManagerUpdated(phlpManager);
    }

    /**
     * @dev Returns the address of the vault
     * @return The vault address
     **/
    function getVault() external view override returns (address) {
        return _addresses[VAULT];
    }

    /**
     * @dev Updates the address of the vault
     * @param vault The new vault
     **/
    function setVault(address vault) external onlyOwner {
        _addresses[VAULT] = vault;
        emit VaultUpdated(vault);
    }

    /**
     * @dev Returns the address of the vault configurator
     * @return The vault configurator address
     **/
    function getVaultConfigurator() external view override returns (address) {
        return _addresses[VAULT_CONFIGURATOR];
    }

    /**
     * @dev Updates the address of the vault configurator
     * @param vaultConfigurator The new vault configurator
     **/
    function setVaultConfigurator(
        address vaultConfigurator
    ) external onlyOwner {
        _addresses[VAULT_CONFIGURATOR] = vaultConfigurator;
        emit VaultConfiguratorUpdated(vaultConfigurator);
    }

    /**
     * @dev Returns the address of the router
     * @return The router address
     **/
    function getRouter() external view override returns (address) {
        return _addresses[ROUTER];
    }

    /**
     * @dev Updates the address of the router
     * @param router The new router
     **/
    function setRouter(address router) external onlyOwner {
        _addresses[ROUTER] = router;
        emit RouterUpdated(router);
    }

    /**
     * @dev Returns the address of the order book
     * @return The order book address
     **/
    function getOrderBook() external view override returns (address) {
        return _addresses[ORDER_BOOK];
    }

    /**
     * @dev Updates the address of the order book
     * @param orderBook The new order book
     **/
    function setOrderBook(address orderBook) external onlyOwner {
        _addresses[ORDER_BOOK] = orderBook;
        emit RouterUpdated(orderBook);
    }

    /**
     * @dev Returns the address of the position manager
     * @return The position manager address
     **/
    function getPositionManager() external view override returns (address) {
        return _addresses[POSITION_MANAGER];
    }

    /**
     * @dev Updates the address of the position manager
     * @param positionManager The new position manager
     **/
    function setPositionManager(address positionManager) external onlyOwner {
        _addresses[POSITION_MANAGER] = positionManager;
        emit RouterUpdated(positionManager);
    }

    /**
     * @dev Returns the address of the position router
     * @return The position router address
     **/
    function getPositionRouter() external view override returns (address) {
        return _addresses[POSITION_ROUTER];
    }

    /**
     * @dev Updates the address of the position router
     * @param positionRouter The new position router
     **/
    function setPositionRouter(address positionRouter) external onlyOwner {
        _addresses[POSITION_ROUTER] = positionRouter;
        emit RouterUpdated(positionRouter);
    }

    /**
     * @dev Returns the address of the price oracle
     * @return The price oracle address
     **/
    function getPriceOracle() external view override returns (address) {
        return _addresses[PRICE_ORACLE];
    }

    /**
     * @dev Updates the address of the price oracle
     * @param priceOracle The new price oracle
     **/
    function setPriceOracle(address priceOracle) external onlyOwner {
        _addresses[PRICE_ORACLE] = priceOracle;
        emit PriceOracleUpdated(priceOracle);
    }

    /**
     * @dev Returns the address of the shorts tracker
     * @return The shorts tracker address
     **/
    function getShortsTracker() external view override returns (address) {
        return _addresses[SHORTS_TRACKER];
    }

    /**
     * @dev Updates the address of the shorts tracker
     * @param shortsTracker The new shorts tracker
     **/
    function setShortsTracker(address shortsTracker) external onlyOwner {
        _addresses[SHORTS_TRACKER] = shortsTracker;
        emit ShortsTrackerUpdated(shortsTracker);
    }

    /**
     * @dev Returns the address of the treasury
     * @return The treasury address
     **/
    function getTreasury() external view override returns (address payable) {
        return payable(_addresses[TREASURY]);
    }

    /**
     * @dev Updates the address of the treasury
     * @param treasury The new treasury
     **/
    function setTreasury(address treasury) external onlyOwner {
        _addresses[TREASURY] = treasury;
        emit TreasuryUpdated(treasury);
    }

    /**
     * @dev Returns the address of the fee distribution
     * @return The fee distribution address
     **/
    function getFeeDistribution() external view override returns (address) {
        return _addresses[FEE_DISTRIBUTION];
    }

    /**
     * @dev Updates the address of the fee distribution
     * @param feeDistribution The new fee distribution
     **/
    function setFeeDistribution(address feeDistribution) external onlyOwner {
        _addresses[FEE_DISTRIBUTION] = feeDistribution;
        emit FeeDistributionUpdated(feeDistribution);
    }
}
        

contracts/dependencies/openzeppelin/contracts/Context.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

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

contracts/dependencies/openzeppelin/contracts/Ownable.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
          

contracts/interfaces/IAddressesProvider.sol

// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;

interface IAddressesProvider {
    function getUsdph() external view returns (address);

    function getPhlp() external view returns (address);

    function getPhlpManager() external view returns (address);

    function getVault() external view returns (address);

    function getVaultConfigurator() external view returns (address);

    function getRouter() external view returns (address);

    function getOrderBook() external view returns (address);

    function getPositionManager() external view returns (address);

    function getPositionRouter() external view returns (address);

    function getPriceOracle() external view returns (address);

    function getShortsTracker() external view returns (address);

    function getTreasury() external view returns (address payable);

    function getFeeDistribution() external view returns (address);
}
          

Compiler Settings

{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"istanbul"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"FeeDistributionUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OrderBookUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionRouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PriceOracleUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ShortsTrackerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TreasuryUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"UsdphUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultConfiguratorUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getFeeDistribution","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOrderBook","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlpManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPriceOracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getShortsTracker","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"getTreasury","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getUsdph","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVault","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVaultConfigurator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeDistribution","inputs":[{"type":"address","name":"feeDistribution","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOrderBook","inputs":[{"type":"address","name":"orderBook","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlp","inputs":[{"type":"address","name":"phlp","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlpManager","inputs":[{"type":"address","name":"phlpManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionManager","inputs":[{"type":"address","name":"positionManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionRouter","inputs":[{"type":"address","name":"positionRouter","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPriceOracle","inputs":[{"type":"address","name":"priceOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRouter","inputs":[{"type":"address","name":"router","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setShortsTracker","inputs":[{"type":"address","name":"shortsTracker","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTreasury","inputs":[{"type":"address","name":"treasury","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setUsdph","inputs":[{"type":"address","name":"usdph","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVault","inputs":[{"type":"address","name":"vault","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVaultConfigurator","inputs":[{"type":"address","name":"vaultConfigurator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115978061007d6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638d928af811610104578063c0d78655116100a2578063f0f4426011610071578063f0f4426014610422578063f2fde38b14610448578063fca513a81461046e578063fd591dcd14610476576101cf565b8063c0d78655146103a8578063cfaa55eb146103ce578063d34ee093146103f4578063d759932b1461041a576101cf565b80639a1598c8116100de5780639a1598c81461034c578063b0f479a114610372578063b248c4ef1461037a578063bcbbab8714610382576101cf565b80638d928af8146103165780638da5cb5b1461031e578063987af4b214610326576101cf565b8063530e784f116101715780636a22dede1161014b5780636a22dede146102f6578063715018a6146102fe578063752f77f1146103065780638ad6de4e1461030e576101cf565b8063530e784f146102845780635760f2e3146102aa5780636817031b146102d0576101cf565b80631919db33116101ad5780631919db33146102285780633b19e84a1461024e5780633bd57e2b146102565780634bd9a9aa1461027c576101cf565b8063028d27d8146101d45780630af78559146101f8578063189e31cb14610200575b600080fd5b6101dc61047e565b604080516001600160a01b039092168252519081900360200190f35b6101dc6104c4565b6102266004803603602081101561021657600080fd5b50356001600160a01b031661050c565b005b6102266004803603602081101561023e57600080fd5b50356001600160a01b03166105f6565b6101dc6106de565b6102266004803603602081101561026c57600080fd5b50356001600160a01b0316610720565b6101dc610804565b6102266004803603602081101561029a57600080fd5b50356001600160a01b031661084d565b610226600480360360208110156102c057600080fd5b50356001600160a01b0316610931565b610226600480360360208110156102e657600080fd5b50356001600160a01b0316610a07565b6101dc610ae4565b610226610b2e565b6101dc610bda565b6101dc610c24565b6101dc610c63565b6101dc610ca2565b6102266004803603602081101561033c57600080fd5b50356001600160a01b0316610cb1565b6102266004803603602081101561036257600080fd5b50356001600160a01b0316610d8e565b6101dc610e5e565b6101dc610e9e565b6102266004803603602081101561039857600080fd5b50356001600160a01b0316610ee2565b610226600480360360208110156103be57600080fd5b50356001600160a01b0316610fbe565b610226600480360360208110156103e457600080fd5b50356001600160a01b031661108a565b6102266004803603602081101561040a57600080fd5b50356001600160a01b031661115f565b6101dc611245565b6102266004803603602081101561043857600080fd5b50356001600160a01b0316611291565b6102266004803603602081101561045e57600080fd5b50356001600160a01b0316611371565b6101dc611473565b6101dc6114b9565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6105146114f7565b6001600160a01b0316610525610ca2565b6001600160a01b03161461056e576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b6105fe6114f7565b6001600160a01b031661060f610ca2565b6001600160a01b031614610658576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2322a2afa224a9aa2924a12aaa24a7a760811b600090815260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca2603280546001600160a01b0319166001600160a01b03841690811790915560405190917f95de321ffc02a03054b16d86e2999e2c9bc6d1ac3b60b126204f18308561c36391a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6107286114f7565b6001600160a01b0316610739610ca2565b6001600160a01b031614610782576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b6108556114f7565b6001600160a01b0316610866610ca2565b6001600160a01b0316146108af576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6109396114f7565b6001600160a01b031661094a610ca2565b6001600160a01b031614610993576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b610a0f6114f7565b6001600160a01b0316610a20610ca2565b6001600160a01b031614610a69576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b610b366114f7565b6001600160a01b0316610b47610ca2565b6001600160a01b031614610b90576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6f2322a2afa224a9aa2924a12aaa24a7a760811b60005260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca26032546001600160a01b031690565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610cb96114f7565b6001600160a01b0316610cca610ca2565b6001600160a01b031614610d13576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610d966114f7565b6001600160a01b0316610da7610ca2565b6001600160a01b031614610df0576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610eea6114f7565b6001600160a01b0316610efb610ca2565b6001600160a01b031614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610fc66114f7565b6001600160a01b0316610fd7610ca2565b6001600160a01b031614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6110926114f7565b6001600160a01b03166110a3610ca2565b6001600160a01b0316146110ec576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6111676114f7565b6001600160a01b0316611178610ca2565b6001600160a01b0316146111c1576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b6112996114f7565b6001600160a01b03166112aa610ca2565b6001600160a01b0316146112f3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6113796114f7565b6001600160a01b031661138a610ca2565b6001600160a01b0316146113d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6001600160a01b0381166114185760405162461bcd60e51b81526004018080602001828103825260268152602001806114fc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f793f315ce3049c7a260abe3b6c208c2a5602c7df9be1be2b2de2b252e54d16764736f6c63430007060033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638d928af811610104578063c0d78655116100a2578063f0f4426011610071578063f0f4426014610422578063f2fde38b14610448578063fca513a81461046e578063fd591dcd14610476576101cf565b8063c0d78655146103a8578063cfaa55eb146103ce578063d34ee093146103f4578063d759932b1461041a576101cf565b80639a1598c8116100de5780639a1598c81461034c578063b0f479a114610372578063b248c4ef1461037a578063bcbbab8714610382576101cf565b80638d928af8146103165780638da5cb5b1461031e578063987af4b214610326576101cf565b8063530e784f116101715780636a22dede1161014b5780636a22dede146102f6578063715018a6146102fe578063752f77f1146103065780638ad6de4e1461030e576101cf565b8063530e784f146102845780635760f2e3146102aa5780636817031b146102d0576101cf565b80631919db33116101ad5780631919db33146102285780633b19e84a1461024e5780633bd57e2b146102565780634bd9a9aa1461027c576101cf565b8063028d27d8146101d45780630af78559146101f8578063189e31cb14610200575b600080fd5b6101dc61047e565b604080516001600160a01b039092168252519081900360200190f35b6101dc6104c4565b6102266004803603602081101561021657600080fd5b50356001600160a01b031661050c565b005b6102266004803603602081101561023e57600080fd5b50356001600160a01b03166105f6565b6101dc6106de565b6102266004803603602081101561026c57600080fd5b50356001600160a01b0316610720565b6101dc610804565b6102266004803603602081101561029a57600080fd5b50356001600160a01b031661084d565b610226600480360360208110156102c057600080fd5b50356001600160a01b0316610931565b610226600480360360208110156102e657600080fd5b50356001600160a01b0316610a07565b6101dc610ae4565b610226610b2e565b6101dc610bda565b6101dc610c24565b6101dc610c63565b6101dc610ca2565b6102266004803603602081101561033c57600080fd5b50356001600160a01b0316610cb1565b6102266004803603602081101561036257600080fd5b50356001600160a01b0316610d8e565b6101dc610e5e565b6101dc610e9e565b6102266004803603602081101561039857600080fd5b50356001600160a01b0316610ee2565b610226600480360360208110156103be57600080fd5b50356001600160a01b0316610fbe565b610226600480360360208110156103e457600080fd5b50356001600160a01b031661108a565b6102266004803603602081101561040a57600080fd5b50356001600160a01b031661115f565b6101dc611245565b6102266004803603602081101561043857600080fd5b50356001600160a01b0316611291565b6102266004803603602081101561045e57600080fd5b50356001600160a01b0316611371565b6101dc611473565b6101dc6114b9565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6105146114f7565b6001600160a01b0316610525610ca2565b6001600160a01b03161461056e576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b6105fe6114f7565b6001600160a01b031661060f610ca2565b6001600160a01b031614610658576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2322a2afa224a9aa2924a12aaa24a7a760811b600090815260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca2603280546001600160a01b0319166001600160a01b03841690811790915560405190917f95de321ffc02a03054b16d86e2999e2c9bc6d1ac3b60b126204f18308561c36391a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6107286114f7565b6001600160a01b0316610739610ca2565b6001600160a01b031614610782576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b6108556114f7565b6001600160a01b0316610866610ca2565b6001600160a01b0316146108af576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6109396114f7565b6001600160a01b031661094a610ca2565b6001600160a01b031614610993576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b610a0f6114f7565b6001600160a01b0316610a20610ca2565b6001600160a01b031614610a69576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b610b366114f7565b6001600160a01b0316610b47610ca2565b6001600160a01b031614610b90576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6f2322a2afa224a9aa2924a12aaa24a7a760811b60005260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca26032546001600160a01b031690565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610cb96114f7565b6001600160a01b0316610cca610ca2565b6001600160a01b031614610d13576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610d966114f7565b6001600160a01b0316610da7610ca2565b6001600160a01b031614610df0576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610eea6114f7565b6001600160a01b0316610efb610ca2565b6001600160a01b031614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610fc66114f7565b6001600160a01b0316610fd7610ca2565b6001600160a01b031614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6110926114f7565b6001600160a01b03166110a3610ca2565b6001600160a01b0316146110ec576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6111676114f7565b6001600160a01b0316611178610ca2565b6001600160a01b0316146111c1576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b6112996114f7565b6001600160a01b03166112aa610ca2565b6001600160a01b0316146112f3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6113796114f7565b6001600160a01b031661138a610ca2565b6001600160a01b0316146113d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6001600160a01b0381166114185760405162461bcd60e51b81526004018080602001828103825260268152602001806114fc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f793f315ce3049c7a260abe3b6c208c2a5602c7df9be1be2b2de2b252e54d16764736f6c63430007060033