3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
Play in crypto to make deposits and withdrawals easy! Register and get a free daily shot at a 100 000 $ jackpot.
Monthly Wagering Contest - $500,000+ rewards. Provably Fair, Low House Edge and best VIP Program!
Daily free Spin 50000 Matic ,760% Deposit Bonus, 20%Rakeback, And Get 1000000 Matic free bonus on BC.Game
Deposit BONUS 300% and Cashbacks. without verification!
Join Metawin for the ultimate Web3 Casino Experience. Frictionless Signup & Instant Withdrawals. Play Now & Earn $MWIN Points.
Overview
POL Balance
POL Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (59)9,860 ACCESS [ ETHNA.VERCEL.APP ] AIRDROP! ETHNA (ACCESS...)53,086 $ MetaWin.farm!MetaWin.far... ($ Meta...)29,367 SIMP$ SimpSwap.f... (SIMP)0.99 BEXBinex coin (BEX)1 CMTKCOIN MOGEN T... (CMTK)80,000 nft.bitconnect666.comFree NFT go ... (nft.bi...)80,000 pepe-erc.vipFree PEPE go... (pepe-e...)10 MCHMATIC CASH (MCH)1 PHLPINWHEEL (PHL)188,888 rareeth.prorareeth.pro (rareet...)1 Some very long token symbol /Some very lo... (Some v...)3.0102 STGTSTG MINTS TO... (STGT)50,000 TBBT.orgTBBT.org (TBBT.o...)1 VELOVELOCITY (VELO)0.1 ZPTZERO PROOF T... (ZPT)1 zerolends.comzerolends.co... (zerole...)7,864 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]745,900 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]13,700 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]3,680 TokenERC-20 TOKEN*[Suspicious]989 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]60,000 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]90,000,000 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]90,000,000 TokenERC-20 TOKEN*[Spam]8,400 TokenERC-20 TOKEN*[Spam]956 TokenERC-20 TOKEN*[Spam]8,750 TokenERC-20 TOKEN*[Spam]78,530 TokenERC-20 TOKEN*[Spam]9,000,000,000 TokenERC-20 TOKEN*[Spam]9,000,000 TokenERC-20 TOKEN*[Spam]10,000 TokenERC-20 TOKEN*[Spam]9,000,000 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]21,146 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]NFT Tokens (33)GIVEAWAY$100,000,000ERC-1155http://usdcash.xyz/1000$ AirDropERC-11551000-rewards.xyz1000$ AirDropERC-1155Vouchers5 stETH EventERC-1155NFTVoucher5000$ CYBERERC-1155Vouchers50M $SHIB VoucherERC-1155AAVE-V3-POSAave Positions AirdropERC-1155AAVE-V3-POSAave Positions AirdropERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155sandbox-rewards.xyzSAND AirdropERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]Advanced Filter
- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 955,759 transactions
Transaction Hash MethodBlockFromToBuy 60044961 2024-07-31 23:12:04 67 days ago 1722467524 IN 0 POL$0.00 0.01161969 30.00000002 Cancel 60036339 2024-07-31 17:57:05 67 days ago 1722448625 IN 0 POL$0.00 0.0058517 29.99999997 Cancel 60034984 2024-07-31 17:08:01 67 days ago 1722445681 IN 0 POL$0.00 0.00573378 30.00000004 Buy 60034933 2024-07-31 17:06:13 67 days ago 1722445573 IN 0 POL$0.00 0.01161933 30.00000005 Buy 60034684 2024-07-31 16:57:23 67 days ago 1722445043 IN 0 POL$0.00 0.02625222 30.00000002 Cancel 60034609 2024-07-31 16:54:45 67 days ago 1722444885 IN 0 POL$0.00 0.00588375 30.0000001 Cancel 60033768 2024-07-31 16:24:25 67 days ago 1722443065 IN 0 POL$0.00 0.00583769 29.99999995 Cancel 60033609 2024-07-31 16:18:15 67 days ago 1722442695 IN 0 POL$0.00 0.00529838 29.99999999 Sell 60033553 2024-07-31 16:16:17 67 days ago 1722442577 IN 0 POL$0.00 0.01675716 30.00000005 Cancel 60033539 2024-07-31 16:15:47 67 days ago 1722442547 IN 0 POL$0.00 0.00548745 30.00000003 Sell 60032485 2024-07-31 15:37:55 67 days ago 1722440275 IN 0 POL$0.00 0.01375709 29.99999703 Cancel 60031914 2024-07-31 15:17:09 67 days ago 1722439029 IN 0 POL$0.00 0.00540293 29.99999783 Cancel 60031901 2024-07-31 15:16:41 67 days ago 1722439001 IN 0 POL$0.00 0.00568937 29.99999773 Cancel 60031889 2024-07-31 15:16:17 67 days ago 1722438977 IN 0 POL$0.00 0.00584459 29.99999782 Buy 60031377 2024-07-31 14:57:37 67 days ago 1722437857 IN 0 POL$0.00 0.01184201 29.99999937 Buy 60031285 2024-07-31 14:54:21 67 days ago 1722437661 IN 0 POL$0.00 0.01306259 29.99999924 Sell 60031237 2024-07-31 14:52:39 67 days ago 1722437559 IN 0 POL$0.00 0.01589618 29.9999996 Cancel 60031187 2024-07-31 14:50:53 67 days ago 1722437453 IN 0 POL$0.00 0.00561641 29.99999982 Cancel 60031169 2024-07-31 14:50:15 67 days ago 1722437415 IN 0 POL$0.00 0.00533222 29.99999971 Buy 60031009 2024-07-31 14:44:35 67 days ago 1722437075 IN 0 POL$0.00 0.03648734 29.99999994 Buy 60030755 2024-07-31 14:35:03 67 days ago 1722436503 IN 0 POL$0.00 0.02479793 29.99999977 Cancel 60030539 2024-07-31 14:27:23 67 days ago 1722436043 IN 0 POL$0.00 0.00529521 30.00000001 Buy 60030240 2024-07-31 14:16:41 67 days ago 1722435401 IN 0 POL$0.00 0.01382529 30.0000001 Cancel 60030160 2024-07-31 14:13:21 67 days ago 1722435201 IN 0 POL$0.00 0.00550431 30.00000011 Cancel 60030145 2024-07-31 14:12:47 67 days ago 1722435167 IN 0 POL$0.00 0.00523467 30.00000013 Latest 25 internal transactions (View All)
Parent Transaction Hash Block From To 60004529 2024-07-30 22:25:59 68 days ago 1722378359 40.13526774 POL$15.47 59948649 2024-07-29 12:28:07 69 days ago 1722256087 1.41185084 POL$0.54 59947550 2024-07-29 11:48:39 69 days ago 1722253719 2.5125 POL$0.97 59929738 2024-07-29 0:51:07 70 days ago 1722214267 0.34023408 POL$0.13 59903793 2024-07-28 8:59:40 70 days ago 1722157180 5.4239901 POL$2.09 59894379 2024-07-28 3:00:36 71 days ago 1722135636 18.5 POL$7.13 59892292 2024-07-28 1:43:30 71 days ago 1722131010 12.65948285 POL$4.88 59859926 2024-07-27 5:26:33 72 days ago 1722057993 5 POL$1.93 59859784 2024-07-27 5:20:55 72 days ago 1722057655 10 POL$3.85 59859768 2024-07-27 5:20:21 72 days ago 1722057621 10 POL$3.85 59859665 2024-07-27 5:16:43 72 days ago 1722057403 10 POL$3.85 59859616 2024-07-27 5:14:59 72 days ago 1722057299 10 POL$3.85 59859581 2024-07-27 5:13:39 72 days ago 1722057219 10 POL$3.85 59826858 2024-07-26 9:41:06 72 days ago 1721986866 370 POL$142.62 59756794 2024-07-24 15:55:49 74 days ago 1721836549 4.231332 POL$1.63 59756689 2024-07-24 15:52:07 74 days ago 1721836327 0.04589452 POL$0.02 59756568 2024-07-24 15:47:49 74 days ago 1721836069 0.069907 POL$0.03 59694113 2024-07-23 2:32:43 76 days ago 1721701963 40.73293367 POL$15.70 59686800 2024-07-22 22:12:45 76 days ago 1721686365 2.25547658 POL$0.87 59677286 2024-07-22 16:31:03 76 days ago 1721665863 34 POL$13.11 59675126 2024-07-22 15:14:25 76 days ago 1721661265 29 POL$11.18 59673799 2024-07-22 14:27:25 76 days ago 1721658445 66 POL$25.44 59673705 2024-07-22 14:24:05 76 days ago 1721658245 10 POL$3.85 59661440 2024-07-22 6:55:09 77 days ago 1721631309 10 POL$3.85 59661389 2024-07-22 6:52:47 77 days ago 1721631167 65.99376953 POL$25.44 Loading...LoadingContract Name:TDEX
Compiler Versionv0.8.17+commit.8df45f5f
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.0 <0.9.0; import "./TokenConfig.sol"; abstract contract ERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). */ function decimals() public view virtual returns (uint8) { return _decimals; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function max(uint256 a, uint256 b) internal pure returns (uint256) { if (a >= b) return a; return b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { require(a >=0 && b>=0, "SafeMath: Cannot have negative numbers"); if (a <= b) return a; return b; } } library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value : value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } struct Dish { uint256 price; uint256 number; } enum OrderType { Buy, Sell } enum OrderStatus { None, Waiting, Finished, Cancelled } struct Order { uint256 orderId; uint256 price; uint256 tokenTotal; uint256 tokenSurplus; uint256 tokenFee; uint256 usdtSurplus; uint256 usdtFee; uint256 createnTime; uint256 endTime; OrderType orderType; OrderStatus status; address sender; } struct Match { uint256 matchId; uint256 buyOrderId; uint256 sellOrderId; uint256 price; uint256 tokenDeal; uint256 usdtDeal; uint256 tokenFee; uint256 usdtFee; uint256 time; } interface OrderInterface { function getOrder(address _tokenContract, uint256 _orderId) external view returns (Order memory); function getMatch(address _tokenContract, uint256 _matchId) external view returns (Match memory); function getPrice(address _tokenContract) external view returns (uint256 price); function getLastMatchId(address _tokenContract) external view returns (uint256 matchId); function getLastOrderId(address _tokenContract) external view returns (uint256 orderId); function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint); function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory); function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory); function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory); function getSellOrderPriceListLength(address _tokenContract) external view returns (uint); function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory); function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory); function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256); function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256); function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory); function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory); function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint); function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint); function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory); function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory); } interface DexInterface { function createOrder(address _tokenContract, address _sender, uint256 _price, uint256 _token, uint256 _usdt, uint8 _type) external returns (uint256); function removeOrder(address _tokenContract, uint256 _orderId, address _sender) external returns (bool); function orderManager() external view returns (address); function books() external view returns (address); } interface TokenInterface { function getToken(address _tokenContract) external view returns (Token memory token); function getTokenMapLength() external view returns (uint length); function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list); } interface __tdexDelegate { function __buy(address __tokenContract, address __sender) external; function __sell(address __tokenContract, address __sender) external; } /** * @title Storage * @dev Store & retrieve value in a variable */ contract TDEX { address private _owner; address private _dexInterface = address(0); address private _tokenManager = address(0); address private _delegate = address(0); Token private USDT; Token private ETH; event CreateOrder(address indexed tokenContract, uint256 indexed orderId, address sender, OrderType ordertType, uint256 price, uint256 value); event CancelOrder(address indexed tokenContract, uint256 indexed orderId, address sender); constructor () { _owner = msg.sender; USDT = T.USDT(); ETH = T.ETH(); } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function init(address __dexInterface) external onlyOwner { require(_dexInterface == address(0), "Can only be assigned once"); _dexInterface = __dexInterface; } function setTokenManager(address ___tokenManager) external onlyOwner { _tokenManager = ___tokenManager; } function setDelegate(address __delegate) external onlyOwner { _delegate = __delegate; } function getToken(address _tokenContract) external view returns ( address tokenContract, string memory symbol, string memory name, uint decimals) { Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract); tokenContract = token.tokenContract; symbol = token.symbol; name = token.name; decimals = token.decimals; } function getTokenAddressListLength() external view returns (uint length) { return TokenInterface(_tokenManager).getTokenMapLength(); } function getTokenAddressList(uint256 start, uint256 end) external view returns (address[] memory list) { return TokenInterface(_tokenManager).getTokenAddressList(start, end); } /**********************************************************/ function _buy(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256) { if (_delegate != address(0)) __tdexDelegate(_delegate).__buy(_tokenContract, _sender); require(_token_amount > 0, "The quantity cannot be 0"); Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract); require(token.decimals > 0, "This contract address is not supported"); require(_price > 0, "No, no price"); uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC); require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT"); TransferHelper.safeTransferFrom(USDT.tokenContract, _sender, _dexInterface, _usdt_amount); uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 0); emit CreateOrder(_tokenContract, orderId, _sender, OrderType.Buy, _price, _token_amount); return orderId; } function Buy(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId) { require(_tokenContract != ETH.tokenContract, "Does not support ETH"); return _buy(_tokenContract, _price, _token_amount, msg.sender); } function BuyETH(uint256 _price, uint256 _token_amount) external returns (uint256 orderId) { return _buy(ETH.tokenContract, _price, _token_amount, msg.sender); } function _sell(address _tokenContract, uint256 _price, uint256 _token_amount, address _sender) internal returns (uint256) { if (_delegate != address(0)) __tdexDelegate(_delegate).__sell(_tokenContract, _sender); require(_token_amount > 0, "The quantity cannot be 0"); Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract); require(token.decimals > 0, "This contract address is not supported"); require(_price > 0, "No, no price"); uint256 _usdt_amount = SafeMath.div(SafeMath.mul(_token_amount, _price), PDEC); require(_usdt_amount <= 100000 * 10 ** USDT.decimals, "Maximum single transaction amount 100000 USDT"); if (_tokenContract == ETH.tokenContract) { TransferHelper.safeTransferETH(_dexInterface, _token_amount); } else { TransferHelper.safeTransferFrom(_tokenContract, _sender, _dexInterface, _token_amount); } uint256 orderId = DexInterface(_dexInterface).createOrder(_tokenContract, _sender, _price, _token_amount, _usdt_amount, 1); emit CreateOrder(_tokenContract, orderId, _sender, OrderType.Sell, _price, _token_amount); return orderId; } function Sell(address _tokenContract, uint256 _price, uint256 _token_amount) external returns (uint256 orderId) { require(_tokenContract != ETH.tokenContract, "Does not support ETH"); return _sell(_tokenContract, _price, _token_amount, msg.sender); } function SellETH(uint256 _price) external payable returns (uint256 orderId) { return _sell(ETH.tokenContract, _price, msg.value, msg.sender); } function Cancel(address _tokenContract, uint256 _orderId) external returns (bool) { Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract); require(token.decimals > 0, "This contract address is not supported"); bool result = DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, msg.sender); emit CancelOrder(_tokenContract, _orderId, msg.sender); return result; } function CancelRoot(address _tokenContract, uint256 _orderId, address _sender) external onlyOwner returns (bool) { Token memory token = TokenInterface(_tokenManager).getToken(_tokenContract); require(token.decimals > 0, "This contract address is not supported"); bool result = DexInterface(_dexInterface).removeOrder(_tokenContract, _orderId, _sender); emit CancelOrder(_tokenContract, _orderId, _sender); return result; } /**********************************************************/ function balanceOf(address _tokenContract, address _sender) external view returns (uint256) { uint256 balance; if (_tokenContract == ETH.tokenContract) { balance = _sender.balance; } else { balance = IERC20(_tokenContract).balanceOf(_sender); } return balance; } function getOrderManager() internal view returns (OrderInterface) { return OrderInterface(DexInterface(_dexInterface).orderManager()); } function getPrice(address _tokenContract) external view returns (uint256 price) { return getOrderManager().getPrice(_tokenContract); } function getLastMatchId(address _tokenContract) external view returns (uint256 matchId) { return getOrderManager().getLastMatchId(_tokenContract); } function getLastOrderId(address _tokenContract) external view returns (uint256 orderId) { return getOrderManager().getLastOrderId(_tokenContract); } function getOrder(address _tokenContract, uint256 _orderId) external view returns ( uint256 price, uint256 tokenTotal, uint256 tokenSurplus, uint256 tokenFee, uint256 usdtSurplus, uint256 usdtFee, uint256 createnTime, uint256 endTime, uint8 orderType, uint8 status, address sender ) { Order memory order = getOrderManager().getOrder(_tokenContract, _orderId); price = order.price; tokenTotal = order.tokenTotal; tokenSurplus = order.tokenSurplus; tokenFee = order.tokenFee; usdtSurplus = order.usdtSurplus; usdtFee = order.usdtFee; createnTime = order.createnTime; endTime = order.endTime; orderType = uint8(order.orderType); status = uint8(order.status); sender = order.sender; } function getMatch(address _tokenContract, uint256 _matchId) external view returns ( uint256 matchId, uint256 buyOrderId, uint256 sellOrderId, uint256 price, uint256 tokenDeal, uint256 usdtDeal, uint256 tokenFee, uint256 usdtFee, uint256 time ) { Match memory _match = getOrderManager().getMatch(_tokenContract, _matchId); matchId = _match.matchId; buyOrderId = _match.buyOrderId; sellOrderId = _match.sellOrderId; price = _match.price; tokenDeal = _match.tokenDeal; usdtDeal = _match.usdtDeal; tokenFee = _match.tokenFee; usdtFee = _match.usdtFee; time = _match.time; } function getBuyOrderPriceListLength(address _tokenContract) external view returns (uint length) { return getOrderManager().getBuyOrderPriceListLength(_tokenContract); } function getBuyOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list) { return getOrderManager().getBuyOrderPriceList(_tokenContract, start, end); } function getBuyOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number) { return getOrderManager().getBuyOrderPriceTokenNumber(_tokenContract, _price); } function getBuyOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list) { return getOrderManager().getBuyOrderPriceListPublished(_tokenContract, count); } function getBuyOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list) { OrderInterface orderManager = getOrderManager(); uint256[] memory priceList = orderManager.getBuyOrderPriceListPublished(_tokenContract, count); list = new Dish[](count); for (uint i=0; i<count; i++) { uint256 price = priceList[i]; uint256 number = orderManager.getBuyOrderPriceTokenNumber(_tokenContract, price); list[i] = Dish(price, number); } } function getBuyOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list) { return getOrderManager().getBuyOrderPriceOrderIdList(_tokenContract, _price); } function getSellOrderPriceListLength(address _tokenContract) external view returns (uint length) { return getOrderManager().getSellOrderPriceListLength(_tokenContract); } function getSellOrderPriceList(address _tokenContract, uint256 start, uint256 end) external view returns (uint256[] memory list) { return getOrderManager().getSellOrderPriceList(_tokenContract, start, end); } function getSellOrderPriceTokenNumber(address _tokenContract, uint256 _price) external view returns (uint256 number) { return getOrderManager().getSellOrderPriceTokenNumber(_tokenContract, _price); } function getSellOrderPriceListPublished(address _tokenContract, uint count) external view returns (uint256[] memory list) { return getOrderManager().getSellOrderPriceListPublished(_tokenContract, count); } function getSellOrderPublished(address _tokenContract, uint count) external view returns (Dish[] memory list) { OrderInterface orderManager = getOrderManager(); uint256[] memory priceList = orderManager.getSellOrderPriceListPublished(_tokenContract, count); list = new Dish[](count); for (uint i=0; i<count; i++) { uint256 price = priceList[i]; uint256 number = orderManager.getSellOrderPriceTokenNumber(_tokenContract, price); list[i] = Dish(price, number); } } function getSellOrderPriceOrderIdList(address _tokenContract, uint256 _price) external view returns (uint256[] memory list) { return getOrderManager().getSellOrderPriceOrderIdList(_tokenContract, _price); } function getOrderMatching(address _tokenContract, uint256 _orderId) external view returns (uint256[] memory matchingList) { return getOrderManager().getOrderMatching(_tokenContract, _orderId); } function getOrderUnmatchedListLength(address _tokenContract, address _sender) external view returns (uint length) { return getOrderManager().getOrderUnmatchedListLength(_tokenContract, _sender); } function getOrderFinishedListLength(address _tokenContract, address _sender) external view returns (uint length) { return getOrderManager().getOrderFinishedListLength(_tokenContract, _sender); } function getOrderUnmatchedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list) { return getOrderManager().getOrderUnmatchedList(_tokenContract, _sender, start, end); } function getOrderFinishedList(address _tokenContract, address _sender, uint256 start, uint256 end) external view returns (uint256[] memory list) { return getOrderManager().getOrderFinishedList(_tokenContract, _sender, start, end); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.0 <0.9.0; uint256 constant PDEC = 1e30; struct Token { address tokenContract; string symbol; string name; uint decimals; } library T { function USDT() internal pure returns (Token memory) { return Token({ symbol: "USDT", name: "Tether USD", tokenContract: 0xc2132D05D31c914a87C6611C10748AEb04B58e8F, decimals: 6 }); } function ETH() internal pure returns (Token memory) { return Token({ symbol: "MATIC", name: "Matic Token", tokenContract: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE, decimals: 18 }); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"CancelOrder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"enum OrderType","name":"ordertType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateOrder","type":"event"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Buy","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"BuyETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"Cancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address","name":"_sender","type":"address"}],"name":"CancelRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_token_amount","type":"uint256"}],"name":"Sell","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"SellETH","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getBuyOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getBuyOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getBuyOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getBuyOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastMatchId","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getLastOrderId","outputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_matchId","type":"uint256"}],"name":"getMatch","outputs":[{"internalType":"uint256","name":"matchId","type":"uint256"},{"internalType":"uint256","name":"buyOrderId","type":"uint256"},{"internalType":"uint256","name":"sellOrderId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenDeal","type":"uint256"},{"internalType":"uint256","name":"usdtDeal","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrder","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"tokenTotal","type":"uint256"},{"internalType":"uint256","name":"tokenSurplus","type":"uint256"},{"internalType":"uint256","name":"tokenFee","type":"uint256"},{"internalType":"uint256","name":"usdtSurplus","type":"uint256"},{"internalType":"uint256","name":"usdtFee","type":"uint256"},{"internalType":"uint256","name":"createnTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"orderType","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderFinishedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderFinishedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getOrderMatching","outputs":[{"internalType":"uint256[]","name":"matchingList","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getOrderUnmatchedList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"getOrderUnmatchedListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getSellOrderPriceList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getSellOrderPriceListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPriceListPublished","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceOrderIdList","outputs":[{"internalType":"uint256[]","name":"list","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getSellOrderPriceTokenNumber","outputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getSellOrderPublished","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct Dish[]","name":"list","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"getToken","outputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getTokenAddressList","outputs":[{"internalType":"address[]","name":"list","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAddressListLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"__dexInterface","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"__delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"___tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600180546001600160a01b031990811690915560028054821690556003805490911690553480156200003557600080fd5b5060008054336001600160a01b0319909116179055620000606200012f602090811b620019e917901c565b8051600480546001600160a01b0319166001600160a01b03909216919091178155602082015160059062000095908262000344565b5060408201516002820190620000ac908262000344565b5060608201518160030155905050620000cf620001e660201b62001a9f1760201c565b8051600880546001600160a01b0319166001600160a01b03909216919091178155602082015160099062000104908262000344565b50604082015160028201906200011b908262000344565b506060820151816003015590505062000410565b62000164604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073c2132d05d31c914a87c6611c10748aeb04b58e8f6001600160a01b03168152602001604051806040016040528060048152602001631554d11560e21b81525081526020016040518060400160405280600a81526020016915195d1a195c881554d160b21b81525081526020016006815250905090565b6200021b604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001604051806040016040528060058152602001644d4154494360d81b81525081526020016040518060400160405280600b81526020016a26b0ba34b1902a37b5b2b760a91b81525081526020016012815250905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b038111156200036057620003606200029f565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612fac80620004206000396000f3fe6080604052600436106102045760003560e01c80637017689611610118578063d4de8ad2116100a0578063edb258411161006f578063edb2584114610660578063f248d4bb146106e2578063f3da8edf14610702578063f7888aec14610722578063f79fde671461074257600080fd5b8063d4de8ad2146105e0578063e3dddfc814610600578063e501d5f414610620578063ed7a144f1461064057600080fd5b80639fd95a42116100e75780639fd95a4214610540578063b424bd8314610560578063bdda1d1a14610580578063c27b6f29146105a0578063ca5eb5e1146105c057600080fd5b806370176896146104cd5780637cb2b79c146104e057806394f27d081461050057806395265e6c1461052057600080fd5b806327f83af91161019b57806350ab38711161016a57806350ab3871146103d9578063594251341461043d578063597704381461045d5780635d4e94071461048d5780635f8e651e146104ad57600080fd5b806327f83af91461035957806341976e091461037957806347c3b77d146103995780634f9f21f9146103b957600080fd5b8063161b71fa116101d7578063161b71fa146102bd57806319ab453c146102ea5780631cbc5ab11461030c5780631f69ae121461032c57600080fd5b80630479569f1461020957806305a7b0411461023f578063083c63511461026d5780630afbe8731461028d575b600080fd5b34801561021557600080fd5b506102296102243660046124b6565b610757565b60405161023691906124e2565b60405180910390f35b34801561024b57600080fd5b5061025f61025a366004612531565b610929565b604051908152602001610236565b34801561027957600080fd5b5061025f610288366004612531565b6109a6565b34801561029957600080fd5b506102ad6102a836600461254e565b6109e0565b6040519015158152602001610236565b3480156102c957600080fd5b506102dd6102d83660046124b6565b610b7b565b6040516102369190612590565b3480156102f657600080fd5b5061030a610305366004612531565b610bfe565b005b34801561031857600080fd5b5061025f6103273660046125d4565b610ca3565b34801561033857600080fd5b5061034c610347366004612609565b610d0f565b604051610236919061262b565b34801561036557600080fd5b506102ad6103743660046124b6565b610d88565b34801561038557600080fd5b5061025f610394366004612531565b610eed565b3480156103a557600080fd5b506102dd6103b43660046125d4565b610f27565b3480156103c557600080fd5b506102dd6103d43660046125d4565b610fb0565b3480156103e557600080fd5b506103f96103f43660046124b6565b610ff8565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610236565b34801561044957600080fd5b5061025f610458366004612531565b6110ce565b34801561046957600080fd5b5061047d610478366004612531565b611108565b60405161023694939291906126bc565b34801561049957600080fd5b506102296104a83660046124b6565b6111a7565b3480156104b957600080fd5b5061025f6104c8366004612704565b611370565b61025f6104db36600461273d565b6113ef565b3480156104ec57600080fd5b5061030a6104fb366004612531565b61140a565b34801561050c57600080fd5b506102dd61051b3660046124b6565b611456565b34801561052c57600080fd5b5061025f61053b3660046124b6565b61148d565b34801561054c57600080fd5b506102dd61055b3660046124b6565b6114c4565b34801561056c57600080fd5b5061025f61057b366004612531565b6114fb565b34801561058c57600080fd5b506102dd61059b3660046124b6565b611535565b3480156105ac57600080fd5b5061025f6105bb366004612704565b61156c565b3480156105cc57600080fd5b5061030a6105db366004612531565b6115ae565b3480156105ec57600080fd5b506102dd6105fb3660046124b6565b6115fa565b34801561060c57600080fd5b506102dd61061b366004612756565b611631565b34801561062c57600080fd5b5061025f61063b3660046124b6565b6116cb565b34801561064c57600080fd5b5061025f61065b3660046125d4565b611702565b34801561066c57600080fd5b5061068061067b3660046124b6565b611766565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e085015260ff908116610100850152166101208301526001600160a01b031661014082015261016001610236565b3480156106ee57600080fd5b506102dd6106fd366004612756565b611875565b34801561070e57600080fd5b5061025f61071d366004612609565b6118c5565b34801561072e57600080fd5b5061025f61073d366004612704565b6118e0565b34801561074e57600080fd5b5061025f611976565b60606000610763611b57565b90506000816001600160a01b0316639fd95a4286866040518363ffffffff1660e01b815260040161079592919061279c565b600060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107da9190810190612891565b90508367ffffffffffffffff8111156107f5576107f56127b5565b60405190808252806020026020018201604052801561083a57816020015b60408051808201909152600080825260208201528152602001906001900390816108135790505b50925060005b8481101561092057600082828151811061085c5761085c612927565b602002602001015190506000846001600160a01b031663e501d5f489846040518363ffffffff1660e01b815260040161089692919061279c565b602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d7919061293d565b905060405180604001604052808381526020018281525086848151811061090057610900612927565b6020026020010181905250505080806109189061296c565b915050610840565b50505092915050565b6000610933611b57565b6040516305a7b04160e01b81526001600160a01b03848116600483015291909116906305a7b041906024015b602060405180830381865afa15801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a0919061293d565b92915050565b60006109b0611b57565b60405163083c635160e01b81526001600160a01b038481166004830152919091169063083c63519060240161095f565b600080546001600160a01b03163314610a145760405162461bcd60e51b8152600401610a0b90612985565b60405180910390fd5b600254604051630b2ee08760e31b81526001600160a01b0386811660048301526000921690635977043890602401600060405180830381865afa158015610a5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a879190810190612a2e565b90506000816060015111610aad5760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b0387811660048301526024820187905285811660448301526000921690633a72b3fc906064016020604051808303816000875af1158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190612b25565b6040516001600160a01b03868116825291925086918816907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a395945050505050565b6060610b85611b57565b6001600160a01b031663161b71fa84846040518363ffffffff1660e01b8152600401610bb292919061279c565b600060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612891565b9392505050565b6000546001600160a01b03163314610c285760405162461bcd60e51b8152600401610a0b90612985565b6001546001600160a01b031615610c815760405162461bcd60e51b815260206004820152601960248201527f43616e206f6e6c792062652061737369676e6564206f6e6365000000000000006044820152606401610a0b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6008546000906001600160a01b0390811690851603610cfb5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611bc5565b949350505050565b600254604051630fb4d70960e11b815260048101849052602481018390526060916001600160a01b031690631f69ae1290604401600060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612b47565b600254604051630b2ee08760e31b81526001600160a01b0384811660048301526000928392911690635977043890602401600060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfe9190810190612a2e565b90506000816060015111610e245760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b038681166004830152602482018690523360448301526000921690633a72b3fc906064016020604051808303816000875af1158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea29190612b25565b60405133815290915084906001600160a01b038716907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a3949350505050565b6000610ef7611b57565b6040516341976e0960e01b81526001600160a01b03848116600483015291909116906341976e099060240161095f565b6060610f31611b57565b6040516347c3b77d60e01b81526001600160a01b038681166004830152602482018690526044820185905291909116906347c3b77d906064015b600060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d079190810190612891565b6060610fba611b57565b604051634f9f21f960e01b81526001600160a01b03868116600483015260248201869052604482018590529190911690634f9f21f990606401610f6b565b60008060008060008060008060008061100f611b57565b6001600160a01b03166350ab38718d8d6040518363ffffffff1660e01b815260040161103c92919061279c565b61012060405180830381865afa15801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e9190612bd6565b905080600001519950806020015198508060400151975080606001519650806080015195508060a0015194508060c0015193508060e0015192508061010001519150509295985092959850929598565b60006110d8611b57565b604051631650944d60e21b81526001600160a01b038481166004830152919091169063594251349060240161095f565b600254604051630b2ee08760e31b81526001600160a01b038381166004830152600092606092839285928392911690635977043890602401600060405180830381865afa15801561115d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111859190810190612a2e565b8051602082015160408301516060909301519199909850919650945092505050565b606060006111b3611b57565b90506000816001600160a01b031663d4de8ad286866040518363ffffffff1660e01b81526004016111e592919061279c565b600060405180830381865afa158015611202573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261122a9190810190612891565b90508367ffffffffffffffff811115611245576112456127b5565b60405190808252806020026020018201604052801561128a57816020015b60408051808201909152600080825260208201528152602001906001900390816112635790505b50925060005b848110156109205760008282815181106112ac576112ac612927565b602002602001015190506000846001600160a01b03166395265e6c89846040518363ffffffff1660e01b81526004016112e692919061279c565b602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061293d565b905060405180604001604052808381526020018281525086848151811061135057611350612927565b6020026020010181905250505080806113689061296c565b915050611290565b600061137a611b57565b604051632fc7328f60e11b81526001600160a01b03858116600483015284811660248301529190911690635f8e651e906044015b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf7919061293d565b6008546000906109a0906001600160a01b0316833433611eb6565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610a0b90612985565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6060611460611b57565b6001600160a01b03166394f27d0884846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611497611b57565b6001600160a01b03166395265e6c84846040518363ffffffff1660e01b81526004016113ae92919061279c565b60606114ce611b57565b6001600160a01b0316639fd95a4284846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611505611b57565b60405163b424bd8360e01b81526001600160a01b038481166004830152919091169063b424bd839060240161095f565b606061153f611b57565b6001600160a01b031663bdda1d1a84846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611576611b57565b60405163c27b6f2960e01b81526001600160a01b0385811660048301528481166024830152919091169063c27b6f29906044016113ae565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610a0b90612985565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060611604611b57565b6001600160a01b031663d4de8ad284846040518363ffffffff1660e01b8152600401610bb292919061279c565b606061163b611b57565b604051631c7bbbf960e31b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063e3dddfc8906084015b600060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116c29190810190612891565b95945050505050565b60006116d5611b57565b6001600160a01b031663e501d5f484846040518363ffffffff1660e01b81526004016113ae92919061279c565b6008546000906001600160a01b039081169085160361175a5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611eb6565b600080600080600080600080600080600080611780611b57565b6001600160a01b031663edb258418f8f6040518363ffffffff1660e01b81526004016117ad92919061279c565b61018060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190612c6f565b905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e0015195508061010001519450806101200151600181111561184157611841612d1d565b9350806101400151600381111561185a5761185a612d1d565b92508061016001519150509295989b509295989b9093969950565b606061187f611b57565b60405163f248d4bb60e01b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063f248d4bb9060840161167d565b600854600090610bf7906001600160a01b0316848433611bc5565b60085460009081906001600160a01b039081169085160361190c57506001600160a01b03821631610bf7565b6040516370a0823160e01b81526001600160a01b0384811660048301528516906370a0823190602401602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d07919061293d565b600254604080516303c381ad60e61b815290516000926001600160a01b03169163f0e06b409160048083019260209291908290030181865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e4919061293d565b905090565b611a1d604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073c2132d05d31c914a87c6611c10748aeb04b58e8f6001600160a01b03168152602001604051806040016040528060048152602001631554d11560e21b81525081526020016040518060400160405280600a81526020016915195d1a195c881554d160b21b81525081526020016006815250905090565b611ad3604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001604051806040016040528060058152602001644d4154494360d81b81525081526020016040518060400160405280600b81526020016a26b0ba34b1902a37b5b2b760a91b81525081526020016012815250905090565b6001546040805163f9b6117f60e01b815290516000926001600160a01b03169163f9b6117f9160048083019260209291908290030181865afa158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e49190612d33565b6003546000906001600160a01b031615611c41576003546040516316b3980160e11b81526001600160a01b038781166004830152848116602483015290911690632d67300290604401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050505b60008311611c8c5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cff9190810190612a2e565b90506000816060015111611d255760405162461bcd60e51b8152600401610a0b90612adf565b60008511611d645760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000611d86611d7386886121ae565b6c0c9f2c9cd04674edea40000000612230565b600754909150611d9790600a612e34565b611da490620186a0612e40565b811115611dc35760405162461bcd60e51b8152600401610a0b90612e57565b600454600154611de2916001600160a01b039081169187911684612272565b600154604051631b5522f960e11b81526000916001600160a01b0316906336aa45f290611e1d908b9089908c908c9089908990600401612ea4565b6020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e60919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760008b8b604051611ea39493929190612edc565b60405180910390a3979650505050505050565b6003546000906001600160a01b031615611f325760035460405163f46dc94760e01b81526001600160a01b03878116600483015284811660248301529091169063f46dc94790604401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050505b60008311611f7d5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ff09190810190612a2e565b905060008160600151116120165760405162461bcd60e51b8152600401610a0b90612adf565b600085116120555760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000612064611d7386886121ae565b60075490915061207590600a612e34565b61208290620186a0612e40565b8111156120a15760405162461bcd60e51b8152600401610a0b90612e57565b6008546001600160a01b03908116908816036120d2576001546120cd906001600160a01b0316866123a2565b6120ec565b6001546120ec90889086906001600160a01b031688612272565b60018054604051631b5522f960e11b81526000926001600160a01b03909216916336aa45f291612128918c918a918d918d918a91600401612ea4565b6020604051808303816000875af1158015612147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216b919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760018b8b604051611ea39493929190612edc565b6000826000036121c0575060006109a0565b60006121cc8385612e40565b9050826121d98583612f25565b14610bf75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0b565b6000610bf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612470565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122d69190612f47565b6000604051808303816000865af19150503d8060008114612313576040519150601f19603f3d011682016040523d82523d6000602084013e612318565b606091505b50915091508180156123425750805115806123425750808060200190518101906123429190612b25565b61239a5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610a0b565b505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516123cc9190612f47565b60006040518083038185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b505090508061246b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610a0b565b505050565b600081836124915760405162461bcd60e51b8152600401610a0b9190612f63565b5060006116c28486612f25565b6001600160a01b03811681146124b357600080fd5b50565b600080604083850312156124c957600080fd5b82356124d48161249e565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b82811015612524578151805185528601518685015292840192908501906001016124ff565b5091979650505050505050565b60006020828403121561254357600080fd5b8135610bf78161249e565b60008060006060848603121561256357600080fd5b833561256e8161249e565b92506020840135915060408401356125858161249e565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156125c8578351835292840192918401916001016125ac565b50909695505050505050565b6000806000606084860312156125e957600080fd5b83356125f48161249e565b95602085013595506040909401359392505050565b6000806040838503121561261c57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156125c85783516001600160a01b031683529284019291840191600101612647565b60005b8381101561268757818101518382015260200161266f565b50506000910152565b600081518084526126a881602086016020860161266c565b601f01601f19169290920160200192915050565b6001600160a01b03851681526080602082018190526000906126e090830186612690565b82810360408401526126f28186612690565b91505082606083015295945050505050565b6000806040838503121561271757600080fd5b82356127228161249e565b915060208301356127328161249e565b809150509250929050565b60006020828403121561274f57600080fd5b5035919050565b6000806000806080858703121561276c57600080fd5b84356127778161249e565b935060208501356127878161249e565b93969395505050506040820135916060013590565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156127ee576127ee6127b5565b60405290565b604051610120810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051610180810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051601f8201601f1916810167ffffffffffffffff81118282101715612865576128656127b5565b604052919050565b600067ffffffffffffffff821115612887576128876127b5565b5060051b60200190565b600060208083850312156128a457600080fd5b825167ffffffffffffffff8111156128bb57600080fd5b8301601f810185136128cc57600080fd5b80516128df6128da8261286d565b61283c565b81815260059190911b820183019083810190878311156128fe57600080fd5b928401925b8284101561291c57835182529284019290840190612903565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161297e5761297e612956565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80516129c58161249e565b919050565b600082601f8301126129db57600080fd5b815167ffffffffffffffff8111156129f5576129f56127b5565b612a08601f8201601f191660200161283c565b818152846020838601011115612a1d57600080fd5b610d0782602083016020870161266c565b600060208284031215612a4057600080fd5b815167ffffffffffffffff80821115612a5857600080fd5b9083019060808286031215612a6c57600080fd5b612a746127cb565b8251612a7f8161249e565b8152602083015182811115612a9357600080fd5b612a9f878286016129ca565b602083015250604083015182811115612ab757600080fd5b612ac3878286016129ca565b6040830152506060830151606082015280935050505092915050565b60208082526026908201527f5468697320636f6e74726163742061646472657373206973206e6f74207375706040820152651c1bdc9d195960d21b606082015260800190565b600060208284031215612b3757600080fd5b81518015158114610bf757600080fd5b60006020808385031215612b5a57600080fd5b825167ffffffffffffffff811115612b7157600080fd5b8301601f81018513612b8257600080fd5b8051612b906128da8261286d565b81815260059190911b82018301908381019087831115612baf57600080fd5b928401925b8284101561291c578351612bc78161249e565b82529284019290840190612bb4565b60006101208284031215612be957600080fd5b612bf16127f4565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b8051600281106129c557600080fd5b8051600481106129c557600080fd5b60006101808284031215612c8257600080fd5b612c8a612818565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120612cee818501612c51565b90820152610140612d00848201612c60565b90820152610160612d128482016129ba565b908201529392505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612d4557600080fd5b8151610bf78161249e565b600181815b80851115612d8b578160001904821115612d7157612d71612956565b80851615612d7e57918102915b93841c9390800290612d55565b509250929050565b600082612da2575060016109a0565b81612daf575060006109a0565b8160018114612dc55760028114612dcf57612deb565b60019150506109a0565b60ff841115612de057612de0612956565b50506001821b6109a0565b5060208310610133831016604e8410600b8410161715612e0e575081810a6109a0565b612e188383612d50565b8060001904821115612e2c57612e2c612956565b029392505050565b6000610bf78383612d93565b80820281158282048414176109a0576109a0612956565b6020808252602d908201527f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60408201526c1d080c4c0c0c0c0c081554d115609a1b606082015260800190565b6001600160a01b03968716815294909516602085015260408401929092526060830152608082015260ff90911660a082015260c00190565b6001600160a01b03851681526080810160028510612f0a57634e487b7160e01b600052602160045260246000fd5b84602083015283604083015282606083015295945050505050565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b60008251612f5981846020870161266c565b9190910192915050565b602081526000610bf7602083018461269056fea264697066735822122046a912d34f63a36f8db25e86d36c32d96d3d096ee16e53424ae187fec646b01e64736f6c63430008110033Deployed Bytecode
0x6080604052600436106102045760003560e01c80637017689611610118578063d4de8ad2116100a0578063edb258411161006f578063edb2584114610660578063f248d4bb146106e2578063f3da8edf14610702578063f7888aec14610722578063f79fde671461074257600080fd5b8063d4de8ad2146105e0578063e3dddfc814610600578063e501d5f414610620578063ed7a144f1461064057600080fd5b80639fd95a42116100e75780639fd95a4214610540578063b424bd8314610560578063bdda1d1a14610580578063c27b6f29146105a0578063ca5eb5e1146105c057600080fd5b806370176896146104cd5780637cb2b79c146104e057806394f27d081461050057806395265e6c1461052057600080fd5b806327f83af91161019b57806350ab38711161016a57806350ab3871146103d9578063594251341461043d578063597704381461045d5780635d4e94071461048d5780635f8e651e146104ad57600080fd5b806327f83af91461035957806341976e091461037957806347c3b77d146103995780634f9f21f9146103b957600080fd5b8063161b71fa116101d7578063161b71fa146102bd57806319ab453c146102ea5780631cbc5ab11461030c5780631f69ae121461032c57600080fd5b80630479569f1461020957806305a7b0411461023f578063083c63511461026d5780630afbe8731461028d575b600080fd5b34801561021557600080fd5b506102296102243660046124b6565b610757565b60405161023691906124e2565b60405180910390f35b34801561024b57600080fd5b5061025f61025a366004612531565b610929565b604051908152602001610236565b34801561027957600080fd5b5061025f610288366004612531565b6109a6565b34801561029957600080fd5b506102ad6102a836600461254e565b6109e0565b6040519015158152602001610236565b3480156102c957600080fd5b506102dd6102d83660046124b6565b610b7b565b6040516102369190612590565b3480156102f657600080fd5b5061030a610305366004612531565b610bfe565b005b34801561031857600080fd5b5061025f6103273660046125d4565b610ca3565b34801561033857600080fd5b5061034c610347366004612609565b610d0f565b604051610236919061262b565b34801561036557600080fd5b506102ad6103743660046124b6565b610d88565b34801561038557600080fd5b5061025f610394366004612531565b610eed565b3480156103a557600080fd5b506102dd6103b43660046125d4565b610f27565b3480156103c557600080fd5b506102dd6103d43660046125d4565b610fb0565b3480156103e557600080fd5b506103f96103f43660046124b6565b610ff8565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610236565b34801561044957600080fd5b5061025f610458366004612531565b6110ce565b34801561046957600080fd5b5061047d610478366004612531565b611108565b60405161023694939291906126bc565b34801561049957600080fd5b506102296104a83660046124b6565b6111a7565b3480156104b957600080fd5b5061025f6104c8366004612704565b611370565b61025f6104db36600461273d565b6113ef565b3480156104ec57600080fd5b5061030a6104fb366004612531565b61140a565b34801561050c57600080fd5b506102dd61051b3660046124b6565b611456565b34801561052c57600080fd5b5061025f61053b3660046124b6565b61148d565b34801561054c57600080fd5b506102dd61055b3660046124b6565b6114c4565b34801561056c57600080fd5b5061025f61057b366004612531565b6114fb565b34801561058c57600080fd5b506102dd61059b3660046124b6565b611535565b3480156105ac57600080fd5b5061025f6105bb366004612704565b61156c565b3480156105cc57600080fd5b5061030a6105db366004612531565b6115ae565b3480156105ec57600080fd5b506102dd6105fb3660046124b6565b6115fa565b34801561060c57600080fd5b506102dd61061b366004612756565b611631565b34801561062c57600080fd5b5061025f61063b3660046124b6565b6116cb565b34801561064c57600080fd5b5061025f61065b3660046125d4565b611702565b34801561066c57600080fd5b5061068061067b3660046124b6565b611766565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e085015260ff908116610100850152166101208301526001600160a01b031661014082015261016001610236565b3480156106ee57600080fd5b506102dd6106fd366004612756565b611875565b34801561070e57600080fd5b5061025f61071d366004612609565b6118c5565b34801561072e57600080fd5b5061025f61073d366004612704565b6118e0565b34801561074e57600080fd5b5061025f611976565b60606000610763611b57565b90506000816001600160a01b0316639fd95a4286866040518363ffffffff1660e01b815260040161079592919061279c565b600060405180830381865afa1580156107b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107da9190810190612891565b90508367ffffffffffffffff8111156107f5576107f56127b5565b60405190808252806020026020018201604052801561083a57816020015b60408051808201909152600080825260208201528152602001906001900390816108135790505b50925060005b8481101561092057600082828151811061085c5761085c612927565b602002602001015190506000846001600160a01b031663e501d5f489846040518363ffffffff1660e01b815260040161089692919061279c565b602060405180830381865afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d7919061293d565b905060405180604001604052808381526020018281525086848151811061090057610900612927565b6020026020010181905250505080806109189061296c565b915050610840565b50505092915050565b6000610933611b57565b6040516305a7b04160e01b81526001600160a01b03848116600483015291909116906305a7b041906024015b602060405180830381865afa15801561097c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a0919061293d565b92915050565b60006109b0611b57565b60405163083c635160e01b81526001600160a01b038481166004830152919091169063083c63519060240161095f565b600080546001600160a01b03163314610a145760405162461bcd60e51b8152600401610a0b90612985565b60405180910390fd5b600254604051630b2ee08760e31b81526001600160a01b0386811660048301526000921690635977043890602401600060405180830381865afa158015610a5f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a879190810190612a2e565b90506000816060015111610aad5760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b0387811660048301526024820187905285811660448301526000921690633a72b3fc906064016020604051808303816000875af1158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2d9190612b25565b6040516001600160a01b03868116825291925086918816907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a395945050505050565b6060610b85611b57565b6001600160a01b031663161b71fa84846040518363ffffffff1660e01b8152600401610bb292919061279c565b600060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612891565b9392505050565b6000546001600160a01b03163314610c285760405162461bcd60e51b8152600401610a0b90612985565b6001546001600160a01b031615610c815760405162461bcd60e51b815260206004820152601960248201527f43616e206f6e6c792062652061737369676e6564206f6e6365000000000000006044820152606401610a0b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6008546000906001600160a01b0390811690851603610cfb5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611bc5565b949350505050565b600254604051630fb4d70960e11b815260048101849052602481018390526060916001600160a01b031690631f69ae1290604401600060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bf79190810190612b47565b600254604051630b2ee08760e31b81526001600160a01b0384811660048301526000928392911690635977043890602401600060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dfe9190810190612a2e565b90506000816060015111610e245760405162461bcd60e51b8152600401610a0b90612adf565b600154604051630e9cacff60e21b81526001600160a01b038681166004830152602482018690523360448301526000921690633a72b3fc906064016020604051808303816000875af1158015610e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea29190612b25565b60405133815290915084906001600160a01b038716907f815e548fe24679a5c17a12d6857eba6a816b25878050abfcb7b0e88f07d6418b9060200160405180910390a3949350505050565b6000610ef7611b57565b6040516341976e0960e01b81526001600160a01b03848116600483015291909116906341976e099060240161095f565b6060610f31611b57565b6040516347c3b77d60e01b81526001600160a01b038681166004830152602482018690526044820185905291909116906347c3b77d906064015b600060405180830381865afa158015610f88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d079190810190612891565b6060610fba611b57565b604051634f9f21f960e01b81526001600160a01b03868116600483015260248201869052604482018590529190911690634f9f21f990606401610f6b565b60008060008060008060008060008061100f611b57565b6001600160a01b03166350ab38718d8d6040518363ffffffff1660e01b815260040161103c92919061279c565b61012060405180830381865afa15801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e9190612bd6565b905080600001519950806020015198508060400151975080606001519650806080015195508060a0015194508060c0015193508060e0015192508061010001519150509295985092959850929598565b60006110d8611b57565b604051631650944d60e21b81526001600160a01b038481166004830152919091169063594251349060240161095f565b600254604051630b2ee08760e31b81526001600160a01b038381166004830152600092606092839285928392911690635977043890602401600060405180830381865afa15801561115d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111859190810190612a2e565b8051602082015160408301516060909301519199909850919650945092505050565b606060006111b3611b57565b90506000816001600160a01b031663d4de8ad286866040518363ffffffff1660e01b81526004016111e592919061279c565b600060405180830381865afa158015611202573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261122a9190810190612891565b90508367ffffffffffffffff811115611245576112456127b5565b60405190808252806020026020018201604052801561128a57816020015b60408051808201909152600080825260208201528152602001906001900390816112635790505b50925060005b848110156109205760008282815181106112ac576112ac612927565b602002602001015190506000846001600160a01b03166395265e6c89846040518363ffffffff1660e01b81526004016112e692919061279c565b602060405180830381865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611327919061293d565b905060405180604001604052808381526020018281525086848151811061135057611350612927565b6020026020010181905250505080806113689061296c565b915050611290565b600061137a611b57565b604051632fc7328f60e11b81526001600160a01b03858116600483015284811660248301529190911690635f8e651e906044015b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf7919061293d565b6008546000906109a0906001600160a01b0316833433611eb6565b6000546001600160a01b031633146114345760405162461bcd60e51b8152600401610a0b90612985565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6060611460611b57565b6001600160a01b03166394f27d0884846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611497611b57565b6001600160a01b03166395265e6c84846040518363ffffffff1660e01b81526004016113ae92919061279c565b60606114ce611b57565b6001600160a01b0316639fd95a4284846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611505611b57565b60405163b424bd8360e01b81526001600160a01b038481166004830152919091169063b424bd839060240161095f565b606061153f611b57565b6001600160a01b031663bdda1d1a84846040518363ffffffff1660e01b8152600401610bb292919061279c565b6000611576611b57565b60405163c27b6f2960e01b81526001600160a01b0385811660048301528481166024830152919091169063c27b6f29906044016113ae565b6000546001600160a01b031633146115d85760405162461bcd60e51b8152600401610a0b90612985565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060611604611b57565b6001600160a01b031663d4de8ad284846040518363ffffffff1660e01b8152600401610bb292919061279c565b606061163b611b57565b604051631c7bbbf960e31b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063e3dddfc8906084015b600060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116c29190810190612891565b95945050505050565b60006116d5611b57565b6001600160a01b031663e501d5f484846040518363ffffffff1660e01b81526004016113ae92919061279c565b6008546000906001600160a01b039081169085160361175a5760405162461bcd60e51b8152602060048201526014602482015273088decae640dcdee840e6eae0e0dee4e8408aa8960631b6044820152606401610a0b565b610d0784848433611eb6565b600080600080600080600080600080600080611780611b57565b6001600160a01b031663edb258418f8f6040518363ffffffff1660e01b81526004016117ad92919061279c565b61018060405180830381865afa1580156117cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ef9190612c6f565b905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e0015195508061010001519450806101200151600181111561184157611841612d1d565b9350806101400151600381111561185a5761185a612d1d565b92508061016001519150509295989b509295989b9093969950565b606061187f611b57565b60405163f248d4bb60e01b81526001600160a01b03878116600483015286811660248301526044820186905260648201859052919091169063f248d4bb9060840161167d565b600854600090610bf7906001600160a01b0316848433611bc5565b60085460009081906001600160a01b039081169085160361190c57506001600160a01b03821631610bf7565b6040516370a0823160e01b81526001600160a01b0384811660048301528516906370a0823190602401602060405180830381865afa158015611952573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d07919061293d565b600254604080516303c381ad60e61b815290516000926001600160a01b03169163f0e06b409160048083019260209291908290030181865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e4919061293d565b905090565b611a1d604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073c2132d05d31c914a87c6611c10748aeb04b58e8f6001600160a01b03168152602001604051806040016040528060048152602001631554d11560e21b81525081526020016040518060400160405280600a81526020016915195d1a195c881554d160b21b81525081526020016006815250905090565b611ad3604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600081525090565b604051806080016040528073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001604051806040016040528060058152602001644d4154494360d81b81525081526020016040518060400160405280600b81526020016a26b0ba34b1902a37b5b2b760a91b81525081526020016012815250905090565b6001546040805163f9b6117f60e01b815290516000926001600160a01b03169163f9b6117f9160048083019260209291908290030181865afa158015611ba1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e49190612d33565b6003546000906001600160a01b031615611c41576003546040516316b3980160e11b81526001600160a01b038781166004830152848116602483015290911690632d67300290604401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b505050505b60008311611c8c5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cff9190810190612a2e565b90506000816060015111611d255760405162461bcd60e51b8152600401610a0b90612adf565b60008511611d645760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000611d86611d7386886121ae565b6c0c9f2c9cd04674edea40000000612230565b600754909150611d9790600a612e34565b611da490620186a0612e40565b811115611dc35760405162461bcd60e51b8152600401610a0b90612e57565b600454600154611de2916001600160a01b039081169187911684612272565b600154604051631b5522f960e11b81526000916001600160a01b0316906336aa45f290611e1d908b9089908c908c9089908990600401612ea4565b6020604051808303816000875af1158015611e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e60919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760008b8b604051611ea39493929190612edc565b60405180910390a3979650505050505050565b6003546000906001600160a01b031615611f325760035460405163f46dc94760e01b81526001600160a01b03878116600483015284811660248301529091169063f46dc94790604401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050505b60008311611f7d5760405162461bcd60e51b81526020600482015260186024820152770546865207175616e746974792063616e6e6f7420626520360441b6044820152606401610a0b565b600254604051630b2ee08760e31b81526001600160a01b0387811660048301526000921690635977043890602401600060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ff09190810190612a2e565b905060008160600151116120165760405162461bcd60e51b8152600401610a0b90612adf565b600085116120555760405162461bcd60e51b815260206004820152600c60248201526b4e6f2c206e6f20707269636560a01b6044820152606401610a0b565b6000612064611d7386886121ae565b60075490915061207590600a612e34565b61208290620186a0612e40565b8111156120a15760405162461bcd60e51b8152600401610a0b90612e57565b6008546001600160a01b03908116908816036120d2576001546120cd906001600160a01b0316866123a2565b6120ec565b6001546120ec90889086906001600160a01b031688612272565b60018054604051631b5522f960e11b81526000926001600160a01b03909216916336aa45f291612128918c918a918d918d918a91600401612ea4565b6020604051808303816000875af1158015612147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216b919061293d565b905080886001600160a01b03167f164666df0cbe6896e7bda798468870a2933385c7517e10080233b7d1a1a4c2f08760018b8b604051611ea39493929190612edc565b6000826000036121c0575060006109a0565b60006121cc8385612e40565b9050826121d98583612f25565b14610bf75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a0b565b6000610bf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612470565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122d69190612f47565b6000604051808303816000865af19150503d8060008114612313576040519150601f19603f3d011682016040523d82523d6000602084013e612318565b606091505b50915091508180156123425750805115806123425750808060200190518101906123429190612b25565b61239a5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610a0b565b505050505050565b604080516000808252602082019092526001600160a01b0384169083906040516123cc9190612f47565b60006040518083038185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b505090508061246b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610a0b565b505050565b600081836124915760405162461bcd60e51b8152600401610a0b9190612f63565b5060006116c28486612f25565b6001600160a01b03811681146124b357600080fd5b50565b600080604083850312156124c957600080fd5b82356124d48161249e565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b82811015612524578151805185528601518685015292840192908501906001016124ff565b5091979650505050505050565b60006020828403121561254357600080fd5b8135610bf78161249e565b60008060006060848603121561256357600080fd5b833561256e8161249e565b92506020840135915060408401356125858161249e565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156125c8578351835292840192918401916001016125ac565b50909695505050505050565b6000806000606084860312156125e957600080fd5b83356125f48161249e565b95602085013595506040909401359392505050565b6000806040838503121561261c57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156125c85783516001600160a01b031683529284019291840191600101612647565b60005b8381101561268757818101518382015260200161266f565b50506000910152565b600081518084526126a881602086016020860161266c565b601f01601f19169290920160200192915050565b6001600160a01b03851681526080602082018190526000906126e090830186612690565b82810360408401526126f28186612690565b91505082606083015295945050505050565b6000806040838503121561271757600080fd5b82356127228161249e565b915060208301356127328161249e565b809150509250929050565b60006020828403121561274f57600080fd5b5035919050565b6000806000806080858703121561276c57600080fd5b84356127778161249e565b935060208501356127878161249e565b93969395505050506040820135916060013590565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156127ee576127ee6127b5565b60405290565b604051610120810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051610180810167ffffffffffffffff811182821017156127ee576127ee6127b5565b604051601f8201601f1916810167ffffffffffffffff81118282101715612865576128656127b5565b604052919050565b600067ffffffffffffffff821115612887576128876127b5565b5060051b60200190565b600060208083850312156128a457600080fd5b825167ffffffffffffffff8111156128bb57600080fd5b8301601f810185136128cc57600080fd5b80516128df6128da8261286d565b61283c565b81815260059190911b820183019083810190878311156128fe57600080fd5b928401925b8284101561291c57835182529284019290840190612903565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161297e5761297e612956565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b80516129c58161249e565b919050565b600082601f8301126129db57600080fd5b815167ffffffffffffffff8111156129f5576129f56127b5565b612a08601f8201601f191660200161283c565b818152846020838601011115612a1d57600080fd5b610d0782602083016020870161266c565b600060208284031215612a4057600080fd5b815167ffffffffffffffff80821115612a5857600080fd5b9083019060808286031215612a6c57600080fd5b612a746127cb565b8251612a7f8161249e565b8152602083015182811115612a9357600080fd5b612a9f878286016129ca565b602083015250604083015182811115612ab757600080fd5b612ac3878286016129ca565b6040830152506060830151606082015280935050505092915050565b60208082526026908201527f5468697320636f6e74726163742061646472657373206973206e6f74207375706040820152651c1bdc9d195960d21b606082015260800190565b600060208284031215612b3757600080fd5b81518015158114610bf757600080fd5b60006020808385031215612b5a57600080fd5b825167ffffffffffffffff811115612b7157600080fd5b8301601f81018513612b8257600080fd5b8051612b906128da8261286d565b81815260059190911b82018301908381019087831115612baf57600080fd5b928401925b8284101561291c578351612bc78161249e565b82529284019290840190612bb4565b60006101208284031215612be957600080fd5b612bf16127f4565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b8051600281106129c557600080fd5b8051600481106129c557600080fd5b60006101808284031215612c8257600080fd5b612c8a612818565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e0820152610100808401518183015250610120612cee818501612c51565b90820152610140612d00848201612c60565b90820152610160612d128482016129ba565b908201529392505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612d4557600080fd5b8151610bf78161249e565b600181815b80851115612d8b578160001904821115612d7157612d71612956565b80851615612d7e57918102915b93841c9390800290612d55565b509250929050565b600082612da2575060016109a0565b81612daf575060006109a0565b8160018114612dc55760028114612dcf57612deb565b60019150506109a0565b60ff841115612de057612de0612956565b50506001821b6109a0565b5060208310610133831016604e8410600b8410161715612e0e575081810a6109a0565b612e188383612d50565b8060001904821115612e2c57612e2c612956565b029392505050565b6000610bf78383612d93565b80820281158282048414176109a0576109a0612956565b6020808252602d908201527f4d6178696d756d2073696e676c65207472616e73616374696f6e20616d6f756e60408201526c1d080c4c0c0c0c0c081554d115609a1b606082015260800190565b6001600160a01b03968716815294909516602085015260408401929092526060830152608082015260ff90911660a082015260c00190565b6001600160a01b03851681526080810160028510612f0a57634e487b7160e01b600052602160045260246000fd5b84602083015283604083015282606083015295945050505050565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b60008251612f5981846020870161266c565b9190910192915050565b602081526000610bf7602083018461269056fea264697066735822122046a912d34f63a36f8db25e86d36c32d96d3d096ee16e53424ae187fec646b01e64736f6c63430008110033
Deployed Bytecode Sourcemap
10825:13291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20519:551;;;;;;;;;;-1:-1:-1;20519:551:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17695:164;;;;;;;;;;-1:-1:-1;17695:164:0;;;;;:::i;:::-;;:::i;:::-;;;1653:25:2;;;1641:2;1626:18;17695:164:0;1507:177:2;21302:186:0;;;;;;;;;;-1:-1:-1;21302:186:0;;;;;:::i;:::-;;:::i;16472:473::-;;;;;;;;;;-1:-1:-1;16472:473:0;;;;;:::i;:::-;;:::i;:::-;;;2315:14:2;;2308:22;2290:41;;2278:2;2263:18;16472:473:0;2150:187:2;21076:220:0;;;;;;;;;;-1:-1:-1;21076:220:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11536:183::-;;;;;;;;;;-1:-1:-1;11536:183:0;;;;;:::i;:::-;;:::i;:::-;;13867:272;;;;;;;;;;-1:-1:-1;13867:272:0;;;;;:::i;:::-;;:::i;12536:192::-;;;;;;;;;;-1:-1:-1;12536:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16018:448::-;;;;;;;;;;-1:-1:-1;16018:448:0;;;;;:::i;:::-;;:::i;17539:150::-;;;;;;;;;;-1:-1:-1;17539:150:0;;;;;:::i;:::-;;:::i;21494:224::-;;;;;;;;;;-1:-1:-1;21494:224:0;;;;;:::i;:::-;;:::i;19847:222::-;;;;;;;;;;-1:-1:-1;19847:222:0;;;;;:::i;:::-;;:::i;18917:734::-;;;;;;;;;;-1:-1:-1;18917:734:0;;;;;:::i;:::-;;:::i;:::-;;;;4654:25:2;;;4710:2;4695:18;;4688:34;;;;4738:18;;;4731:34;;;;4796:2;4781:18;;4774:34;;;;4839:3;4824:19;;4817:35;;;;4883:3;4868:19;;4861:35;4927:3;4912:19;;4905:35;4971:3;4956:19;;4949:35;5015:3;5000:19;;4993:35;4641:3;4626:19;18917:734:0;4283:751:2;19657:184:0;;;;;;;;;;-1:-1:-1;19657:184:0;;;;;:::i;:::-;;:::i;11961:413::-;;;;;;;;;;-1:-1:-1;11961:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;22172:554::-;;;;;;;;;;-1:-1:-1;22172:554:0;;;;;:::i;:::-;;:::i;23176:212::-;;;;;;;;;;-1:-1:-1;23176:212:0;;;;;:::i;:::-;;:::i;15853:159::-;;;;;;:::i;:::-;;:::i;11725:121::-;;;;;;;;;;-1:-1:-1;11725:121:0;;;;;:::i;:::-;;:::i;22732:222::-;;;;;;;;;;-1:-1:-1;22732:222:0;;;;;:::i;:::-;;:::i;21724:215::-;;;;;;;;;;-1:-1:-1;21724:215:0;;;;;:::i;:::-;;:::i;20294:219::-;;;;;;;;;;-1:-1:-1;20294:219:0;;;;;:::i;:::-;;:::i;17865:164::-;;;;;;;;;;-1:-1:-1;17865:164:0;;;;;:::i;:::-;;:::i;22960:210::-;;;;;;;;;;-1:-1:-1;22960:210:0;;;;;:::i;:::-;;:::i;23394:::-;;;;;;;;;;-1:-1:-1;23394:210:0;;;;;:::i;:::-;;:::i;11852:103::-;;;;;;;;;;-1:-1:-1;11852:103:0;;;;;:::i;:::-;;:::i;21945:221::-;;;;;;;;;;-1:-1:-1;21945:221:0;;;;;:::i;:::-;;:::i;23866:248::-;;;;;;;;;;-1:-1:-1;23866:248:0;;;;;:::i;:::-;;:::i;20075:213::-;;;;;;;;;;-1:-1:-1;20075:213:0;;;;;:::i;:::-;;:::i;15573:274::-;;;;;;;;;;-1:-1:-1;15573:274:0;;;;;:::i;:::-;;:::i;18035:876::-;;;;;;;;;;-1:-1:-1;18035:876:0;;;;;:::i;:::-;;:::i;:::-;;;;7656:25:2;;;7712:2;7697:18;;7690:34;;;;7740:18;;;7733:34;;;;7798:2;7783:18;;7776:34;;;;7841:3;7826:19;;7819:35;;;;7885:3;7870:19;;7863:35;;;;7929:3;7914:19;;7907:35;7973:3;7958:19;;7951:35;8035:4;8023:17;;;8017:3;8002:19;;7995:46;8078:17;8072:3;8057:19;;8050:46;-1:-1:-1;;;;;8133:33:2;8127:3;8112:19;;8105:62;7643:3;7628:19;18035:876:0;7236:937:2;23610:250:0;;;;;;;;;;-1:-1:-1;23610:250:0;;;;;:::i;:::-;;:::i;14145:176::-;;;;;;;;;;-1:-1:-1;14145:176:0;;;;;:::i;:::-;;:::i;17017:358::-;;;;;;;;;;-1:-1:-1;17017:358:0;;;;;:::i;:::-;;:::i;12380:150::-;;;;;;;;;;;;;:::i;20519:551::-;20608:18;20642:27;20672:17;:15;:17::i;:::-;20642:47;;20699:26;20728:12;-1:-1:-1;;;;;20728:42:0;;20771:14;20787:5;20728:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20728:65:0;;;;;;;;;;;;:::i;:::-;20699:94;;20821:5;20810:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;20810:17:0;;;;;;;;;;;;;;;;20803:24;;20842:6;20837:227;20854:5;20852:1;:7;20837:227;;;20888:13;20904:9;20914:1;20904:12;;;;;;;;:::i;:::-;;;;;;;20888:28;;20930:14;20947:12;-1:-1:-1;;;;;20947:40:0;;20988:14;21004:5;20947:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20930:80;;21034:19;;;;;;;;21039:5;21034:19;;;;21046:6;21034:19;;;21024:4;21029:1;21024:7;;;;;;;;:::i;:::-;;;;;;:29;;;;20874:190;;20861:3;;;;;:::i;:::-;;;;20837:227;;;;20632:438;;20519:551;;;;:::o;17695:164::-;17766:15;17804:17;:15;:17::i;:::-;:48;;-1:-1:-1;;;17804:48:0;;-1:-1:-1;;;;;11472:32:2;;;17804:48:0;;;11454:51:2;17804:32:0;;;;;;;11427:18:2;;17804:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17797:55;17695:164;-1:-1:-1;;17695:164:0:o;21302:186::-;21386:11;21420:17;:15;:17::i;:::-;:61;;-1:-1:-1;;;21420:61:0;;-1:-1:-1;;;;;11472:32:2;;;21420:61:0;;;11454:51:2;21420:45:0;;;;;;;11427:18:2;;21420:61:0;11308:203:2;16472:473:0;16579:4;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;;;;;;;;;16635:13:::1;::::0;16620:54:::1;::::0;-1:-1:-1;;;16620:54:0;;-1:-1:-1;;;;;11472:32:2;;;16620:54:0::1;::::0;::::1;11454:51:2::0;16599:18:0::1;::::0;16635:13:::1;::::0;16620:38:::1;::::0;11427:18:2;;16620:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;16620:54:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;16599:75;;16709:1;16692:5;:14;;;:18;16684:69;;;;-1:-1:-1::0;;;16684:69:0::1;;;;;;;:::i;:::-;16791:13;::::0;16778:74:::1;::::0;-1:-1:-1;;;16778:74:0;;-1:-1:-1;;;;;14172:15:2;;;16778:74:0::1;::::0;::::1;14154:34:2::0;14204:18;;;14197:34;;;14267:15;;;14247:18;;;14240:43;16764:11:0::1;::::0;16791:13:::1;::::0;16778:39:::1;::::0;14089:18:2;;16778:74:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16868:46;::::0;-1:-1:-1;;;;;11472:32:2;;;11454:51;;16764:88:0;;-1:-1:-1;16896:8:0;;16868:46;::::1;::::0;::::1;::::0;11442:2:2;11427:18;16868:46:0::1;;;;;;;16932:6:::0;16472:473;-1:-1:-1;;;;;16472:473:0:o;21076:220::-;21176:21;21220:17;:15;:17::i;:::-;-1:-1:-1;;;;;21220:45:0;;21266:14;21282:6;21220:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21220:69:0;;;;;;;;;;;;:::i;:::-;21213:76;21076:220;-1:-1:-1;;;21076:220:0:o;11536:183::-;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11615:13:::1;::::0;-1:-1:-1;;;;;11615:13:0::1;:27:::0;11607:65:::1;;;::::0;-1:-1:-1;;;11607:65:0;;14778:2:2;11607:65:0::1;::::0;::::1;14760:21:2::0;14817:2;14797:18;;;14790:30;14856:27;14836:18;;;14829:55;14901:18;;11607:65:0::1;14576:349:2::0;11607:65:0::1;11682:13;:30:::0;;-1:-1:-1;;;;;;11682:30:0::1;-1:-1:-1::0;;;;;11682:30:0;;;::::1;::::0;;;::::1;::::0;;11536:183::o;13867:272::-;14018:3;:17;13961:15;;-1:-1:-1;;;;;14018:17:0;;;14000:35;;;;13992:68;;;;-1:-1:-1;;;13992:68:0;;15132:2:2;13992:68:0;;;15114:21:2;15171:2;15151:18;;;15144:30;-1:-1:-1;;;15190:18:2;;;15183:50;15250:18;;13992:68:0;14930:344:2;13992:68:0;14077:55;14082:14;14098:6;14106:13;14121:10;14077:4;:55::i;:::-;14070:62;13867:272;-1:-1:-1;;;;13867:272:0:o;12536:192::-;12675:13;;12660:61;;-1:-1:-1;;;12660:61:0;;;;;15453:25:2;;;15494:18;;;15487:34;;;12616:21:0;;-1:-1:-1;;;;;12675:13:0;;12660:49;;15426:18:2;;12660:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12660:61:0;;;;;;;;;;;;:::i;16018:448::-;16150:13;;16135:54;;-1:-1:-1;;;16135:54:0;;-1:-1:-1;;;;;11472:32:2;;;16135:54:0;;;11454:51:2;16094:4:0;;;;16150:13;;;16135:38;;11427:18:2;;16135:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16135:54:0;;;;;;;;;;;;:::i;:::-;16114:75;;16224:1;16207:5;:14;;;:18;16199:69;;;;-1:-1:-1;;;16199:69:0;;;;;;;:::i;:::-;16306:13;;16293:77;;-1:-1:-1;;;16293:77:0;;-1:-1:-1;;;;;14172:15:2;;;16293:77:0;;;14154:34:2;14204:18;;;14197:34;;;16359:10:0;14247:18:2;;;14240:43;16279:11:0;;16306:13;;16293:39;;14089:18:2;;16293:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16386:49;;16424:10;11454:51:2;;16279:91:0;;-1:-1:-1;16414:8:0;;-1:-1:-1;;;;;16386:49:0;;;;;11442:2:2;11427:18;16386:49:0;;;;;;;16453:6;16018:448;-1:-1:-1;;;;16018:448:0:o;17539:150::-;17604:13;17640:17;:15;:17::i;:::-;:42;;-1:-1:-1;;;17640:42:0;;-1:-1:-1;;;;;11472:32:2;;;17640:42:0;;;11454:51:2;17640:26:0;;;;;;;11427:18:2;;17640:42:0;11308:203:2;21494:224:0;21600:21;21644:17;:15;:17::i;:::-;:67;;-1:-1:-1;;;21644:67:0;;-1:-1:-1;;;;;16713:32:2;;;21644:67:0;;;16695:51:2;16762:18;;;16755:34;;;16805:18;;;16798:34;;;21644:39:0;;;;;;;16668:18:2;;21644:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21644:67:0;;;;;;;;;;;;:::i;19847:222::-;19952:21;19996:17;:15;:17::i;:::-;:66;;-1:-1:-1;;;19996:66:0;;-1:-1:-1;;;;;16713:32:2;;;19996:66:0;;;16695:51:2;16762:18;;;16755:34;;;16805:18;;;16798:34;;;19996:38:0;;;;;;;16668:18:2;;19996:66:0;16493:345:2;18917:734:0;19009:15;19034:18;19062:19;19091:13;19114:17;19141:16;19167;19193:15;19218:12;19251:19;19273:17;:15;:17::i;:::-;-1:-1:-1;;;;;19273:26:0;;19300:14;19316:8;19273:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19251:74;;19346:6;:14;;;19336:24;;19383:6;:17;;;19370:30;;19424:6;:18;;;19410:32;;19460:6;:12;;;19452:20;;19494:6;:16;;;19482:28;;19531:6;:15;;;19520:26;;19567:6;:15;;;19556:26;;19602:6;:14;;;19592:24;;19633:6;:11;;;19626:18;;19241:410;18917:734;;;;;;;;;;;:::o;19657:184::-;19740:11;19774:17;:15;:17::i;:::-;:60;;-1:-1:-1;;;19774:60:0;;-1:-1:-1;;;;;11472:32:2;;;19774:60:0;;;11454:51:2;19774:44:0;;;;;;;11427:18:2;;19774:60:0;11308:203:2;11961:413:0;12189:13;;12174:54;;-1:-1:-1;;;12174:54:0;;-1:-1:-1;;;;;11472:32:2;;;12174:54:0;;;11454:51:2;12035:21:0;;12066:20;;;;12035:21;;;;12189:13;;;12174:38;;11427:18:2;;12174:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12174:54:0;;;;;;;;;;;;:::i;:::-;12255:19;;12293:12;;;;12322:10;;;;12353:14;;;;;12255:19;;12293:12;;-1:-1:-1;12322:10:0;;-1:-1:-1;12353:14:0;-1:-1:-1;11961:413:0;-1:-1:-1;;;11961:413:0:o;22172:554::-;22262:18;22296:27;22326:17;:15;:17::i;:::-;22296:47;;22353:26;22382:12;-1:-1:-1;;;;;22382:43:0;;22426:14;22442:5;22382:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22382:66:0;;;;;;;;;;;;:::i;:::-;22353:95;;22476:5;22465:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;22465:17:0;;;;;;;;;;;;;;;;22458:24;;22497:6;22492:228;22509:5;22507:1;:7;22492:228;;;22543:13;22559:9;22569:1;22559:12;;;;;;;;:::i;:::-;;;;;;;22543:28;;22585:14;22602:12;-1:-1:-1;;;;;22602:41:0;;22644:14;22660:5;22602:64;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22585:81;;22690:19;;;;;;;;22695:5;22690:19;;;;22702:6;22690:19;;;22680:4;22685:1;22680:7;;;;;;;;:::i;:::-;;;;;;:29;;;;22529:191;;22516:3;;;;;:::i;:::-;;;;22492:228;;23176:212;23277:11;23311:17;:15;:17::i;:::-;:70;;-1:-1:-1;;;23311:70:0;;-1:-1:-1;;;;;17852:15:2;;;23311:70:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;23311:45:0;;;;;;;17769:18:2;;23311:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15853:159::-;15956:3;:17;15912:15;;15950:55;;-1:-1:-1;;;;;15956:17:0;15975:6;15983:9;15994:10;15950:5;:55::i;11725:121::-;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11808:13:::1;:31:::0;;-1:-1:-1;;;;;;11808:31:0::1;-1:-1:-1::0;;;;;11808:31:0;;;::::1;::::0;;;::::1;::::0;;11725:121::o;22732:222::-;22833:21;22877:17;:15;:17::i;:::-;-1:-1:-1;;;;;22877:46:0;;22924:14;22940:6;22877:70;;;;;;;;;;;;;;;;:::i;21724:215::-;21825:14;21862:17;:15;:17::i;:::-;-1:-1:-1;;;;;21862:46:0;;21909:14;21925:6;21862:70;;;;;;;;;;;;;;;;:::i;20294:219::-;20392:21;20436:17;:15;:17::i;:::-;-1:-1:-1;;;;;20436:47:0;;20484:14;20500:5;20436:70;;;;;;;;;;;;;;;;:::i;17865:164::-;17936:15;17974:17;:15;:17::i;:::-;:48;;-1:-1:-1;;;17974:48:0;;-1:-1:-1;;;;;11472:32:2;;;17974:48:0;;;11454:51:2;17974:32:0;;;;;;;11427:18:2;;17974:48:0;11308:203:2;22960:210:0;23051:29;23103:17;:15;:17::i;:::-;-1:-1:-1;;;;;23103:34:0;;23138:14;23154:8;23103:60;;;;;;;;;;;;;;;;:::i;23394:210::-;23494:11;23528:17;:15;:17::i;:::-;:69;;-1:-1:-1;;;23528:69:0;;-1:-1:-1;;;;;17852:15:2;;;23528:69:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;23528:44:0;;;;;;;17769:18:2;;23528:69:0;17622:304:2;11852:103:0;11455:6;;-1:-1:-1;;;;;11455:6:0;11465:10;11455:20;11447:65;;;;-1:-1:-1;;;11447:65:0;;;;;;;:::i;:::-;11926:9:::1;:22:::0;;-1:-1:-1;;;;;;11926:22:0::1;-1:-1:-1::0;;;;;11926:22:0;;;::::1;::::0;;;::::1;::::0;;11852:103::o;21945:221::-;22044:21;22088:17;:15;:17::i;:::-;-1:-1:-1;;;;;22088:48:0;;22137:14;22153:5;22088:71;;;;;;;;;;;;;;;;:::i;23866:248::-;23988:21;24032:17;:15;:17::i;:::-;:75;;-1:-1:-1;;;24032:75:0;;-1:-1:-1;;;;;18218:15:2;;;24032:75:0;;;18200:34:2;18270:15;;;18250:18;;;18243:43;18302:18;;;18295:34;;;18345:18;;;18338:34;;;24032:38:0;;;;;;;18134:19:2;;24032:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24032:75:0;;;;;;;;;;;;:::i;:::-;24025:82;23866:248;-1:-1:-1;;;;;23866:248:0:o;20075:213::-;20175:14;20212:17;:15;:17::i;:::-;-1:-1:-1;;;;;20212:45:0;;20258:14;20274:6;20212:69;;;;;;;;;;;;;;;;:::i;15573:274::-;15725:3;:17;15668:15;;-1:-1:-1;;;;;15725:17:0;;;15707:35;;;;15699:68;;;;-1:-1:-1;;;15699:68:0;;15132:2:2;15699:68:0;;;15114:21:2;15171:2;15151:18;;;15144:30;-1:-1:-1;;;15190:18:2;;;15183:50;15250:18;;15699:68:0;14930:344:2;15699:68:0;15784:56;15790:14;15806:6;15814:13;15829:10;15784:5;:56::i;18035:876::-;18127:13;18150:18;18178:20;18208:16;18234:19;18263:15;18288:19;18317:15;18342;18367:12;18389:14;18424:18;18445:17;:15;:17::i;:::-;-1:-1:-1;;;;;18445:26:0;;18472:14;18488:8;18445:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18424:73;;18515:5;:11;;;18507:19;;18549:5;:16;;;18536:29;;18590:5;:18;;;18575:33;;18629:5;:14;;;18618:25;;18667:5;:17;;;18653:31;;18704:5;:13;;;18694:23;;18741:5;:17;;;18727:31;;18778:5;:13;;;18768:23;;18819:5;:15;;;18813:22;;;;;;;;:::i;:::-;18801:34;;18860:5;:12;;;18854:19;;;;;;;;:::i;:::-;18845:28;;18892:5;:12;;;18883:21;;18414:497;18035:876;;;;;;;;;;;;;;:::o;23610:250::-;23733:21;23777:17;:15;:17::i;:::-;:76;;-1:-1:-1;;;23777:76:0;;-1:-1:-1;;;;;18218:15:2;;;23777:76:0;;;18200:34:2;18270:15;;;18250:18;;;18243:43;18302:18;;;18295:34;;;18345:18;;;18338:34;;;23777:39:0;;;;;;;18134:19:2;;23777:76:0;17931:447:2;14145:176:0;14261:3;:17;14218:15;;14256:58;;-1:-1:-1;;;;;14261:17:0;14280:6;14288:13;14303:10;14256:4;:58::i;17017:358::-;17170:3;:17;17100:7;;;;-1:-1:-1;;;;;17170:17:0;;;17152:35;;;;17148:197;;-1:-1:-1;;;;;;17221:15:0;;;17148:197;;;17293:41;;-1:-1:-1;;;17293:41:0;;-1:-1:-1;;;;;11472:32:2;;;17293:41:0;;;11454:51:2;17293:32:0;;;;;11427:18:2;;17293:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12380:150::-;12489:13;;12474:49;;;-1:-1:-1;;;12474:49:0;;;;12440:11;;-1:-1:-1;;;;;12489:13:0;;12474:47;;:49;;;;;;;;;;;;;;12489:13;12474:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12467:56;;12380:150;:::o;218:254:1:-;257:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;257:12:1;292:173;;;;;;;;387:42;-1:-1:-1;;;;;292:173:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;292:173:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;292:173:1;;;;;;;453:1;292:173;;;285:180;;218:254;:::o;478:256::-;516:12;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;516:12:1;551:176;;;;;;;;648:42;-1:-1:-1;;;;;551:176:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;551:176:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;551:176:1;;;;;;;714:2;551:176;;;544:183;;478:256;:::o;17381:152:0:-;17496:13;;17483:42;;;-1:-1:-1;;;17483:42:0;;;;17431:14;;-1:-1:-1;;;;;17496:13:0;;17483:40;;:42;;;;;;;;;;;;;;17496:13;17483:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12800:1061::-;12939:9;;12912:7;;-1:-1:-1;;;;;12939:9:0;:23;12935:85;;12979:9;;12964:56;;-1:-1:-1;;;12964:56:0;;-1:-1:-1;;;;;17852:15:2;;;12964:56:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;12979:9:0;;;;12964:31;;17769:18:2;;12964:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12935:85;13055:1;13039:13;:17;13031:54;;;;-1:-1:-1;;;13031:54:0;;20400:2:2;13031:54:0;;;20382:21:2;20439:2;20419:18;;;20412:30;-1:-1:-1;;;20458:18:2;;;20451:54;20522:18;;13031:54:0;20198:348:2;13031:54:0;13132:13;;13117:54;;-1:-1:-1;;;13117:54:0;;-1:-1:-1;;;;;11472:32:2;;;13117:54:0;;;11454:51:2;13096:18:0;;13132:13;;13117:38;;11427:18:2;;13117:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13117:54:0;;;;;;;;;;;;:::i;:::-;13096:75;;13206:1;13189:5;:14;;;:18;13181:69;;;;-1:-1:-1;;;13181:69:0;;;;;;;:::i;:::-;13277:1;13268:6;:10;13260:35;;;;-1:-1:-1;;;13260:35:0;;20753:2:2;13260:35:0;;;20735:21:2;20792:2;20772:18;;;20765:30;-1:-1:-1;;;20811:18:2;;;20804:42;20863:18;;13260:35:0;20551:336:2;13260:35:0;13306:20;13329:55;13342:35;13355:13;13370:6;13342:12;:35::i;:::-;94:4:1;13329:12:0;:55::i;:::-;13434:13;;13306:78;;-1:-1:-1;13428:19:0;;:2;:19;:::i;:::-;13419:28;;:6;:28;:::i;:::-;13403:12;:44;;13395:102;;;;-1:-1:-1;;;13395:102:0;;;;;;;:::i;:::-;13540:4;:18;;13569:13;13508:89;;-1:-1:-1;;;;;13540:18:0;;;;13560:7;;13569:13;13584:12;13508:31;:89::i;:::-;13639:13;;13626:104;;-1:-1:-1;;;13626:104:0;;13608:15;;-1:-1:-1;;;;;13639:13:0;;13626:39;;:104;;13666:14;;13682:7;;13691:6;;13699:13;;13714:12;;13608:15;;13626:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13608:122;;13774:7;13758:14;-1:-1:-1;;;;;13746:83:0;;13783:7;13792:13;13807:6;13815:13;13746:83;;;;;;;;;:::i;:::-;;;;;;;;13847:7;12800:1061;-1:-1:-1;;;;;;;12800:1061:0:o;14327:1240::-;14467:9;;14440:7;;-1:-1:-1;;;;;14467:9:0;:23;14463:86;;14507:9;;14492:57;;-1:-1:-1;;;14492:57:0;;-1:-1:-1;;;;;17852:15:2;;;14492:57:0;;;17834:34:2;17904:15;;;17884:18;;;17877:43;14507:9:0;;;;14492:32;;17769:18:2;;14492:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14463:86;14584:1;14568:13;:17;14560:54;;;;-1:-1:-1;;;14560:54:0;;20400:2:2;14560:54:0;;;20382:21:2;20439:2;20419:18;;;20412:30;-1:-1:-1;;;20458:18:2;;;20451:54;20522:18;;14560:54:0;20198:348:2;14560:54:0;14661:13;;14646:54;;-1:-1:-1;;;14646:54:0;;-1:-1:-1;;;;;11472:32:2;;;14646:54:0;;;11454:51:2;14625:18:0;;14661:13;;14646:38;;11427:18:2;;14646:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14646:54:0;;;;;;;;;;;;:::i;:::-;14625:75;;14735:1;14718:5;:14;;;:18;14710:69;;;;-1:-1:-1;;;14710:69:0;;;;;;;:::i;:::-;14806:1;14797:6;:10;14789:35;;;;-1:-1:-1;;;14789:35:0;;20753:2:2;14789:35:0;;;20735:21:2;20792:2;20772:18;;;20765:30;-1:-1:-1;;;20811:18:2;;;20804:42;20863:18;;14789:35:0;20551:336:2;14789:35:0;14835:20;14858:55;14871:35;14884:13;14899:6;14871:12;:35::i;14858:55::-;14962:13;;14835:78;;-1:-1:-1;14956:19:0;;:2;:19;:::i;:::-;14947:28;;:6;:28;:::i;:::-;14931:12;:44;;14923:102;;;;-1:-1:-1;;;14923:102:0;;;;;;;:::i;:::-;15058:3;:17;-1:-1:-1;;;;;15058:17:0;;;15040:35;;;;15036:267;;15130:13;;15099:60;;-1:-1:-1;;;;;15130:13:0;15145;15099:30;:60::i;:::-;15036:267;;;15263:13;;15206:86;;15238:14;;15254:7;;-1:-1:-1;;;;;15263:13:0;15278;15206:31;:86::i;:::-;15344:13;;;15331:104;;-1:-1:-1;;;15331:104:0;;15313:15;;-1:-1:-1;;;;;15344:13:0;;;;15331:39;;:104;;15371:14;;15387:7;;15396:6;;15404:13;;15419:12;;15331:104;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15313:122;;15479:7;15463:14;-1:-1:-1;;;;;15451:84:0;;15488:7;15497:14;15513:6;15521:13;15451:84;;;;;;;;;:::i;4038:459::-;4096:7;4337:1;4342;4337:6;4333:45;;-1:-1:-1;4366:1:0;4359:8;;4333:45;4388:9;4400:5;4404:1;4400;:5;:::i;:::-;4388:17;-1:-1:-1;4432:1:0;4423:5;4427:1;4388:17;4423:5;:::i;:::-;:10;4415:56;;;;-1:-1:-1;;;4415:56:0;;25089:2:2;4415:56:0;;;25071:21:2;25128:2;25108:18;;;25101:30;25167:34;25147:18;;;25140:62;-1:-1:-1;;;25218:18:2;;;25211:31;25259:19;;4415:56:0;24887:397:2;4503:130:0;4561:7;4587:39;4591:1;4594;4587:39;;;;;;;;;;;;;;;;;:3;:39::i;6300:398::-;6523:51;;;-1:-1:-1;;;;;25547:15:2;;;6523:51:0;;;25529:34:2;25599:15;;;25579:18;;;25572:43;25631:18;;;;25624:34;;;6523:51:0;;;;;;;;;;25464:18:2;;;;6523:51:0;;;;;;;-1:-1:-1;;;;;6523:51:0;-1:-1:-1;;;6523:51:0;;;6512:63;;-1:-1:-1;;;;6512:10:0;;;;:63;;6523:51;6512:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6476:99;;;;6593:7;:57;;;;-1:-1:-1;6605:11:0;;:16;;:44;;;6636:4;6625:24;;;;;;;;;;;;:::i;:::-;6585:106;;;;-1:-1:-1;;;6585:106:0;;26163:2:2;6585:106:0;;;26145:21:2;26202:2;26182:18;;;26175:30;26241:34;26221:18;;;26214:62;-1:-1:-1;;;26292:18:2;;;26285:34;26336:19;;6585:106:0;25961:400:2;6585:106:0;6388:310;;6300:398;;;;:::o;6704:194::-;6813:12;;;6773;6813;;;;;;;;;-1:-1:-1;;;;;6790:7:0;;;6806:5;;6790:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6772:54;;;6844:7;6836:55;;;;-1:-1:-1;;;6836:55:0;;26568:2:2;6836:55:0;;;26550:21:2;26607:2;26587:18;;;26580:30;26646:34;26626:18;;;26619:62;-1:-1:-1;;;26697:18:2;;;26690:33;26740:19;;6836:55:0;26366:399:2;6836:55:0;6762:136;6704:194;;:::o;4639:272::-;4725:7;4759:12;4752:5;4744:28;;;;-1:-1:-1;;;4744:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4782:9:0;4794:5;4798:1;4794;:5;:::i;14:131:2:-;-1:-1:-1;;;;;89:31:2;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:315::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:2:o;470:780::-;683:2;735:21;;;805:13;;708:18;;;827:22;;;654:4;;683:2;868;;886:18;;;;927:15;;;654:4;970:254;984:6;981:1;978:13;970:254;;;1043:13;;1081:9;;1069:22;;1131:11;;1125:18;1111:12;;;1104:40;1164:12;;;;1199:15;;;;1006:1;999:9;970:254;;;-1:-1:-1;1241:3:2;;470:780;-1:-1:-1;;;;;;;470:780:2:o;1255:247::-;1314:6;1367:2;1355:9;1346:7;1342:23;1338:32;1335:52;;;1383:1;1380;1373:12;1335:52;1422:9;1409:23;1441:31;1466:5;1441:31;:::i;1689:456::-;1766:6;1774;1782;1835:2;1823:9;1814:7;1810:23;1806:32;1803:52;;;1851:1;1848;1841:12;1803:52;1890:9;1877:23;1909:31;1934:5;1909:31;:::i;:::-;1959:5;-1:-1:-1;2011:2:2;1996:18;;1983:32;;-1:-1:-1;2067:2:2;2052:18;;2039:32;2080:33;2039:32;2080:33;:::i;:::-;2132:7;2122:17;;;1689:456;;;;;:::o;2342:632::-;2513:2;2565:21;;;2635:13;;2538:18;;;2657:22;;;2484:4;;2513:2;2736:15;;;;2710:2;2695:18;;;2484:4;2779:169;2793:6;2790:1;2787:13;2779:169;;;2854:13;;2842:26;;2923:15;;;;2888:12;;;;2815:1;2808:9;2779:169;;;-1:-1:-1;2965:3:2;;2342:632;-1:-1:-1;;;;;;2342:632:2:o;2979:383::-;3056:6;3064;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3180:9;3167:23;3199:31;3224:5;3199:31;:::i;:::-;3249:5;3301:2;3286:18;;3273:32;;-1:-1:-1;3352:2:2;3337:18;;;3324:32;;2979:383;-1:-1:-1;;;2979:383:2:o;3367:248::-;3435:6;3443;3496:2;3484:9;3475:7;3471:23;3467:32;3464:52;;;3512:1;3509;3502:12;3464:52;-1:-1:-1;;3535:23:2;;;3605:2;3590:18;;;3577:32;;-1:-1:-1;3367:248:2:o;3620:658::-;3791:2;3843:21;;;3913:13;;3816:18;;;3935:22;;;3762:4;;3791:2;4014:15;;;;3988:2;3973:18;;;3762:4;4057:195;4071:6;4068:1;4065:13;4057:195;;;4136:13;;-1:-1:-1;;;;;4132:39:2;4120:52;;4227:15;;;;4192:12;;;;4168:1;4086:9;4057:195;;5039:250;5124:1;5134:113;5148:6;5145:1;5142:13;5134:113;;;5224:11;;;5218:18;5205:11;;;5198:39;5170:2;5163:10;5134:113;;;-1:-1:-1;;5281:1:2;5263:16;;5256:27;5039:250::o;5294:271::-;5336:3;5374:5;5368:12;5401:6;5396:3;5389:19;5417:76;5486:6;5479:4;5474:3;5470:14;5463:4;5456:5;5452:16;5417:76;:::i;:::-;5547:2;5526:15;-1:-1:-1;;5522:29:2;5513:39;;;;5554:4;5509:50;;5294:271;-1:-1:-1;;5294:271:2:o;5570:553::-;-1:-1:-1;;;;;5823:32:2;;5805:51;;5892:3;5887:2;5872:18;;5865:31;;;-1:-1:-1;;5919:46:2;;5945:19;;5937:6;5919:46;:::i;:::-;6013:9;6005:6;6001:22;5996:2;5985:9;5981:18;5974:50;6041:33;6067:6;6059;6041:33;:::i;:::-;6033:41;;;6110:6;6105:2;6094:9;6090:18;6083:34;5570:553;;;;;;;:::o;6128:388::-;6196:6;6204;6257:2;6245:9;6236:7;6232:23;6228:32;6225:52;;;6273:1;6270;6263:12;6225:52;6312:9;6299:23;6331:31;6356:5;6331:31;:::i;:::-;6381:5;-1:-1:-1;6438:2:2;6423:18;;6410:32;6451:33;6410:32;6451:33;:::i;:::-;6503:7;6493:17;;;6128:388;;;;;:::o;6521:180::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:52;;;6649:1;6646;6639:12;6601:52;-1:-1:-1;6672:23:2;;6521:180;-1:-1:-1;6521:180:2:o;6706:525::-;6792:6;6800;6808;6816;6869:3;6857:9;6848:7;6844:23;6840:33;6837:53;;;6886:1;6883;6876:12;6837:53;6925:9;6912:23;6944:31;6969:5;6944:31;:::i;:::-;6994:5;-1:-1:-1;7051:2:2;7036:18;;7023:32;7064:33;7023:32;7064:33;:::i;:::-;6706:525;;7116:7;;-1:-1:-1;;;;7170:2:2;7155:18;;7142:32;;7221:2;7206:18;7193:32;;6706:525::o;8178:274::-;-1:-1:-1;;;;;8370:32:2;;;;8352:51;;8434:2;8419:18;;8412:34;8340:2;8325:18;;8178:274::o;8457:127::-;8518:10;8513:3;8509:20;8506:1;8499:31;8549:4;8546:1;8539:15;8573:4;8570:1;8563:15;8589:253;8661:2;8655:9;8703:4;8691:17;;8738:18;8723:34;;8759:22;;;8720:62;8717:88;;;8785:18;;:::i;:::-;8821:2;8814:22;8589:253;:::o;8847:252::-;8919:2;8913:9;8961:3;8949:16;;8995:18;8980:34;;9016:22;;;8977:62;8974:88;;;9042:18;;:::i;9104:252::-;9176:2;9170:9;9218:3;9206:16;;9252:18;9237:34;;9273:22;;;9234:62;9231:88;;;9299:18;;:::i;9361:275::-;9432:2;9426:9;9497:2;9478:13;;-1:-1:-1;;9474:27:2;9462:40;;9532:18;9517:34;;9553:22;;;9514:62;9511:88;;;9579:18;;:::i;:::-;9615:2;9608:22;9361:275;;-1:-1:-1;9361:275:2:o;9641:183::-;9701:4;9734:18;9726:6;9723:30;9720:56;;;9756:18;;:::i;:::-;-1:-1:-1;9801:1:2;9797:14;9813:4;9793:25;;9641:183::o;9829:881::-;9924:6;9955:2;9998;9986:9;9977:7;9973:23;9969:32;9966:52;;;10014:1;10011;10004:12;9966:52;10047:9;10041:16;10080:18;10072:6;10069:30;10066:50;;;10112:1;10109;10102:12;10066:50;10135:22;;10188:4;10180:13;;10176:27;-1:-1:-1;10166:55:2;;10217:1;10214;10207:12;10166:55;10246:2;10240:9;10269:60;10285:43;10325:2;10285:43;:::i;:::-;10269:60;:::i;:::-;10363:15;;;10445:1;10441:10;;;;10433:19;;10429:28;;;10394:12;;;;10469:19;;;10466:39;;;10501:1;10498;10491:12;10466:39;10525:11;;;;10545:135;10561:6;10556:3;10553:15;10545:135;;;10627:10;;10615:23;;10578:12;;;;10658;;;;10545:135;;;10699:5;9829:881;-1:-1:-1;;;;;;;9829:881:2:o;10715:127::-;10776:10;10771:3;10767:20;10764:1;10757:31;10807:4;10804:1;10797:15;10831:4;10828:1;10821:15;10847:184;10917:6;10970:2;10958:9;10949:7;10945:23;10941:32;10938:52;;;10986:1;10983;10976:12;10938:52;-1:-1:-1;11009:16:2;;10847:184;-1:-1:-1;10847:184:2:o;11036:127::-;11097:10;11092:3;11088:20;11085:1;11078:31;11128:4;11125:1;11118:15;11152:4;11149:1;11142:15;11168:135;11207:3;11228:17;;;11225:43;;11248:18;;:::i;:::-;-1:-1:-1;11295:1:2;11284:13;;11168:135::o;11516:356::-;11718:2;11700:21;;;11737:18;;;11730:30;11796:34;11791:2;11776:18;;11769:62;11863:2;11848:18;;11516:356::o;11877:138::-;11956:13;;11978:31;11956:13;11978:31;:::i;:::-;11877:138;;;:::o;12020:510::-;12074:5;12127:3;12120:4;12112:6;12108:17;12104:27;12094:55;;12145:1;12142;12135:12;12094:55;12174:6;12168:13;12200:18;12196:2;12193:26;12190:52;;;12222:18;;:::i;:::-;12266:55;12309:2;12290:13;;-1:-1:-1;;12286:27:2;12315:4;12282:38;12266:55;:::i;:::-;12346:2;12337:7;12330:19;12392:3;12385:4;12380:2;12372:6;12368:15;12364:26;12361:35;12358:55;;;12409:1;12406;12399:12;12358:55;12422:77;12496:2;12489:4;12480:7;12476:18;12469:4;12461:6;12457:17;12422:77;:::i;12535:967::-;12628:6;12681:2;12669:9;12660:7;12656:23;12652:32;12649:52;;;12697:1;12694;12687:12;12649:52;12730:9;12724:16;12759:18;12800:2;12792:6;12789:14;12786:34;;;12816:1;12813;12806:12;12786:34;12839:22;;;;12895:4;12877:16;;;12873:27;12870:47;;;12913:1;12910;12903:12;12870:47;12939:22;;:::i;:::-;12991:2;12985:9;13003:33;13028:7;13003:33;:::i;:::-;13045:22;;13106:2;13098:11;;13092:18;13122:16;;;13119:36;;;13151:1;13148;13141:12;13119:36;13187:56;13235:7;13224:8;13220:2;13216:17;13187:56;:::i;:::-;13182:2;13175:5;13171:14;13164:80;;13283:2;13279;13275:11;13269:18;13312:2;13302:8;13299:16;13296:36;;;13328:1;13325;13318:12;13296:36;13364:56;13412:7;13401:8;13397:2;13393:17;13364:56;:::i;:::-;13359:2;13352:5;13348:14;13341:80;;13467:2;13463;13459:11;13453:18;13448:2;13441:5;13437:14;13430:42;13491:5;13481:15;;;;;12535:967;;;;:::o;13507:402::-;13709:2;13691:21;;;13748:2;13728:18;;;13721:30;13787:34;13782:2;13767:18;;13760:62;-1:-1:-1;;;13853:2:2;13838:18;;13831:36;13899:3;13884:19;;13507:402::o;14294:277::-;14361:6;14414:2;14402:9;14393:7;14389:23;14385:32;14382:52;;;14430:1;14427;14420:12;14382:52;14462:9;14456:16;14515:5;14508:13;14501:21;14494:5;14491:32;14481:60;;14537:1;14534;14527:12;15532:956;15627:6;15658:2;15701;15689:9;15680:7;15676:23;15672:32;15669:52;;;15717:1;15714;15707:12;15669:52;15750:9;15744:16;15783:18;15775:6;15772:30;15769:50;;;15815:1;15812;15805:12;15769:50;15838:22;;15891:4;15883:13;;15879:27;-1:-1:-1;15869:55:2;;15920:1;15917;15910:12;15869:55;15949:2;15943:9;15972:60;15988:43;16028:2;15988:43;:::i;15972:60::-;16066:15;;;16148:1;16144:10;;;;16136:19;;16132:28;;;16097:12;;;;16172:19;;;16169:39;;;16204:1;16201;16194:12;16169:39;16228:11;;;;16248:210;16264:6;16259:3;16256:15;16248:210;;;16337:3;16331:10;16354:31;16379:5;16354:31;:::i;:::-;16398:18;;16281:12;;;;16436;;;;16248:210;;16843:774;16935:6;16988:3;16976:9;16967:7;16963:23;16959:33;16956:53;;;17005:1;17002;16995:12;16956:53;17031:22;;:::i;:::-;17082:9;17076:16;17069:5;17062:31;17146:2;17135:9;17131:18;17125:25;17120:2;17113:5;17109:14;17102:49;17204:2;17193:9;17189:18;17183:25;17178:2;17171:5;17167:14;17160:49;17262:2;17251:9;17247:18;17241:25;17236:2;17229:5;17225:14;17218:49;17321:3;17310:9;17306:19;17300:26;17294:3;17287:5;17283:15;17276:51;17381:3;17370:9;17366:19;17360:26;17354:3;17347:5;17343:15;17336:51;17441:3;17430:9;17426:19;17420:26;17414:3;17407:5;17403:15;17396:51;17501:3;17490:9;17486:19;17480:26;17474:3;17467:5;17463:15;17456:51;17526:3;17582:2;17571:9;17567:18;17561:25;17556:2;17549:5;17545:14;17538:49;;17606:5;17596:15;;;16843:774;;;;:::o;18383:154::-;18469:13;;18511:1;18501:12;;18491:40;;18527:1;18524;18517:12;18542:156;18630:13;;18672:1;18662:12;;18652:40;;18688:1;18685;18678:12;18703:1102;18795:6;18848:3;18836:9;18827:7;18823:23;18819:33;18816:53;;;18865:1;18862;18855:12;18816:53;18891:22;;:::i;:::-;18942:9;18936:16;18929:5;18922:31;19006:2;18995:9;18991:18;18985:25;18980:2;18973:5;18969:14;18962:49;19064:2;19053:9;19049:18;19043:25;19038:2;19031:5;19027:14;19020:49;19122:2;19111:9;19107:18;19101:25;19096:2;19089:5;19085:14;19078:49;19181:3;19170:9;19166:19;19160:26;19154:3;19147:5;19143:15;19136:51;19241:3;19230:9;19226:19;19220:26;19214:3;19207:5;19203:15;19196:51;19301:3;19290:9;19286:19;19280:26;19274:3;19267:5;19263:15;19256:51;19361:3;19350:9;19346:19;19340:26;19334:3;19327:5;19323:15;19316:51;19386:3;19442:2;19431:9;19427:18;19421:25;19416:2;19409:5;19405:14;19398:49;;19466:3;19501:56;19553:2;19542:9;19538:18;19501:56;:::i;:::-;19485:14;;;19478:80;19577:3;19612:58;19651:18;;;19612:58;:::i;:::-;19596:14;;;19589:82;19690:3;19725:49;19755:18;;;19725:49;:::i;:::-;19709:14;;;19702:73;19713:5;18703:1102;-1:-1:-1;;;18703:1102:2:o;19810:127::-;19871:10;19866:3;19862:20;19859:1;19852:31;19902:4;19899:1;19892:15;19926:4;19923:1;19916:15;19942:251;20012:6;20065:2;20053:9;20044:7;20040:23;20036:32;20033:52;;;20081:1;20078;20071:12;20033:52;20113:9;20107:16;20132:31;20157:5;20132:31;:::i;20892:422::-;20981:1;21024:5;20981:1;21038:270;21059:7;21049:8;21046:21;21038:270;;;21118:4;21114:1;21110:6;21106:17;21100:4;21097:27;21094:53;;;21127:18;;:::i;:::-;21177:7;21167:8;21163:22;21160:55;;;21197:16;;;;21160:55;21276:22;;;;21236:15;;;;21038:270;;;21042:3;20892:422;;;;;:::o;21319:806::-;21368:5;21398:8;21388:80;;-1:-1:-1;21439:1:2;21453:5;;21388:80;21487:4;21477:76;;-1:-1:-1;21524:1:2;21538:5;;21477:76;21569:4;21587:1;21582:59;;;;21655:1;21650:130;;;;21562:218;;21582:59;21612:1;21603:10;;21626:5;;;21650:130;21687:3;21677:8;21674:17;21671:43;;;21694:18;;:::i;:::-;-1:-1:-1;;21750:1:2;21736:16;;21765:5;;21562:218;;21864:2;21854:8;21851:16;21845:3;21839:4;21836:13;21832:36;21826:2;21816:8;21813:16;21808:2;21802:4;21799:12;21795:35;21792:77;21789:159;;;-1:-1:-1;21901:19:2;;;21933:5;;21789:159;21980:34;22005:8;21999:4;21980:34;:::i;:::-;22050:6;22046:1;22042:6;22038:19;22029:7;22026:32;22023:58;;;22061:18;;:::i;:::-;22099:20;;21319:806;-1:-1:-1;;;21319:806:2:o;22130:131::-;22190:5;22219:36;22246:8;22240:4;22219:36;:::i;22266:168::-;22339:9;;;22370;;22387:15;;;22381:22;;22367:37;22357:71;;22408:18;;:::i;22439:409::-;22641:2;22623:21;;;22680:2;22660:18;;;22653:30;22719:34;22714:2;22699:18;;22692:62;-1:-1:-1;;;22785:2:2;22770:18;;22763:43;22838:3;22823:19;;22439:409::o;22853:608::-;-1:-1:-1;;;;;23202:15:2;;;23184:34;;23254:15;;;;23249:2;23234:18;;23227:43;23301:2;23286:18;;23279:34;;;;23344:2;23329:18;;23322:34;23387:3;23372:19;;23365:35;23449:4;23437:17;;;23164:3;23416:19;;23409:46;23133:3;23118:19;;22853:608::o;23466:581::-;-1:-1:-1;;;;;23726:32:2;;23708:51;;23695:3;23680:19;;23789:1;23778:13;;23768:144;;23834:10;23829:3;23825:20;23822:1;23815:31;23869:4;23866:1;23859:15;23897:4;23894:1;23887:15;23768:144;23948:6;23943:2;23932:9;23928:18;23921:34;23991:6;23986:2;23975:9;23971:18;23964:34;24034:6;24029:2;24018:9;24014:18;24007:34;23466:581;;;;;;;:::o;24665:217::-;24705:1;24731;24721:132;;24775:10;24770:3;24766:20;24763:1;24756:31;24810:4;24807:1;24800:15;24838:4;24835:1;24828:15;24721:132;-1:-1:-1;24867:9:2;;24665:217::o;25669:287::-;25798:3;25836:6;25830:13;25852:66;25911:6;25906:3;25899:4;25891:6;25887:17;25852:66;:::i;:::-;25934:16;;;;;25669:287;-1:-1:-1;;25669:287:2:o;26770:220::-;26919:2;26908:9;26901:21;26882:4;26939:45;26980:2;26969:9;26965:18;26957:6;26939:45;:::i
Swarm Source
ipfs://46a912d34f63a36f8db25e86d36c32d96d3d096ee16e53424ae187fec646b01e
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity), FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Notice
The migration from MATIC to POL is now live. To find out more, please visit Polygon Official Announcement .
Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.