Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 26,490 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Active Game | 8705111 | 1943 days ago | IN | 0 ETH | 0.00039075 | ||||
Redeem | 8696115 | 1945 days ago | IN | 0 ETH | 0.00059094 | ||||
Withdraw Profit | 8696070 | 1945 days ago | IN | 0 ETH | 0.00033976 | ||||
Withdraw Profit | 8696066 | 1945 days ago | IN | 0 ETH | 0.00033976 | ||||
Withdraw Profit | 8696064 | 1945 days ago | IN | 0 ETH | 0.00023738 | ||||
Invest In | 8696061 | 1945 days ago | IN | 1 ETH | 0.00157653 | ||||
Invest In | 8696055 | 1945 days ago | IN | 1 ETH | 0.00157653 | ||||
Invest In | 8696052 | 1945 days ago | IN | 1 ETH | 0.00157653 | ||||
Invest In | 8696049 | 1945 days ago | IN | 1 ETH | 0.00157653 | ||||
Redeem | 8696046 | 1945 days ago | IN | 0 ETH | 0.00057879 | ||||
Invest In | 8696045 | 1945 days ago | IN | 1 ETH | 0.00173497 | ||||
Redeem | 8696042 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Redeem | 8696038 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Invest In | 8696038 | 1945 days ago | IN | 1 ETH | 0.0046929 | ||||
Redeem | 8696037 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Invest In | 8696037 | 1945 days ago | IN | 1 ETH | 0.0046929 | ||||
Redeem | 8696036 | 1945 days ago | IN | 0 ETH | 0.00038331 | ||||
Invest In | 8696035 | 1945 days ago | IN | 1 ETH | 0.0046929 | ||||
Redeem | 8696032 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Redeem | 8696031 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Invest In | 8696031 | 1945 days ago | IN | 1 ETH | 0.0046929 | ||||
Redeem | 8696027 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Redeem | 8696025 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Redeem | 8696022 | 1945 days ago | IN | 0 ETH | 0.00057925 | ||||
Invest In | 8696019 | 1945 days ago | IN | 1 ETH | 0.00234645 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
8696115 | 1945 days ago | 8.26824 ETH | ||||
8696070 | 1945 days ago | 0.000015 ETH | ||||
8696070 | 1945 days ago | 0.000735 ETH | ||||
8696066 | 1945 days ago | 0.0001 ETH | ||||
8696066 | 1945 days ago | 0.0049 ETH | ||||
8696064 | 1945 days ago | 0.000115 ETH | ||||
8696064 | 1945 days ago | 0.005635 ETH | ||||
8696061 | 1945 days ago | 0.005 ETH | ||||
8696061 | 1945 days ago | 0.04 ETH | ||||
8696055 | 1945 days ago | 0.005 ETH | ||||
8696055 | 1945 days ago | 0.04 ETH | ||||
8696052 | 1945 days ago | 0.005 ETH | ||||
8696052 | 1945 days ago | 0.04 ETH | ||||
8696049 | 1945 days ago | 0.005 ETH | ||||
8696049 | 1945 days ago | 0.04 ETH | ||||
8696046 | 1945 days ago | 4 ETH | ||||
8696045 | 1945 days ago | 0.005 ETH | ||||
8696045 | 1945 days ago | 0.04 ETH | ||||
8696042 | 1945 days ago | 15 ETH | ||||
8696038 | 1945 days ago | 15 ETH | ||||
8696038 | 1945 days ago | 0.005 ETH | ||||
8696038 | 1945 days ago | 0.04 ETH | ||||
8696037 | 1945 days ago | 15 ETH | ||||
8696037 | 1945 days ago | 0.005 ETH | ||||
8696037 | 1945 days ago | 0.04 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ETHMagic
Compiler Version
v0.5.0+commit.1d4f565a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-09-29 */ pragma solidity ^0.5.0; contract UtilETHMagic { uint ethWei = 1 ether; function getLevel(uint value) internal view returns(uint) { if (value >= 1*ethWei && value <= 5*ethWei) { return 1; } if (value >= 6*ethWei && value <= 10*ethWei) { return 2; } if (value >= 11*ethWei && value <= 15*ethWei) { return 3; } return 0; } function getLineLevel(uint value) internal view returns(uint) { if (value >= 1*ethWei && value <= 5*ethWei) { return 1; } if (value >= 6*ethWei && value <= 10*ethWei) { return 2; } if (value >= 11*ethWei) { return 3; } return 0; } function getScByLevel(uint level) internal pure returns(uint) { if (level == 1) { return 5; } if (level == 2) { return 7; } if (level == 3) { return 10; } return 0; } function getFireScByLevel(uint level) internal pure returns(uint) { if (level == 1) { return 3; } if (level == 2) { return 6; } if (level == 3) { return 10; } return 0; } function getRecommendScaleByLevelAndTim(uint level,uint times) internal pure returns(uint){ if (level == 1 && times == 1) { return 50; } if (level == 2 && times == 1) { return 70; } if (level == 2 && times == 2) { return 50; } if (level == 3) { if(times == 1){ return 100; } if (times == 2) { return 70; } if (times == 3) { return 50; } if (times >= 4 && times <= 10) { return 10; } if (times >= 11 && times <= 20) { return 5; } if (times >= 21) { return 1; } } return 0; } function compareStr(string memory _str, string memory str) internal pure returns(bool) { if (keccak256(abi.encodePacked(_str)) == keccak256(abi.encodePacked(str))) { return true; } return false; } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole is Context, Ownable { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(_msgSender()); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(_msgSender()) || isOwner(), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function removeWhitelistAdmin(address account) public onlyOwner { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(_msgSender()); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } contract ETHMagic is UtilETHMagic, WhitelistAdminRole { using SafeMath for *; string constant private name = "eth magic foundation"; uint ethWei = 1 ether; address payable private devAddr = address(0xCdC8a5090D01b750E396c306528D16d1423c05bC); address payable private savingAddr = address(0xf494EDE0FFf005286fB4CD3028ea988891F74ff4); address payable private follow = address(0xE89FF0053Cabd88e9faB814d75e2a971f28aAFd7); struct User{ uint id; address userAddress; string inviteCode; string referrer; uint staticLevel; uint dynamicLevel; uint allInvest; uint freezeAmount; uint unlockAmount; uint allStaticAmount; uint allDynamicAmount; uint hisStaticAmount; uint hisDynamicAmount; uint inviteAmount; uint reInvestCount; uint lastReInvestTime; Invest[] invests; uint staticFlag; } struct GameInfo { uint luckPort; address[] specialUsers; } struct UserGlobal { uint id; address userAddress; string inviteCode; string referrer; } struct Invest{ address userAddress; uint investAmount; uint investTime; uint times; } uint coefficient = 10; uint startTime; uint investCount = 0; mapping(uint => uint) rInvestCount; uint investMoney = 0; mapping(uint => uint) rInvestMoney; mapping(uint => GameInfo) rInfo; uint uid = 0; uint rid = 1; uint period = 3 days; mapping (uint => mapping(address => User)) userRoundMapping; mapping(address => UserGlobal) userMapping; mapping (string => address) addressMapping; mapping (uint => address) public indexMapping; /** * @dev Just a simply check to prevent contract * @dev this by calling method in constructor. */ modifier isHuman() { address addr = msg.sender; uint codeLength; assembly {codeLength := extcodesize(addr)} require(codeLength == 0, "sorry humans only"); require(tx.origin == msg.sender, "sorry, human only"); _; } event LogInvestIn(address indexed who, uint indexed uid, uint amount, uint time, string inviteCode, string referrer, uint typeFlag); event LogWithdrawProfit(address indexed who, uint indexed uid, uint amount, uint time); event LogRedeem(address indexed who, uint indexed uid, uint amount, uint now); //============================================================================== // Constructor //============================================================================== constructor () public { } function () external payable { } function activeGame(uint time) external onlyWhitelistAdmin { require(time > now, "invalid game start time"); startTime = time; } function setCoefficient(uint coeff) external onlyWhitelistAdmin { require(coeff > 0, "invalid coeff"); coefficient = coeff; } function gameStart() private view returns(bool) { return startTime != 0 && now > startTime; } function investIn(string memory inviteCode, string memory referrer) public isHuman() payable { require(gameStart(), "game not start"); require(msg.value >= 1*ethWei && msg.value <= 15*ethWei, "between 1 and 15"); require(msg.value == msg.value.div(ethWei).mul(ethWei), "invalid msg value"); UserGlobal storage userGlobal = userMapping[msg.sender]; if (userGlobal.id == 0) { require(!compareStr(inviteCode, ""), "empty invite code"); address referrerAddr = getUserAddressByCode(referrer); require(uint(referrerAddr) != 0, "referer not exist"); require(referrerAddr != msg.sender, "referrer can't be self"); require(!isUsed(inviteCode), "invite code is used"); registerUser(msg.sender, inviteCode, referrer); } User storage user = userRoundMapping[rid][msg.sender]; if (uint(user.userAddress) != 0) { require(user.freezeAmount.add(msg.value) <= 15*ethWei, "can not beyond 15 eth"); user.allInvest = user.allInvest.add(msg.value); user.freezeAmount = user.freezeAmount.add(msg.value); user.staticLevel = getLevel(user.freezeAmount); user.dynamicLevel = getLineLevel(user.freezeAmount.add(user.unlockAmount)); } else { user.id = userGlobal.id; user.userAddress = msg.sender; user.freezeAmount = msg.value; user.staticLevel = getLevel(msg.value); user.allInvest = msg.value; user.dynamicLevel = getLineLevel(msg.value); user.inviteCode = userGlobal.inviteCode; user.referrer = userGlobal.referrer; if (!compareStr(userGlobal.referrer, "")) { address referrerAddr = getUserAddressByCode(userGlobal.referrer); userRoundMapping[rid][referrerAddr].inviteAmount++; } } Invest memory invest = Invest(msg.sender, msg.value, now, 0); user.invests.push(invest); if (rInvestMoney[rid] != 0 && (rInvestMoney[rid].div(10000).div(ethWei) != rInvestMoney[rid].add(msg.value).div(10000).div(ethWei))) { bool isEnough; uint sendMoney; (isEnough, sendMoney) = isEnoughBalance(rInfo[rid].luckPort); if (sendMoney > 0) { sendMoneyToUser(msg.sender, sendMoney); } rInfo[rid].luckPort = 0; if (!isEnough) { endRound(); return; } } investCount = investCount.add(1); investMoney = investMoney.add(msg.value); rInvestCount[rid] = rInvestCount[rid].add(1); rInvestMoney[rid] = rInvestMoney[rid].add(msg.value); rInfo[rid].luckPort = rInfo[rid].luckPort.add(msg.value.mul(2).div(1000)); sendFeetoAdmin(msg.value); emit LogInvestIn(msg.sender, userGlobal.id, msg.value, now, userGlobal.inviteCode, userGlobal.referrer, 0); } function reInvestIn() public { require(gameStart(), "game not start"); User storage user = userRoundMapping[rid][msg.sender]; require(user.id > 0, "user haven't invest in round before"); calStaticProfitInner(msg.sender); uint reInvestAmount = user.unlockAmount; if (user.freezeAmount > 15*ethWei) { user.freezeAmount = 15*ethWei; } if (user.freezeAmount.add(reInvestAmount) > 15*ethWei) { reInvestAmount = (15*ethWei).sub(user.freezeAmount); } if (reInvestAmount == 0) { return; } uint leastAmount = reInvestAmount.mul(47).div(1000); bool isEnough; uint sendMoney; (isEnough, sendMoney) = isEnoughBalance(leastAmount); if (!isEnough) { if (sendMoney > 0) { sendMoneyToUser(msg.sender, sendMoney); } endRound(); return; } user.unlockAmount = user.unlockAmount.sub(reInvestAmount); user.allInvest = user.allInvest.add(reInvestAmount); user.freezeAmount = user.freezeAmount.add(reInvestAmount); user.staticLevel = getLevel(user.freezeAmount); user.dynamicLevel = getLineLevel(user.freezeAmount.add(user.unlockAmount)); if ((now - user.lastReInvestTime) > 5 days) { user.reInvestCount = user.reInvestCount.add(1); user.lastReInvestTime = now; } if (user.reInvestCount == 12) { rInfo[rid].specialUsers.push(msg.sender); } Invest memory invest = Invest(msg.sender, reInvestAmount, now, 0); user.invests.push(invest); if (rInvestMoney[rid] != 0 && (rInvestMoney[rid].div(10000).div(ethWei) != rInvestMoney[rid].add(reInvestAmount).div(10000).div(ethWei))) { (isEnough, sendMoney) = isEnoughBalance(rInfo[rid].luckPort); if (sendMoney > 0) { sendMoneyToUser(msg.sender, sendMoney); } rInfo[rid].luckPort = 0; if (!isEnough) { endRound(); return; } } investCount = investCount.add(1); investMoney = investMoney.add(reInvestAmount); rInvestCount[rid] = rInvestCount[rid].add(1); rInvestMoney[rid] = rInvestMoney[rid].add(reInvestAmount); rInfo[rid].luckPort = rInfo[rid].luckPort.add(reInvestAmount.mul(2).div(1000)); sendFeetoAdmin(reInvestAmount); emit LogInvestIn(msg.sender, user.id, reInvestAmount, now, user.inviteCode, user.referrer, 1); } function withdrawProfit() public isHuman() { require(gameStart(), "game not start"); User storage user = userRoundMapping[rid][msg.sender]; uint sendMoney = user.allStaticAmount.add(user.allDynamicAmount); bool isEnough = false; uint resultMoney = 0; (isEnough, resultMoney) = isEnoughBalance(sendMoney); if (resultMoney > 0) { sendMoneyToUser(msg.sender, resultMoney.mul(98).div(100)); savingAddr.transfer(resultMoney.mul(2).div(100)); user.allStaticAmount = 0; user.allDynamicAmount = 0; emit LogWithdrawProfit(msg.sender, user.id, resultMoney, now); } if (!isEnough) { endRound(); } } function isEnoughBalance(uint sendMoney) private view returns (bool, uint){ if (sendMoney >= address(this).balance) { return (false, address(this).balance); } else { return (true, sendMoney); } } function sendMoneyToUser(address payable userAddress, uint money) private { userAddress.transfer(money); } function calStaticProfit(address userAddr) external onlyWhitelistAdmin returns(uint) { return calStaticProfitInner(userAddr); } function calStaticProfitInner(address userAddr) private returns(uint) { User storage user = userRoundMapping[rid][userAddr]; if (user.id == 0) { return 0; } uint scale = getScByLevel(user.staticLevel); uint allStatic = 0; for (uint i = user.staticFlag; i < user.invests.length; i++) { Invest storage invest = user.invests[i]; uint startDay = invest.investTime.sub(4 hours).div(1 days).mul(1 days); uint staticGaps = now.sub(4 hours).sub(startDay).div(1 days); uint unlockDay = now.sub(invest.investTime).div(1 days); if(staticGaps > 5){ staticGaps = 5; } if (staticGaps > invest.times) { allStatic += staticGaps.sub(invest.times).mul(scale).mul(invest.investAmount).div(1000); invest.times = staticGaps; } if (unlockDay >= 5) { user.staticFlag = user.staticFlag.add(1); user.freezeAmount = user.freezeAmount.sub(invest.investAmount); user.unlockAmount = user.unlockAmount.add(invest.investAmount); user.staticLevel = getLevel(user.freezeAmount); } } allStatic = allStatic.mul(coefficient).div(10); user.allStaticAmount = user.allStaticAmount.add(allStatic); user.hisStaticAmount = user.hisStaticAmount.add(allStatic); return user.allStaticAmount; } function calDynamicProfit(uint start, uint end) external onlyWhitelistAdmin { for (uint i = start; i <= end; i++) { address userAddr = indexMapping[i]; User memory user = userRoundMapping[rid][userAddr]; if (user.freezeAmount >= 1*ethWei) { uint scale = getScByLevel(user.staticLevel); calUserDynamicProfit(user.referrer, user.freezeAmount, scale); } calStaticProfitInner(userAddr); } } function registerUserInfo(address user, string calldata inviteCode, string calldata referrer) external onlyOwner { registerUser(user, inviteCode, referrer); } function calUserDynamicProfit(string memory referrer, uint money, uint shareSc) private { string memory tmpReferrer = referrer; for (uint i = 1; i <= 30; i++) { if (compareStr(tmpReferrer, "")) { break; } address tmpUserAddr = addressMapping[tmpReferrer]; User storage calUser = userRoundMapping[rid][tmpUserAddr]; uint fireSc = getFireScByLevel(calUser.dynamicLevel); uint recommendSc = getRecommendScaleByLevelAndTim(calUser.dynamicLevel, i); uint moneyResult = 0; if (money <= calUser.freezeAmount.add(calUser.unlockAmount)) { moneyResult = money; } else { moneyResult = calUser.freezeAmount.add(calUser.unlockAmount); } if (recommendSc != 0) { uint tmpDynamicAmount = moneyResult.mul(shareSc).mul(fireSc).mul(recommendSc); tmpDynamicAmount = tmpDynamicAmount.div(1000).div(10).div(100); tmpDynamicAmount = tmpDynamicAmount.mul(coefficient).div(10); calUser.allDynamicAmount = calUser.allDynamicAmount.add(tmpDynamicAmount); calUser.hisDynamicAmount = calUser.hisDynamicAmount.add(tmpDynamicAmount); } tmpReferrer = calUser.referrer; } } function redeem() public isHuman() { require(gameStart(), "game not start"); User storage user = userRoundMapping[rid][msg.sender]; require(user.id > 0, "user not exist"); calStaticProfitInner(msg.sender); uint sendMoney = user.unlockAmount; bool isEnough = false; uint resultMoney = 0; (isEnough, resultMoney) = isEnoughBalance(sendMoney); if (resultMoney > 0) { sendMoneyToUser(msg.sender, resultMoney); user.unlockAmount = 0; user.staticLevel = getLevel(user.freezeAmount); user.dynamicLevel = getLineLevel(user.freezeAmount); emit LogRedeem(msg.sender, user.id, resultMoney, now); } if (user.reInvestCount < 12) { user.reInvestCount = 0; } if (!isEnough) { endRound(); } } function endRound() private { rid++; startTime = now.add(period).div(1 days).mul(1 days); coefficient = 10; } function isUsed(string memory code) public view returns(bool) { address user = getUserAddressByCode(code); return uint(user) != 0; } function getUserAddressByCode(string memory code) public view returns(address) { return addressMapping[code]; } function sendFeetoAdmin(uint amount) private { devAddr.transfer(amount.mul(4).div(100)); follow.transfer(amount.mul(5).div(1000)); } function getGameInfo() public isHuman() view returns(uint, uint, uint, uint, uint, uint, uint, uint, uint, uint) { return ( rid, uid, startTime, investCount, investMoney, rInvestCount[rid], rInvestMoney[rid], coefficient, rInfo[rid].luckPort, rInfo[rid].specialUsers.length ); } function getUserInfo(address user, uint roundId, uint i) public isHuman() view returns( uint[17] memory ct, string memory inviteCode, string memory referrer ) { if(roundId == 0){ roundId = rid; } User memory userInfo = userRoundMapping[roundId][user]; ct[0] = userInfo.id; ct[1] = userInfo.staticLevel; ct[2] = userInfo.dynamicLevel; ct[3] = userInfo.allInvest; ct[4] = userInfo.freezeAmount; ct[5] = userInfo.unlockAmount; ct[6] = userInfo.allStaticAmount; ct[7] = userInfo.allDynamicAmount; ct[8] = userInfo.hisStaticAmount; ct[9] = userInfo.hisDynamicAmount; ct[10] = userInfo.inviteAmount; ct[11] = userInfo.reInvestCount; ct[12] = userInfo.staticFlag; ct[13] = userInfo.invests.length; if (ct[13] != 0) { ct[14] = userInfo.invests[i].investAmount; ct[15] = userInfo.invests[i].investTime; ct[16] = userInfo.invests[i].times; } else { ct[14] = 0; ct[15] = 0; ct[16] = 0; } inviteCode = userMapping[user].inviteCode; referrer = userMapping[user].referrer; return ( ct, inviteCode, referrer ); } function getSpecialUser(uint _rid, uint i) public view returns(address) { return rInfo[_rid].specialUsers[i]; } function getLatestUnlockAmount(address userAddr) public view returns(uint) { User memory user = userRoundMapping[rid][userAddr]; uint allUnlock = user.unlockAmount; for (uint i = user.staticFlag; i < user.invests.length; i++) { Invest memory invest = user.invests[i]; uint unlockDay = now.sub(invest.investTime).div(1 days); if (unlockDay >= 5) { allUnlock = allUnlock.add(invest.investAmount); } } return allUnlock; } function registerUser(address user, string memory inviteCode, string memory referrer) private { UserGlobal storage userGlobal = userMapping[user]; uid++; userGlobal.id = uid; userGlobal.userAddress = user; userGlobal.inviteCode = inviteCode; userGlobal.referrer = referrer; addressMapping[inviteCode] = user; indexMapping[uid] = user; } } /** * @title SafeMath * @dev Math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two numbers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "mul overflow"); return c; } /** * @dev Integer division of two numbers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "div zero"); // Solidity only automatically asserts when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "lower sub bigger"); uint256 c = a - b; return c; } /** * @dev Adds two numbers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "overflow"); return c; } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "mod zero"); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"coeff","type":"uint256"}],"name":"setCoefficient","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reInvestIn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"start","type":"uint256"},{"name":"end","type":"uint256"}],"name":"calDynamicProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getGameInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"}],"name":"investIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"code","type":"string"}],"name":"isUsed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_rid","type":"uint256"},{"name":"i","type":"uint256"}],"name":"getSpecialUser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"userAddr","type":"address"}],"name":"calStaticProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"code","type":"string"}],"name":"getUserAddressByCode","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"}],"name":"registerUserInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"indexMapping","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"time","type":"uint256"}],"name":"activeGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddr","type":"address"}],"name":"getLatestUnlockAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"roundId","type":"uint256"},{"name":"i","type":"uint256"}],"name":"getUserInfo","outputs":[{"name":"ct","type":"uint256[17]"},{"name":"inviteCode","type":"string"},{"name":"referrer","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"inviteCode","type":"string"},{"indexed":false,"name":"referrer","type":"string"},{"indexed":false,"name":"typeFlag","type":"uint256"}],"name":"LogInvestIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"LogWithdrawProfit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"uid","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"now","type":"uint256"}],"name":"LogRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
6080604052670de0b6b3a7640000600055670de0b6b3a764000060035573cdc8a5090d01b750e396c306528d16d1423c05bc600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f494ede0fff005286fb4cd3028ea988891f74ff4600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e89ff0053cabd88e9fab814d75e2a971f28aafd7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60075560006009556000600b556000600e556001600f556203f4806010553480156200014857600080fd5b506200016262000257640100000000026401000000009004565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620002516200023c62000257640100000000026401000000009004565b6200025f640100000000026401000000009004565b620004dc565b600033905090565b62000283816002620002c96401000000000262005c48179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b620002e48282620003b8640100000000026401000000009004565b1515156200035a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b615f8280620004ec6000396000f3fe60806040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063071fa4351461014057806311b23c231461017b57806314151f7f146101925780631746bd1b146101d7578063357cabe6146102415780634c5a628c14610393578063578d714b146103aa5780636897e9741461048a578063715018a6146104db5780637362d9c8146104f257806385702d59146105435780638da5cb5b146105c85780638f32d59b1461061f57806390d624791461064e578063959499b6146106b3578063a1451224146106ca578063aa5f5f29146107d2578063ae0a81d7146108cd578063bb5f747b14610948578063be040fb0146109b1578063d214d15a146109c8578063efcf33ae14610a03578063f2fde38b14610a68578063f4d508ec14610ab9575b005b34801561014c57600080fd5b506101796004803603602081101561016357600080fd5b8101908080359060200190929190505050610c32565b005b34801561018757600080fd5b50610190610d6d565b005b34801561019e57600080fd5b506101d5600480360360408110156101b557600080fd5b8101908080359060200190929190803590602001909291905050506115f5565b005b3480156101e357600080fd5b506101ec611aae565b604051808b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b6103916004803603604081101561025757600080fd5b810190808035906020019064010000000081111561027457600080fd5b82018360208201111561028657600080fd5b803590602001918460018302840111640100000000831117156102a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561030b57600080fd5b82018360208201111561031d57600080fd5b8035906020019184600183028401116401000000008311171561033f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c78565b005b34801561039f57600080fd5b506103a8612b07565b005b3480156103b657600080fd5b50610470600480360360208110156103cd57600080fd5b81019080803590602001906401000000008111156103ea57600080fd5b8201836020820111156103fc57600080fd5b8035906020019184600183028401116401000000008311171561041e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612b19565b604051808215151515815260200191505060405180910390f35b34801561049657600080fd5b506104d9600480360360208110156104ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b4a565b005b3480156104e757600080fd5b506104f0612c20565b005b3480156104fe57600080fd5b506105416004803603602081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d5d565b005b34801561054f57600080fd5b506105866004803603604081101561056657600080fd5b810190808035906020019092919080359060200190929190505050612e22565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d457600080fd5b506105dd612e7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062b57600080fd5b50610634612ea4565b604051808215151515815260200191505060405180910390f35b34801561065a57600080fd5b5061069d6004803603602081101561067157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f03565b6040518082815260200191505060405180910390f35b3480156106bf57600080fd5b506106c8612fce565b005b3480156106d657600080fd5b50610790600480360360208110156106ed57600080fd5b810190808035906020019064010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107de57600080fd5b506108cb600480360360608110156107f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561083257600080fd5b82018360208201111561084457600080fd5b8035906020019184600183028401116401000000008311171561086657600080fd5b90919293919293908035906020019064010000000081111561088757600080fd5b82018360208201111561089957600080fd5b803590602001918460018302840111640100000000831117156108bb57600080fd5b90919293919293905050506133e5565b005b3480156108d957600080fd5b50610906600480360360208110156108f057600080fd5b81019080803590602001909291905050506134fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095457600080fd5b506109976004803603602081101561096b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061352e565b604051808215151515815260200191505060405180910390f35b3480156109bd57600080fd5b506109c661354b565b005b3480156109d457600080fd5b50610a01600480360360208110156109eb57600080fd5b81019080803590602001909291905050506138c0565b005b348015610a0f57600080fd5b50610a5260048036036020811015610a2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139fa565b6040518082815260200191505060405180910390f35b348015610a7457600080fd5b50610ab760048036036020811015610a8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e17565b005b348015610ac557600080fd5b50610b1c60048036036060811015610adc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613e9f565b6040518084601160200280838360005b83811015610b47578082015181840152602081019050610b2c565b505050509050018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610b8e578082015181840152602081019050610b73565b50505050905090810190601f168015610bbb5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610bf4578082015181840152602081019050610bd9565b50505050905090810190601f168015610c215780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610c42610c3d6147cb565b61352e565b80610c515750610c50612ea4565b5b1515610ceb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b600081111515610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636f6566660000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b610d756147d3565b1515610de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154111515610ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f7573657220686176656e277420696e7665737420696e20726f756e642062656681526020017f6f7265000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610eea336147ed565b50600081600801549050600354600f0282600701541115610f1457600354600f0282600701819055505b600354600f02610f31828460070154614aef90919063ffffffff16565b1115610f5657610f538260070154600354600f02614b7990919063ffffffff16565b90505b6000811415610f665750506115f3565b6000610f906103e8610f82602f85614c0490919063ffffffff16565b614cab90919063ffffffff16565b9050600080610f9e83614d3e565b8092508193505050811515610fd3576000811115610fc157610fc03382614d91565b5b610fc9614ddc565b50505050506115f3565b610fea848660080154614b7990919063ffffffff16565b8560080181905550611009848660060154614aef90919063ffffffff16565b8560060181905550611028848660070154614aef90919063ffffffff16565b856007018190555061103d8560070154614e3d565b856004018190555061106861106386600801548760070154614aef90919063ffffffff16565b614ec0565b85600501819055506206978085600f0154420311156110ab57611099600186600e0154614aef90919063ffffffff16565b85600e01819055504285600f01819055505b600c85600e0154141561113557600d6000600f5481526020019081526020016000206001013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61113d615d25565b6080604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018681526020014281526020016000815250905085601001819080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301555050506000600c6000600f54815260200190815260200160002054141580156112c2575061128160035461127361271061126589600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b6112bf6003546112b1612710600c6000600f54815260200190815260200160002054614cab90919063ffffffff16565b614cab90919063ffffffff16565b14155b1561133d576112e8600d6000600f54815260200190815260200160002060000154614d3e565b80935081945050506000821115611304576113033383614d91565b5b6000600d6000600f5481526020019081526020016000206000018190555082151561133c57611331614ddc565b5050505050506115f3565b5b6113536001600954614aef90919063ffffffff16565b60098190555061136e85600b54614aef90919063ffffffff16565b600b8190555061139d6001600a6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600a6000600f548152602001908152602001600020819055506113de85600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600c6000600f548152602001908152602001600020819055506114496114226103e8611414600289614c0490919063ffffffff16565b614cab90919063ffffffff16565b600d6000600f54815260200190815260200160002060000154614aef90919063ffffffff16565b600d6000600f5481526020019081526020016000206000018190555061146e85614f32565b85600001543373ffffffffffffffffffffffffffffffffffffffff167f77ac911fb660af16b8e45baac4f95feafd39f1a27d16d34411a03ab1f6b0499d87428a6002018b60030160016040518086815260200185815260200180602001806020018481526020018381038352868181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156115565780601f1061152b57610100808354040283529160200191611556565b820191906000526020600020905b81548152906001019060200180831161153957829003601f168201915b50508381038252858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156115d95780601f106115ae576101008083540402835291602001916115d9565b820191906000526020600020905b8154815290600101906020018083116115bc57829003601f168201915b505097505050505050505060405180910390a35050505050505b565b6116056116006147cb565b61352e565b806116145750611613612ea4565b5b15156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b60008290505b8181111515611aa95760006014600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506116fd615d64565b60116000600f54815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f75780601f106118cc576101008083540402835291602001916118f7565b820191906000526020600020905b8154815290600101906020018083116118da57829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b82821015611a445783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815250508152602001906001019061199d565b50505050815260200160118201548152505090506003546001028160e00151101515611a90576000611a798260800151615054565b9050611a8e82606001518360e0015183615096565b505b611a99826147ed565b50505080806001019150506116b4565b505050565b60008060008060008060008060008060003390506000813b9050600081141515611b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515611be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b600f54600e54600854600954600b54600a6000600f54815260200190815260200160002054600c6000600f54815260200190815260200160002054600754600d6000600f54815260200190815260200160002060000154600d6000600f548152602001908152602001600020600101805490509b509b509b509b509b509b509b509b509b509b50505090919293949596979899565b60003390506000813b9050600081141515611cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b611da66147d3565b1515611e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b6003546001023410158015611e345750600354600f023411155b1515611ea8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6265747765656e203120616e642031350000000000000000000000000000000081525060200191505060405180910390fd5b611ed1600354611ec360035434614cab90919063ffffffff16565b614c0490919063ffffffff16565b34141515611f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f696e76616c6964206d73672076616c756500000000000000000000000000000081525060200191505060405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015414156121f157611fb18560206040519081016040528060008152506153cb565b151515612026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f656d70747920696e7669746520636f646500000000000000000000000000000081525060200191505060405180910390fd5b600061203185613350565b905060008173ffffffffffffffffffffffffffffffffffffffff16141515156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f72656665726572206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656665727265722063616e27742062652073656c660000000000000000000081525060200191505060405180910390fd5b61216f86612b19565b1515156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e7669746520636f646520697320757365640000000000000000000000000081525060200191505060405180910390fd5b6121ef3387876154cf565b505b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156123a157600354600f026122a8348360070154614aef90919063ffffffff16565b1115151561231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f63616e206e6f74206265796f6e6420313520657468000000000000000000000081525060200191505060405180910390fd5b612335348260060154614aef90919063ffffffff16565b8160060181905550612354348260070154614aef90919063ffffffff16565b81600701819055506123698160070154614e3d565b816004018190555061239461238f82600801548360070154614aef90919063ffffffff16565b614ec0565b8160050181905550612642565b81600001548160000181905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816007018190555061240334614e3d565b816004018190555034816006018190555061241d34614ec0565b81600501819055508160020181600201908054600181600116156101000203166002900461244c929190615e06565b5081600301816003019080546001816001161561010002031660029004612474929190615e06565b5061252b826003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125105780601f106124e557610100808354040283529160200191612510565b820191906000526020600020905b8154815290600101906020018083116124f357829003601f168201915b505050505060206040519081016040528060008152506153cb565b15156126415760006125d8836003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125ce5780601f106125a3576101008083540402835291602001916125ce565b820191906000526020600020905b8154815290600101906020018083116125b157829003601f168201915b5050505050613350565b905060116000600f54815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600d0160008154809291906001019190505550505b5b61264a615d25565b6080604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020013481526020014281526020016000815250905081601001819080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301555050506000600c6000600f54815260200190815260200160002054141580156127cf575061278e60035461278061271061277234600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b6127cc6003546127be612710600c6000600f54815260200190815260200160002054614cab90919063ffffffff16565b614cab90919063ffffffff16565b14155b1561284e576000806127f8600d6000600f54815260200190815260200160002060000154614d3e565b80925081935050506000811115612814576128133382614d91565b5b6000600d6000600f5481526020019081526020016000206000018190555081151561284b57612841614ddc565b5050505050612b01565b50505b6128646001600954614aef90919063ffffffff16565b60098190555061287f34600b54614aef90919063ffffffff16565b600b819055506128ae6001600a6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600a6000600f548152602001908152602001600020819055506128ef34600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600c6000600f5481526020019081526020016000208190555061295a6129336103e8612925600234614c0490919063ffffffff16565b614cab90919063ffffffff16565b600d6000600f54815260200190815260200160002060000154614aef90919063ffffffff16565b600d6000600f5481526020019081526020016000206000018190555061297f34614f32565b82600001543373ffffffffffffffffffffffffffffffffffffffff167f77ac911fb660af16b8e45baac4f95feafd39f1a27d16d34411a03ab1f6b0499d344287600201886003016000604051808681526020018581526020018060200180602001848152602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015612a675780601f10612a3c57610100808354040283529160200191612a67565b820191906000526020600020905b815481529060010190602001808311612a4a57829003601f168201915b5050838103825285818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015612aea5780601f10612abf57610100808354040283529160200191612aea565b820191906000526020600020905b815481529060010190602001808311612acd57829003601f168201915b505097505050505050505060405180910390a35050505b50505050565b612b17612b126147cb565b6156a8565b565b600080612b2583613350565b905060008173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b612b52612ea4565b1515612bc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612bda81600261570290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b612c28612ea4565b1515612c9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612d6d612d686147cb565b61352e565b80612d7c5750612d7b612ea4565b5b1515612e16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b612e1f81615804565b50565b6000600d600084815260200190815260200160002060010182815481101515612e4757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612ee76147cb565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000612f15612f106147cb565b61352e565b80612f245750612f23612ea4565b5b1515612fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b612fc7826147ed565b9050919050565b60003390506000813b9050600081141515613051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156130f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6130fc6147d3565b1515613170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006131e382600a01548360090154614aef90919063ffffffff16565b9050600080905060008090506131f883614d3e565b8092508193505050600081111561333857613239336132346064613226606286614c0490919063ffffffff16565b614cab90919063ffffffff16565b614d91565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61329c606461328e600286614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156132c7573d6000803e3d6000fd5b5060008460090181905550600084600a018190555083600001543373ffffffffffffffffffffffffffffffffffffffff167f21b1a3fb1ef755c999cf11cf426a10919f6031e172930bf00956b177c75976528342604051808381526020018281526020019250505060405180910390a35b81151561334857613347614ddc565b5b505050505050565b60006013826040518082805190602001908083835b60208310151561338a5780518252602082019150602081019050602083039250613365565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6133ed612ea4565b1515613461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6134f48585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506154cf565b5050505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061354482600261585e90919063ffffffff16565b9050919050565b60003390506000813b90506000811415156135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6136796147d3565b15156136ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541115156137bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f75736572206e6f7420657869737400000000000000000000000000000000000081525060200191505060405180910390fd5b6137c8336147ed565b50600081600801549050600080905060008090506137e583614d3e565b80925081935050506000811115613890576138003382614d91565b600084600801819055506138178460070154614e3d565b846004018190555061382c8460070154614ec0565b846005018190555083600001543373ffffffffffffffffffffffffffffffffffffffff167faf488116a12f56ff590ab3ca73f6bf9d11028ca9e63e965223b3d156fe18f5938342604051808381526020018281526020019250505060405180910390a35b600c84600e015410156138a857600084600e01819055505b8115156138b8576138b7614ddc565b5b505050505050565b6138d06138cb6147cb565b61352e565b806138df57506138de612ea4565b5b1515613979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b42811115156139f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f696e76616c69642067616d652073746172742074696d6500000000000000000081525060200191505060405180910390fd5b8060088190555050565b6000613a04615d64565b60116000600f54815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613b5c5780601f10613b3157610100808354040283529160200191613b5c565b820191906000526020600020905b815481529060010190602001808311613b3f57829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613bfe5780601f10613bd357610100808354040283529160200191613bfe565b820191906000526020600020905b815481529060010190602001808311613be157829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b82821015613d4b5783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152505081526020019060010190613ca4565b505050508152602001601182015481525050905060008161010001519050600082610220015190505b82610200015151811015613e0c57613d8a615d25565b83610200015182815181101515613d9d57fe5b9060200190602002015190506000613dd762015180613dc9846040015142614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600581101515613dfd57613dfa826020015185614aef90919063ffffffff16565b93505b50508080600101915050613d74565b508092505050919050565b613e1f612ea4565b1515613e93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613e9c81615981565b50565b613ea7615e8d565b60608060003390506000813b9050600081141515613f2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6000871415613fdf57600f5496505b613fe7615d64565b6011600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561413d5780601f106141125761010080835404028352916020019161413d565b820191906000526020600020905b81548152906001019060200180831161412057829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141df5780601f106141b4576101008083540402835291602001916141df565b820191906000526020600020905b8154815290600101906020018083116141c257829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b8282101561432c5783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152505081526020019060010190614285565b5050505081526020016011820154815250509050806000015186600060118110151561435457fe5b602002018181525050806080015186600160118110151561437157fe5b6020020181815250508060a0015186600260118110151561438e57fe5b6020020181815250508060c001518660036011811015156143ab57fe5b6020020181815250508060e001518660046011811015156143c857fe5b6020020181815250508061010001518660056011811015156143e657fe5b60200201818152505080610120015186600660118110151561440457fe5b60200201818152505080610140015186600760118110151561442257fe5b60200201818152505080610160015186600860118110151561444057fe5b60200201818152505080610180015186600960118110151561445e57fe5b602002018181525050806101a0015186600a60118110151561447c57fe5b602002018181525050806101c0015186600b60118110151561449a57fe5b60200201818152505080610220015186600c6011811015156144b857fe5b6020020181815250508061020001515186600d6011811015156144d757fe5b602002018181525050600086600d6011811015156144f157fe5b60200201511415156145ad578061020001518781518110151561451057fe5b906020019060200201516020015186600e60118110151561452d57fe5b6020020181815250508061020001518781518110151561454957fe5b906020019060200201516040015186600f60118110151561456657fe5b6020020181815250508061020001518781518110151561458257fe5b906020019060200201516060015186601060118110151561459f57fe5b6020020181815250506145fc565b600086600e6011811015156145be57fe5b602002018181525050600086600f6011811015156145d857fe5b60200201818152505060008660106011811015156145f257fe5b6020020181815250505b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156146d25780601f106146a7576101008083540402835291602001916146d2565b820191906000526020600020905b8154815290600101906020018083116146b557829003601f168201915b50505050509450601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147af5780601f10614784576101008083540402835291602001916147af565b820191906000526020600020905b81548152906001019060200180831161479257829003601f168201915b5050505050935085858595509550955050505093509350939050565b600033905090565b600080600854141580156147e8575060085442115b905090565b60008060116000600f54815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561485b576000915050614aea565b600061486a8260040154615054565b905060008090506000836011015490505b8360100180549050811015614a76576000846010018281548110151561489d57fe5b9060005260206000209060040201905060006148f2620151806148e4620151806148d66138408760020154614b7990919063ffffffff16565b614cab90919063ffffffff16565b614c0490919063ffffffff16565b90506000614932620151806149248461491661384042614b7990919063ffffffff16565b614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600061496262015180614954866002015442614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600582111561497257600591505b83600301548211156149df576149d16103e86149c386600101546149b58b6149a78a6003015489614b7990919063ffffffff16565b614c0490919063ffffffff16565b614c0490919063ffffffff16565b614cab90919063ffffffff16565b860195508184600301819055505b600581101515614a6557614a0160018960110154614aef90919063ffffffff16565b8860110181905550614a2484600101548960070154614b7990919063ffffffff16565b8860070181905550614a4784600101548960080154614aef90919063ffffffff16565b8860080181905550614a5c8860070154614e3d565b88600401819055505b50505050808060010191505061487b565b50614a9f600a614a9160075484614c0490919063ffffffff16565b614cab90919063ffffffff16565b9050614ab8818460090154614aef90919063ffffffff16565b8360090181905550614ad78184600b0154614aef90919063ffffffff16565b83600b0181905550826009015493505050505b919050565b6000808284019050838110151515614b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6f766572666c6f7700000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515614bf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6c6f77657220737562206269676765720000000000000000000000000000000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080831415614c175760009050614ca5565b60008284029050828482811515614c2a57fe5b04141515614ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6d756c206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b809150505b92915050565b60008082111515614d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f646976207a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008284811515614d3157fe5b0490508091505092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff163183101515614d845760003073ffffffffffffffffffffffffffffffffffffffff163191509150614d8c565b600183915091505b915091565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614dd7573d6000803e3d6000fd5b505050565b600f60008154809291906001019190505550614e2d62015180614e1f62015180614e1160105442614aef90919063ffffffff16565b614cab90919063ffffffff16565b614c0490919063ffffffff16565b600881905550600a600781905550565b600080546001028210158015614e5857506000546005028211155b15614e665760019050614ebb565b6000546006028210158015614e805750600054600a028211155b15614e8e5760029050614ebb565b600054600b028210158015614ea85750600054600f028211155b15614eb65760039050614ebb565b600090505b919050565b600080546001028210158015614edb57506000546005028211155b15614ee95760019050614f2d565b6000546006028210158015614f035750600054600a028211155b15614f115760029050614f2d565b600054600b0282101515614f285760039050614f2d565b600090505b919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc614f956064614f87600486614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015614fc0573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6150256103e8615017600586614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015615050573d6000803e3d6000fd5b5050565b600060018214156150685760059050615091565b600282141561507a5760079050615091565b600382141561508c57600a9050615091565b600090505b919050565b60608390506000600190505b601e811115156153c4576150c68260206040519081016040528060008152506153cb565b156150d0576153c4565b60006013836040518082805190602001908083835b60208310151561510a57805182526020820191506020810190506020830392506150e5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060116000600f54815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006151c58260050154615b0c565b905060006151d7836005015486615b4e565b905060008090506151f984600801548560070154614aef90919063ffffffff16565b8911151561520957889050615227565b61522484600801548560070154614aef90919063ffffffff16565b90505b60008214151561531357600061526a8361525c8661524e8d87614c0490919063ffffffff16565b614c0490919063ffffffff16565b614c0490919063ffffffff16565b90506152a76064615299600a61528b6103e886614cab90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b90506152d1600a6152c360075484614c0490919063ffffffff16565b614cab90919063ffffffff16565b90506152ea8186600a0154614aef90919063ffffffff16565b85600a01819055506153098186600c0154614aef90919063ffffffff16565b85600c0181905550505b836003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156153ab5780601f10615380576101008083540402835291602001916153ab565b820191906000526020600020905b81548152906001019060200180831161538e57829003601f168201915b50505050509650505050505080806001019150506150a2565b5050505050565b6000816040516020018082805190602001908083835b60208310151561540657805182526020820191506020810190506020830392506153e1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310151561547a5780518252602082019150602081019050602083039250615455565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014156154c457600190506154c9565b600090505b92915050565b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600e60008154809291906001019190505550600e548160000181905550838160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600201908051906020019061558a929190615eb1565b50818160030190805190602001906155a3929190615eb1565b50836013846040518082805190602001908083835b6020831015156155dd57805182526020820191506020810190506020830392506155b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360146000600e54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6156bc81600261570290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61570c828261585e565b15156157a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c81526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b615818816002615c4890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561592a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515615a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001821415615b205760039050615b49565b6002821415615b325760069050615b49565b6003821415615b4457600a9050615b49565b600090505b919050565b6000600183148015615b605750600182145b15615b6e5760329050615c42565b600283148015615b7e5750600182145b15615b8c5760469050615c42565b600283148015615b9c5750600282145b15615baa5760329050615c42565b6003831415615c3d576001821415615bc55760649050615c42565b6002821415615bd75760469050615c42565b6003821415615be95760329050615c42565b60048210158015615bfb5750600a8211155b15615c0957600a9050615c42565b600b8210158015615c1b575060148211155b15615c295760059050615c42565b601582101515615c3c5760019050615c42565b5b600090505b92915050565b615c52828261585e565b151515615cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b6102406040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e3f5780548555615e7c565b82800160010185558215615e7c57600052602060002091601f016020900482015b82811115615e7b578254825591600101919060010190615e60565b5b509050615e899190615f31565b5090565b61022060405190810160405280601190602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615ef257805160ff1916838001178555615f20565b82800160010185558215615f20579182015b82811115615f1f578251825591602001919060010190615f04565b5b509050615f2d9190615f31565b5090565b615f5391905b80821115615f4f576000816000905550600101615f37565b5090565b9056fea165627a7a72305820891074fe40c9b1a576414b1bec14ac538ddc352675fb60a5ef6cee8b98103b410029
Deployed Bytecode
0x60806040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063071fa4351461014057806311b23c231461017b57806314151f7f146101925780631746bd1b146101d7578063357cabe6146102415780634c5a628c14610393578063578d714b146103aa5780636897e9741461048a578063715018a6146104db5780637362d9c8146104f257806385702d59146105435780638da5cb5b146105c85780638f32d59b1461061f57806390d624791461064e578063959499b6146106b3578063a1451224146106ca578063aa5f5f29146107d2578063ae0a81d7146108cd578063bb5f747b14610948578063be040fb0146109b1578063d214d15a146109c8578063efcf33ae14610a03578063f2fde38b14610a68578063f4d508ec14610ab9575b005b34801561014c57600080fd5b506101796004803603602081101561016357600080fd5b8101908080359060200190929190505050610c32565b005b34801561018757600080fd5b50610190610d6d565b005b34801561019e57600080fd5b506101d5600480360360408110156101b557600080fd5b8101908080359060200190929190803590602001909291905050506115f5565b005b3480156101e357600080fd5b506101ec611aae565b604051808b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b6103916004803603604081101561025757600080fd5b810190808035906020019064010000000081111561027457600080fd5b82018360208201111561028657600080fd5b803590602001918460018302840111640100000000831117156102a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561030b57600080fd5b82018360208201111561031d57600080fd5b8035906020019184600183028401116401000000008311171561033f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c78565b005b34801561039f57600080fd5b506103a8612b07565b005b3480156103b657600080fd5b50610470600480360360208110156103cd57600080fd5b81019080803590602001906401000000008111156103ea57600080fd5b8201836020820111156103fc57600080fd5b8035906020019184600183028401116401000000008311171561041e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612b19565b604051808215151515815260200191505060405180910390f35b34801561049657600080fd5b506104d9600480360360208110156104ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b4a565b005b3480156104e757600080fd5b506104f0612c20565b005b3480156104fe57600080fd5b506105416004803603602081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d5d565b005b34801561054f57600080fd5b506105866004803603604081101561056657600080fd5b810190808035906020019092919080359060200190929190505050612e22565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d457600080fd5b506105dd612e7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062b57600080fd5b50610634612ea4565b604051808215151515815260200191505060405180910390f35b34801561065a57600080fd5b5061069d6004803603602081101561067157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f03565b6040518082815260200191505060405180910390f35b3480156106bf57600080fd5b506106c8612fce565b005b3480156106d657600080fd5b50610790600480360360208110156106ed57600080fd5b810190808035906020019064010000000081111561070a57600080fd5b82018360208201111561071c57600080fd5b8035906020019184600183028401116401000000008311171561073e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613350565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107de57600080fd5b506108cb600480360360608110156107f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561083257600080fd5b82018360208201111561084457600080fd5b8035906020019184600183028401116401000000008311171561086657600080fd5b90919293919293908035906020019064010000000081111561088757600080fd5b82018360208201111561089957600080fd5b803590602001918460018302840111640100000000831117156108bb57600080fd5b90919293919293905050506133e5565b005b3480156108d957600080fd5b50610906600480360360208110156108f057600080fd5b81019080803590602001909291905050506134fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095457600080fd5b506109976004803603602081101561096b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061352e565b604051808215151515815260200191505060405180910390f35b3480156109bd57600080fd5b506109c661354b565b005b3480156109d457600080fd5b50610a01600480360360208110156109eb57600080fd5b81019080803590602001909291905050506138c0565b005b348015610a0f57600080fd5b50610a5260048036036020811015610a2657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139fa565b6040518082815260200191505060405180910390f35b348015610a7457600080fd5b50610ab760048036036020811015610a8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e17565b005b348015610ac557600080fd5b50610b1c60048036036060811015610adc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613e9f565b6040518084601160200280838360005b83811015610b47578082015181840152602081019050610b2c565b505050509050018060200180602001838103835285818151815260200191508051906020019080838360005b83811015610b8e578082015181840152602081019050610b73565b50505050905090810190601f168015610bbb5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610bf4578082015181840152602081019050610bd9565b50505050905090810190601f168015610c215780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610c42610c3d6147cb565b61352e565b80610c515750610c50612ea4565b5b1515610ceb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b600081111515610d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636f6566660000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b610d756147d3565b1515610de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154111515610ee1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f7573657220686176656e277420696e7665737420696e20726f756e642062656681526020017f6f7265000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610eea336147ed565b50600081600801549050600354600f0282600701541115610f1457600354600f0282600701819055505b600354600f02610f31828460070154614aef90919063ffffffff16565b1115610f5657610f538260070154600354600f02614b7990919063ffffffff16565b90505b6000811415610f665750506115f3565b6000610f906103e8610f82602f85614c0490919063ffffffff16565b614cab90919063ffffffff16565b9050600080610f9e83614d3e565b8092508193505050811515610fd3576000811115610fc157610fc03382614d91565b5b610fc9614ddc565b50505050506115f3565b610fea848660080154614b7990919063ffffffff16565b8560080181905550611009848660060154614aef90919063ffffffff16565b8560060181905550611028848660070154614aef90919063ffffffff16565b856007018190555061103d8560070154614e3d565b856004018190555061106861106386600801548760070154614aef90919063ffffffff16565b614ec0565b85600501819055506206978085600f0154420311156110ab57611099600186600e0154614aef90919063ffffffff16565b85600e01819055504285600f01819055505b600c85600e0154141561113557600d6000600f5481526020019081526020016000206001013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61113d615d25565b6080604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018681526020014281526020016000815250905085601001819080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301555050506000600c6000600f54815260200190815260200160002054141580156112c2575061128160035461127361271061126589600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b6112bf6003546112b1612710600c6000600f54815260200190815260200160002054614cab90919063ffffffff16565b614cab90919063ffffffff16565b14155b1561133d576112e8600d6000600f54815260200190815260200160002060000154614d3e565b80935081945050506000821115611304576113033383614d91565b5b6000600d6000600f5481526020019081526020016000206000018190555082151561133c57611331614ddc565b5050505050506115f3565b5b6113536001600954614aef90919063ffffffff16565b60098190555061136e85600b54614aef90919063ffffffff16565b600b8190555061139d6001600a6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600a6000600f548152602001908152602001600020819055506113de85600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600c6000600f548152602001908152602001600020819055506114496114226103e8611414600289614c0490919063ffffffff16565b614cab90919063ffffffff16565b600d6000600f54815260200190815260200160002060000154614aef90919063ffffffff16565b600d6000600f5481526020019081526020016000206000018190555061146e85614f32565b85600001543373ffffffffffffffffffffffffffffffffffffffff167f77ac911fb660af16b8e45baac4f95feafd39f1a27d16d34411a03ab1f6b0499d87428a6002018b60030160016040518086815260200185815260200180602001806020018481526020018381038352868181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156115565780601f1061152b57610100808354040283529160200191611556565b820191906000526020600020905b81548152906001019060200180831161153957829003601f168201915b50508381038252858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156115d95780601f106115ae576101008083540402835291602001916115d9565b820191906000526020600020905b8154815290600101906020018083116115bc57829003601f168201915b505097505050505050505060405180910390a35050505050505b565b6116056116006147cb565b61352e565b806116145750611613612ea4565b5b15156116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b60008290505b8181111515611aa95760006014600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506116fd615d64565b60116000600f54815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118f75780601f106118cc576101008083540402835291602001916118f7565b820191906000526020600020905b8154815290600101906020018083116118da57829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b82821015611a445783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815250508152602001906001019061199d565b50505050815260200160118201548152505090506003546001028160e00151101515611a90576000611a798260800151615054565b9050611a8e82606001518360e0015183615096565b505b611a99826147ed565b50505080806001019150506116b4565b505050565b60008060008060008060008060008060003390506000813b9050600081141515611b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515611be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b600f54600e54600854600954600b54600a6000600f54815260200190815260200160002054600c6000600f54815260200190815260200160002054600754600d6000600f54815260200190815260200160002060000154600d6000600f548152602001908152602001600020600101805490509b509b509b509b509b509b509b509b509b509b50505090919293949596979899565b60003390506000813b9050600081141515611cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b611da66147d3565b1515611e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b6003546001023410158015611e345750600354600f023411155b1515611ea8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6265747765656e203120616e642031350000000000000000000000000000000081525060200191505060405180910390fd5b611ed1600354611ec360035434614cab90919063ffffffff16565b614c0490919063ffffffff16565b34141515611f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f696e76616c6964206d73672076616c756500000000000000000000000000000081525060200191505060405180910390fd5b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015414156121f157611fb18560206040519081016040528060008152506153cb565b151515612026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f656d70747920696e7669746520636f646500000000000000000000000000000081525060200191505060405180910390fd5b600061203185613350565b905060008173ffffffffffffffffffffffffffffffffffffffff16141515156120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f72656665726572206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f72656665727265722063616e27742062652073656c660000000000000000000081525060200191505060405180910390fd5b61216f86612b19565b1515156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e7669746520636f646520697320757365640000000000000000000000000081525060200191505060405180910390fd5b6121ef3387876154cf565b505b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156123a157600354600f026122a8348360070154614aef90919063ffffffff16565b1115151561231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f63616e206e6f74206265796f6e6420313520657468000000000000000000000081525060200191505060405180910390fd5b612335348260060154614aef90919063ffffffff16565b8160060181905550612354348260070154614aef90919063ffffffff16565b81600701819055506123698160070154614e3d565b816004018190555061239461238f82600801548360070154614aef90919063ffffffff16565b614ec0565b8160050181905550612642565b81600001548160000181905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816007018190555061240334614e3d565b816004018190555034816006018190555061241d34614ec0565b81600501819055508160020181600201908054600181600116156101000203166002900461244c929190615e06565b5081600301816003019080546001816001161561010002031660029004612474929190615e06565b5061252b826003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125105780601f106124e557610100808354040283529160200191612510565b820191906000526020600020905b8154815290600101906020018083116124f357829003601f168201915b505050505060206040519081016040528060008152506153cb565b15156126415760006125d8836003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125ce5780601f106125a3576101008083540402835291602001916125ce565b820191906000526020600020905b8154815290600101906020018083116125b157829003601f168201915b5050505050613350565b905060116000600f54815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600d0160008154809291906001019190505550505b5b61264a615d25565b6080604051908101604052803373ffffffffffffffffffffffffffffffffffffffff1681526020013481526020014281526020016000815250905081601001819080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301555050506000600c6000600f54815260200190815260200160002054141580156127cf575061278e60035461278061271061277234600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b6127cc6003546127be612710600c6000600f54815260200190815260200160002054614cab90919063ffffffff16565b614cab90919063ffffffff16565b14155b1561284e576000806127f8600d6000600f54815260200190815260200160002060000154614d3e565b80925081935050506000811115612814576128133382614d91565b5b6000600d6000600f5481526020019081526020016000206000018190555081151561284b57612841614ddc565b5050505050612b01565b50505b6128646001600954614aef90919063ffffffff16565b60098190555061287f34600b54614aef90919063ffffffff16565b600b819055506128ae6001600a6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600a6000600f548152602001908152602001600020819055506128ef34600c6000600f54815260200190815260200160002054614aef90919063ffffffff16565b600c6000600f5481526020019081526020016000208190555061295a6129336103e8612925600234614c0490919063ffffffff16565b614cab90919063ffffffff16565b600d6000600f54815260200190815260200160002060000154614aef90919063ffffffff16565b600d6000600f5481526020019081526020016000206000018190555061297f34614f32565b82600001543373ffffffffffffffffffffffffffffffffffffffff167f77ac911fb660af16b8e45baac4f95feafd39f1a27d16d34411a03ab1f6b0499d344287600201886003016000604051808681526020018581526020018060200180602001848152602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015612a675780601f10612a3c57610100808354040283529160200191612a67565b820191906000526020600020905b815481529060010190602001808311612a4a57829003601f168201915b5050838103825285818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015612aea5780601f10612abf57610100808354040283529160200191612aea565b820191906000526020600020905b815481529060010190602001808311612acd57829003601f168201915b505097505050505050505060405180910390a35050505b50505050565b612b17612b126147cb565b6156a8565b565b600080612b2583613350565b905060008173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b612b52612ea4565b1515612bc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612bda81600261570290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b612c28612ea4565b1515612c9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612d6d612d686147cb565b61352e565b80612d7c5750612d7b612ea4565b5b1515612e16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b612e1f81615804565b50565b6000600d600084815260200190815260200160002060010182815481101515612e4757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612ee76147cb565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000612f15612f106147cb565b61352e565b80612f245750612f23612ea4565b5b1515612fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b612fc7826147ed565b9050919050565b60003390506000813b9050600081141515613051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156130f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6130fc6147d3565b1515613170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006131e382600a01548360090154614aef90919063ffffffff16565b9050600080905060008090506131f883614d3e565b8092508193505050600081111561333857613239336132346064613226606286614c0490919063ffffffff16565b614cab90919063ffffffff16565b614d91565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61329c606461328e600286614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156132c7573d6000803e3d6000fd5b5060008460090181905550600084600a018190555083600001543373ffffffffffffffffffffffffffffffffffffffff167f21b1a3fb1ef755c999cf11cf426a10919f6031e172930bf00956b177c75976528342604051808381526020018281526020019250505060405180910390a35b81151561334857613347614ddc565b5b505050505050565b60006013826040518082805190602001908083835b60208310151561338a5780518252602082019150602081019050602083039250613365565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6133ed612ea4565b1515613461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6134f48585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506154cf565b5050505050565b60146020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061354482600261585e90919063ffffffff16565b9050919050565b60003390506000813b90506000811415156135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6136796147d3565b15156136ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f67616d65206e6f7420737461727400000000000000000000000000000000000081525060200191505060405180910390fd5b600060116000600f54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001541115156137bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f75736572206e6f7420657869737400000000000000000000000000000000000081525060200191505060405180910390fd5b6137c8336147ed565b50600081600801549050600080905060008090506137e583614d3e565b80925081935050506000811115613890576138003382614d91565b600084600801819055506138178460070154614e3d565b846004018190555061382c8460070154614ec0565b846005018190555083600001543373ffffffffffffffffffffffffffffffffffffffff167faf488116a12f56ff590ab3ca73f6bf9d11028ca9e63e965223b3d156fe18f5938342604051808381526020018281526020019250505060405180910390a35b600c84600e015410156138a857600084600e01819055505b8115156138b8576138b7614ddc565b5b505050505050565b6138d06138cb6147cb565b61352e565b806138df57506138de612ea4565b5b1515613979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f57686974656c69737441646d696e526f6c653a2063616c6c657220646f65732081526020017f6e6f742068617665207468652057686974656c69737441646d696e20726f6c6581525060400191505060405180910390fd5b42811115156139f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f696e76616c69642067616d652073746172742074696d6500000000000000000081525060200191505060405180910390fd5b8060088190555050565b6000613a04615d64565b60116000600f54815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613b5c5780601f10613b3157610100808354040283529160200191613b5c565b820191906000526020600020905b815481529060010190602001808311613b3f57829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613bfe5780601f10613bd357610100808354040283529160200191613bfe565b820191906000526020600020905b815481529060010190602001808311613be157829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b82821015613d4b5783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152505081526020019060010190613ca4565b505050508152602001601182015481525050905060008161010001519050600082610220015190505b82610200015151811015613e0c57613d8a615d25565b83610200015182815181101515613d9d57fe5b9060200190602002015190506000613dd762015180613dc9846040015142614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600581101515613dfd57613dfa826020015185614aef90919063ffffffff16565b93505b50508080600101915050613d74565b508092505050919050565b613e1f612ea4565b1515613e93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613e9c81615981565b50565b613ea7615e8d565b60608060003390506000813b9050600081141515613f2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792068756d616e73206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613fd0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f736f7272792c2068756d616e206f6e6c7900000000000000000000000000000081525060200191505060405180910390fd5b6000871415613fdf57600f5496505b613fe7615d64565b6011600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206102406040519081016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561413d5780601f106141125761010080835404028352916020019161413d565b820191906000526020600020905b81548152906001019060200180831161412057829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141df5780601f106141b4576101008083540402835291602001916141df565b820191906000526020600020905b8154815290600101906020018083116141c257829003601f168201915b50505050508152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815260200160108201805480602002602001604051908101604052809291908181526020016000905b8282101561432c5783829060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152505081526020019060010190614285565b5050505081526020016011820154815250509050806000015186600060118110151561435457fe5b602002018181525050806080015186600160118110151561437157fe5b6020020181815250508060a0015186600260118110151561438e57fe5b6020020181815250508060c001518660036011811015156143ab57fe5b6020020181815250508060e001518660046011811015156143c857fe5b6020020181815250508061010001518660056011811015156143e657fe5b60200201818152505080610120015186600660118110151561440457fe5b60200201818152505080610140015186600760118110151561442257fe5b60200201818152505080610160015186600860118110151561444057fe5b60200201818152505080610180015186600960118110151561445e57fe5b602002018181525050806101a0015186600a60118110151561447c57fe5b602002018181525050806101c0015186600b60118110151561449a57fe5b60200201818152505080610220015186600c6011811015156144b857fe5b6020020181815250508061020001515186600d6011811015156144d757fe5b602002018181525050600086600d6011811015156144f157fe5b60200201511415156145ad578061020001518781518110151561451057fe5b906020019060200201516020015186600e60118110151561452d57fe5b6020020181815250508061020001518781518110151561454957fe5b906020019060200201516040015186600f60118110151561456657fe5b6020020181815250508061020001518781518110151561458257fe5b906020019060200201516060015186601060118110151561459f57fe5b6020020181815250506145fc565b600086600e6011811015156145be57fe5b602002018181525050600086600f6011811015156145d857fe5b60200201818152505060008660106011811015156145f257fe5b6020020181815250505b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156146d25780601f106146a7576101008083540402835291602001916146d2565b820191906000526020600020905b8154815290600101906020018083116146b557829003601f168201915b50505050509450601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147af5780601f10614784576101008083540402835291602001916147af565b820191906000526020600020905b81548152906001019060200180831161479257829003601f168201915b5050505050935085858595509550955050505093509350939050565b600033905090565b600080600854141580156147e8575060085442115b905090565b60008060116000600f54815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154141561485b576000915050614aea565b600061486a8260040154615054565b905060008090506000836011015490505b8360100180549050811015614a76576000846010018281548110151561489d57fe5b9060005260206000209060040201905060006148f2620151806148e4620151806148d66138408760020154614b7990919063ffffffff16565b614cab90919063ffffffff16565b614c0490919063ffffffff16565b90506000614932620151806149248461491661384042614b7990919063ffffffff16565b614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600061496262015180614954866002015442614b7990919063ffffffff16565b614cab90919063ffffffff16565b9050600582111561497257600591505b83600301548211156149df576149d16103e86149c386600101546149b58b6149a78a6003015489614b7990919063ffffffff16565b614c0490919063ffffffff16565b614c0490919063ffffffff16565b614cab90919063ffffffff16565b860195508184600301819055505b600581101515614a6557614a0160018960110154614aef90919063ffffffff16565b8860110181905550614a2484600101548960070154614b7990919063ffffffff16565b8860070181905550614a4784600101548960080154614aef90919063ffffffff16565b8860080181905550614a5c8860070154614e3d565b88600401819055505b50505050808060010191505061487b565b50614a9f600a614a9160075484614c0490919063ffffffff16565b614cab90919063ffffffff16565b9050614ab8818460090154614aef90919063ffffffff16565b8360090181905550614ad78184600b0154614aef90919063ffffffff16565b83600b0181905550826009015493505050505b919050565b6000808284019050838110151515614b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f6f766572666c6f7700000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b6000828211151515614bf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6c6f77657220737562206269676765720000000000000000000000000000000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080831415614c175760009050614ca5565b60008284029050828482811515614c2a57fe5b04141515614ca0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6d756c206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b809150505b92915050565b60008082111515614d24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f646976207a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008284811515614d3157fe5b0490508091505092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff163183101515614d845760003073ffffffffffffffffffffffffffffffffffffffff163191509150614d8c565b600183915091505b915091565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614dd7573d6000803e3d6000fd5b505050565b600f60008154809291906001019190505550614e2d62015180614e1f62015180614e1160105442614aef90919063ffffffff16565b614cab90919063ffffffff16565b614c0490919063ffffffff16565b600881905550600a600781905550565b600080546001028210158015614e5857506000546005028211155b15614e665760019050614ebb565b6000546006028210158015614e805750600054600a028211155b15614e8e5760029050614ebb565b600054600b028210158015614ea85750600054600f028211155b15614eb65760039050614ebb565b600090505b919050565b600080546001028210158015614edb57506000546005028211155b15614ee95760019050614f2d565b6000546006028210158015614f035750600054600a028211155b15614f115760029050614f2d565b600054600b0282101515614f285760039050614f2d565b600090505b919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc614f956064614f87600486614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015614fc0573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6150256103e8615017600586614c0490919063ffffffff16565b614cab90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015615050573d6000803e3d6000fd5b5050565b600060018214156150685760059050615091565b600282141561507a5760079050615091565b600382141561508c57600a9050615091565b600090505b919050565b60608390506000600190505b601e811115156153c4576150c68260206040519081016040528060008152506153cb565b156150d0576153c4565b60006013836040518082805190602001908083835b60208310151561510a57805182526020820191506020810190506020830392506150e5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060116000600f54815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006151c58260050154615b0c565b905060006151d7836005015486615b4e565b905060008090506151f984600801548560070154614aef90919063ffffffff16565b8911151561520957889050615227565b61522484600801548560070154614aef90919063ffffffff16565b90505b60008214151561531357600061526a8361525c8661524e8d87614c0490919063ffffffff16565b614c0490919063ffffffff16565b614c0490919063ffffffff16565b90506152a76064615299600a61528b6103e886614cab90919063ffffffff16565b614cab90919063ffffffff16565b614cab90919063ffffffff16565b90506152d1600a6152c360075484614c0490919063ffffffff16565b614cab90919063ffffffff16565b90506152ea8186600a0154614aef90919063ffffffff16565b85600a01819055506153098186600c0154614aef90919063ffffffff16565b85600c0181905550505b836003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156153ab5780601f10615380576101008083540402835291602001916153ab565b820191906000526020600020905b81548152906001019060200180831161538e57829003601f168201915b50505050509650505050505080806001019150506150a2565b5050505050565b6000816040516020018082805190602001908083835b60208310151561540657805182526020820191506020810190506020830392506153e1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b60208310151561547a5780518252602082019150602081019050602083039250615455565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014156154c457600190506154c9565b600090505b92915050565b6000601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600e60008154809291906001019190505550600e548160000181905550838160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600201908051906020019061558a929190615eb1565b50818160030190805190602001906155a3929190615eb1565b50836013846040518082805190602001908083835b6020831015156155dd57805182526020820191506020810190506020830392506155b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360146000600e54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6156bc81600261570290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b61570c828261585e565b15156157a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c81526020017f650000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b615818816002615c4890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561592a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526f6c65733a206163636f756e7420697320746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515615a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001821415615b205760039050615b49565b6002821415615b325760069050615b49565b6003821415615b4457600a9050615b49565b600090505b919050565b6000600183148015615b605750600182145b15615b6e5760329050615c42565b600283148015615b7e5750600182145b15615b8c5760469050615c42565b600283148015615b9c5750600282145b15615baa5760329050615c42565b6003831415615c3d576001821415615bc55760649050615c42565b6002821415615bd75760469050615c42565b6003821415615be95760329050615c42565b60048210158015615bfb5750600a8211155b15615c0957600a9050615c42565b600b8210158015615c1b575060148211155b15615c295760059050615c42565b601582101515615c3c5760019050615c42565b5b600090505b92915050565b615c52828261585e565b151515615cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b6102406040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e3f5780548555615e7c565b82800160010185558215615e7c57600052602060002091601f016020900482015b82811115615e7b578254825591600101919060010190615e60565b5b509050615e899190615f31565b5090565b61022060405190810160405280601190602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615ef257805160ff1916838001178555615f20565b82800160010185558215615f20579182015b82811115615f1f578251825591602001919060010190615f04565b5b509050615f2d9190615f31565b5090565b615f5391905b80821115615f4f576000816000905550600101615f37565b5090565b9056fea165627a7a72305820891074fe40c9b1a576414b1bec14ac538ddc352675fb60a5ef6cee8b98103b410029
Deployed Bytecode Sourcemap
8455:18563:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11479:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11479:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11479:153:0;;;;;;;;;;;;;;;;;;;;14861:2668;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14861:2668:0;;;;;;20412:508;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20412:508:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20412:508:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24086:431;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24086:431:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11755:3096;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11755:3096:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11755:3096:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11755:3096:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11755:3096:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11755:3096:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11755:3096:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11755:3096:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;11755:3096:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;11755:3096:0;;;;;;;;;;;;;;;;;;8037:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8037:95:0;;;;;;23627:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23627:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23627:155:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23627:155:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23627:155:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23627:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23627:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7868:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7868:161:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7868:161:0;;;;;;;;;;;;;;;;;;;;;;5218:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5218:140:0;;;;;;7744:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7744:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7744:116:0;;;;;;;;;;;;;;;;;;;;;;25915:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25915:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25915:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4407:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4407:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4773:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4773:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18721:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18721:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18721:146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17537:787;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17537:787:0;;;;;;23790:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23790:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23790:125:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23790:125:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23790:125:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23790:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23790:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20928:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20928:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20928:172:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;20928:172:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20928:172:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20928:172:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;20928:172:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20928:172:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;20928:172:0;;;;;;;;;;;;;;;10263:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10263:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10263:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7611:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7611:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7611:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22535:935;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22535:935:0;;;;;;11315:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11315:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11315:156:0;;;;;;;;;;;;;;;;;;;;26048:544;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26048:544:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26048:544:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5513:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5513:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5513:109:0;;;;;;;;;;;;;;;;;;;;;;24525:1382;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24525:1382:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24525:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;24525:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;24525:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;24525:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11479:153;7471:30;7488:12;:10;:12::i;:::-;7471:16;:30::i;:::-;:43;;;;7505:9;:7;:9::i;:::-;7471:43;7463:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11575:1;11567:5;:9;11559:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11619:5;11605:11;:19;;;;11479:153;:::o;14861:2668::-;14909:11;:9;:11::i;:::-;14901:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14950:17;14970:16;:21;14987:3;;14970:21;;;;;;;;;;;:33;14992:10;14970:33;;;;;;;;;;;;;;;14950:53;;15032:1;15022:4;:7;;;:11;15014:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15084:32;15105:10;15084:20;:32::i;:::-;;15129:19;15151:4;:17;;;15129:39;;15206:6;;15203:2;:9;15183:4;:17;;;:29;15179:91;;;15252:6;;15249:2;:9;15229:4;:17;;:29;;;;15179:91;15327:6;;15324:2;:9;15284:37;15306:14;15284:4;:17;;;:21;;:37;;;;:::i;:::-;:49;15280:133;;;15367:34;15383:4;:17;;;15371:6;;15368:2;:9;15367:15;;:34;;;;:::i;:::-;15350:51;;15280:133;15447:1;15429:14;:19;15425:58;;;15465:7;;;;15425:58;15495:16;15514:32;15541:4;15514:22;15533:2;15514:14;:18;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;15495:51;;15557:13;15581:14;15630:28;15646:11;15630:15;:28::i;:::-;15606:52;;;;;;;;15674:8;15673:9;15669:179;;;15715:1;15703:9;:13;15699:92;;;15737:38;15753:10;15765:9;15737:15;:38::i;:::-;15699:92;15805:10;:8;:10::i;:::-;15830:7;;;;;;;15669:179;15880:37;15902:14;15880:4;:17;;;:21;;:37;;;;:::i;:::-;15860:4;:17;;:57;;;;15945:34;15964:14;15945:4;:14;;;:18;;:34;;;;:::i;:::-;15928:4;:14;;:51;;;;16010:37;16032:14;16010:4;:17;;;:21;;:37;;;;:::i;:::-;15990:4;:17;;:57;;;;16077:27;16086:4;:17;;;16077:8;:27::i;:::-;16058:4;:16;;:46;;;;16135:54;16148:40;16170:4;:17;;;16148:4;:17;;;:21;;:40;;;;:::i;:::-;16135:12;:54::i;:::-;16115:4;:17;;:74;;;;16236:6;16211:4;:21;;;16205:3;:27;16204:38;16200:159;;;16280:25;16303:1;16280:4;:18;;;:22;;:25;;;;:::i;:::-;16259:4;:18;;:46;;;;16344:3;16320:4;:21;;:27;;;;16200:159;16397:2;16375:4;:18;;;:24;16371:97;;;16416:5;:10;16422:3;;16416:10;;;;;;;;;;;:23;;16445:10;16416:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;16416:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16371:97;16480:20;;:::i;:::-;16503:42;;;;;;;;;16510:10;16503:42;;;;;;16522:14;16503:42;;;;16538:3;16503:42;;;;16543:1;16503:42;;;16480:65;;16556:4;:12;;16574:6;16556:25;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;16556:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16619:1;16598:12;:17;16611:3;;16598:17;;;;;;;;;;;;:22;;:132;;;;;16669:60;16722:6;;16669:48;16711:5;16669:37;16691:14;16669:12;:17;16682:3;;16669:17;;;;;;;;;;;;:21;;:37;;;;:::i;:::-;:41;;:48;;;;:::i;:::-;:52;;:60;;;;:::i;:::-;16625:40;16658:6;;16625:28;16647:5;16625:12;:17;16638:3;;16625:17;;;;;;;;;;;;:21;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;:104;;16598:132;16594:468;;;16771:36;16787:5;:10;16793:3;;16787:10;;;;;;;;;;;:19;;;16771:15;:36::i;:::-;16747:60;;;;;;;;16838:1;16826:9;:13;16822:92;;;16860:38;16876:10;16888:9;16860:15;:38::i;:::-;16822:92;16950:1;16928:5;:10;16934:3;;16928:10;;;;;;;;;;;:19;;:23;;;;16971:8;16970:9;16966:85;;;17000:10;:8;:10::i;:::-;17029:7;;;;;;;;16966:85;16594:468;17088:18;17104:1;17088:11;;:15;;:18;;;;:::i;:::-;17074:11;:32;;;;17131:31;17147:14;17131:11;;:15;;:31;;;;:::i;:::-;17117:11;:45;;;;17193:24;17215:1;17193:12;:17;17206:3;;17193:17;;;;;;;;;;;;:21;;:24;;;;:::i;:::-;17173:12;:17;17186:3;;17173:17;;;;;;;;;;;:44;;;;17248:37;17270:14;17248:12;:17;17261:3;;17248:17;;;;;;;;;;;;:21;;:37;;;;:::i;:::-;17228:12;:17;17241:3;;17228:17;;;;;;;;;;;:57;;;;17318:56;17342:31;17368:4;17342:21;17361:1;17342:14;:18;;:21;;;;:::i;:::-;:25;;:31;;;;:::i;:::-;17318:5;:10;17324:3;;17318:10;;;;;;;;;;;:19;;;:23;;:56;;;;:::i;:::-;17296:5;:10;17302:3;;17296:10;;;;;;;;;;;:19;;:78;;;;17387:30;17402:14;17387;:30::i;:::-;17457:4;:7;;;17445:10;17433:88;;;17466:14;17482:3;17487:4;:15;;17504:4;:13;;17519:1;17433:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14861:2668;;;;;;;:::o;20412:508::-;7471:30;7488:12;:10;:12::i;:::-;7471:16;:30::i;:::-;:43;;;;7505:9;:7;:9::i;:::-;7471:43;7463:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20504:6;20513:5;20504:14;;20499:414;20525:3;20520:1;:8;;20499:414;;;20550:16;20569:12;:15;20582:1;20569:15;;;;;;;;;;;;;;;;;;;;;20550:34;;20599:16;;:::i;:::-;20618;:21;20635:3;;20618:21;;;;;;;;;;;:31;20640:8;20618:31;;;;;;;;;;;;;;;20599:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20691:6;;20689:1;:8;20668:4;:17;;;:29;;20664:193;;;20718:10;20731:30;20744:4;:16;;;20731:12;:30::i;:::-;20718:43;;20780:61;20801:4;:13;;;20816:4;:17;;;20835:5;20780:20;:61::i;:::-;20664:193;;20871:30;20892:8;20871:20;:30::i;:::-;;20499:414;;20530:3;;;;;;;20499:414;;;;20412:508;;:::o;24086:431::-;24139:4;24145;24151;24157;24163;24169;24175;24181;24187;24193;10470:12;10485:10;10470:25;;10506:15;10570:4;10558:17;10544:31;;10608:1;10594:10;:15;10586:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:10;10650:23;;:9;:23;;;10642:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24232:3;;24250;;24268:9;;24292:11;;24318;;24344:12;:17;24357:3;;24344:17;;;;;;;;;;;;24376:12;:17;24389:3;;24376:17;;;;;;;;;;;;24408:11;;24434:5;:10;24440:3;;24434:10;;;;;;;;;;;:19;;;24468:5;:10;24474:3;;24468:10;;;;;;;;;;;:23;;:30;;;;24210:299;;;;;;;;;;;;;;;;;;;;24086:431;;;;;;;;;;;;:::o;11755:3096::-;10470:12;10485:10;10470:25;;10506:15;10570:4;10558:17;10544:31;;10608:1;10594:10;:15;10586:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:10;10650:23;;:9;:23;;;10642:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11899:11;:9;:11::i;:::-;11891:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11963:6;;11961:1;:8;11948:9;:21;;:47;;;;;11989:6;;11986:2;:9;11973;:22;;11948:47;11940:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12048:33;12074:6;;12048:21;12062:6;;12048:9;:13;;:21;;;;:::i;:::-;:25;;:33;;;;:::i;:::-;12035:9;:46;12027:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12116:29;12148:11;:23;12160:10;12148:23;;;;;;;;;;;;;;;12116:55;;12203:1;12186:10;:13;;;:18;12182:449;;;12230:26;12241:10;12230:26;;;;;;;;;;;;;:10;:26::i;:::-;12229:27;12221:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12293:20;12316:30;12337:8;12316:20;:30::i;:::-;12293:53;;12391:1;12374:12;12369:18;;:23;;12361:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12453:10;12437:26;;:12;:26;;;;12429:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12514:18;12521:10;12514:6;:18::i;:::-;12513:19;12505:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12573:46;12586:10;12598;12610:8;12573:12;:46::i;:::-;12182:449;;12643:17;12663:16;:21;12680:3;;12663:21;;;;;;;;;;;:33;12685:10;12663:33;;;;;;;;;;;;;;;12643:53;;12737:1;12716:4;:16;;;;;;;;;;;;12711:22;;:27;;12707:1043;;;12802:6;;12799:2;:9;12763:32;12785:9;12763:4;:17;;;:21;;:32;;;;:::i;:::-;:45;;12755:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12866:29;12885:9;12866:4;:14;;;:18;;:29;;;;:::i;:::-;12849:4;:14;;:46;;;;12930:32;12952:9;12930:4;:17;;;:21;;:32;;;;:::i;:::-;12910:4;:17;;:52;;;;12996:27;13005:4;:17;;;12996:8;:27::i;:::-;12977:4;:16;;:46;;;;13058:54;13071:40;13093:4;:17;;;13071:4;:17;;;:21;;:40;;;;:::i;:::-;13058:12;:54::i;:::-;13038:4;:17;;:74;;;;12707:1043;;;13155:10;:13;;;13145:4;:7;;:23;;;;13202:10;13183:4;:16;;;:29;;;;;;;;;;;;;;;;;;13247:9;13227:4;:17;;:29;;;;13290:19;13299:9;13290:8;:19::i;:::-;13271:4;:16;;:38;;;;13341:9;13324:4;:14;;:26;;;;13385:23;13398:9;13385:12;:23::i;:::-;13365:4;:17;;:43;;;;13441:10;:21;;13423:4;:15;;:39;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13493:10;:19;;13477:4;:13;;:35;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13534;13545:10;:19;;13534:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:35::i;:::-;13533:36;13529:210;;;13590:20;13613:41;13634:10;:19;;13613:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:41::i;:::-;13590:64;;13673:16;:21;13690:3;;13673:21;;;;;;;;;;;:35;13695:12;13673:35;;;;;;;;;;;;;;;:48;;;:50;;;;;;;;;;;;;13529:210;;12707:1043;13762:20;;:::i;:::-;13785:37;;;;;;;;;13792:10;13785:37;;;;;;13804:9;13785:37;;;;13815:3;13785:37;;;;13820:1;13785:37;;;13762:60;;13833:4;:12;;13851:6;13833:25;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13833:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13896:1;13875:12;:17;13888:3;;13875:17;;;;;;;;;;;;:22;;:127;;;;;13946:55;13994:6;;13946:43;13983:5;13946:32;13968:9;13946:12;:17;13959:3;;13946:17;;;;;;;;;;;;:21;;:32;;;;:::i;:::-;:36;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;13902:40;13935:6;;13902:28;13924:5;13902:12;:17;13915:3;;13902:17;;;;;;;;;;;;:21;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;:99;;13875:127;13871:520;;;14019:13;14047:14;14100:36;14116:5;:10;14122:3;;14116:10;;;;;;;;;;;:19;;;14100:15;:36::i;:::-;14076:60;;;;;;;;14167:1;14155:9;:13;14151:92;;;14189:38;14205:10;14217:9;14189:15;:38::i;:::-;14151:92;14279:1;14257:5;:10;14263:3;;14257:10;;;;;;;;;;;:19;;:23;;;;14300:8;14299:9;14295:85;;;14329:10;:8;:10::i;:::-;14358:7;;;;;;;14295:85;13871:520;;;14417:18;14433:1;14417:11;;:15;;:18;;;;:::i;:::-;14403:11;:32;;;;14460:26;14476:9;14460:11;;:15;;:26;;;;:::i;:::-;14446:11;:40;;;;14517:24;14539:1;14517:12;:17;14530:3;;14517:17;;;;;;;;;;;;:21;;:24;;;;:::i;:::-;14497:12;:17;14510:3;;14497:17;;;;;;;;;;;:44;;;;14572:32;14594:9;14572:12;:17;14585:3;;14572:17;;;;;;;;;;;;:21;;:32;;;;:::i;:::-;14552:12;:17;14565:3;;14552:17;;;;;;;;;;;:52;;;;14637:51;14661:26;14682:4;14661:16;14675:1;14661:9;:13;;:16;;;;:::i;:::-;:20;;:26;;;;:::i;:::-;14637:5;:10;14643:3;;14637:10;;;;;;;;;;;:19;;;:23;;:51;;;;:::i;:::-;14615:5;:10;14621:3;;14615:10;;;;;;;;;;;:19;;:73;;;;14701:25;14716:9;14701:14;:25::i;:::-;14766:10;:13;;;14754:10;14742:101;;;14781:9;14792:3;14797:10;:21;;14820:10;:19;;14841:1;14742:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10706:1;;;;11755:3096;;;;:::o;8037:95::-;8089:35;8111:12;:10;:12::i;:::-;8089:21;:35::i;:::-;8037:95::o;23627:155::-;23683:4;23700:12;23715:26;23736:4;23715:20;:26::i;:::-;23700:41;;23773:1;23764:4;23759:10;;:15;;23752:22;;;23627:155;;;:::o;7868:161::-;4619:9;:7;:9::i;:::-;4611:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7943:32;7967:7;7943:16;:23;;:32;;;;:::i;:::-;8013:7;7991:30;;;;;;;;;;;;7868:161;:::o;5218:140::-;4619:9;:7;:9::i;:::-;4611:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5317:1;5280:40;;5301:6;;;;;;;;;;;5280:40;;;;;;;;;;;;5348:1;5331:6;;:19;;;;;;;;;;;;;;;;;;5218:140::o;7744:116::-;7471:30;7488:12;:10;:12::i;:::-;7471:16;:30::i;:::-;:43;;;;7505:9;:7;:9::i;:::-;7471:43;7463:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7825:27;7844:7;7825:18;:27::i;:::-;7744:116;:::o;25915:125::-;25978:7;26005:5;:11;26011:4;26005:11;;;;;;;;;;;:24;;26030:1;26005:27;;;;;;;;;;;;;;;;;;;;;;;;;;;25998:34;;25915:125;;;;:::o;4407:79::-;4445:7;4472:6;;;;;;;;;;;4465:13;;4407:79;:::o;4773:94::-;4813:4;4853:6;;;;;;;;;;;4837:22;;:12;:10;:12::i;:::-;:22;;;4830:29;;4773:94;:::o;18721:146::-;18800:4;7471:30;7488:12;:10;:12::i;:::-;7471:16;:30::i;:::-;:43;;;;7505:9;:7;:9::i;:::-;7471:43;7463:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18829:30;18850:8;18829:20;:30::i;:::-;18822:37;;18721:146;;;:::o;17537:787::-;10470:12;10485:10;10470:25;;10506:15;10570:4;10558:17;10544:31;;10608:1;10594:10;:15;10586:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:10;10650:23;;:9;:23;;;10642:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17622:11;:9;:11::i;:::-;17614:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17663:17;17683:16;:21;17700:3;;17683:21;;;;;;;;;;;:33;17705:10;17683:33;;;;;;;;;;;;;;;17663:53;;17727:14;17744:47;17769:4;:21;;;17744:4;:20;;;:24;;:47;;;;:::i;:::-;17727:64;;17804:13;17820:5;17804:21;;17836:16;17855:1;17836:20;;17893:26;17909:9;17893:15;:26::i;:::-;17867:52;;;;;;;;17948:1;17934:11;:15;17930:323;;;17966:57;17982:10;17994:28;18018:3;17994:19;18010:2;17994:11;:15;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;17966:15;:57::i;:::-;18038:10;;;;;;;;;;;:19;;:48;18058:27;18081:3;18058:18;18074:1;18058:11;:15;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;18038:48;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18038:48:0;18124:1;18101:4;:20;;:24;;;;18164:1;18140:4;:21;;:25;;;;18215:4;:7;;;18203:10;18185:56;;;18224:11;18237:3;18185:56;;;;;;;;;;;;;;;;;;;;;;;;17930:323;18270:8;18269:9;18265:52;;;18295:10;:8;:10::i;:::-;18265:52;10706:1;;;;17537:787;;:::o;23790:125::-;23860:7;23887:14;23902:4;23887:20;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;23887:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23880:27;;23790:125;;;:::o;20928:172::-;4619:9;:7;:9::i;:::-;4611:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:40;21065:4;21071:10;;21052:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;21052:40:0;;;;;;21083:8;;21052:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;21052:40:0;;;;;;:12;:40::i;:::-;20928:172;;;;;:::o;10263:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;7611:125::-;7675:4;7699:29;7720:7;7699:16;:20;;:29;;;;:::i;:::-;7692:36;;7611:125;;;:::o;22535:935::-;10470:12;10485:10;10470:25;;10506:15;10570:4;10558:17;10544:31;;10608:1;10594:10;:15;10586:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:10;10650:23;;:9;:23;;;10642:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22612:11;:9;:11::i;:::-;22604:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22653:17;22673:16;:21;22690:3;;22673:21;;;;;;;;;;;:33;22695:10;22673:33;;;;;;;;;;;;;;;22653:53;;22735:1;22725:4;:7;;;:11;22717:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22768:32;22789:10;22768:20;:32::i;:::-;;22813:14;22830:4;:17;;;22813:34;;22860:13;22876:5;22860:21;;22892:16;22911:1;22892:20;;22951:26;22967:9;22951:15;:26::i;:::-;22925:52;;;;;;;;23006:1;22992:11;:15;22988:321;;;23024:40;23040:10;23052:11;23024:15;:40::i;:::-;23099:1;23079:4;:17;;:21;;;;23134:27;23143:4;:17;;;23134:8;:27::i;:::-;23115:4;:16;;:46;;;;23196:31;23209:4;:17;;;23196:12;:31::i;:::-;23176:4;:17;;:51;;;;23271:4;:7;;;23259:10;23249:48;;;23280:11;23293:3;23249:48;;;;;;;;;;;;;;;;;;;;;;;;22988:321;23346:2;23325:4;:18;;;:23;23321:78;;;23386:1;23365:4;:18;;:22;;;;23321:78;23416:8;23415:9;23411:52;;;23441:10;:8;:10::i;:::-;23411:52;10706:1;;;;22535:935;;:::o;11315:156::-;7471:30;7488:12;:10;:12::i;:::-;7471:16;:30::i;:::-;:43;;;;7505:9;:7;:9::i;:::-;7471:43;7463:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11405:3;11398:4;:10;11390:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11459:4;11447:9;:16;;;;11315:156;:::o;26048:544::-;26117:4;26139:16;;:::i;:::-;26158;:21;26175:3;;26158:21;;;;;;;;;;;:31;26180:8;26158:31;;;;;;;;;;;;;;;26139:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26200:14;26217:4;:17;;;26200:34;;26250:6;26259:4;:15;;;26250:24;;26245:313;26280:4;:12;;;:19;26276:1;:23;26245:313;;;26321:20;;:::i;:::-;26344:4;:12;;;26357:1;26344:15;;;;;;;;;;;;;;;;;;26321:38;;26374:14;26391:38;26422:6;26391:26;26399:6;:17;;;26391:3;:7;;:26;;;;:::i;:::-;:30;;:38;;;;:::i;:::-;26374:55;;26463:1;26450:9;:14;;26446:101;;;26497:34;26511:6;:19;;;26497:9;:13;;:34;;;;:::i;:::-;26485:46;;26446:101;26245:313;;26301:3;;;;;;;26245:313;;;;26575:9;26568:16;;;;26048:544;;;:::o;5513:109::-;4619:9;:7;:9::i;:::-;4611:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5586:28;5605:8;5586:18;:28::i;:::-;5513:109;:::o;24525:1382::-;24622:18;;:::i;:::-;24642:24;24668:22;10470:12;10485:10;10470:25;;10506:15;10570:4;10558:17;10544:31;;10608:1;10594:10;:15;10586:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:10;10650:23;;:9;:23;;;10642:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24725:1;24714:7;:12;24711:56;;;24752:3;;24742:13;;24711:56;24779:20;;:::i;:::-;24802:16;:25;24819:7;24802:25;;;;;;;;;;;:31;24828:4;24802:31;;;;;;;;;;;;;;;24779:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24854:8;:11;;;24846:2;24849:1;24846:5;;;;;;;;;;;;:19;;;;;24884:8;:20;;;24876:2;24879:1;24876:5;;;;;;;;;;;;:28;;;;;24923:8;:21;;;24915:2;24918:1;24915:5;;;;;;;;;;;;:29;;;;;24963:8;:18;;;24955:2;24958:1;24955:5;;;;;;;;;;;;:26;;;;;25000:8;:21;;;24992:2;24995:1;24992:5;;;;;;;;;;;;:29;;;;;25040:8;:21;;;25032:2;25035:1;25032:5;;;;;;;;;;;;:29;;;;;25080:8;:24;;;25072:2;25075:1;25072:5;;;;;;;;;;;;:32;;;;;25123:8;:25;;;25115:2;25118:1;25115:5;;;;;;;;;;;;:33;;;;;25167:8;:24;;;25159:2;25162:1;25159:5;;;;;;;;;;;;:32;;;;;25210:8;:25;;;25202:2;25205:1;25202:5;;;;;;;;;;;;:33;;;;;25255:8;:21;;;25246:2;25249;25246:6;;;;;;;;;;;;:30;;;;;25296:8;:22;;;25287:2;25290;25287:6;;;;;;;;;;;;:31;;;;;25338:8;:19;;;25329:2;25332;25329:6;;;;;;;;;;;;:28;;;;;25377:8;:16;;;:23;25368:2;25371;25368:6;;;;;;;;;;;;:32;;;;;25425:1;25415:2;25418;25415:6;;;;;;;;;;;;;:11;;25411:281;;;25452:8;:16;;;25469:1;25452:19;;;;;;;;;;;;;;;;;;:32;;;25443:2;25446;25443:6;;;;;;;;;;;;:41;;;;;25508:8;:16;;;25525:1;25508:19;;;;;;;;;;;;;;;;;;:30;;;25499:2;25502;25499:6;;;;;;;;;;;;:39;;;;;25562:8;:16;;;25579:1;25562:19;;;;;;;;;;;;;;;;;;:25;;;25553:2;25556;25553:6;;;;;;;;;;;;:34;;;;;25411:281;;;25629:1;25620:2;25623;25620:6;;;;;;;;;;;;:10;;;;;25654:1;25645:2;25648;25645:6;;;;;;;;;;;;:10;;;;;25679:1;25670:2;25673;25670:6;;;;;;;;;;;;:10;;;;;25411:281;25727:11;:17;25739:4;25727:17;;;;;;;;;;;;;;;:28;;25714:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25777:11;:17;25789:4;25777:17;;;;;;;;;;;;;;;:26;;25766:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25838:2;25855:10;25880:8;25816:83;;;;;;;24525:1382;;;;;;;;;:::o;3249:90::-;3294:7;3321:10;3314:17;;3249:90;:::o;11640:107::-;11682:4;11719:1;11706:9;;:14;;:33;;;;;11730:9;;11724:3;:15;11706:33;11699:40;;11640:107;:::o;18875:1529::-;18939:4;18961:17;18981:16;:21;18998:3;;18981:21;;;;;;;;;;;:31;19003:8;18981:31;;;;;;;;;;;;;;;18961:51;;19038:1;19027:4;:7;;;:12;19023:53;;;19063:1;19056:8;;;;;19023:53;19088:10;19101:30;19114:4;:16;;;19101:12;:30::i;:::-;19088:43;;19142:14;19159:1;19142:18;;19176:6;19185:4;:15;;;19176:24;;19171:993;19206:4;:12;;:19;;;;19202:1;:23;19171:993;;;19247:21;19271:4;:12;;19284:1;19271:15;;;;;;;;;;;;;;;;;;;;19247:39;;19301:13;19317:54;19364:6;19317:42;19352:6;19317:30;19339:7;19317:6;:17;;;:21;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;:46;;:54;;;;:::i;:::-;19301:70;;19386:15;19404:42;19439:6;19404:30;19425:8;19404:16;19412:7;19404:3;:7;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;:34;;:42;;;;:::i;:::-;19386:60;;19463:14;19480:38;19511:6;19480:26;19488:6;:17;;;19480:3;:7;;:26;;;;:::i;:::-;:30;;:38;;;;:::i;:::-;19463:55;;19551:1;19538:10;:14;19535:67;;;19585:1;19572:14;;19535:67;19633:6;:12;;;19620:10;:25;19616:197;;;19679:74;19748:4;19679:64;19723:6;:19;;;19679:39;19712:5;19679:28;19694:6;:12;;;19679:10;:14;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;:68;;:74;;;;:::i;:::-;19666:87;;;;19787:10;19772:6;:12;;:25;;;;19616:197;19846:1;19833:9;:14;;19829:322;;;19886:22;19906:1;19886:4;:15;;;:19;;:22;;;;:::i;:::-;19868:4;:15;;:40;;;;19947:42;19969:6;:19;;;19947:4;:17;;;:21;;:42;;;;:::i;:::-;19927:4;:17;;:62;;;;20028:42;20050:6;:19;;;20028:4;:17;;;:21;;:42;;;;:::i;:::-;20008:4;:17;;:62;;;;20108:27;20117:4;:17;;;20108:8;:27::i;:::-;20089:4;:16;;:46;;;;19829:322;19171:993;;;;19227:3;;;;;;;19171:993;;;;20186:34;20217:2;20186:26;20200:11;;20186:9;:13;;:26;;;;:::i;:::-;:30;;:34;;;;:::i;:::-;20174:46;;20254:35;20279:9;20254:4;:20;;;:24;;:35;;;;:::i;:::-;20231:4;:20;;:58;;;;20323:35;20348:9;20323:4;:20;;;:24;;:35;;;;:::i;:::-;20300:4;:20;;:58;;;;20376:4;:20;;;20369:27;;;;;18875:1529;;;;:::o;28467:162::-;28525:7;28545:9;28561:1;28557;:5;28545:17;;28586:1;28581;:6;;28573:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28620:1;28613:8;;;28467:162;;;;:::o;28221:170::-;28279:7;28312:1;28307;:6;;28299:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28345:9;28361:1;28357;:5;28345:17;;28382:1;28375:8;;;28221:170;;;;:::o;27217:449::-;27275:7;27524:1;27519;:6;27515:47;;;27549:1;27542:8;;;;27515:47;27574:9;27590:1;27586;:5;27574:17;;27619:1;27614;27610;:5;;;;;;;;:10;27602:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27657:1;27650:8;;;27217:449;;;;;:::o;27789:306::-;27847:7;27879:1;27875;:5;27867:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27962:9;27978:1;27974;:5;;;;;;;;27962:17;;28086:1;28079:8;;;27789:306;;;;:::o;18332:253::-;18395:4;18401;18442;18434:21;;;18421:9;:34;;18417:161;;;18480:5;18495:4;18487:21;;;18472:37;;;;;;18417:161;18550:4;18556:9;18542:24;;;;18332:253;;;;:::o;18593:120::-;18678:11;:20;;:27;18699:5;18678:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18678:27:0;18593:120;;:::o;23478:141::-;23517:3;;:5;;;;;;;;;;;;;23545:39;23577:6;23545:27;23565:6;23545:15;23553:6;;23545:3;:7;;:15;;;;:::i;:::-;:19;;:27;;;;:::i;:::-;:31;;:39;;;;:::i;:::-;23533:9;:51;;;;23609:2;23595:11;:16;;;;23478:141::o;86:355::-;138:4;170:6;;168:1;:8;159:5;:17;;:38;;;;;191:6;;189:1;:8;180:5;:17;;159:38;155:79;;;221:1;214:8;;;;155:79;259:6;;257:1;:8;248:5;:17;;:39;;;;;281:6;;278:2;:9;269:5;:18;;248:39;244:80;;;311:1;304:8;;;;244:80;350:6;;347:2;:9;338:5;:18;;:40;;;;;372:6;;369:2;:9;360:5;:18;;338:40;334:81;;;402:1;395:8;;;;334:81;432:1;425:8;;86:355;;;;:::o;449:337::-;505:4;537:6;;535:1;:8;526:5;:17;;:38;;;;;558:6;;556:1;:8;547:5;:17;;526:38;522:79;;;588:1;581:8;;;;522:79;626:6;;624:1;:8;615:5;:17;;:39;;;;;648:6;;645:2;:9;636:5;:18;;615:39;611:80;;;678:1;671:8;;;;611:80;717:6;;714:2;:9;705:5;:18;;701:59;;;747:1;740:8;;;;701:59;777:1;770:8;;449:337;;;;:::o;23923:155::-;23979:7;;;;;;;;;;;:16;;:40;23996:22;24014:3;23996:13;24007:1;23996:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;23979:40;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23979:40:0;24030:6;;;;;;;;;;;:15;;:40;24046:23;24064:4;24046:13;24057:1;24046:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;24030:40;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24030:40:0;23923:155;:::o;794:273::-;850:4;880:1;871:5;:10;867:51;;;905:1;898:8;;;;867:51;941:1;932:5;:10;928:51;;;966:1;959:8;;;;928:51;1002:1;993:5;:10;989:52;;;1027:2;1020:9;;;;989:52;1058:1;1051:8;;794:273;;;;:::o;21108:1419::-;21207:25;21235:8;21207:36;;21269:6;21278:1;21269:10;;21264:1256;21286:2;21281:1;:7;;21264:1256;;;21314:27;21325:11;21314:27;;;;;;;;;;;;;:10;:27::i;:::-;21310:73;;;21362:5;;21310:73;21397:19;21419:14;21434:11;21419:27;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21419:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21397:49;;21461:20;21484:16;:21;21501:3;;21484:21;;;;;;;;;;;:34;21506:11;21484:34;;;;;;;;;;;;;;;21461:57;;21547:11;21561:38;21578:7;:20;;;21561:16;:38::i;:::-;21547:52;;21614:16;21633:55;21664:7;:20;;;21686:1;21633:30;:55::i;:::-;21614:74;;21703:16;21722:1;21703:20;;21751:46;21776:7;:20;;;21751:7;:20;;;:24;;:46;;;;:::i;:::-;21742:5;:55;;21738:216;;;21832:5;21818:19;;21738:216;;;21892:46;21917:7;:20;;;21892:7;:20;;;:24;;:46;;;;:::i;:::-;21878:60;;21738:216;22001:1;21986:11;:16;;21982:480;;;22023:21;22047:53;22088:11;22047:36;22076:6;22047:24;22063:7;22047:11;:15;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;22023:77;;22138:43;22177:3;22138:34;22169:2;22138:26;22159:4;22138:16;:20;;:26;;;;:::i;:::-;:30;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;22119:62;;22221:41;22259:2;22221:33;22242:11;;22221:16;:20;;:33;;;;:::i;:::-;:37;;:41;;;;:::i;:::-;22202:60;;22308:46;22337:16;22308:7;:24;;;:28;;:46;;;;:::i;:::-;22281:7;:24;;:73;;;;22400:46;22429:16;22400:7;:24;;;:28;;:46;;;;:::i;:::-;22373:7;:24;;:73;;;;21982:480;;22492:7;:16;;22478:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21264:1256;;;;;21290:3;;;;;;;21264:1256;;;;21108:1419;;;;:::o;2224:241::-;2305:4;2390:3;2373:21;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2373:21:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2373:21:0;;;2363:32;;;;;;2353:4;2336:22;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2336:22:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2336:22:0;;;2326:33;;;;;;:69;2322:113;;;2419:4;2412:11;;;;2322:113;2452:5;2445:12;;2224:241;;;;;:::o;26600:415::-;26705:29;26737:11;:17;26749:4;26737:17;;;;;;;;;;;;;;;26705:49;;26765:3;;:5;;;;;;;;;;;;;26797:3;;26781:10;:13;;:19;;;;26836:4;26811:10;:22;;;:29;;;;;;;;;;;;;;;;;;26875:10;26851;:21;;:34;;;;;;;;;;;;:::i;:::-;;26918:8;26896:10;:19;;:30;;;;;;;;;;;;:::i;:::-;;26968:4;26939:14;26954:10;26939:26;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;26939:26:0;;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27003:4;26983:12;:17;26996:3;;26983:17;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;26600:415;;;;:::o;8294:154::-;8362:32;8386:7;8362:16;:23;;:32;;;;:::i;:::-;8432:7;8410:30;;;;;;;;;;;;8294:154;:::o;6469:183::-;6549:18;6553:4;6559:7;6549:3;:18::i;:::-;6541:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6639:5;6616:4;:11;;:20;6628:7;6616:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6469:183;;:::o;8140:146::-;8205:29;8226:7;8205:16;:20;;:29;;;;:::i;:::-;8270:7;8250:28;;;;;;;;;;;;8140:146;:::o;6747:203::-;6819:4;6863:1;6844:21;;:7;:21;;;;6836:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6922:4;:11;;:20;6934:7;6922:20;;;;;;;;;;;;;;;;;;;;;;;;;6915:27;;6747:203;;;;:::o;5728:229::-;5822:1;5802:22;;:8;:22;;;;5794:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5912:8;5883:38;;5904:6;;;;;;;;;;;5883:38;;;;;;;;;;;;5941:8;5932:6;;:17;;;;;;;;;;;;;;;;;;5728:229;:::o;1075:277::-;1135:4;1165:1;1156:5;:10;1152:51;;;1190:1;1183:8;;;;1152:51;1226:1;1217:5;:10;1213:51;;;1251:1;1244:8;;;;1213:51;1287:1;1278:5;:10;1274:52;;;1312:2;1305:9;;;;1274:52;1343:1;1336:8;;1075:277;;;;:::o;1360:856::-;1445:4;1474:1;1465:5;:10;:24;;;;;1488:1;1479:5;:10;1465:24;1461:66;;;1513:2;1506:9;;;;1461:66;1550:1;1541:5;:10;:24;;;;;1564:1;1555:5;:10;1541:24;1537:66;;;1589:2;1582:9;;;;1537:66;1626:1;1617:5;:10;:24;;;;;1640:1;1631:5;:10;1617:24;1613:66;;;1665:2;1658:9;;;;1613:66;1702:1;1693:5;:10;1689:501;;;1732:1;1723:5;:10;1720:59;;;1760:3;1753:10;;;;1720:59;1806:1;1797:5;:10;1793:60;;;1835:2;1828:9;;;;1793:60;1880:1;1871:5;:10;1867:60;;;1909:2;1902:9;;;;1867:60;1954:1;1945:5;:10;;:25;;;;;1968:2;1959:5;:11;;1945:25;1941:75;;;1998:2;1991:9;;;;1941:75;2043:2;2034:5;:11;;:26;;;;;2058:2;2049:5;:11;;2034:26;2030:75;;;2088:1;2081:8;;;;2030:75;2132:2;2123:5;:11;;2119:60;;;2162:1;2155:8;;;;2119:60;1689:501;2207:1;2200:8;;1360:856;;;;;:::o;6211:178::-;6289:18;6293:4;6299:7;6289:3;:18::i;:::-;6288:19;6280:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6377:4;6354;:11;;:20;6366:7;6354:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;6211:178;;:::o;8455:18563::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8455:18563:0;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://891074fe40c9b1a576414b1bec14ac538ddc352675fb60a5ef6cee8b98103b41
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
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.