ERC-1155
Overview
Max Total Supply
353,110 CR
Holders
86
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CultResources
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2024-04-10 */ /* __ ___ __ ___ __ __ __ __ ___ __ / ` | | | | |__) |__ /__` / \ | | |__) / ` |__ /__` \__, \__/ |___ | | \ |___ .__/ \__/ \__/ | \ \__, |___ .__/ */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC1155 is IERC165 { event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); event ApprovalForAll(address indexed account, address indexed operator, bool approved); event URI(string value, uint256 indexed id); function balanceOf(address account, uint256 id) external view returns (uint256); function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); function setApprovalForAll(address operator, bool approved) external; function isApprovedForAll(address account, address operator) external view returns (bool); function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } interface IERC1155Receiver is IERC165 { function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } interface IERC1155MetadataURI is IERC1155 { function uri(uint256 id) external view returns (string memory); } pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } abstract contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } function uri(uint256) public view virtual override returns (string memory) { return _uri; } function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } function _setURI(string memory newuri) internal virtual { _uri = newuri; } function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } function _burn(address from, uint256 id, uint256 amount) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface ICandle { function transferFrom(address from, address to, uint256 amount) external; function balanceOf(address sender) external view returns (uint256); } interface ERC721 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) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); } contract CultResources is ERC1155, Ownable { string public name = "Cult Resources"; string public symbol = "CR"; ERC721 public pops = ERC721(0x1b60B6daA371F5066bd8C1DC032627bf1f4E95df); ERC721 public skully = ERC721(0x25ff0d27395A7AAD578569f83E30C82a07b4ee7d); ERC721 public ghostly = ERC721(0x4EaB37d5C62fa3bff8F7A5FFce6a88cFC098749C); ERC1155 public cultItem = ERC1155(0xc8a2D2D06e9E0b7eB49257776F3c37C9a2050494); uint256 private _totalSupply; function totalSupply() public view virtual returns (uint256) { return _totalSupply; } struct Resource { uint256 id; // the tokenId of the Resource string name; // the name of the Resource string description; // a short description of the resource string imgdata; uint256 maxsupply; uint256 totalSupply; uint256[11] miningWeights; uint256[11] maxes; uint256 baseRate; uint256 miningDelay; uint256 miningTime; } mapping (uint256 => Resource) public resourceById; function getResource(uint256 resId) public view returns (Resource memory) { Resource memory res = resourceById[resId]; return res; } function _addResource( uint256 id, string memory _name, string memory description, string memory imgdata, uint256 maxsupply, uint256[11] memory miningWeights, uint256[11] memory maxes, uint256 baseRate, uint256 miningDelay, uint256 miningTime ) internal { require(id > 0, "id cannot be zero"); require(resourceById[id].id == 0, "resource with matching id already exists"); resourceById[id] = Resource( id, _name, description, imgdata, maxsupply, 0, miningWeights, maxes, baseRate, miningDelay, miningTime); } function addResource( uint256 id, string memory _name, string memory description, string memory imgdata, uint256 maxsupply, uint256[11] memory miningWeights, uint256[11] memory maxes, uint256 baseRate, uint256 miningDelay, uint256 miningTime ) public onlyOwner { _addResource( id, _name, description, imgdata, maxsupply, miningWeights, maxes, baseRate, miningDelay, miningTime); } //---INTERNAL Control Functions ------------------------------------------------ function _changeResource_Name( uint256 index, string memory _name ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( theResource.id, _name, theResource.description, theResource.imgdata, theResource.maxsupply, theResource.totalSupply, theResource.miningWeights, theResource.maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime ); } function _changeResource_Description( uint256 index, string memory description ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, description, theResource.imgdata, theResource.maxsupply, theResource.totalSupply, theResource.miningWeights, theResource.maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime); } function _changeResource_ImgData( uint256 index, string memory imgdata ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, theResource.description, imgdata, theResource.maxsupply, theResource.totalSupply, theResource.miningWeights, theResource.maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime); } function _changeResource_MaxSupply( uint256 index, uint256 maxsupply ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, theResource.description, theResource.imgdata, maxsupply, theResource.totalSupply, theResource.miningWeights, theResource.maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime); } function _changeResource_miningWeights( uint256 index, uint256[11] calldata miningWeights ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, theResource.description, theResource.imgdata, theResource.maxsupply, theResource.totalSupply, miningWeights, theResource.maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime); } function _changeResource_maxes( uint256 index, uint256[11] calldata maxes ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, theResource.description, theResource.imgdata, theResource.maxsupply, theResource.totalSupply, theResource.miningWeights, maxes, theResource.baseRate, theResource.miningDelay, theResource.miningTime); } function _changeResource_rateTimes( uint256 index, uint256 baseRate, uint256 miningDelay, uint256 miningTime ) internal { Resource memory theResource = resourceById[index]; resourceById[index] = Resource( index, theResource.name, theResource.description, theResource.imgdata, theResource.maxsupply, theResource.totalSupply, theResource.miningWeights, theResource.maxes, baseRate, miningDelay, miningTime); } //---EXTERNAL Control Functions ------------------------------------------------ function changeResource_Name( uint256 index, string memory _name ) public onlyOwner { _changeResource_Name(index, _name); } function changeResource_Description( uint256 index, string memory description ) public onlyOwner { _changeResource_Description(index, description); } function changeResource_ImgData( uint256 index, string memory imgdata ) public onlyOwner { _changeResource_ImgData(index, imgdata); } function changeResource_MaxSupply( uint256 index, uint256 maxsupply ) public onlyOwner { _changeResource_MaxSupply(index, maxsupply); } function changeResource_MiningWeights( uint256 index, uint256[11] calldata miningWeights ) public onlyOwner { _changeResource_miningWeights(index, miningWeights); } function changeResource_Maxes( uint256 index, uint256[11] calldata maxes ) public onlyOwner { _changeResource_maxes(index, maxes); } function changeResource_rateTimes( uint256 index, uint256 baseRate, uint256 miningDelay, uint256 miningTime ) public onlyOwner { _changeResource_rateTimes(index, baseRate, miningDelay, miningTime); } // ------------------------------------------------------------------------------ function _skully(address to) internal view returns (uint256) { return skully.balanceOf(to); } function _popskully(address to) internal view returns (uint256) { return pops.balanceOf(to); } function _ghostly(address to) internal view returns (uint256) { return ghostly.balanceOf(to); } function _cultItem(address to, uint256 id) internal view returns (uint256) { return cultItem.balanceOf(to, id); } function mintResourceGovernance(uint256 id, uint256 amt) public onlyOwner { Resource memory theResource = resourceById[id]; require(theResource.id == id, "incorrect resource id"); require(theResource.totalSupply + amt <= theResource.maxsupply, "max supply reached"); bytes memory data = bytes(""); _mint(msg.sender, id, amt, data); resourceById[id].totalSupply = theResource.totalSupply + amt; _totalSupply = _totalSupply + amt; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a <= b ? a : b; } function getUserHoldings(address to, uint256 resId) public view returns (uint256[11] memory holdings) { Resource memory res = resourceById[resId]; holdings[0] = min(res.maxes[0],_skully(to)); holdings[1] = min(res.maxes[1],_popskully(to)); holdings[2] = min(res.maxes[2],_ghostly(to)); holdings[3] = min(res.maxes[3],_cultItem(to, 1)); holdings[4] = min(res.maxes[4],_cultItem(to, 2)); holdings[5] = min(res.maxes[5],_cultItem(to, 11)); holdings[6] = min(res.maxes[6],_cultItem(to, 12)); holdings[7] = min(res.maxes[7],_cultItem(to, 13)); holdings[8] = min(res.maxes[8],_cultItem(to, 21)); holdings[9] = min(res.maxes[9],_cultItem(to, 22)); holdings[10] = min(res.maxes[10],_cultItem(to, 31)); } function getUserWeights(address to, uint256 resId) public view returns (uint256[11] memory weights) { Resource memory res = resourceById[resId]; uint256[11] memory holdings = getUserHoldings(to, resId); weights[0] = res.miningWeights[0] * holdings[0]; weights[1] = res.miningWeights[1] * holdings[1]; weights[2] = res.miningWeights[2] * holdings[2]; weights[3] = res.miningWeights[3] * holdings[3]; weights[4] = res.miningWeights[4] * holdings[4]; weights[5] = res.miningWeights[5] * holdings[5]; weights[6] = res.miningWeights[6] * holdings[6]; weights[7] = res.miningWeights[7] * holdings[7]; weights[8] = res.miningWeights[8] * holdings[8]; weights[9] = res.miningWeights[9] * holdings[9]; weights[10] = res.miningWeights[10] * holdings[10]; } function getUserRate(address to, uint256 resId) public view returns (uint256) { uint256[11] memory weights = getUserWeights(to,resId); Resource memory res = resourceById[resId]; return (weights[0] + weights[1] + weights[2] + weights[3] + weights[4] + weights[5] + weights[6] + weights[7] + weights[8] + weights[9] + weights[10])*res.baseRate; } mapping (address => uint256) startMiningBlock_; function startMiningBlock(address to) public view returns (uint256) { return startMiningBlock_[to]; } mapping (address => uint256) stopMiningBlock_; function stopMiningBlock(address to) public view returns (uint256) { return stopMiningBlock_[to]; } mapping (address => uint256) lastMinedResource_; function lastMinedResource(address to) public view returns (uint256) { return lastMinedResource_[to]; } mapping (address => uint256) miningRateByUser; mapping (address => uint256) miningTypeByUser; function pendingResource(address to) public view returns (uint256) { uint256 blocks = block.number - startMiningBlock(to); return blocks*miningRateByUser[to]; } // ------------------------------------------------------------------------------------------------- // Start Mining ------------------------------------------------------------------------------------ function mine(uint256 resId) public { //ensure user can mine this item require(getUserRate(msg.sender, resId) > 0, "user cannot mine this resource"); // Check that the user has not started mining yet. require(startMiningBlock(msg.sender) == 0, "user is already mining"); if (lastMinedResource(msg.sender) > 0) { // Check that the user is not on cooldown require(block.number >= stopMiningBlock(msg.sender) + resourceById[lastMinedResource(msg.sender)].miningDelay, "user is on cooldown"); } // Set the new startMining block startMiningBlock_[msg.sender] = block.number; // reset the stopMining block stopMiningBlock_[msg.sender] = 0; // set the mining rate miningRateByUser[msg.sender] = getUserRate(msg.sender, resId); // set the mining resource miningTypeByUser[msg.sender] = resId; } // ------------------------------------------------------------------------------------------------- // Stop Mining ------------------------------------------------------------------------------------- function rest() public { // store the active mining type uint256 miningType = miningTypeByUser[msg.sender]; Resource memory theResource = resourceById[miningType]; require(theResource.id == miningType, "incorrect resource id"); // check that the user is mining require(miningType > 0, "user is not mining"); // Check that user has waited long enough require(block.number - startMiningBlock(msg.sender) >= theResource.miningTime, "mine for longer"); // Calculate the amount uint256 amt = miningRateByUser[msg.sender]*theResource.miningTime; require(theResource.totalSupply + amt <= theResource.maxsupply, "max supply reached"); // reset the start mining block startMiningBlock_[msg.sender] = 0; // set the stop mining block stopMiningBlock_[msg.sender] = block.number; // reset the mining rate miningRateByUser[msg.sender] = 0; // empty data for _mint call bytes memory data = bytes(""); _mint(msg.sender, miningTypeByUser[msg.sender], amt, data); resourceById[miningType].totalSupply = theResource.totalSupply + amt; _totalSupply = _totalSupply + amt; // reset mining type ( so that rest() can't be called until after mine() ) miningTypeByUser[msg.sender] = 0; //set the lastMinedResource lastMinedResource_[msg.sender] = miningType; } function escape() public { require(miningTypeByUser[msg.sender] > 0, "can only escape if mining"); // reset the start mining block startMiningBlock_[msg.sender] = 0; // set the stop mining block stopMiningBlock_[msg.sender] = 0; // reset the mining rate miningRateByUser[msg.sender] = 0; // reset mining type miningTypeByUser[msg.sender] = 0; // reset the lastMinedResource lastMinedResource_[msg.sender] = 0; } constructor() Ownable() { addResource( 1, "Karma", "Karma marks a Summoner's contributions to the Cult", "https://candle.farmgod.finance/static/media/image0.gif", 1000000, [uint256(1),1,1,1,1,1,1,1,1,1,1], [uint256(1),1,1,1,1,1,1,1,1,1,1], 1, 10000, 1 ); bytes memory data = bytes(""); _mint(0xddbFaaED693a33a9dE97b16488077f66718489aD, 1, 701, data); _mint(0x26dae6EdF5dDFc6E14908dFc529D10ce03672FB0, 1, 406, data); _mint(0x5d02c857E98465f5b3a957B1f43569C4dAe58cA0, 1, 872, data); _mint(0x8DE3c3891268502F77DB7E876d727257DEc0F852, 1, 343, data); _mint(0x69f5649625622afEC8EacD367209a79d10A25a17, 1, 285, data); _mint(0x4D875Aab37398eA559e716bA14aA67911EeBF6EE, 1, 41, data); _mint(0x34F4C58bD278Fe92B32e05452AB695383779E938, 1, 113, data); _mint(0x0e7e4a17B79D18870D55E5C6245e8b08068aF5d0, 1, 141, data); _mint(0xEE13Ae5Caf40f5757Ed890be6330788779984BfA, 1, 17, data); _mint(0x8ea64cE37b7b43974905Df5Afe6FcFEFf424c0a9, 1, 80, data); } function jsonify(uint256 tokenId) internal view returns (string memory) { Resource memory theResource = resourceById[tokenId]; string memory json = Base64.encode(bytes(string(abi.encodePacked( '{"name": "', theResource.name, '", "description": "', theResource.description, '", "image": "', theResource.imgdata, '"}')))); return string(abi.encodePacked('data:application/json;base64,', json)); } function uri(uint256 id) public view override returns (string memory) { return jsonify(id); } } library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"imgdata","type":"string"},{"internalType":"uint256","name":"maxsupply","type":"uint256"},{"internalType":"uint256[11]","name":"miningWeights","type":"uint256[11]"},{"internalType":"uint256[11]","name":"maxes","type":"uint256[11]"},{"internalType":"uint256","name":"baseRate","type":"uint256"},{"internalType":"uint256","name":"miningDelay","type":"uint256"},{"internalType":"uint256","name":"miningTime","type":"uint256"}],"name":"addResource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"description","type":"string"}],"name":"changeResource_Description","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"imgdata","type":"string"}],"name":"changeResource_ImgData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"maxsupply","type":"uint256"}],"name":"changeResource_MaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256[11]","name":"maxes","type":"uint256[11]"}],"name":"changeResource_Maxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256[11]","name":"miningWeights","type":"uint256[11]"}],"name":"changeResource_MiningWeights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"changeResource_Name","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"baseRate","type":"uint256"},{"internalType":"uint256","name":"miningDelay","type":"uint256"},{"internalType":"uint256","name":"miningTime","type":"uint256"}],"name":"changeResource_rateTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cultItem","outputs":[{"internalType":"contract ERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"escape","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"resId","type":"uint256"}],"name":"getResource","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"imgdata","type":"string"},{"internalType":"uint256","name":"maxsupply","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256[11]","name":"miningWeights","type":"uint256[11]"},{"internalType":"uint256[11]","name":"maxes","type":"uint256[11]"},{"internalType":"uint256","name":"baseRate","type":"uint256"},{"internalType":"uint256","name":"miningDelay","type":"uint256"},{"internalType":"uint256","name":"miningTime","type":"uint256"}],"internalType":"struct CultResources.Resource","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"resId","type":"uint256"}],"name":"getUserHoldings","outputs":[{"internalType":"uint256[11]","name":"holdings","type":"uint256[11]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"resId","type":"uint256"}],"name":"getUserRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"resId","type":"uint256"}],"name":"getUserWeights","outputs":[{"internalType":"uint256[11]","name":"weights","type":"uint256[11]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ghostly","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"lastMinedResource","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"resId","type":"uint256"}],"name":"mine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"mintResourceGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"pendingResource","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pops","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resourceById","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"imgdata","type":"string"},{"internalType":"uint256","name":"maxsupply","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"baseRate","type":"uint256"},{"internalType":"uint256","name":"miningDelay","type":"uint256"},{"internalType":"uint256","name":"miningTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skully","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"startMiningBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"stopMiningBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0604052600e60809081526d43756c74205265736f757263657360901b60a0526004906200002f908262000a8a565b5060408051808201909152600281526121a960f11b602082015260059062000058908262000a8a565b50600680546001600160a01b0319908116731b60b6daa371f5066bd8c1dc032627bf1f4e95df179091556007805482167325ff0d27395a7aad578569f83e30c82a07b4ee7d179055600880548216734eab37d5c62fa3bff8f7a5ffce6a88cfc098749c1790556009805490911673c8a2d2d06e9e0b7eb49257776f3c37c9a2050494179055348015620000ea57600080fd5b50620000f63362000396565b620002136001604051806040016040528060058152602001644b61726d6160d81b815250604051806060016040528060328152602001620069f460329139604051806060016040528060368152602001620069be60369139620f424060405180610160016040528060018152602001600181526020016001815260200160018152602001600181526020016001815260200160018152602001600181526020016001815260200160018152602001600181525060405180610160016040528060018152602001600181526020016001815260200160018152602001600181526020016001815260200160018152602001600181526020016001815260200160018152602001600181525060016127106001620003e860201b60201c565b6040805160208101909152600081526200024773ddbfaaed693a33a9de97b16488077f66718489ad60016102bd8462000468565b6200026c7326dae6edf5ddfc6e14908dfc529d10ce03672fb060016101968462000468565b62000291735d02c857e98465f5b3a957b1f43569c4dae58ca060016103688462000468565b620002b6738de3c3891268502f77db7e876d727257dec0f85260016101578462000468565b620002db7369f5649625622afec8eacd367209a79d10a25a17600161011d8462000468565b620002ff734d875aab37398ea559e716ba14aa67911eebf6ee600160298462000468565b620003237334f4c58bd278fe92b32e05452ab695383779e938600160718462000468565b62000347730e7e4a17b79d18870d55e5c6245e8b08068af5d06001608d8462000468565b6200036b73ee13ae5caf40f5757ed890be6330788779984bfa600160118462000468565b6200038f738ea64ce37b7b43974905df5afe6fcfeff424c0a9600160508462000468565b5062000d46565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003546001600160a01b03163314620004485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6200045c8a8a8a8a8a8a8a8a8a8a62000586565b50505050505050505050565b6001600160a01b038416620004ca5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016200043f565b336000620004d8856200075e565b90506000620004e7856200075e565b90506000868152602081815260408083206001600160a01b038b168452909152812080548792906200051b90849062000b56565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46200057d83600089898989620007b4565b50505050505050565b60008a11620005cc5760405162461bcd60e51b815260206004820152601160248201527069642063616e6e6f74206265207a65726f60781b60448201526064016200043f565b60008a8152600b6020526040902054156200063b5760405162461bcd60e51b815260206004820152602860248201527f7265736f757263652077697468206d61746368696e6720696420616c72656164604482015267792065786973747360c01b60648201526084016200043f565b6040518061016001604052808b81526020018a81526020018981526020018881526020018781526020016000815260200186815260200185815260200184815260200183815260200182815250600b60008c8152602001908152602001600020600082015181600001556020820151816001019081620006bc919062000a8a565b5060408201516002820190620006d3908262000a8a565b5060608201516003820190620006ea908262000a8a565b506080820151600482015560a0820151600582015560c082015162000716906006830190600b6200098f565b5060e08201516200072e906011830190600b6200098f565b50610100820151601c820155610120820151601d82015561014090910151601e9091015550505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106200079b576200079b62000b7e565b602090810291909101015292915050565b505050505050565b620007d3846001600160a01b03166200098060201b6200254a1760201c565b15620007ac5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906200080f908990899088908890889060040162000bdc565b6020604051808303816000875af19250505080156200084d575060408051601f3d908101601f191682019092526200084a9181019062000c23565b60015b6200090d576200085c62000c56565b806308c379a0036200089c57506200087362000ca2565b806200088057506200089e565b8060405162461bcd60e51b81526004016200043f919062000d31565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016200043f565b6001600160e01b0319811663f23a6e6160e01b146200057d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016200043f565b6001600160a01b03163b151590565b82600b8101928215620009c0579160200282015b82811115620009c0578251825591602001919060010190620009a3565b50620009ce929150620009d2565b5090565b5b80821115620009ce5760008155600101620009d3565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a1457607f821691505b60208210810362000a3557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a8557600081815260208120601f850160051c8101602086101562000a645750805b601f850160051c820191505b81811015620007ac5782815560010162000a70565b505050565b81516001600160401b0381111562000aa65762000aa6620009e9565b62000abe8162000ab78454620009ff565b8462000a3b565b602080601f83116001811462000af6576000841562000add5750858301515b600019600386901b1c1916600185901b178555620007ac565b600085815260208120601f198616915b8281101562000b275788860151825594840194600190910190840162000b06565b508582101562000b465787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111562000b7857634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b8181101562000bbc5760208185018101518683018201520162000b9e565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009062000c189083018462000b94565b979650505050505050565b60006020828403121562000c3657600080fd5b81516001600160e01b03198116811462000c4f57600080fd5b9392505050565b600060033d111562000c705760046000803e5060005160e01c5b90565b601f8201601f191681016001600160401b038111828210171562000c9b5762000c9b620009e9565b6040525050565b600060443d101562000cb15790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000ce157505050505090565b828501915081518181111562000cfa5750505050505090565b843d870101602082850101111562000d155750505050505090565b62000d266020828601018762000c73565b509095945050505050565b60208152600062000c4f602083018462000b94565b615c688062000d566000396000f3fe608060405234801561001057600080fd5b50600436106101cc5760003560e01c8062fdd58e146101d157806301ffc9a7146101f757806306fdde031461021a5780630e89341c1461022f57806318160ddd146102425780631b107b821461024a5780631e00328e1461026a5780631e8fca2d1461027f57806322fb12a21461029f57806329a91b09146102b25780632eb2c2d6146102c5578063374df9cc146102d85780633b9b21f8146102eb5780634d474898146102fe5780634e1273f4146103115780635ceafa6c1461033157806363ae83e91461035957806367117ed31461036c578063715018a61461038c578063845fabcf146103945780638bc29322146103a75780638da5cb5b146103ba57806395d89b41146103c25780639b3263ff146103ca578063a22cb465146103dd578063a6cde0bf146103f0578063afbba63214610403578063b7ebf50914610416578063bb5b9edd14610429578063bfab1fce1461043c578063bfdfc3f41461044f578063c0ea09d714610462578063c58fe0421461046a578063d0452e3d1461047d578063d180667d14610490578063e8a7dccf14610498578063e985e9c5146104ab578063f242432a146104e7578063f2fde38b146104fa575b600080fd5b6101e46101df366004614d17565b61050d565b6040519081526020015b60405180910390f35b61020a610205366004614d57565b6105a6565b60405190151581526020016101ee565b6102226105f6565b6040516101ee9190614dc4565b61022261023d366004614dd7565b610684565b600a546101e4565b60085461025d906001600160a01b031681565b6040516101ee9190614df0565b61027d610278366004614e04565b61068f565b005b61029261028d366004614dd7565b6106cc565b6040516101ee9190614e5d565b6101e46102ad366004614d17565b610965565b60065461025d906001600160a01b031681565b61027d6102d3366004615075565b610cd6565b60075461025d906001600160a01b031681565b61027d6102f936600461511e565b610d22565b61027d61030c366004614dd7565b610d5b565b61032461031f366004615164565b610ed0565b6040516101ee919061525f565b61034461033f366004614dd7565b610ff9565b6040516101ee99989796959493929190615272565b6101e46103673660046152e2565b6111d8565b61037f61037a366004614d17565b6111f3565b6040516101ee91906152fd565b61027d6115e3565b61027d6103a236600461511e565b61161e565b61027d6103b536600461532f565b611657565b61025d611698565b6102226116a7565b6101e46103d83660046152e2565b6116b4565b61027d6103eb366004615361565b6116cf565b6101e46103fe3660046152e2565b6116da565b61027d61041136600461539d565b61171d565b61027d610424366004614e04565b611756565b61027d61043736600461539d565b61178f565b60095461025d906001600160a01b031681565b61027d61045d36600461542c565b611af3565b61027d611b40565b61037f610478366004614d17565b611f8e565b6101e461048b3660046152e2565b61237c565b61027d612397565b61027d6104a636600461511e565b61242c565b61020a6104b936600461550b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61027d6104f536600461553e565b612465565b61027d6105083660046152e2565b6124aa565b60006001600160a01b03831661057d5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105d757506001600160e01b031982166303a24d0760e21b145b806105a057506301ffc9a760e01b6001600160e01b03198316146105a0565b60048054610603906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461062f906155a2565b801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b505050505081565b60606105a082612559565b33610698611698565b6001600160a01b0316146106be5760405162461bcd60e51b8152600401610574906155dc565b6106c88282612844565b5050565b6106d4614c23565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461070f906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461073b906155a2565b80156107885780601f1061075d57610100808354040283529160200191610788565b820191906000526020600020905b81548152906001019060200180831161076b57829003601f168201915b505050505081526020016002820180546107a1906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd906155a2565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b50505050508152602001600382018054610833906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461085f906155a2565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116108e957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311610923575050509183525050601c8201546020820152601d8201546040820152601e909101546060909101529392505050565b60008061097284846111f3565b90506000600b600085815260200190815260200160002060405180610160016040529081600082015481526020016001820180546109af906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546109db906155a2565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b50505050508152602001600282018054610a41906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906155a2565b8015610aba5780601f10610a8f57610100808354040283529160200191610aba565b820191906000526020600020905b815481529060010190602001808311610a9d57829003601f168201915b50505050508152602001600382018054610ad3906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff906155a2565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311610b8957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311610bc3575050509183525050601c8201546020820152601d8201546040820152601e9091015460609091015261010081015190915082600a602002015183600960200201518460086020020151856007602002015186600660200201518760056020020151886004602002015189600360200201518a600260200201518b600160200201518c60006020020151610c69919061563d565b610c73919061563d565b610c7d919061563d565b610c87919061563d565b610c91919061563d565b610c9b919061563d565b610ca5919061563d565b610caf919061563d565b610cb9919061563d565b610cc3919061563d565b610ccd9190615650565b95945050505050565b6001600160a01b038516331480610cf25750610cf285336104b9565b610d0e5760405162461bcd60e51b81526004016105749061566f565b610d1b8585858585612c29565b5050505050565b33610d2b611698565b6001600160a01b031614610d515760405162461bcd60e51b8152600401610574906155dc565b6106c88282612e06565b6000610d673383610965565b11610db45760405162461bcd60e51b815260206004820152601e60248201527f757365722063616e6e6f74206d696e652074686973207265736f7572636500006044820152606401610574565b610dbd336111d8565b15610e035760405162461bcd60e51b81526020600482015260166024820152757573657220697320616c7265616479206d696e696e6760501b6044820152606401610574565b6000610e0e336116b4565b1115610e8b57600b6000610e21336116b4565b8152602001908152602001600020601d0154610e3c3361237c565b610e46919061563d565b431015610e8b5760405162461bcd60e51b81526020600482015260136024820152723ab9b2b91034b99037b71031b7b7b63237bbb760691b6044820152606401610574565b336000818152600c60209081526040808320439055600d909152812055610eb29082610965565b336000908152600f6020908152604080832093909355601090522055565b60608151835114610f355760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610574565b600083516001600160401b03811115610f5057610f50614f2c565b604051908082528060200260200182016040528015610f79578160200160208202803683370190505b50905060005b8451811015610ff157610fc4858281518110610f9d57610f9d615611565b6020026020010151858381518110610fb757610fb7615611565b602002602001015161050d565b828281518110610fd657610fd6615611565b6020908102919091010152610fea816156bd565b9050610f7f565b509392505050565b600b602052600090815260409020805460018201805491929161101b906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611047906155a2565b80156110945780601f1061106957610100808354040283529160200191611094565b820191906000526020600020905b81548152906001019060200180831161107757829003601f168201915b5050505050908060020180546110a9906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546110d5906155a2565b80156111225780601f106110f757610100808354040283529160200191611122565b820191906000526020600020905b81548152906001019060200180831161110557829003601f168201915b505050505090806003018054611137906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611163906155a2565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b50505050509080600401549080600501549080601c01549080601d01549080601e0154905089565b6001600160a01b03166000908152600c602052604090205490565b6111fb614c89565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054611236906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611262906155a2565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081526020016002820180546112c8906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546112f4906155a2565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b5050505050815260200160038201805461135a906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611386906155a2565b80156113d35780601f106113a8576101008083540402835291602001916113d3565b820191906000526020600020905b8154815290600101906020018083116113b657829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161141057505050918352505060408051610160810191829052602090920191906011840190600b9082845b81548152602001906001019080831161144a5750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905060006114928585611f8e565b805160c0840151519192506114a691615650565b835260208181015160c0840151909101516114c19190615650565b602084015260408082015160c0840151909101516114df9190615650565b604084015260608082015160c0840151909101516114fd9190615650565b606084015260808082015160c08401519091015161151b9190615650565b608084015260a08082015160c0840151909101516115399190615650565b60a084015260c08082015183820151909101516115569190615650565b60c08085019190915260e0808301519184015101516115759190615650565b60e08401526101008082015160c0840151909101516115949190615650565b6101008401526101208082015160c0840151909101516115b49190615650565b6101208401526101408082015160c0840151909101516115d49190615650565b61014084015250909392505050565b336115ec611698565b6001600160a01b0316146116125760405162461bcd60e51b8152600401610574906155dc565b61161c600061313a565b565b33611627611698565b6001600160a01b03161461164d5760405162461bcd60e51b8152600401610574906155dc565b6106c8828261318c565b33611660611698565b6001600160a01b0316146116865760405162461bcd60e51b8152600401610574906155dc565b611692848484846134bc565b50505050565b6003546001600160a01b031690565b60058054610603906155a2565b6001600160a01b03166000908152600e602052604090205490565b6106c8338383613876565b6000806116e6836111d8565b6116f090436156d6565b6001600160a01b0384166000908152600f60205260409020549091506117169082615650565b9392505050565b33611726611698565b6001600160a01b03161461174c5760405162461bcd60e51b8152600401610574906155dc565b6106c88282613956565b3361175f611698565b6001600160a01b0316146117855760405162461bcd60e51b8152600401610574906155dc565b6106c88282613c86565b33611798611698565b6001600160a01b0316146117be5760405162461bcd60e51b8152600401610574906155dc565b6000600b600084815260200190815260200160002060405180610160016040529081600082015481526020016001820180546117f9906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611825906155a2565b80156118725780601f1061184757610100808354040283529160200191611872565b820191906000526020600020905b81548152906001019060200180831161185557829003601f168201915b5050505050815260200160028201805461188b906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546118b7906155a2565b80156119045780601f106118d957610100808354040283529160200191611904565b820191906000526020600020905b8154815290600101906020018083116118e757829003601f168201915b5050505050815260200160038201805461191d906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906155a2565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116119d357505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311611a0d5750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905082816000015114611a6c5760405162461bcd60e51b8152600401610574906156e9565b8060800151828260a00151611a81919061563d565b1115611a9f5760405162461bcd60e51b815260040161057490615718565b604080516020810190915260008152611aba33858584613fd8565b828260a00151611aca919061563d565b6000858152600b6020526040902060050155600a54611aea90849061563d565b600a5550505050565b33611afc611698565b6001600160a01b031614611b225760405162461bcd60e51b8152600401610574906155dc565b611b348a8a8a8a8a8a8a8a8a8a6140da565b50505050505050505050565b33600090815260106020908152604080832054808452600b83528184208251610160810190935280548352600181018054929594919291840191611b83906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611baf906155a2565b8015611bfc5780601f10611bd157610100808354040283529160200191611bfc565b820191906000526020600020905b815481529060010190602001808311611bdf57829003601f168201915b50505050508152602001600282018054611c15906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c41906155a2565b8015611c8e5780601f10611c6357610100808354040283529160200191611c8e565b820191906000526020600020905b815481529060010190602001808311611c7157829003601f168201915b50505050508152602001600382018054611ca7906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd3906155a2565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311611d5d57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311611d975750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905081816000015114611df65760405162461bcd60e51b8152600401610574906156e9565b60008211611e3b5760405162461bcd60e51b815260206004820152601260248201527175736572206973206e6f74206d696e696e6760701b6044820152606401610574565b806101400151611e4a336111d8565b611e5490436156d6565b1015611e945760405162461bcd60e51b815260206004820152600f60248201526e36b4b732903337b9103637b733b2b960891b6044820152606401610574565b610140810151336000908152600f60205260408120549091611eb591615650565b90508160800151818360a00151611ecc919061563d565b1115611eea5760405162461bcd60e51b815260040161057490615718565b336000818152600c60209081526040808320839055600d8252808320439055600f8252808320839055805180830182528381528484526010909252909120549091611f36918484613fd8565b818360a00151611f46919061563d565b6000858152600b6020526040902060050155600a54611f6690839061563d565b600a555050336000908152601060209081526040808320839055600e90915290209190915550565b611f96614c89565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054611fd1906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffd906155a2565b801561204a5780601f1061201f5761010080835404028352916020019161204a565b820191906000526020600020905b81548152906001019060200180831161202d57829003601f168201915b50505050508152602001600282018054612063906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461208f906155a2565b80156120dc5780601f106120b1576101008083540402835291602001916120dc565b820191906000526020600020905b8154815290600101906020018083116120bf57829003601f168201915b505050505081526020016003820180546120f5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612121906155a2565b801561216e5780601f106121435761010080835404028352916020019161216e565b820191906000526020600020905b81548152906001019060200180831161215157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116121ab57505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116121e55750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905061224e8160e001516000600b811061223b5761223b615611565b6020020151612249866142a4565b614316565b825260e081015160200151612266906122498661432d565b602083015260e081015160400151612281906122498661435e565b604083015260e08101516060015161229e9061224986600161438f565b606083015260e0810151608001516122bb9061224986600261438f565b608083015260e081015160a001516122d89061224986600b61438f565b60a083015260e081015160c001516122f59061224986600c61438f565b60c083015260e08181015101516123119061224986600d61438f565b60e08084019190915281015161010001516123319061224986601561438f565b61010083015260e081015161012001516123509061224986601661438f565b61012083015260e0810151610140015161236f9061224986601f61438f565b6101408301525092915050565b6001600160a01b03166000908152600d602052604090205490565b336000908152601060205260409020546123ef5760405162461bcd60e51b815260206004820152601960248201527863616e206f6e6c7920657363617065206966206d696e696e6760381b6044820152606401610574565b336000908152600c60209081526040808320839055600d8252808320839055600f825280832083905560108252808320839055600e909152812055565b33612435611698565b6001600160a01b03161461245b5760405162461bcd60e51b8152600401610574906155dc565b6106c88282614403565b6001600160a01b038516331480612481575061248185336104b9565b61249d5760405162461bcd60e51b81526004016105749061566f565b610d1b8585858585614733565b336124b3611698565b6001600160a01b0316146124d95760405162461bcd60e51b8152600401610574906155dc565b6001600160a01b03811661253e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610574565b6125478161313a565b50565b6001600160a01b03163b151590565b6000818152600b602090815260408083208151610160810190925280548252600181018054606095948401919061258f906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546125bb906155a2565b80156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b50505050508152602001600282018054612621906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461264d906155a2565b801561269a5780601f1061266f5761010080835404028352916020019161269a565b820191906000526020600020905b81548152906001019060200180831161267d57829003601f168201915b505050505081526020016003820180546126b3906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546126df906155a2565b801561272c5780601f106127015761010080835404028352916020019161272c565b820191906000526020600020905b81548152906001019060200180831161270f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161276957505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116127a35750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050600061281982602001518360400151846060015160405160200161280593929190615744565b60405160208183030381529060405261484b565b90508060405160200161282c91906157e7565b60405160208183030381529060405292505050919050565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461287f906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546128ab906155a2565b80156128f85780601f106128cd576101008083540402835291602001916128f8565b820191906000526020600020905b8154815290600101906020018083116128db57829003601f168201915b50505050508152602001600282018054612911906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461293d906155a2565b801561298a5780601f1061295f5761010080835404028352916020019161298a565b820191906000526020600020905b81548152906001019060200180831161296d57829003601f168201915b505050505081526020016003820180546129a3906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546129cf906155a2565b8015612a1c5780601f106129f157610100808354040283529160200191612a1c565b820191906000526020600020905b8154815290600101906020018083116129ff57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311612a5957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311612a935750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280848152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151815260200183600b806020026040519081016040528092919082600b6020028082843760009201829052509284525050610100840151602080840191909152610120850151604080850191909152610140860151606090940193909352868252600b815291902082518155908201516001820190612b969082615877565b5060408201516002820190612bab9082615877565b5060608201516003820190612bc09082615877565b506080820151600482015560a0820151600582015560c0820151612bea906006830190600b614ca8565b5060e0820151612c00906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e90910155505050565b8151835114612c8b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610574565b6001600160a01b038416612cb15760405162461bcd60e51b815260040161057490615936565b3360005b8451811015612d98576000858281518110612cd257612cd2615611565b602002602001015190506000858381518110612cf057612cf0615611565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015612d405760405162461bcd60e51b81526004016105749061597b565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612d7d90849061563d565b9250508190555050505080612d91906156bd565b9050612cb5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612de89291906159c5565b60405180910390a4612dfe8187878787876149b4565b505050505050565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054612e41906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6d906155a2565b8015612eba5780601f10612e8f57610100808354040283529160200191612eba565b820191906000526020600020905b815481529060010190602001808311612e9d57829003601f168201915b50505050508152602001600282018054612ed3906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612eff906155a2565b8015612f4c5780601f10612f2157610100808354040283529160200191612f4c565b820191906000526020600020905b815481529060010190602001808311612f2f57829003601f168201915b50505050508152602001600382018054612f65906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612f91906155a2565b8015612fde5780601f10612fb357610100808354040283529160200191612fde565b820191906000526020600020905b815481529060010190602001808311612fc157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161301b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116130555750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280826000015181526020018381526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000600b600084815260200190815260200160002060405180610160016040529081600082015481526020016001820180546131c7906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546131f3906155a2565b80156132405780601f1061321557610100808354040283529160200191613240565b820191906000526020600020905b81548152906001019060200180831161322357829003601f168201915b50505050508152602001600282018054613259906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613285906155a2565b80156132d25780601f106132a7576101008083540402835291602001916132d2565b820191906000526020600020905b8154815290600101906020018083116132b557829003601f168201915b505050505081526020016003820180546132eb906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613317906155a2565b80156133645780601f1061333957610100808354040283529160200191613364565b820191906000526020600020905b81548152906001019060200180831161334757829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116133a157505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116133db5750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200183815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6000600b600086815260200190815260200160002060405180610160016040529081600082015481526020016001820180546134f7906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613523906155a2565b80156135705780601f1061354557610100808354040283529160200191613570565b820191906000526020600020905b81548152906001019060200180831161355357829003601f168201915b50505050508152602001600282018054613589906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546135b5906155a2565b80156136025780601f106135d757610100808354040283529160200191613602565b820191906000526020600020905b8154815290600101906020018083116135e557829003601f168201915b5050505050815260200160038201805461361b906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613647906155a2565b80156136945780601f1061366957610100808354040283529160200191613694565b820191906000526020600020905b81548152906001019060200180831161367757829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116136d157505050918352505060408051610160810191829052602090920191906011840190600b9082845b81548152602001906001019080831161370b5750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280868152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200185815260200184815260200183815250600b60008781526020019081526020016000206000820151816000015560208201518160010190816137e19190615877565b50604082015160028201906137f69082615877565b506060820151600382019061380b9082615877565b506080820151600482015560a0820151600582015560c0820151613835906006830190600b614ca8565b5060e082015161384b906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e909101555050505050565b816001600160a01b0316836001600160a01b0316036138e95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610574565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054613991906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546139bd906155a2565b8015613a0a5780601f106139df57610100808354040283529160200191613a0a565b820191906000526020600020905b8154815290600101906020018083116139ed57829003601f168201915b50505050508152602001600282018054613a23906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4f906155a2565b8015613a9c5780601f10613a7157610100808354040283529160200191613a9c565b820191906000526020600020905b815481529060010190602001808311613a7f57829003601f168201915b50505050508152602001600382018054613ab5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613ae1906155a2565b8015613b2e5780601f10613b0357610100808354040283529160200191613b2e565b820191906000526020600020905b815481529060010190602001808311613b1157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311613b6b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311613ba55750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200182604001518152602001826060015181526020018381526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054613cc1906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613ced906155a2565b8015613d3a5780601f10613d0f57610100808354040283529160200191613d3a565b820191906000526020600020905b815481529060010190602001808311613d1d57829003601f168201915b50505050508152602001600282018054613d53906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613d7f906155a2565b8015613dcc5780601f10613da157610100808354040283529160200191613dcc565b820191906000526020600020905b815481529060010190602001808311613daf57829003601f168201915b50505050508152602001600382018054613de5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613e11906155a2565b8015613e5e5780601f10613e3357610100808354040283529160200191613e5e565b820191906000526020600020905b815481529060010190602001808311613e4157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311613e9b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311613ed55750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280848152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600b806020026040519081016040528092919082600b602002808284376000920182905250928452505060e08401516020808401919091526101008501516040808501919091526101208601516060850152610140860151608090940193909352868252600b815291902082518155908201516001820190612b969082615877565b6001600160a01b0384166140385760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610574565b33600061404485614b16565b9050600061405185614b16565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061408390849061563d565b909155505060408051878152602081018790526001600160a01b03808a169260009291871691600080516020615bd3833981519152910160405180910390a46140d183600089898989614b61565b50505050505050565b60008a1161411e5760405162461bcd60e51b815260206004820152601160248201527069642063616e6e6f74206265207a65726f60781b6044820152606401610574565b60008a8152600b60205260409020541561418b5760405162461bcd60e51b815260206004820152602860248201527f7265736f757263652077697468206d61746368696e6720696420616c72656164604482015267792065786973747360c01b6064820152608401610574565b6040518061016001604052808b81526020018a81526020018981526020018881526020018781526020016000815260200186815260200185815260200184815260200183815260200182815250600b60008c815260200190815260200160002060008201518160000155602082015181600101908161420a9190615877565b506040820151600282019061421f9082615877565b50606082015160038201906142349082615877565b506080820151600482015560a0820151600582015560c082015161425e906006830190600b614ca8565b5060e0820151614274906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e9091015550505050505050505050565b6007546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b602060405180830381865afa1580156142f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a091906159ea565b6000818311156143265781611716565b5090919050565b6006546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b600954604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092169062fdd58e90604401602060405180830381865afa1580156143df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171691906159ea565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461443e906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461446a906155a2565b80156144b75780601f1061448c576101008083540402835291602001916144b7565b820191906000526020600020905b81548152906001019060200180831161449a57829003601f168201915b505050505081526020016002820180546144d0906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546144fc906155a2565b80156145495780601f1061451e57610100808354040283529160200191614549565b820191906000526020600020905b81548152906001019060200180831161452c57829003601f168201915b50505050508152602001600382018054614562906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461458e906155a2565b80156145db5780601f106145b0576101008083540402835291602001916145db565b820191906000526020600020905b8154815290600101906020018083116145be57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161461857505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116146525750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200182604001518152602001838152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6001600160a01b0384166147595760405162461bcd60e51b815260040161057490615936565b33600061476585614b16565b9050600061477285614b16565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156147b55760405162461bcd60e51b81526004016105749061597b565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906147f290849061563d565b909155505060408051888152602081018890526001600160a01b03808b16928c82169291881691600080516020615bd3833981519152910160405180910390a4614840848a8a8a8a8a614b61565b505050505050505050565b8051606090600081900361486f575050604080516020810190915260008152919050565b6000600361487e83600261563d565b6148889190615a03565b614893906004615650565b905060006148a282602061563d565b6001600160401b038111156148b9576148b9614f2c565b6040519080825280601f01601f1916602001820160405280156148e3576020820181803683370190505b5090506000604051806060016040528060408152602001615bf3604091399050600181016020830160005b8681101561496f576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161490e565b506003860660018114614989576002811461499a576149a6565b613d3d60f01b6001198301526149a6565b603d60f81b6000198301525b505050918152949350505050565b6149c6846001600160a01b031661254a565b15612dfe5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906149ff9089908990889088908890600401615a25565b6020604051808303816000875af1925050508015614a3a575060408051601f3d908101601f19168201909252614a3791810190615a83565b60015b614ae657614a46615aa0565b806308c379a003614a7f5750614a5a615abc565b80614a655750614a81565b8060405162461bcd60e51b81526004016105749190614dc4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610574565b6001600160e01b0319811663bc197c8160e01b146140d15760405162461bcd60e51b815260040161057490615b45565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110614b5057614b50615611565b602090810291909101015292915050565b614b73846001600160a01b031661254a565b15612dfe5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190614bac9089908990889088908890600401615b8d565b6020604051808303816000875af1925050508015614be7575060408051601f3d908101601f19168201909252614be491810190615a83565b60015b614bf357614a46615aa0565b6001600160e01b0319811663f23a6e6160e01b146140d15760405162461bcd60e51b815260040161057490615b45565b604051806101600160405280600081526020016060815260200160608152602001606081526020016000815260200160008152602001614c61614c89565b8152602001614c6e614c89565b81526020016000815260200160008152602001600081525090565b604051806101600160405280600b906020820280368337509192915050565b82600b8101928215614cd6579160200282015b82811115614cd6578251825591602001919060010190614cbb565b50614ce2929150614ce6565b5090565b5b80821115614ce25760008155600101614ce7565b80356001600160a01b0381168114614d1257600080fd5b919050565b60008060408385031215614d2a57600080fd5b614d3383614cfb565b946020939093013593505050565b6001600160e01b03198116811461254757600080fd5b600060208284031215614d6957600080fd5b813561171681614d41565b60005b83811015614d8f578181015183820152602001614d77565b50506000910152565b60008151808452614db0816020860160208601614d74565b601f01601f19169290920160200192915050565b6020815260006117166020830184614d98565b600060208284031215614de957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080610180808486031215614e1957600080fd5b83359250848185011115614e2c57600080fd5b506020830190509250929050565b8060005b600b811015611692578151845260209384019390910190600101614e3e565b6020815281516020820152600060208301516103e0806040850152614e86610400850183614d98565b91506040850151601f1980868503016060870152614ea48483614d98565b9350606087015191508086850301608087015250614ec28382614d98565b925050608085015160a085015260a085015160c085015260c0850151614eeb60e0860182614e3a565b5060e0850151614eff610240860182614e3a565b506101008501516103a08501526101208501516103c0850152610140909401519390920192909252919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614f6757614f67614f2c565b6040525050565b60006001600160401b03821115614f8757614f87614f2c565b5060051b60200190565b600082601f830112614fa257600080fd5b81356020614faf82614f6e565b604051614fbc8282614f42565b83815260059390931b8501820192828101915086841115614fdc57600080fd5b8286015b84811015614ff75780358352918301918301614fe0565b509695505050505050565b600082601f83011261501357600080fd5b81356001600160401b0381111561502c5761502c614f2c565b604051615043601f8301601f191660200182614f42565b81815284602083860101111561505857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561508d57600080fd5b61509686614cfb565b94506150a460208701614cfb565b935060408601356001600160401b03808211156150c057600080fd5b6150cc89838a01614f91565b945060608801359150808211156150e257600080fd5b6150ee89838a01614f91565b9350608088013591508082111561510457600080fd5b5061511188828901615002565b9150509295509295909350565b6000806040838503121561513157600080fd5b8235915060208301356001600160401b0381111561514e57600080fd5b61515a85828601615002565b9150509250929050565b6000806040838503121561517757600080fd5b82356001600160401b038082111561518e57600080fd5b818501915085601f8301126151a257600080fd5b813560206151af82614f6e565b6040516151bc8282614f42565b83815260059390931b85018201928281019150898411156151dc57600080fd5b948201945b83861015615201576151f286614cfb565b825294820194908201906151e1565b9650508601359250508082111561521757600080fd5b5061515a85828601614f91565b600081518084526020808501945080840160005b8381101561525457815187529582019590820190600101615238565b509495945050505050565b6020815260006117166020830184615224565b60006101208b835280602084015261528c8184018c614d98565b905082810360408401526152a0818b614d98565b905082810360608401526152b4818a614d98565b6080840198909852505060a081019490945260c084019290925260e083015261010090910152949350505050565b6000602082840312156152f457600080fd5b61171682614cfb565b6101608101818360005b600b811015615326578151835260209283019290910190600101615307565b50505092915050565b6000806000806080858703121561534557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561537457600080fd5b61537d83614cfb565b91506020830135801515811461539257600080fd5b809150509250929050565b600080604083850312156153b057600080fd5b50508035926020909101359150565b600082601f8301126153d057600080fd5b6040516101608082016001600160401b03811183821017156153f4576153f4614f2c565b6040528301818582111561540757600080fd5b845b82811015615421578035825260209182019101615409565b509195945050505050565b6000806000806000806000806000806103c08b8d03121561544c57600080fd5b8a35995060208b01356001600160401b038082111561546a57600080fd5b6154768e838f01615002565b9a5060408d013591508082111561548c57600080fd5b6154988e838f01615002565b995060608d01359150808211156154ae57600080fd5b506154bb8d828e01615002565b97505060808b013595506154d28c60a08d016153bf565b94506154e28c6102008d016153bf565b93506103608b013592506103808b013591506103a08b013590509295989b9194979a5092959850565b6000806040838503121561551e57600080fd5b61552783614cfb565b915061553560208401614cfb565b90509250929050565b600080600080600060a0868803121561555657600080fd5b61555f86614cfb565b945061556d60208701614cfb565b9350604086013592506060860135915060808601356001600160401b0381111561559657600080fd5b61511188828901615002565b600181811c908216806155b657607f821691505b6020821081036155d657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0615627565b600081600019048311821515161561566a5761566a615627565b500290565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6000600182016156cf576156cf615627565b5060010190565b818103818111156105a0576105a0615627565b6020808252601590820152741a5b98dbdc9c9958dd081c995cdbdd5c98d9481a59605a1b604082015260600190565b6020808252601290820152711b585e081cdd5c1c1b1e481c995858da195960721b604082015260600190565b693d913730b6b2911d101160b11b8152835160009061576a81600a850160208901614d74565b72111610113232b9b1b934b83a34b7b7111d101160691b600a91840191820152845161579d81601d840160208901614d74565b6c1116101134b6b0b3b2911d101160991b601d929091019182015283516157cb81602a840160208801614d74565b61227d60f01b602a9290910191820152602c0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161581f81601d850160208701614d74565b91909101601d0192915050565b601f82111561587257600081815260208120601f850160051c810160208610156158535750805b601f850160051c820191505b81811015612dfe5782815560010161585f565b505050565b81516001600160401b0381111561589057615890614f2c565b6158a48161589e84546155a2565b8461582c565b602080601f8311600181146158d957600084156158c15750858301515b600019600386901b1c1916600185901b178555612dfe565b600085815260208120601f198616915b82811015615908578886015182559484019460019091019084016158e9565b50858210156159265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006159d86040830185615224565b8281036020840152610ccd8185615224565b6000602082840312156159fc57600080fd5b5051919050565b600082615a2057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0386811682528516602082015260a060408201819052600090615a5190830186615224565b8281036060840152615a638186615224565b90508281036080840152615a778185614d98565b98975050505050505050565b600060208284031215615a9557600080fd5b815161171681614d41565b600060033d1115615ab95760046000803e5060005160e01c5b90565b600060443d1015615aca5790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715615af957505050505090565b8285019150815181811115615b115750505050505090565b843d8701016020828501011115615b2b5750505050505090565b615b3a60208286010187614f42565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090615bc790830184614d98565b97965050505050505056fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f624142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220e10da269ec8244a1a76cd55451aebd41e6de3a4b46e563862e785c34539ac60e64736f6c6343000810003368747470733a2f2f63616e646c652e6661726d676f642e66696e616e63652f7374617469632f6d656469612f696d616765302e6769664b61726d61206d61726b7320612053756d6d6f6e6572277320636f6e747269627574696f6e7320746f207468652043756c74
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cc5760003560e01c8062fdd58e146101d157806301ffc9a7146101f757806306fdde031461021a5780630e89341c1461022f57806318160ddd146102425780631b107b821461024a5780631e00328e1461026a5780631e8fca2d1461027f57806322fb12a21461029f57806329a91b09146102b25780632eb2c2d6146102c5578063374df9cc146102d85780633b9b21f8146102eb5780634d474898146102fe5780634e1273f4146103115780635ceafa6c1461033157806363ae83e91461035957806367117ed31461036c578063715018a61461038c578063845fabcf146103945780638bc29322146103a75780638da5cb5b146103ba57806395d89b41146103c25780639b3263ff146103ca578063a22cb465146103dd578063a6cde0bf146103f0578063afbba63214610403578063b7ebf50914610416578063bb5b9edd14610429578063bfab1fce1461043c578063bfdfc3f41461044f578063c0ea09d714610462578063c58fe0421461046a578063d0452e3d1461047d578063d180667d14610490578063e8a7dccf14610498578063e985e9c5146104ab578063f242432a146104e7578063f2fde38b146104fa575b600080fd5b6101e46101df366004614d17565b61050d565b6040519081526020015b60405180910390f35b61020a610205366004614d57565b6105a6565b60405190151581526020016101ee565b6102226105f6565b6040516101ee9190614dc4565b61022261023d366004614dd7565b610684565b600a546101e4565b60085461025d906001600160a01b031681565b6040516101ee9190614df0565b61027d610278366004614e04565b61068f565b005b61029261028d366004614dd7565b6106cc565b6040516101ee9190614e5d565b6101e46102ad366004614d17565b610965565b60065461025d906001600160a01b031681565b61027d6102d3366004615075565b610cd6565b60075461025d906001600160a01b031681565b61027d6102f936600461511e565b610d22565b61027d61030c366004614dd7565b610d5b565b61032461031f366004615164565b610ed0565b6040516101ee919061525f565b61034461033f366004614dd7565b610ff9565b6040516101ee99989796959493929190615272565b6101e46103673660046152e2565b6111d8565b61037f61037a366004614d17565b6111f3565b6040516101ee91906152fd565b61027d6115e3565b61027d6103a236600461511e565b61161e565b61027d6103b536600461532f565b611657565b61025d611698565b6102226116a7565b6101e46103d83660046152e2565b6116b4565b61027d6103eb366004615361565b6116cf565b6101e46103fe3660046152e2565b6116da565b61027d61041136600461539d565b61171d565b61027d610424366004614e04565b611756565b61027d61043736600461539d565b61178f565b60095461025d906001600160a01b031681565b61027d61045d36600461542c565b611af3565b61027d611b40565b61037f610478366004614d17565b611f8e565b6101e461048b3660046152e2565b61237c565b61027d612397565b61027d6104a636600461511e565b61242c565b61020a6104b936600461550b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61027d6104f536600461553e565b612465565b61027d6105083660046152e2565b6124aa565b60006001600160a01b03831661057d5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105d757506001600160e01b031982166303a24d0760e21b145b806105a057506301ffc9a760e01b6001600160e01b03198316146105a0565b60048054610603906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461062f906155a2565b801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b505050505081565b60606105a082612559565b33610698611698565b6001600160a01b0316146106be5760405162461bcd60e51b8152600401610574906155dc565b6106c88282612844565b5050565b6106d4614c23565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461070f906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461073b906155a2565b80156107885780601f1061075d57610100808354040283529160200191610788565b820191906000526020600020905b81548152906001019060200180831161076b57829003601f168201915b505050505081526020016002820180546107a1906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd906155a2565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b50505050508152602001600382018054610833906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461085f906155a2565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116108e957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311610923575050509183525050601c8201546020820152601d8201546040820152601e909101546060909101529392505050565b60008061097284846111f3565b90506000600b600085815260200190815260200160002060405180610160016040529081600082015481526020016001820180546109af906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546109db906155a2565b8015610a285780601f106109fd57610100808354040283529160200191610a28565b820191906000526020600020905b815481529060010190602001808311610a0b57829003601f168201915b50505050508152602001600282018054610a41906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906155a2565b8015610aba5780601f10610a8f57610100808354040283529160200191610aba565b820191906000526020600020905b815481529060010190602001808311610a9d57829003601f168201915b50505050508152602001600382018054610ad3906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610aff906155a2565b8015610b4c5780601f10610b2157610100808354040283529160200191610b4c565b820191906000526020600020905b815481529060010190602001808311610b2f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311610b8957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311610bc3575050509183525050601c8201546020820152601d8201546040820152601e9091015460609091015261010081015190915082600a602002015183600960200201518460086020020151856007602002015186600660200201518760056020020151886004602002015189600360200201518a600260200201518b600160200201518c60006020020151610c69919061563d565b610c73919061563d565b610c7d919061563d565b610c87919061563d565b610c91919061563d565b610c9b919061563d565b610ca5919061563d565b610caf919061563d565b610cb9919061563d565b610cc3919061563d565b610ccd9190615650565b95945050505050565b6001600160a01b038516331480610cf25750610cf285336104b9565b610d0e5760405162461bcd60e51b81526004016105749061566f565b610d1b8585858585612c29565b5050505050565b33610d2b611698565b6001600160a01b031614610d515760405162461bcd60e51b8152600401610574906155dc565b6106c88282612e06565b6000610d673383610965565b11610db45760405162461bcd60e51b815260206004820152601e60248201527f757365722063616e6e6f74206d696e652074686973207265736f7572636500006044820152606401610574565b610dbd336111d8565b15610e035760405162461bcd60e51b81526020600482015260166024820152757573657220697320616c7265616479206d696e696e6760501b6044820152606401610574565b6000610e0e336116b4565b1115610e8b57600b6000610e21336116b4565b8152602001908152602001600020601d0154610e3c3361237c565b610e46919061563d565b431015610e8b5760405162461bcd60e51b81526020600482015260136024820152723ab9b2b91034b99037b71031b7b7b63237bbb760691b6044820152606401610574565b336000818152600c60209081526040808320439055600d909152812055610eb29082610965565b336000908152600f6020908152604080832093909355601090522055565b60608151835114610f355760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610574565b600083516001600160401b03811115610f5057610f50614f2c565b604051908082528060200260200182016040528015610f79578160200160208202803683370190505b50905060005b8451811015610ff157610fc4858281518110610f9d57610f9d615611565b6020026020010151858381518110610fb757610fb7615611565b602002602001015161050d565b828281518110610fd657610fd6615611565b6020908102919091010152610fea816156bd565b9050610f7f565b509392505050565b600b602052600090815260409020805460018201805491929161101b906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611047906155a2565b80156110945780601f1061106957610100808354040283529160200191611094565b820191906000526020600020905b81548152906001019060200180831161107757829003601f168201915b5050505050908060020180546110a9906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546110d5906155a2565b80156111225780601f106110f757610100808354040283529160200191611122565b820191906000526020600020905b81548152906001019060200180831161110557829003601f168201915b505050505090806003018054611137906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611163906155a2565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b50505050509080600401549080600501549080601c01549080601d01549080601e0154905089565b6001600160a01b03166000908152600c602052604090205490565b6111fb614c89565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054611236906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611262906155a2565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081526020016002820180546112c8906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546112f4906155a2565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b5050505050815260200160038201805461135a906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611386906155a2565b80156113d35780601f106113a8576101008083540402835291602001916113d3565b820191906000526020600020905b8154815290600101906020018083116113b657829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161141057505050918352505060408051610160810191829052602090920191906011840190600b9082845b81548152602001906001019080831161144a5750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905060006114928585611f8e565b805160c0840151519192506114a691615650565b835260208181015160c0840151909101516114c19190615650565b602084015260408082015160c0840151909101516114df9190615650565b604084015260608082015160c0840151909101516114fd9190615650565b606084015260808082015160c08401519091015161151b9190615650565b608084015260a08082015160c0840151909101516115399190615650565b60a084015260c08082015183820151909101516115569190615650565b60c08085019190915260e0808301519184015101516115759190615650565b60e08401526101008082015160c0840151909101516115949190615650565b6101008401526101208082015160c0840151909101516115b49190615650565b6101208401526101408082015160c0840151909101516115d49190615650565b61014084015250909392505050565b336115ec611698565b6001600160a01b0316146116125760405162461bcd60e51b8152600401610574906155dc565b61161c600061313a565b565b33611627611698565b6001600160a01b03161461164d5760405162461bcd60e51b8152600401610574906155dc565b6106c8828261318c565b33611660611698565b6001600160a01b0316146116865760405162461bcd60e51b8152600401610574906155dc565b611692848484846134bc565b50505050565b6003546001600160a01b031690565b60058054610603906155a2565b6001600160a01b03166000908152600e602052604090205490565b6106c8338383613876565b6000806116e6836111d8565b6116f090436156d6565b6001600160a01b0384166000908152600f60205260409020549091506117169082615650565b9392505050565b33611726611698565b6001600160a01b03161461174c5760405162461bcd60e51b8152600401610574906155dc565b6106c88282613956565b3361175f611698565b6001600160a01b0316146117855760405162461bcd60e51b8152600401610574906155dc565b6106c88282613c86565b33611798611698565b6001600160a01b0316146117be5760405162461bcd60e51b8152600401610574906155dc565b6000600b600084815260200190815260200160002060405180610160016040529081600082015481526020016001820180546117f9906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611825906155a2565b80156118725780601f1061184757610100808354040283529160200191611872565b820191906000526020600020905b81548152906001019060200180831161185557829003601f168201915b5050505050815260200160028201805461188b906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546118b7906155a2565b80156119045780601f106118d957610100808354040283529160200191611904565b820191906000526020600020905b8154815290600101906020018083116118e757829003601f168201915b5050505050815260200160038201805461191d906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906155a2565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116119d357505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311611a0d5750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905082816000015114611a6c5760405162461bcd60e51b8152600401610574906156e9565b8060800151828260a00151611a81919061563d565b1115611a9f5760405162461bcd60e51b815260040161057490615718565b604080516020810190915260008152611aba33858584613fd8565b828260a00151611aca919061563d565b6000858152600b6020526040902060050155600a54611aea90849061563d565b600a5550505050565b33611afc611698565b6001600160a01b031614611b225760405162461bcd60e51b8152600401610574906155dc565b611b348a8a8a8a8a8a8a8a8a8a6140da565b50505050505050505050565b33600090815260106020908152604080832054808452600b83528184208251610160810190935280548352600181018054929594919291840191611b83906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611baf906155a2565b8015611bfc5780601f10611bd157610100808354040283529160200191611bfc565b820191906000526020600020905b815481529060010190602001808311611bdf57829003601f168201915b50505050508152602001600282018054611c15906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c41906155a2565b8015611c8e5780601f10611c6357610100808354040283529160200191611c8e565b820191906000526020600020905b815481529060010190602001808311611c7157829003601f168201915b50505050508152602001600382018054611ca7906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd3906155a2565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311611d5d57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311611d975750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905081816000015114611df65760405162461bcd60e51b8152600401610574906156e9565b60008211611e3b5760405162461bcd60e51b815260206004820152601260248201527175736572206973206e6f74206d696e696e6760701b6044820152606401610574565b806101400151611e4a336111d8565b611e5490436156d6565b1015611e945760405162461bcd60e51b815260206004820152600f60248201526e36b4b732903337b9103637b733b2b960891b6044820152606401610574565b610140810151336000908152600f60205260408120549091611eb591615650565b90508160800151818360a00151611ecc919061563d565b1115611eea5760405162461bcd60e51b815260040161057490615718565b336000818152600c60209081526040808320839055600d8252808320439055600f8252808320839055805180830182528381528484526010909252909120549091611f36918484613fd8565b818360a00151611f46919061563d565b6000858152600b6020526040902060050155600a54611f6690839061563d565b600a555050336000908152601060209081526040808320839055600e90915290209190915550565b611f96614c89565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054611fd1906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffd906155a2565b801561204a5780601f1061201f5761010080835404028352916020019161204a565b820191906000526020600020905b81548152906001019060200180831161202d57829003601f168201915b50505050508152602001600282018054612063906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461208f906155a2565b80156120dc5780601f106120b1576101008083540402835291602001916120dc565b820191906000526020600020905b8154815290600101906020018083116120bf57829003601f168201915b505050505081526020016003820180546120f5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612121906155a2565b801561216e5780601f106121435761010080835404028352916020019161216e565b820191906000526020600020905b81548152906001019060200180831161215157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116121ab57505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116121e55750505050508152602001601c8201548152602001601d8201548152602001601e82015481525050905061224e8160e001516000600b811061223b5761223b615611565b6020020151612249866142a4565b614316565b825260e081015160200151612266906122498661432d565b602083015260e081015160400151612281906122498661435e565b604083015260e08101516060015161229e9061224986600161438f565b606083015260e0810151608001516122bb9061224986600261438f565b608083015260e081015160a001516122d89061224986600b61438f565b60a083015260e081015160c001516122f59061224986600c61438f565b60c083015260e08181015101516123119061224986600d61438f565b60e08084019190915281015161010001516123319061224986601561438f565b61010083015260e081015161012001516123509061224986601661438f565b61012083015260e0810151610140015161236f9061224986601f61438f565b6101408301525092915050565b6001600160a01b03166000908152600d602052604090205490565b336000908152601060205260409020546123ef5760405162461bcd60e51b815260206004820152601960248201527863616e206f6e6c7920657363617065206966206d696e696e6760381b6044820152606401610574565b336000908152600c60209081526040808320839055600d8252808320839055600f825280832083905560108252808320839055600e909152812055565b33612435611698565b6001600160a01b03161461245b5760405162461bcd60e51b8152600401610574906155dc565b6106c88282614403565b6001600160a01b038516331480612481575061248185336104b9565b61249d5760405162461bcd60e51b81526004016105749061566f565b610d1b8585858585614733565b336124b3611698565b6001600160a01b0316146124d95760405162461bcd60e51b8152600401610574906155dc565b6001600160a01b03811661253e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610574565b6125478161313a565b50565b6001600160a01b03163b151590565b6000818152600b602090815260408083208151610160810190925280548252600181018054606095948401919061258f906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546125bb906155a2565b80156126085780601f106125dd57610100808354040283529160200191612608565b820191906000526020600020905b8154815290600101906020018083116125eb57829003601f168201915b50505050508152602001600282018054612621906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461264d906155a2565b801561269a5780601f1061266f5761010080835404028352916020019161269a565b820191906000526020600020905b81548152906001019060200180831161267d57829003601f168201915b505050505081526020016003820180546126b3906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546126df906155a2565b801561272c5780601f106127015761010080835404028352916020019161272c565b820191906000526020600020905b81548152906001019060200180831161270f57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161276957505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116127a35750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050600061281982602001518360400151846060015160405160200161280593929190615744565b60405160208183030381529060405261484b565b90508060405160200161282c91906157e7565b60405160208183030381529060405292505050919050565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461287f906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546128ab906155a2565b80156128f85780601f106128cd576101008083540402835291602001916128f8565b820191906000526020600020905b8154815290600101906020018083116128db57829003601f168201915b50505050508152602001600282018054612911906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461293d906155a2565b801561298a5780601f1061295f5761010080835404028352916020019161298a565b820191906000526020600020905b81548152906001019060200180831161296d57829003601f168201915b505050505081526020016003820180546129a3906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546129cf906155a2565b8015612a1c5780601f106129f157610100808354040283529160200191612a1c565b820191906000526020600020905b8154815290600101906020018083116129ff57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311612a5957505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311612a935750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280848152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c00151815260200183600b806020026040519081016040528092919082600b6020028082843760009201829052509284525050610100840151602080840191909152610120850151604080850191909152610140860151606090940193909352868252600b815291902082518155908201516001820190612b969082615877565b5060408201516002820190612bab9082615877565b5060608201516003820190612bc09082615877565b506080820151600482015560a0820151600582015560c0820151612bea906006830190600b614ca8565b5060e0820151612c00906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e90910155505050565b8151835114612c8b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610574565b6001600160a01b038416612cb15760405162461bcd60e51b815260040161057490615936565b3360005b8451811015612d98576000858281518110612cd257612cd2615611565b602002602001015190506000858381518110612cf057612cf0615611565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015612d405760405162461bcd60e51b81526004016105749061597b565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612d7d90849061563d565b9250508190555050505080612d91906156bd565b9050612cb5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612de89291906159c5565b60405180910390a4612dfe8187878787876149b4565b505050505050565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054612e41906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6d906155a2565b8015612eba5780601f10612e8f57610100808354040283529160200191612eba565b820191906000526020600020905b815481529060010190602001808311612e9d57829003601f168201915b50505050508152602001600282018054612ed3906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612eff906155a2565b8015612f4c5780601f10612f2157610100808354040283529160200191612f4c565b820191906000526020600020905b815481529060010190602001808311612f2f57829003601f168201915b50505050508152602001600382018054612f65906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054612f91906155a2565b8015612fde5780601f10612fb357610100808354040283529160200191612fde565b820191906000526020600020905b815481529060010190602001808311612fc157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161301b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116130555750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280826000015181526020018381526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000600b600084815260200190815260200160002060405180610160016040529081600082015481526020016001820180546131c7906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546131f3906155a2565b80156132405780601f1061321557610100808354040283529160200191613240565b820191906000526020600020905b81548152906001019060200180831161322357829003601f168201915b50505050508152602001600282018054613259906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613285906155a2565b80156132d25780601f106132a7576101008083540402835291602001916132d2565b820191906000526020600020905b8154815290600101906020018083116132b557829003601f168201915b505050505081526020016003820180546132eb906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613317906155a2565b80156133645780601f1061333957610100808354040283529160200191613364565b820191906000526020600020905b81548152906001019060200180831161334757829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116133a157505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116133db5750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200183815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6000600b600086815260200190815260200160002060405180610160016040529081600082015481526020016001820180546134f7906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613523906155a2565b80156135705780601f1061354557610100808354040283529160200191613570565b820191906000526020600020905b81548152906001019060200180831161355357829003601f168201915b50505050508152602001600282018054613589906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546135b5906155a2565b80156136025780601f106135d757610100808354040283529160200191613602565b820191906000526020600020905b8154815290600101906020018083116135e557829003601f168201915b5050505050815260200160038201805461361b906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613647906155a2565b80156136945780601f1061366957610100808354040283529160200191613694565b820191906000526020600020905b81548152906001019060200180831161367757829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b8154815260200190600101908083116136d157505050918352505060408051610160810191829052602090920191906011840190600b9082845b81548152602001906001019080831161370b5750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280868152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200185815260200184815260200183815250600b60008781526020019081526020016000206000820151816000015560208201518160010190816137e19190615877565b50604082015160028201906137f69082615877565b506060820151600382019061380b9082615877565b506080820151600482015560a0820151600582015560c0820151613835906006830190600b614ca8565b5060e082015161384b906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e909101555050505050565b816001600160a01b0316836001600160a01b0316036138e95760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610574565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054613991906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546139bd906155a2565b8015613a0a5780601f106139df57610100808354040283529160200191613a0a565b820191906000526020600020905b8154815290600101906020018083116139ed57829003601f168201915b50505050508152602001600282018054613a23906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4f906155a2565b8015613a9c5780601f10613a7157610100808354040283529160200191613a9c565b820191906000526020600020905b815481529060010190602001808311613a7f57829003601f168201915b50505050508152602001600382018054613ab5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613ae1906155a2565b8015613b2e5780601f10613b0357610100808354040283529160200191613b2e565b820191906000526020600020905b815481529060010190602001808311613b1157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311613b6b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311613ba55750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200182604001518152602001826060015181526020018381526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6000600b60008481526020019081526020016000206040518061016001604052908160008201548152602001600182018054613cc1906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613ced906155a2565b8015613d3a5780601f10613d0f57610100808354040283529160200191613d3a565b820191906000526020600020905b815481529060010190602001808311613d1d57829003601f168201915b50505050508152602001600282018054613d53906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613d7f906155a2565b8015613dcc5780601f10613da157610100808354040283529160200191613dcc565b820191906000526020600020905b815481529060010190602001808311613daf57829003601f168201915b50505050508152602001600382018054613de5906155a2565b80601f0160208091040260200160405190810160405280929190818152602001828054613e11906155a2565b8015613e5e5780601f10613e3357610100808354040283529160200191613e5e565b820191906000526020600020905b815481529060010190602001808311613e4157829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b815481526020019060010190808311613e9b57505050918352505060408051610160810191829052602090920191906011840190600b9082845b815481526020019060010190808311613ed55750505050508152602001601c8201548152602001601d8201548152602001601e820154815250509050604051806101600160405280848152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600b806020026040519081016040528092919082600b602002808284376000920182905250928452505060e08401516020808401919091526101008501516040808501919091526101208601516060850152610140860151608090940193909352868252600b815291902082518155908201516001820190612b969082615877565b6001600160a01b0384166140385760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610574565b33600061404485614b16565b9050600061405185614b16565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061408390849061563d565b909155505060408051878152602081018790526001600160a01b03808a169260009291871691600080516020615bd3833981519152910160405180910390a46140d183600089898989614b61565b50505050505050565b60008a1161411e5760405162461bcd60e51b815260206004820152601160248201527069642063616e6e6f74206265207a65726f60781b6044820152606401610574565b60008a8152600b60205260409020541561418b5760405162461bcd60e51b815260206004820152602860248201527f7265736f757263652077697468206d61746368696e6720696420616c72656164604482015267792065786973747360c01b6064820152608401610574565b6040518061016001604052808b81526020018a81526020018981526020018881526020018781526020016000815260200186815260200185815260200184815260200183815260200182815250600b60008c815260200190815260200160002060008201518160000155602082015181600101908161420a9190615877565b506040820151600282019061421f9082615877565b50606082015160038201906142349082615877565b506080820151600482015560a0820151600582015560c082015161425e906006830190600b614ca8565b5060e0820151614274906011830190600b614ca8565b50610100820151601c820155610120820151601d82015561014090910151601e9091015550505050505050505050565b6007546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b602060405180830381865afa1580156142f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a091906159ea565b6000818311156143265781611716565b5090919050565b6006546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906142d5908590600401614df0565b600954604051627eeac760e11b81526001600160a01b03848116600483015260248201849052600092169062fdd58e90604401602060405180830381865afa1580156143df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171691906159ea565b6000600b6000848152602001908152602001600020604051806101600160405290816000820154815260200160018201805461443e906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461446a906155a2565b80156144b75780601f1061448c576101008083540402835291602001916144b7565b820191906000526020600020905b81548152906001019060200180831161449a57829003601f168201915b505050505081526020016002820180546144d0906155a2565b80601f01602080910402602001604051908101604052809291908181526020018280546144fc906155a2565b80156145495780601f1061451e57610100808354040283529160200191614549565b820191906000526020600020905b81548152906001019060200180831161452c57829003601f168201915b50505050508152602001600382018054614562906155a2565b80601f016020809104026020016040519081016040528092919081815260200182805461458e906155a2565b80156145db5780601f106145b0576101008083540402835291602001916145db565b820191906000526020600020905b8154815290600101906020018083116145be57829003601f168201915b50505091835250506004820154602082015260058201546040808301919091528051610160810191829052606090920191906006840190600b9082845b81548152602001906001019080831161461857505050918352505060408051610160810191829052602090920191906011840190600b9082845b8154815260200190600101908083116146525750505050508152602001601c8201548152602001601d8201548152602001601e8201548152505090506040518061016001604052808481526020018260200151815260200182604001518152602001838152602001826080015181526020018260a0015181526020018260c0015181526020018260e00151815260200182610100015181526020018261012001518152602001826101400151815250600b6000858152602001908152602001600020600082015181600001556020820151816001019081612b969190615877565b6001600160a01b0384166147595760405162461bcd60e51b815260040161057490615936565b33600061476585614b16565b9050600061477285614b16565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156147b55760405162461bcd60e51b81526004016105749061597b565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906147f290849061563d565b909155505060408051888152602081018890526001600160a01b03808b16928c82169291881691600080516020615bd3833981519152910160405180910390a4614840848a8a8a8a8a614b61565b505050505050505050565b8051606090600081900361486f575050604080516020810190915260008152919050565b6000600361487e83600261563d565b6148889190615a03565b614893906004615650565b905060006148a282602061563d565b6001600160401b038111156148b9576148b9614f2c565b6040519080825280601f01601f1916602001820160405280156148e3576020820181803683370190505b5090506000604051806060016040528060408152602001615bf3604091399050600181016020830160005b8681101561496f576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161490e565b506003860660018114614989576002811461499a576149a6565b613d3d60f01b6001198301526149a6565b603d60f81b6000198301525b505050918152949350505050565b6149c6846001600160a01b031661254a565b15612dfe5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906149ff9089908990889088908890600401615a25565b6020604051808303816000875af1925050508015614a3a575060408051601f3d908101601f19168201909252614a3791810190615a83565b60015b614ae657614a46615aa0565b806308c379a003614a7f5750614a5a615abc565b80614a655750614a81565b8060405162461bcd60e51b81526004016105749190614dc4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610574565b6001600160e01b0319811663bc197c8160e01b146140d15760405162461bcd60e51b815260040161057490615b45565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110614b5057614b50615611565b602090810291909101015292915050565b614b73846001600160a01b031661254a565b15612dfe5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190614bac9089908990889088908890600401615b8d565b6020604051808303816000875af1925050508015614be7575060408051601f3d908101601f19168201909252614be491810190615a83565b60015b614bf357614a46615aa0565b6001600160e01b0319811663f23a6e6160e01b146140d15760405162461bcd60e51b815260040161057490615b45565b604051806101600160405280600081526020016060815260200160608152602001606081526020016000815260200160008152602001614c61614c89565b8152602001614c6e614c89565b81526020016000815260200160008152602001600081525090565b604051806101600160405280600b906020820280368337509192915050565b82600b8101928215614cd6579160200282015b82811115614cd6578251825591602001919060010190614cbb565b50614ce2929150614ce6565b5090565b5b80821115614ce25760008155600101614ce7565b80356001600160a01b0381168114614d1257600080fd5b919050565b60008060408385031215614d2a57600080fd5b614d3383614cfb565b946020939093013593505050565b6001600160e01b03198116811461254757600080fd5b600060208284031215614d6957600080fd5b813561171681614d41565b60005b83811015614d8f578181015183820152602001614d77565b50506000910152565b60008151808452614db0816020860160208601614d74565b601f01601f19169290920160200192915050565b6020815260006117166020830184614d98565b600060208284031215614de957600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080610180808486031215614e1957600080fd5b83359250848185011115614e2c57600080fd5b506020830190509250929050565b8060005b600b811015611692578151845260209384019390910190600101614e3e565b6020815281516020820152600060208301516103e0806040850152614e86610400850183614d98565b91506040850151601f1980868503016060870152614ea48483614d98565b9350606087015191508086850301608087015250614ec28382614d98565b925050608085015160a085015260a085015160c085015260c0850151614eeb60e0860182614e3a565b5060e0850151614eff610240860182614e3a565b506101008501516103a08501526101208501516103c0850152610140909401519390920192909252919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614f6757614f67614f2c565b6040525050565b60006001600160401b03821115614f8757614f87614f2c565b5060051b60200190565b600082601f830112614fa257600080fd5b81356020614faf82614f6e565b604051614fbc8282614f42565b83815260059390931b8501820192828101915086841115614fdc57600080fd5b8286015b84811015614ff75780358352918301918301614fe0565b509695505050505050565b600082601f83011261501357600080fd5b81356001600160401b0381111561502c5761502c614f2c565b604051615043601f8301601f191660200182614f42565b81815284602083860101111561505857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561508d57600080fd5b61509686614cfb565b94506150a460208701614cfb565b935060408601356001600160401b03808211156150c057600080fd5b6150cc89838a01614f91565b945060608801359150808211156150e257600080fd5b6150ee89838a01614f91565b9350608088013591508082111561510457600080fd5b5061511188828901615002565b9150509295509295909350565b6000806040838503121561513157600080fd5b8235915060208301356001600160401b0381111561514e57600080fd5b61515a85828601615002565b9150509250929050565b6000806040838503121561517757600080fd5b82356001600160401b038082111561518e57600080fd5b818501915085601f8301126151a257600080fd5b813560206151af82614f6e565b6040516151bc8282614f42565b83815260059390931b85018201928281019150898411156151dc57600080fd5b948201945b83861015615201576151f286614cfb565b825294820194908201906151e1565b9650508601359250508082111561521757600080fd5b5061515a85828601614f91565b600081518084526020808501945080840160005b8381101561525457815187529582019590820190600101615238565b509495945050505050565b6020815260006117166020830184615224565b60006101208b835280602084015261528c8184018c614d98565b905082810360408401526152a0818b614d98565b905082810360608401526152b4818a614d98565b6080840198909852505060a081019490945260c084019290925260e083015261010090910152949350505050565b6000602082840312156152f457600080fd5b61171682614cfb565b6101608101818360005b600b811015615326578151835260209283019290910190600101615307565b50505092915050565b6000806000806080858703121561534557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561537457600080fd5b61537d83614cfb565b91506020830135801515811461539257600080fd5b809150509250929050565b600080604083850312156153b057600080fd5b50508035926020909101359150565b600082601f8301126153d057600080fd5b6040516101608082016001600160401b03811183821017156153f4576153f4614f2c565b6040528301818582111561540757600080fd5b845b82811015615421578035825260209182019101615409565b509195945050505050565b6000806000806000806000806000806103c08b8d03121561544c57600080fd5b8a35995060208b01356001600160401b038082111561546a57600080fd5b6154768e838f01615002565b9a5060408d013591508082111561548c57600080fd5b6154988e838f01615002565b995060608d01359150808211156154ae57600080fd5b506154bb8d828e01615002565b97505060808b013595506154d28c60a08d016153bf565b94506154e28c6102008d016153bf565b93506103608b013592506103808b013591506103a08b013590509295989b9194979a5092959850565b6000806040838503121561551e57600080fd5b61552783614cfb565b915061553560208401614cfb565b90509250929050565b600080600080600060a0868803121561555657600080fd5b61555f86614cfb565b945061556d60208701614cfb565b9350604086013592506060860135915060808601356001600160401b0381111561559657600080fd5b61511188828901615002565b600181811c908216806155b657607f821691505b6020821081036155d657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156105a0576105a0615627565b600081600019048311821515161561566a5761566a615627565b500290565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6000600182016156cf576156cf615627565b5060010190565b818103818111156105a0576105a0615627565b6020808252601590820152741a5b98dbdc9c9958dd081c995cdbdd5c98d9481a59605a1b604082015260600190565b6020808252601290820152711b585e081cdd5c1c1b1e481c995858da195960721b604082015260600190565b693d913730b6b2911d101160b11b8152835160009061576a81600a850160208901614d74565b72111610113232b9b1b934b83a34b7b7111d101160691b600a91840191820152845161579d81601d840160208901614d74565b6c1116101134b6b0b3b2911d101160991b601d929091019182015283516157cb81602a840160208801614d74565b61227d60f01b602a9290910191820152602c0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161581f81601d850160208701614d74565b91909101601d0192915050565b601f82111561587257600081815260208120601f850160051c810160208610156158535750805b601f850160051c820191505b81811015612dfe5782815560010161585f565b505050565b81516001600160401b0381111561589057615890614f2c565b6158a48161589e84546155a2565b8461582c565b602080601f8311600181146158d957600084156158c15750858301515b600019600386901b1c1916600185901b178555612dfe565b600085815260208120601f198616915b82811015615908578886015182559484019460019091019084016158e9565b50858210156159265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006159d86040830185615224565b8281036020840152610ccd8185615224565b6000602082840312156159fc57600080fd5b5051919050565b600082615a2057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0386811682528516602082015260a060408201819052600090615a5190830186615224565b8281036060840152615a638186615224565b90508281036080840152615a778185614d98565b98975050505050505050565b600060208284031215615a9557600080fd5b815161171681614d41565b600060033d1115615ab95760046000803e5060005160e01c5b90565b600060443d1015615aca5790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715615af957505050505090565b8285019150815181811115615b115750505050505090565b843d8701016020828501011115615b2b5750505050505090565b615b3a60208286010187614f42565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090615bc790830184614d98565b97965050505050505056fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f624142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220e10da269ec8244a1a76cd55451aebd41e6de3a4b46e563862e785c34539ac60e64736f6c63430008100033
Deployed Bytecode Sourcemap
20324:17986:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7944:230;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;7944:230:0;;;;;;;;7513:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;7513:310:0;1019:187:1;20384:37:0;;;:::i;:::-;;;;;;;:::i;38198:107::-;;;;;;:::i;:::-;;:::i;20824:99::-;20903:12;;20824:99;;20622:74;;;;;-1:-1:-1;;;;;20622:74:0;;;;;;;;;;:::i;28370:168::-;;;;;;:::i;:::-;;:::i;:::-;;21424:155;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31723:430::-;;;;;;:::i;:::-;;:::i;20464:71::-;;;;;-1:-1:-1;;;;;20464:71:0;;;9511:438;;;;;;:::i;:::-;;:::i;20542:73::-;;;;;-1:-1:-1;;;;;20542:73:0;;;27442:160;;;;;;:::i;:::-;;:::i;33209:970::-;;;;;;:::i;:::-;;:::i;8182:499::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21366:49::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;32215:115::-;;;;;;:::i;:::-;;:::i;30840:875::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19021:94::-;;;:::i;27611:185::-;;;;;;:::i;:::-;;:::i;28546:254::-;;;;;;:::i;:::-;;:::i;18370:87::-;;;:::i;20428:27::-;;;:::i;32563:117::-;;;;;;:::i;:::-;;:::i;8689:155::-;;;;;;:::i;:::-;;:::i;32794:193::-;;;;;;:::i;:::-;;:::i;27983:171::-;;;;;;:::i;:::-;;:::i;28162:200::-;;;;;;:::i;:::-;;:::i;29383:508::-;;;;;;:::i;:::-;;:::i;20703:77::-;;;;;-1:-1:-1;;;;;20703:77:0;;;22381:626;;;;;;:::i;:::-;;:::i;34399:1506::-;;;:::i;30014:818::-;;;;;;:::i;:::-;;:::i;32388:113::-;;;;;;:::i;:::-;;:::i;35913:523::-;;;:::i;27805:169::-;;;;;;:::i;:::-;;:::i;8852:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8975:27:0;;;8951:4;8975:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;8852:168;9028:406;;;;;;:::i;:::-;;:::i;19270:192::-;;;;;;:::i;:::-;;:::i;7944:230::-;8030:7;-1:-1:-1;;;;;8058:21:0;;8050:76;;;;-1:-1:-1;;;8050:76:0;;15787:2:1;8050:76:0;;;15769:21:1;15826:2;15806:18;;;15799:30;15865:34;15845:18;;;15838:62;-1:-1:-1;;;15916:18:1;;;15909:40;15966:19;;8050:76:0;;;;;;;;;-1:-1:-1;8144:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;8144:22:0;;;;;;;;;;7944:230;;;;;:::o;7513:310::-;7615:4;-1:-1:-1;;;;;;7652:41:0;;-1:-1:-1;;;7652:41:0;;:110;;-1:-1:-1;;;;;;;7710:52:0;;-1:-1:-1;;;7710:52:0;7652:110;:163;;;-1:-1:-1;;;;;;;;;;6941:40:0;;;7779:36;6832:157;20384:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38198:107::-;38253:13;38286:11;38294:2;38286:7;:11::i;28370:168::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;28495:35:::1;28517:5;28524;28495:21;:35::i;:::-;28370:168:::0;;:::o;21424:155::-;21481:15;;:::i;:::-;21509:19;21531:12;:19;21544:5;21531:19;;;;;;;;;;;21509:41;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21509:41:0;;;-1:-1:-1;;21509:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21509:41:0;;;-1:-1:-1;;21509:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21509:41:0;;;-1:-1:-1;;21509:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21424:155;-1:-1:-1;;;21424:155:0:o;31723:430::-;31792:7;31812:26;31841:24;31856:2;31859:5;31841:14;:24::i;:::-;31812:53;;31876:19;31898:12;:19;31911:5;31898:19;;;;;;;;;;;31876:41;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31876:41:0;;;-1:-1:-1;;31876:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31876:41:0;;;-1:-1:-1;;31876:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31876:41:0;;;-1:-1:-1;;31876:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;32130:12;;;;31876:41;;-1:-1:-1;32117:7:0;32125:2;32117:11;;;;32104:7;32112:1;32104:10;;;;32074:7;32082:1;32074:10;;;;32061:7;32069:1;32061:10;;;;32048:7;32056:1;32048:10;;;;32018:7;32026:1;32018:10;;;;32005:7;32013:1;32005:10;;;;31992:7;32000:1;31992:10;;;;31962:7;31970:1;31962:10;;;;31949:7;31957:1;31949:10;;;;31936:7;31944:1;31936:10;;;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;:66;;;;:::i;:::-;:79;;;;:::i;:::-;:92;;;;:::i;:::-;:122;;;;:::i;:::-;:135;;;;:::i;:::-;:148;;;;:::i;:::-;:178;;;;:::i;:::-;:192;;;;:::i;:::-;31935:207;;;;:::i;:::-;31928:214;31723:430;-1:-1:-1;;;;;31723:430:0:o;9511:438::-;-1:-1:-1;;;;;9744:20:0;;6591:10;9744:20;;:60;;-1:-1:-1;9768:36:0;9785:4;6591:10;8852:168;:::i;9768:36::-;9722:156;;;;-1:-1:-1;;;9722:156:0;;;;;;;:::i;:::-;9889:52;9912:4;9918:2;9922:3;9927:7;9936:4;9889:22;:52::i;:::-;9511:438;;;;;:::o;27442:160::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;27560:34:::1;27581:5;27588;27560:20;:34::i;33209:970::-:0;33339:1;33306:30;33318:10;33330:5;33306:11;:30::i;:::-;:34;33298:77;;;;-1:-1:-1;;;33298:77:0;;17926:2:1;33298:77:0;;;17908:21:1;17965:2;17945:18;;;17938:30;18004:32;17984:18;;;17977:60;18054:18;;33298:77:0;17724:354:1;33298:77:0;33456:28;33473:10;33456:16;:28::i;:::-;:33;33448:68;;;;-1:-1:-1;;;33448:68:0;;18285:2:1;33448:68:0;;;18267:21:1;18324:2;18304:18;;;18297:30;-1:-1:-1;;;18343:18:1;;;18336:52;18405:18;;33448:68:0;18083:346:1;33448:68:0;33565:1;33533:29;33551:10;33533:17;:29::i;:::-;:33;33529:256;;;33692:12;:43;33705:29;33723:10;33705:17;:29::i;:::-;33692:43;;;;;;;;;;;:55;;;33662:27;33678:10;33662:15;:27::i;:::-;:85;;;;:::i;:::-;33646:12;:101;;33638:133;;;;-1:-1:-1;;;33638:133:0;;18636:2:1;33638:133:0;;;18618:21:1;18675:2;18655:18;;;18648:30;-1:-1:-1;;;18694:18:1;;;18687:49;18753:18;;33638:133:0;18434:343:1;33638:133:0;33865:10;33847:29;;;;:17;:29;;;;;;;;33879:12;33847:44;;33943:16;:28;;;;;:32;34051:30;;34075:5;34051:11;:30::i;:::-;34037:10;34020:28;;;;:16;:28;;;;;;;;:61;;;;34131:16;:28;;;:36;33209:970::o;8182:499::-;8318:16;8374:3;:10;8355:8;:15;:29;8347:83;;;;-1:-1:-1;;;8347:83:0;;18984:2:1;8347:83:0;;;18966:21:1;19023:2;19003:18;;;18996:30;19062:34;19042:18;;;19035:62;-1:-1:-1;;;19113:18:1;;;19106:39;19162:19;;8347:83:0;18782:405:1;8347:83:0;8443:30;8490:8;:15;-1:-1:-1;;;;;8476:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8476:30:0;;8443:63;;8524:9;8519:122;8543:8;:15;8539:1;:19;8519:122;;;8599:30;8609:8;8618:1;8609:11;;;;;;;;:::i;:::-;;;;;;;8622:3;8626:1;8622:6;;;;;;;;:::i;:::-;;;;;;;8599:9;:30::i;:::-;8580:13;8594:1;8580:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;8560:3;;;:::i;:::-;;;8519:122;;;-1:-1:-1;8660:13:0;8182:499;-1:-1:-1;;;8182:499:0:o;21366:49::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32215:115::-;-1:-1:-1;;;;;32301:21:0;32274:7;32301:21;;;:17;:21;;;;;;;32215:115::o;30840:875::-;30912:26;;:::i;:::-;30958:19;30980:12;:19;30993:5;30980:19;;;;;;;;;;;30958:41;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30958:41:0;;;-1:-1:-1;;30958:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30958:41:0;;;-1:-1:-1;;30958:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31010:27;31040:26;31056:2;31060:5;31040:15;:26::i;:::-;31113:11;;31090:17;;;;:20;31010:56;;-1:-1:-1;31090:34:0;;;:::i;:::-;31077:47;;:10;31171:11;;;;31148:17;;;;:20;;;;:34;;31171:11;31148:34;:::i;:::-;31135:10;;;:47;31229:11;;;;;31206:17;;;;:20;;;;:34;;31229:11;31206:34;:::i;:::-;31193:10;;;:47;31287:11;;;;;31264:17;;;;:20;;;;:34;;31287:11;31264:34;:::i;:::-;31251:10;;;:47;31345:11;;;;;31322:17;;;;:20;;;;:34;;31345:11;31322:34;:::i;:::-;31309:10;;;:47;31403:11;;;;;31380:17;;;;:20;;;;:34;;31403:11;31380:34;:::i;:::-;31367:10;;;:47;31461:11;;;;;31438:17;;;;:20;;;;:34;;31461:11;31438:34;:::i;:::-;31425:10;;;;:47;;;;31519:11;;;;;31496:17;;;;:20;;:34;;31519:11;31496:34;:::i;:::-;31483:10;;;:47;31577:11;;;;;31554:17;;;;:20;;;;:34;;31577:11;31554:34;:::i;:::-;31541:10;;;:47;31635:11;;;;;31612:17;;;;:20;;;;:34;;31635:11;31612:34;:::i;:::-;31599:10;;;:47;31695:12;;;;;31671:17;;;;:21;;;;:36;;31695:12;31671:36;:::i;:::-;31657:11;;;:50;-1:-1:-1;31657:7:0;;30840:875;-1:-1:-1;;;30840:875:0:o;19021:94::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;19086:21:::1;19104:1;19086:9;:21::i;:::-;19021:94::o:0;27611:185::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;27741:47:::1;27769:5;27776:11;27741:27;:47::i;28546:254::-:0;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;28725:67:::1;28751:5;28758:8;28768:11;28781:10;28725:25;:67::i;:::-;28546:254:::0;;;;:::o;18370:87::-;18443:6;;-1:-1:-1;;;;;18443:6:0;;18370:87::o;20428:27::-;;;;;;;:::i;32563:117::-;-1:-1:-1;;;;;32650:22:0;32623:7;32650:22;;;:18;:22;;;;;;;32563:117::o;8689:155::-;8784:52;6591:10;8817:8;8827;8784:18;:52::i;32794:193::-;32852:7;32872:14;32904:20;32921:2;32904:16;:20::i;:::-;32889:35;;:12;:35;:::i;:::-;-1:-1:-1;;;;;32949:20:0;;;;;;:16;:20;;;;;;32872:52;;-1:-1:-1;32942:27:0;;32872:52;32942:27;:::i;:::-;32935:34;32794:193;-1:-1:-1;;;32794:193:0:o;27983:171::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;28103:43:::1;28129:5;28136:9;28103:25;:43::i;28162:200::-:0;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;28303:51:::1;28333:5;28340:13;28303:29;:51::i;29383:508::-:0;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;29468:27:::1;29498:12;:16;29511:2;29498:16;;;;;;;;;;;29468:46;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;29468:46:0;;;-1:-1:-1;;29468:46:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;;;29468:46:0;;;-1:-1:-1;;29468:46:0::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;29551:2;29533:11;:14;;;:20;29525:54;;;;-1:-1:-1::0;;;29525:54:0::1;;;;;;;:::i;:::-;29631:11;:21;;;29624:3;29598:11;:23;;;:29;;;;:::i;:::-;:54;;29590:85;;;;-1:-1:-1::0;;;29590:85:0::1;;;;;;;:::i;:::-;29716:9;::::0;;::::1;::::0;::::1;::::0;;;29696:17:::1;29716:9:::0;;29736:32:::1;29742:10;29754:2:::0;29758:3;29716:9;29736:5:::1;:32::i;:::-;29836:3;29810:11;:23;;;:29;;;;:::i;:::-;29779:16;::::0;;;:12:::1;:16;::::0;;;;:28:::1;;:60:::0;29865:12:::1;::::0;:18:::1;::::0;29880:3;;29865:18:::1;:::i;:::-;29850:12;:33:::0;-1:-1:-1;;;;29383:508:0:o;22381:626::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;22748:251:::1;22775:2;22793:5;22814:11;22841:7;22864:9;22889:13;22918:5;22939:8;22962:11;22988:10;22748:12;:251::i;:::-;22381:626:::0;;;;;;;;;;:::o;34399:1506::-;34512:10;34474:18;34495:28;;;:16;:28;;;;;;;;;34566:24;;;:12;:24;;;;;34536:54;;;;;;;;;;;;;;;;;34495:28;;34474:18;34566:24;;34536:54;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34536:54:0;;;-1:-1:-1;;34536:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34536:54:0;;;-1:-1:-1;;34536:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34627:10;34609:11;:14;;;:28;34601:62;;;;-1:-1:-1;;;34601:62:0;;;;;;;:::i;:::-;34747:1;34734:10;:14;34726:45;;;;-1:-1:-1;;;34726:45:0;;20364:2:1;34726:45:0;;;20346:21:1;20403:2;20383:18;;;20376:30;-1:-1:-1;;;20422:18:1;;;20415:48;20480:18;;34726:45:0;20162:342:1;34726:45:0;34890:11;:22;;;34858:28;34875:10;34858:16;:28::i;:::-;34843:43;;:12;:43;:::i;:::-;:69;;34835:97;;;;-1:-1:-1;;;34835:97:0;;20711:2:1;34835:97:0;;;20693:21:1;20750:2;20730:18;;;20723:30;-1:-1:-1;;;20769:18:1;;;20762:45;20824:18;;34835:97:0;20509:339:1;34835:97:0;35021:22;;;;35009:10;34978:11;34992:28;;;:16;:28;;;;;;34978:11;;34992:51;;;:::i;:::-;34978:65;;35097:11;:21;;;35090:3;35064:11;:23;;;:29;;;;:::i;:::-;:54;;35056:85;;;;-1:-1:-1;;;35056:85:0;;;;;;;:::i;:::-;35213:10;35227:1;35195:29;;;:17;:29;;;;;;;;:33;;;35279:16;:28;;;;;35310:12;35279:43;;35369:16;:28;;;;;:32;;;35472:9;;;;;;;;;;35510:28;;;:16;:28;;;;;;;35472:9;;35492:58;;35540:3;35472:9;35492:5;:58::i;:::-;35628:3;35602:11;:23;;;:29;;;;:::i;:::-;35563:24;;;;:12;:24;;;;;:36;;:68;35657:12;;:18;;35672:3;;35657:18;:::i;:::-;35642:12;:33;-1:-1:-1;;35789:10:0;35803:1;35772:28;;;:16;:28;;;;;;;;:32;;;35854:18;:30;;;;;:43;;;;-1:-1:-1;34399:1506:0:o;30014:818::-;30087:27;;:::i;:::-;30137:19;30159:12;:19;30172:5;30159:19;;;;;;;;;;;30137:41;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30137:41:0;;;-1:-1:-1;;30137:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30137:41:0;;;-1:-1:-1;;30137:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30203:29;30207:3;:9;;;30217:1;30207:12;;;;;;;:::i;:::-;;;;;30220:11;30228:2;30220:7;:11::i;:::-;30203:3;:29::i;:::-;30189:43;;30261:9;;;;30189:11;30261:12;;30257:32;;30274:14;30285:2;30274:10;:14::i;30257:32::-;30243:11;;;:46;30318:9;;;;:12;;;30314:30;;30331:12;30340:2;30331:8;:12::i;30314:30::-;30300:11;;;:44;30373:9;;;;:12;;;30369:34;;30386:16;30396:2;30400:1;30386:9;:16::i;30369:34::-;30355:11;;;:48;30432:9;;;;:12;;;30428:34;;30445:16;30455:2;30459:1;30445:9;:16::i;30428:34::-;30414:11;;;:48;30491:9;;;;:12;;;30487:35;;30504:17;30514:2;30518;30504:9;:17::i;30487:35::-;30473:11;;;:49;30551:9;;;;:12;;;30547:35;;30564:17;30574:2;30578;30564:9;:17::i;30547:35::-;30533:11;;;:49;30611:9;;;;;:12;;30607:35;;30624:17;30634:2;30638;30624:9;:17::i;30607:35::-;30593:11;;;;:49;;;;30671:9;;;:12;;;30667:35;;30684:17;30694:2;30698;30684:9;:17::i;30667:35::-;30653:11;;;:49;30731:9;;;;:12;;;30727:35;;30744:17;30754:2;30758;30744:9;:17::i;30727:35::-;30713:11;;;:49;30792:9;;;;:13;;;30788:36;;30806:17;30816:2;30820;30806:9;:17::i;30788:36::-;30773:12;;;:51;-1:-1:-1;30773:8:0;30014:818;-1:-1:-1;;30014:818:0:o;32388:113::-;-1:-1:-1;;;;;32473:20:0;32446:7;32473:20;;;:16;:20;;;;;;;32388:113::o;35913:523::-;35974:10;35988:1;35957:28;;;:16;:28;;;;;;35949:70;;;;-1:-1:-1;;;35949:70:0;;21055:2:1;35949:70:0;;;21037:21:1;21094:2;21074:18;;;21067:30;-1:-1:-1;;;21113:18:1;;;21106:55;21178:18;;35949:70:0;20853:349:1;35949:70:0;36089:10;36103:1;36071:29;;;:17;:29;;;;;;;;:33;;;36155:16;:28;;;;;:32;;;36234:16;:28;;;;;:32;;;36309:16;:28;;;;;:32;;;36394:18;:30;;;;;:34;35913:523::o;27805:169::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;27927:39:::1;27951:5;27958:7;27927:23;:39::i;9028:406::-:0;-1:-1:-1;;;;;9236:20:0;;6591:10;9236:20;;:60;;-1:-1:-1;9260:36:0;9277:4;6591:10;8852:168;:::i;9260:36::-;9214:156;;;;-1:-1:-1;;;9214:156:0;;;;;;;:::i;:::-;9381:45;9399:4;9405:2;9409;9413:6;9421:4;9381:17;:45::i;19270:192::-;6591:10;18590:7;:5;:7::i;:::-;-1:-1:-1;;;;;18590:23:0;;18582:68;;;;-1:-1:-1;;;18582:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19359:22:0;::::1;19351:73;;;::::0;-1:-1:-1;;;19351:73:0;;21409:2:1;19351:73:0::1;::::0;::::1;21391:21:1::0;21448:2;21428:18;;;21421:30;21487:34;21467:18;;;21460:62;-1:-1:-1;;;21538:18:1;;;21531:36;21584:19;;19351:73:0::1;21207:402:1::0;19351:73:0::1;19435:19;19445:8;19435:9;:19::i;:::-;19270:192:::0;:::o;2273:117::-;-1:-1:-1;;;;;2359:19:0;;:23;;;2273:117::o;37669:521::-;37754:27;37784:21;;;:12;:21;;;;;;;;37754:51;;;;;;;;;;;;;;;;;37726:13;;37754:27;:51;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37754:51:0;;;-1:-1:-1;;37754:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37754:51:0;;;-1:-1:-1;;37754:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37816:18;37837:264;37922:11;:16;;;37989:11;:23;;;38058:11;:19;;;37864:234;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37837:13;:264::i;:::-;37816:285;;38176:4;38126:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;38112:70;;;;37669:521;;;:::o;26128:590::-;26247:27;26277:12;:19;26290:5;26277:19;;;;;;;;;;;26247:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26247:49:0;;;-1:-1:-1;;26247:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26247:49:0;;;-1:-1:-1;;26247:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26329:381;;;;;;;;26352:5;26329:381;;;;26373:11;:16;;;26329:381;;;;26405:11;:23;;;26329:381;;;;26444:11;:19;;;26329:381;;;;26479:11;:21;;;26329:381;;;;26516:11;:23;;;26329:381;;;;26554:11;:25;;;26329:381;;;;26594:5;26329:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26329:381:0;;;-1:-1:-1;;26614:20:0;;;;26329:381;;;;;;;;26649:23;;;;26329:381;;;;;;;;26687:22;;;;26329:381;;;;;;;;26307:19;;;:12;:19;;;;;:403;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26307:403:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26307:403:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26307:403:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26307:403:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26307:403:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26128:590:0:o;10939:1146::-;11166:7;:14;11152:3;:10;:28;11144:81;;;;-1:-1:-1;;;11144:81:0;;25883:2:1;11144:81:0;;;25865:21:1;25922:2;25902:18;;;25895:30;25961:34;25941:18;;;25934:62;-1:-1:-1;;;26012:18:1;;;26005:38;26060:19;;11144:81:0;25681:404:1;11144:81:0;-1:-1:-1;;;;;11244:16:0;;11236:66;;;;-1:-1:-1;;;11236:66:0;;;;;;;:::i;:::-;6591:10;11315:16;11432:421;11456:3;:10;11452:1;:14;11432:421;;;11488:10;11501:3;11505:1;11501:6;;;;;;;;:::i;:::-;;;;;;;11488:19;;11522:14;11539:7;11547:1;11539:10;;;;;;;;:::i;:::-;;;;;;;;;;;;11566:19;11588:13;;;;;;;;;;-1:-1:-1;;;;;11588:19:0;;;;;;;;;;;;11539:10;;-1:-1:-1;11630:21:0;;;;11622:76;;;;-1:-1:-1;;;11622:76:0;;;;;;;:::i;:::-;11742:9;:13;;;;;;;;;;;-1:-1:-1;;;;;11742:19:0;;;;;;;;;;11764:20;;;11742:42;;11814:17;;;;;;;:27;;11764:20;;11742:9;11814:27;;11764:20;;11814:27;:::i;:::-;;;;;;;;11473:380;;;11468:3;;;;:::i;:::-;;;11432:421;;;;11900:2;-1:-1:-1;;;;;11870:47:0;11894:4;-1:-1:-1;;;;;11870:47:0;11884:8;-1:-1:-1;;;;;11870:47:0;;11904:3;11909:7;11870:47;;;;;;;:::i;:::-;;;;;;;;12002:75;12038:8;12048:4;12054:2;12058:3;12063:7;12072:4;12002:35;:75::i;:::-;11133:952;10939:1146;;;;;:::o;23103:606::-;23214:27;23244:12;:19;23257:5;23244:19;;;;;;;;;;;23214:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23214:49:0;;;-1:-1:-1;;23214:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23214:49:0;;;-1:-1:-1;;23214:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23296:405;;;;;;;;23319:11;:14;;;23296:405;;;;23349:5;23296:405;;;;23370:11;:23;;;23296:405;;;;23409:11;:19;;;23296:405;;;;23444:11;:21;;;23296:405;;;;23481:11;:23;;;23296:405;;;;23519:11;:25;;;23296:405;;;;23559:11;:17;;;23296:405;;;;23591:11;:20;;;23296:405;;;;23626:11;:23;;;23296:405;;;;23664:11;:22;;;23296:405;;;23274:12;:19;23287:5;23274:19;;;;;;;;;;;:427;;;;;;;;;;;;;;;;;;;;;:::i;19470:173::-;19545:6;;;-1:-1:-1;;;;;19562:17:0;;;-1:-1:-1;;;;;;19562:17:0;;;;;;;19595:40;;19545:6;;;19562:17;19545:6;;19595:40;;19526:16;;19595:40;19515:128;19470:173;:::o;23720:595::-;23844:27;23874:12;:19;23887:5;23874:19;;;;;;;;;;;23844:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23844:49:0;;;-1:-1:-1;;23844:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23844:49:0;;;-1:-1:-1;;23844:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23926:381;;;;;;;;23949:5;23926:381;;;;23970:11;:16;;;23926:381;;;;24002:11;23926:381;;;;24029:11;:19;;;23926:381;;;;24064:11;:21;;;23926:381;;;;24101:11;:23;;;23926:381;;;;24139:11;:25;;;23926:381;;;;24179:11;:17;;;23926:381;;;;24211:11;:20;;;23926:381;;;;24246:11;:23;;;23926:381;;;;24284:11;:22;;;23926:381;;;23904:12;:19;23917:5;23904:19;;;;;;;;;;;:403;;;;;;;;;;;;;;;;;;;;;:::i;26727:619::-;26899:27;26929:12;:19;26942:5;26929:19;;;;;;;;;;;26899:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26899:49:0;;;-1:-1:-1;;26899:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26899:49:0;;;-1:-1:-1;;26899:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26981:357;;;;;;;;27004:5;26981:357;;;;27025:11;:16;;;26981:357;;;;27057:11;:23;;;26981:357;;;;27096:11;:19;;;26981:357;;;;27131:11;:21;;;26981:357;;;;27168:11;:23;;;26981:357;;;;27206:11;:25;;;26981:357;;;;27246:11;:17;;;26981:357;;;;27278:8;26981:357;;;;27301:11;26981:357;;;;27327:10;26981:357;;;26959:12;:19;26972:5;26959:19;;;;;;;;;;;:379;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26959:379:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26959:379:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26959:379:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26959:379:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26959:379:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26727:619:0:o;15429:297::-;15550:8;-1:-1:-1;;;;;15541:17:0;:5;-1:-1:-1;;;;;15541:17:0;;15533:71;;;;-1:-1:-1;;;15533:71:0;;27579:2:1;15533:71:0;;;27561:21:1;27618:2;27598:18;;;27591:30;27657:34;27637:18;;;27630:62;-1:-1:-1;;;27708:18:1;;;27701:39;27757:19;;15533:71:0;27377:405:1;15533:71:0;-1:-1:-1;;;;;15615:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;15615:46:0;;;;;;;;;;15677:41;;1159::1;;;15677::0;;1132:18:1;15677:41:0;;;;;;;15429:297;;;:::o;24919:585::-;25033:27;25063:12;:19;25076:5;25063:19;;;;;;;;;;;25033:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25033:49:0;;;-1:-1:-1;;25033:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25033:49:0;;;-1:-1:-1;;25033:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25115:381;;;;;;;;25138:5;25115:381;;;;25159:11;:16;;;25115:381;;;;25191:11;:23;;;25115:381;;;;25230:11;:19;;;25115:381;;;;25265:9;25115:381;;;;25290:11;:23;;;25115:381;;;;25328:11;:25;;;25115:381;;;;25368:11;:17;;;25115:381;;;;25400:11;:20;;;25115:381;;;;25435:11;:23;;;25115:381;;;;25473:11;:22;;;25115:381;;;25093:12;:19;25106:5;25093:19;;;;;;;;;;;:403;;;;;;;;;;;;;;;;;;;;;:::i;25513:606::-;25648:27;25678:12;:19;25691:5;25678:19;;;;;;;;;;;25648:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25648:49:0;;;-1:-1:-1;;25648:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25648:49:0;;;-1:-1:-1;;25648:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25730:381;;;;;;;;25753:5;25730:381;;;;25774:11;:16;;;25730:381;;;;25806:11;:23;;;25730:381;;;;25845:11;:19;;;25730:381;;;;25880:11;:21;;;25730:381;;;;25917:11;:23;;;25730:381;;;;25955:13;25730:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25730:381:0;;;-1:-1:-1;;25983:17:0;;;;25730:381;;;;;;;;26015:20;;;;25730:381;;;;;;;;26050:23;;;;25730:381;;;;26088:22;;;;25730:381;;;;;;;;25708:19;;;:12;:19;;;;;:403;;;;;;;;;;;;;;;;:::i;12189:686::-;-1:-1:-1;;;;;12299:16:0;;12291:62;;;;-1:-1:-1;;;12291:62:0;;27989:2:1;12291:62:0;;;27971:21:1;28028:2;28008:18;;;28001:30;28067:34;28047:18;;;28040:62;-1:-1:-1;;;28118:18:1;;;28111:31;28159:19;;12291:62:0;27787:397:1;12291:62:0;6591:10;12366:16;12431:21;12449:2;12431:17;:21::i;:::-;12408:44;;12463:24;12490:25;12508:6;12490:17;:25::i;:::-;12463:52;;12607:9;:13;;;;;;;;;;;-1:-1:-1;;;;;12607:17:0;;;;;;;;;:27;;12628:6;;12607:9;:27;;12628:6;;12607:27;:::i;:::-;;;;-1:-1:-1;;12650:52:0;;;28363:25:1;;;28419:2;28404:18;;28397:34;;;-1:-1:-1;;;;;12650:52:0;;;;12683:1;;12650:52;;;;-1:-1:-1;;;;;;;;;;;12650:52:0;28336:18:1;12650:52:0;;;;;;;12793:74;12824:8;12842:1;12846:2;12850;12854:6;12862:4;12793:30;:74::i;:::-;12280:595;;;12189:686;;;;:::o;21587:785::-;21960:1;21955:2;:6;21947:36;;;;-1:-1:-1;;;21947:36:0;;28644:2:1;21947:36:0;;;28626:21:1;28683:2;28663:18;;;28656:30;-1:-1:-1;;;28702:18:1;;;28695:47;28759:18;;21947:36:0;28442:341:1;21947:36:0;22002:16;;;;:12;:16;;;;;:19;:24;21994:77;;;;-1:-1:-1;;;21994:77:0;;28990:2:1;21994:77:0;;;28972:21:1;29029:2;29009:18;;;29002:30;29068:34;29048:18;;;29041:62;-1:-1:-1;;;29119:18:1;;;29112:38;29167:19;;21994:77:0;28788:404:1;21994:77:0;22101:263;;;;;;;;22124:2;22101:263;;;;22142:5;22101:263;;;;22164:11;22101:263;;;;22191:7;22101:263;;;;22214:9;22101:263;;;;22239:1;22101:263;;;;22256:13;22101:263;;;;22284:5;22101:263;;;;22304:8;22101:263;;;;22327:11;22101:263;;;;22353:10;22101:263;;;22082:12;:16;22095:2;22082:16;;;;;;;;;;;:282;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22082:282:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22082:282:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22082:282:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22082:282:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22082:282:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21587:785:0:o;28897:107::-;28976:6;;:20;;-1:-1:-1;;;28976:20:0;;28949:7;;-1:-1:-1;;;;;28976:6:0;;:16;;:20;;28993:2;;28976:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29899:107::-;29957:7;29989:1;29984;:6;;:14;;29997:1;29984:14;;;-1:-1:-1;29993:1:0;;29977:21;-1:-1:-1;29899:107:0:o;29012:108::-;29094:4;;:18;;-1:-1:-1;;;29094:18:0;;29067:7;;-1:-1:-1;;;;;29094:4:0;;:14;;:18;;29109:2;;29094:18;;;:::i;29128:109::-;29208:7;;:21;;-1:-1:-1;;;29208:21:0;;29181:7;;-1:-1:-1;;;;;29208:7:0;;:17;;:21;;29226:2;;29208:21;;;:::i;29245:128::-;29339:8;;:26;;-1:-1:-1;;;29339:26:0;;-1:-1:-1;;;;;29578:32:1;;;29339:26:0;;;29560:51:1;29627:18;;;29620:34;;;29312:7:0;;29339:8;;:18;;29533::1;;29339:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24324:586::-;24440:27;24470:12;:19;24483:5;24470:19;;;;;;;;;;;24440:49;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24440:49:0;;;-1:-1:-1;;24440:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24440:49:0;;;-1:-1:-1;;24440:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24522:380;;;;;;;;24545:5;24522:380;;;;24566:11;:16;;;24522:380;;;;24597:11;:23;;;24522:380;;;;24636:7;24522:380;;;;24659:11;:21;;;24522:380;;;;24696:11;:23;;;24522:380;;;;24734:11;:25;;;24522:380;;;;24774:11;:17;;;24522:380;;;;24806:11;:20;;;24522:380;;;;24841:11;:23;;;24522:380;;;;24879:11;:22;;;24522:380;;;24500:12;:19;24513:5;24500:19;;;;;;;;;;;:402;;;;;;;;;;;;;;;;;;;;;:::i;9957:974::-;-1:-1:-1;;;;;10145:16:0;;10137:66;;;;-1:-1:-1;;;10137:66:0;;;;;;;:::i;:::-;6591:10;10216:16;10281:21;10299:2;10281:17;:21::i;:::-;10258:44;;10313:24;10340:25;10358:6;10340:17;:25::i;:::-;10313:52;;10451:19;10473:13;;;;;;;;;;;-1:-1:-1;;;;;10473:19:0;;;;;;;;;;10511:21;;;;10503:76;;;;-1:-1:-1;;;10503:76:0;;;;;;;:::i;:::-;10615:9;:13;;;;;;;;;;;-1:-1:-1;;;;;10615:19:0;;;;;;;;;;10637:20;;;10615:42;;10679:17;;;;;;;:27;;10637:20;;10615:9;10679:27;;10637:20;;10679:27;:::i;:::-;;;;-1:-1:-1;;10724:46:0;;;28363:25:1;;;28419:2;28404:18;;28397:34;;;-1:-1:-1;;;;;10724:46:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10724:46:0;28336:18:1;10724:46:0;;;;;;;10855:68;10886:8;10896:4;10902:2;10906;10910:6;10918:4;10855:30;:68::i;:::-;10126:805;;;;9957:974;;;;;:::o;38508:1607::-;38606:11;;38566:13;;38592:11;38632:8;;;38628:23;;-1:-1:-1;;38642:9:0;;;;;;;;;-1:-1:-1;38642:9:0;;;38508:1607;-1:-1:-1;38508:1607:0:o;38628:23::-;38703:18;38741:1;38730:7;:3;38736:1;38730:7;:::i;:::-;38729:13;;;;:::i;:::-;38724:19;;:1;:19;:::i;:::-;38703:40;-1:-1:-1;38801:19:0;38833:15;38703:40;38846:2;38833:15;:::i;:::-;-1:-1:-1;;;;;38823:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38823:26:0;;38801:48;;38862:18;38883:5;;;;;;;;;;;;;;;;;38862:26;;38952:1;38945:5;38941:13;38997:2;38989:6;38985:15;39048:1;39016:777;39071:3;39068:1;39065:10;39016:777;;;39126:1;39169:12;;;;;39163:19;39264:4;39252:2;39248:14;;;;;39230:40;;39224:47;39373:2;39369:14;;;39365:25;;39351:40;;39345:47;39502:1;39498:13;;;39494:24;;39480:39;;39474:46;39622:16;;;;39608:31;;39602:38;39300:1;39296:11;;;39394:4;39341:58;;;39332:68;39425:11;;39470:57;;;39461:67;;;;39553:11;;39598:49;;39589:59;39677:3;39673:13;39706:22;;39776:1;39761:17;;;;39119:9;39016:777;;;39020:44;39825:1;39820:3;39816:11;39846:1;39841:84;;;;39944:1;39939:82;;;;39809:212;;39841:84;-1:-1:-1;;;;;39874:17:0;;39867:43;39841:84;;39939:82;-1:-1:-1;;;;;39972:17:0;;39965:41;39809:212;-1:-1:-1;;;40037:26:0;;;40044:6;38508:1607;-1:-1:-1;;;;38508:1607:0:o;16943:813::-;17183:15;:2;-1:-1:-1;;;;;17183:13:0;;:15::i;:::-;17179:570;;;17219:79;;-1:-1:-1;;;17219:79:0;;-1:-1:-1;;;;;17219:43:0;;;;;:79;;17263:8;;17273:4;;17279:3;;17284:7;;17293:4;;17219:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17219:79:0;;;;;;;;-1:-1:-1;;17219:79:0;;;;;;;;;;;;:::i;:::-;;;17215:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17611:6;17604:14;;-1:-1:-1;;;17604:14:0;;;;;;;;:::i;17215:523::-;;;17660:62;;-1:-1:-1;;;17660:62:0;;32035:2:1;17660:62:0;;;32017:21:1;32074:2;32054:18;;;32047:30;32113:34;32093:18;;;32086:62;-1:-1:-1;;;32164:18:1;;;32157:50;32224:19;;17660:62:0;31833:416:1;17215:523:0;-1:-1:-1;;;;;;17380:60:0;;-1:-1:-1;;;17380:60:0;17376:159;;17465:50;;-1:-1:-1;;;17465:50:0;;;;;;;:::i;17764:198::-;17884:16;;;17898:1;17884:16;;;;;;;;;17830;;17859:22;;17884:16;;;;;;;;;;;;-1:-1:-1;17884:16:0;17859:41;;17922:7;17911:5;17917:1;17911:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;17949:5;17764:198;-1:-1:-1;;17764:198:0:o;16191:744::-;16406:15;:2;-1:-1:-1;;;;;16406:13:0;;:15::i;:::-;16402:526;;;16442:72;;-1:-1:-1;;;16442:72:0;;-1:-1:-1;;;;;16442:38:0;;;;;:72;;16481:8;;16491:4;;16497:2;;16501:6;;16509:4;;16442:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16442:72:0;;;;;;;;-1:-1:-1;;16442:72:0;;;;;;;;;;;;:::i;:::-;;;16438:479;;;;:::i;:::-;-1:-1:-1;;;;;;16564:55:0;;-1:-1:-1;;;16564:55:0;16560:154;;16644:50;;-1:-1:-1;;;16644:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;1211:250::-;1296:1;1306:113;1320:6;1317:1;1314:13;1306:113;;;1396:11;;;1390:18;1377:11;;;1370:39;1342:2;1335:10;1306:113;;;-1:-1:-1;;1453:1:1;1435:16;;1428:27;1211:250::o;1466:271::-;1508:3;1546:5;1540:12;1573:6;1568:3;1561:19;1589:76;1658:6;1651:4;1646:3;1642:14;1635:4;1628:5;1624:16;1589:76;:::i;:::-;1719:2;1698:15;-1:-1:-1;;1694:29:1;1685:39;;;;1726:4;1681:50;;1466:271;-1:-1:-1;;1466:271:1:o;1742:220::-;1891:2;1880:9;1873:21;1854:4;1911:45;1952:2;1941:9;1937:18;1929:6;1911:45;:::i;1967:180::-;2026:6;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;-1:-1:-1;2118:23:1;;1967:180;-1:-1:-1;1967:180:1:o;2152:218::-;-1:-1:-1;;;;;2331:32:1;;;;2313:51;;2301:2;2286:18;;2152:218::o;2375:342::-;2469:6;2477;2508:3;2552:2;2540:9;2531:7;2527:23;2523:32;2520:52;;;2568:1;2565;2558:12;2520:52;2604:9;2591:23;2581:33;;2649:7;2644:2;2633:9;2629:18;2626:31;2623:51;;;2670:1;2667;2660:12;2623:51;;2708:2;2697:9;2693:18;2683:28;;2375:342;;;;;:::o;2722:326::-;2815:5;2838:1;2848:194;2862:4;2859:1;2856:11;2848:194;;;2921:13;;2909:26;;2958:4;2982:12;;;;3017:15;;;;2882:1;2875:9;2848:194;;3053:1412;3234:2;3223:9;3216:21;3279:6;3273:13;3268:2;3257:9;3253:18;3246:41;3197:4;3334:2;3326:6;3322:15;3316:22;3357:6;3399:2;3394;3383:9;3379:18;3372:30;3425:53;3472:4;3461:9;3457:20;3443:12;3425:53;:::i;:::-;3411:67;;3527:2;3519:6;3515:15;3509:22;3554:2;3550:7;3621:2;3609:9;3601:6;3597:22;3593:31;3588:2;3577:9;3573:18;3566:59;3648:41;3682:6;3666:14;3648:41;:::i;:::-;3634:55;;3738:2;3730:6;3726:15;3720:22;3698:44;;3807:2;3795:9;3787:6;3783:22;3779:31;3773:3;3762:9;3758:19;3751:60;;3834:41;3868:6;3852:14;3834:41;:::i;:::-;3820:55;;;3930:3;3922:6;3918:16;3912:23;3906:3;3895:9;3891:19;3884:52;3991:3;3983:6;3979:16;3973:23;3967:3;3956:9;3952:19;3945:52;4046:3;4038:6;4034:16;4028:23;4060:61;4116:3;4105:9;4101:19;4085:14;4060:61;:::i;:::-;;4170:3;4162:6;4158:16;4152:23;4184:61;4240:3;4229:9;4225:19;4209:14;4184:61;:::i;:::-;-1:-1:-1;4300:6:1;4288:19;;4282:26;4276:3;4261:19;;4254:55;4364:6;4352:19;;4346:26;4340:3;4325:19;;4318:55;4427:6;4415:19;;;4409:26;4389:18;;;;4382:54;;;;4453:6;3053:1412;-1:-1:-1;3053:1412:1:o;4470:127::-;4531:10;4526:3;4522:20;4519:1;4512:31;4562:4;4559:1;4552:15;4586:4;4583:1;4576:15;4602:249;4712:2;4693:13;;-1:-1:-1;;4689:27:1;4677:40;;-1:-1:-1;;;;;4732:34:1;;4768:22;;;4729:62;4726:88;;;4794:18;;:::i;:::-;4830:2;4823:22;-1:-1:-1;;4602:249:1:o;4856:183::-;4916:4;-1:-1:-1;;;;;4938:30:1;;4935:56;;;4971:18;;:::i;:::-;-1:-1:-1;5016:1:1;5012:14;5028:4;5008:25;;4856:183::o;5044:724::-;5098:5;5151:3;5144:4;5136:6;5132:17;5128:27;5118:55;;5169:1;5166;5159:12;5118:55;5205:6;5192:20;5231:4;5254:43;5294:2;5254:43;:::i;:::-;5326:2;5320:9;5338:31;5366:2;5358:6;5338:31;:::i;:::-;5404:18;;;5496:1;5492:10;;;;5480:23;;5476:32;;;5438:15;;;;-1:-1:-1;5520:15:1;;;5517:35;;;5548:1;5545;5538:12;5517:35;5584:2;5576:6;5572:15;5596:142;5612:6;5607:3;5604:15;5596:142;;;5678:17;;5666:30;;5716:12;;;;5629;;5596:142;;;-1:-1:-1;5756:6:1;5044:724;-1:-1:-1;;;;;;5044:724:1:o;5773:555::-;5815:5;5868:3;5861:4;5853:6;5849:17;5845:27;5835:55;;5886:1;5883;5876:12;5835:55;5909:20;;-1:-1:-1;;;;;5941:26:1;;5938:52;;;5970:18;;:::i;:::-;6019:2;6013:9;6031:67;6086:2;6067:13;;-1:-1:-1;;6063:27:1;6092:4;6059:38;6013:9;6031:67;:::i;:::-;6122:2;6114:6;6107:18;6168:3;6161:4;6156:2;6148:6;6144:15;6140:26;6137:35;6134:55;;;6185:1;6182;6175:12;6134:55;6249:2;6242:4;6234:6;6230:17;6223:4;6215:6;6211:17;6198:54;6296:1;6272:15;;;6289:4;6268:26;6261:37;;;;6276:6;5773:555;-1:-1:-1;;;5773:555:1:o;6333:943::-;6487:6;6495;6503;6511;6519;6572:3;6560:9;6551:7;6547:23;6543:33;6540:53;;;6589:1;6586;6579:12;6540:53;6612:29;6631:9;6612:29;:::i;:::-;6602:39;;6660:38;6694:2;6683:9;6679:18;6660:38;:::i;:::-;6650:48;-1:-1:-1;6749:2:1;6734:18;;6721:32;-1:-1:-1;;;;;6802:14:1;;;6799:34;;;6829:1;6826;6819:12;6799:34;6852:61;6905:7;6896:6;6885:9;6881:22;6852:61;:::i;:::-;6842:71;;6966:2;6955:9;6951:18;6938:32;6922:48;;6995:2;6985:8;6982:16;6979:36;;;7011:1;7008;7001:12;6979:36;7034:63;7089:7;7078:8;7067:9;7063:24;7034:63;:::i;:::-;7024:73;;7150:3;7139:9;7135:19;7122:33;7106:49;;7180:2;7170:8;7167:16;7164:36;;;7196:1;7193;7186:12;7164:36;;7219:51;7262:7;7251:8;7240:9;7236:24;7219:51;:::i;:::-;7209:61;;;6333:943;;;;;;;;:::o;7281:389::-;7359:6;7367;7420:2;7408:9;7399:7;7395:23;7391:32;7388:52;;;7436:1;7433;7426:12;7388:52;7459:23;;;-1:-1:-1;7533:2:1;7518:18;;7505:32;-1:-1:-1;;;;;7549:30:1;;7546:50;;;7592:1;7589;7582:12;7546:50;7615:49;7656:7;7647:6;7636:9;7632:22;7615:49;:::i;:::-;7605:59;;;7281:389;;;;;:::o;7675:1208::-;7793:6;7801;7854:2;7842:9;7833:7;7829:23;7825:32;7822:52;;;7870:1;7867;7860:12;7822:52;7897:23;;-1:-1:-1;;;;;7969:14:1;;;7966:34;;;7996:1;7993;7986:12;7966:34;8034:6;8023:9;8019:22;8009:32;;8079:7;8072:4;8068:2;8064:13;8060:27;8050:55;;8101:1;8098;8091:12;8050:55;8137:2;8124:16;8159:4;8182:43;8222:2;8182:43;:::i;:::-;8254:2;8248:9;8266:31;8294:2;8286:6;8266:31;:::i;:::-;8332:18;;;8420:1;8416:10;;;;8408:19;;8404:28;;;8366:15;;;;-1:-1:-1;8444:19:1;;;8441:39;;;8476:1;8473;8466:12;8441:39;8500:11;;;;8520:148;8536:6;8531:3;8528:15;8520:148;;;8602:23;8621:3;8602:23;:::i;:::-;8590:36;;8553:12;;;;8646;;;;8520:148;;;8687:6;-1:-1:-1;;8731:18:1;;8718:32;;-1:-1:-1;;8762:16:1;;;8759:36;;;8791:1;8788;8781:12;8759:36;;8814:63;8869:7;8858:8;8847:9;8843:24;8814:63;:::i;8888:435::-;8941:3;8979:5;8973:12;9006:6;9001:3;8994:19;9032:4;9061:2;9056:3;9052:12;9045:19;;9098:2;9091:5;9087:14;9119:1;9129:169;9143:6;9140:1;9137:13;9129:169;;;9204:13;;9192:26;;9238:12;;;;9273:15;;;;9165:1;9158:9;9129:169;;;-1:-1:-1;9314:3:1;;8888:435;-1:-1:-1;;;;;8888:435:1:o;9328:261::-;9507:2;9496:9;9489:21;9470:4;9527:56;9579:2;9568:9;9564:18;9556:6;9527:56;:::i;9594:999::-;9970:4;9999:3;10029:6;10018:9;10011:25;10072:2;10067;10056:9;10052:18;10045:30;10098:45;10139:2;10128:9;10124:18;10116:6;10098:45;:::i;:::-;10084:59;;10191:9;10183:6;10179:22;10174:2;10163:9;10159:18;10152:50;10225:33;10251:6;10243;10225:33;:::i;:::-;10211:47;;10306:9;10298:6;10294:22;10289:2;10278:9;10274:18;10267:50;10334:33;10360:6;10352;10334:33;:::i;:::-;10398:3;10383:19;;10376:35;;;;-1:-1:-1;;10442:3:1;10427:19;;10420:35;;;;10486:3;10471:19;;10464:35;;;;10530:3;10515:19;;10508:35;10574:3;10559:19;;;10552:35;10326:41;9594:999;-1:-1:-1;;;;9594:999:1:o;10598:186::-;10657:6;10710:2;10698:9;10689:7;10685:23;10681:32;10678:52;;;10726:1;10723;10716:12;10678:52;10749:29;10768:9;10749:29;:::i;10789:497::-;10971:3;10956:19;;10960:9;11052:6;10929:4;11086:194;11100:4;11097:1;11094:11;11086:194;;;11159:13;;11147:26;;11196:4;11220:12;;;;11255:15;;;;11120:1;11113:9;11086:194;;;11090:3;;;10789:497;;;;:::o;11291:385::-;11377:6;11385;11393;11401;11454:3;11442:9;11433:7;11429:23;11425:33;11422:53;;;11471:1;11468;11461:12;11422:53;-1:-1:-1;;11494:23:1;;;11564:2;11549:18;;11536:32;;-1:-1:-1;11615:2:1;11600:18;;11587:32;;11666:2;11651:18;11638:32;;-1:-1:-1;11291:385:1;-1:-1:-1;11291:385:1:o;11889:347::-;11954:6;11962;12015:2;12003:9;11994:7;11990:23;11986:32;11983:52;;;12031:1;12028;12021:12;11983:52;12054:29;12073:9;12054:29;:::i;:::-;12044:39;;12133:2;12122:9;12118:18;12105:32;12180:5;12173:13;12166:21;12159:5;12156:32;12146:60;;12202:1;12199;12192:12;12146:60;12225:5;12215:15;;;11889:347;;;;;:::o;12241:248::-;12309:6;12317;12370:2;12358:9;12349:7;12345:23;12341:32;12338:52;;;12386:1;12383;12376:12;12338:52;-1:-1:-1;;12409:23:1;;;12479:2;12464:18;;;12451:32;;-1:-1:-1;12241:248:1:o;12718:668::-;12768:5;12821:3;12814:4;12806:6;12802:17;12798:27;12788:55;;12839:1;12836;12829:12;12788:55;12872:2;12866:9;12894:3;12924:15;;;-1:-1:-1;;;;;12954:34:1;;12990:22;;;12951:62;12948:88;;;13016:18;;:::i;:::-;13052:2;13045:22;13116:15;;13087:6;13143:15;;;13140:35;;;13171:1;13168;13161:12;13140:35;13195:6;13210:146;13226:6;13221:3;13218:15;13210:146;;;13294:17;;13282:30;;13341:4;13332:14;;;;13243;13210:146;;;-1:-1:-1;13374:6:1;;12718:668;-1:-1:-1;;;;;12718:668:1:o;13391:1313::-;13609:6;13617;13625;13633;13641;13649;13657;13665;13673;13681;13734:3;13722:9;13713:7;13709:23;13705:33;13702:53;;;13751:1;13748;13741:12;13702:53;13774:23;;;-1:-1:-1;13848:2:1;13833:18;;13820:32;-1:-1:-1;;;;;13901:14:1;;;13898:34;;;13928:1;13925;13918:12;13898:34;13951:49;13992:7;13983:6;13972:9;13968:22;13951:49;:::i;:::-;13941:59;;14053:2;14042:9;14038:18;14025:32;14009:48;;14082:2;14072:8;14069:16;14066:36;;;14098:1;14095;14088:12;14066:36;14121:51;14164:7;14153:8;14142:9;14138:24;14121:51;:::i;:::-;14111:61;;14225:2;14214:9;14210:18;14197:32;14181:48;;14254:2;14244:8;14241:16;14238:36;;;14270:1;14267;14260:12;14238:36;;14293:51;14336:7;14325:8;14314:9;14310:24;14293:51;:::i;:::-;14283:61;;;14391:3;14380:9;14376:19;14363:33;14353:43;;14415:54;14461:7;14455:3;14444:9;14440:19;14415:54;:::i;:::-;14405:64;;14488:54;14534:7;14528:3;14517:9;14513:19;14488:54;:::i;:::-;14478:64;;14589:3;14578:9;14574:19;14561:33;14551:43;;14641:3;14630:9;14626:19;14613:33;14603:43;;14693:3;14682:9;14678:19;14665:33;14655:43;;13391:1313;;;;;;;;;;;;;:::o;14709:260::-;14777:6;14785;14838:2;14826:9;14817:7;14813:23;14809:32;14806:52;;;14854:1;14851;14844:12;14806:52;14877:29;14896:9;14877:29;:::i;:::-;14867:39;;14925:38;14959:2;14948:9;14944:18;14925:38;:::i;:::-;14915:48;;14709:260;;;;;:::o;14974:606::-;15078:6;15086;15094;15102;15110;15163:3;15151:9;15142:7;15138:23;15134:33;15131:53;;;15180:1;15177;15170:12;15131:53;15203:29;15222:9;15203:29;:::i;:::-;15193:39;;15251:38;15285:2;15274:9;15270:18;15251:38;:::i;:::-;15241:48;-1:-1:-1;15336:2:1;15321:18;;15308:32;;-1:-1:-1;15387:2:1;15372:18;;15359:32;;-1:-1:-1;15442:3:1;15427:19;;15414:33;-1:-1:-1;;;;;15459:30:1;;15456:50;;;15502:1;15499;15492:12;15456:50;15525:49;15566:7;15557:6;15546:9;15542:22;15525:49;:::i;15996:380::-;16075:1;16071:12;;;;16118;;;16139:61;;16193:4;16185:6;16181:17;16171:27;;16139:61;16246:2;16238:6;16235:14;16215:18;16212:38;16209:161;;16292:10;16287:3;16283:20;16280:1;16273:31;16327:4;16324:1;16317:15;16355:4;16352:1;16345:15;16209:161;;15996:380;;;:::o;16381:356::-;16583:2;16565:21;;;16602:18;;;16595:30;16661:34;16656:2;16641:18;;16634:62;16728:2;16713:18;;16381:356::o;16742:127::-;16803:10;16798:3;16794:20;16791:1;16784:31;16834:4;16831:1;16824:15;16858:4;16855:1;16848:15;16874:127;16935:10;16930:3;16926:20;16923:1;16916:31;16966:4;16963:1;16956:15;16990:4;16987:1;16980:15;17006:125;17071:9;;;17092:10;;;17089:36;;;17105:18;;:::i;17136:168::-;17176:7;17242:1;17238;17234:6;17230:14;17227:1;17224:21;17219:1;17212:9;17205:17;17201:45;17198:71;;;17249:18;;:::i;:::-;-1:-1:-1;17289:9:1;;17136:168::o;17309:410::-;17511:2;17493:21;;;17550:2;17530:18;;;17523:30;17589:34;17584:2;17569:18;;17562:62;-1:-1:-1;;;17655:2:1;17640:18;;17633:44;17709:3;17694:19;;17309:410::o;19192:135::-;19231:3;19252:17;;;19249:43;;19272:18;;:::i;:::-;-1:-1:-1;19319:1:1;19308:13;;19192:135::o;19332:128::-;19399:9;;;19420:11;;;19417:37;;;19434:18;;:::i;19465:345::-;19667:2;19649:21;;;19706:2;19686:18;;;19679:30;-1:-1:-1;;;19740:2:1;19725:18;;19718:51;19801:2;19786:18;;19465:345::o;19815:342::-;20017:2;19999:21;;;20056:2;20036:18;;;20029:30;-1:-1:-1;;;20090:2:1;20075:18;;20068:48;20148:2;20133:18;;19815:342::o;21614:1392::-;-1:-1:-1;;;22263:45:1;;22331:13;;22245:3;;22353:75;22331:13;22416:2;22407:12;;22400:4;22388:17;;22353:75;:::i;:::-;-1:-1:-1;;;22487:2:1;22447:16;;;22479:11;;;22472:71;22568:13;;22590:76;22568:13;22652:2;22644:11;;22637:4;22625:17;;22590:76;:::i;:::-;-1:-1:-1;;;22726:2:1;22685:17;;;;22718:11;;;22711:59;22795:13;;22817:76;22795:13;22879:2;22871:11;;22864:4;22852:17;;22817:76;:::i;:::-;-1:-1:-1;;;22953:2:1;22912:17;;;;22945:11;;;22938:35;22997:2;22989:11;;21614:1392;-1:-1:-1;;;;;21614:1392:1:o;23011:461::-;23273:31;23268:3;23261:44;23243:3;23334:6;23328:13;23350:75;23418:6;23413:2;23408:3;23404:12;23397:4;23389:6;23385:17;23350:75;:::i;:::-;23445:16;;;;23463:2;23441:25;;23011:461;-1:-1:-1;;23011:461:1:o;23603:545::-;23705:2;23700:3;23697:11;23694:448;;;23741:1;23766:5;23762:2;23755:17;23811:4;23807:2;23797:19;23881:2;23869:10;23865:19;23862:1;23858:27;23852:4;23848:38;23917:4;23905:10;23902:20;23899:47;;;-1:-1:-1;23940:4:1;23899:47;23995:2;23990:3;23986:12;23983:1;23979:20;23973:4;23969:31;23959:41;;24050:82;24068:2;24061:5;24058:13;24050:82;;;24113:17;;;24094:1;24083:13;24050:82;;23694:448;23603:545;;;:::o;24324:1352::-;24444:10;;-1:-1:-1;;;;;24466:30:1;;24463:56;;;24499:18;;:::i;:::-;24528:97;24618:6;24578:38;24610:4;24604:11;24578:38;:::i;:::-;24572:4;24528:97;:::i;:::-;24680:4;;24744:2;24733:14;;24761:1;24756:663;;;;25463:1;25480:6;25477:89;;;-1:-1:-1;25532:19:1;;;25526:26;25477:89;-1:-1:-1;;24281:1:1;24277:11;;;24273:24;24269:29;24259:40;24305:1;24301:11;;;24256:57;25579:81;;24726:944;;24756:663;23550:1;23543:14;;;23587:4;23574:18;;-1:-1:-1;;24792:20:1;;;24910:236;24924:7;24921:1;24918:14;24910:236;;;25013:19;;;25007:26;24992:42;;25105:27;;;;25073:1;25061:14;;;;24940:19;;24910:236;;;24914:3;25174:6;25165:7;25162:19;25159:201;;;25235:19;;;25229:26;-1:-1:-1;;25318:1:1;25314:14;;;25330:3;25310:24;25306:37;25302:42;25287:58;25272:74;;25159:201;-1:-1:-1;;;;;25406:1:1;25390:14;;;25386:22;25373:36;;-1:-1:-1;24324:1352:1:o;26090:401::-;26292:2;26274:21;;;26331:2;26311:18;;;26304:30;26370:34;26365:2;26350:18;;26343:62;-1:-1:-1;;;26436:2:1;26421:18;;26414:35;26481:3;26466:19;;26090:401::o;26496:406::-;26698:2;26680:21;;;26737:2;26717:18;;;26710:30;26776:34;26771:2;26756:18;;26749:62;-1:-1:-1;;;26842:2:1;26827:18;;26820:40;26892:3;26877:19;;26496:406::o;26907:465::-;27164:2;27153:9;27146:21;27127:4;27190:56;27242:2;27231:9;27227:18;27219:6;27190:56;:::i;:::-;27294:9;27286:6;27282:22;27277:2;27266:9;27262:18;27255:50;27322:44;27359:6;27351;27322:44;:::i;29197:184::-;29267:6;29320:2;29308:9;29299:7;29295:23;29291:32;29288:52;;;29336:1;29333;29326:12;29288:52;-1:-1:-1;29359:16:1;;29197:184;-1:-1:-1;29197:184:1:o;29665:217::-;29705:1;29731;29721:132;;29775:10;29770:3;29766:20;29763:1;29756:31;29810:4;29807:1;29800:15;29838:4;29835:1;29828:15;29721:132;-1:-1:-1;29867:9:1;;29665:217::o;29887:827::-;-1:-1:-1;;;;;30284:15:1;;;30266:34;;30336:15;;30331:2;30316:18;;30309:43;30246:3;30383:2;30368:18;;30361:31;;;30209:4;;30415:57;;30452:19;;30444:6;30415:57;:::i;:::-;30520:9;30512:6;30508:22;30503:2;30492:9;30488:18;30481:50;30554:44;30591:6;30583;30554:44;:::i;:::-;30540:58;;30647:9;30639:6;30635:22;30629:3;30618:9;30614:19;30607:51;30675:33;30701:6;30693;30675:33;:::i;:::-;30667:41;29887:827;-1:-1:-1;;;;;;;;29887:827:1:o;30719:249::-;30788:6;30841:2;30829:9;30820:7;30816:23;30812:32;30809:52;;;30857:1;30854;30847:12;30809:52;30889:9;30883:16;30908:30;30932:5;30908:30;:::i;30973:179::-;31008:3;31050:1;31032:16;31029:23;31026:120;;;31096:1;31093;31090;31075:23;-1:-1:-1;31133:1:1;31127:8;31122:3;31118:18;31026:120;30973:179;:::o;31157:671::-;31196:3;31238:4;31220:16;31217:26;31214:39;;;31157:671;:::o;31214:39::-;31280:2;31274:9;-1:-1:-1;;31345:16:1;31341:25;;31338:1;31274:9;31317:50;31390:11;;31420:16;-1:-1:-1;;;;;31488:14:1;;;31519:4;31507:17;;31504:25;-1:-1:-1;31485:45:1;31482:58;;;31533:5;;;;;31157:671;:::o;31482:58::-;31570:6;31564:4;31560:17;31549:28;;31606:3;31600:10;31633:2;31625:6;31622:14;31619:27;;;31639:5;;;;;;31157:671;:::o;31619:27::-;31723:2;31704:16;31698:4;31694:27;31690:36;31683:4;31674:6;31669:3;31665:16;31661:27;31658:69;31655:82;;;31730:5;;;;;;31157:671;:::o;31655:82::-;31746:57;31797:4;31788:6;31780;31776:19;31772:30;31766:4;31746:57;:::i;:::-;-1:-1:-1;31819:3:1;;31157:671;-1:-1:-1;;;;;31157:671:1:o;32254:404::-;32456:2;32438:21;;;32495:2;32475:18;;;32468:30;32534:34;32529:2;32514:18;;32507:62;-1:-1:-1;;;32600:2:1;32585:18;;32578:38;32648:3;32633:19;;32254:404::o;32663:561::-;-1:-1:-1;;;;;32960:15:1;;;32942:34;;33012:15;;33007:2;32992:18;;32985:43;33059:2;33044:18;;33037:34;;;33102:2;33087:18;;33080:34;;;32922:3;33145;33130:19;;33123:32;;;32885:4;;33172:46;;33198:19;;33190:6;33172:46;:::i;:::-;33164:54;32663:561;-1:-1:-1;;;;;;;32663:561:1:o
Swarm Source
ipfs://e10da269ec8244a1a76cd55451aebd41e6de3a4b46e563862e785c34539ac60e
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.