false
false
5713000

Contract Address Details

0x8818C74956Ae90C6C7B317439373052073E62999

Contract Name
OracleDelegate
Creator
0xdb1388–e98779 at 0x95d3f3–f28f13
Balance
0 PUNDIAI
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
22386310
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
OracleDelegate




Optimization enabled
true
Compiler version
v0.4.26+commit.4563c3fc




Optimization runs
200
EVM Version
byzantium




Verified at
2023-04-19T10:19:43.917487Z

Contract source code

// File: contracts/lib/BasicStorageLib.sol

pragma solidity ^0.4.24;

library BasicStorageLib {

    struct UintData {
        mapping(bytes => mapping(bytes => uint))           _storage;
    }

    struct BoolData {
        mapping(bytes => mapping(bytes => bool))           _storage;
    }

    struct AddressData {
        mapping(bytes => mapping(bytes => address))        _storage;
    }

    struct BytesData {
        mapping(bytes => mapping(bytes => bytes))          _storage;
    }

    struct StringData {
        mapping(bytes => mapping(bytes => string))         _storage;
    }

    /* uintStorage */

    function setStorage(UintData storage self, bytes memory key, bytes memory innerKey, uint value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal view returns (uint) {
        return self._storage[key][innerKey];
    }

    function delStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* boolStorage */

    function setStorage(BoolData storage self, bytes memory key, bytes memory innerKey, bool value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal view returns (bool) {
        return self._storage[key][innerKey];
    }

    function delStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* addressStorage */

    function setStorage(AddressData storage self, bytes memory key, bytes memory innerKey, address value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal view returns (address) {
        return self._storage[key][innerKey];
    }

    function delStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* bytesStorage */

    function setStorage(BytesData storage self, bytes memory key, bytes memory innerKey, bytes memory value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal view returns (bytes memory) {
        return self._storage[key][innerKey];
    }

    function delStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

    /* stringStorage */

    function setStorage(StringData storage self, bytes memory key, bytes memory innerKey, string memory value) internal {
        self._storage[key][innerKey] = value;
    }

    function getStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal view returns (string memory) {
        return self._storage[key][innerKey];
    }

    function delStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal {
        delete self._storage[key][innerKey];
    }

}
// File: contracts/components/BasicStorage.sol

pragma solidity ^0.4.24;


contract BasicStorage {
    /************************************************************
     **
     ** VARIABLES
     **
     ************************************************************/

    //// basic variables
    using BasicStorageLib for BasicStorageLib.UintData;
    using BasicStorageLib for BasicStorageLib.BoolData;
    using BasicStorageLib for BasicStorageLib.AddressData;
    using BasicStorageLib for BasicStorageLib.BytesData;
    using BasicStorageLib for BasicStorageLib.StringData;

    BasicStorageLib.UintData    internal uintData;
    BasicStorageLib.BoolData    internal boolData;
    BasicStorageLib.AddressData internal addressData;
    BasicStorageLib.BytesData   internal bytesData;
    BasicStorageLib.StringData  internal stringData;
}
// File: contracts/oracle/OracleStorage.sol

pragma solidity 0.4.26;


contract OracleStorage is BasicStorage {
  /************************************************************
    **
    ** STRUCTURE DEFINATIONS
    **
    ************************************************************/
  struct StoremanGroupConfig {
    uint    deposit;
    uint[2] chain;
    uint[2] curve;
    bytes   gpk1;
    bytes   gpk2;
    uint    startTime;
    uint    endTime;
    uint8   status;
    bool    isDebtClean;
  }

  /************************************************************
    **
    ** VARIABLES
    **
    ************************************************************/
  /// @notice symbol -> price,
  mapping(bytes32 => uint) public mapPrices;

  /// @notice smgId -> StoremanGroupConfig
  mapping(bytes32 => StoremanGroupConfig) public mapStoremanGroupConfig;

  /// @notice owner and admin have the authority of admin
  address public admin;
}
// File: contracts/components/Owned.sol

/*

  Copyright 2019 Wanchain Foundation.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

//                            _           _           _
//  __      ____ _ _ __   ___| |__   __ _(_)_ __   __| | _____   __
//  \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / /
//   \ V  V / (_| | | | | (__| | | | (_| | | | | | (_| |  __/\ V /
//    \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/
//
//

pragma solidity ^0.4.24;

/// @dev `Owned` is a base level contract that assigns an `owner` that can be
///  later changed
contract Owned {

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

    /// @dev `owner` is the only address that can call a function with this
    /// modifier
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    address public owner;

    /// @notice The Constructor assigns the message sender to be `owner`
    constructor() public {
        owner = msg.sender;
    }

    address public newOwner;

    function transferOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), "New owner is the zero address");
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }

    /// @notice `owner` can step down and assign some other address to this role
    /// @param _newOwner The address of the new owner. 0x0 can be used to create
    ///  an unowned neutral vault, however that cannot be undone
    function changeOwner(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() public {
        if (msg.sender == newOwner) {
            owner = newOwner;
        }
    }

    function renounceOwnership() public onlyOwner {
        owner = address(0);
    }
}

// File: contracts/oracle/OracleDelegate.sol

pragma solidity 0.4.26;

/**
 * Math operations with safety checks
 */



contract OracleDelegate is OracleStorage, Owned {
  /**
    *
    * EVENTS
    *
    */
  event SetAdmin(address addr);
  event UpdatePrice(bytes32[] keys, uint[] prices);
  event SetDebtClean(bytes32 indexed id, bool isDebtClean);
  event SetStoremanGroupConfig(bytes32 indexed id, uint8 status, uint deposit, uint[2] chain, uint[2] curve, bytes gpk1, bytes gpk2, uint startTime, uint endTime);
  event SetStoremanGroupStatus(bytes32 indexed id, uint8 status);
  event UpdateDeposit(bytes32 indexed id, uint deposit);

  /**
    *
    * MODIFIERS
    *
    */

  modifier onlyAdmin() {
      require((msg.sender == admin) || (msg.sender == owner), "not admin");
      _;
  }

  /**
  *
  * MANIPULATIONS
  *
  */

  function updatePrice(
    bytes32[] keys,
    uint[] prices
  )
    external
    onlyAdmin
  {
    require(keys.length == prices.length, "length not same");

    for (uint256 i = 0; i < keys.length; i++) {
      mapPrices[keys[i]] = prices[i];
    }

    emit UpdatePrice(keys, prices);
  }

  function updateDeposit(
    bytes32 smgID,
    uint amount
  )
    external
    onlyAdmin
  {
    mapStoremanGroupConfig[smgID].deposit = amount;

    emit UpdateDeposit(smgID, amount);
  }

  function setStoremanGroupStatus(
    bytes32 id,
    uint8  status
  )
    external
    onlyAdmin
  {
    mapStoremanGroupConfig[id].status = status;

    emit SetStoremanGroupStatus(id, status);
  }

  function setStoremanGroupConfig(
    bytes32 id,
    uint8   status,
    uint    deposit,
    uint[2] chain,
    uint[2] curve,
    bytes   gpk1,
    bytes   gpk2,
    uint    startTime,
    uint    endTime
  )
    external
    onlyAdmin
  {
    mapStoremanGroupConfig[id].deposit = deposit;
    mapStoremanGroupConfig[id].status = status;
    mapStoremanGroupConfig[id].chain[0] = chain[0];
    mapStoremanGroupConfig[id].chain[1] = chain[1];
    mapStoremanGroupConfig[id].curve[0] = curve[0];
    mapStoremanGroupConfig[id].curve[1] = curve[1];
    mapStoremanGroupConfig[id].gpk1 = gpk1;
    mapStoremanGroupConfig[id].gpk2 = gpk2;
    mapStoremanGroupConfig[id].startTime = startTime;
    mapStoremanGroupConfig[id].endTime = endTime;

    emit SetStoremanGroupConfig(id, status, deposit, chain, curve, gpk1, gpk2, startTime, endTime);
  }

  function setDebtClean(
    bytes32 storemanGroupId,
    bool isClean
  )
    external
    onlyAdmin
  {
    mapStoremanGroupConfig[storemanGroupId].isDebtClean = isClean;

    emit SetDebtClean(storemanGroupId, isClean);
  }

  function setAdmin(
    address addr
  ) external onlyOwner
  {
    admin = addr;

    emit SetAdmin(addr);
  }

  function getValue(bytes32 key) external view returns (uint) {
    return mapPrices[key];
  }

  function getValues(bytes32[] keys) external view returns (uint[] values) {
    values = new uint[](keys.length);
    for(uint256 i = 0; i < keys.length; i++) {
        values[i] = mapPrices[keys[i]];
    }
  }

  function getDeposit(bytes32 smgID) external view returns (uint) {
    return mapStoremanGroupConfig[smgID].deposit;
  }

  function getStoremanGroupConfig(
    bytes32 id
  )
    external
    view
    returns(bytes32 groupId, uint8 status, uint deposit, uint chain1, uint chain2, uint curve1, uint curve2, bytes gpk1, bytes gpk2, uint startTime, uint endTime)
  {
    groupId = id;
    status = mapStoremanGroupConfig[id].status;
    deposit = mapStoremanGroupConfig[id].deposit;
    chain1 = mapStoremanGroupConfig[id].chain[0];
    chain2 = mapStoremanGroupConfig[id].chain[1];
    curve1 = mapStoremanGroupConfig[id].curve[0];
    curve2 = mapStoremanGroupConfig[id].curve[1];
    gpk1 = mapStoremanGroupConfig[id].gpk1;
    gpk2 = mapStoremanGroupConfig[id].gpk2;
    startTime = mapStoremanGroupConfig[id].startTime;
    endTime = mapStoremanGroupConfig[id].endTime;
  }

  function getStoremanGroupStatus(bytes32 id)
    public
    view
    returns(uint8 status, uint startTime, uint endTime)
  {
    status = mapStoremanGroupConfig[id].status;
    startTime = mapStoremanGroupConfig[id].startTime;
    endTime = mapStoremanGroupConfig[id].endTime;
  }

  function isDebtClean(
    bytes32 storemanGroupId
  )
    external
    view
    returns (bool)
  {
    return mapStoremanGroupConfig[storemanGroupId].isDebtClean;
  }
}
        

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"values"}],"name":"getValues","inputs":[{"type":"bytes32[]","name":"keys"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"groupId"},{"type":"uint8","name":"status"},{"type":"uint256","name":"deposit"},{"type":"uint256","name":"chain1"},{"type":"uint256","name":"chain2"},{"type":"uint256","name":"curve1"},{"type":"uint256","name":"curve2"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"name":"getStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"deposit"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"},{"type":"uint8","name":"status"},{"type":"bool","name":"isDebtClean"}],"name":"mapStoremanGroupConfig","inputs":[{"type":"bytes32","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwner","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"isDebtClean","inputs":[{"type":"bytes32","name":"storemanGroupId"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id"},{"type":"uint8","name":"status"},{"type":"uint256","name":"deposit"},{"type":"uint256[2]","name":"chain"},{"type":"uint256[2]","name":"curve"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getValue","inputs":[{"type":"bytes32","name":"key"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setAdmin","inputs":[{"type":"address","name":"addr"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"renounceOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"acceptOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getDeposit","inputs":[{"type":"bytes32","name":"smgID"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setDebtClean","inputs":[{"type":"bytes32","name":"storemanGroupId"},{"type":"bool","name":"isClean"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"status"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"name":"getStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeOwner","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updatePrice","inputs":[{"type":"bytes32[]","name":"keys"},{"type":"uint256[]","name":"prices"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mapPrices","inputs":[{"type":"bytes32","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"newOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id"},{"type":"uint8","name":"status"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateDeposit","inputs":[{"type":"bytes32","name":"smgID"},{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"admin","inputs":[],"constant":true},{"type":"event","name":"SetAdmin","inputs":[{"type":"address","name":"addr","indexed":false}],"anonymous":false},{"type":"event","name":"UpdatePrice","inputs":[{"type":"bytes32[]","name":"keys","indexed":false},{"type":"uint256[]","name":"prices","indexed":false}],"anonymous":false},{"type":"event","name":"SetDebtClean","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"bool","name":"isDebtClean","indexed":false}],"anonymous":false},{"type":"event","name":"SetStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint8","name":"status","indexed":false},{"type":"uint256","name":"deposit","indexed":false},{"type":"uint256[2]","name":"chain","indexed":false},{"type":"uint256[2]","name":"curve","indexed":false},{"type":"bytes","name":"gpk1","indexed":false},{"type":"bytes","name":"gpk2","indexed":false},{"type":"uint256","name":"startTime","indexed":false},{"type":"uint256","name":"endTime","indexed":false}],"anonymous":false},{"type":"event","name":"SetStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint8","name":"status","indexed":false}],"anonymous":false},{"type":"event","name":"UpdateDeposit","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint256","name":"deposit","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
              

Contract Creation Code

0x608060405260088054600160a060020a03191633179055611432806100256000396000f30060806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631b0522e8811461012157806344cefb69146101915780634af72234146102d45780634fb2e45d146103f75780635d8026c51461041a578063660b3439146104465780636984394014610490578063704b6c02146104ba578063715018a6146104db57806379ba5097146104f05780637a86983f146105055780637cf0f5cd1461051d5780638da5cb5b1461053a57806395e8d68a1461056b578063a6f9dae1146105a5578063b2bffcc3146105c6578063ba54a0e8146105f2578063d4ee1d901461060a578063e516ce691461061f578063ea872e1d1461063d578063f851a44014610658575b600080fd5b34801561012d57600080fd5b50610141600480356024810191013561066d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017d578181015183820152602001610165565b505050509050019250505060405180910390f35b34801561019d57600080fd5b506101a96004356106ff565b604051808c600019166000191681526020018b60ff1660ff1681526020018a81526020018981526020018881526020018781526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561022e578181015183820152602001610216565b50505050905090810190601f16801561025b5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b3480156102e057600080fd5b506102ec6004356108a3565b6040518088815260200180602001806020018781526020018681526020018560ff1660ff16815260200184151515158152602001838103835289818151815260200191508051906020019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156103b557818101518382015260200161039d565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561040357600080fd5b50610418600160a060020a03600435166109fb565b005b34801561042657600080fd5b50610432600435610b14565b604080519115158252519081900360200190f35b34801561045257600080fd5b5061041860048035906024803560ff16916044359160649160a49160e435808201929081013591610104359081019101356101243561014435610b31565b34801561049c57600080fd5b506104a8600435610cf0565b60408051918252519081900360200190f35b3480156104c657600080fd5b50610418600160a060020a0360043516610d02565b3480156104e757600080fd5b50610418610db3565b3480156104fc57600080fd5b50610418610e22565b34801561051157600080fd5b506104a8600435610e67565b34801561052957600080fd5b506104186004356024351515610e79565b34801561054657600080fd5b5061054f610f42565b60408051600160a060020a039092168252519081900360200190f35b34801561057757600080fd5b50610583600435610f51565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156105b157600080fd5b50610418600160a060020a0360043516610f77565b3480156105d257600080fd5b506104186024600480358281019290820135918135918201910135610ff6565b3480156105fe57600080fd5b506104a8600435611187565b34801561061657600080fd5b5061054f611199565b34801561062b57600080fd5b5061041860043560ff602435166111a8565b34801561064957600080fd5b5061041860043560243561126a565b34801561066457600080fd5b5061054f61131c565b606060008383905060405190808252806020026020018201604052801561069e578160200160208202803883390190505b509150600090505b828110156106f857600560008585848181106106be57fe5b602090810292909201358352508101919091526040016000205482518390839081106106e657fe5b602090810290910101526001016106a6565b5092915050565b60008181526006602090815260408083206009810154815460018084015460028086015460038701546004880154600590980180548a516000199782161561010002979097011693909304601f81018b90048b0286018b019099528885528b9a60ff909716999598939791969095919460609485949293849391908301828280156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b50505060008f8152600660208181526040928390209091018054835160026000196001841615610100020190921691909104601f810184900484028201840190945283815295995093509091508301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b50505060009e8f52505060066020526040909c2060078101546008909101549b9d9a9c999b989a9799969895979496959094909350915050565b60066020908152600091825260409182902080546005820180548551601f60026000196101006001861615020190931692909204918201869004860281018601909652808652919492939091908301828280156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505060068301805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529495949350908301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b50505050600783015460088401546009909401549293909290915060ff8082169161010090041687565b600854600160a060020a03163314610a4b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b600160a060020a0381161515610aab576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600090815260066020526040902060090154610100900460ff1690565b600754600160a060020a0316331480610b545750600854600160a060020a031633145b1515610b98576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b60008b81526006602090815260409091208a815560098101805460ff191660ff8e161790558935600182015589820135600282015588356003820155908801356004820155610beb90600501878761132b565b5060008b8152600660208190526040909120610c099101858561132b565b5060008b81526006602090815260409182902060078101859055600801839055815160ff8d1681529081018b90528c917f6c630ca4148e623628a03dca265004956b6e5f8780dd60718411c8aaaa9a5c4b918d918d918d918d918d918d918d918d918d918d9190818101908a90808284379091019050886040808284378201915050806020018060200185815260200184815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039e50909c50505050505050505050505050a25050505050505050505050565b60009081526005602052604090205490565b600854600160a060020a03163314610d52576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b60078054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19181900360200190a150565b600854600160a060020a03163314610e03576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a0316331415610e65576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60009081526006602052604090205490565b600754600160a060020a0316331480610e9c5750600854600160a060020a031633145b1515610ee0576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805461ff001916610100851515908102919091179091558251908152915184927fd8d967123b353fe621f065bf16a92912d1b28f5ca3202cba95e6962f7fe83ff892908290030190a25050565b600854600160a060020a031681565b60009081526006602052604090206009810154600782015460089092015460ff90911692565b600854600160a060020a03163314610fc7576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600090600160a060020a031633148061101c5750600854600160a060020a031633145b1515611060576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b8382146110b7576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206e6f742073616d650000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8381101561110a578282828181106110cf57fe5b905060200201356005600087878581811015156110e857fe5b60209081029290920135835250810191909152604001600020556001016110bb565b7f6e65233ef2c857cd6bc5a40c516989c41a667fd5e3c0fa73e02414d179375216858585856040518080602001806020018381038352878782818152602001925060200280828437909101848103835285815260209081019150869086028082843760405192018290039850909650505050505050a15050505050565b60056020526000908152604090205481565b600954600160a060020a031681565b600754600160a060020a03163314806111cb5750600854600160a060020a031633145b151561120f576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805460ff191660ff85169081179091558251908152915184927f444e160ab68acf79ea04c1b91f81237ea93afab2cdadfc4086e5ce5e93baeb2b92908290030190a25050565b600754600160a060020a031633148061128d5750600854600160a060020a031633145b15156112d1576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b6000828152600660209081526040918290208390558151838152915184927f50d6929552e90ba7b4193a743fc16c69e74fae125629e0957d1ed0c31627ae9d92908290030190a25050565b600754600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061136c5782800160ff19823516178555611399565b82800160010185558215611399579182015b8281111561139957823582559160200191906001019061137e565b506113a59291506113a9565b5090565b6113c391905b808211156113a557600081556001016113af565b9056004e6f74206f776e657200000000000000000000000000000000000000000000006e6f742061646d696e0000000000000000000000000000000000000000000000a165627a7a723058204d93cfff25563d1b444aae185221fc10f09fd4e1f0ab3764b024d2e7eb42c2370029

Deployed ByteCode

0x60806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631b0522e8811461012157806344cefb69146101915780634af72234146102d45780634fb2e45d146103f75780635d8026c51461041a578063660b3439146104465780636984394014610490578063704b6c02146104ba578063715018a6146104db57806379ba5097146104f05780637a86983f146105055780637cf0f5cd1461051d5780638da5cb5b1461053a57806395e8d68a1461056b578063a6f9dae1146105a5578063b2bffcc3146105c6578063ba54a0e8146105f2578063d4ee1d901461060a578063e516ce691461061f578063ea872e1d1461063d578063f851a44014610658575b600080fd5b34801561012d57600080fd5b50610141600480356024810191013561066d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017d578181015183820152602001610165565b505050509050019250505060405180910390f35b34801561019d57600080fd5b506101a96004356106ff565b604051808c600019166000191681526020018b60ff1660ff1681526020018a81526020018981526020018881526020018781526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561022e578181015183820152602001610216565b50505050905090810190601f16801561025b5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b3480156102e057600080fd5b506102ec6004356108a3565b6040518088815260200180602001806020018781526020018681526020018560ff1660ff16815260200184151515158152602001838103835289818151815260200191508051906020019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156103b557818101518382015260200161039d565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561040357600080fd5b50610418600160a060020a03600435166109fb565b005b34801561042657600080fd5b50610432600435610b14565b604080519115158252519081900360200190f35b34801561045257600080fd5b5061041860048035906024803560ff16916044359160649160a49160e435808201929081013591610104359081019101356101243561014435610b31565b34801561049c57600080fd5b506104a8600435610cf0565b60408051918252519081900360200190f35b3480156104c657600080fd5b50610418600160a060020a0360043516610d02565b3480156104e757600080fd5b50610418610db3565b3480156104fc57600080fd5b50610418610e22565b34801561051157600080fd5b506104a8600435610e67565b34801561052957600080fd5b506104186004356024351515610e79565b34801561054657600080fd5b5061054f610f42565b60408051600160a060020a039092168252519081900360200190f35b34801561057757600080fd5b50610583600435610f51565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156105b157600080fd5b50610418600160a060020a0360043516610f77565b3480156105d257600080fd5b506104186024600480358281019290820135918135918201910135610ff6565b3480156105fe57600080fd5b506104a8600435611187565b34801561061657600080fd5b5061054f611199565b34801561062b57600080fd5b5061041860043560ff602435166111a8565b34801561064957600080fd5b5061041860043560243561126a565b34801561066457600080fd5b5061054f61131c565b606060008383905060405190808252806020026020018201604052801561069e578160200160208202803883390190505b509150600090505b828110156106f857600560008585848181106106be57fe5b602090810292909201358352508101919091526040016000205482518390839081106106e657fe5b602090810290910101526001016106a6565b5092915050565b60008181526006602090815260408083206009810154815460018084015460028086015460038701546004880154600590980180548a516000199782161561010002979097011693909304601f81018b90048b0286018b019099528885528b9a60ff909716999598939791969095919460609485949293849391908301828280156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b50505060008f8152600660208181526040928390209091018054835160026000196001841615610100020190921691909104601f810184900484028201840190945283815295995093509091508301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b50505060009e8f52505060066020526040909c2060078101546008909101549b9d9a9c999b989a9799969895979496959094909350915050565b60066020908152600091825260409182902080546005820180548551601f60026000196101006001861615020190931692909204918201869004860281018601909652808652919492939091908301828280156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505060068301805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529495949350908301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b50505050600783015460088401546009909401549293909290915060ff8082169161010090041687565b600854600160a060020a03163314610a4b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b600160a060020a0381161515610aab576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600090815260066020526040902060090154610100900460ff1690565b600754600160a060020a0316331480610b545750600854600160a060020a031633145b1515610b98576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b60008b81526006602090815260409091208a815560098101805460ff191660ff8e161790558935600182015589820135600282015588356003820155908801356004820155610beb90600501878761132b565b5060008b8152600660208190526040909120610c099101858561132b565b5060008b81526006602090815260409182902060078101859055600801839055815160ff8d1681529081018b90528c917f6c630ca4148e623628a03dca265004956b6e5f8780dd60718411c8aaaa9a5c4b918d918d918d918d918d918d918d918d918d918d9190818101908a90808284379091019050886040808284378201915050806020018060200185815260200184815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039e50909c50505050505050505050505050a25050505050505050505050565b60009081526005602052604090205490565b600854600160a060020a03163314610d52576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b60078054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19181900360200190a150565b600854600160a060020a03163314610e03576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a0316331415610e65576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60009081526006602052604090205490565b600754600160a060020a0316331480610e9c5750600854600160a060020a031633145b1515610ee0576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805461ff001916610100851515908102919091179091558251908152915184927fd8d967123b353fe621f065bf16a92912d1b28f5ca3202cba95e6962f7fe83ff892908290030190a25050565b600854600160a060020a031681565b60009081526006602052604090206009810154600782015460089092015460ff90911692565b600854600160a060020a03163314610fc7576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600090600160a060020a031633148061101c5750600854600160a060020a031633145b1515611060576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b8382146110b7576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206e6f742073616d650000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8381101561110a578282828181106110cf57fe5b905060200201356005600087878581811015156110e857fe5b60209081029290920135835250810191909152604001600020556001016110bb565b7f6e65233ef2c857cd6bc5a40c516989c41a667fd5e3c0fa73e02414d179375216858585856040518080602001806020018381038352878782818152602001925060200280828437909101848103835285815260209081019150869086028082843760405192018290039850909650505050505050a15050505050565b60056020526000908152604090205481565b600954600160a060020a031681565b600754600160a060020a03163314806111cb5750600854600160a060020a031633145b151561120f576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805460ff191660ff85169081179091558251908152915184927f444e160ab68acf79ea04c1b91f81237ea93afab2cdadfc4086e5ce5e93baeb2b92908290030190a25050565b600754600160a060020a031633148061128d5750600854600160a060020a031633145b15156112d1576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b6000828152600660209081526040918290208390558151838152915184927f50d6929552e90ba7b4193a743fc16c69e74fae125629e0957d1ed0c31627ae9d92908290030190a25050565b600754600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061136c5782800160ff19823516178555611399565b82800160010185558215611399579182015b8281111561139957823582559160200191906001019061137e565b506113a59291506113a9565b5090565b6113c391905b808211156113a557600081556001016113af565b9056004e6f74206f776e657200000000000000000000000000000000000000000000006e6f742061646d696e0000000000000000000000000000000000000000000000a165627a7a723058204d93cfff25563d1b444aae185221fc10f09fd4e1f0ab3764b024d2e7eb42c2370029