Token migration announcement. shuffle.monster token V2 token contract has migrated to a new address.
Overview
Max Total Supply
992,089.759517068352451963 SHUF
Holders
2,243 (0.00%)
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
4,543.882884489658306507 SHUFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
ShuffleToken
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-08-05
*/
/**
*Submitted for verification at Etherscan.io on 2019-07-21
*/
// File: contracts/commons/Ownable.sol
pragma solidity ^0.5.10;
contract Ownable {
address public owner;
event TransferOwnership(address _from, address _to);
constructor() public {
owner = msg.sender;
emit TransferOwnership(address(0), msg.sender);
}
modifier onlyOwner() {
require(msg.sender == owner, "only owner");
_;
}
function setOwner(address _owner) external onlyOwner {
emit TransferOwnership(owner, _owner);
owner = _owner;
}
}
// File: contracts/commons/AddressMinHeap.sol
pragma solidity ^0.5.10;
/*
@author Agustin Aguilar <agusxrun@gmail.com>
*/
library AddressMinHeap {
using AddressMinHeap for AddressMinHeap.Heap;
struct Heap {
uint256[] entries;
mapping(address => uint256) index;
}
function initialize(Heap storage _heap) internal {
require(_heap.entries.length == 0, "already initialized");
_heap.entries.push(0);
}
function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
/* solium-disable-next-line */
assembly {
_entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
}
}
function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
/* solium-disable-next-line */
assembly {
let entry := not(_entry)
_addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff)
_value := shr(160, entry)
}
}
function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
/* solium-disable-next-line */
assembly {
_addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
}
}
function top(Heap storage _heap) internal view returns(address, uint256) {
if (_heap.entries.length < 2) {
return (address(0), 0);
}
return decode(_heap.entries[1]);
}
function has(Heap storage _heap, address _addr) internal view returns (bool) {
return _heap.index[_addr] != 0;
}
function size(Heap storage _heap) internal view returns (uint256) {
return _heap.entries.length - 1;
}
function entry(Heap storage _heap, uint256 _i) internal view returns (address, uint256) {
return decode(_heap.entries[_i + 1]);
}
// RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap
function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) {
// Ensure the heap exists
uint256 heapLength = _heap.entries.length;
require(heapLength > 1, "The heap does not exists");
// take the root value of the heap
(_addr, _value) = decode(_heap.entries[1]);
_heap.index[_addr] = 0;
if (heapLength == 2) {
_heap.entries.length = 1;
} else {
// Takes the last element of the array and put it at the root
uint256 val = _heap.entries[heapLength - 1];
_heap.entries[1] = val;
// Delete the last element from the array
_heap.entries.length = heapLength - 1;
// Start at the top
uint256 ind = 1;
// Bubble down
ind = _heap.bubbleDown(ind, val);
// Update index
_heap.index[decodeAddress(val)] = ind;
}
}
// Inserts adds in a value to our heap.
function insert(Heap storage _heap, address _addr, uint256 _value) internal {
require(_heap.index[_addr] == 0, "The entry already exists");
// Add the value to the end of our array
uint256 encoded = encode(_addr, _value);
_heap.entries.push(encoded);
// Start at the end of the array
uint256 currentIndex = _heap.entries.length - 1;
// Bubble Up
currentIndex = _heap.bubbleUp(currentIndex, encoded);
// Update index
_heap.index[_addr] = currentIndex;
}
function update(Heap storage _heap, address _addr, uint256 _value) internal {
uint256 ind = _heap.index[_addr];
require(ind != 0, "The entry does not exists");
uint256 can = encode(_addr, _value);
uint256 val = _heap.entries[ind];
uint256 newInd;
if (can < val) {
// Bubble down
newInd = _heap.bubbleDown(ind, can);
} else if (can > val) {
// Bubble up
newInd = _heap.bubbleUp(ind, can);
} else {
// no changes needed
return;
}
// Update entry
_heap.entries[newInd] = can;
// Update index
if (newInd != ind) {
_heap.index[_addr] = newInd;
}
}
function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble up
ind = _ind;
if (ind != 1) {
uint256 parent = _heap.entries[ind / 2];
while (parent < _val) {
// If the parent value is lower than our current value, we swap them
(_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent);
// Update moved Index
_heap.index[decodeAddress(parent)] = ind;
// change our current Index to go up to the parent
ind = ind / 2;
if (ind == 1) {
break;
}
// Update parent
parent = _heap.entries[ind / 2];
}
}
}
function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
// Bubble down
ind = _ind;
uint256 lenght = _heap.entries.length;
uint256 target = lenght - 1;
while (ind * 2 < lenght) {
// get the current index of the children
uint256 j = ind * 2;
// left child value
uint256 leftChild = _heap.entries[j];
// Store the value of the child
uint256 childValue;
if (target > j) {
// The parent has two childs 👨👧👦
// Load right child value
uint256 rightChild = _heap.entries[j + 1];
// Compare the left and right child.
// if the rightChild is greater, then point j to it's index
// and save the value
if (leftChild < rightChild) {
childValue = rightChild;
j = j + 1;
} else {
// The left child is greater
childValue = leftChild;
}
} else {
// The parent has a single child 👨👦
childValue = leftChild;
}
// Check if the child has a lower value
if (_val > childValue) {
break;
}
// else swap the value
(_heap.entries[ind], _heap.entries[j]) = (childValue, _val);
// Update moved Index
_heap.index[decodeAddress(childValue)] = ind;
// and let's keep going down the heap
ind = j;
}
}
}
// File: contracts/commons/StorageUnit.sol
pragma solidity ^0.5.10;
contract StorageUnit {
address private owner;
mapping(bytes32 => bytes32) private store;
constructor() public {
owner = msg.sender;
}
function write(bytes32 _key, bytes32 _value) external {
/* solium-disable-next-line */
require(msg.sender == owner);
store[_key] = _value;
}
function read(bytes32 _key) external view returns (bytes32) {
return store[_key];
}
}
// File: contracts/utils/IsContract.sol
pragma solidity ^0.5.10;
library IsContract {
function isContract(address _addr) internal view returns (bool) {
bytes32 codehash;
/* solium-disable-next-line */
assembly { codehash := extcodehash(_addr) }
return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
}
}
// File: contracts/utils/DistributedStorage.sol
pragma solidity ^0.5.10;
library DistributedStorage {
function contractSlot(bytes32 _key) private view returns (address) {
return address(
uint256(
keccak256(
abi.encodePacked(
byte(0xff),
address(this),
_key,
keccak256(type(StorageUnit).creationCode)
)
)
)
);
}
function deploy(bytes32 _key) private {
bytes memory slotcode = type(StorageUnit).creationCode;
/* solium-disable-next-line */
assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _key)) }
}
function write(
bytes32 _struct,
bytes32 _key,
bytes32 _value
) internal {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
deploy(_struct);
}
/* solium-disable-next-line */
(bool success, ) = address(store).call(
abi.encodeWithSelector(
store.write.selector,
_key,
_value
)
);
require(success, "error writing storage");
}
function read(
bytes32 _struct,
bytes32 _key
) internal view returns (bytes32) {
StorageUnit store = StorageUnit(contractSlot(_struct));
if (!IsContract.isContract(address(store))) {
return bytes32(0);
}
/* solium-disable-next-line */
(bool success, bytes memory data) = address(store).staticcall(
abi.encodeWithSelector(
store.read.selector,
_key
)
);
require(success, "error reading storage");
return abi.decode(data, (bytes32));
}
}
// File: contracts/utils/SafeMath.sol
pragma solidity ^0.5.10;
library SafeMath {
function add(uint256 x, uint256 y) internal pure returns (uint256) {
uint256 z = x + y;
require(z >= x, "Add overflow");
return z;
}
function sub(uint256 x, uint256 y) internal pure returns (uint256) {
require(x >= y, "Sub underflow");
return x - y;
}
function mult(uint256 x, uint256 y) internal pure returns (uint256) {
if (x == 0) {
return 0;
}
uint256 z = x * y;
require(z / x == y, "Mult overflow");
return z;
}
function div(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
return x / y;
}
function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
require(y != 0, "Div by zero");
uint256 r = x / y;
if (x % y != 0) {
r = r + 1;
}
return r;
}
}
// File: contracts/utils/Math.sol
pragma solidity ^0.5.10;
library Math {
function orderOfMagnitude(uint256 input) internal pure returns (uint256){
uint256 counter = uint(-1);
uint256 temp = input;
do {
temp /= 10;
counter++;
} while (temp != 0);
return counter;
}
function min(uint256 _a, uint256 _b) internal pure returns (uint256) {
if (_a < _b) {
return _a;
} else {
return _b;
}
}
}
// File: contracts/utils/GasPump.sol
pragma solidity ^0.5.10;
contract GasPump {
bytes32 private stub;
modifier requestGas(uint256 _factor) {
if (tx.gasprice == 0) {
uint256 startgas = gasleft();
_;
uint256 delta = startgas - gasleft();
uint256 target = (delta * _factor) / 100;
startgas = gasleft();
while (startgas - gasleft() < target) {
// Burn gas
stub = keccak256(abi.encodePacked(stub));
}
} else {
_;
}
}
}
// File: contracts/interfaces/IERC20.sol
pragma solidity ^0.5.10;
interface IERC20 {
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function transfer(address _to, uint _value) external returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
function allowance(address _owner, address _spender) external view returns (uint256 remaining);
function approve(address _spender, uint256 _value) external returns (bool success);
function balanceOf(address _owner) external view returns (uint256 balance);
}
// File: contracts/ShuffleToken.sol
pragma solidity ^0.5.10;
contract ShuffleToken is Ownable, GasPump, IERC20 {
using AddressMinHeap for AddressMinHeap.Heap;
using DistributedStorage for bytes32;
using SafeMath for uint256;
// Shuffle events
event Winner(address indexed _addr, uint256 _value);
// Heap events
event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
// Managment events
event SetName(string _prev, string _new);
event SetExtraGas(uint256 _prev, uint256 _new);
event WhitelistFrom(address _addr, bool _whitelisted);
event WhitelistTo(address _addr, bool _whitelisted);
uint256 public totalSupply;
bytes32 private constant BALANCE_KEY = keccak256("balance");
bytes32 private constant NONCE_KEY = keccak256("nonce");
// game
uint256 public constant FEE = 100;
uint256 public constant TOP_SIZE = 512;
// heap
AddressMinHeap.Heap private heap;
// metadata
string public name = "shuffle.monster token V2";
string public constant symbol = "SHUF";
uint8 public constant decimals = 18;
// fee whitelist
mapping(address => bool) public whitelistFrom;
mapping(address => bool) public whitelistTo;
// internal
uint256 public extraGas;
bool inited;
function init(
address _to,
uint256 _amount
) external {
require(!inited);
inited = true;
heap.initialize();
extraGas = 15;
emit SetExtraGas(0, extraGas);
emit Transfer(address(0), _to, _amount);
_setBalance(_to, _amount);
totalSupply = _amount;
}
///
// Storage access functions
///
function _toKey(address a) internal pure returns (bytes32) {
return bytes32(uint256(a));
}
function _balanceOf(address _addr) internal view returns (uint256) {
return uint256(_toKey(_addr).read(BALANCE_KEY));
}
function _allowance(address _addr, address _spender) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
}
function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
}
function _setAllowance(address _addr, address _spender, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
}
function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
_toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
}
function _setBalance(address _addr, uint256 _balance) internal {
_toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
_computeHeap(_addr, _balance);
}
function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
return _nonce(_addr, _cat);
}
///
// Internal methods
///
function _isWhitelisted(address _from, address _to) internal view returns (bool) {
return whitelistFrom[_from]||whitelistTo[_to];
}
function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
return rand % (_max + 1);
}
function _pickWinner(address _from, uint256 _value) internal returns (address winner) {
// Get order of magnitude of the tx
uint256 magnitude = Math.orderOfMagnitude(_value);
// Pull nonce for a given order of magnitude
uint256 nonce = _nonce(_from, magnitude);
_setNonce(_from, magnitude, nonce + 1);
// pick entry from heap
(winner,) = heap.entry(_random(_from, nonce, magnitude, heap.size() - 1));
}
function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _skipWhitelist) internal {
if (_value == 0) {
emit Transfer(_from, _to, 0);
return;
}
uint256 balanceFrom = _balanceOf(_from);
require(balanceFrom >= _value, "balance not enough");
if (_from != _operator) {
uint256 allowanceFrom = _allowance(_from, _operator);
if (allowanceFrom != uint(-1)) {
require(allowanceFrom >= _value, "allowance not enough");
_setAllowance(_from, _operator, allowanceFrom.sub(_value));
}
}
uint256 receive = _value;
_setBalance(_from, balanceFrom.sub(_value));
if (_skipWhitelist || !_isWhitelisted(_from, _to)) {
uint256 burn = _value.divRound(FEE);
uint256 shuf = _value == 1 ? 0 : burn;
receive = receive.sub(burn.add(shuf));
// Burn tokens
totalSupply = totalSupply.sub(burn);
emit Transfer(_from, address(0), burn);
// Shuffle tokens
// Pick winner pseudo-randomly
address winner = _pickWinner(_from, _value);
// Transfer balance to winner
_setBalance(winner, _balanceOf(winner).add(shuf));
emit Winner(winner, shuf);
emit Transfer(_from, winner, shuf);
}
// Transfer tokens
_setBalance(_to, _balanceOf(_to).add(receive));
emit Transfer(_from, _to, receive);
}
function _computeHeap(address _addr, uint256 _new) internal {
uint256 size = heap.size();
if (size == 0) {
emit JoinHeap(_addr, _new, 0);
heap.insert(_addr, _new);
return;
}
(, uint256 lastBal) = heap.top();
if (heap.has(_addr)) {
heap.update(_addr, _new);
if (_new == 0) {
heap.popTop();
emit LeaveHeap(_addr, 0, size);
}
} else {
// IF heap is full or new bal is better than pop heap
if (_new != 0 && (size < TOP_SIZE || lastBal < _new)) {
// If heap is full pop heap
if (size >= TOP_SIZE) {
(address _poped, uint256 _balance) = heap.popTop();
emit LeaveHeap(_poped, _balance, size);
}
// Insert new value
heap.insert(_addr, _new);
emit JoinHeap(_addr, _new, size);
}
}
}
///
// Managment
///
function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistTo(_addr, _whitelisted);
whitelistTo[_addr] = _whitelisted;
}
function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner {
emit WhitelistFrom(_addr, _whitelisted);
whitelistFrom[_addr] = _whitelisted;
}
function setName(string calldata _name) external onlyOwner {
emit SetName(name, _name);
name = _name;
}
function setExtraGas(uint256 _gas) external onlyOwner {
emit SetExtraGas(extraGas, _gas);
extraGas = _gas;
}
/////
// Heap methods
/////
function heapSize() external view returns (uint256) {
return heap.size();
}
function heapEntry(uint256 _i) external view returns (address, uint256) {
return heap.entry(_i);
}
function heapTop() external view returns (address, uint256) {
return heap.top();
}
function heapIndex(address _addr) external view returns (uint256) {
return heap.index[_addr];
}
/////
// ERC20
/////
function balanceOf(address _addr) external view returns (uint256) {
return _balanceOf(_addr);
}
function allowance(address _addr, address _spender) external view returns (uint256) {
return _allowance(_addr, _spender);
}
function approve(address _spender, uint256 _value) external returns (bool) {
emit Approval(msg.sender, _spender, _value);
_setAllowance(msg.sender, _spender, _value);
return true;
}
function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, msg.sender, _to, _value, false);
return true;
}
function transferWithFee(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, msg.sender, _to, _value, true);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
_transferFrom(msg.sender, _from, _to, _value, false);
return true;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_i","type":"uint256"}],"name":"heapEntry","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistTo","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOP_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapTop","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"heapIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"JoinHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"LeaveHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"string"},{"indexed":false,"name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"}]Contract Creation Code
60c0604052601860808190527f73687566666c652e6d6f6e7374657220746f6b656e205632000000000000000060a090815262000040916005919062000096565b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a16200013b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000d957805160ff191683800117855562000109565b8280016001018555821562000109579182015b8281111562000109578251825591602001919060010190620000ec565b50620001179291506200011b565b5090565b6200013891905b8082111562000117576000815560010162000122565b90565b6122a0806200014b6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80634849f5c8116100f9578063a9059cbb11610097578063c57981b511610071578063c57981b514610588578063dd62ed3e14610590578063fa7e8dc7146105be578063ff12bbf4146105c6576101a9565b8063a9059cbb146104c6578063b00cf049146104f2578063c47f002714610518576101a9565b80638cec9993116100d35780638cec99931461044f5780638da5cb5b1461046c57806395d89b4114610490578063a486309d14610498576101a9565b80634849f5c8146103f557806370a08231146103fd5780638953580314610423576101a9565b806318160ddd1161016657806331fb71271161014057806331fb7127146103935780633767e3391461039b578063399ae724146103a357806343684b21146103cf576101a9565b806318160ddd1461032557806323b872dd1461033f578063313ce56714610375576101a9565b806306fdde03146101ae57806308acece21461022b57806308eaae4d1461026b578063095ea7b3146102ab57806313af4035146102d757806316b627d1146102ff575b600080fd5b6101b66105f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b038135169060200135610682565b604080519115158252519081900360200190f35b6102886004803603602081101561028157600080fd5b5035610710565b604080516001600160a01b03909316835260208301919091528051918290030190f35b610257600480360360408110156102c157600080fd5b506001600160a01b03813516906020013561072e565b6102fd600480360360208110156102ed57600080fd5b50356001600160a01b0316610787565b005b6102576004803603602081101561031557600080fd5b50356001600160a01b031661083d565b61032d610852565b60408051918252519081900360200190f35b6102576004803603606081101561035557600080fd5b506001600160a01b03813581169160208101359091169060400135610858565b61037d6108e7565b6040805160ff9092168252519081900360200190f35b61032d6108ec565b61032d6108f2565b6102fd600480360360408110156103b957600080fd5b506001600160a01b0381351690602001356108f8565b610257600480360360208110156103e557600080fd5b50356001600160a01b03166109a1565b6102886109b6565b61032d6004803603602081101561041357600080fd5b50356001600160a01b03166109cb565b61032d6004803603604081101561043957600080fd5b506001600160a01b0381351690602001356109d6565b6102fd6004803603602081101561046557600080fd5b50356109e9565b610474610a77565b604080516001600160a01b039092168252519081900360200190f35b6101b6610a86565b6102fd600480360360408110156104ae57600080fd5b506001600160a01b0381351690602001351515610aa6565b610257600480360360408110156104dc57600080fd5b506001600160a01b038135169060200135610b62565b61032d6004803603602081101561050857600080fd5b50356001600160a01b0316610b91565b6102fd6004803603602081101561052e57600080fd5b81019060208101813564010000000081111561054957600080fd5b82018360208201111561055b57600080fd5b8035906020019184600183028401116401000000008311171561057d57600080fd5b509092509050610bac565b61032d610ce7565b61032d600480360360408110156105a657600080fd5b506001600160a01b0381358116916020013516610cec565b61032d610cf8565b6102fd600480360360408110156105dc57600080fd5b506001600160a01b0381351690602001351515610d0a565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505081565b60006008543a600014156106f65760005a90506106a3333387876001610dc6565b6001925060005a820390506064838202045a92505b805a840310156106ee576001805460408051602080820193909352815180820384018152908201909152805191012090556106b8565b505050610709565b610704333386866001610dc6565b600191505b5092915050565b60008061072460038463ffffffff6110b816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a361077d3384846110eb565b5060015b92915050565b6000546001600160a01b031633146107d3576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156108cc5760005a9050610879338787876000610dc6565b6001925060005a820390506064838202045a92505b805a840310156108c45760018054604080516020808201939093528151808203840181529082019091528051910120905561088e565b5050506108df565b6108da338686866000610dc6565b600191505b509392505050565b601281565b61020081565b60085481565b60095460ff161561090857600080fd5b6009805460ff1916600117905561091f600361114b565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602061224c8339815191529181900360200190a361099b82826111aa565b60025550565b60066020526000908152604090205460ff1681565b6000806109c360036111e2565b915091509091565b60006107818261120f565b60006109e28383611247565b9392505050565b6000546001600160a01b03163314610a35576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329a42aa360e11b81525081565b6000546001600160a01b03163314610af2576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610b835760005a90506106a3333387876000610dc6565b610704333386866000610dc6565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610ca05780601f10610c7557610100808354040283529160200191610ca0565b820191906000526020600020905b815481529060010190602001808311610c8357829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610ce260058383612061565b505050565b606481565b60006109e2838361128c565b6000610d0460036112ea565b90505b90565b6000546001600160a01b03163314610d56576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b81610e0a57826001600160a01b0316846001600160a01b031660008051602061224c83398151915260006040518082815260200191505060405180910390a36110b1565b6000610e158561120f565b905082811015610e61576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b031614610ef9576000610e86868861128c565b90506000198114610ef75783811015610edd576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610ef78688610ef2848863ffffffff6112f216565b6110eb565b505b82610f1386610f0e848463ffffffff6112f216565b6111aa565b8280610f265750610f24868661133f565b155b15611064576000610f3e85606463ffffffff61138216565b9050600085600114610f505781610f53565b60005b9050610f75610f68838363ffffffff6113eb16565b849063ffffffff6112f216565b600254909350610f8b908363ffffffff6112f216565b6002556040805183815290516000916001600160a01b038b169160008051602061224c8339815191529181900360200190a36000610fc98988611434565b9050610fe881610f0e84610fdc8561120f565b9063ffffffff6113eb16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602061224c833981519152846040518082815260200191505060405180910390a35050505b61107585610f0e83610fdc8961120f565b846001600160a01b0316866001600160a01b031660008051602061224c833981519152836040518082815260200191505060405180910390a350505b5050505050565b6000806110e08460000184600101815481106110d057fe5b9060005260206000200154611491565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610ce2908261113e866114a6565b919063ffffffff6114b216565b805415611195576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080516662616c616e636560c81b815290519081900360070190206111d4908261113e856114a6565b6111de8282611602565b5050565b80546000908190600211156111fc57506000905080610729565b610724836000016001815481106110d057fe5b604080516662616c616e636560c81b815290519081900360070190206000906107819061123b846114a6565b9063ffffffff6117e316565b60006109e2826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061123b856114a6565b60006109e282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061123b856114a6565b546000190190565b600081831015611339576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806109e25750506001600160a01b031660009081526007602052604090205460ff16919050565b6000816113c4576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b60008284816113cf57fe5b0490508284816113db57fe5b06156109e2576001019392505050565b6000828201838110156109e2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b60008061144083611952565b9050600061144e8583611247565b905061145e858383600101611970565b611487611479868385600161147360036112ea565b036119b7565b60039063ffffffff6110b816565b5095945050505050565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b60006114bd84611a13565b90506114c881611a9e565b6114d5576114d584611ad5565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061154d5780518252601f19909201916020918201910161152e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146115af576040519150601f19603f3d011682016040523d82523d6000602084013e6115b4565b606091505b50509050806110b1576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b600061160e60036112ea565b90508061167057604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a261166a6003848463ffffffff611b0c16565b506111de565b600061167c60036111e2565b9150611691905060038563ffffffff611bd716565b15611703576116a86003858563ffffffff611bf816565b826116fe576116b76003611d1f565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6117dd565b821580159061171c575061020082108061171c57508281105b156117dd576102008210611787576000806117376003611d1f565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6117996003858563ffffffff611b0c16565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505050565b6000806117ef84611a13565b90506117fa81611a9e565b611808575060009050610781565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061187d5780518252601f19909201916020918201910161185e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146118dd576040519150601f19603f3d011682016040523d82523d6000602084013e6118e2565b606091505b509150915081611931576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561194657600080fd5b50519695505050505050565b6000600019825b60019190910190600a900480611959575092915050565b610ce2826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b61113e866114a6565b604080516001600160601b0319606087901b166020808301919091526034820186905260548083018690528351808403909101815260749092019092528051910120600090600183018181611a0857fe5b069695505050505050565b600060ff60f81b308360405180602001611a2c906120df565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906109e257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b606060405180602001611ae7906120df565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6001600160a01b038216600090815260018401602052604090205415611b79576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b6000611b858383611e5f565b845460018101865560008681526020902001819055845490915060001901611bb485828463ffffffff611e7316565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611c65576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611c718484611e5f565b90506000856000018381548110611c8457fe5b90600052602060002001549050600081831015611cb357611cac87858563ffffffff611f4116565b9050611cd5565b81831115611ccc57611cac87858563ffffffff611e7316565b50505050610ce2565b82876000018281548110611ce557fe5b600091825260209091200155808414611d16576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611d7b576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611d8e846000016001815481106110d057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611dc9576001611dc385826120ec565b50611e59565b6000846000016001830381548110611ddd57fe5b906000526020600020015490508085600001600181548110611dfb57fe5b6000918252602090912001556000198201611e1686826120ec565b506001611e2a86828463ffffffff611f4116565b905080866001016000611e3c85612054565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146109e2576000846002830481548110611e8d57fe5b906000526020600020015490505b828110156108df578281866002850481548110611eb457fe5b906000526020600020016000886000018681548110611ecf57fe5b6000918252602082200193909355509190915582906001870190611ef284612054565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611f20576108df565b846002830481548110611f2f57fe5b90600052602060002001549050611e9b565b8254829060001981015b8183600202101561204b5785546002840290600090889083908110611f6c57fe5b90600052602060002001549050600082841115611fc4576000896000018460010181548110611f9757fe5b9060005260206000200154905080831015611fba57809150836001019350611fbe565b8291505b50611fc7565b50805b80871115611fd75750505061204b565b80878a6000018881548110611fe857fe5b9060005260206000200160008c600001878154811061200357fe5b60009182526020822001939093555091909155869060018b019061202684612054565b6001600160a01b0316815260208101919091526040016000205550909350611f4b9050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120a25782800160ff198235161785556120cf565b828001600101855582156120cf579182015b828111156120cf5782358255916020019190600101906120b4565b506120db92915061210c565b5090565b6101258061212783390190565b815481835581811115610ce257600083815260209020610ce29181019083015b610d0791905b808211156120db576000815560010161211256fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7230582009d959deda1aaab903b1297659fa113ea55adcb7881dbcd3a51f90eafaa4b1fa64736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef602964736f6c634300050a0032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80634849f5c8116100f9578063a9059cbb11610097578063c57981b511610071578063c57981b514610588578063dd62ed3e14610590578063fa7e8dc7146105be578063ff12bbf4146105c6576101a9565b8063a9059cbb146104c6578063b00cf049146104f2578063c47f002714610518576101a9565b80638cec9993116100d35780638cec99931461044f5780638da5cb5b1461046c57806395d89b4114610490578063a486309d14610498576101a9565b80634849f5c8146103f557806370a08231146103fd5780638953580314610423576101a9565b806318160ddd1161016657806331fb71271161014057806331fb7127146103935780633767e3391461039b578063399ae724146103a357806343684b21146103cf576101a9565b806318160ddd1461032557806323b872dd1461033f578063313ce56714610375576101a9565b806306fdde03146101ae57806308acece21461022b57806308eaae4d1461026b578063095ea7b3146102ab57806313af4035146102d757806316b627d1146102ff575b600080fd5b6101b66105f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b038135169060200135610682565b604080519115158252519081900360200190f35b6102886004803603602081101561028157600080fd5b5035610710565b604080516001600160a01b03909316835260208301919091528051918290030190f35b610257600480360360408110156102c157600080fd5b506001600160a01b03813516906020013561072e565b6102fd600480360360208110156102ed57600080fd5b50356001600160a01b0316610787565b005b6102576004803603602081101561031557600080fd5b50356001600160a01b031661083d565b61032d610852565b60408051918252519081900360200190f35b6102576004803603606081101561035557600080fd5b506001600160a01b03813581169160208101359091169060400135610858565b61037d6108e7565b6040805160ff9092168252519081900360200190f35b61032d6108ec565b61032d6108f2565b6102fd600480360360408110156103b957600080fd5b506001600160a01b0381351690602001356108f8565b610257600480360360208110156103e557600080fd5b50356001600160a01b03166109a1565b6102886109b6565b61032d6004803603602081101561041357600080fd5b50356001600160a01b03166109cb565b61032d6004803603604081101561043957600080fd5b506001600160a01b0381351690602001356109d6565b6102fd6004803603602081101561046557600080fd5b50356109e9565b610474610a77565b604080516001600160a01b039092168252519081900360200190f35b6101b6610a86565b6102fd600480360360408110156104ae57600080fd5b506001600160a01b0381351690602001351515610aa6565b610257600480360360408110156104dc57600080fd5b506001600160a01b038135169060200135610b62565b61032d6004803603602081101561050857600080fd5b50356001600160a01b0316610b91565b6102fd6004803603602081101561052e57600080fd5b81019060208101813564010000000081111561054957600080fd5b82018360208201111561055b57600080fd5b8035906020019184600183028401116401000000008311171561057d57600080fd5b509092509050610bac565b61032d610ce7565b61032d600480360360408110156105a657600080fd5b506001600160a01b0381358116916020013516610cec565b61032d610cf8565b6102fd600480360360408110156105dc57600080fd5b506001600160a01b0381351690602001351515610d0a565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505081565b60006008543a600014156106f65760005a90506106a3333387876001610dc6565b6001925060005a820390506064838202045a92505b805a840310156106ee576001805460408051602080820193909352815180820384018152908201909152805191012090556106b8565b505050610709565b610704333386866001610dc6565b600191505b5092915050565b60008061072460038463ffffffff6110b816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a361077d3384846110eb565b5060015b92915050565b6000546001600160a01b031633146107d3576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156108cc5760005a9050610879338787876000610dc6565b6001925060005a820390506064838202045a92505b805a840310156108c45760018054604080516020808201939093528151808203840181529082019091528051910120905561088e565b5050506108df565b6108da338686866000610dc6565b600191505b509392505050565b601281565b61020081565b60085481565b60095460ff161561090857600080fd5b6009805460ff1916600117905561091f600361114b565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602061224c8339815191529181900360200190a361099b82826111aa565b60025550565b60066020526000908152604090205460ff1681565b6000806109c360036111e2565b915091509091565b60006107818261120f565b60006109e28383611247565b9392505050565b6000546001600160a01b03163314610a35576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329a42aa360e11b81525081565b6000546001600160a01b03163314610af2576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610b835760005a90506106a3333387876000610dc6565b610704333386866000610dc6565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610ca05780601f10610c7557610100808354040283529160200191610ca0565b820191906000526020600020905b815481529060010190602001808311610c8357829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610ce260058383612061565b505050565b606481565b60006109e2838361128c565b6000610d0460036112ea565b90505b90565b6000546001600160a01b03163314610d56576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b81610e0a57826001600160a01b0316846001600160a01b031660008051602061224c83398151915260006040518082815260200191505060405180910390a36110b1565b6000610e158561120f565b905082811015610e61576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b031614610ef9576000610e86868861128c565b90506000198114610ef75783811015610edd576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610ef78688610ef2848863ffffffff6112f216565b6110eb565b505b82610f1386610f0e848463ffffffff6112f216565b6111aa565b8280610f265750610f24868661133f565b155b15611064576000610f3e85606463ffffffff61138216565b9050600085600114610f505781610f53565b60005b9050610f75610f68838363ffffffff6113eb16565b849063ffffffff6112f216565b600254909350610f8b908363ffffffff6112f216565b6002556040805183815290516000916001600160a01b038b169160008051602061224c8339815191529181900360200190a36000610fc98988611434565b9050610fe881610f0e84610fdc8561120f565b9063ffffffff6113eb16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602061224c833981519152846040518082815260200191505060405180910390a35050505b61107585610f0e83610fdc8961120f565b846001600160a01b0316866001600160a01b031660008051602061224c833981519152836040518082815260200191505060405180910390a350505b5050505050565b6000806110e08460000184600101815481106110d057fe5b9060005260206000200154611491565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610ce2908261113e866114a6565b919063ffffffff6114b216565b805415611195576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080516662616c616e636560c81b815290519081900360070190206111d4908261113e856114a6565b6111de8282611602565b5050565b80546000908190600211156111fc57506000905080610729565b610724836000016001815481106110d057fe5b604080516662616c616e636560c81b815290519081900360070190206000906107819061123b846114a6565b9063ffffffff6117e316565b60006109e2826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061123b856114a6565b60006109e282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061123b856114a6565b546000190190565b600081831015611339576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806109e25750506001600160a01b031660009081526007602052604090205460ff16919050565b6000816113c4576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b60008284816113cf57fe5b0490508284816113db57fe5b06156109e2576001019392505050565b6000828201838110156109e2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b60008061144083611952565b9050600061144e8583611247565b905061145e858383600101611970565b611487611479868385600161147360036112ea565b036119b7565b60039063ffffffff6110b816565b5095945050505050565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b60006114bd84611a13565b90506114c881611a9e565b6114d5576114d584611ad5565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061154d5780518252601f19909201916020918201910161152e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146115af576040519150601f19603f3d011682016040523d82523d6000602084013e6115b4565b606091505b50509050806110b1576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b600061160e60036112ea565b90508061167057604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a261166a6003848463ffffffff611b0c16565b506111de565b600061167c60036111e2565b9150611691905060038563ffffffff611bd716565b15611703576116a86003858563ffffffff611bf816565b826116fe576116b76003611d1f565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6117dd565b821580159061171c575061020082108061171c57508281105b156117dd576102008210611787576000806117376003611d1f565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6117996003858563ffffffff611b0c16565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505050565b6000806117ef84611a13565b90506117fa81611a9e565b611808575060009050610781565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061187d5780518252601f19909201916020918201910161185e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146118dd576040519150601f19603f3d011682016040523d82523d6000602084013e6118e2565b606091505b509150915081611931576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561194657600080fd5b50519695505050505050565b6000600019825b60019190910190600a900480611959575092915050565b610ce2826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b61113e866114a6565b604080516001600160601b0319606087901b166020808301919091526034820186905260548083018690528351808403909101815260749092019092528051910120600090600183018181611a0857fe5b069695505050505050565b600060ff60f81b308360405180602001611a2c906120df565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906109e257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b606060405180602001611ae7906120df565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6001600160a01b038216600090815260018401602052604090205415611b79576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b6000611b858383611e5f565b845460018101865560008681526020902001819055845490915060001901611bb485828463ffffffff611e7316565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611c65576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611c718484611e5f565b90506000856000018381548110611c8457fe5b90600052602060002001549050600081831015611cb357611cac87858563ffffffff611f4116565b9050611cd5565b81831115611ccc57611cac87858563ffffffff611e7316565b50505050610ce2565b82876000018281548110611ce557fe5b600091825260209091200155808414611d16576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611d7b576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611d8e846000016001815481106110d057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611dc9576001611dc385826120ec565b50611e59565b6000846000016001830381548110611ddd57fe5b906000526020600020015490508085600001600181548110611dfb57fe5b6000918252602090912001556000198201611e1686826120ec565b506001611e2a86828463ffffffff611f4116565b905080866001016000611e3c85612054565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146109e2576000846002830481548110611e8d57fe5b906000526020600020015490505b828110156108df578281866002850481548110611eb457fe5b906000526020600020016000886000018681548110611ecf57fe5b6000918252602082200193909355509190915582906001870190611ef284612054565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611f20576108df565b846002830481548110611f2f57fe5b90600052602060002001549050611e9b565b8254829060001981015b8183600202101561204b5785546002840290600090889083908110611f6c57fe5b90600052602060002001549050600082841115611fc4576000896000018460010181548110611f9757fe5b9060005260206000200154905080831015611fba57809150836001019350611fbe565b8291505b50611fc7565b50805b80871115611fd75750505061204b565b80878a6000018881548110611fe857fe5b9060005260206000200160008c600001878154811061200357fe5b60009182526020822001939093555091909155869060018b019061202684612054565b6001600160a01b0316815260208101919091526040016000205550909350611f4b9050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120a25782800160ff198235161785556120cf565b828001600101855582156120cf579182015b828111156120cf5782358255916020019190600101906120b4565b506120db92915061210c565b5090565b6101258061212783390190565b815481835581811115610ce257600083815260209020610ce29181019083015b610d0791905b808211156120db576000815560010161211256fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7230582009d959deda1aaab903b1297659fa113ea55adcb7881dbcd3a51f90eafaa4b1fa64736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef602964736f6c634300050a0032
Deployed Bytecode Sourcemap
13609:8961:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13609:8961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14650:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14650:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22159:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22159:196:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21099:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21099:112:0;;:::i;:::-;;;;-1:-1:-1;;;;;21099:112:0;;;;;;;;;;;;;;;;;;;;;21740:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21740:213:0;;;;;;;;:::i;481:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;481:134:0;-1:-1:-1;;;;;481:134:0;;:::i;:::-;;14867:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14867:43:0;-1:-1:-1;;;;;14867:43:0;;:::i;14314:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;22363:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22363:204:0;;;;;;;;;;;;;;;;;:::i;14749:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14532:38;;;:::i;14936:23::-;;;:::i;14986:347::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14986:347:0;;;;;;;;:::i;14815:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14815:45:0;-1:-1:-1;;;;;14815:45:0;;:::i;21219:96::-;;;:::i;21478:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21478:109:0;-1:-1:-1;;;;;21478:109:0;;:::i;16584:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16584:124:0;;;;;;;;:::i;20818:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20818:131:0;;:::i;167:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;167:20:0;;;;;;;;;;;;;;14704:38;;;:::i;20304:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20304:179:0;;;;;;;;;;:::i;21961:190::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21961:190:0;;;;;;;;:::i;21323:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21323:109:0;-1:-1:-1;;;;;21323:109:0;;:::i;20684:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20684:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20684:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20684:126:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;20684:126:0;;-1:-1:-1;20684:126:0;-1:-1:-1;20684:126:0;:::i;14492:33::-;;;:::i;21595:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21595:137:0;;;;;;;;;;:::i;21002:89::-;;;:::i;20491:185::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20491:185:0;;;;;;;;;;:::i;14650:47::-;;;;;;;;;;;;;;;-1:-1:-1;;14650:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22159:196::-;22252:4;22233:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22269:56;22283:10;22295;22307:3;22312:6;22320:4;22269:13;:56::i;:::-;22343:4;22336:11;;12460:13;12487:9;12476:20;;;-1:-1:-1;12548:3:0;12529:15;;;12528:23;12577:9;12566:20;;12601:142;12631:6;12619:9;12608:8;:20;:29;12601:142;;;12721:4;;;12704:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12704:22:0;;;;;;12694:33;;;;;12687:40;;12601:142;;;12364:424;;;;;;22269:56;22283:10;22295;22307:3;22312:6;22320:4;22269:13;:56::i;:::-;22343:4;22336:11;;12775:1;22159:196;;;;;:::o;21099:112::-;21153:7;;21189:14;:4;21200:2;21189:14;:10;:14;:::i;:::-;21182:21;;;;21099:112;;;;:::o;21740:213::-;21831:38;;;;;;;;21809:4;;-1:-1:-1;;;;;21831:38:0;;;21840:10;;21831:38;;;;;;;;;;21880:43;21894:10;21906:8;21916:6;21880:13;:43::i;:::-;-1:-1:-1;21941:4:0;21740:213;;;;;:::o;481:134::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;568:5;;550:32;;;-1:-1:-1;;;;;568:5:0;;;550:32;;;;;;;;;;;;;;;;;;;;;593:5;:14;;-1:-1:-1;;;;;;593:14:0;-1:-1:-1;;;;;593:14:0;;;;;;;;;;481:134::o;14867:43::-;;;;;;;;;;;;;;;:::o;14314:26::-;;;;:::o;22363:204::-;22468:4;22449:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22485:52;22499:10;22511:5;22518:3;22523:6;22531:5;22485:13;:52::i;:::-;22555:4;22548:11;;12460:13;12487:9;12476:20;;;-1:-1:-1;12548:3:0;12529:15;;;12528:23;12577:9;12566:20;;12601:142;12631:6;12619:9;12608:8;:20;:29;12601:142;;;12721:4;;;12704:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12704:22:0;;;;;;12694:33;;;;;12687:40;;12601:142;;;12364:424;;;;;;22485:52;22499:10;22511:5;22518:3;22523:6;22531:5;22485:13;:52::i;:::-;22555:4;22548:11;;12775:1;22363:204;;;;;;:::o;14749:35::-;14782:2;14749:35;:::o;14532:38::-;14567:3;14532:38;:::o;14936:23::-;;;;:::o;14986:347::-;15084:6;;;;15083:7;15075:16;;;;;;15102:6;:13;;-1:-1:-1;;15102:13:0;15111:4;15102:13;;;15126:17;:4;:15;:17::i;:::-;15165:2;15154:8;:13;;;15183:24;;;15195:1;15183:24;;;;;;;;;;;;;;;;;;;;;15223:34;;;;;;;;-1:-1:-1;;;;;15223:34:0;;;15240:1;;-1:-1:-1;;;;;;;;;;;15223:34:0;;;;;;;;15268:25;15280:3;15285:7;15268:11;:25::i;:::-;15304:11;:21;-1:-1:-1;14986:347:0:o;14815:45::-;;;;;;;;;;;;;;;:::o;21219:96::-;21261:7;21270;21297:10;:4;:8;:10::i;:::-;21290:17;;;;21219:96;;:::o;21478:109::-;21535:7;21562:17;21573:5;21562:10;:17::i;16584:124::-;16654:7;16681:19;16688:5;16695:4;16681:6;:19::i;:::-;16674:26;16584:124;-1:-1:-1;;;16584:124:0:o;20818:131::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20900:8;;20888:27;;;;;;;;;;;;;;;;;;;;;;;;20926:8;:15;20818:131::o;167:20::-;;;-1:-1:-1;;;;;167:20:0;;:::o;14704:38::-;;;;;;;;;;;;;;-1:-1:-1;;;14704:38:0;;;;:::o;20304:179::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20399:32;;;-1:-1:-1;;;;;20399:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20442:18:0;;;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;20442:33:0;;;;;;;;;;20304:179::o;21961:190::-;22047:4;22028:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22064:57;22078:10;22090;22102:3;22107:6;22115:5;22064:13;:57::i;12364:424::-;22064:57;22078:10;22090;22102:3;22107:6;22115:5;22064:13;:57::i;21323:109::-;-1:-1:-1;;;;;21407:17:0;21380:7;21407:17;;;:10;:17;;;;;;;21323:109::o;20684:126::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20759:20;;;;;;20767:4;20759:20;;;-1:-1:-1;;20759:20:0;;;;;;;;;;;;;;;;;;;20767:4;;20773:5;;;;20759:20;;;;;;;;;;;20767:4;;20759:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20759:20:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;20759:20:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;20759:20:0;;;;-1:-1:-1;20759:20:0;;-1:-1:-1;;;;;;20759:20:0;20790:12;:4;20797:5;;20790:12;:::i;:::-;;20684:126;;:::o;14492:33::-;14522:3;14492:33;:::o;21595:137::-;21670:7;21697:27;21708:5;21715:8;21697:10;:27::i;21002:89::-;21045:7;21072:11;:4;:9;:11::i;:::-;21065:18;;21002:89;;:::o;20491:185::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20588:34;;;-1:-1:-1;;;;;20588:34:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20633:20:0;;;;;;;;:13;:20;;;;;:35;;-1:-1:-1;;20633:35:0;;;;;;;;;;20491:185::o;17622:1586::-;17753:11;17749:93;;17802:3;-1:-1:-1;;;;;17786:23:0;17795:5;-1:-1:-1;;;;;17786:23:0;-1:-1:-1;;;;;;;;;;;17807:1:0;17786:23;;;;;;;;;;;;;;;;;;17824:7;;17749:93;17854:19;17876:17;17887:5;17876:10;:17::i;:::-;17854:39;;17927:6;17912:11;:21;;17904:52;;;;;-1:-1:-1;;;17904:52:0;;;;;;;;;;;;-1:-1:-1;;;17904:52:0;;;;;;;;;;;;;;;17982:9;-1:-1:-1;;;;;17973:18:0;:5;-1:-1:-1;;;;;17973:18:0;;17969:316;;18008:21;18032:28;18043:5;18050:9;18032:10;:28::i;:::-;18008:52;;-1:-1:-1;;18079:13:0;:25;18075:199;;18150:6;18133:13;:23;;18125:56;;;;;-1:-1:-1;;;18125:56:0;;;;;;;;;;;;-1:-1:-1;;;18125:56:0;;;;;;;;;;;;;;;18200:58;18214:5;18221:9;18232:25;:13;18250:6;18232:25;:17;:25;:::i;:::-;18200:13;:58::i;:::-;17969:316;;18315:6;18332:43;18344:5;18351:23;:11;18315:6;18351:23;:15;:23;:::i;:::-;18332:11;:43::i;:::-;18392:14;:45;;;;18411:26;18426:5;18433:3;18411:14;:26::i;:::-;18410:27;18392:45;18388:681;;;18454:12;18469:20;:6;14522:3;18469:20;:15;:20;:::i;:::-;18454:35;;18504:12;18519:6;18529:1;18519:11;:22;;18537:4;18519:22;;;18533:1;18519:22;18504:37;-1:-1:-1;18566:27:0;18578:14;:4;18504:37;18578:14;:8;:14;:::i;:::-;18566:7;;:27;:11;:27;:::i;:::-;18652:11;;18556:37;;-1:-1:-1;18652:21:0;;18668:4;18652:21;:15;:21;:::i;:::-;18638:11;:35;18693:33;;;;;;;;18717:1;;-1:-1:-1;;;;;18693:33:0;;;-1:-1:-1;;;;;;;;;;;18693:33:0;;;;;;;;18818:14;18835:26;18847:5;18854:6;18835:11;:26::i;:::-;18818:43;;18919:49;18931:6;18939:28;18962:4;18939:18;18950:6;18939:10;:18::i;:::-;:22;:28;:22;:28;:::i;18919:49::-;18988:20;;;;;;;;-1:-1:-1;;;;;18988:20:0;;;;;;;;;;;;;19044:6;-1:-1:-1;;;;;19028:29:0;19037:5;-1:-1:-1;;;;;19028:29:0;-1:-1:-1;;;;;;;;;;;19052:4:0;19028:29;;;;;;;;;;;;;;;;;;18388:681;;;;19109:46;19121:3;19126:28;19146:7;19126:15;19137:3;19126:10;:15::i;19109:46::-;19187:3;-1:-1:-1;;;;;19171:29:0;19180:5;-1:-1:-1;;;;;19171:29:0;-1:-1:-1;;;;;;;;;;;19192:7:0;19171:29;;;;;;;;;;;;;;;;;;17622:1586;;;;;;;;:::o;2441:143::-;2511:7;2520;2547:29;2554:5;:13;;2568:2;2573:1;2568:6;2554:21;;;;;;;;;;;;;;;;2547:6;:29::i;:::-;2540:36;;;;2441:143;;;;;:::o;16027:188::-;16149:39;;;-1:-1:-1;;;16149:39:0;;;;;;;;-1:-1:-1;;;;;;16149:39:0;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;16149:39:0;;;;;;;16139:50;;;;;16119:88;;16199:6;16119:13;16126:5;16119:6;:13::i;:::-;:19;:88;;:19;:88;:::i;944:157::-;1012:20;;:25;1004:57;;;;;-1:-1:-1;;;1004:57:0;;;;;;;;;;;;-1:-1:-1;;;1004:57:0;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;1072:13:0;:21;;;;;;;;944:157::o;16403:173::-;14388:20;;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;;16477:51;;16518:8;16477:13;16484:5;16477:6;:13::i;:51::-;16539:29;16552:5;16559:8;16539:12;:29::i;:::-;16403:173;;:::o;1961:214::-;2049:20;;2016:7;;;;2072:1;-1:-1:-1;2045:79:0;;;-1:-1:-1;2106:1:0;;-1:-1:-1;2106:1:0;2090:22;;2045:79;2143:24;2150:5;:13;;2164:1;2150:16;;;;;;;15506:133;14388:20;;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;;15564:7;;15599:31;;:13;15606:5;15599:6;:13::i;:::-;:18;:31;:18;:31;:::i;15845:174::-;15913:7;15948:62;16003:4;15977:31;;;;;;-1:-1:-1;;;15977:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15977:31:0;;;15967:42;;;;;;15948:13;15955:5;15948:6;:13::i;15647:190::-;15723:7;15758:70;15817:8;15787:39;;;;;;-1:-1:-1;;;15787:39:0;;;;;;-1:-1:-1;;;;;15787:39:0;-1:-1:-1;;;;;15787:39:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15787:39:0;;;15777:50;;;;;;15758:13;15765:5;15758:6;:13::i;2317:116::-;2401:20;-1:-1:-1;;2401:24:0;;2317:116::o;10871:141::-;10929:7;10962:1;10957;:6;;10949:32;;;;;-1:-1:-1;;;10949:32:0;;;;;;;;;;;;-1:-1:-1;;;10949:32:0;;;;;;;;;;;;;;;-1:-1:-1;10999:5:0;;;10871:141::o;16761:145::-;-1:-1:-1;;;;;16860:20:0;;16836:4;16860:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16882:16:0;;;;;:11;:16;;;;;;;;;16761:145;-1:-1:-1;16761:145:0:o;11404:232::-;11467:7;11495:6;11487:30;;;;;-1:-1:-1;;;11487:30:0;;;;;;;;;;;;-1:-1:-1;;;11487:30:0;;;;;;;;;;;;;;;11528:9;11544:1;11540;:5;;;;;;11528:17;;11564:1;11560;:5;;;;;;:10;11556:52;;11595:1;11591:5;11627:1;11404:232;-1:-1:-1;;;11404:232:0:o;10699:164::-;10757:7;10789:5;;;10813:6;;;;10805:31;;;;;-1:-1:-1;;;10805:31:0;;;;;;;;;;;;-1:-1:-1;;;10805:31:0;;;;;;;;;;;;;;17144:470;17214:14;17286:17;17306:29;17328:6;17306:21;:29::i;:::-;17286:49;;17400:13;17416:24;17423:5;17430:9;17416:6;:24::i;:::-;17400:40;;17451:38;17461:5;17468:9;17479:5;17487:1;17479:9;17451;:38::i;:::-;17545:61;17556:49;17564:5;17571;17578:9;17603:1;17589:11;:4;:9;:11::i;:::-;:15;17556:7;:49::i;:::-;17545:4;;:61;:10;:61;:::i;:::-;-1:-1:-1;17533:73:0;17144:470;-1:-1:-1;;;;;17144:470:0:o;1387:319::-;1561:11;-1:-1:-1;;;;;1595:54:0;;;1677:3;1673:15;;;;;1533:166::o;15394:104::-;-1:-1:-1;;;;;15479:10:0;;15394:104::o;9410:569::-;9526:17;9558:21;9571:7;9558:12;:21::i;:::-;9526:54;;9596:37;9626:5;9596:21;:37::i;:::-;9591:86;;9650:15;9657:7;9650:6;:15::i;:::-;9782:124;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9782:124:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9748:169:0;;;;9730:12;;-1:-1:-1;;;;;9748:19:0;;;9782:124;9748:169;;;25:18:-1;9748:169:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9748:169:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9729:188:0;;;9938:7;9930:41;;;;;-1:-1:-1;;;9930:41:0;;;;;;;;;;;;-1:-1:-1;;;9930:41:0;;;;;;;;;;;;;;19216:1042;19287:12;19302:11;:4;:9;:11::i;:::-;19287:26;-1:-1:-1;19328:9:0;19324:131;;19359:24;;;;;;19381:1;19359:24;;;;;;-1:-1:-1;;;;;19359:24:0;;;;;;;;;;;19398;:4;19410:5;19417:4;19398:24;:11;:24;:::i;:::-;19437:7;;;19324:131;19470:15;19489:10;:4;:8;:10::i;:::-;19467:32;-1:-1:-1;19516:15:0;;-1:-1:-1;19516:4:0;19525:5;19516:15;:8;:15;:::i;:::-;19512:739;;;19548:24;:4;19560:5;19567:4;19548:24;:11;:24;:::i;:::-;19591:9;19587:112;;19621:13;:4;:11;:13::i;:::-;-1:-1:-1;;19658:25:0;;;19675:1;19658:25;;;;;;;;;;-1:-1:-1;;;;;19658:25:0;;;;;;;;;;;19587:112;19512:739;;;19802:9;;;;;:48;;;14567:3;19816:4;:15;:33;;;;19845:4;19835:7;:14;19816:33;19798:442;;;14567:3;19920:4;:16;19916:176;;19962:14;19978:16;19998:13;:4;:11;:13::i;:::-;19961:50;;;;20049:6;-1:-1:-1;;;;;20039:33:0;;20057:8;20067:4;20039:33;;;;;;;;;;;;;;;;;;;;;;;;19916:176;;;20149:24;:4;20161:5;20168:4;20149:24;:11;:24;:::i;:::-;20197:27;;;;;;;;;;;;;;-1:-1:-1;;;;;20197:27:0;;;;;;;;;;;19798:442;19216:1042;;;;:::o;9987:610::-;10080:7;10100:17;10132:21;10145:7;10132:12;:21::i;:::-;10100:54;;10170:37;10200:5;10170:21;:37::i;:::-;10165:88;;-1:-1:-1;10239:1:0;;-1:-1:-1;10224:17:0;;10165:88;10381:98;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10381:98:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10341:149:0;;;;10306:12;;10320:17;;-1:-1:-1;;;;;10341:25:0;;;10381:98;;10341:149;;;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10341:149:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10305:185:0;;;;10511:7;10503:41;;;;;-1:-1:-1;;;10503:41:0;;;;;;;;;;;;-1:-1:-1;;;10503:41:0;;;;;;;;;;;;;;;10573:4;10562:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10562:27:0;;9987:610;-1:-1:-1;;;;;;9987:610:0:o;11730:270::-;11794:7;-1:-1:-1;;11865:5:0;11883:83;11926:9;;;;;;11909:2;11901:10;;;11883:83;;-1:-1:-1;11985:7:0;11730:270;-1:-1:-1;;11730:270:0:o;16223:172::-;16307:80;16363:4;16337:31;;;;;;-1:-1:-1;;;16337:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16337:31:0;;;16327:42;;;;;;16379:6;16371:15;;16307:13;16314:5;16307:6;:13::i;16914:222::-;17060:31;;;-1:-1:-1;;;;;;17060:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17060:31:0;;;;;;;17050:42;;;;;17007:7;;17126:1;17119:8;;17050:42;17119:8;17111:17;;;;;;16914:222;-1:-1:-1;;;;;;16914:222:0:o;8729:433::-;8787:7;8942:4;8937:10;;8982:4;9014;9055:30;;;;;;;;:::i;:::-;21:26:-1;;;-1:-1;;21:26;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;9045:41:0;;41:4:-1;30:16;;;9045:41:0;-1:-1:-1;;;;;;8894:215:0;;;;;;;;;;;;;-1:-1:-1;;;;;;8894:215:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8894:215:0;;;;;;;8862:266;;;;;;8729:433;-1:-1:-1;;8729:433:0:o;8280:323::-;8338:4;8445:18;;8482:22;;;;;:113;;-1:-1:-1;8528:66:0;8508:87;;;8475:120;-1:-1:-1;;8280:323:0:o;9170:232::-;9219:21;9243:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;9243:30:0;9219:54;;9387:4;9376:8;9370:15;9363:4;9353:8;9349:19;9346:1;9338:54;9334:59;9332:63;;:::o;3729:555::-;-1:-1:-1;;;;;3824:18:0;;;;;;:11;;;:18;;;;;;:23;3816:60;;;;;-1:-1:-1;;;3816:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3939:15;3957:21;3964:5;3971:6;3957;:21::i;:::-;27:10:-1;;39:1;23:18;;45:23;;3989:13:0;:27;;;;;;;;;;4094:20;;3939:39;;-1:-1:-1;;;4094:24:0;4168:37;3989:5;4094:24;3939:39;4168:37;:14;:37;:::i;:::-;-1:-1:-1;;;;;4243:18:0;;;;;;;:11;;;;:18;;-1:-1:-1;;4243:18:0;;;;:33;-1:-1:-1;3729:555:0:o;2183:126::-;-1:-1:-1;;;;;2278:18:0;2254:4;2278:18;;;:11;;;;;:18;;;;;;:23;;;2183:126::o;4292:772::-;-1:-1:-1;;;;;4393:18:0;;4379:11;4393:18;;;:11;;;:18;;;;;;4430:8;4422:46;;;;;-1:-1:-1;;;4422:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4481:11;4495:21;4502:5;4509:6;4495;:21::i;:::-;4481:35;;4527:11;4541:5;:13;;4555:3;4541:18;;;;;;;;;;;;;;;;4527:32;;4570:14;4607:3;4601;:9;4597:285;;;4664:26;:5;4681:3;4686;4664:26;:16;:26;:::i;:::-;4655:35;;4597:285;;;4718:3;4712;:9;4708:174;;;4773:24;:5;4788:3;4793;4773:24;:14;:24;:::i;4708:174::-;4864:7;;;;;;4708:174;4943:3;4919:5;:13;;4933:6;4919:21;;;;;;;;;;;;;;;;;:27;4988:13;;;4984:73;;-1:-1:-1;;;;;5018:18:0;;;;;;:11;;;:18;;;;;:27;;;4984:73;4292:772;;;;;;;:::o;2697:979::-;2848:20;;2750:13;;;;2900:1;2887:14;;2879:51;;;;;-1:-1:-1;;;2879:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3005:24;3012:5;:13;;3026:1;3012:16;;;;;;;3005:24;-1:-1:-1;;;;;3040:18:0;;3061:1;3040:18;;;:11;;;:18;;;;;:22;2987:42;;-1:-1:-1;2987:42:0;-1:-1:-1;3093:1:0;3079:15;;3075:594;;;3134:1;3111:24;:5;3134:1;3111:24;:::i;:::-;;3075:594;;;3243:11;3257:5;:13;;3284:1;3271:10;:14;3257:29;;;;;;;;;;;;;;;;3243:43;;3320:3;3301:5;:13;;3315:1;3301:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;3418:14:0;;3395:37;:5;3418:14;3395:37;:::i;:::-;-1:-1:-1;3496:1:0;3548:26;:5;3496:1;3570:3;3548:26;:16;:26;:::i;:::-;3542:32;;3654:3;3620:5;:11;;:31;3632:18;3646:3;3632:13;:18::i;:::-;-1:-1:-1;;;;;3620:31:0;;;;;;;;;;;;-1:-1:-1;3620:31:0;:37;-1:-1:-1;;3075:594:0;2697:979;;;;:::o;1109:270::-;1347:3;1343:16;-1:-1:-1;;;;;1287:54:0;;;;1284:76;1280:81;;1255:117::o;5072:824::-;5208:4;5234:1;5227:8;;5223:666;;5252:14;5269:5;5289:1;5283:3;:7;5269:22;;;;;;;;;;;;;;;;5252:39;;5306:572;5322:4;5313:6;:13;5306:572;;;5481:4;5487:6;5434:5;5454:1;5448:3;:7;5434:22;;;;;;;;;;;;;;;;5458:5;:13;;5472:3;5458:18;;;;;;;;;;;;;;;;5433:61;;;;-1:-1:-1;5433:61:0;;;;5591:3;;5554:11;;;;5566:21;5580:6;5566:13;:21::i;:::-;-1:-1:-1;;;;;5554:34:0;;;;;;;;;;;;-1:-1:-1;5554:34:0;:40;5695:1;5689:3;:7;5683:13;;5719:3;5726:1;5719:8;5715:62;;;5752:5;;5715:62;5840:5;5860:1;5854:3;:7;5840:22;;;;;;;;;;;;;;;;5831:31;;5306:572;;5904:1738;6078:20;;6044:4;;-1:-1:-1;;6126:10:0;;6149:1486;6166:6;6156:3;6162:1;6156:7;:16;6149:1486;;;6332:16;;6261:1;6255:7;;;6243:9;;6332:5;;6255:7;;6332:16;;;;;;;;;;;;;;6312:36;;6410:18;6458:1;6449:6;:10;6445:764;;;6590:18;6611:5;:13;;6625:1;6629;6625:5;6611:20;;;;;;;;;;;;;;;;6590:41;;6838:10;6826:9;:22;6822:247;;;6886:10;6873:23;;6923:1;6927;6923:5;6919:9;;6822:247;;;7040:9;7027:22;;6822:247;6445:764;;;;-1:-1:-1;7184:9:0;6445:764;7289:10;7282:4;:17;7278:63;;;7320:5;;;;;7278:63;7435:10;7447:4;7394:5;:13;;7408:3;7394:18;;;;;;;;;;;;;;;;7414:5;:13;;7428:1;7414:16;;;;;;;;;;;;;;;;7393:59;;;;-1:-1:-1;7393:59:0;;;;7545:3;;7504:11;;;;7516:25;7530:10;7516:13;:25::i;:::-;-1:-1:-1;;;;;7504:38:0;;;;;;;;;;;;-1:-1:-1;7504:38:0;:44;-1:-1:-1;7622:1:0;;-1:-1:-1;6149:1486:0;;-1:-1:-1;6149:1486:0;;5904:1738;;;;;;;:::o;1714:239::-;1879:11;-1:-1:-1;;;;;1875:60:0;;1851:95::o;13609:8961::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13609:8961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13609:8961:0;;;-1:-1:-1;13609:8961:0;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef6029
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.
Add Token to MetaMask (Web3)