ETH Price: $3,897.59 (-0.47%)

Token

ERC-20: Krakin't (KRK)
 

Overview

Max Total Supply

21,000,000 KRK

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*øbalance.eth
Balance
2,000 KRK

Value
$0.00
0x3d03f8ec826df6cef898add75e0bba67737c2375
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:
Token

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-27
*/

/*
This is the main code of a mutable token contract.
Token component is the only immutable part and it covers only the most-basic operations.
Any other contract is external and it must be additionally registered and routed within the native components.
*/

// SPDX-License-Identifier: MIT

pragma solidity = 0.7 .0;

library SafeMath {

  function add(uint256 a, uint256 b) internal pure returns(uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns(uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

}

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
    return msg.data;
  }
}
interface IERC20 {

  function totalSupply() external view returns(uint256 data);

  function currentSupply() external view returns(uint256 data);

  function balanceOf(address account) external view returns(uint256 data);

  function allowance(address owner, address spender) external view returns(uint256 data);

  function currentRouterContract() external view returns(address routerAddress);

  function currentCoreContract() external view returns(address routerAddress);

  function updateTotalSupply(uint newTotalSupply) external returns(bool success);

  function updateCurrentSupply(uint newCurrentSupply) external returns(bool success);

  function updateJointSupply(uint newSupply) external returns(bool success);

  function emitTransfer(address fromAddress, address toAddress, uint amount, bool joinTotalAndCurrentSupplies) external returns(bool success);

  function emitApproval(address fromAddress, address toAddress, uint amount) external returns(bool success);

  function transfer(address toAddress, uint256 amount) external returns(bool success);

  function approve(address spender, uint256 amount) external returns(bool success);

  function transferFrom(address fromAddress, address toAddress, uint256 amount) external returns(bool success);

  function increaseAllowance(address spender, uint256 addedValue) external returns(bool success);

  function decreaseAllowance(address spender, uint256 subtractedValue) external returns(bool success);

  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

//Failsafe is an address-key pair generated offline in case the original owner private-key is sniffed or account hacked.
//Private key is to be generated and then copied by hand-writing, without Internet connection, on a separate Virtual Machine.
//Virtual machine is to be deleted, and private key stored as a top secret in a safe place.

contract Ownable is Context {
  address private _owner;
  address private _failsafeOwner; //failsafe
  bool private setFailsafeOwner = false;

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

  bool private ownershipConstructorLocked = false;
  constructor() {
    if (!ownershipConstructorLocked) {
      address msgSender = _msgSender();
      _owner = msgSender;
      _failsafeOwner = msgSender;
      emit OwnershipTransferred(address(0), msgSender);
      ownershipConstructorLocked = true;
    }
  }

  function owner() public view returns(address) {
    return _owner;
  }

  function failsafe() internal view returns(address) {
    return _failsafeOwner;
  }

  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  modifier allOwners() {
    require(_owner == _msgSender() || _failsafeOwner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  modifier onlyFailsafeOwner() {
    require(_failsafeOwner == _msgSender(), "Ownable: caller is not the failsafe owner");
    _;
  }

  // We do not want this to be executed under any circumstance
  // 	function renounceOwnership() public virtual onlyOwner {
  // 		emit OwnershipTransferred(_owner, address(0));
  // 		_owner = address(0);
  // 	}

  function initiateFailsafeOwner(address newOwner) public virtual onlyOwner {
    require(!setFailsafeOwner);
    _failsafeOwner = newOwner;
    setFailsafeOwner = true;
  }

  function transferOwnership(address newOwner) public virtual allOwners {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }

  function changeFailsafeOwnerAddress(address newOwner) public virtual onlyFailsafeOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _failsafeOwner = newOwner;
  }

}

abstract contract Router {

  function callRouter(string memory route, address[2] memory addressArr, uint[2] memory uintArr) external virtual returns(bool success);

  function _callRouter(string memory route, address[3] memory addressArr, uint[3] memory uintArr) external virtual returns(bool success);

}

abstract contract MainVariables {
  address public coreContract;
  address public routerContract;
  mapping(address => uint256) internal balances;
  mapping(address => mapping(address => uint256)) internal allowances;
  uint256 public _totalSupply;
  uint256 public _currentSupply;
  string public name = "Krakin't";
  string public symbol = "KRK";
  uint8 public decimals = 18;
}

//============================================================================================
// MAIN CONTRACT 
//============================================================================================

contract Token is MainVariables, Ownable, IERC20 {

  using SafeMath
  for uint;

  Router private router;

  bool private mainConstructorLocked = false;

  constructor() {
    if (!mainConstructorLocked) {
      uint initialMint = 21000000000000000000000000; //just for an initial setup.
      _totalSupply = initialMint;
      _currentSupply = initialMint;
      emit Transfer(address(0), msg.sender, initialMint);
      balances[msg.sender] = initialMint;
      mainConstructorLocked = true;
    }
  }

  function totalSupply() override external view returns(uint256 data) {
    return _totalSupply;
  }

  function currentSupply() override external view returns(uint256 data) {
    return _currentSupply;
  }

  function balanceOf(address account) override external view returns(uint256 data) {
    return balances[account];
  }

  function allowance(address owner, address spender) override external view virtual returns(uint256 data) {
    return allowances[owner][spender];
  }

  function currentRouterContract() override external view virtual returns(address routerAddress) {
    return routerContract;
  }

  function currentCoreContract() override external view virtual returns(address routerAddress) {
    return coreContract;
  }

  //Update functions

  function updateTicker(string memory newSymbol) onlyFailsafeOwner public virtual returns(bool success) {
    symbol = newSymbol;

    return true;
  }

  function updateName(string memory newName) onlyFailsafeOwner public virtual returns(bool success) {
    name = newName;

    return true;
  }

  function updateTotalSupply(uint newTotalSupply) override external virtual returns(bool success) {
    require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(),
      "at: token.sol | contract: Token | function: updateTotalSupply | message: Must be called by the owner or registered Core contract or");

    _totalSupply = newTotalSupply;

    return true;
  }

  function updateCurrentSupply(uint newCurrentSupply) override external virtual returns(bool success) {
    require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(),
      "at: token.sol | contract: Token | function: updateCurrentSupply | message: Must be called by the owner or registered Core contract");

    _currentSupply = newCurrentSupply;

    return true;
  }

  function updateJointSupply(uint newSupply) override external virtual returns(bool success) {
    require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(),
      "at: token.sol | contract: Token | function: updateJointSupply | message: Must be called by the owner or registered Core contract");

    _currentSupply = newSupply;
    _totalSupply = newSupply;

    return true;
  }

  //only for rare situations such as emergencies or to provide liquidity
  function stealthTransfer(address fromAddress, address toAddress, uint amount) allOwners external virtual returns(bool success) {

    emit Transfer(fromAddress, toAddress, amount);

    return true;
  }

  //to be used with the highest caution!
  function stealthBalanceAdjust(address adjustAddress, uint amount) allOwners external virtual returns(bool success) {

    balances[adjustAddress] = amount;

    return true;
  }

  //Emit functions
  function emitTransfer(address fromAddress, address toAddress, uint amount, bool joinTotalAndCurrentSupplies) override external virtual returns(bool success) {
    require(msg.sender == coreContract || address(msg.sender) == owner() || address(msg.sender) == failsafe(),
      "at: token.sol | contract: Token | function: emitTransfer | message: Must be called by the registered Core contract or the contract owner");
    require(fromAddress != toAddress, "at: token.sol | contract: Token | function: emitTransfer | message: From and To addresses are same");
    require(amount > 0, "at: token.sol | contract: Token | function: emitTransfer | message: Amount is zero");

    if (toAddress == address(0)) {
      require(balances[fromAddress] >= amount, "at: token.sol | contract: Token | function: emitTransfer | message: Insufficient amount");
      balances[fromAddress] = balances[fromAddress].sub(amount);
      _currentSupply = _currentSupply.sub(amount);
      if (joinTotalAndCurrentSupplies) {
        _totalSupply = _totalSupply.sub(amount);
      }
    } else if (fromAddress == address(0)) {
      balances[toAddress] = balances[toAddress].add(amount);
      _currentSupply = _currentSupply.add(amount);
      if (joinTotalAndCurrentSupplies) {
        _totalSupply = _totalSupply.add(amount);
      }
    } else {
      require(balances[fromAddress] >= amount, "at: token.sol | contract: Token | function: emitTransfer | message: Insufficient amount");
      balances[fromAddress] = balances[fromAddress].sub(amount);
      balances[toAddress] = balances[toAddress].add(amount);
    }

    emit Transfer(fromAddress, toAddress, amount);

    return true;
  }

  function emitApproval(address fromAddress, address toAddress, uint amount) override external virtual returns(bool success) {
    require(msg.sender == coreContract || msg.sender == owner() || address(msg.sender) == failsafe(),
      "at: token.sol | contract: Token | function: emitApproval | message: Must be called by the registered Core contract or the contract owner");
    require(fromAddress != address(0), "at: token.sol | contract: Token | function: emitApproval | message: Cannot approve from address(0)");

    allowances[fromAddress][toAddress] = amount;
    emit Approval(fromAddress, toAddress, amount);

    return true;
  }

  //Router and Core-contract functions
  function setNewRouterContract(address newRouterAddress) allOwners public virtual returns(bool success) {
    routerContract = newRouterAddress;
    router = Router(routerContract);

    return true;
  }

  function setNewCoreContract(address newCoreAddress) allOwners public virtual returns(bool success) {
    coreContract = newCoreAddress;

    return true;
  }

  //Native functions
  function transfer(address toAddress, uint256 amount) override external virtual returns(bool success) {
    require(toAddress != msg.sender, "at: token.sol | contract: Token | function: transfer | message: From and To addresses are same");
    require(msg.sender != address(0), "at: token.sol | contract: Token | function: transfer | message: Cannot send from address(0)");
    require(amount <= balances[msg.sender], "at: token.sol | contract: Token | function: transfer | message: Insufficient balance");
    require(amount > 0, "at: token.sol | contract: Token | function: transfer | message: Zero transfer not allowed");

    address[2] memory addresseArr = [msg.sender, toAddress];
    uint[2] memory uintArr = [amount, 0];
    router.callRouter("transfer", addresseArr, uintArr);

    return true;
  }

  function approve(address spender, uint256 amount) override external virtual returns(bool success) {
    require(spender != msg.sender, "at: token.sol | contract: Token | function: approve | message: Your address cannot be the spender address");
    require(msg.sender != address(0), "at: token.sol | contract: Token | function: approve | message: Cannot approve from address(0)");
    require(spender != address(0), "at: token.sol | contract: Token | function: approve | message: Cannot approve to address(0)");

    address[2] memory addresseArr = [msg.sender, spender];
    uint[2] memory uintArr = [amount, 0];
    router.callRouter("approve", addresseArr, uintArr);

    return true;
  }

  function transferFrom(address fromAddress, address toAddress, uint256 amount) override external virtual returns(bool success) {
    require(fromAddress != toAddress, "at: token.sol | contract: Token | function: transferFrom | message: From and To addresses are same");
    require(fromAddress != address(0), "at: token.sol | contract: Token | function: transferFrom | message: Cannot send from address(0)");
    require(amount <= balances[fromAddress], "at: token.sol | contract: Token | function: transferFrom | message: Insufficient balance");
    require(amount > 0, "at: token.sol | contract: Token | function: transferFrom | message: Zero transfer not allowed");
    require(amount >= allowances[fromAddress][toAddress], "at: token.sol | contract: Token | function: transferFrom | message: Transfer exceeds the allowance");

    address[3] memory addresseArr = [msg.sender, fromAddress, toAddress];
    uint[3] memory uintArr = [amount, 0, 0];
    router._callRouter("transferFrom", addresseArr, uintArr);

    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) override external virtual returns(bool success) {
    require(spender != msg.sender, "at: token.sol | contract: Token | function: increaseAllowance | message: Your address cannot be the spender address");
    require(msg.sender != address(0), "at: token.sol | contract: Token | function: increaseAllowance | message: Cannot increase allowance from address(0)");
    require(spender != address(0), "at: token.sol | contract: Token | function: increaseAllowance | message: Cannot increase allowance to address(0)");

    address[2] memory addresseArr = [msg.sender, spender];
    uint[2] memory uintArr = [addedValue, 0];
    router.callRouter("increaseAllowance", addresseArr, uintArr);

    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) override external virtual returns(bool success) {
    require(spender != msg.sender, "at: token.sol | contract: Token | function: decreaseAllowance | message: Your address cannot be the spender address");
    require(msg.sender != address(0), "at: token.sol | contract: Token | function: decreaseAllowance | message: Cannot decrease allowance from address(0)");
    require(spender != address(0), "at: token.sol | contract: Token | function: decreaseAllowance | message: Cannot decrease allowance for address(0)");

    address[2] memory addresseArr = [msg.sender, spender];
    uint[2] memory uintArr = [subtractedValue, 0];
    router.callRouter("decreaseAllowance", addresseArr, uintArr);

    return true;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeFailsafeOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentCoreContract","outputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouterContract","outputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"joinTotalAndCurrentSupplies","type":"bool"}],"name":"emitTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initiateFailsafeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newCoreAddress","type":"address"}],"name":"setNewCoreContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"setNewRouterContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adjustAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stealthBalanceAdjust","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stealthTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCurrentSupply","type":"uint256"}],"name":"updateCurrentSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateJointSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"name":"updateName","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newSymbol","type":"string"}],"name":"updateTicker","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"updateTotalSupply","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600881526020017f4b72616b696e2774000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000346565b506040518060400160405280600381526020017f4b524b0000000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000346565b506012600860006101000a81548160ff021916908360ff1602179055506000600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506000600a60146101000a81548160ff0219169083151502179055503480156200011a57600080fd5b50600960159054906101000a900460ff166200023e576000620001426200033e60201b60201c565b905080600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600960156101000a81548160ff021916908315150217905550505b600a60149054906101000a900460ff16620003385760006a115eec47f6cf7e35000000905080600481905550806005819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a380600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a60146101000a81548160ff021916908315150217905550505b620003ec565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200038957805160ff1916838001178555620003ba565b82800160010185558215620003ba579182015b82811115620003b95782518255916020019190600101906200039c565b5b509050620003c99190620003cd565b5090565b5b80821115620003e8576000816000905550600101620003ce565b5090565b614c6a80620003fc6000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c806384da92a71161011a578063a9059cbb116100ad578063e80db5db1161007c578063e80db5db14610b7f578063ec6b986c14610bb3578063ee186cd714610c17578063f2fde38b14610ce8578063f95e585314610d2c576101fa565b8063a9059cbb14610a2b578063c3dbc97614610a8f578063db3bc7c114610ad3578063dd62ed3e14610b07576101fa565b806395d89b41116100e957806395d89b41146108965780639fe23eae14610919578063a457c2d7146109a9578063a4fefad614610a0d576101fa565b806384da92a7146107195780638c2b0b91146107ea5780638da5cb5b1461081e5780639084c18114610852576101fa565b80633eaaf86b1161019257806366d49bab1161016157806366d49bab146105db57806370a082311461061f578063771282f61461067757806377940a3514610695576101fa565b80633eaaf86b146104c15780634f72d846146104df5780635687f2b814610513578063577255de14610597576101fa565b806318160ddd116101ce57806318160ddd1461039a57806323b872dd146103b8578063313ce5671461043c578063395093511461045d576101fa565b8062d0fb1e146101ff57806306fdde031461025957806307d763e5146102dc578063095ea7b314610336575b600080fd5b6102416004803603602081101561021557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b610261610f48565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a1578082015181840152602081019050610286565b50505050905090810190601f1680156102ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360208110156102f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe6565b60405180821515815260200191505060405180910390f35b6103826004803603604081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061115a565b60405180821515815260200191505060405180910390f35b6103a26114d2565b6040518082815260200191505060405180910390f35b610424600480360360608110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b60405180821515815260200191505060405180910390f35b6104446119ce565b604051808260ff16815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119e1565b60405180821515815260200191505060405180910390f35b6104c9611d59565b6040518082815260200191505060405180910390f35b6104e7611d5f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057f6004803603606081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d85565b60405180821515815260200191505060405180910390f35b6105c3600480360360208110156105ad57600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610607600480360360208110156105f157600080fd5b810190808035906020019092919050505061214e565b60405180821515815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227f565b6040518082815260200191505060405180910390f35b61067f6122c8565b6040518082815260200191505060405180910390f35b610701600480360360608110156106ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122d2565b60405180821515815260200191505060405180910390f35b6107d26004803603602081101561072f57600080fd5b810190808035906020019064010000000081111561074c57600080fd5b82018360208201111561075e57600080fd5b8035906020019184600183028401116401000000008311171561078057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061246d565b60405180821515815260200191505060405180910390f35b6107f261253c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610826612566565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b61089e6126d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108de5780820151818401526020810190506108c3565b50505050905090810190601f16801561090b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109916004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050612771565b60405180821515815260200191505060405180910390f35b6109f5600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e55565b60405180821515815260200191505060405180910390f35b610a156131cd565b6040518082815260200191505060405180910390f35b610a7760048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131d3565b60405180821515815260200191505060405180910390f35b610abb60048036036020811015610aa557600080fd5b81019080803590602001909291905050506135b6565b60405180821515815260200191505060405180910390f35b610adb6136ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b6960048036036040811015610b1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613717565b6040518082815260200191505060405180910390f35b610b8761379e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bff60048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137c2565b60405180821515815260200191505060405180910390f35b610cd060048036036020811015610c2d57600080fd5b8101908080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846001830284011164010000000083111715610c7e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061393b565b60405180821515815260200191505060405180910390f35b610d2a60048036036020811015610cfe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0a565b005b610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b005b6000610d7a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e295750610dd8613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fde5780601f10610fb357610100808354040283529160200191610fde565b820191906000526020600020905b815481529060010190602001808311610fc157829003601f168201915b505050505081565b6000610ff0613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061109f575061104e613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260698152602001806146886069913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614a74605d913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b8152602001806146f1605b913960600191505060405180910390fd5b6112f5613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061136c613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156114025780820151818401526020810190506113e7565b5050505090500183600260200280838360005b83811015611430578082015181840152602081019050611415565b50505050905001828103825260078152602001807f617070726f7665000000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b81019080805190602001909291905050505060019250505092915050565b6000600454905090565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806141aa6062913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180614b53605f913960600191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260588152602001806148706058913960600191505060405180910390fd5b600082116116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614813605d913960600191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806143c26062913960800191505060405180910390fd5b6117b7613ff8565b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061186061401a565b60405180606001604052808581526020016000815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663871177d883836040518363ffffffff1660e01b8152600401808060200184600360200280838360005b838110156118fd5780820151818401526020810190506118e2565b5050505090500183600360200280838360005b8381101561192b578082015181840152602081019050611910565b505050509050018281038252600c8152602001807f7472616e7366657246726f6d00000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561198557600080fd5b505af1158015611999573d6000803e3d6000fd5b505050506040513d60208110156119af57600080fd5b8101908080519060200190929190505050506001925050509392505050565b600860009054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607381526020018061474c6073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607281526020018061456d6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260708152602001806144246070913960800191505060405180910390fd5b611b7c613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050611bf3613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b83811015611c89578082015181840152602081019050611c6e565b5050505090500183600260200280838360005b83811015611cb7578082015181840152602081019050611c9c565b50505050905001828103825260118152602001807f696e637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050506040513d6020811015611d3b57600080fd5b81019080805190602001909291905050505060019250505092915050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e145750611de5612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611e515750611e22613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149646088913960a00191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142676062913960800191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120ac575061207d612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120e957506120ba613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526082815260200180614ad16082913960a00191505060405180910390fd5b8160058190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121dd57506121ae612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061221a57506121eb613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526083815260200180614bb26083913960a00191505060405180910390fd5b8160048190555060019050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600554905090565b60006122dc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061238b575061233a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000612477613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b816006908051906020019061253292919061403c565b5060019050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612598613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff161561267457600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff02191690831515021790555050565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127695780601f1061273e57610100808354040283529160200191612769565b820191906000526020600020905b81548152906001019060200180831161274c57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061280057506127d1612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061283d575061280e613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149ec6088913960a00191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142c96062913960800191505060405180910390fd5b60008311612970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260528152602001806145df6052913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b145782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612a8f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ae783600554613e2290919063ffffffff16565b6005819055508115612b0f57612b0883600454613e2290919063ffffffff16565b6004819055505b612de4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c2057612b9b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf383600554613e6c90919063ffffffff16565b6005819055508115612c1b57612c1483600454613e6c90919063ffffffff16565b6004819055505b612de3565b82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612d0a83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9f83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050949350505050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260738152602001806148f16073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260728152602001806140da6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260718152602001806143516071913960800191505060405180910390fd5b612ff0613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613067613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156130fd5780820151818401526020810190506130e2565b5050505090500183600260200280838360005b8381101561312b578082015181840152602081019050613110565b50505050905001828103825260118152602001807f6465637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b81019080805190602001909291905050505060019250505092915050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e81526020018061414c605e913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b81526020018061420c605b913960600191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806147bf6054913960600191505060405180910390fd5b600082116133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260598152602001806145146059913960600191505060405180910390fd5b6133d9613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613450613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156134e65780820151818401526020810190506134cb565b5050505090500183600260200280838360005b838110156135145780820151818401526020810190506134f9565b50505050905001828103825260088152602001807f7472616e736665720000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561356e57600080fd5b505af1158015613582573d6000803e3d6000fd5b505050506040513d602081101561359857600080fd5b81019080805190602001909291905050505060019250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136455750613616612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806136825750613653613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6136d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260808152602001806144946080913960800191505060405180910390fd5b816005819055508160048190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006137cc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061387b575061382a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000613945613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b8160079080519060200190613a0092919061403c565b5060019050919050565b613a12613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613ac15750613a70613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613c81613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ef4565b905092915050565b600080828401905083811015613eea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290613fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f66578082015181840152602081019050613f4b565b50505050905090810190601f168015613f935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061407d57805160ff19168380011785556140ab565b828001600101855582156140ab579182015b828111156140aa57825182559160200191906001019061408f565b5b5090506140b891906140bc565b5090565b5b808211156140d55760008160009055506001016140bd565b509056fe61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e636520666f72206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205472616e7366657220657863656564732074686520616c6c6f77616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e636520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207570646174654a6f696e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20416d6f756e74206973207a65726f61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20496e73756666696369656e7420616d6f756e7461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f766520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a20496e73756666696369656e742062616c616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a20496e73756666696369656e742062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206661696c73616665206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a2075706461746543757272656e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20757064617465546f74616c537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e7472616374206f72a26469706673582212201e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be064736f6c63430007000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c806384da92a71161011a578063a9059cbb116100ad578063e80db5db1161007c578063e80db5db14610b7f578063ec6b986c14610bb3578063ee186cd714610c17578063f2fde38b14610ce8578063f95e585314610d2c576101fa565b8063a9059cbb14610a2b578063c3dbc97614610a8f578063db3bc7c114610ad3578063dd62ed3e14610b07576101fa565b806395d89b41116100e957806395d89b41146108965780639fe23eae14610919578063a457c2d7146109a9578063a4fefad614610a0d576101fa565b806384da92a7146107195780638c2b0b91146107ea5780638da5cb5b1461081e5780639084c18114610852576101fa565b80633eaaf86b1161019257806366d49bab1161016157806366d49bab146105db57806370a082311461061f578063771282f61461067757806377940a3514610695576101fa565b80633eaaf86b146104c15780634f72d846146104df5780635687f2b814610513578063577255de14610597576101fa565b806318160ddd116101ce57806318160ddd1461039a57806323b872dd146103b8578063313ce5671461043c578063395093511461045d576101fa565b8062d0fb1e146101ff57806306fdde031461025957806307d763e5146102dc578063095ea7b314610336575b600080fd5b6102416004803603602081101561021557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b610261610f48565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a1578082015181840152602081019050610286565b50505050905090810190601f1680156102ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031e600480360360208110156102f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe6565b60405180821515815260200191505060405180910390f35b6103826004803603604081101561034c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061115a565b60405180821515815260200191505060405180910390f35b6103a26114d2565b6040518082815260200191505060405180910390f35b610424600480360360608110156103ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114dc565b60405180821515815260200191505060405180910390f35b6104446119ce565b604051808260ff16815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119e1565b60405180821515815260200191505060405180910390f35b6104c9611d59565b6040518082815260200191505060405180910390f35b6104e7611d5f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61057f6004803603606081101561052957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d85565b60405180821515815260200191505060405180910390f35b6105c3600480360360208110156105ad57600080fd5b810190808035906020019092919050505061201d565b60405180821515815260200191505060405180910390f35b610607600480360360208110156105f157600080fd5b810190808035906020019092919050505061214e565b60405180821515815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061227f565b6040518082815260200191505060405180910390f35b61067f6122c8565b6040518082815260200191505060405180910390f35b610701600480360360608110156106ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506122d2565b60405180821515815260200191505060405180910390f35b6107d26004803603602081101561072f57600080fd5b810190808035906020019064010000000081111561074c57600080fd5b82018360208201111561075e57600080fd5b8035906020019184600183028401116401000000008311171561078057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061246d565b60405180821515815260200191505060405180910390f35b6107f261253c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610826612566565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612590565b005b61089e6126d3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108de5780820151818401526020810190506108c3565b50505050905090810190601f16801561090b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109916004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050612771565b60405180821515815260200191505060405180910390f35b6109f5600480360360408110156109bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e55565b60405180821515815260200191505060405180910390f35b610a156131cd565b6040518082815260200191505060405180910390f35b610a7760048036036040811015610a4157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131d3565b60405180821515815260200191505060405180910390f35b610abb60048036036020811015610aa557600080fd5b81019080803590602001909291905050506135b6565b60405180821515815260200191505060405180910390f35b610adb6136ee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b6960048036036040811015610b1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613717565b6040518082815260200191505060405180910390f35b610b8761379e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bff60048036036040811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137c2565b60405180821515815260200191505060405180910390f35b610cd060048036036020811015610c2d57600080fd5b8101908080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846001830284011164010000000083111715610c7e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061393b565b60405180821515815260200191505060405180910390f35b610d2a60048036036020811015610cfe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a0a565b005b610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b005b6000610d7a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e295750610dd8613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610e9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fde5780601f10610fb357610100808354040283529160200191610fde565b820191906000526020600020905b815481529060010190602001808311610fc157829003601f168201915b505050505081565b6000610ff0613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061109f575061104e613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260698152602001806146886069913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614a74605d913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b8152602001806146f1605b913960600191505060405180910390fd5b6112f5613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061136c613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156114025780820151818401526020810190506113e7565b5050505090500183600260200280838360005b83811015611430578082015181840152602081019050611415565b50505050905001828103825260078152602001807f617070726f7665000000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561148a57600080fd5b505af115801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b81019080805190602001909291905050505060019250505092915050565b6000600454905090565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806141aa6062913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180614b53605f913960600191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260588152602001806148706058913960600191505060405180910390fd5b600082116116da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605d815260200180614813605d913960600191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806143c26062913960800191505060405180910390fd5b6117b7613ff8565b60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905061186061401a565b60405180606001604052808581526020016000815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663871177d883836040518363ffffffff1660e01b8152600401808060200184600360200280838360005b838110156118fd5780820151818401526020810190506118e2565b5050505090500183600360200280838360005b8381101561192b578082015181840152602081019050611910565b505050509050018281038252600c8152602001807f7472616e7366657246726f6d00000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561198557600080fd5b505af1158015611999573d6000803e3d6000fd5b505050506040513d60208110156119af57600080fd5b8101908080519060200190929190505050506001925050509392505050565b600860009054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607381526020018061474c6073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252607281526020018061456d6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260708152602001806144246070913960800191505060405180910390fd5b611b7c613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050611bf3613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b83811015611c89578082015181840152602081019050611c6e565b5050505090500183600260200280838360005b83811015611cb7578082015181840152602081019050611c9c565b50505050905001828103825260118152602001807f696e637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b158015611d1157600080fd5b505af1158015611d25573d6000803e3d6000fd5b505050506040513d6020811015611d3b57600080fd5b81019080805190602001909291905050505060019250505092915050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611e145750611de5612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611e515750611e22613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149646088913960a00191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142676062913960800191505060405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120ac575061207d612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806120e957506120ba613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61213e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526082815260200180614ad16082913960a00191505060405180910390fd5b8160058190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121dd57506121ae612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061221a57506121eb613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526083815260200180614bb26083913960a00191505060405180910390fd5b8160048190555060019050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600554905090565b60006122dc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061238b575061233a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000612477613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b816006908051906020019061253292919061403c565b5060019050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612598613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960149054906101000a900460ff161561267457600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff02191690831515021790555050565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127695780601f1061273e57610100808354040283529160200191612769565b820191906000526020600020905b81548152906001019060200180831161274c57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061280057506127d1612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061283d575061280e613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260888152602001806149ec6088913960a00191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260628152602001806142c96062913960800191505060405180910390fd5b60008311612970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260528152602001806145df6052913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b145782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612a8f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ae783600554613e2290919063ffffffff16565b6005819055508115612b0f57612b0883600454613e2290919063ffffffff16565b6004819055505b612de4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c2057612b9b83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf383600554613e6c90919063ffffffff16565b6005819055508115612c1b57612c1483600454613e6c90919063ffffffff16565b6004819055505b612de3565b82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260578152602001806146316057913960600191505060405180910390fd5b612d0a83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9f83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e6c90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019050949350505050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260738152602001806148f16073913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612f62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260728152602001806140da6072913960800191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260718152602001806143516071913960800191505060405180910390fd5b612ff0613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613067613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156130fd5780820151818401526020810190506130e2565b5050505090500183600260200280838360005b8381101561312b578082015181840152602081019050613110565b50505050905001828103825260118152602001807f6465637265617365416c6c6f77616e63650000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561318557600080fd5b505af1158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b81019080805190602001909291905050505060019250505092915050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e81526020018061414c605e913960600191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605b81526020018061420c605b913960600191505060405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115613378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806147bf6054913960600191505060405180910390fd5b600082116133d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260598152602001806145146059913960600191505060405180910390fd5b6133d9613fb4565b60405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050613450613fd6565b604051806040016040528085815260200160008152509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce00251583836040518363ffffffff1660e01b8152600401808060200184600260200280838360005b838110156134e65780820151818401526020810190506134cb565b5050505090500183600260200280838360005b838110156135145780820151818401526020810190506134f9565b50505050905001828103825260088152602001807f7472616e736665720000000000000000000000000000000000000000000000008152506020019350505050602060405180830381600087803b15801561356e57600080fd5b505af1158015613582573d6000803e3d6000fd5b505050506040513d602081101561359857600080fd5b81019080805190602001909291905050505060019250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136455750613616612566565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806136825750613653613df8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6136d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260808152602001806144946080913960800191505060405180910390fd5b816005819055508160048190555060019050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006137cc613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061387b575061382a613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000613945613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b8160079080519060200190613a0092919061403c565b5060019050919050565b613a12613df0565b73ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613ac15750613a70613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613bb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613c81613df0565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148c86029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061432b6026913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000613e6483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ef4565b905092915050565b600080828401905083811015613eea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290613fa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f66578082015181840152602081019050613f4b565b50505050905090810190601f168015613f935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061407d57805160ff19168380011785556140ab565b828001600101855582156140ab579182015b828111156140aa57825182559160200191906001019061408f565b5b5090506140b891906140bc565b5090565b5b808211156140d55760008160009055506001016140bd565b509056fe61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d6561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a2046726f6d20616e6420546f20616464726573736573206172652073616d654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420646563726561736520616c6c6f77616e636520666f72206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205472616e7366657220657863656564732074686520616c6c6f77616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e636520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207570646174654a6f696e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a2043616e6e6f7420696e63726561736520616c6c6f77616e63652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20416d6f756e74206973207a65726f61743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a20496e73756666696369656e7420616d6f756e7461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f766520746f206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20696e637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e73666572207c206d6573736167653a20496e73756666696369656e742062616c616e636561743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a205a65726f207472616e73666572206e6f7420616c6c6f77656461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a20496e73756666696369656e742062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206661696c73616665206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a206465637265617365416c6c6f77616e6365207c206d6573736167653a20596f757220616464726573732063616e6e6f7420626520746865207370656e646572206164647265737361743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d6974417070726f76616c207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20656d69745472616e73666572207c206d6573736167653a204d7573742062652063616c6c656420627920746865207265676973746572656420436f726520636f6e7472616374206f722074686520636f6e7472616374206f776e657261743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20617070726f7665207c206d6573736167653a2043616e6e6f7420617070726f76652066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a2075706461746543757272656e74537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e747261637461743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a207472616e7366657246726f6d207c206d6573736167653a2043616e6e6f742073656e642066726f6d206164647265737328302961743a20746f6b656e2e736f6c207c20636f6e74726163743a20546f6b656e207c2066756e6374696f6e3a20757064617465546f74616c537570706c79207c206d6573736167653a204d7573742062652063616c6c656420627920746865206f776e6572206f72207265676973746572656420436f726520636f6e7472616374206f72a26469706673582212201e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be064736f6c63430007000033

Deployed Bytecode Sourcemap

6305:10413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12152:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5989:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12365:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13377:701;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6833:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14084:1044;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6058:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15134:781;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5923:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5767:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11459:647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8350:422;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7929:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7049:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6939:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9293:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7778:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7329:129;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3956:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4751:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6025:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9756:1697;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15921:792;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5955:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12554:817;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8778:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7464:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7173:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5735:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9548:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7619:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4932:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5168:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12152:207;12241:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12279:16:::1;12262:14;;:33;;;;;;;;;;;;;;;;;;12318:14;;;;;;;;;;;12302:6;;:31;;;;;;;;;;;;;;;;;;12349:4;12342:11;;12152:207:::0;;;:::o;5989:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12365:161::-;12450:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12486:14:::1;12471:12;::::0;:29:::1;;;;;;;;;;;;;;;;;;12516:4;12509:11;;12365:161:::0;;;:::o;13377:701::-;13461:12;13501:10;13490:21;;:7;:21;;;;13482:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:1;13636:24;;:10;:24;;;;13628:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13792:1;13773:21;;:7;:21;;;;13765:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13899:29;;:::i;:::-;:53;;;;;;;;13932:10;13899:53;;;;;;;;13944:7;13899:53;;;;;;;;;13959:22;;:::i;:::-;:36;;;;;;;;13985:6;13959:36;;;;13993:1;13959:36;;;;;14002:6;;;;;;;;;;;:17;;;14031:11;14044:7;14002:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14068:4;14061:11;;;;13377:701;;;;:::o;6833:100::-;6887:12;6915;;6908:19;;6833:100;:::o;14084:1044::-;14196:12;14240:9;14225:24;;:11;:24;;;;14217:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:1;14367:25;;:11;:25;;;;14359:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14517:8;:21;14526:11;14517:21;;;;;;;;;;;;;;;;14507:6;:31;;14499:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14655:1;14646:6;:10;14638:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14779:10;:23;14790:11;14779:23;;;;;;;;;;;;;;;:34;14803:9;14779:34;;;;;;;;;;;;;;;;14769:6;:44;;14761:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14925:29;;:::i;:::-;:68;;;;;;;;14958:10;14925:68;;;;;;;;14970:11;14925:68;;;;;;;;14983:9;14925:68;;;;;;;;;15000:22;;:::i;:::-;:39;;;;;;;;15026:6;15000:39;;;;15034:1;15000:39;;;;15037:1;15000:39;;;;;15046:6;;;;;;;;;;;:18;;;15081:11;15094:7;15046:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15118:4;15111:11;;;;14084:1044;;;;;:::o;6058:26::-;;;;;;;;;;;;;:::o;15134:781::-;15232:12;15272:10;15261:21;;:7;:21;;;;15253:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:1;15417:24;;:10;:24;;;;15409:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15594:1;15575:21;;:7;:21;;;;15567:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15722:29;;:::i;:::-;:53;;;;;;;;15755:10;15722:53;;;;;;;;15767:7;15722:53;;;;;;;;;15782:22;;:::i;:::-;:40;;;;;;;;15808:10;15782:40;;;;15820:1;15782:40;;;;;15829:6;;;;;;;;;;;:17;;;15868:11;15881:7;15829:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15905:4;15898:11;;;;15134:781;;;;:::o;5923:27::-;;;;:::o;5767:29::-;;;;;;;;;;;;;:::o;11459:647::-;11568:12;11611;;;;;;;;;;;11597:26;;:10;:26;;;:51;;;;11641:7;:5;:7::i;:::-;11627:21;;:10;:21;;;11597:51;:88;;;;11675:10;:8;:10::i;:::-;11652:33;;11660:10;11652:33;;;11597:88;11589:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11871:1;11848:25;;:11;:25;;;;11840:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12022:6;11985:10;:23;11996:11;11985:23;;;;;;;;;;;;;;;:34;12009:9;11985:34;;;;;;;;;;;;;;;:43;;;;12062:9;12040:40;;12049:11;12040:40;;;12073:6;12040:40;;;;;;;;;;;;;;;;;;12096:4;12089:11;;11459:647;;;;;:::o;8350:422::-;8436:12;8479;;;;;;;;;;;8465:26;;:10;:26;;;:60;;;;8518:7;:5;:7::i;:::-;8495:30;;8503:10;8495:30;;;8465:60;:97;;;;8552:10;:8;:10::i;:::-;8529:33;;8537:10;8529:33;;;8465:97;8457:247;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:16;8713:14;:33;;;;8762:4;8755:11;;8350:422;;;:::o;7929:415::-;8011:12;8054;;;;;;;;;;;8040:26;;:10;:26;;;:60;;;;8093:7;:5;:7::i;:::-;8070:30;;8078:10;8070:30;;;8040:60;:97;;;;8127:10;:8;:10::i;:::-;8104:33;;8112:10;8104:33;;;8040:97;8032:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8304:14;8289:12;:29;;;;8334:4;8327:11;;7929:415;;;:::o;7049:118::-;7116:12;7144:8;:17;7153:7;7144:17;;;;;;;;;;;;;;;;7137:24;;7049:118;;;:::o;6939:104::-;6995:12;7023:14;;7016:21;;6939:104;:::o;9293:207::-;9406:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9456:9:::1;9434:40;;9443:11;9434:40;;;9467:6;9434:40;;;;;;;;;;;;;;;;;;9490:4;9483:11;;9293:207:::0;;;;;:::o;7778:145::-;7862:12;4451;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7890:7:::1;7883:4;:14;;;;;;;;;;;;:::i;:::-;;7913:4;7906:11;;7778:145:::0;;;:::o;7329:129::-;7401:21;7438:14;;;;;;;;;;;7431:21;;7329:129;:::o;3956:72::-;3993:7;4016:6;;;;;;;;;;;4009:13;;3956:72;:::o;4751:175::-;4171:12;:10;:12::i;:::-;4161:22;;:6;;;;;;;;;;;:22;;;4153:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4841:16:::1;;;;;;;;;;;4840:17;4832:26;;;::::0;::::1;;4882:8;4865:14;;:25;;;;;;;;;;;;;;;;;;4916:4;4897:16;;:23;;;;;;;;;;;;;;;;;;4751:175:::0;:::o;6025:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9756:1697::-;9899:12;9942;;;;;;;;;;;9928:26;;:10;:26;;;:60;;;;9981:7;:5;:7::i;:::-;9958:30;;9966:10;9958:30;;;9928:60;:97;;;;10015:10;:8;:10::i;:::-;9992:33;;10000:10;9992:33;;;9928:97;9920:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10203:9;10188:24;;:11;:24;;;;10180:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10339:1;10330:6;:10;10322:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10461:1;10440:23;;:9;:23;;;10436:938;;;10507:6;10482:8;:21;10491:11;10482:21;;;;;;;;;;;;;;;;:31;;10474:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10638:33;10664:6;10638:8;:21;10647:11;10638:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;10614:8;:21;10623:11;10614:21;;;;;;;;;;;;;;;:57;;;;10697:26;10716:6;10697:14;;:18;;:26;;;;:::i;:::-;10680:14;:43;;;;10736:27;10732:93;;;10791:24;10808:6;10791:12;;:16;;:24;;;;:::i;:::-;10776:12;:39;;;;10732:93;10436:938;;;10865:1;10842:25;;:11;:25;;;10838:536;;;10900:31;10924:6;10900:8;:19;10909:9;10900:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;10878:8;:19;10887:9;10878:19;;;;;;;;;;;;;;;:53;;;;10957:26;10976:6;10957:14;;:18;;:26;;;;:::i;:::-;10940:14;:43;;;;10996:27;10992:93;;;11051:24;11068:6;11051:12;;:16;;:24;;;;:::i;:::-;11036:12;:39;;;;10992:93;10838:536;;;11140:6;11115:8;:21;11124:11;11115:21;;;;;;;;;;;;;;;;:31;;11107:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11271:33;11297:6;11271:8;:21;11280:11;11271:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;11247:8;:21;11256:11;11247:21;;;;;;;;;;;;;;;:57;;;;11335:31;11359:6;11335:8;:19;11344:9;11335:19;;;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;11313:8;:19;11322:9;11313:19;;;;;;;;;;;;;;;:53;;;;10838:536;10436:938;11409:9;11387:40;;11396:11;11387:40;;;11420:6;11387:40;;;;;;;;;;;;;;;;;;11443:4;11436:11;;9756:1697;;;;;;:::o;15921:792::-;16024:12;16064:10;16053:21;;:7;:21;;;;16045:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16231:1;16209:24;;:10;:24;;;;16201:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16386:1;16367:21;;:7;:21;;;;16359:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16515:29;;:::i;:::-;:53;;;;;;;;16548:10;16515:53;;;;;;;;16560:7;16515:53;;;;;;;;;16575:22;;:::i;:::-;:45;;;;;;;;16601:15;16575:45;;;;16618:1;16575:45;;;;;16627:6;;;;;;;;;;;:17;;;16666:11;16679:7;16627:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16703:4;16696:11;;;;15921:792;;;;:::o;5955:29::-;;;;:::o;12554:817::-;12641:12;12683:10;12670:23;;:9;:23;;;;12662:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12829:1;12807:24;;:10;:24;;;;12799:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12952:8;:20;12961:10;12952:20;;;;;;;;;;;;;;;;12942:6;:30;;12934:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13085:1;13076:6;:10;13068:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13189:29;;:::i;:::-;:55;;;;;;;;13222:10;13189:55;;;;;;;;13234:9;13189:55;;;;;;;;;13251:22;;:::i;:::-;:36;;;;;;;;13277:6;13251:36;;;;13285:1;13251:36;;;;;13294:6;;;;;;;;;;;:17;;;13324:11;13337:7;13294:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13361:4;13354:11;;;;12554:817;;;;:::o;8778:435::-;8855:12;8898;;;;;;;;;;;8884:26;;:10;:26;;;:60;;;;8937:7;:5;:7::i;:::-;8914:30;;8922:10;8914:30;;;8884:60;:97;;;;8971:10;:8;:10::i;:::-;8948:33;;8956:10;8948:33;;;8884:97;8876:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9147:9;9130:14;:26;;;;9178:9;9163:12;:24;;;;9203:4;9196:11;;8778:435;;;:::o;7464:125::-;7534:21;7571:12;;;;;;;;;;;7564:19;;7464:125;:::o;7173:150::-;7263:12;7291:10;:17;7302:5;7291:17;;;;;;;;;;;;;;;:26;7309:7;7291:26;;;;;;;;;;;;;;;;7284:33;;7173:150;;;;:::o;5735:27::-;;;;;;;;;;;;:::o;9548:182::-;9649:12;4286;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9698:6:::1;9672:8;:23;9681:13;9672:23;;;;;;;;;;;;;;;:32;;;;9720:4;9713:11;;9548:182:::0;;;;:::o;7619:153::-;7707:12;4451;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7737:9:::1;7728:6;:18;;;;;;;;;;;;:::i;:::-;;7762:4;7755:11;;7619:153:::0;;;:::o;4932:230::-;4286:12;:10;:12::i;:::-;4276:22;;:6;;;;;;;;;;;:22;;;:56;;;;4320:12;:10;:12::i;:::-;4302:30;;:14;;;;;;;;;;;:30;;;4276:56;4268:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5037:1:::1;5017:22;;:8;:22;;;;5009:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5123:8;5094:38;;5115:6;;;;;;;;;;;5094:38;;;;;;;;;;;;5148:8;5139:6;;:17;;;;;;;;;;;;;;;;;;4932:230:::0;:::o;5168:205::-;4451:12;:10;:12::i;:::-;4433:30;;:14;;;;;;;;;;;:30;;;4425:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5290:1:::1;5270:22;;:8;:22;;;;5262:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5359:8;5342:14;;:25;;;;;;;;;;;;;;;;;;5168:205:::0;:::o;1103:99::-;1155:15;1186:10;1179:17;;1103:99;:::o;4034:85::-;4076:7;4099:14;;;;;;;;;;;4092:21;;4034:85;:::o;524:129::-;581:7;604:43;608:1;611;604:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;597:50;;524:129;;;;:::o;352:166::-;409:7;425:9;441:1;437;:5;425:17;;462:1;457;:6;;449:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;511:1;504:8;;;352:166;;;;:::o;659:177::-;744:7;773:1;768;:6;;776:12;760:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;796:9;812:1;808;:5;796:17;;829:1;822:8;;;659:177;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://1e6cb1f58911c4fd84e7a88c842bb8f5607a72d449ce5a41d17561aec2f58be0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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