Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Source Code
Overview
Max Total Supply
1 TBX
Holders
1
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 TBXLoading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
TBoxManager
Compiler Version
v0.4.25+commit.59dbf8f1
Contract Source Code (Solidity Multiple files format)
pragma solidity 0.4.25;
import "./TBoxToken.sol";
import "./ISettings.sol";
import "./IToken.sol";
import "./IOracle.sol";
/// @title TBoxManager
contract TBoxManager is TBoxToken {
// Total packed Ether
uint256 public globalETH;
// Precision using for USD and commission
uint256 public precision = 100000;
// The address of the system settings contract
ISettings public settings;
/// @dev An array containing the Boxes struct for all Boxes in existence. The ID
/// of each Box is actually an index into this array.
Box[] public boxes;
/// @dev The main Box struct. Every Box in TimviSystem is represented by a copy
/// of this structure.
struct Box {
// The collateral Ether amount in wei
uint256 collateral;
// The number of TMV withdrawn
uint256 tmvReleased;
}
/// @dev The Created event is fired whenever a new Box comes into existence. This includes
/// any time a Box is created through the create method.
event Created(uint256 indexed id, address owner, uint256 collateral, uint256 tmvReleased);
/// @dev The Closed event is fired whenever a Box is closed. Obviously, this includes
/// any time a Box is closed through the close method, but it is also called when
// a Box is closed through the closeDust method.
event Closed(uint256 indexed id, address indexed owner, address indexed closer);
/// @dev The Capitalized event is fired whenever a Box is capitalized.
event Capitalized(uint256 indexed id, address indexed owner, address indexed who, uint256 tmvAmount, uint256 totalEth, uint256 userEth);
/// @dev The EthWithdrawn event is fired whenever Ether is withdrawn from a Box
/// using withdrawEth method.
event EthWithdrawn(uint256 indexed id, uint256 value, address who);
/// @dev The TmvWithdrawn event is fired whenever TMV is withdrawn from a Box
/// using withdrawTmv method.
event TmvWithdrawn(uint256 indexed id, uint256 value, address who);
/// @dev The EthAdded event is fired whenever Ether is added to a Box
/// using addEth method.
event EthAdded(uint256 indexed id, uint256 value, address who);
/// @dev The TmvAdded event is fired whenever TMV is added to a Box
/// using addTmv method.
event TmvAdded(uint256 indexed id, uint256 value, address who);
/// @dev Defends against front-running attacks.
modifier validTx() {
require(tx.gasprice <= settings.gasPriceLimit(), "Gas price is greater than allowed");
_;
}
/// @dev Throws if called by any account other than the owner.
modifier onlyAdmin() {
require(settings.isFeeManager(msg.sender), "You have no access");
_;
}
/// @dev Throws if Box with specified id does not exist.
modifier onlyExists(uint256 _id) {
require(_exists(_id), "Box does not exist");
_;
}
/// @dev Access modifier for token owner-only functionality.
modifier onlyApprovedOrOwner(uint256 _id) {
require(_isApprovedOrOwner(msg.sender, _id), "Box isn't your");
_;
}
/// @dev The constructor sets ERC721 token name and symbol.
/// @param _settings The address of the system settings contract.
constructor(address _settings) TBoxToken("TBoxToken", "TBX") public {
settings = ISettings(_settings);
}
/// @notice The funds are safe.
/// @dev Creates Box with max collateral percent.
function() external payable {
// Redirect to the create method with no tokens to withdraw
create(0);
}
/// @dev Withdraws system fee.
function withdrawFee(address _beneficiary) external onlyAdmin {
require(_beneficiary != address(0), "Zero address, be careful");
// Fee is the difference between the contract balance and
// amount of Ether used in the entire system collateralization
uint256 _fees = address(this).balance.sub(globalETH);
// Check that the fee is collected
require(_fees > 0, "There is no available fees");
// Transfer fee to provided address
_beneficiary.transfer(_fees);
}
/// @dev Checks possibility of the issue of the specified token amount
/// for provided Ether collateral and creates new Box
/// @param _tokensToWithdraw Number of tokens to withdraw
/// @return New Box ID.
function create(uint256 _tokensToWithdraw) public payable validTx returns (uint256) {
// Check that msg.value isn't smaller than minimum deposit
require(msg.value >= settings.minDeposit(), "Deposit is very small");
// Calculate collateralization when tokens are needed
if (_tokensToWithdraw > 0) {
// The number of tokens when collateralization is high
uint256 _tokenLimit = overCapWithdrawableTmv(msg.value);
// The number of tokens that can be safely withdrawn from the system
uint256 _maxGlobal = globalWithdrawableTmv(msg.value);
// Determine the higher number of tokens
if (_tokenLimit > _maxGlobal) {
_tokenLimit = _maxGlobal;
}
// The number of tokens that can be withdrawn anyway
uint256 _local = defaultWithdrawableTmv(msg.value);
// Determine the higher number of tokens
if (_tokenLimit < _local) {
_tokenLimit = _local;
}
// You can only withdraw available amount
require(_tokensToWithdraw <= _tokenLimit, "Token amount is more than available");
// Mint TMV tokens to the Box creator
IToken(settings.tmvAddress()).mint(msg.sender, _tokensToWithdraw);
}
// The id of the new Box
uint256 _id = boxes.push(Box(msg.value, _tokensToWithdraw)).sub(1);
// Increase global Ether counter
globalETH = globalETH.add(msg.value);
// Mint TBX token to the Box creator
_mint(msg.sender, _id);
// Fire the event
emit Created(_id, msg.sender, msg.value, _tokensToWithdraw);
// return the new Box's ID
return _id;
}
/// @dev Allows the owner or approved user of the Box to close one by burning the
/// required number of tokens and return the Box's collateral.
/// @param _id A Box ID to close.
function close(uint256 _id) external onlyApprovedOrOwner(_id) {
// Address of the owner of the Box
address _owner = _tokenOwner[_id];
// Burn needed number of tokens
uint256 _tokensNeed = boxes[_id].tmvReleased;
_burnTMV(msg.sender, _tokensNeed);
// Grab a reference to the Box's collateral in storage
uint256 _collateral = boxes[_id].collateral;
// burn Box token
_burn(_owner, _id);
// Removes Box
delete boxes[_id];
// Send the Box's collateral to the person who made closing happen
msg.sender.transfer(_collateral);
// Decrease global Ether counter
globalETH = globalETH.sub(_collateral);
// Fire the event
emit Closed(_id, _owner, msg.sender);
}
/// @notice This allows you not to be tied to the current ETH/USD rate.
/// @dev Allows the user to capitalize a Box with the maximum current amount.
/// @param _id A Box ID to capitalize.
function capitalizeMax(uint256 _id) external {
capitalize(_id, maxCapAmount(_id));
}
/// @dev Allows the user to capitalize a Box with specified number of tokens.
/// @param _id A Box ID to capitalize.
/// @param _tmv Specified number of tokens to capitalize.
function capitalize(uint256 _id, uint256 _tmv) public validTx {
// The maximum number of tokens for which Box can be capitalized
uint256 _maxCapAmount = maxCapAmount(_id);
// Check the number of tokens
require(_tmv <= _maxCapAmount && _tmv >= 10 ** 17, "Tokens amount out of range");
// Decrease Box TMV withdrawn counter
boxes[_id].tmvReleased = boxes[_id].tmvReleased.sub(_tmv);
// Calculate the Ether equivalent of tokens according to the logic
// where 1 TMV is equal to 1 USD
uint256 _equivalentETH = _tmv.mul(precision).div(rate());
// Calculate system fee
uint256 _fee = _tmv.mul(settings.sysFee()).div(rate());
// Calculate user bonus
uint256 _userReward = _tmv.mul(settings.userFee()).div(rate());
// Decrease Box's collateral amount
boxes[_id].collateral = boxes[_id].collateral.sub(_fee.add(_userReward).add(_equivalentETH));
// Decrease global Ether counter
globalETH = globalETH.sub(_fee.add(_userReward).add(_equivalentETH));
// burn Box token
_burnTMV(msg.sender, _tmv);
// Send the Ether equivalent & user benefit to the person who made capitalization happen.
msg.sender.transfer(_equivalentETH.add(_userReward));
// Fire the event
emit Capitalized(_id, ownerOf(_id), msg.sender, _tmv, _equivalentETH.add(_userReward).add(_fee), _equivalentETH.add(_userReward));
}
/// @notice This allows you not to be tied to the current ETH/USD rate.
/// @dev Allows an owner or approved user of the Box to withdraw maximum amount
/// of Ether from the Box.
/// @param _id A Box ID.
function withdrawEthMax(uint256 _id) external {
withdrawEth(_id, withdrawableEth(_id));
}
/// @dev Allows an owner or approved user of the Box to withdraw specified amount
/// of Ether from the Box.
/// @param _id A Box ID.
/// @param _amount The number of Ether to withdraw.
function withdrawEth(uint256 _id, uint256 _amount) public onlyApprovedOrOwner(_id) validTx {
require(_amount > 0, "Withdrawing zero");
require(_amount <= withdrawableEth(_id), "You can't withdraw so much");
// Decrease Box's collateral amount
boxes[_id].collateral = boxes[_id].collateral.sub(_amount);
// Decrease global Ether counter
globalETH = globalETH.sub(_amount);
// Send the Ether to the person who made capitalization happen
msg.sender.transfer(_amount);
// Fire the event
emit EthWithdrawn(_id, _amount, msg.sender);
}
/// @notice This allows you not to be tied to the current ETH/USD rate.
/// @dev Allows an owner or approved user of the Box to withdraw maximum number
/// of TMV tokens from the Box.
/// @param _id A Box ID.
function withdrawTmvMax(uint256 _id) external onlyApprovedOrOwner(_id) {
withdrawTmv(_id, boxWithdrawableTmv(_id));
}
/// @dev Allows an owner or approved user of the Box to withdraw specified number
/// of TMV tokens from the Box.
/// @param _id A Box ID.
/// @param _amount The number of tokens to withdraw.
function withdrawTmv(uint256 _id, uint256 _amount) public onlyApprovedOrOwner(_id) validTx {
require(_amount > 0, "Withdrawing zero");
// Check the number of tokens
require(_amount <= boxWithdrawableTmv(_id), "You can't withdraw so much");
// Increase Box TMV withdrawn counter
boxes[_id].tmvReleased = boxes[_id].tmvReleased.add(_amount);
// Mints tokens to the person who made withdrawing
IToken(settings.tmvAddress()).mint(msg.sender, _amount);
// Fire the event
emit TmvWithdrawn(_id, _amount, msg.sender);
}
/// @dev Allows anyone to add Ether to a Box.
/// @param _id A Box ID.
function addEth(uint256 _id) external payable onlyExists(_id) {
require(msg.value > 0, "Don't add 0");
// Increase Box collateral
boxes[_id].collateral = boxes[_id].collateral.add(msg.value);
// Increase global Ether counter
globalETH = globalETH.add(msg.value);
// Fire the event
emit EthAdded(_id, msg.value, msg.sender);
}
/// @dev Allows anyone to add TMV to a Box.
/// @param _id A Box ID.
/// @param _amount The number of tokens to add.
function addTmv(uint256 _id, uint256 _amount) external onlyExists(_id) {
require(_amount > 0, "Don't add 0");
// Check the number of tokens
require(_amount <= boxes[_id].tmvReleased, "Too much tokens");
// Removes added tokens from the collateralization
_burnTMV(msg.sender, _amount);
boxes[_id].tmvReleased = boxes[_id].tmvReleased.sub(_amount);
// Fire the event
emit TmvAdded(_id, _amount, msg.sender);
}
/// @dev Allows anyone to close Box with collateral amount smaller than 3 USD.
/// The person who made closing happen will benefit like capitalization.
/// @param _id A Box ID.
function closeDust(uint256 _id) external onlyExists(_id) validTx {
// Check collateral percent of the Box
require(collateralPercent(_id) >= settings.minStability(), "This Box isn't collapsable");
// Check collateral amount of the Box
require(boxes[_id].collateral.mul(rate()) < precision.mul(3).mul(10 ** 18), "It's only possible to collapse dust");
// Burn needed TMV amount to close
uint256 _tmvReleased = boxes[_id].tmvReleased;
_burnTMV(msg.sender, _tmvReleased);
uint256 _collateral = boxes[_id].collateral;
// Calculate the Ether equivalent of tokens according to the logic
// where 1 TMV is equal to 1 USD
uint256 _eth = _tmvReleased.mul(precision).div(rate());
// Calculate user bonus
uint256 _userReward = _tmvReleased.mul(settings.userFee()).div(rate());
// The owner of the Box
address _owner = ownerOf(_id);
// Remove a Box
delete boxes[_id];
// Burn Box token
_burn(_owner, _id);
// Send the Ether equivalent & user benefit to the person who made closing happen
msg.sender.transfer(_eth.add(_userReward));
// Decrease global Ether counter
globalETH = globalETH.sub(_collateral);
// Fire the event
emit Closed(_id, _owner, msg.sender);
}
/// @dev Burns specified number of TMV tokens.
function _burnTMV(address _from, uint256 _amount) internal {
if (_amount > 0) {
require(IToken(settings.tmvAddress()).balanceOf(_from) >= _amount, "You don't have enough tokens");
IToken(settings.tmvAddress()).burnLogic(_from, _amount);
}
}
/// @dev Returns current oracle ETH/USD price with precision.
function rate() public view returns(uint256) {
return IOracle(settings.oracleAddress()).ethUsdPrice();
}
/// @dev Given a Box ID, returns a number of tokens that can be withdrawn.
function boxWithdrawableTmv(uint256 _id) public view onlyExists(_id) returns(uint256) {
Box memory box = boxes[_id];
// Number of tokens that can be withdrawn for Box's collateral
uint256 _amount = withdrawableTmv(box.collateral);
if (box.tmvReleased >= _amount) {
return 0;
}
// Return withdrawable rest
return _amount.sub(box.tmvReleased);
}
/// @dev Given a Box ID, returns an amount of Ether that can be withdrawn.
function withdrawableEth(uint256 _id) public view onlyExists(_id) returns(uint256) {
// Amount of Ether that is not used in collateralization
uint256 _avlbl = _freeEth(_id);
// Return available Ether to withdraw
if (_avlbl == 0) {
return 0;
}
uint256 _rest = boxes[_id].collateral.sub(_avlbl);
if (_rest < settings.minDeposit()) {
return boxes[_id].collateral.sub(settings.minDeposit());
}
else return _avlbl;
}
/// @dev Given a Box ID, returns amount of ETH that is not used in collateralization.
function _freeEth(uint256 _id) internal view returns(uint256) {
// Grab a reference to the Box
Box memory box = boxes[_id];
// When there are no tokens withdrawn
if (box.tmvReleased == 0) {
return box.collateral;
}
// The amount of Ether that can be safely withdrawn from the system
uint256 _maxGlobal = globalWithdrawableEth();
uint256 _globalAvailable;
if (_maxGlobal > 0) {
// The amount of Ether backing the tokens when the system is overcapitalized
uint256 _need = overCapFrozenEth(box.tmvReleased);
if (box.collateral > _need) {
// Free Ether amount when the system is overcapitalized
uint256 _free = box.collateral.sub(_need);
if (_free > _maxGlobal) {
// Store available amount when Box available Ether amount
// is more than global available
_globalAvailable = _maxGlobal;
}
// Return available amount of Ether to withdraw when the Box withdrawable
// amount of Ether is smaller than global withdrawable amount of Ether
else return _free;
}
}
// The amount of Ether backing the tokens by default
uint256 _frozen = defaultFrozenEth(box.tmvReleased);
if (box.collateral > _frozen) {
// Define the biggest number and return available Ether amount
uint256 _localAvailable = box.collateral.sub(_frozen);
return (_localAvailable > _globalAvailable) ? _localAvailable : _globalAvailable;
} else {
// Return available Ether amount
return _globalAvailable;
}
}
/// @dev Given a Box ID, returns collateral percent.
function collateralPercent(uint256 _id) public view onlyExists(_id) returns(uint256) {
Box memory box = boxes[_id];
if (box.tmvReleased == 0) {
return 10**27; //some unreachable number
}
uint256 _ethCollateral = box.collateral;
// division by 100 is not necessary because to get the percent you need to multiply by 100
return _ethCollateral.mul(rate()).div(box.tmvReleased);
}
/// @dev Checks if a given address currently has approval for a particular Box.
/// @param _spender the address we are confirming Box is approved for.
/// @param _tokenId Box ID.
function isApprovedOrOwner(address _spender, uint256 _tokenId) external view returns (bool) {
return _isApprovedOrOwner(_spender, _tokenId);
}
/// @dev Returns the global collateralization percent.
function globalCollateralization() public view returns (uint256) {
uint256 _supply = IToken(settings.tmvAddress()).totalSupply();
if (_supply == 0) {
return settings.globalTargetCollateralization();
}
return globalETH.mul(rate()).div(_supply);
}
/// @dev Returns the number of tokens that can be safely withdrawn from the system.
function globalWithdrawableTmv(uint256 _value) public view returns (uint256) {
uint256 _supply = IToken(settings.tmvAddress()).totalSupply();
if (globalCollateralization() <= settings.globalTargetCollateralization()) {
return 0;
}
uint256 _totalBackedTmv = defaultWithdrawableTmv(globalETH.add(_value));
return _totalBackedTmv.sub(_supply);
}
/// @dev Returns Ether amount that can be safely withdrawn from the system.
function globalWithdrawableEth() public view returns (uint256) {
uint256 _supply = IToken(settings.tmvAddress()).totalSupply();
if (globalCollateralization() <= settings.globalTargetCollateralization()) {
return 0;
}
uint256 _need = defaultFrozenEth(_supply);
return globalETH.sub(_need);
}
/// @dev Returns the number of tokens that can be withdrawn
/// for the specified collateral amount by default.
function defaultWithdrawableTmv(uint256 _collateral) public view returns (uint256) {
uint256 _num = _collateral.mul(rate());
uint256 _div = settings.globalTargetCollateralization();
return _num.div(_div);
}
/// @dev Returns the number of tokens that can be withdrawn
/// for the specified collateral amount when the system is overcapitalized.
function overCapWithdrawableTmv(uint256 _collateral) public view returns (uint256) {
uint256 _num = _collateral.mul(rate());
uint256 _div = settings.ratio();
return _num.div(_div);
}
/// @dev Returns Ether amount backing the specified number of tokens by default.
function defaultFrozenEth(uint256 _supply) public view returns (uint256) {
return _supply.mul(settings.globalTargetCollateralization()).div(rate());
}
/// @dev Returns Ether amount backing the specified number of tokens
/// when the system is overcapitalized.
function overCapFrozenEth(uint256 _supply) public view returns (uint256) {
return _supply.mul(settings.ratio()).div(rate());
}
/// @dev Returns the number of TMV that can capitalize the specified Box.
function maxCapAmount(uint256 _id) public view onlyExists(_id) returns (uint256) {
uint256 _colP = collateralPercent(_id);
require(_colP >= settings.minStability() && _colP < settings.maxStability(), "It's only possible to capitalize toxic Boxes");
Box memory box = boxes[_id];
uint256 _num = box.tmvReleased.mul(settings.ratio()).sub(box.collateral.mul(rate()));
uint256 _div = settings.ratio().sub(settings.minStability());
return _num.div(_div);
}
/// @dev Returns the number of tokens that can be actually withdrawn
/// for the specified collateral.
function withdrawableTmv(uint256 _collateral) public view returns(uint256) {
uint256 _amount = overCapWithdrawableTmv(_collateral);
uint256 _maxGlobal = globalWithdrawableTmv(0);
if (_amount > _maxGlobal) {
_amount = _maxGlobal;
}
uint256 _local = defaultWithdrawableTmv(_collateral);
if (_amount < _local) {
_amount = _local;
}
return _amount;
}
/// @dev Returns the collateral percentage for which tokens can be withdrawn
/// for the specified collateral.
function withdrawPercent(uint256 _collateral) external view returns(uint256) {
uint256 _amount = overCapWithdrawableTmv(_collateral);
uint256 _maxGlobal = globalWithdrawableTmv(_collateral);
if (_amount > _maxGlobal) {
_amount = _maxGlobal;
}
uint256 _local = defaultWithdrawableTmv(_collateral);
if (_amount < _local) {
_amount = _local;
}
return _collateral.mul(rate()).div(_amount);
}
}
pragma solidity 0.4.25;
/**
* Utility library of inline functions on addresses
*/
library Address {
/**
* Returns whether the target address is a contract
* @dev This function will return false if invoked during the constructor of a contract,
* as the code is not actually created until after the constructor finishes.
* @param account address of the account to check
* @return whether the target address is a contract
*/
function isContract(address account) internal view returns (bool) {
uint256 size;
// XXX Currently there is no better way to check if there is a contract in an address
// than to check the size of the code at that address.
// See https://ethereum.stackexchange.com/a/14016/36603
// for more details about how this works.
// TODO Check this again before the Serenity release, because all addresses will be
// contracts then.
// solium-disable-next-line security/no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
}
pragma solidity 0.4.25;
import "./IERC165.sol";
/**
* @title ERC165
* @author Matt Condon (@shrugs)
* @dev Implements ERC165 using a lookup table.
*/
contract ERC165 is IERC165 {
bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7;
/**
* 0x01ffc9a7 ===
* bytes4(keccak256('supportsInterface(bytes4)'))
*/
/**
* @dev a mapping of interface id to whether or not it's supported
*/
mapping(bytes4 => bool) private _supportedInterfaces;
/**
* @dev A contract implementing SupportsInterfaceWithLookup
* implement ERC165 itself
*/
constructor () internal {
_registerInterface(_InterfaceId_ERC165);
}
/**
* @dev implement supportsInterface(bytes4) using a lookup table
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev internal method for registering an interface
*/
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff);
_supportedInterfaces[interfaceId] = true;
}
}
pragma solidity 0.4.25;
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./SafeMath.sol";
import "./Address.sol";
import "./ERC165.sol";
/**
* @title ERC721 Non-Fungible Token Standard basic implementation
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract ERC721 is ERC165, IERC721 {
using SafeMath for uint256;
using Address for address;
// Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
// which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
// Mapping from token ID to owner
mapping (uint256 => address) internal _tokenOwner;
// Mapping from token ID to approved address
mapping (uint256 => address) private _tokenApprovals;
// Mapping from owner to number of owned token
mapping (address => uint256) private _ownedTokensCount;
// Mapping from owner to operator approvals
mapping (address => mapping (address => bool)) private _operatorApprovals;
bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;
/*
* 0x80ac58cd ===
* bytes4(keccak256('balanceOf(address)')) ^
* bytes4(keccak256('ownerOf(uint256)')) ^
* bytes4(keccak256('approve(address,uint256)')) ^
* bytes4(keccak256('getApproved(uint256)')) ^
* bytes4(keccak256('setApprovalForAll(address,bool)')) ^
* bytes4(keccak256('isApprovedForAll(address,address)')) ^
* bytes4(keccak256('transferFrom(address,address,uint256)')) ^
* bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
* bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
*/
constructor () public {
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(_InterfaceId_ERC721);
}
/**
* @dev Gets the balance of the specified address
* @param owner address to query the balance of
* @return uint256 representing the amount owned by the passed address
*/
function balanceOf(address owner) public view returns (uint256) {
require(owner != address(0));
return _ownedTokensCount[owner];
}
/**
* @dev Gets the owner of the specified token ID
* @param tokenId uint256 ID of the token to query the owner of
* @return owner address currently marked as the owner of the given token ID
*/
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(owner != address(0));
return owner;
}
/**
* @dev Approves another address to transfer the given token ID
* The zero address indicates there is no approved address.
* There can only be one approved address per token at a given time.
* Can only be called by the token owner or an approved operator.
* @param to address to be approved for the given token ID
* @param tokenId uint256 ID of the token to be approved
*/
function approve(address to, uint256 tokenId) public {
address owner = ownerOf(tokenId);
require(to != owner);
require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev Gets the approved address for a token ID, or zero if no address set
* Reverts if the token ID does not exist.
* @param tokenId uint256 ID of the token to query the approval of
* @return address currently approved for the given token ID
*/
function getApproved(uint256 tokenId) public view returns (address) {
require(_exists(tokenId));
return _tokenApprovals[tokenId];
}
/**
* @dev Sets or unsets the approval of a given operator
* An operator is allowed to transfer all tokens of the sender on their behalf
* @param to operator address to set the approval
* @param approved representing the status of the approval to be set
*/
function setApprovalForAll(address to, bool approved) public {
require(to != msg.sender);
_operatorApprovals[msg.sender][to] = approved;
emit ApprovalForAll(msg.sender, to, approved);
}
/**
* @dev Tells whether an operator is approved by a given owner
* @param owner owner address which you want to query the approval of
* @param operator operator address which you want to query the approval of
* @return bool whether the given operator is approved by the given owner
*/
function isApprovedForAll(address owner, address operator) public view returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev Transfers the ownership of a given token ID to another address
* Usage of this method is discouraged, use `safeTransferFrom` whenever possible
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function transferFrom(address from, address to, uint256 tokenId) public {
require(_isApprovedOrOwner(msg.sender, tokenId));
require(to != address(0));
_clearApproval(from, tokenId);
_removeTokenFrom(from, tokenId);
_addTokenTo(to, tokenId);
emit Transfer(from, to, tokenId);
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
*
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public {
// solium-disable-next-line arg-overflow
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes data to send along with a safe transfer check
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
transferFrom(from, to, tokenId);
// solium-disable-next-line arg-overflow
require(_checkOnERC721Received(from, to, tokenId, _data));
}
/**
* @dev Returns whether the specified token exists
* @param tokenId uint256 ID of the token to query the existence of
* @return whether the token exists
*/
function _exists(uint256 tokenId) internal view returns (bool) {
address owner = _tokenOwner[tokenId];
return owner != address(0);
}
/**
* @dev Returns whether the given spender can transfer a given token ID
* @param spender address of the spender to query
* @param tokenId uint256 ID of the token to be transferred
* @return bool whether the msg.sender is approved for the given token ID,
* is an operator of the owner, or is the owner of the token
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
address owner = ownerOf(tokenId);
// Disable solium check because of
// https://github.com/duaraghav8/Solium/issues/175
// solium-disable-next-line operator-whitespace
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Internal function to mint a new token
* Reverts if the given token ID already exists
* @param to The address that will own the minted token
* @param tokenId uint256 ID of the token to be minted by the msg.sender
*/
function _mint(address to, uint256 tokenId) internal {
require(to != address(0));
_addTokenTo(to, tokenId);
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* @param tokenId uint256 ID of the token being burned by the msg.sender
*/
function _burn(address owner, uint256 tokenId) internal {
_clearApproval(owner, tokenId);
_removeTokenFrom(owner, tokenId);
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Internal function to add a token ID to the list of a given address
* Note that this function is left internal to make ERC721Enumerable possible, but is not
* intended to be called by custom derived contracts: in particular, it emits no Transfer event.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenTo(address to, uint256 tokenId) internal {
require(_tokenOwner[tokenId] == address(0));
_tokenOwner[tokenId] = to;
_ownedTokensCount[to] = _ownedTokensCount[to].add(1);
}
/**
* @dev Internal function to remove a token ID from the list of a given address
* Note that this function is left internal to make ERC721Enumerable possible, but is not
* intended to be called by custom derived contracts: in particular, it emits no Transfer event,
* and doesn't clear approvals.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFrom(address from, uint256 tokenId) internal {
require(ownerOf(tokenId) == from);
_ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
_tokenOwner[tokenId] = address(0);
}
/**
* @dev Internal function to invoke `onERC721Received` on a target address
* The call is not executed if the target address is not a contract
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) {
if (!to.isContract()) {
return true;
}
bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
return (retval == _ERC721_RECEIVED);
}
/**
* @dev Private function to clear current approval of a given token ID
* Reverts if the given address is not indeed the owner of the token
* @param owner owner of the token
* @param tokenId uint256 ID of the token to be transferred
*/
function _clearApproval(address owner, uint256 tokenId) private {
require(ownerOf(tokenId) == owner);
if (_tokenApprovals[tokenId] != address(0)) {
_tokenApprovals[tokenId] = address(0);
}
}
}
pragma solidity 0.4.25;
import "./IERC721Enumerable.sol";
import "./ERC721.sol";
import "./ERC165.sol";
/**
* @title ERC-721 Non-Fungible Token with optional enumeration extension logic
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => uint256[]) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
bytes4 private constant _InterfaceId_ERC721Enumerable = 0x780e9d63;
/**
* 0x780e9d63 ===
* bytes4(keccak256('totalSupply()')) ^
* bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
* bytes4(keccak256('tokenByIndex(uint256)'))
*/
/**
* @dev Constructor function
*/
constructor () public {
// register the supported interface to conform to ERC721 via ERC165
_registerInterface(_InterfaceId_ERC721Enumerable);
}
/**
* @dev Gets the token ID at a given index of the tokens list of the requested owner
* @param owner address owning the tokens list to be accessed
* @param index uint256 representing the index to be accessed of the requested tokens list
* @return uint256 token ID at the given index of the tokens list owned by the requested address
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
require(index < balanceOf(owner));
return _ownedTokens[owner][index];
}
/**
* @dev Gets the total amount of tokens stored by the contract
* @return uint256 representing the total amount of tokens
*/
function totalSupply() public view returns (uint256) {
return _allTokens.length;
}
/**
* @dev Gets the token ID at a given index of all the tokens in this contract
* Reverts if the index is greater or equal to the total number of tokens
* @param index uint256 representing the index to be accessed of the tokens list
* @return uint256 token ID at the given index of the tokens list
*/
function tokenByIndex(uint256 index) public view returns (uint256) {
require(index < totalSupply());
return _allTokens[index];
}
/**
* @dev Internal function to add a token ID to the list of a given address
* This function is internal due to language limitations, see the note in ERC721.sol.
* It is not intended to be called by custom derived contracts: in particular, it emits no Transfer event.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenTo(address to, uint256 tokenId) internal {
super._addTokenTo(to, tokenId);
uint256 length = _ownedTokens[to].length;
_ownedTokens[to].push(tokenId);
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Internal function to remove a token ID from the list of a given address
* This function is internal due to language limitations, see the note in ERC721.sol.
* It is not intended to be called by custom derived contracts: in particular, it emits no Transfer event,
* and doesn't clear approvals.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFrom(address from, uint256 tokenId) internal {
super._removeTokenFrom(from, tokenId);
// To prevent a gap in the array, we store the last token in the index of the token to delete, and
// then delete the last slot.
uint256 tokenIndex = _ownedTokensIndex[tokenId];
uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
uint256 lastToken = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastToken;
// This also deletes the contents at the last position of the array
_ownedTokens[from].length--;
// Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
// be zero. Then we can make sure that we will remove tokenId from the ownedTokens list since we are first swapping
// the lastToken to the first position, and then dropping the element placed in the last position of the list
_ownedTokensIndex[tokenId] = 0;
_ownedTokensIndex[lastToken] = tokenIndex;
}
/**
* @dev Internal function to mint a new token
* Reverts if the given token ID already exists
* @param to address the beneficiary that will own the minted token
* @param tokenId uint256 ID of the token to be minted by the msg.sender
*/
function _mint(address to, uint256 tokenId) internal {
super._mint(to, tokenId);
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* @param owner owner of the token to burn
* @param tokenId uint256 ID of the token being burned by the msg.sender
*/
function _burn(address owner, uint256 tokenId) internal {
super._burn(owner, tokenId);
// Reorg all tokens array
uint256 tokenIndex = _allTokensIndex[tokenId];
uint256 lastTokenIndex = _allTokens.length.sub(1);
uint256 lastToken = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastToken;
_allTokens[lastTokenIndex] = 0;
_allTokens.length--;
_allTokensIndex[tokenId] = 0;
_allTokensIndex[lastToken] = tokenIndex;
}
}
pragma solidity 0.4.25;
import "./ERC721.sol";
import "./IERC721Metadata.sol";
import "./ERC165.sol";
contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
// Token name
string private _name;
// Token symbol
string private _symbol;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f;
/**
* 0x5b5e139f ===
* bytes4(keccak256('name()')) ^
* bytes4(keccak256('symbol()')) ^
* bytes4(keccak256('tokenURI(uint256)'))
*/
/**
* @dev Constructor function
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(InterfaceId_ERC721Metadata);
}
/**
* @dev Gets the token name
* @return string representing the token name
*/
function name() external view returns (string memory) {
return _name;
}
/**
* @dev Gets the token symbol
* @return string representing the token symbol
*/
function symbol() external view returns (string memory) {
return _symbol;
}
/**
* @dev Returns an URI for a given token ID
* Throws if the token ID does not exist. May return an empty string.
* @param tokenId uint256 ID of the token to query
*/
function tokenURI(uint256 tokenId) external view returns (string memory) {
require(_exists(tokenId));
return _tokenURIs[tokenId];
}
/**
* @dev Internal function to set the token URI for a given token
* Reverts if the token ID does not exist
* @param tokenId uint256 ID of the token to set its URI
* @param uri string URI to assign
*/
function _setTokenURI(uint256 tokenId, string memory uri) internal {
require(_exists(tokenId));
_tokenURIs[tokenId] = uri;
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* @param owner owner of the token to burn
* @param tokenId uint256 ID of the token being burned by the msg.sender
*/
function _burn(address owner, uint256 tokenId) internal {
super._burn(owner, tokenId);
// Clear metadata (if any)
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
pragma solidity 0.4.25;
/**
* @title IERC165
* @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
*/
interface IERC165 {
/**
* @notice Query if a contract implements an interface
* @param interfaceId The interface identifier, as specified in ERC-165
* @dev Interface identification is specified in ERC-165. This function
* uses less than 30,000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity 0.4.25;
import "./IERC165.sol";
/**
* @title ERC721 Non-Fungible Token Standard basic interface
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) public view returns (uint256 balance);
function ownerOf(uint256 tokenId) public view returns (address owner);
function approve(address to, uint256 tokenId) public;
function getApproved(uint256 tokenId) public view returns (address operator);
function setApprovalForAll(address operator, bool _approved) public;
function isApprovedForAll(address owner, address operator) public view returns (bool);
function transferFrom(address from, address to, uint256 tokenId) public;
function safeTransferFrom(address from, address to, uint256 tokenId) public;
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}
pragma solidity 0.4.25;
import "./IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721Enumerable is IERC721 {
function totalSupply() public view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);
function tokenByIndex(uint256 index) public view returns (uint256);
}
pragma solidity 0.4.25;
import "./IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity 0.4.25;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
contract IERC721Receiver {
/**
* @notice Handle the receipt of an NFT
* @dev The ERC721 smart contract calls this function on the recipient
* after a `safeTransfer`. This function MUST return the function selector,
* otherwise the caller will revert the transaction. The selector to be
* returned can be obtained as `this.onERC721Received.selector`. This
* function MAY throw to revert and reject the transfer.
* Note: the ERC721 contract address is always the message sender.
* @param operator The address which called `safeTransferFrom` function
* @param from The address which previously owned the token
* @param tokenId The NFT identifier which is being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
*/
function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4);
}
pragma solidity 0.4.25;
/// @title IOracle
/// @dev Interface for getting the data from the oracle contract.
interface IOracle {
function ethUsdPrice() external view returns(uint256);
}
pragma solidity 0.4.25;
/// @title ISettings
/// @dev Interface for getting the data from settings contract.
interface ISettings {
function oracleAddress() external view returns(address);
function minDeposit() external view returns(uint256);
function sysFee() external view returns(uint256);
function userFee() external view returns(uint256);
function ratio() external view returns(uint256);
function globalTargetCollateralization() external view returns(uint256);
function tmvAddress() external view returns(uint256);
function maxStability() external view returns(uint256);
function minStability() external view returns(uint256);
function gasPriceLimit() external view returns(uint256);
function isFeeManager(address account) external view returns (bool);
function tBoxManager() external view returns(address);
}
pragma solidity 0.4.25;
/// @title IToken
/// @dev Interface for interaction with the TMV token contract.
interface IToken {
function burnLogic(address from, uint256 value) external;
function approve(address spender, uint256 value) external;
function balanceOf(address who) external view returns (uint256);
function mint(address to, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 tokenId) external;
}
pragma solidity 0.4.25;
/**
* @title SafeMath
* @dev Math operations with safety checks that revert on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, 'mul');
return c;
}
/**
* @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, 'div');
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, 'sub');
uint256 c = a - b;
return c;
}
/**
* @dev Adds two numbers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, 'add');
return c;
}
/**
* @dev Divides two numbers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
pragma solidity 0.4.25;
import "./ERC721.sol";
import "./ERC721Enumerable.sol";
import "./ERC721Metadata.sol";
/**
* @title TBoxClassic Token
* This implementation includes all the required and some optional functionality of the ERC721 standard
* Moreover, it includes approve all functionality using operator terminology
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract TBoxToken is ERC721, ERC721Enumerable, ERC721Metadata {
constructor (string memory name, string memory symbol) ERC721Metadata(name, symbol) public {}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_tmv","type":"uint256"}],"name":"capitalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"withdrawFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"collateralPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"capitalizeMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_spender","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"boxes","outputs":[{"name":"collateral","type":"uint256"},{"name":"tmvReleased","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"maxCapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"withdrawTmvMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_supply","type":"uint256"}],"name":"defaultFrozenEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"addEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokensToWithdraw","type":"uint256"}],"name":"create","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_collateral","type":"uint256"}],"name":"overCapWithdrawableTmv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"withdrawableEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_collateral","type":"uint256"}],"name":"withdrawPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"globalWithdrawableEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"globalWithdrawableTmv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"withdrawEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"globalETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"withdrawEthMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"closeDust","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"addTmv","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"globalCollateralization","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"precision","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"settings","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"boxWithdrawableTmv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_collateral","type":"uint256"}],"name":"defaultWithdrawableTmv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_supply","type":"uint256"}],"name":"overCapFrozenEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"withdrawTmv","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_collateral","type":"uint256"}],"name":"withdrawableTmv","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_settings","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"collateral","type":"uint256"},{"indexed":false,"name":"tmvReleased","type":"uint256"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"closer","type":"address"}],"name":"Closed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"tmvAmount","type":"uint256"},{"indexed":false,"name":"totalEth","type":"uint256"},{"indexed":false,"name":"userEth","type":"uint256"}],"name":"Capitalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"who","type":"address"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"who","type":"address"}],"name":"TmvWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"who","type":"address"}],"name":"EthAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"who","type":"address"}],"name":"TmvAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]Contract Creation Code
6080604052620186a0600d553480156200001857600080fd5b506040516020806200492c83398101604081815291518282018352600982527f54426f78546f6b656e00000000000000000000000000000000000000000000006020808401919091528351808501909452600384527f544258000000000000000000000000000000000000000000000000000000000090840152918181620000c97f01ffc9a700000000000000000000000000000000000000000000000000000000640100000000620001bd810204565b620000fd7f80ac58cd00000000000000000000000000000000000000000000000000000000640100000000620001bd810204565b620001317f780e9d6300000000000000000000000000000000000000000000000000000000640100000000620001bd810204565b8151620001469060099060208501906200022a565b5080516200015c90600a9060208401906200022a565b50620001917f5b5e139f00000000000000000000000000000000000000000000000000000000640100000000620001bd810204565b5050600e8054600160a060020a031916600160a060020a03949094169390931790925550620002cf9050565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620001ed57600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b620002cc91905b80821115620002ab5760008155600101620002b6565b90565b61464d80620002df6000396000f3006080604052600436106102205763ffffffff60e060020a6000350416621ed41f811461022d57806301ffc9a71461024a57806306fdde0314610295578063081812fc1461031f578063095ea7b3146103535780630aebeb4e1461037757806318160ddd1461038f5780631ac3ddeb146103b657806323b872dd146103d757806326526df3146104015780632c4e722e146104195780632f18b73a1461042e5780632f745c591461044657806342842e0e1461046a578063430c2081146104945780634ed3faf2146104b85780634f6ccce7146104e957806354bc33fe146105015780635524bc9d146105195780636352211e146105315780636574ab93146105495780636708ec141461056157806370a082311461056c578063780900dc1461058d5780637f9733811461059857806380012393146105b05780638dc5c936146105c85780639288aab3146105e057806395d89b41146105f55780639c17b0491461060a5780639c99e2b914610622578063a22cb4651461063d578063ac75c7f714610663578063ad3e1f6f14610678578063b88d4fde14610690578063c1acbde6146106ff578063c87b56dd14610717578063cd0752661461072f578063d12d7d651461074a578063d3b5dc3b1461075f578063e06174e414610774578063e0728bae14610789578063e7e1109e146107a1578063e985e9c5146107b9578063eac3a2a4146107e0578063eca393e8146107f8578063f3579e5414610813575b61022a600061082b565b50005b34801561023957600080fd5b50610248600435602435610ca3565b005b34801561025657600080fd5b506102817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166110e7565b604080519115158252519081900360200190f35b3480156102a157600080fd5b506102aa61111b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e45781810151838201526020016102cc565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b506103376004356111b2565b60408051600160a060020a039092168252519081900360200190f35b34801561035f57600080fd5b50610248600160a060020a03600435166024356111e4565b34801561038357600080fd5b5061024860043561129a565b34801561039b57600080fd5b506103a461140a565b60408051918252519081900360200190f35b3480156103c257600080fd5b50610248600160a060020a0360043516611410565b3480156103e357600080fd5b50610248600160a060020a0360043581169060243516604435611601565b34801561040d57600080fd5b506103a460043561168f565b34801561042557600080fd5b506103a461176e565b34801561043a57600080fd5b50610248600435611887565b34801561045257600080fd5b506103a4600160a060020a036004351660243561189c565b34801561047657600080fd5b50610248600160a060020a03600435811690602435166044356118e9565b3480156104a057600080fd5b50610281600160a060020a0360043516602435611905565b3480156104c457600080fd5b506104d0600435611918565b6040805192835260208301919091528051918290030190f35b3480156104f557600080fd5b506103a4600435611944565b34801561050d57600080fd5b506103a4600435611979565b34801561052557600080fd5b50610248600435611da3565b34801561053d57600080fd5b50610337600435611e08565b34801561055557600080fd5b506103a4600435611e32565b610248600435611ed9565b34801561057857600080fd5b506103a4600160a060020a0360043516612021565b6103a460043561082b565b3480156105a457600080fd5b506103a4600435612054565b3480156105bc57600080fd5b506103a4600435612101565b3480156105d457600080fd5b506103a46004356122b4565b3480156105ec57600080fd5b506103a461230f565b34801561060157600080fd5b506102aa6124e8565b34801561061657600080fd5b506103a4600435612549565b34801561062e57600080fd5b50610248600435602435612729565b34801561064957600080fd5b50610248600160a060020a036004351660243515156129b5565b34801561066f57600080fd5b506103a4612a39565b34801561068457600080fd5b50610248600435612a3f565b34801561069c57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261024894600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750612a519650505050505050565b34801561070b57600080fd5b50610248600435612a79565b34801561072357600080fd5b506102aa600435612f41565b34801561073b57600080fd5b50610248600435602435612ff6565b34801561075657600080fd5b506103a4613199565b34801561076b57600080fd5b506103a4613358565b34801561078057600080fd5b5061033761335e565b34801561079557600080fd5b506103a460043561336d565b3480156107ad57600080fd5b506103a460043561343f565b3480156107c557600080fd5b50610281600160a060020a03600435811690602435166134a4565b3480156107ec57600080fd5b506103a46004356134d2565b34801561080457600080fd5b50610248600435602435613540565b34801561081f57600080fd5b506103a46004356138c1565b6000806000806000600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561088657600080fd5b505af115801561089a573d6000803e3d6000fd5b505050506040513d60208110156108b057600080fd5b50513a1115610904576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166341b3d1856040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561095757600080fd5b505af115801561096b573d6000803e3d6000fd5b505050506040513d602081101561098157600080fd5b50513410156109da576040805160e560020a62461bcd02815260206004820152601560248201527f4465706f736974206973207665727920736d616c6c0000000000000000000000604482015290519081900360640190fd5b6000861115610bb0576109ec34612054565b93506109f734612549565b925082841115610a05578293505b610a0e3461343f565b915081841015610a1c578193505b83861115610a9a576040805160e560020a62461bcd02815260206004820152602360248201527f546f6b656e20616d6f756e74206973206d6f7265207468616e20617661696c6160448201527f626c650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b5051604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b158015610b8357600080fd5b505af1158015610b97573d6000803e3d6000fd5b505050506040513d6020811015610bad57600080fd5b50505b6040805180820190915234815260208101878152600f8054600180820180845560009390935293517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80260029092029182015591517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80390920191909155610c359161390a565b600c54909150610c4b903463ffffffff61397316565b600c55610c5833826139d0565b60408051338152346020820152808201889052905182917f21414cdba6b56757af56c4673643b26d24349f57c89f66dff6744d42682243f2919081900360600190a295945050505050565b600080600080600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b50513a1115610d7a576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b610d8386611979565b9350838511158015610d9d575067016345785d8a00008510155b1515610df3576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e7320616d6f756e74206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b610e2685600f88815481101515610e0657fe5b90600052602060002090600202016001015461390a90919063ffffffff16565b600f805488908110610e3457fe5b906000526020600020906002020160010181905550610e74610e5461176e565b600d54610e6890889063ffffffff613a1f16565b9063ffffffff613a9816565b9250610f1b610e8161176e565b600e54604080517f29b2d0400000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916329b2d0409160048083019260209291908290030181600087803b158015610ee257600080fd5b505af1158015610ef6573d6000803e3d6000fd5b505050506040513d6020811015610f0c57600080fd5b5051889063ffffffff613a1f16565b9150610f89610f2861176e565b600e54604080517f42a1bbd20000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916342a1bbd29160048083019260209291908290030181600087803b158015610ee257600080fd5b9050610fd9610fae84610fa2858563ffffffff61397316565b9063ffffffff61397316565b600f805489908110610fbc57fe5b60009182526020909120600290910201549063ffffffff61390a16565b600f805488908110610fe757fe5b600091825260209091206002909102015561101e61100f84610fa2858563ffffffff61397316565b600c549063ffffffff61390a16565b600c5561102b3386613b06565b336108fc61103f858463ffffffff61397316565b6040518115909202916000818181858888f19350505050158015611067573d6000803e3d6000fd5b503361107287611e08565b600160a060020a0316877f20e55fcaa4f79f9301a01428669c19cb0d83662c3d530422d6e0cb84d9a70080886110b287610fa28a8963ffffffff61397316565b6110c2898863ffffffff61397316565b60408051938452602084019290925282820152519081900360600190a4505050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a75780601f1061117c576101008083540402835291602001916111a7565b820191906000526020600020905b81548152906001019060200180831161118a57829003601f168201915b505050505090505b90565b60006111bd82613d87565b15156111c857600080fd5b50600090815260026020526040902054600160a060020a031690565b60006111ef82611e08565b9050600160a060020a03838116908216141561120a57600080fd5b33600160a060020a0382161480611226575061122681336134a4565b151561123157600080fd5b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000806000836112aa3382613da4565b15156112ee576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600085815260016020526040902054600f8054600160a060020a039092169550908690811061131957fe5b90600052602060002090600202016001015492506113373384613b06565b600f80548690811061134557fe5b90600052602060002090600202016000015491506113638486613e03565b600f80548690811061137157fe5b600091825260208220600290910201818155600101819055604051339184156108fc02918591818181858888f193505050501580156113b4573d6000803e3d6000fd5b50600c546113c8908363ffffffff61390a16565b600c556040513390600160a060020a0386169087907f6aad6465f8fcd0a392d97bc972091a7788b15336d4b99794af4db92c796597ef90600090a45050505050565b60075490565b600e54604080517f3fcbaa7d0000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a031691633fcbaa7d91602480830192602092919082900301818787803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050506040513d602081101561149f57600080fd5b505115156114f7576040805160e560020a62461bcd02815260206004820152601260248201527f596f752068617665206e6f206163636573730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611557576040805160e560020a62461bcd02815260206004820152601860248201527f5a65726f20616464726573732c206265206361726566756c0000000000000000604482015290519081900360640190fd5b600c5461156c9030319063ffffffff61390a16565b9050600081116115c6576040805160e560020a62461bcd02815260206004820152601a60248201527f5468657265206973206e6f20617661696c61626c652066656573000000000000604482015290519081900360640190fd5b604051600160a060020a0383169082156108fc029083906000818181858888f193505050501580156115fc573d6000803e3d6000fd5b505050565b61160b3382613da4565b151561161657600080fd5b600160a060020a038216151561162b57600080fd5b6116358382613e4b565b61163f8382613eba565b6116498282613fc1565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061169961452c565b6000836116a581613d87565b15156116e9576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600f8054869081106116f757fe5b60009182526020918290206040805180820190915260029092020180548252600101549181018290529350151561173c576b033b2e3c9fd0803ce80000009350611766565b826000015191506117638360200151610e6861175661176e565b859063ffffffff613a1f16565b93505b505050919050565b600e54604080517fa89ae4ba0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163a89ae4ba91600480830192602092919082900301818787803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b5051604080517f9478ab8c0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691639478ab8c916004808201926020929091908290030181600087803b15801561185657600080fd5b505af115801561186a573d6000803e3d6000fd5b505050506040513d602081101561188057600080fd5b5051905090565b6118998161189483611979565b610ca3565b50565b60006118a783612021565b82106118b257600080fd5b600160a060020a03831660009081526005602052604090208054839081106118d657fe5b9060005260206000200154905092915050565b6115fc8383836020604051908101604052806000815250612a51565b60006119118383613da4565b9392505050565b600f80548290811061192657fe5b60009182526020909120600290910201805460019091015490915082565b600061194e61140a565b821061195957600080fd5b600780548390811061196757fe5b90600052602060002001549050919050565b60008061198461452c565b6000808561199181613d87565b15156119d5576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b6119de8761168f565b9450600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050506040513d6020811015611a5d57600080fd5b50518510801590611aeb5750600e60009054906101000a9004600160a060020a0316600160a060020a031663e7ab6de56040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d6020811015611ae657600080fd5b505185105b1515611b67576040805160e560020a62461bcd02815260206004820152602c60248201527f49742773206f6e6c7920706f737369626c6520746f206361706974616c697a6560448201527f20746f78696320426f7865730000000000000000000000000000000000000000606482015290519081900360840190fd5b600f805488908110611b7557fe5b9060005260206000209060020201604080519081016040529081600082015481526020016001820154815250509350611c6a611bc0611bb261176e565b86519063ffffffff613a1f16565b600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051611c5e92600160a060020a0316916371ca337d9160048083019260209291908290030181600087803b158015611c2157600080fd5b505af1158015611c35573d6000803e3d6000fd5b505050506040513d6020811015611c4b57600080fd5b505160208801519063ffffffff613a1f16565b9063ffffffff61390a16565b9250611d86600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d6020811015611cec57600080fd5b5051600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916371ca337d916004808201926020929091908290030181600087803b158015611d4e57600080fd5b505af1158015611d62573d6000803e3d6000fd5b505050506040513d6020811015611d7857600080fd5b50519063ffffffff61390a16565b9150611d98838363ffffffff613a9816565b979650505050505050565b80611dae3382613da4565b1515611df2576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b611e0482611dff8461336d565b613540565b5050565b600081815260016020526040812054600160a060020a0316801515611e2c57600080fd5b92915050565b6000611e2c611e3f61176e565b600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916349ce7fba9160048083019260209291908290030181600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b505050506040513d6020811015611eca57600080fd5b5051859063ffffffff613a1f16565b80611ee381613d87565b1515611f27576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b60003411611f7f576040805160e560020a62461bcd02815260206004820152600b60248201527f446f6e2774206164642030000000000000000000000000000000000000000000604482015290519081900360640190fd5b611faf34600f84815481101515611f9257fe5b60009182526020909120600290910201549063ffffffff61397316565b600f805484908110611fbd57fe5b6000918252602090912060029091020155600c54611fe1903463ffffffff61397316565b600c5560408051348152336020820152815184927f313dcd8724daa6302f380e681cf360dfed18ad95b548ded3c378c610e1b56bdf928290030190a25050565b6000600160a060020a038216151561203857600080fd5b50600160a060020a031660009081526003602052604090205490565b600080600061206461175661176e565b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166371ca337d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120b957600080fd5b505af11580156120cd573d6000803e3d6000fd5b505050506040513d60208110156120e357600080fd5b505190506120f7828263ffffffff613a9816565b92505b5050919050565b60008060008361211081613d87565b1515612154576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b61215d8561400a565b925082151561216f5760009350611766565b61218283600f87815481101515610fbc57fe5b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166341b3d1856040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b50518210156122ac57600e54604080517f41b3d18500000000000000000000000000000000000000000000000000000000815290516122a592600160a060020a0316916341b3d1859160048083019260209291908290030181600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b505050506040513d602081101561229557600080fd5b5051600f805488908110610fbc57fe5b9350611766565b829350611766565b6000806000806122c385612054565b92506122ce85612549565b9150818311156122dc578192505b6122e58561343f565b9050808310156122f3578092505b61176383610e6861230261176e565b889063ffffffff613a1f16565b6000806000600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561236757600080fd5b505af115801561237b573d6000803e3d6000fd5b505050506040513d602081101561239157600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b1580156123f057600080fd5b505af1158015612404573d6000803e3d6000fd5b505050506040513d602081101561241a57600080fd5b5051600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916349ce7fba916004808201926020929091908290030181600087803b15801561247f57600080fd5b505af1158015612493573d6000803e3d6000fd5b505050506040513d60208110156124a957600080fd5b50516124b3613199565b116124c157600092506124e3565b6124ca82611e32565b600c549091506124e0908263ffffffff61390a16565b92505b505090565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a75780601f1061117c576101008083540402835291602001916111a7565b6000806000600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050506040513d602081101561265457600080fd5b5051600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916349ce7fba916004808201926020929091908290030181600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b50516126ed613199565b116126fb57600092506120fa565b600c5461271790612712908663ffffffff61397316565b61343f565b90506120f7818363ffffffff61390a16565b816127343382613da4565b1515612778576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d60208110156127f557600080fd5b50513a1115612849576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600082116128a1576040805160e560020a62461bcd02815260206004820152601060248201527f5769746864726177696e67207a65726f00000000000000000000000000000000604482015290519081900360640190fd5b6128aa83612101565b821115612901576040805160e560020a62461bcd02815260206004820152601a60248201527f596f752063616e277420776974686472617720736f206d756368000000000000604482015290519081900360640190fd5b61291482600f85815481101515610fbc57fe5b600f80548590811061292257fe5b6000918252602090912060029091020155600c54612946908363ffffffff61390a16565b600c55604051339083156108fc029084906000818181858888f19350505050158015612976573d6000803e3d6000fd5b5060408051838152336020820152815185927f44e04225e1c94b9658e8e286f524b1138eee42b1a7b078c2aa32d08ca6187836928290030190a2505050565b600160a060020a0382163314156129cb57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600c5481565b61189981612a4c83612101565b612729565b612a5c848484611601565b612a6884848484614115565b1515612a7357600080fd5b50505050565b600080600080600085612a8b81613d87565b1515612acf576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b50513a1115612ba0576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d6020811015612c1d57600080fd5b5051612c288861168f565b1015612c7e576040805160e560020a62461bcd02815260206004820152601a60248201527f5468697320426f782069736e277420636f6c6c61707361626c65000000000000604482015290519081900360640190fd5b612cac670de0b6b3a7640000612ca06003600d54613a1f90919063ffffffff16565b9063ffffffff613a1f16565b612ce2612cb761176e565b600f80548b908110612cc557fe5b60009182526020909120600290910201549063ffffffff613a1f16565b10612d5d576040805160e560020a62461bcd02815260206004820152602360248201527f49742773206f6e6c7920706f737369626c6520746f20636f6c6c61707365206460448201527f7573740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600f805488908110612d6b57fe5b9060005260206000209060020201600101549550612d893387613b06565b600f805488908110612d9757fe5b9060005260206000209060020201600001549450612dca612db661176e565b600d54610e6890899063ffffffff613a1f16565b9350612e71612dd761176e565b600e54604080517f42a1bbd20000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916342a1bbd29160048083019260209291908290030181600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d6020811015612e6257600080fd5b5051899063ffffffff613a1f16565b9250612e7c87611e08565b9150600f87815481101515612e8d57fe5b60009182526020822060029091020181815560010155612ead8288613e03565b336108fc612ec1868663ffffffff61397316565b6040518115909202916000818181858888f19350505050158015612ee9573d6000803e3d6000fd5b50600c54612efd908663ffffffff61390a16565b600c556040513390600160a060020a0384169089907f6aad6465f8fcd0a392d97bc972091a7788b15336d4b99794af4db92c796597ef90600090a450505050505050565b6060612f4c82613d87565b1515612f5757600080fd5b6000828152600b602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015612fea5780601f10612fbf57610100808354040283529160200191612fea565b820191906000526020600020905b815481529060010190602001808311612fcd57829003601f168201915b50505050509050919050565b8161300081613d87565b1515613044576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b6000821161309c576040805160e560020a62461bcd02815260206004820152600b60248201527f446f6e2774206164642030000000000000000000000000000000000000000000604482015290519081900360640190fd5b600f8054849081106130aa57fe5b9060005260206000209060020201600101548211151515613115576040805160e560020a62461bcd02815260206004820152600f60248201527f546f6f206d75636820746f6b656e730000000000000000000000000000000000604482015290519081900360640190fd5b61311f3383613b06565b61313282600f85815481101515610e0657fe5b600f80548590811061314057fe5b600091825260209182902060016002909202010191909155604080518481523392810192909252805185927fee23b7ff85dbd7a5dfa19af54abdf77fedcab37b513ddc404550650d48c94fb392908290030190a2505050565b600080600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156131ef57600080fd5b505af1158015613203573d6000803e3d6000fd5b505050506040513d602081101561321957600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b505050506040513d60208110156132a257600080fd5b5051905080151561333357600e60009054906101000a9004600160a060020a0316600160a060020a03166349ce7fba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561330057600080fd5b505af1158015613314573d6000803e3d6000fd5b505050506040513d602081101561332a57600080fd5b50519150613354565b61335181610e6861334261176e565b600c549063ffffffff613a1f16565b91505b5090565b600d5481565b600e54600160a060020a031681565b600061337761452c565b60008361338381613d87565b15156133c7576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600f8054869081106133d557fe5b906000526020600020906002020160408051908101604052908160008201548152602001600182015481525050925061341183600001516138c1565b91508183602001511015156134295760009350611766565b602083015161176390839063ffffffff61390a16565b600080600061344f61175661176e565b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166349ce7fba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120b957600080fd5b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000611e2c6134df61176e565b600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916371ca337d9160048083019260209291908290030181600087803b158015611ea057600080fd5b8161354b3382613da4565b151561358f576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156135e257600080fd5b505af11580156135f6573d6000803e3d6000fd5b505050506040513d602081101561360c57600080fd5b50513a1115613660576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600082116136b8576040805160e560020a62461bcd02815260206004820152601060248201527f5769746864726177696e67207a65726f00000000000000000000000000000000604482015290519081900360640190fd5b6136c18361336d565b821115613718576040805160e560020a62461bcd02815260206004820152601a60248201527f596f752063616e277420776974686472617720736f206d756368000000000000604482015290519081900360640190fd5b61374b82600f8581548110151561372b57fe5b90600052602060002090600202016001015461397390919063ffffffff16565b600f80548590811061375957fe5b906000526020600020906002020160010181905550600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050506040513d60208110156137eb57600080fd5b5051604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b15801561385757600080fd5b505af115801561386b573d6000803e3d6000fd5b505050506040513d602081101561388157600080fd5b505060408051838152336020820152815185927fc1a2f1e37ea4986d1abf89749789373f22bae113a63d5144de597227ed6b5298928290030190a2505050565b6000806000806138d085612054565b92506138dc6000612549565b9150818311156138ea578192505b6138f38561343f565b905080831015613901578092505b50909392505050565b60008083831115613965576040805160e560020a62461bcd02815260206004820152600360248201527f7375620000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050808203805b5092915050565b600082820183811015611911576040805160e560020a62461bcd02815260206004820152600360248201527f6164640000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6139da8282614297565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688015550565b600080831515613a32576000915061396c565b50828202828482811515613a4257fe5b0414611911576040805160e560020a62461bcd02815260206004820152600360248201527f6d756c0000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080808311613af2576040805160e560020a62461bcd02815260206004820152600360248201527f6469760000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8284811515613afd57fe5b04949350505050565b6000811115611e0457600e54604080517f3e17866100000000000000000000000000000000000000000000000000000000815290518392600160a060020a031691633e1786619160048083019260209291908290030181600087803b158015613b6e57600080fd5b505af1158015613b82573d6000803e3d6000fd5b505050506040513d6020811015613b9857600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916370a082319160248083019260209291908290030181600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b505050506040513d6020811015613c2957600080fd5b50511015613c81576040805160e560020a62461bcd02815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7300000000604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613cd457600080fd5b505af1158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b5051604080517ff2fdca65000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152602482018590529151919092169163f2fdca6591604480830192600092919082900301818387803b158015613d6b57600080fd5b505af1158015613d7f573d6000803e3d6000fd5b505050505050565b600090815260016020526040902054600160a060020a0316151590565b600080613db083611e08565b905080600160a060020a031684600160a060020a03161480613deb575083600160a060020a0316613de0846111b2565b600160a060020a0316145b80613dfb5750613dfb81856134a4565b949350505050565b613e0d82826142f2565b6000818152600b60205260409020546002600019610100600184161502019091160415611e04576000818152600b60205260408120611e0491614543565b81600160a060020a0316613e5e82611e08565b600160a060020a031614613e7157600080fd5b600081815260026020526040902054600160a060020a031615611e04576000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916905550565b6000806000613ec985856143ae565b600084815260066020908152604080832054600160a060020a0389168452600590925290912054909350613f0490600163ffffffff61390a16565b600160a060020a038616600090815260056020526040902080549193509083908110613f2c57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515613f6c57fe5b6000918252602080832090910192909255600160a060020a0387168152600590915260409020805490613fa3906000198301614587565b50600093845260066020526040808520859055908452909220555050565b6000613fcd8383614444565b50600160a060020a039091166000908152600560209081526040808320805460018101825590845282842081018590559383526006909152902055565b600061401461452c565b600080600080600080600f8981548110151561402c57fe5b6000918252602091829020604080518082019091526002909202018054825260010154918101829052975015156140665786519750614109565b61406e61230f565b955060008611156140c05761408687602001516134d2565b935083876000015111156140c05786516140a6908563ffffffff61390a16565b9250858311156140b8578594506140c0565b829750614109565b6140cd8760200151611e32565b915081876000015111156141055786516140ed908363ffffffff61390a16565b90508481116140fc57846140fe565b805b9750614109565b8497505b50505050505050919050565b60008061412a85600160a060020a03166144d4565b1515614139576001915061428e565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a169463150b7a0294938c938b938b93909160a490910190602085019080838360005b838110156141cc5781810151838201526020016141b4565b50505050905090810190601f1680156141f95780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561421b57600080fd5b505af115801561422f573d6000803e3d6000fd5b505050506040513d602081101561424557600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981167f150b7a020000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600160a060020a03821615156142ac57600080fd5b6142b68282613fc1565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080600061430185856144dc565b60008481526008602052604090205460075490935061432790600163ffffffff61390a16565b915060078281548110151561433857fe5b906000526020600020015490508060078481548110151561435557fe5b6000918252602082200191909155600780548490811061437157fe5b6000918252602090912001556007805490614390906000198301614587565b50600093845260086020526040808520859055908452909220555050565b81600160a060020a03166143c182611e08565b600160a060020a0316146143d457600080fd5b600160a060020a0382166000908152600360205260409020546143fe90600163ffffffff61390a16565b600160a060020a03909216600090815260036020908152604080832094909455918152600190915220805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020526040902054600160a060020a03161561446657600080fd5b6000818152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881690811790915584526003909152909120546144b491613973565b600160a060020a0390921660009081526003602052604090209190915550565b6000903b1190565b6144e68282613e4b565b6144f08282613eba565b6040518190600090600160a060020a038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b604080518082019091526000808252602082015290565b50805460018160011615610100020316600290046000825580601f106145695750611899565b601f01602090049060005260206000209081019061189991906145a7565b8154818355818111156115fc576000838152602090206115fc9181019083015b6111af91905b8082111561335457600081556001016145ad56004761732070726963652069732067726561746572207468616e20616c6c6f7765426f7820646f6573206e6f742065786973740000000000000000000000000000426f782069736e277420796f7572000000000000000000000000000000000000a165627a7a723058201e5504b243464448fc8b88e97c03a11c8d4192302f6bb5fc22fc799fe9abb2b80029000000000000000000000000680d335f7978e85de2a3168bd07c27b6ceaa7908
Deployed Bytecode
0x6080604052600436106102205763ffffffff60e060020a6000350416621ed41f811461022d57806301ffc9a71461024a57806306fdde0314610295578063081812fc1461031f578063095ea7b3146103535780630aebeb4e1461037757806318160ddd1461038f5780631ac3ddeb146103b657806323b872dd146103d757806326526df3146104015780632c4e722e146104195780632f18b73a1461042e5780632f745c591461044657806342842e0e1461046a578063430c2081146104945780634ed3faf2146104b85780634f6ccce7146104e957806354bc33fe146105015780635524bc9d146105195780636352211e146105315780636574ab93146105495780636708ec141461056157806370a082311461056c578063780900dc1461058d5780637f9733811461059857806380012393146105b05780638dc5c936146105c85780639288aab3146105e057806395d89b41146105f55780639c17b0491461060a5780639c99e2b914610622578063a22cb4651461063d578063ac75c7f714610663578063ad3e1f6f14610678578063b88d4fde14610690578063c1acbde6146106ff578063c87b56dd14610717578063cd0752661461072f578063d12d7d651461074a578063d3b5dc3b1461075f578063e06174e414610774578063e0728bae14610789578063e7e1109e146107a1578063e985e9c5146107b9578063eac3a2a4146107e0578063eca393e8146107f8578063f3579e5414610813575b61022a600061082b565b50005b34801561023957600080fd5b50610248600435602435610ca3565b005b34801561025657600080fd5b506102817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166110e7565b604080519115158252519081900360200190f35b3480156102a157600080fd5b506102aa61111b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e45781810151838201526020016102cc565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b506103376004356111b2565b60408051600160a060020a039092168252519081900360200190f35b34801561035f57600080fd5b50610248600160a060020a03600435166024356111e4565b34801561038357600080fd5b5061024860043561129a565b34801561039b57600080fd5b506103a461140a565b60408051918252519081900360200190f35b3480156103c257600080fd5b50610248600160a060020a0360043516611410565b3480156103e357600080fd5b50610248600160a060020a0360043581169060243516604435611601565b34801561040d57600080fd5b506103a460043561168f565b34801561042557600080fd5b506103a461176e565b34801561043a57600080fd5b50610248600435611887565b34801561045257600080fd5b506103a4600160a060020a036004351660243561189c565b34801561047657600080fd5b50610248600160a060020a03600435811690602435166044356118e9565b3480156104a057600080fd5b50610281600160a060020a0360043516602435611905565b3480156104c457600080fd5b506104d0600435611918565b6040805192835260208301919091528051918290030190f35b3480156104f557600080fd5b506103a4600435611944565b34801561050d57600080fd5b506103a4600435611979565b34801561052557600080fd5b50610248600435611da3565b34801561053d57600080fd5b50610337600435611e08565b34801561055557600080fd5b506103a4600435611e32565b610248600435611ed9565b34801561057857600080fd5b506103a4600160a060020a0360043516612021565b6103a460043561082b565b3480156105a457600080fd5b506103a4600435612054565b3480156105bc57600080fd5b506103a4600435612101565b3480156105d457600080fd5b506103a46004356122b4565b3480156105ec57600080fd5b506103a461230f565b34801561060157600080fd5b506102aa6124e8565b34801561061657600080fd5b506103a4600435612549565b34801561062e57600080fd5b50610248600435602435612729565b34801561064957600080fd5b50610248600160a060020a036004351660243515156129b5565b34801561066f57600080fd5b506103a4612a39565b34801561068457600080fd5b50610248600435612a3f565b34801561069c57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261024894600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750612a519650505050505050565b34801561070b57600080fd5b50610248600435612a79565b34801561072357600080fd5b506102aa600435612f41565b34801561073b57600080fd5b50610248600435602435612ff6565b34801561075657600080fd5b506103a4613199565b34801561076b57600080fd5b506103a4613358565b34801561078057600080fd5b5061033761335e565b34801561079557600080fd5b506103a460043561336d565b3480156107ad57600080fd5b506103a460043561343f565b3480156107c557600080fd5b50610281600160a060020a03600435811690602435166134a4565b3480156107ec57600080fd5b506103a46004356134d2565b34801561080457600080fd5b50610248600435602435613540565b34801561081f57600080fd5b506103a46004356138c1565b6000806000806000600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561088657600080fd5b505af115801561089a573d6000803e3d6000fd5b505050506040513d60208110156108b057600080fd5b50513a1115610904576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a03166341b3d1856040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561095757600080fd5b505af115801561096b573d6000803e3d6000fd5b505050506040513d602081101561098157600080fd5b50513410156109da576040805160e560020a62461bcd02815260206004820152601560248201527f4465706f736974206973207665727920736d616c6c0000000000000000000000604482015290519081900360640190fd5b6000861115610bb0576109ec34612054565b93506109f734612549565b925082841115610a05578293505b610a0e3461343f565b915081841015610a1c578193505b83861115610a9a576040805160e560020a62461bcd02815260206004820152602360248201527f546f6b656e20616d6f756e74206973206d6f7265207468616e20617661696c6160448201527f626c650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050506040513d6020811015610b1757600080fd5b5051604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018990529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b158015610b8357600080fd5b505af1158015610b97573d6000803e3d6000fd5b505050506040513d6020811015610bad57600080fd5b50505b6040805180820190915234815260208101878152600f8054600180820180845560009390935293517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80260029092029182015591517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80390920191909155610c359161390a565b600c54909150610c4b903463ffffffff61397316565b600c55610c5833826139d0565b60408051338152346020820152808201889052905182917f21414cdba6b56757af56c4673643b26d24349f57c89f66dff6744d42682243f2919081900360600190a295945050505050565b600080600080600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b505050506040513d6020811015610d2657600080fd5b50513a1115610d7a576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b610d8386611979565b9350838511158015610d9d575067016345785d8a00008510155b1515610df3576040805160e560020a62461bcd02815260206004820152601a60248201527f546f6b656e7320616d6f756e74206f7574206f662072616e6765000000000000604482015290519081900360640190fd5b610e2685600f88815481101515610e0657fe5b90600052602060002090600202016001015461390a90919063ffffffff16565b600f805488908110610e3457fe5b906000526020600020906002020160010181905550610e74610e5461176e565b600d54610e6890889063ffffffff613a1f16565b9063ffffffff613a9816565b9250610f1b610e8161176e565b600e54604080517f29b2d0400000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916329b2d0409160048083019260209291908290030181600087803b158015610ee257600080fd5b505af1158015610ef6573d6000803e3d6000fd5b505050506040513d6020811015610f0c57600080fd5b5051889063ffffffff613a1f16565b9150610f89610f2861176e565b600e54604080517f42a1bbd20000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916342a1bbd29160048083019260209291908290030181600087803b158015610ee257600080fd5b9050610fd9610fae84610fa2858563ffffffff61397316565b9063ffffffff61397316565b600f805489908110610fbc57fe5b60009182526020909120600290910201549063ffffffff61390a16565b600f805488908110610fe757fe5b600091825260209091206002909102015561101e61100f84610fa2858563ffffffff61397316565b600c549063ffffffff61390a16565b600c5561102b3386613b06565b336108fc61103f858463ffffffff61397316565b6040518115909202916000818181858888f19350505050158015611067573d6000803e3d6000fd5b503361107287611e08565b600160a060020a0316877f20e55fcaa4f79f9301a01428669c19cb0d83662c3d530422d6e0cb84d9a70080886110b287610fa28a8963ffffffff61397316565b6110c2898863ffffffff61397316565b60408051938452602084019290925282820152519081900360600190a4505050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a75780601f1061117c576101008083540402835291602001916111a7565b820191906000526020600020905b81548152906001019060200180831161118a57829003601f168201915b505050505090505b90565b60006111bd82613d87565b15156111c857600080fd5b50600090815260026020526040902054600160a060020a031690565b60006111ef82611e08565b9050600160a060020a03838116908216141561120a57600080fd5b33600160a060020a0382161480611226575061122681336134a4565b151561123157600080fd5b600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000806000836112aa3382613da4565b15156112ee576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600085815260016020526040902054600f8054600160a060020a039092169550908690811061131957fe5b90600052602060002090600202016001015492506113373384613b06565b600f80548690811061134557fe5b90600052602060002090600202016000015491506113638486613e03565b600f80548690811061137157fe5b600091825260208220600290910201818155600101819055604051339184156108fc02918591818181858888f193505050501580156113b4573d6000803e3d6000fd5b50600c546113c8908363ffffffff61390a16565b600c556040513390600160a060020a0386169087907f6aad6465f8fcd0a392d97bc972091a7788b15336d4b99794af4db92c796597ef90600090a45050505050565b60075490565b600e54604080517f3fcbaa7d0000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a031691633fcbaa7d91602480830192602092919082900301818787803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050506040513d602081101561149f57600080fd5b505115156114f7576040805160e560020a62461bcd02815260206004820152601260248201527f596f752068617665206e6f206163636573730000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0382161515611557576040805160e560020a62461bcd02815260206004820152601860248201527f5a65726f20616464726573732c206265206361726566756c0000000000000000604482015290519081900360640190fd5b600c5461156c9030319063ffffffff61390a16565b9050600081116115c6576040805160e560020a62461bcd02815260206004820152601a60248201527f5468657265206973206e6f20617661696c61626c652066656573000000000000604482015290519081900360640190fd5b604051600160a060020a0383169082156108fc029083906000818181858888f193505050501580156115fc573d6000803e3d6000fd5b505050565b61160b3382613da4565b151561161657600080fd5b600160a060020a038216151561162b57600080fd5b6116358382613e4b565b61163f8382613eba565b6116498282613fc1565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061169961452c565b6000836116a581613d87565b15156116e9576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600f8054869081106116f757fe5b60009182526020918290206040805180820190915260029092020180548252600101549181018290529350151561173c576b033b2e3c9fd0803ce80000009350611766565b826000015191506117638360200151610e6861175661176e565b859063ffffffff613a1f16565b93505b505050919050565b600e54604080517fa89ae4ba0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163a89ae4ba91600480830192602092919082900301818787803b1580156117cd57600080fd5b505af11580156117e1573d6000803e3d6000fd5b505050506040513d60208110156117f757600080fd5b5051604080517f9478ab8c0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691639478ab8c916004808201926020929091908290030181600087803b15801561185657600080fd5b505af115801561186a573d6000803e3d6000fd5b505050506040513d602081101561188057600080fd5b5051905090565b6118998161189483611979565b610ca3565b50565b60006118a783612021565b82106118b257600080fd5b600160a060020a03831660009081526005602052604090208054839081106118d657fe5b9060005260206000200154905092915050565b6115fc8383836020604051908101604052806000815250612a51565b60006119118383613da4565b9392505050565b600f80548290811061192657fe5b60009182526020909120600290910201805460019091015490915082565b600061194e61140a565b821061195957600080fd5b600780548390811061196757fe5b90600052602060002001549050919050565b60008061198461452c565b6000808561199181613d87565b15156119d5576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b6119de8761168f565b9450600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050506040513d6020811015611a5d57600080fd5b50518510801590611aeb5750600e60009054906101000a9004600160a060020a0316600160a060020a031663e7ab6de56040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d6020811015611ae657600080fd5b505185105b1515611b67576040805160e560020a62461bcd02815260206004820152602c60248201527f49742773206f6e6c7920706f737369626c6520746f206361706974616c697a6560448201527f20746f78696320426f7865730000000000000000000000000000000000000000606482015290519081900360840190fd5b600f805488908110611b7557fe5b9060005260206000209060020201604080519081016040529081600082015481526020016001820154815250509350611c6a611bc0611bb261176e565b86519063ffffffff613a1f16565b600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051611c5e92600160a060020a0316916371ca337d9160048083019260209291908290030181600087803b158015611c2157600080fd5b505af1158015611c35573d6000803e3d6000fd5b505050506040513d6020811015611c4b57600080fd5b505160208801519063ffffffff613a1f16565b9063ffffffff61390a16565b9250611d86600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d6020811015611cec57600080fd5b5051600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916371ca337d916004808201926020929091908290030181600087803b158015611d4e57600080fd5b505af1158015611d62573d6000803e3d6000fd5b505050506040513d6020811015611d7857600080fd5b50519063ffffffff61390a16565b9150611d98838363ffffffff613a9816565b979650505050505050565b80611dae3382613da4565b1515611df2576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b611e0482611dff8461336d565b613540565b5050565b600081815260016020526040812054600160a060020a0316801515611e2c57600080fd5b92915050565b6000611e2c611e3f61176e565b600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916349ce7fba9160048083019260209291908290030181600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b505050506040513d6020811015611eca57600080fd5b5051859063ffffffff613a1f16565b80611ee381613d87565b1515611f27576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b60003411611f7f576040805160e560020a62461bcd02815260206004820152600b60248201527f446f6e2774206164642030000000000000000000000000000000000000000000604482015290519081900360640190fd5b611faf34600f84815481101515611f9257fe5b60009182526020909120600290910201549063ffffffff61397316565b600f805484908110611fbd57fe5b6000918252602090912060029091020155600c54611fe1903463ffffffff61397316565b600c5560408051348152336020820152815184927f313dcd8724daa6302f380e681cf360dfed18ad95b548ded3c378c610e1b56bdf928290030190a25050565b6000600160a060020a038216151561203857600080fd5b50600160a060020a031660009081526003602052604090205490565b600080600061206461175661176e565b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166371ca337d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120b957600080fd5b505af11580156120cd573d6000803e3d6000fd5b505050506040513d60208110156120e357600080fd5b505190506120f7828263ffffffff613a9816565b92505b5050919050565b60008060008361211081613d87565b1515612154576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b61215d8561400a565b925082151561216f5760009350611766565b61218283600f87815481101515610fbc57fe5b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166341b3d1856040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121d757600080fd5b505af11580156121eb573d6000803e3d6000fd5b505050506040513d602081101561220157600080fd5b50518210156122ac57600e54604080517f41b3d18500000000000000000000000000000000000000000000000000000000815290516122a592600160a060020a0316916341b3d1859160048083019260209291908290030181600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b505050506040513d602081101561229557600080fd5b5051600f805488908110610fbc57fe5b9350611766565b829350611766565b6000806000806122c385612054565b92506122ce85612549565b9150818311156122dc578192505b6122e58561343f565b9050808310156122f3578092505b61176383610e6861230261176e565b889063ffffffff613a1f16565b6000806000600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561236757600080fd5b505af115801561237b573d6000803e3d6000fd5b505050506040513d602081101561239157600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b1580156123f057600080fd5b505af1158015612404573d6000803e3d6000fd5b505050506040513d602081101561241a57600080fd5b5051600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916349ce7fba916004808201926020929091908290030181600087803b15801561247f57600080fd5b505af1158015612493573d6000803e3d6000fd5b505050506040513d60208110156124a957600080fd5b50516124b3613199565b116124c157600092506124e3565b6124ca82611e32565b600c549091506124e0908263ffffffff61390a16565b92505b505090565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111a75780601f1061117c576101008083540402835291602001916111a7565b6000806000600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125a157600080fd5b505af11580156125b5573d6000803e3d6000fd5b505050506040513d60208110156125cb57600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050506040513d602081101561265457600080fd5b5051600e54604080517f49ce7fba0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916349ce7fba916004808201926020929091908290030181600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b505050506040513d60208110156126e357600080fd5b50516126ed613199565b116126fb57600092506120fa565b600c5461271790612712908663ffffffff61397316565b61343f565b90506120f7818363ffffffff61390a16565b816127343382613da4565b1515612778576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156127cb57600080fd5b505af11580156127df573d6000803e3d6000fd5b505050506040513d60208110156127f557600080fd5b50513a1115612849576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600082116128a1576040805160e560020a62461bcd02815260206004820152601060248201527f5769746864726177696e67207a65726f00000000000000000000000000000000604482015290519081900360640190fd5b6128aa83612101565b821115612901576040805160e560020a62461bcd02815260206004820152601a60248201527f596f752063616e277420776974686472617720736f206d756368000000000000604482015290519081900360640190fd5b61291482600f85815481101515610fbc57fe5b600f80548590811061292257fe5b6000918252602090912060029091020155600c54612946908363ffffffff61390a16565b600c55604051339083156108fc029084906000818181858888f19350505050158015612976573d6000803e3d6000fd5b5060408051838152336020820152815185927f44e04225e1c94b9658e8e286f524b1138eee42b1a7b078c2aa32d08ca6187836928290030190a2505050565b600160a060020a0382163314156129cb57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600c5481565b61189981612a4c83612101565b612729565b612a5c848484611601565b612a6884848484614115565b1515612a7357600080fd5b50505050565b600080600080600085612a8b81613d87565b1515612acf576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612b2257600080fd5b505af1158015612b36573d6000803e3d6000fd5b505050506040513d6020811015612b4c57600080fd5b50513a1115612ba0576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663e888a99e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015612bf357600080fd5b505af1158015612c07573d6000803e3d6000fd5b505050506040513d6020811015612c1d57600080fd5b5051612c288861168f565b1015612c7e576040805160e560020a62461bcd02815260206004820152601a60248201527f5468697320426f782069736e277420636f6c6c61707361626c65000000000000604482015290519081900360640190fd5b612cac670de0b6b3a7640000612ca06003600d54613a1f90919063ffffffff16565b9063ffffffff613a1f16565b612ce2612cb761176e565b600f80548b908110612cc557fe5b60009182526020909120600290910201549063ffffffff613a1f16565b10612d5d576040805160e560020a62461bcd02815260206004820152602360248201527f49742773206f6e6c7920706f737369626c6520746f20636f6c6c61707365206460448201527f7573740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600f805488908110612d6b57fe5b9060005260206000209060020201600101549550612d893387613b06565b600f805488908110612d9757fe5b9060005260206000209060020201600001549450612dca612db661176e565b600d54610e6890899063ffffffff613a1f16565b9350612e71612dd761176e565b600e54604080517f42a1bbd20000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916342a1bbd29160048083019260209291908290030181600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d6020811015612e6257600080fd5b5051899063ffffffff613a1f16565b9250612e7c87611e08565b9150600f87815481101515612e8d57fe5b60009182526020822060029091020181815560010155612ead8288613e03565b336108fc612ec1868663ffffffff61397316565b6040518115909202916000818181858888f19350505050158015612ee9573d6000803e3d6000fd5b50600c54612efd908663ffffffff61390a16565b600c556040513390600160a060020a0384169089907f6aad6465f8fcd0a392d97bc972091a7788b15336d4b99794af4db92c796597ef90600090a450505050505050565b6060612f4c82613d87565b1515612f5757600080fd5b6000828152600b602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015612fea5780601f10612fbf57610100808354040283529160200191612fea565b820191906000526020600020905b815481529060010190602001808311612fcd57829003601f168201915b50505050509050919050565b8161300081613d87565b1515613044576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b6000821161309c576040805160e560020a62461bcd02815260206004820152600b60248201527f446f6e2774206164642030000000000000000000000000000000000000000000604482015290519081900360640190fd5b600f8054849081106130aa57fe5b9060005260206000209060020201600101548211151515613115576040805160e560020a62461bcd02815260206004820152600f60248201527f546f6f206d75636820746f6b656e730000000000000000000000000000000000604482015290519081900360640190fd5b61311f3383613b06565b61313282600f85815481101515610e0657fe5b600f80548590811061314057fe5b600091825260209182902060016002909202010191909155604080518481523392810192909252805185927fee23b7ff85dbd7a5dfa19af54abdf77fedcab37b513ddc404550650d48c94fb392908290030190a2505050565b600080600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156131ef57600080fd5b505af1158015613203573d6000803e3d6000fd5b505050506040513d602081101561321957600080fd5b5051604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216916318160ddd916004808201926020929091908290030181600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b505050506040513d60208110156132a257600080fd5b5051905080151561333357600e60009054906101000a9004600160a060020a0316600160a060020a03166349ce7fba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561330057600080fd5b505af1158015613314573d6000803e3d6000fd5b505050506040513d602081101561332a57600080fd5b50519150613354565b61335181610e6861334261176e565b600c549063ffffffff613a1f16565b91505b5090565b600d5481565b600e54600160a060020a031681565b600061337761452c565b60008361338381613d87565b15156133c7576040805160e560020a62461bcd02815260206004820152601260248201526000805160206145e2833981519152604482015290519081900360640190fd5b600f8054869081106133d557fe5b906000526020600020906002020160408051908101604052908160008201548152602001600182015481525050925061341183600001516138c1565b91508183602001511015156134295760009350611766565b602083015161176390839063ffffffff61390a16565b600080600061344f61175661176e565b9150600e60009054906101000a9004600160a060020a0316600160a060020a03166349ce7fba6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120b957600080fd5b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000611e2c6134df61176e565b600e54604080517f71ca337d0000000000000000000000000000000000000000000000000000000081529051610e6892600160a060020a0316916371ca337d9160048083019260209291908290030181600087803b158015611ea057600080fd5b8161354b3382613da4565b151561358f576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020614602833981519152604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a031663961a929c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156135e257600080fd5b505af11580156135f6573d6000803e3d6000fd5b505050506040513d602081101561360c57600080fd5b50513a1115613660576040805160e560020a62461bcd02815260206004820152602160248201526000805160206145c2833981519152604482015260fa60020a601902606482015290519081900360840190fd5b600082116136b8576040805160e560020a62461bcd02815260206004820152601060248201527f5769746864726177696e67207a65726f00000000000000000000000000000000604482015290519081900360640190fd5b6136c18361336d565b821115613718576040805160e560020a62461bcd02815260206004820152601a60248201527f596f752063616e277420776974686472617720736f206d756368000000000000604482015290519081900360640190fd5b61374b82600f8581548110151561372b57fe5b90600052602060002090600202016001015461397390919063ffffffff16565b600f80548590811061375957fe5b906000526020600020906002020160010181905550600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050506040513d60208110156137eb57600080fd5b5051604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051600160a060020a03909216916340c10f19916044808201926020929091908290030181600087803b15801561385757600080fd5b505af115801561386b573d6000803e3d6000fd5b505050506040513d602081101561388157600080fd5b505060408051838152336020820152815185927fc1a2f1e37ea4986d1abf89749789373f22bae113a63d5144de597227ed6b5298928290030190a2505050565b6000806000806138d085612054565b92506138dc6000612549565b9150818311156138ea578192505b6138f38561343f565b905080831015613901578092505b50909392505050565b60008083831115613965576040805160e560020a62461bcd02815260206004820152600360248201527f7375620000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050808203805b5092915050565b600082820183811015611911576040805160e560020a62461bcd02815260206004820152600360248201527f6164640000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6139da8282614297565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688015550565b600080831515613a32576000915061396c565b50828202828482811515613a4257fe5b0414611911576040805160e560020a62461bcd02815260206004820152600360248201527f6d756c0000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080808311613af2576040805160e560020a62461bcd02815260206004820152600360248201527f6469760000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8284811515613afd57fe5b04949350505050565b6000811115611e0457600e54604080517f3e17866100000000000000000000000000000000000000000000000000000000815290518392600160a060020a031691633e1786619160048083019260209291908290030181600087803b158015613b6e57600080fd5b505af1158015613b82573d6000803e3d6000fd5b505050506040513d6020811015613b9857600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916370a082319160248083019260209291908290030181600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b505050506040513d6020811015613c2957600080fd5b50511015613c81576040805160e560020a62461bcd02815260206004820152601c60248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7300000000604482015290519081900360640190fd5b600e60009054906101000a9004600160a060020a0316600160a060020a0316633e1786616040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613cd457600080fd5b505af1158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b5051604080517ff2fdca65000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152602482018590529151919092169163f2fdca6591604480830192600092919082900301818387803b158015613d6b57600080fd5b505af1158015613d7f573d6000803e3d6000fd5b505050505050565b600090815260016020526040902054600160a060020a0316151590565b600080613db083611e08565b905080600160a060020a031684600160a060020a03161480613deb575083600160a060020a0316613de0846111b2565b600160a060020a0316145b80613dfb5750613dfb81856134a4565b949350505050565b613e0d82826142f2565b6000818152600b60205260409020546002600019610100600184161502019091160415611e04576000818152600b60205260408120611e0491614543565b81600160a060020a0316613e5e82611e08565b600160a060020a031614613e7157600080fd5b600081815260026020526040902054600160a060020a031615611e04576000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916905550565b6000806000613ec985856143ae565b600084815260066020908152604080832054600160a060020a0389168452600590925290912054909350613f0490600163ffffffff61390a16565b600160a060020a038616600090815260056020526040902080549193509083908110613f2c57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a0316815260200190815260200160002084815481101515613f6c57fe5b6000918252602080832090910192909255600160a060020a0387168152600590915260409020805490613fa3906000198301614587565b50600093845260066020526040808520859055908452909220555050565b6000613fcd8383614444565b50600160a060020a039091166000908152600560209081526040808320805460018101825590845282842081018590559383526006909152902055565b600061401461452c565b600080600080600080600f8981548110151561402c57fe5b6000918252602091829020604080518082019091526002909202018054825260010154918101829052975015156140665786519750614109565b61406e61230f565b955060008611156140c05761408687602001516134d2565b935083876000015111156140c05786516140a6908563ffffffff61390a16565b9250858311156140b8578594506140c0565b829750614109565b6140cd8760200151611e32565b915081876000015111156141055786516140ed908363ffffffff61390a16565b90508481116140fc57846140fe565b805b9750614109565b8497505b50505050505050919050565b60008061412a85600160a060020a03166144d4565b1515614139576001915061428e565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a169463150b7a0294938c938b938b93909160a490910190602085019080838360005b838110156141cc5781810151838201526020016141b4565b50505050905090810190601f1680156141f95780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561421b57600080fd5b505af115801561422f573d6000803e3d6000fd5b505050506040513d602081101561424557600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981167f150b7a020000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b600160a060020a03821615156142ac57600080fd5b6142b68282613fc1565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600080600061430185856144dc565b60008481526008602052604090205460075490935061432790600163ffffffff61390a16565b915060078281548110151561433857fe5b906000526020600020015490508060078481548110151561435557fe5b6000918252602082200191909155600780548490811061437157fe5b6000918252602090912001556007805490614390906000198301614587565b50600093845260086020526040808520859055908452909220555050565b81600160a060020a03166143c182611e08565b600160a060020a0316146143d457600080fd5b600160a060020a0382166000908152600360205260409020546143fe90600163ffffffff61390a16565b600160a060020a03909216600090815260036020908152604080832094909455918152600190915220805473ffffffffffffffffffffffffffffffffffffffff19169055565b600081815260016020526040902054600160a060020a03161561446657600080fd5b6000818152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881690811790915584526003909152909120546144b491613973565b600160a060020a0390921660009081526003602052604090209190915550565b6000903b1190565b6144e68282613e4b565b6144f08282613eba565b6040518190600090600160a060020a038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b604080518082019091526000808252602082015290565b50805460018160011615610100020316600290046000825580601f106145695750611899565b601f01602090049060005260206000209081019061189991906145a7565b8154818355818111156115fc576000838152602090206115fc9181019083015b6111af91905b8082111561335457600081556001016145ad56004761732070726963652069732067726561746572207468616e20616c6c6f7765426f7820646f6573206e6f742065786973740000000000000000000000000000426f782069736e277420796f7572000000000000000000000000000000000000a165627a7a723058201e5504b243464448fc8b88e97c03a11c8d4192302f6bb5fc22fc799fe9abb2b80029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000680d335f7978e85de2a3168bd07c27b6ceaa7908
-----Decoded View---------------
Arg [0] : _settings (address): 0x680d335f7978e85DE2a3168bD07c27B6ceaa7908
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000680d335f7978e85de2a3168bd07c27b6ceaa7908
Deployed Bytecode Sourcemap
149:22594:14:-;;;;;;;;;-1:-1:-1;;;149:22594:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3587:9;3594:1;3587:6;:9::i;:::-;;149:22594;7662:1479;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7662:1479:14;;;;;;;;;776:133:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;776:133:1;-1:-1:-1;;776:133:1;;;;;;;;;;;;;;;;;;;;;;;1000:83:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1000:83:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1000:83:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3667:151:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3667:151:2;;;;;;;;;-1:-1:-1;;;;;3667:151:2;;;;;;;;;;;;;;3090:292;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3090:292:2;-1:-1:-1;;;;;3090:292:2;;;;;;;6368:798:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6368:798:14;;;;;1983:94:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1983:94:3;;;;;;;;;;;;;;;;;;;;3644:527:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3644:527:14;-1:-1:-1;;;;;3644:527:14;;;;;5222:330:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5222:330:2;-1:-1:-1;;;;;5222:330:2;;;;;;;;;;;;17680:440:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17680:440:14;;;;;14523:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14523:116:14;;;;7373:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7373:96:14;;;;;1649:182:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1649:182:3;-1:-1:-1;;;;;1649:182:3;;;;;;;6191:181:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6191:181:2;-1:-1:-1;;;;;6191:181:2;;;;;;;;;;;;18317:154:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18317:154:14;-1:-1:-1;;;;;18317:154:14;;;;;;;560:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;560:18:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:148:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2414:148:3;;;;;21076:504:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21076:504:14;;;;;10528:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10528:129:14;;;;;2492:177:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2492:177:2;;;;;20566:162:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20566:162:14;;;;;11549:388;;;;;;2118:150:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2118:150:2;-1:-1:-1;;;;;2118:150:2;;;;;4401:1769:14;;;;;;20265:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20265:210:14;;;;;15227:512;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15227:512:14;;;;;22262:479;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22262:479:14;;;;;19407:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19407:346:14;;;;1191:87:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1191:87:4;;;;18923:398:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18923:398:14;;;;;9678:618;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9678:618:14;;;;;;;4110:213:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4110:213:2;-1:-1:-1;;;;;4110:213:2;;;;;;;;;216:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;216:24:14;;;;9368:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9368:101:14;;;;;7077:260:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7077:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7077:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7077:260:2;;-1:-1:-1;7077:260:2;;-1:-1:-1;;;;;;;7077:260:2;12746:1364:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12746:1364:14;;;;;1477:151:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1477:151:4;;;;;12072:478:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12072:478:14;;;;;;;18536:293;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18536:293:14;;;;293:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;293:33:14;;;;384:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;384:25:14;;;;14724:418;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14724:418:14;;;;;19880:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19880:234:14;;;;;4644:145:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4644:145:2;-1:-1:-1;;;;;4644:145:2;;;;;;;;;;20853:138:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20853:138:14;;;;;10872:592;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10872:592:14;;;;;;;21698:438;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21698:438:14;;;;;4401:1769;4476:7;4812:19;4963:18;5250:14;5779:11;2489:8;;;;;;;;;-1:-1:-1;;;;;2489:8:14;-1:-1:-1;;;;;2489:22:14;;:24;;;;;-1:-1:-1;;;2489:24:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2489:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2489:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2489:24:14;2474:11;:39;;2466:85;;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2466:85:14;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;;;;4583:8;;;;;;;;;-1:-1:-1;;;;;4583:8:14;-1:-1:-1;;;;;4583:19:14;;:21;;;;;-1:-1:-1;;;4583:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4583:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4583:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4583:21:14;4570:9;:34;;4562:68;;;;;-1:-1:-1;;;;;4562:68:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;4727:1;4707:17;:21;4703:1033;;;4834:33;4857:9;4834:22;:33::i;:::-;4812:55;;4984:32;5006:9;4984:21;:32::i;:::-;4963:53;;5102:10;5088:11;:24;5084:87;;;5146:10;5132:24;;5084:87;5267:33;5290:9;5267:22;:33::i;:::-;5250:50;;5386:6;5372:11;:20;5368:79;;;5426:6;5412:20;;5368:79;5523:32;;;;5515:80;;;;;-1:-1:-1;;;;;5515:80:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5667:8;;;;;;;;;-1:-1:-1;;;;;5667:8:14;-1:-1:-1;;;;;5667:19:14;;:21;;;;;-1:-1:-1;;;5667:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5667:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5667:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5667:21:14;5660:65;;;;;;5695:10;5660:65;;;;;;;;;;;;-1:-1:-1;;;;;5660:34:14;;;;;;:65;;;;;5667:21;;5660:65;;;;;;;;-1:-1:-1;5660:34:14;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;5660:65:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5660:65:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;4703:1033:14;5804:33;;;;;;;;;5808:9;5804:33;;;;;;;;5793:5;27:10:-1;;5843:1:14;23:18:-1;;;45:23;;;-1:-1;5793:45:14;;;;;;;;;;;;;;;;;;;;;;;;;:52;;:49;:52::i;:::-;5909:9;;5779:66;;-1:-1:-1;5909:24:14;;5923:9;5909:24;:13;:24;:::i;:::-;5897:9;:36;5989:22;5995:10;6007:3;5989:5;:22::i;:::-;6053:54;;;6066:10;6053:54;;6078:9;6053:54;;;;;;;;;;;;6061:3;;6053:54;;;;;;;;;;6160:3;4401:1769;-1:-1:-1;;;;;4401:1769:14:o;7662:1479::-;7808:21;8219:22;8318:12;8415:19;2489:8;;;;;;;;;-1:-1:-1;;;;;2489:8:14;-1:-1:-1;;;;;2489:22:14;;:24;;;;;-1:-1:-1;;;2489:24:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2489:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2489:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2489:24:14;2474:11;:39;;2466:85;;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2466:85:14;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;;;;7832:17;7845:3;7832:12;:17::i;:::-;7808:41;;7914:13;7906:4;:21;;:41;;;;;7939:8;7931:4;:16;;7906:41;7898:80;;;;;;;-1:-1:-1;;;;;7898:80:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;8060:32;8087:4;8060:5;8066:3;8060:10;;;;;;;;;;;;;;;;;;;;:22;;;:26;;:32;;;;:::i;:::-;8035:5;:10;;8041:3;;8035:10;;;;;;;;;;;;;;;;:22;;:57;;;;8244:31;8268:6;:4;:6::i;:::-;8253:9;;8244:19;;:4;;:19;:8;:19;:::i;:::-;:23;:31;:23;:31;:::i;:::-;8219:56;;8333:39;8365:6;:4;:6::i;:::-;8342:8;;:17;;;;;;;;8333:27;;-1:-1:-1;;;;;8342:8:14;;:15;;:17;;;;;;;;;;;;;;:8;;:17;;;5:2:-1;;;;30:1;27;20:12;5:2;8342:17:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8342:17:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8342:17:14;8333:4;;:27;:8;:27;:::i;:39::-;8318:54;;8437:40;8470:6;:4;:6::i;:::-;8446:8;;:18;;;;;;;;8437:28;;-1:-1:-1;;;;;8446:8:14;;:16;;:18;;;;;;;;;;;;;;:8;;:18;;;5:2:-1;;;;30:1;27;20:12;8437:40:14;8415:62;-1:-1:-1;8556:68:14;8582:41;8608:14;8582:21;:4;8415:62;8582:21;:8;:21;:::i;:::-;:25;:41;:25;:41;:::i;:::-;8556:5;:10;;8562:3;;8556:10;;;;;;;;;;;;;;;;;;;:21;;:68;:25;:68;:::i;:::-;8532:5;:10;;8538:3;;8532:10;;;;;;;;;;;;;;;;;;;:92;8688:56;8702:41;8728:14;8702:21;:4;8711:11;8702:21;:8;:21;:::i;:41::-;8688:9;;;:56;:13;:56;:::i;:::-;8676:9;:68;8781:26;8790:10;8802:4;8781:8;:26::i;:::-;8916:10;:52;8936:31;:14;8955:11;8936:31;:18;:31;:::i;:::-;8916:52;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9041:10:14;9027:12;9035:3;9027:7;:12::i;:::-;-1:-1:-1;;;;;9010:124:14;9022:3;9010:124;9053:4;9059:41;9095:4;9059:31;:14;9078:11;9059:31;:18;:31;:::i;:41::-;9102:31;:14;9121:11;9102:31;:18;:31;:::i;:::-;9010:124;;;;;;;;;;;;;;;;;;;;;;;;;;7662:1479;;;;;;:::o;776:133:1:-;-1:-1:-1;;869:33:1;846:4;869:33;;;;;;;;;;;;;;776:133::o;1000:83:4:-;1071:5;1064:12;;;;;;;;-1:-1:-1;;1064:12:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1039:6;;1064:12;;1071:5;;1064:12;;1071:5;1064:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:83;;:::o;3667:151:2:-;3726:7;3753:16;3761:7;3753;:16::i;:::-;3745:25;;;;;;;;-1:-1:-1;3787:24:2;;;;:15;:24;;;;;;-1:-1:-1;;;;;3787:24:2;;3667:151::o;3090:292::-;3153:13;3169:16;3177:7;3169;:16::i;:::-;3153:32;-1:-1:-1;;;;;;3203:11:2;;;;;;;;3195:20;;;;;;3233:10;-1:-1:-1;;;;;3233:19:2;;;;:58;;;3256:35;3273:5;3280:10;3256:16;:35::i;:::-;3225:67;;;;;;;;3303:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;3303:29:2;-1:-1:-1;;;;;3303:29:2;;;;;;;;;3347:28;;3303:24;;3347:28;;;;;;;3090:292;;;:::o;6368:798:14:-;6484:14;6568:19;6729;6425:3;3057:35;3076:10;3088:3;3057:18;:35::i;:::-;3049:62;;;;;;;-1:-1:-1;;;;;3049:62:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3049:62:14;;;;;;;;;;;;;;;6501:16;;;;:11;:16;;;;;;6590:5;:10;;-1:-1:-1;;;;;6501:16:14;;;;-1:-1:-1;6590:5:14;6513:3;;6590:10;;;;;;;;;;;;;;;;:22;;;6568:44;;6622:33;6631:10;6643:11;6622:8;:33::i;:::-;6751:5;:10;;6757:3;;6751:10;;;;;;;;;;;;;;;;:21;;;6729:43;;6809:18;6815:6;6823:3;6809:5;:18::i;:::-;6868:5;:10;;6874:3;;6868:10;;;;;;;;;;;;;;;;;;6861:17;;;;;;;;6964:32;;:10;;:32;;;;;6984:11;;6964:32;6868:10;6964:32;6984:11;6964:10;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;7060:9:14;;:26;;7074:11;7060:26;:13;:26;:::i;:::-;7048:9;:38;7128:31;;7148:10;;-1:-1:-1;;;;;7128:31:14;;;7135:3;;7128:31;;;;;6368:798;;;;;:::o;1983:94:3:-;2053:10;:17;1983:94;:::o;3644:527:14:-;2681:8;;:33;;;;;;2703:10;2681:33;;;;;;3927:13;;-1:-1:-1;;;;;2681:8:14;;:21;;:33;;;;;;;;;;;;;;3927:13;2681:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;2681:33:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2681:33:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2681:33:14;2673:64;;;;;;;-1:-1:-1;;;;;2673:64:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3724:26:14;;;;3716:63;;;;;-1:-1:-1;;;;;3716:63:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;3969:9;;3943:36;;3951:4;3943:21;;:36;:25;:36;:::i;:::-;3927:52;-1:-1:-1;4049:1:14;4041:9;;4033:48;;;;;-1:-1:-1;;;;;4033:48:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;4136:28;;-1:-1:-1;;;;;4136:21:14;;;:28;;;;;4158:5;;4136:28;;;;4158:5;4136:21;:28;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4136:28:14;3644:527;;:::o;5222:330:2:-;5312:39;5331:10;5343:7;5312:18;:39::i;:::-;5304:48;;;;;;;;-1:-1:-1;;;;;5370:16:2;;;;5362:25;;;;;;5398:29;5413:4;5419:7;5398:14;:29::i;:::-;5437:31;5454:4;5460:7;5437:16;:31::i;:::-;5478:24;5490:2;5494:7;5478:11;:24::i;:::-;5537:7;5533:2;-1:-1:-1;;;;;5518:27:2;5527:4;-1:-1:-1;;;;;5518:27:2;;;;;;;;;;;5222:330;;;:::o;17680:440:14:-;17756:7;17775:14;;:::i;:::-;17911:22;17743:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;17792:5;:10;;17798:3;;17792:10;;;;;;;;;;;;;;;17775:27;;;;;;;;;17792:10;;;;;17775:27;;;;;;;;;;;;;;-1:-1:-1;17816:20:14;17812:90;;;17859:6;17852:13;;;;17812:90;17936:3;:14;;;17911:39;;18066:47;18097:3;:15;;;18066:26;18085:6;:4;:6::i;:::-;18066:14;;:26;:18;:26;:::i;:47::-;18059:54;;2918:1;17680:440;;;;;;:::o;14523:116::-;14593:8;;:24;;;;;;;;14559:7;;-1:-1:-1;;;;;14593:8:14;;:22;;:24;;;;;;;;;;;;;;14559:7;14593:8;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;14593:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14593:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14593:24:14;14585:47;;;;;;;;-1:-1:-1;;;;;14585:45:14;;;;;;:47;;;;;14593:24;;14585:47;;;;;;;;;:45;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;14585:47:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14585:47:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14585:47:14;;-1:-1:-1;14523:116:14;:::o;7373:96::-;7428:34;7439:3;7444:17;7457:3;7444:12;:17::i;:::-;7428:10;:34::i;:::-;7373:96;:::o;1649:182:3:-;1729:7;1764:16;1774:5;1764:9;:16::i;:::-;1756:24;;1748:33;;;;;;-1:-1:-1;;;;;1798:19:3;;;;;;:12;:19;;;;;:26;;1818:5;;1798:26;;;;;;;;;;;;;;1791:33;;1649:182;;;;:::o;6191:181:2:-;6326:39;6343:4;6349:2;6353:7;6326:39;;;;;;;;;;;;;:16;:39::i;18317:154:14:-;18403:4;18426:38;18445:8;18455;18426:18;:38::i;:::-;18419:45;18317:154;-1:-1:-1;;;18317:154:14:o;560:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;560:18:14;:::o;2414:148:3:-;2472:7;2507:13;:11;:13::i;:::-;2499:21;;2491:30;;;;;;2538:10;:17;;2549:5;;2538:17;;;;;;;;;;;;;;2531:24;;2414:148;;;:::o;21076:504:14:-;21148:7;21167:13;21350:14;;:::i;:::-;21388:12;21482;21134:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;21183:22;21201:3;21183:17;:22::i;:::-;21167:38;;21232:8;;;;;;;;;-1:-1:-1;;;;;21232:8:14;-1:-1:-1;;;;;21232:21:14;;:23;;;;;-1:-1:-1;;;21232:23:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21232:23:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21232:23:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21232:23:14;21223:32;;;;;:67;;;21267:8;;;;;;;;;-1:-1:-1;;;;;21267:8:14;-1:-1:-1;;;;;21267:21:14;;:23;;;;;-1:-1:-1;;;21267:23:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21267:23:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21267:23:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21267:23:14;21259:31;;21223:67;21215:124;;;;;;;-1:-1:-1;;;;;21215:124:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21367:5;:10;;21373:3;;21367:10;;;;;;;;;;;;;;;;21350:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;21403:69;21445:26;21464:6;:4;:6::i;:::-;21445:14;;;:26;:18;:26;:::i;:::-;21423:8;;:16;;;;;;;;21403:37;;-1:-1:-1;;;;;21423:8:14;;:14;;:16;;;;;;;;;;;;;;:8;;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;21423:16:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21423:16:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21423:16:14;;21403:15;;;;:37;:19;:37;:::i;:::-;:41;:69;:41;:69;:::i;:::-;21388:84;;21497:45;21518:8;;;;;;;;;-1:-1:-1;;;;;21518:8:14;-1:-1:-1;;;;;21518:21:14;;:23;;;;;-1:-1:-1;;;21518:23:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21518:23:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21518:23:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21518:23:14;21497:8;;:16;;;;;;;;-1:-1:-1;;;;;21497:8:14;;;;:14;;:16;;;;;21518:23;;21497:16;;;;;;;;:8;;:16;;;5:2:-1;;;;30:1;27;20:12;5:2;21497:16:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21497:16:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21497:16:14;;:45;:20;:45;:::i;:::-;21482:60;-1:-1:-1;21559:14:14;:4;21482:60;21559:14;:8;:14;:::i;:::-;21552:21;21076:504;-1:-1:-1;;;;;;;21076:504:14:o;10528:129::-;10594:3;3057:35;3076:10;3088:3;3057:18;:35::i;:::-;3049:62;;;;;;;-1:-1:-1;;;;;3049:62:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3049:62:14;;;;;;;;;;;;;;;10609:41;10621:3;10626:23;10645:3;10626:18;:23::i;:::-;10609:11;:41::i;:::-;10528:129;;:::o;2492:177:2:-;2547:7;2582:20;;;:11;:20;;;;;;-1:-1:-1;;;;;2582:20:2;2620:19;;;2612:28;;;;;;2657:5;2492:177;-1:-1:-1;;2492:177:2:o;20566:162:14:-;20630:7;20656:65;20714:6;:4;:6::i;:::-;20668:8;;:40;;;;;;;;20656:53;;-1:-1:-1;;;;;20668:8:14;;:38;;:40;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;20668:40:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20668:40:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20668:40:14;20656:7;;:53;:11;:53;:::i;11549:388::-;11606:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;11641:1;11629:9;:13;11621:37;;;;;-1:-1:-1;;;;;11621:37:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;11728:36;11754:9;11728:5;11734:3;11728:10;;;;;;;;;;;;;;;;;;;;;;;:21;;:36;:25;:36;:::i;:::-;11704:5;:10;;11710:3;;11704:10;;;;;;;;;;;;;;;;;;;:60;11828:9;;:24;;11842:9;11828:24;:13;:24;:::i;:::-;11816:9;:36;11894;;;11908:9;11894:36;;11919:10;11894:36;;;;;;11903:3;;11894:36;;;;;;;;11549:388;;:::o;2118:150:2:-;2173:7;-1:-1:-1;;;;;2200:19:2;;;;2192:28;;;;;;-1:-1:-1;;;;;;2237:24:2;;;;;:17;:24;;;;;;;2118:150::o;20265:210:14:-;20339:7;20358:12;20406;20373:23;20389:6;:4;:6::i;20373:23::-;20358:38;;20421:8;;;;;;;;;-1:-1:-1;;;;;20421:8:14;-1:-1:-1;;;;;20421:14:14;;:16;;;;;-1:-1:-1;;;20421:16:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20421:16:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20421:16:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20421:16:14;;-1:-1:-1;20454:14:14;:4;20421:16;20454:14;:8;:14;:::i;:::-;20447:21;;20265:210;;;;;;:::o;15227:512::-;15301:7;15386:14;15531:13;15288:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;15403:13;15412:3;15403:8;:13::i;:::-;15386:30;-1:-1:-1;15476:11:14;;15472:50;;;15510:1;15503:8;;;;15472:50;15547:33;15573:6;15547:5;15553:3;15547:10;;;;;;;;;:33;15531:49;;15602:8;;;;;;;;;-1:-1:-1;;;;;15602:8:14;-1:-1:-1;;;;;15602:19:14;;:21;;;;;-1:-1:-1;;;15602:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15602:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15602:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15602:21:14;15594:29;;15590:142;;;15672:8;;:21;;;;;;;;15646:48;;-1:-1:-1;;;;;15672:8:14;;:19;;:21;;;;;;;;;;;;;;:8;;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;15672:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15672:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15672:21:14;15646:5;:10;;15652:3;;15646:10;;;;;:48;15639:55;;;;15590:142;15726:6;15719:13;;;;22262:479;22330:7;22349:15;22412:18;22557:14;22367:35;22390:11;22367:22;:35::i;:::-;22349:53;;22433:34;22455:11;22433:21;:34::i;:::-;22412:55;;22491:10;22481:7;:20;22477:71;;;22527:10;22517:20;;22477:71;22574:35;22597:11;22574:22;:35::i;:::-;22557:52;;22633:6;22623:7;:16;22619:63;;;22665:6;22655:16;;22619:63;22698:36;22726:7;22698:23;22714:6;:4;:6::i;:::-;22698:11;;:23;:15;:23;:::i;19407:346::-;19461:7;19480:15;19668:13;19505:8;;;;;;;;;-1:-1:-1;;;;;19505:8:14;-1:-1:-1;;;;;19505:19:14;;:21;;;;;-1:-1:-1;;;19505:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19505:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19505:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19505:21:14;19498:43;;;;;;;;-1:-1:-1;;;;;19498:41:14;;;;;;:43;;;;;19505:21;;19498:43;;;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;19498:43:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19498:43:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19498:43:14;19584:8;;:40;;;;;;;;19498:43;;-1:-1:-1;;;;;;19584:8:14;;;;:38;;:40;;;;;19498:43;;19584:40;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19584:40:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19584:40:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19584:40:14;19555:25;:23;:25::i;:::-;:69;19551:108;;19647:1;19640:8;;;;19551:108;19684:25;19701:7;19684:16;:25::i;:::-;19726:9;;19668:41;;-1:-1:-1;19726:20:14;;19668:41;19726:20;:13;:20;:::i;:::-;19719:27;;19407:346;;;;:::o;1191:87:4:-;1264:7;1257:14;;;;;;;;-1:-1:-1;;1257:14:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1232:6;;1257:14;;1264:7;;1257:14;;1264:7;1257:14;;;;;;;;;;;;;;;;;;;;;;;;18923:398:14;18991:7;19010:15;19198:23;19035:8;;;;;;;;;-1:-1:-1;;;;;19035:8:14;-1:-1:-1;;;;;19035:19:14;;:21;;;;;-1:-1:-1;;;19035:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19035:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19035:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19035:21:14;19028:43;;;;;;;;-1:-1:-1;;;;;19028:41:14;;;;;;:43;;;;;19035:21;;19028:43;;;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;19028:43:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19028:43:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19028:43:14;19114:8;;:40;;;;;;;;19028:43;;-1:-1:-1;;;;;;19114:8:14;;;;:38;;:40;;;;;19028:43;;19114:40;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19114:40:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19114:40:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19114:40:14;19085:25;:23;:25::i;:::-;:69;19081:108;;19177:1;19170:8;;;;19081:108;19247:9;;19224:45;;19247:21;;19261:6;19247:21;:13;:21;:::i;:::-;19224:22;:45::i;:::-;19198:71;-1:-1:-1;19286:28:14;19198:71;19306:7;19286:28;:19;:28;:::i;9678:618::-;9756:3;3057:35;3076:10;3088:3;3057:18;:35::i;:::-;3049:62;;;;;;;-1:-1:-1;;;;;3049:62:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3049:62:14;;;;;;;;;;;;;;;2489:8;;;;;;;;;-1:-1:-1;;;;;2489:8:14;-1:-1:-1;;;;;2489:22:14;;:24;;;;;-1:-1:-1;;;2489:24:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2489:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2489:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2489:24:14;2474:11;:39;;2466:85;;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2466:85:14;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;;;;9797:1;9787:11;;9779:40;;;;;-1:-1:-1;;;;;9779:40:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;9849:20;9865:3;9849:15;:20::i;:::-;9838:31;;;9830:70;;;;;-1:-1:-1;;;;;9830:70:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;9979:34;10005:7;9979:5;9985:3;9979:10;;;;;;;;;:34;9955:5;:10;;9961:3;;9955:10;;;;;;;;;;;;;;;;;;;:58;10077:9;;:22;;10091:7;10077:22;:13;:22;:::i;:::-;10065:9;:34;10181:28;;:10;;:28;;;;;10201:7;;10181:28;;;;10201:7;10181:10;:28;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;10251:38:14;;;;;;10278:10;10251:38;;;;;;10264:3;;10251:38;;;;;;;;9678:618;;;:::o;4110:213:2:-;-1:-1:-1;;;;;4189:16:2;;4195:10;4189:16;;4181:25;;;;;;4235:10;4216:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;4216:34:2;;;;;;;;;;;;:45;;-1:-1:-1;;4216:45:2;;;;;;;;;;4276:40;;;;;;;4216:34;;4235:10;4276:40;;;;;;;;;;;4110:213;;:::o;216:24:14:-;;;;:::o;9368:101::-;9424:38;9436:3;9441:20;9457:3;9441:15;:20::i;:::-;9424:11;:38::i;7077:260:2:-;7183:31;7196:4;7202:2;7206:7;7183:12;:31::i;:::-;7281:48;7304:4;7310:2;7314:7;7323:5;7281:22;:48::i;:::-;7273:57;;;;;;;;7077:260;;;;:::o;12746:1364:14:-;13181:20;13281:19;13451:12;13548:19;13661:14;12798:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;2489:8;;;;;;;;;-1:-1:-1;;;;;2489:8:14;-1:-1:-1;;;;;2489:22:14;;:24;;;;;-1:-1:-1;;;2489:24:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2489:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2489:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2489:24:14;2474:11;:39;;2466:85;;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2466:85:14;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;;;;12902:8;;;;;;;;;-1:-1:-1;;;;;12902:8:14;-1:-1:-1;;;;;12902:21:14;;:23;;;;;-1:-1:-1;;;12902:23:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12902:23:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12902:23:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12902:23:14;12876:22;12894:3;12876:17;:22::i;:::-;:49;;12868:88;;;;;-1:-1:-1;;;;;12868:88:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;13057:30;13078:8;13057:16;13071:1;13057:9;;:13;;:16;;;;:::i;:::-;:20;:30;:20;:30;:::i;:::-;13021:33;13047:6;:4;:6::i;:::-;13021:5;:10;;13027:3;;13021:10;;;;;;;;;;;;;;;;;;;:21;;:33;:25;:33;:::i;:::-;:66;13013:114;;;;;-1:-1:-1;;;;;13013:114:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13204:5;:10;;13210:3;;13204:10;;;;;;;;;;;;;;;;:22;;;13181:45;;13236:34;13245:10;13257:12;13236:8;:34::i;:::-;13303:5;:10;;13309:3;;13303:10;;;;;;;;;;;;;;;;:21;;;13281:43;;13466:39;13498:6;:4;:6::i;:::-;13483:9;;13466:27;;:12;;:27;:16;:27;:::i;:39::-;13451:54;;13570:48;13611:6;:4;:6::i;:::-;13587:8;;:18;;;;;;;;13570:36;;-1:-1:-1;;;;;13587:8:14;;:16;;:18;;;;;;;;;;;;;;:8;;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;13587:18:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13587:18:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13587:18:14;13570:12;;:36;:16;:36;:::i;:48::-;13548:70;;13678:12;13686:3;13678:7;:12::i;:::-;13661:29;;13732:5;13738:3;13732:10;;;;;;;;;;;;;;;;;;;;;;13725:17;;;;;;13779:18;13785:6;13793:3;13779:5;:18::i;:::-;13898:10;:42;13918:21;:4;13927:11;13918:21;:8;:21;:::i;:::-;13898:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;14004:9:14;;:26;;14018:11;14004:26;:13;:26;:::i;:::-;13992:9;:38;14072:31;;14092:10;;-1:-1:-1;;;;;14072:31:14;;;14079:3;;14072:31;;;;;12746:1364;;;;;;;:::o;1477:151:4:-;1535:6;1568:16;1576:7;1568;:16::i;:::-;1560:25;;;;;;;;1602:19;;;;:10;:19;;;;;;;;;1595:26;;;;;;-1:-1:-1;;1595:26:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1602:19;;1595:26;;1602:19;1595:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1477:151;;;:::o;12072:478:14:-;12138:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;12171:1;12161:11;;12153:35;;;;;-1:-1:-1;;;;;12153:35:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;12256:5;:10;;12262:3;;12256:10;;;;;;;;;;;;;;;;:22;;;12245:7;:33;;12237:61;;;;;;;-1:-1:-1;;;;;12237:61:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;12368:29;12377:10;12389:7;12368:8;:29::i;:::-;12432:35;12459:7;12432:5;12438:3;12432:10;;;;;;;;;:35;12407:5;:10;;12413:3;;12407:10;;;;;;;;;;;;;;;:22;:10;;;;;:22;:60;;;;12509:34;;;;;;12532:10;12509:34;;;;;;;;;12518:3;;12509:34;;;;;;;;;12072:478;;;:::o;18536:293::-;18592:7;18611:15;18636:8;;;;;;;;;-1:-1:-1;;;;;18636:8:14;-1:-1:-1;;;;;18636:19:14;;:21;;;;;-1:-1:-1;;;18636:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18636:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18636:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18636:21:14;18629:43;;;;;;;;-1:-1:-1;;;;;18629:41:14;;;;;;:43;;;;;18636:21;;18629:43;;;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;18629:43:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18629:43:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18629:43:14;;-1:-1:-1;18686:12:14;;18682:90;;;18721:8;;;;;;;;;-1:-1:-1;;;;;18721:8:14;-1:-1:-1;;;;;18721:38:14;;:40;;;;;-1:-1:-1;;;18721:40:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18721:40:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18721:40:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18721:40:14;;-1:-1:-1;18714:47:14;;18682:90;18788:34;18814:7;18788:21;18802:6;:4;:6::i;:::-;18788:9;;;:21;:13;:21;:::i;:34::-;18781:41;;18536:293;;;:::o;293:33::-;;;;:::o;384:25::-;;;-1:-1:-1;;;;;384:25:14;;:::o;14724:418::-;14801:7;14820:14;;:::i;:::-;14929:15;14788:3;2873:12;2881:3;2873:7;:12::i;:::-;2865:43;;;;;;;-1:-1:-1;;;;;2865:43:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2865:43:14;;;;;;;;;;;;;;;14837:5;:10;;14843:3;;14837:10;;;;;;;;;;;;;;;;14820:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;14947:31;14963:3;:14;;;14947:15;:31::i;:::-;14929:49;;15012:7;14993:3;:15;;;:26;;14989:65;;;15042:1;15035:8;;;;14989:65;15119:15;;;;15107:28;;:7;;:28;:11;:28;:::i;19880:234::-;19954:7;19973:12;20021;19988:23;20004:6;:4;:6::i;19988:23::-;19973:38;;20036:8;;;;;;;;;-1:-1:-1;;;;;20036:8:14;-1:-1:-1;;;;;20036:38:14;;:40;;;;;-1:-1:-1;;;20036:40:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;4644:145:2;-1:-1:-1;;;;;4747:25:2;;;4724:4;4747:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4644:145::o;20853:138:14:-;20917:7;20943:41;20977:6;:4;:6::i;:::-;20955:8;;:16;;;;;;;;20943:29;;-1:-1:-1;;;;;20955:8:14;;:14;;:16;;;;;;;;;;;;;;:8;;:16;;;5:2:-1;;;;30:1;27;20:12;10872:592:14;10950:3;3057:35;3076:10;3088:3;3057:18;:35::i;:::-;3049:62;;;;;;;-1:-1:-1;;;;;3049:62:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3049:62:14;;;;;;;;;;;;;;;2489:8;;;;;;;;;-1:-1:-1;;;;;2489:8:14;-1:-1:-1;;;;;2489:22:14;;:24;;;;;-1:-1:-1;;;2489:24:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2489:24:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2489:24:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2489:24:14;2474:11;:39;;2466:85;;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2466:85:14;;;;-1:-1:-1;;;;;2466:85:14;;;;;;;;;;;;;;;10991:1;10981:11;;10973:40;;;;;-1:-1:-1;;;;;10973:40:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;11081:23;11100:3;11081:18;:23::i;:::-;11070:34;;;11062:73;;;;;-1:-1:-1;;;;;11062:73:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;11217:35;11244:7;11217:5;11223:3;11217:10;;;;;;;;;;;;;;;;;;;;:22;;;:26;;:35;;;;:::i;:::-;11192:5;:10;;11198:3;;11192:10;;;;;;;;;;;;;;;;:22;;:60;;;;11329:8;;;;;;;;;-1:-1:-1;;;;;11329:8:14;-1:-1:-1;;;;;11329:19:14;;:21;;;;;-1:-1:-1;;;11329:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11329:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11329:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11329:21:14;11322:55;;;;;;11357:10;11322:55;;;;;;;;;;;;-1:-1:-1;;;;;11322:34:14;;;;;;:55;;;;;11329:21;;11322:55;;;;;;;;-1:-1:-1;11322:34:14;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;11322:55:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11322:55:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11419:38:14;;;;;;11446:10;11322:55;11419:38;;;;;11432:3;;11419:38;;;;;;;;10872:592;;;:::o;21698:438::-;21764:7;21783:15;21846:18;21981:14;21801:35;21824:11;21801:22;:35::i;:::-;21783:53;;21867:24;21889:1;21867:21;:24::i;:::-;21846:45;;21915:10;21905:7;:20;21901:71;;;21951:10;21941:20;;21901:71;21998:35;22021:11;21998:22;:35::i;:::-;21981:52;;22057:6;22047:7;:16;22043:63;;;22089:6;22079:16;;22043:63;-1:-1:-1;22122:7:14;;21698:438;-1:-1:-1;;;21698:438:14:o;1180:152:13:-;1238:7;;1265:6;;;;1257:22;;;;;-1:-1:-1;;;;;1257:22:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1301:5:13;;;;1180:152;;;;;;:::o;1403:::-;1461:7;1492:5;;;1515:6;;;;1507:22;;;;;-1:-1:-1;;;;;1507:22:13;;;;;;;;;;;;;;;;;;;;;;;;;;;5154:183:3;5217:24;5229:2;5233:7;5217:11;:24::i;:::-;5279:10;:17;;5252:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;5306:24:3;;;;;;;-1:-1:-1;5154:183:3:o;210:428:13:-;268:7;;508:6;;504:45;;;537:1;530:8;;;;504:45;-1:-1:-1;571:5:13;;;575:1;571;:5;594;;;;;;;;:10;586:26;;;;;-1:-1:-1;;;;;586:26:13;;;;;;;;;;;;;;;;;;;;;;;;;;;756:303;814:7;;907:5;;;899:21;;;;;-1:-1:-1;;;;;899:21:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;946:1;942;:5;;;;;;;;;756:303;-1:-1:-1;;;;756:303:13:o;14167:284:14:-;14250:1;14240:7;:11;14236:209;;;14282:8;;:21;;;;;;;;14325:7;;-1:-1:-1;;;;;14282:8:14;;:19;;:21;;;;;;;;;;;;;;:8;;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;14282:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14282:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14282:21:14;14275:46;;;;;;-1:-1:-1;;;;;14275:46:14;;;;;;;;;:39;;;;;;;:46;;;;;14282:21;;14275:46;;;;;;;-1:-1:-1;14275:39:14;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;14275:46:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14275:46:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14275:46:14;:57;;14267:98;;;;;-1:-1:-1;;;;;14267:98:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;14386:8;;;;;;;;;-1:-1:-1;;;;;14386:8:14;-1:-1:-1;;;;;14386:19:14;;:21;;;;;-1:-1:-1;;;14386:21:14;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14386:21:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14386:21:14;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14386:21:14;14379:55;;;;;;-1:-1:-1;;;;;14379:55:14;;;;;;;;;;;;;;;:39;;;;;;;:55;;;;;-1:-1:-1;;14379:55:14;;;;;;;-1:-1:-1;14379:39:14;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;14379:55:14;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14379:55:14;;;;14167:284;;:::o;7526:152:2:-;7583:4;7615:20;;;:11;:20;;;;;;-1:-1:-1;;;;;7615:20:2;7652:19;;;7526:152::o;8041:404::-;8126:4;8142:13;8158:16;8166:7;8158;:16::i;:::-;8142:32;;8361:5;-1:-1:-1;;;;;8350:16:2;:7;-1:-1:-1;;;;;8350:16:2;;:51;;;;8394:7;-1:-1:-1;;;;;8370:31:2;:20;8382:7;8370:11;:20::i;:::-;-1:-1:-1;;;;;8370:31:2;;8350:51;:87;;;;8405:32;8422:5;8429:7;8405:16;:32::i;:::-;8342:96;8041:404;-1:-1:-1;;;;8041:404:2:o;2253:240:4:-;2319:27;2331:5;2338:7;2319:11;:27::i;:::-;2402:19;;;;:10;:19;;;;;2396:33;;-1:-1:-1;;2396:33:4;;;;;;;;;;;:38;2392:95;;2457:19;;;;:10;:19;;;;;2450:26;;;:::i;11836:230:2:-;11938:5;-1:-1:-1;;;;;11918:25:2;:16;11926:7;11918;:16::i;:::-;-1:-1:-1;;;;;11918:25:2;;11910:34;;;;;;11994:1;11958:24;;;:15;:24;;;;;;-1:-1:-1;;;;;11958:24:2;:38;11954:106;;12047:1;12012:24;;;:15;:24;;;;;:37;;-1:-1:-1;;12012:37:2;;;-1:-1:-1;11836:230:2:o;3803:1078:3:-;4072:18;4129:22;4196:17;3879:37;3902:4;3908:7;3879:22;:37::i;:::-;4093:26;;;;:17;:26;;;;;;;;;-1:-1:-1;;;;;4154:18:3;;;;:12;:18;;;;;;:25;4093:26;;-1:-1:-1;4154:32:3;;4184:1;4154:32;:29;:32;:::i;:::-;-1:-1:-1;;;;;4216:18:3;;;;;;:12;:18;;;;;:34;;4129:57;;-1:-1:-1;4216:18:3;4129:57;;4216:34;;;;;;;;;;;;;;4196:54;;4294:9;4261:12;:18;4274:4;-1:-1:-1;;;;;4261:18:3;-1:-1:-1;;;;;4261:18:3;;;;;;;;;;;;4280:10;4261:30;;;;;;;;;;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;4389:18:3;;;;:12;:18;;;;;;:27;;;;;-1:-1:-1;;4389:27:3;;;:::i;:::-;-1:-1:-1;4822:1:3;4793:26;;;:17;:26;;;;;;:30;;;4833:28;;;;;;:41;-1:-1:-1;;3803:1078:3:o;3036:241::-;3145:14;3105:30;3123:2;3127:7;3105:17;:30::i;:::-;-1:-1:-1;;;;;;3162:16:3;;;;;;;:12;:16;;;;;;;;:23;;39:1:-1;23:18;;45:23;;3195:30:3;;;;;;;;;;;3235:26;;;:17;:26;;;;;:35;3036:241::o;15835:1782:14:-;15888:7;15946:14;;:::i;:::-;16188:18;16242:24;16400:13;16581;17173:15;17353:23;15963:5;15969:3;15963:10;;;;;;;;;;;;;;;;;;;15946:27;;;;;;;;;15963:10;;;;;15946:27;;;;;;;;;;;;;;-1:-1:-1;16034:20:14;16030:72;;;16077:14;;;-1:-1:-1;16070:21:14;;16030:72;16209:23;:21;:23::i;:::-;16188:44;;16294:1;16281:10;:14;16277:825;;;16416:33;16433:3;:15;;;16416:16;:33::i;:::-;16400:49;;16484:5;16467:3;:14;;;:22;16463:629;;;16597:14;;:25;;16616:5;16597:25;:18;:25;:::i;:::-;16581:41;;16652:10;16644:5;:18;16640:437;;;16836:10;16817:29;;16640:437;;;17072:5;17065:12;;;;16640:437;17191:33;17208:3;:15;;;17191:16;:33::i;:::-;17173:51;;17255:7;17238:3;:14;;;:24;17234:376;;;17379:14;;:27;;17398:7;17379:27;:18;:27;:::i;:::-;17353:53;;17446:16;17428:15;:34;17427:73;;17484:16;17427:73;;;17466:15;17427:73;17420:80;;;;17234:376;17583:16;17576:23;;17234:376;15835:1782;;;;;;;;;;:::o;11228:335:2:-;11341:4;11425:13;11362:15;:2;-1:-1:-1;;;;;11362:13:2;;:15::i;:::-;11361:16;11357:58;;;11400:4;11393:11;;;;11357:58;11441:70;;;;;11478:10;11441:70;;;;;;-1:-1:-1;;;;;11441:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;;11478:10;11490:4;;11496:7;;11505:5;;11441:70;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11441:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11441:70:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11441:70:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11441:70:2;-1:-1:-1;;11529:26:2;;11539:16;11529:26;;-1:-1:-1;11441:70:2;-1:-1:-1;11228:335:2;;;;;;;;:::o;8706:177::-;-1:-1:-1;;;;;8777:16:2;;;;8769:25;;;;;;8804:24;8816:2;8820:7;8804:11;:24::i;:::-;8843:33;;8868:7;;-1:-1:-1;;;;;8843:33:2;;;8860:1;;8843:33;;8860:1;;8843:33;8706:177;;:::o;5581:507:3:-;5719:18;5774:22;5833:17;5647:27;5659:5;5666:7;5647:11;:27::i;:::-;5740:24;;;;:15;:24;;;;;;5799:10;:17;5740:24;;-1:-1:-1;5799:24:3;;5821:1;5799:24;:21;:24;:::i;:::-;5774:49;;5853:10;5864:14;5853:26;;;;;;;;;;;;;;;;;;5833:46;;5915:9;5890:10;5901;5890:22;;;;;;;;;;;;;;;;;;:34;;;;5934:10;:26;;5945:14;;5934:26;;;;;;;;;;;;;;;:30;5975:10;:19;;;;;-1:-1:-1;;5975:19:3;;;:::i;:::-;-1:-1:-1;6031:1:3;6004:24;;;:15;:24;;;;;;:28;;;6042:26;;;;;;:39;-1:-1:-1;;5581:507:3:o;10480:225:2:-;10584:4;-1:-1:-1;;;;;10564:24:2;:16;10572:7;10564;:16::i;:::-;-1:-1:-1;;;;;10564:24:2;;10556:33;;;;;;-1:-1:-1;;;;;10625:23:2;;;;;;:17;:23;;;;;;:30;;10653:1;10625:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;10599:23:2;;;;;;;:17;:23;;;;;;;;:56;;;;10665:20;;;:11;:20;;;;:33;;-1:-1:-1;;10665:33:2;;;10480:225::o;9744:216::-;9853:1;9821:20;;;:11;:20;;;;;;-1:-1:-1;;;;;9821:20:2;:34;9813:43;;;;;;9866:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;9866:25:2;-1:-1:-1;;;;;9866:25:2;;;;;;;;9925:21;;:17;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;9901:21:2;;;;;;;:17;:21;;;;;:52;;;;-1:-1:-1;9744:216:2:o;463:624:0:-;523:4;1034:20;;1072:8;;463:624::o;9080:196:2:-;9146:30;9161:5;9168:7;9146:14;:30::i;:::-;9186:32;9203:5;9210:7;9186:16;:32::i;:::-;9233:36;;9261:7;;9257:1;;-1:-1:-1;;;;;9233:36:2;;;;;9257:1;;9233:36;9080:196;;:::o;149:22594:14:-;;;;;;;;;;-1:-1:-1;149:22594:14;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://1e5504b243464448fc8b88e97c03a11c8d4192302f6bb5fc22fc799fe9abb2b8
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.