- Contract name:
- Hfgghfg
- Optimization enabled
- true
- Compiler version
- v0.8.16+commit.07a7930e
- Optimization runs
- 200
- Verified at
- 2023-06-17T11:32:03.869839Z
Constructor Arguments
00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000188c91f056f0000000000000000000000000000000000000000000000000000018968fb162800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000a
Arg [0] (uint8) : 5
Arg [1] (uint256) : 100000000000000000000
Arg [2] (uint32) : 1000
Arg [3] (uint256) : 1687001433455
Arg [4] (uint256) : 1689683433000
Arg [5] (uint8[]) : [50, 30, 20]
Arg [6] (uint8[]) : [60, 30, 10]
Contract source code
// created by cryptodo.app // _____ _ _____ // / ____| | | | __ \ // | | _ __ _ _ _ __ | |_ ___ | | | | ___ // | | | '__|| | | || '_ \ | __|/ _ \ | | | | / _ \ // | |____ | | | |_| || |_) || |_| (_) || |__| || (_) | // \_____||_| \__, || .__/ \__|\___/ |_____/ \___/ // __/ || | // |___/ |_| // SPDX-License-Identifier: MIT // www.cryptodo.app pragma solidity 0.8.16; contract Hfgghfg { address devAddress=0x1C8B6988Eb92E03e6796356e8D63d0877Cd30c21; uint8 constant refFee=5; uint8 immutable ownerFee; address feeAddress=devAddress; uint8 withdrawFee=5; address public owner; uint8 devFee=5; constructor (uint8 ownerFee_, uint ticketsPrice_, uint32 ticketsAmount_, uint startTime_, uint endTime_, uint8[] memory winnersPercentage_, uint8[] memory valuePercentage_) payable { require(ownerFee_<31,"set fee no more than 30"); owner = msg.sender; ownerFee=ownerFee_; createBlock(ticketsPrice_,ticketsAmount_,startTime_,endTime_,winnersPercentage_,valuePercentage_); } modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; } modifier onlyDev() { require(msg.sender == devAddress, "Not dev"); _; } struct LotteryBlock { mapping (uint=>address) ticketsOwner; mapping (uint=>uint8) ticketWon; uint8 [] winnersPercentage; uint8 [] valuePercentage; address[] members; uint32 ticketsWonAmount; uint32 ticketsAmount; uint32 ticketsBought; uint ticketsPrice; uint startTime; uint surplus; uint endTime; bool ended; uint pot; uint addPot; uint32 currentWinner; uint32 currentRefund; } struct userBlock{ mapping (uint32=>uint32) ticketsAmount; mapping (uint32=>uint32) wonticketsAmount; address inviter; uint balance; bool registered; } mapping (uint32=>LotteryBlock) public BlockID; mapping (address=>userBlock) private UserID; uint32 public ID; uint private counter; event CreateLottery (uint32 ID, uint StartTime, uint EndTime); event Winner (uint32 ID,uint Ticket,uint PrizeValue); event TicketsBought (address User,uint32 Amount); event Withdraw (address User, uint Amount); event EndLottery (uint32 ID,uint EndTime); //_____________________________________________________________________________________________________________________________________________________________________________________________ function createBlock (uint ticketsPrice_, uint32 ticketsAmount_, uint startTime_, uint endTime_, uint8[] memory winnersPercentage_, uint8[] memory valuePercentage_) payable public onlyOwner { require(winnersPercentage_.length==valuePercentage_.length,"array's length must be equal to"); require(startTime_<endTime_,"start time must be more than end time"); require(winnersPercentage_.length>0,"choose percentage of winners"); require(ticketsAmount_>9,"tickets amount must be more than ten"); require(winnersPercentage_.length<101,"Enter fewer winners"); bool sent=payable(devAddress).send(msg.value*devFee/100); require(sent,"Send is failed"); BlockID[ID].addPot+=msg.value-(msg.value*devFee/100); BlockID[ID].pot+=msg.value-(msg.value*devFee/100); uint16 winnerPercentage; uint16 totalPercentage; for(uint i=0;i<valuePercentage_.length;i++){ totalPercentage+=valuePercentage_[i]; winnerPercentage+=winnersPercentage_[i]; require(valuePercentage_[i]>0 && winnersPercentage_[i]>0,"need to set percentage above zero"); if (ticketsAmount_<100) require(winnersPercentage_[i]>9,"set percentage above 9"); } require(totalPercentage==100 && winnerPercentage<101,"requires the correct ratio of percentages"); BlockID[ID].startTime=startTime_+block.timestamp; BlockID[ID].winnersPercentage=winnersPercentage_; BlockID[ID].valuePercentage=valuePercentage_; BlockID[ID].endTime=endTime_+block.timestamp; BlockID[ID].ticketsPrice=ticketsPrice_; BlockID[ID].ticketsAmount=ticketsAmount_; emit CreateLottery(ID,startTime_+block.timestamp,endTime_+block.timestamp); ID++; } function addValue(uint32 ID_) external payable onlyOwner { require(BlockID[ID_].startTime<block.timestamp && !BlockID[ID_].ended,"Lottery didn't started or already ended"); require(msg.value>100,"set more than 100 wei"); bool sent=payable(devAddress).send(msg.value*devFee/100); require(sent,"Send is failed"); BlockID[ID_].addPot+=msg.value-(msg.value*devFee/100); BlockID[ID_].pot+=msg.value-(msg.value*devFee/100); } function endBlock(uint32 ID_) external onlyOwner { require(BlockID[ID_].currentRefund==0 && BlockID[ID_].currentWinner==0,"You should refund money or set amount of winners"); require(BlockID[ID_].endTime<block.timestamp,"Lottery are still running"); require(BlockID[ID_].startTime>0,"Lottery didn't started"); require(!BlockID[ID_].ended,"Lottery is over,gg"); setWinners(ID_); } function refundMoney(uint32 ID_,uint32 amount) external onlyOwner { require(!BlockID[ID_].ended,"lottery is over"); BlockID[ID_].surplus=BlockID[ID_].pot; moneyBack(ID_,amount); BlockID[ID_].ended=true; } //_____________________________________________________________________________________________________________________________________________________________________________________________ function changeFeeAddress(address feeAddress_) external onlyDev { feeAddress=feeAddress_; } function changeDevAddress(address devAddress_) external onlyDev { devAddress=devAddress_; } function chagneFeeValue (uint8 withdrawFee_) external onlyDev { require(withdrawFee_<6,"set less than 6%"); withdrawFee=withdrawFee_; } function setDevFee (uint8 devFee_) external onlyDev { require(devFee_>0,"set above 0"); devFee=devFee_; } //_____________________________________________________________________________________________________________________________________________________________________________________________ function setWinners(uint32 ID_) private { require(!BlockID[ID_].ended,"lottery is over"); require(BlockID[ID_].currentWinner==0,"use staged completion"); uint32 ticketsBought=BlockID[ID_].ticketsBought; uint32 winnersAmount; uint8[] memory valuePercentage_=BlockID[ID_].valuePercentage; BlockID[ID_].surplus=BlockID[ID_].pot; if (ticketsBought>0){ if (ticketsBought<10) moneyBack(ID_,30); else{ unchecked{ for (uint i=0;i<valuePercentage_.length;i++){ winnersAmount=ticketsBought*BlockID[ID_].winnersPercentage[i]/100; if(winnersAmount<1) winnersAmount=1; uint prizeValue=(BlockID[ID_].pot*valuePercentage_[i]/100)/winnersAmount; setTickets(winnersAmount,prizeValue,ID_); } } } if(BlockID[ID_].surplus>0) refundSurplus(ID_); } BlockID[ID_].ended=true; emit EndLottery(ID_,block.timestamp); } function refundSurplus(uint32 ID_) private { UserID[owner].balance+=BlockID[ID_].surplus; BlockID[ID_].surplus=0; } function setTickets (uint32 winnersAmount_, uint prizeValue_,uint32 ID_) private { uint prize; bool newTicket; unchecked{ for (uint32 a=0;a<winnersAmount_;a++){ uint wonTicket; newTicket=false; while (!newTicket){ wonTicket = random(BlockID[ID_].ticketsBought)+1; if (BlockID[ID_].ticketWon[wonTicket]!=1) newTicket=true; } UserID[BlockID[ID_].ticketsOwner[wonTicket]].balance+=prizeValue_; UserID[BlockID[ID_].ticketsOwner[wonTicket]].wonticketsAmount[ID_]++; BlockID[ID_].ticketWon[wonTicket]=1; emit Winner(ID_,wonTicket,prizeValue_); } BlockID[ID_].ticketsWonAmount+=winnersAmount_; prize+=prizeValue_*winnersAmount_; } BlockID[ID_].surplus-=prize; } function setAmountOfWinners(uint32 amount_,uint32 ID_) external onlyOwner { require(BlockID[ID_].endTime<block.timestamp,"Lottery are still running"); require(BlockID[ID_].currentRefund==0,"You started refund"); require(BlockID[ID_].startTime>0,"Lottery didn't started"); require(!BlockID[ID_].ended,"Lottery is over"); uint32[] memory winnersCounter_= new uint32[](BlockID[ID_].winnersPercentage.length); uint [] memory value_= new uint[](BlockID[ID_].winnersPercentage.length); uint8 [] memory winnerPercentage=BlockID[ID_].winnersPercentage; uint32 ticketsBought=BlockID[ID_].ticketsBought; uint32 crWinner = BlockID[ID_].currentWinner; uint32 counter_=amount_; for (uint8 i=0; i<winnersCounter_.length;i++){ if (i>0) winnersCounter_[i]=winnersCounter_[i-1]+ticketsBought*winnerPercentage[i]/100; else winnersCounter_[i]=ticketsBought*winnerPercentage[i]/100; if(winnersCounter_[i]<1) winnersCounter_[i]=1; value_[i]=(BlockID[ID_].pot*BlockID[ID_].valuePercentage[i]/100)/(ticketsBought*winnerPercentage[i]/100); } for (uint8 l=0; l<winnersCounter_.length;l++){ if (crWinner>=winnersCounter_[l]) continue; if (crWinner+counter_>winnersCounter_[l] && crWinner+counter_>counter) { setTickets((winnersCounter_[l]-crWinner),value_[l],ID_); counter_-=winnersCounter_[l]-crWinner; crWinner+=winnersCounter_[l]-crWinner; } else { setTickets(counter_,value_[l],ID_); counter_-=counter_; crWinner+=counter_; } if (crWinner==winnersCounter_[winnersCounter_.length-1]){ if(BlockID[ID_].surplus>0) refundSurplus(ID_); BlockID[ID_].ended=true; emit EndLottery(ID_,block.timestamp); break; } if (counter==0) break; } BlockID[ID_].currentWinner=crWinner; } function moneyBack(uint32 ID_, uint32 amount_) private { uint32 ticketsBought=BlockID[ID_].ticketsBought; uint256 ticketRefund=(BlockID[ID_].pot-BlockID[ID_].addPot)/ticketsBought; unchecked{ for (uint32 i=BlockID[ID_].currentRefund;i<BlockID[ID_].currentRefund+amount_;i++){ UserID[BlockID[ID_].members[i]].balance+=ticketRefund*UserID[BlockID[ID_].members[i]].ticketsAmount[ID_]; if(i==BlockID[ID_].members.length-1){ BlockID[ID_].surplus-=ticketRefund*ticketsBought; BlockID[ID_].currentRefund=i; break; } } BlockID[ID_].surplus-=ticketRefund*ticketsBought; if(BlockID[ID_].surplus>0) refundSurplus(ID_); BlockID[ID_].currentRefund+=amount_; } } function random(uint num) private returns(uint){ counter++; return uint(keccak256(abi.encodePacked(block.number,counter, msg.sender))) % num; } //_____________________________________________________________________________________________________________________________________________________________________________________________ function accRegister(address inviter_) external { require(!UserID[msg.sender].registered,"Already registerd"); if (inviter_==address(0)) UserID[msg.sender].inviter=owner; else UserID[msg.sender].inviter=inviter_; UserID[msg.sender].registered=true; } function buyTickets(uint32 amount,uint32 ID_) external payable { require(BlockID[ID_].startTime<block.timestamp && BlockID[ID_].endTime>block.timestamp,"Lottery didn't started or already ended"); require(UserID[msg.sender].registered,"Wallet not registered"); require(amount>0,"You need to buy at least 1 ticket"); require(msg.value==amount*BlockID[ID_].ticketsPrice,"Inncorect value"); require(amount+BlockID[ID_].ticketsBought<=BlockID[ID_].ticketsAmount,"Buy fewer tickets"); if(UserID[msg.sender].ticketsAmount[ID_]==0) BlockID[ID_].members.push(msg.sender); for (uint32 i=BlockID[ID_].ticketsBought+1;i<BlockID[ID_].ticketsBought+1+amount;i++){ BlockID[ID_].ticketsOwner[i]=msg.sender; } UserID[msg.sender].ticketsAmount[ID_]+=amount; BlockID[ID_].ticketsBought+=amount; BlockID[ID_].pot+=msg.value-(msg.value/100*devFee)-(msg.value*ownerFee/100)-(msg.value*refFee/100); UserID[UserID[msg.sender].inviter].balance+=msg.value*refFee/100; bool sent = payable(devAddress).send(msg.value*devFee/100); require(sent,"Send is failed"); UserID[owner].balance+=msg.value/100*ownerFee; emit TicketsBought(msg.sender,amount); if (BlockID[ID_].ticketsBought==BlockID[ID_].ticketsAmount) setWinners(ID_); } function withdraw() external { require(msg.sender!=address(0),"Zero address"); require(UserID[msg.sender].balance>0,"Nothing to withdraw"); uint amount = UserID[msg.sender].balance; UserID[msg.sender].balance=0; bool feeSent = payable(feeAddress).send(amount/20); require(feeSent,"Send is failed"); bool sent = payable(msg.sender).send(amount-amount/20); require(sent,"Send is failed"); emit Withdraw(msg.sender,amount); } //_____________________________________________________________________________________________________________________________________________________________________________________________ function checkLotteryPercentage(uint32 ID_) external view returns(uint8[] memory winnersPercentage,uint8[] memory valuePercentage){ return(BlockID[ID_].winnersPercentage,BlockID[ID_].valuePercentage); } function checkTickets(address user,uint32 ID_) external view returns (uint32[] memory tickets){ uint32[] memory tickets_ = new uint32[] (UserID[msg.sender].ticketsAmount[ID_]); uint32 a; uint32 amount=BlockID[ID_].ticketsBought; for (uint32 i=1;i<amount+1;i++){ if(BlockID[ID_].ticketsOwner[i]==user){ tickets_[a]=i; a++; } } return(tickets_); } function checkWonTickets(address user,uint32 ID_) external view returns (uint[] memory tickets){ uint[] memory wonTickets_ = new uint[] (UserID[user].wonticketsAmount[ID_]); uint32 allTickets = BlockID[ID_].ticketsBought; uint32 a; for (uint32 i=1;i<allTickets+1;i++){ if(BlockID[ID_].ticketWon[i]>0 && BlockID[ID_].ticketsOwner[i]==user){ wonTickets_[a]=i; a++; } } return(wonTickets_); } function checkBalance(address user) external view returns (uint balance){ return(UserID[user].balance); } function checkTicketOwner(uint32 ID_,uint32 ticket) external view returns(address user){ return(BlockID[ID_].ticketsOwner[ticket]); } function checkLotterysWinners(uint32 ID_) external view returns (uint[] memory winners){ uint[] memory wonTickets=new uint[](BlockID[ID_].ticketsWonAmount); uint32 a; for (uint32 i=1;i<BlockID[ID_].ticketsBought+1;i++){ if(BlockID[ID_].ticketWon[i]>0){ wonTickets[a]=i; a++; } } return(wonTickets); } function checkTicketPrice(uint32 ID_) external view returns (uint ticketsPrice){ return(BlockID[ID_].ticketsPrice); } function checkLotterysEnd(uint32 ID_) external view returns (uint endTime) { return(BlockID[ID_].endTime); } function checkLotterysPot(uint32 ID_) external view returns (uint pot) { return(BlockID[ID_].pot); } function checkID () external view returns (uint32 Id) { return (ID-1); } }
Contract ABI
[{"type":"constructor","stateMutability":"payable","inputs":[{"type":"uint8","name":"ownerFee_","internalType":"uint8"},{"type":"uint256","name":"ticketsPrice_","internalType":"uint256"},{"type":"uint32","name":"ticketsAmount_","internalType":"uint32"},{"type":"uint256","name":"startTime_","internalType":"uint256"},{"type":"uint256","name":"endTime_","internalType":"uint256"},{"type":"uint8[]","name":"winnersPercentage_","internalType":"uint8[]"},{"type":"uint8[]","name":"valuePercentage_","internalType":"uint8[]"}]},{"type":"event","name":"CreateLottery","inputs":[{"type":"uint32","name":"ID","internalType":"uint32","indexed":false},{"type":"uint256","name":"StartTime","internalType":"uint256","indexed":false},{"type":"uint256","name":"EndTime","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"EndLottery","inputs":[{"type":"uint32","name":"ID","internalType":"uint32","indexed":false},{"type":"uint256","name":"EndTime","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TicketsBought","inputs":[{"type":"address","name":"User","internalType":"address","indexed":false},{"type":"uint32","name":"Amount","internalType":"uint32","indexed":false}],"anonymous":false},{"type":"event","name":"Winner","inputs":[{"type":"uint32","name":"ID","internalType":"uint32","indexed":false},{"type":"uint256","name":"Ticket","internalType":"uint256","indexed":false},{"type":"uint256","name":"PrizeValue","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Withdraw","inputs":[{"type":"address","name":"User","internalType":"address","indexed":false},{"type":"uint256","name":"Amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"ticketsWonAmount","internalType":"uint32"},{"type":"uint32","name":"ticketsAmount","internalType":"uint32"},{"type":"uint32","name":"ticketsBought","internalType":"uint32"},{"type":"uint256","name":"ticketsPrice","internalType":"uint256"},{"type":"uint256","name":"startTime","internalType":"uint256"},{"type":"uint256","name":"surplus","internalType":"uint256"},{"type":"uint256","name":"endTime","internalType":"uint256"},{"type":"bool","name":"ended","internalType":"bool"},{"type":"uint256","name":"pot","internalType":"uint256"},{"type":"uint256","name":"addPot","internalType":"uint256"},{"type":"uint32","name":"currentWinner","internalType":"uint32"},{"type":"uint32","name":"currentRefund","internalType":"uint32"}],"name":"BlockID","inputs":[{"type":"uint32","name":"","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"ID","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"accRegister","inputs":[{"type":"address","name":"inviter_","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"addValue","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buyTickets","inputs":[{"type":"uint32","name":"amount","internalType":"uint32"},{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"chagneFeeValue","inputs":[{"type":"uint8","name":"withdrawFee_","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeDevAddress","inputs":[{"type":"address","name":"devAddress_","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeFeeAddress","inputs":[{"type":"address","name":"feeAddress_","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"checkBalance","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"Id","internalType":"uint32"}],"name":"checkID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8[]","name":"winnersPercentage","internalType":"uint8[]"},{"type":"uint8[]","name":"valuePercentage","internalType":"uint8[]"}],"name":"checkLotteryPercentage","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"endTime","internalType":"uint256"}],"name":"checkLotterysEnd","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"pot","internalType":"uint256"}],"name":"checkLotterysPot","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"winners","internalType":"uint256[]"}],"name":"checkLotterysWinners","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"user","internalType":"address"}],"name":"checkTicketOwner","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"},{"type":"uint32","name":"ticket","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"ticketsPrice","internalType":"uint256"}],"name":"checkTicketPrice","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32[]","name":"tickets","internalType":"uint32[]"}],"name":"checkTickets","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"tickets","internalType":"uint256[]"}],"name":"checkWonTickets","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"createBlock","inputs":[{"type":"uint256","name":"ticketsPrice_","internalType":"uint256"},{"type":"uint32","name":"ticketsAmount_","internalType":"uint32"},{"type":"uint256","name":"startTime_","internalType":"uint256"},{"type":"uint256","name":"endTime_","internalType":"uint256"},{"type":"uint8[]","name":"winnersPercentage_","internalType":"uint8[]"},{"type":"uint8[]","name":"valuePercentage_","internalType":"uint8[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"endBlock","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"refundMoney","inputs":[{"type":"uint32","name":"ID_","internalType":"uint32"},{"type":"uint32","name":"amount","internalType":"uint32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAmountOfWinners","inputs":[{"type":"uint32","name":"amount_","internalType":"uint32"},{"type":"uint32","name":"ID_","internalType":"uint32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDevFee","inputs":[{"type":"uint8","name":"devFee_","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]}]
Contract Creation Code
0x60a06040819052600080546001600160a01b031916731c8b6988eb92e03e6796356e8d63d0877cd30c211790556001805474051c8b6988eb92e03e6796356e8d63d0877cd30c216001600160a81b03199091161790556002805460ff60a01b1916600560a01b1790556200444c388190039081908339810160408190526200008791620009c4565b601f8760ff1610620000e05760405162461bcd60e51b815260206004820152601760248201527f73657420666565206e6f206d6f7265207468616e20333000000000000000000060448201526064015b60405180910390fd5b600280546001600160a01b0319163317905560ff87166080526200010986868686868662000116565b5050505050505062000b86565b6002546001600160a01b031633146200015e5760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401620000d7565b8051825114620001b15760405162461bcd60e51b815260206004820152601f60248201527f61727261792773206c656e677468206d75737420626520657175616c20746f006044820152606401620000d7565b828410620002105760405162461bcd60e51b815260206004820152602560248201527f73746172742074696d65206d757374206265206d6f7265207468616e20656e646044820152642074696d6560d81b6064820152608401620000d7565b6000825111620002635760405162461bcd60e51b815260206004820152601c60248201527f63686f6f73652070657263656e74616765206f662077696e6e657273000000006044820152606401620000d7565b60098563ffffffff1611620002c75760405162461bcd60e51b8152602060048201526024808201527f7469636b65747320616d6f756e74206d757374206265206d6f7265207468616e604482015263103a32b760e11b6064820152608401620000d7565b60658251106200031a5760405162461bcd60e51b815260206004820152601360248201527f456e7465722066657765722077696e6e657273000000000000000000000000006044820152606401620000d7565b600080546002546001600160a01b03909116906108fc906064906200034a90600160a01b900460ff163462000a92565b62000356919062000ab4565b6040518115909202916000818181858888f19350505050905080620003af5760405162461bcd60e51b815260206004820152600e60248201526d14d95b99081a5cc819985a5b195960921b6044820152606401620000d7565b600254606490620003cb90600160a01b900460ff163462000a92565b620003d7919062000ab4565b620003e3903462000ad7565b60055463ffffffff166000908152600360205260408120600c0180549091906200040f90849062000af3565b90915550506002546064906200043090600160a01b900460ff163462000a92565b6200043c919062000ab4565b62000448903462000ad7565b60055463ffffffff166000908152600360205260408120600b0180549091906200047490849062000af3565b909155506000905080805b845181101562000624578481815181106200049e576200049e62000b09565b602002602001015160ff1682620004b6919062000b1f565b9150858181518110620004cd57620004cd62000b09565b602002602001015160ff1683620004e5919062000b1f565b92506000858281518110620004fe57620004fe62000b09565b602002602001015160ff16118015620005365750600086828151811062000529576200052962000b09565b602002602001015160ff16115b6200058e5760405162461bcd60e51b815260206004820152602160248201527f6e65656420746f207365742070657263656e746167652061626f7665207a65726044820152606f60f81b6064820152608401620000d7565b60648963ffffffff1610156200060f576009868281518110620005b557620005b562000b09565b602002602001015160ff16116200060f5760405162461bcd60e51b815260206004820152601660248201527f7365742070657263656e746167652061626f76652039000000000000000000006044820152606401620000d7565b806200061b8162000b44565b9150506200047f565b508061ffff1660641480156200063e575060658261ffff16105b6200069e5760405162461bcd60e51b815260206004820152602960248201527f72657175697265732074686520636f727265637420726174696f206f662070656044820152687263656e746167657360b81b6064820152608401620000d7565b620006aa428862000af3565b6005805463ffffffff90811660009081526003602090815260408083206007019590955592549091168152919091208651620006ef9260029092019188019062000826565b5060055463ffffffff1660009081526003602081815260409092208651620007209391909201919087019062000826565b506200072d428762000af3565b6005805463ffffffff908116600090815260036020526040808220600901949094558254821681528381206006018d9055825482168152929092208101805463ffffffff60201b19166401000000008c851602179055547f4955e695b1d11089e46de7dd7b638cb49761fcca3021035990f9de9c4993b65f9116620007b3428a62000af3565b620007bf428a62000af3565b6040805163ffffffff909416845260208401929092529082015260600160405180910390a16005805463ffffffff16906000620007fc8362000b60565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b82805482825590600052602060002090601f01602090048101928215620008c15791602002820160005b838211156200089057835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262000850565b8015620008bf5782816101000a81549060ff021916905560010160208160000104928301926001030262000890565b505b50620008cf929150620008d3565b5090565b5b80821115620008cf5760008155600101620008d4565b805160ff81168114620008fc57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200092957600080fd5b815160206001600160401b038083111562000948576200094862000901565b8260051b604051601f19603f8301168101818110848211171562000970576200097062000901565b6040529384528581018301938381019250878511156200098f57600080fd5b83870191505b84821015620009b957620009a982620008ea565b8352918301919083019062000995565b979650505050505050565b600080600080600080600060e0888a031215620009e057600080fd5b620009eb88620008ea565b965060208801519550604088015163ffffffff8116811462000a0c57600080fd5b606089015160808a015160a08b015192975090955093506001600160401b038082111562000a3957600080fd5b62000a478b838c0162000917565b935060c08a015191508082111562000a5e57600080fd5b5062000a6d8a828b0162000917565b91505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000aaf5762000aaf62000a7c565b500290565b60008262000ad257634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111562000aed5762000aed62000a7c565b92915050565b8082018082111562000aed5762000aed62000a7c565b634e487b7160e01b600052603260045260246000fd5b61ffff81811683821601908082111562000b3d5762000b3d62000a7c565b5092915050565b60006001820162000b595762000b5962000a7c565b5060010190565b600063ffffffff80831681810362000b7c5762000b7c62000a7c565b6001019392505050565b6080516138a362000ba96000396000818161154501526116a501526138a36000f3fe6080604052600436106101665760003560e01c80637b9acb21116100d1578063a511ea491161008a578063c36f383911610064578063c36f383914610576578063ca3e7e8714610596578063f5a62c34146105a9578063fafda737146105c957600080fd5b8063a511ea4914610510578063b3cea21714610523578063b5af49511461054057600080fd5b80637b9acb211461042057806387f8fc571461044a5780638da5cb5b1461046a57806391159fd8146104a257806392b46390146104c2578063a11f3a2d146104e257600080fd5b8063452aaa9911610123578063452aaa991461033a5780635e117de5146103675780635f5152261461037a57806363d0fd18146103b35780636cbfa79b146103d357806374bb9d911461040057600080fd5b80630f528f391461016b578063285e1406146101b4578063313cbd38146101d65780633259b9461461020c5780633ad5f2fd146103055780633ccfd60b14610325575b600080fd5b34801561017757600080fd5b506101a16101863660046132e7565b63ffffffff1660009081526003602052604090206009015490565b6040519081526020015b60405180910390f35b3480156101c057600080fd5b506101d46101cf366004613320565b610615565b005b3480156101e257600080fd5b506101a16101f13660046132e7565b63ffffffff1660009081526003602052604090206006015490565b34801561021857600080fd5b506102986102273660046132e7565b600360205260009081526040902060058101546006820154600783015460088401546009850154600a860154600b870154600c880154600d9098015463ffffffff80891699600160201b808b0483169a600160401b90048316999897969560ff16949391928281169291909104168c565b6040805163ffffffff9d8e1681529b8d1660208d0152998c16998b019990995260608a0197909752608089019590955260a088019390935260c0870191909152151560e08601526101008501526101208401528316610140830152909116610160820152610180016101ab565b34801561031157600080fd5b506101d461032036600461333b565b61066a565b34801561033157600080fd5b506101d4610e8b565b34801561034657600080fd5b5061035a61035536600461336e565b611016565b6040516101ab919061338a565b6101d461037536600461333b565b611155565b34801561038657600080fd5b506101a1610395366004613320565b6001600160a01b031660009081526004602052604090206003015490565b3480156103bf57600080fd5b506101d46103ce3660046132e7565b61178b565b3480156103df57600080fd5b506103f36103ee36600461336e565b61198c565b6040516101ab91906133d4565b34801561040c57600080fd5b506101d461041b36600461341d565b611aff565b34801561042c57600080fd5b50610435611b8f565b60405163ffffffff90911681526020016101ab565b34801561045657600080fd5b506101d461046536600461341d565b611bac565b34801561047657600080fd5b5060025461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101ab565b3480156104ae57600080fd5b506101d46104bd366004613320565b611c37565b3480156104ce57600080fd5b506101d46104dd366004613320565b611d22565b3480156104ee57600080fd5b506105026104fd3660046132e7565b611d6e565b6040516101ab929190613476565b6101d461051e3660046132e7565b611e78565b34801561052f57600080fd5b506005546104359063ffffffff1681565b34801561054c57600080fd5b506101a161055b3660046132e7565b63ffffffff166000908152600360205260409020600b015490565b34801561058257600080fd5b506103f36105913660046132e7565b61206e565b6101d46105a436600461355c565b612198565b3480156105b557600080fd5b506101d46105c436600461333b565b61280a565b3480156105d557600080fd5b5061048a6105e436600461333b565b63ffffffff91821660009081526003602090815260408083209390941682529190915220546001600160a01b031690565b6000546001600160a01b031633146106485760405162461bcd60e51b815260040161063f906135ec565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146106945760405162461bcd60e51b815260040161063f9061360d565b63ffffffff811660009081526003602052604090206009015442116106f75760405162461bcd60e51b81526020600482015260196024820152784c6f747465727920617265207374696c6c2072756e6e696e6760381b604482015260640161063f565b63ffffffff8082166000908152600360205260409020600d0154600160201b9004161561075b5760405162461bcd60e51b8152602060048201526012602482015271165bdd481cdd185c9d1959081c99599d5b9960721b604482015260640161063f565b63ffffffff81166000908152600360205260409020600701546107b95760405162461bcd60e51b8152602060048201526016602482015275131bdd1d195c9e48191a591b89dd081cdd185c9d195960521b604482015260640161063f565b63ffffffff81166000908152600360205260409020600a015460ff16156108145760405162461bcd60e51b815260206004820152600f60248201526e2637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff811660009081526003602052604081206002015467ffffffffffffffff811115610845576108456134a4565b60405190808252806020026020018201604052801561086e578160200160208202803683370190505b5063ffffffff83166000908152600360205260408120600201549192509067ffffffffffffffff8111156108a4576108a46134a4565b6040519080825280602002602001820160405280156108cd578160200160208202803683370190505b5063ffffffff841660009081526003602090815260408083206002018054825181850281018501909352808352949550929390929183018282801561094f57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109205790505b50505063ffffffff80881660009081526003602052604081206005810154600d90910154959650600160401b900482169490911692508891505b86518160ff161015610bf85760ff811615610a3a576064858260ff16815181106109b5576109b5613630565b602002602001015160ff16856109cb919061365c565b6109d5919061369e565b876109e16001846136c1565b60ff16815181106109f4576109f4613630565b6020026020010151610a0691906136da565b878260ff1681518110610a1b57610a1b613630565b602002602001019063ffffffff16908163ffffffff1681525050610aa1565b6064858260ff1681518110610a5157610a51613630565b602002602001015160ff1685610a67919061365c565b610a71919061369e565b878260ff1681518110610a8657610a86613630565b602002602001019063ffffffff16908163ffffffff16815250505b6001878260ff1681518110610ab857610ab8613630565b602002602001015163ffffffff161015610afe576001878260ff1681518110610ae357610ae3613630565b602002602001019063ffffffff16908163ffffffff16815250505b6064858260ff1681518110610b1557610b15613630565b602002602001015160ff1685610b2b919061365c565b610b35919061369e565b63ffffffff166064600360008b63ffffffff1663ffffffff1681526020019081526020016000206003018360ff1681548110610b7357610b73613630565b60009182526020808320818304015463ffffffff8e16845260039091526040909220600b0154610bb292601f9092166101000a90910460ff16906136fe565b610bbc919061371d565b610bc6919061371d565b868260ff1681518110610bdb57610bdb613630565b602090810291909101015280610bf081613731565b915050610989565b5060005b86518160ff161015610e5857868160ff1681518110610c1d57610c1d613630565b602002602001015163ffffffff168363ffffffff161015610e4657868160ff1681518110610c4d57610c4d613630565b602002602001015163ffffffff168284610c6791906136da565b63ffffffff16118015610c8a5750600654610c8283856136da565b63ffffffff16115b15610d4a57610cdd83888360ff1681518110610ca857610ca8613630565b6020026020010151610cba9190613750565b878360ff1681518110610ccf57610ccf613630565b60200260200101518a6128de565b82878260ff1681518110610cf357610cf3613630565b6020026020010151610d059190613750565b610d0f9083613750565b915082878260ff1681518110610d2757610d27613630565b6020026020010151610d399190613750565b610d4390846136da565b9250610d7c565b610d6382878360ff1681518110610ccf57610ccf613630565b610d6d8280613750565b9150610d7982846136da565b92505b8660018851610d8b919061376d565b81518110610d9b57610d9b613630565b602002602001015163ffffffff168363ffffffff1603610e3d5763ffffffff881660009081526003602052604090206008015415610ddc57610ddc88612bb2565b63ffffffff8816600081815260036020908152604091829020600a01805460ff19166001179055815192835242908301527f6e9e33263df7835d4a1819284f831b275aa4d7f0dba5be06913084a4d0b5fe6a910160405180910390a1610e58565b60065415610e58575b80610e5081613731565b915050610bfc565b505063ffffffff9586166000908152600360205260409020600d01805463ffffffff191691909616179094555050505050565b33610ec75760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161063f565b33600090815260046020526040902060030154610f1c5760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015260640161063f565b3360009081526004602052604081206003018054908290556001549091906001600160a01b03166108fc610f5160148561371d565b6040518115909202916000818181858888f19350505050905080610f875760405162461bcd60e51b815260040161063f90613780565b6000336108fc610f9860148661371d565b610fa2908661376d565b6040518115909202916000818181858888f19350505050905080610fd85760405162461bcd60e51b815260040161063f90613780565b60408051338152602081018590527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a1505050565b33600090815260046020908152604080832063ffffffff80861685529252822054606092911667ffffffffffffffff811115611054576110546134a4565b60405190808252806020026020018201604052801561107d578160200160208202803683370190505b5063ffffffff80851660009081526003602052604081206005015492935091600160401b90041660015b6110b28260016136da565b63ffffffff168163ffffffff1610156111485763ffffffff8087166000908152600360209081526040808320938516835292905220546001600160a01b038089169116036111365780848463ffffffff168151811061111357611113613630565b63ffffffff9092166020928302919091019091015282611132816137a8565b9350505b80611140816137a8565b9150506110a7565b5091925050505b92915050565b63ffffffff811660009081526003602052604090206007015442118015611193575063ffffffff811660009081526003602052604090206009015442105b6111af5760405162461bcd60e51b815260040161063f906137cb565b336000908152600460208190526040909120015460ff1661120a5760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d081b9bdd081c9959da5cdd195c9959605a1b604482015260640161063f565b60008263ffffffff161161126a5760405162461bcd60e51b815260206004820152602160248201527f596f75206e65656420746f20627579206174206c656173742031207469636b656044820152601d60fa1b606482015260840161063f565b63ffffffff80821660009081526003602052604090206006015461128f9184166136fe565b34146112cf5760405162461bcd60e51b815260206004820152600f60248201526e496e6e636f726563742076616c756560881b604482015260640161063f565b63ffffffff808216600090815260036020526040902060050154600160201b810482169161130591600160401b900416846136da565b63ffffffff16111561134d5760405162461bcd60e51b8152602060048201526011602482015270427579206665776572207469636b65747360781b604482015260640161063f565b33600090815260046020908152604080832063ffffffff808616855292528220541690036113ae5763ffffffff811660009081526003602090815260408220600401805460018101825590835291200180546001600160a01b031916331790555b63ffffffff80821660009081526003602052604081206005015490916113dd91600160401b90041660016136da565b90505b63ffffffff808316600090815260036020526040902060050154849161140f91600160401b90041660016136da565b61141991906136da565b63ffffffff168163ffffffff1610156114705763ffffffff808316600090815260036020908152604080832093851683529290522080546001600160a01b0319163317905580611468816137a8565b9150506113e0565b5033600090815260046020908152604080832063ffffffff8086168552925282208054859391926114a3918591166136da565b92506101000a81548163ffffffff021916908363ffffffff16021790555081600360008363ffffffff1663ffffffff16815260200190815260200160002060050160088282829054906101000a900463ffffffff1661150291906136da565b92506101000a81548163ffffffff021916908363ffffffff1602179055506064600560ff163461153291906136fe565b61153c919061371d565b606461156b60ff7f000000000000000000000000000000000000000000000000000000000000000016346136fe565b611575919061371d565b600254600160a01b900460ff1661158d60643461371d565b61159791906136fe565b6115a1903461376d565b6115ab919061376d565b6115b5919061376d565b63ffffffff82166000908152600360205260408120600b0180549091906115dd908490613812565b90915550606490506115f06005346136fe565b6115fa919061371d565b33600090815260046020526040808220600201546001600160a01b031682528120600301805490919061162e908490613812565b9091555050600080546002546001600160a01b03909116906108fc9060649061166190600160a01b900460ff16346136fe565b61166b919061371d565b6040518115909202916000818181858888f193505050509050806116a15760405162461bcd60e51b815260040161063f90613780565b60ff7f0000000000000000000000000000000000000000000000000000000000000000166116d060643461371d565b6116da91906136fe565b6002546001600160a01b031660009081526004602052604081206003018054909190611707908490613812565b90915550506040805133815263ffffffff851660208201527f8fafe0305cae7e949321ce864f4e34b282910f2f79664c8e6fe06d4304d26de5910160405180910390a163ffffffff808316600090815260036020526040902060050154600160201b81048216600160401b909104909116036117865761178682612c16565b505050565b6002546001600160a01b031633146117b55760405162461bcd60e51b815260040161063f9061360d565b63ffffffff8082166000908152600360205260409020600d0154600160201b9004161580156117fc575063ffffffff8082166000908152600360205260409020600d015416155b6118615760405162461bcd60e51b815260206004820152603060248201527f596f752073686f756c6420726566756e64206d6f6e6579206f7220736574206160448201526f6d6f756e74206f662077696e6e65727360801b606482015260840161063f565b63ffffffff811660009081526003602052604090206009015442116118c45760405162461bcd60e51b81526020600482015260196024820152784c6f747465727920617265207374696c6c2072756e6e696e6760381b604482015260640161063f565b63ffffffff81166000908152600360205260409020600701546119225760405162461bcd60e51b8152602060048201526016602482015275131bdd1d195c9e48191a591b89dd081cdd185c9d195960521b604482015260640161063f565b63ffffffff81166000908152600360205260409020600a015460ff16156119805760405162461bcd60e51b81526020600482015260126024820152714c6f7474657279206973206f7665722c676760701b604482015260640161063f565b61198981612c16565b50565b6001600160a01b038216600090815260046020908152604080832063ffffffff80861685526001909101909252822054606092911667ffffffffffffffff8111156119d9576119d96134a4565b604051908082528060200260200182016040528015611a02578160200160208202803683370190505b5063ffffffff808516600090815260036020526040812060050154929350600160401b909204169060015b611a388360016136da565b63ffffffff168163ffffffff1610156111485763ffffffff8087166000908152600360209081526040808320938516835260019093019052205460ff1615801590611ab0575063ffffffff8681166000908152600360209081526040808320938516835292905220546001600160a01b038881169116145b15611aed578063ffffffff16848363ffffffff1681518110611ad457611ad4613630565b602090810291909101015281611ae9816137a8565b9250505b80611af7816137a8565b915050611a2d565b6000546001600160a01b03163314611b295760405162461bcd60e51b815260040161063f906135ec565b60068160ff1610611b6f5760405162461bcd60e51b815260206004820152601060248201526f736574206c657373207468616e20362560801b604482015260640161063f565b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b600554600090611ba79060019063ffffffff16613750565b905090565b6000546001600160a01b03163314611bd65760405162461bcd60e51b815260040161063f906135ec565b60008160ff1611611c175760405162461bcd60e51b815260206004820152600b60248201526a07365742061626f766520360ac1b604482015260640161063f565b6002805460ff909216600160a01b0260ff60a01b19909216919091179055565b336000908152600460208190526040909120015460ff1615611c8f5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c9959da5cdd195c99607a1b604482015260640161063f565b6001600160a01b038116611cd5576002805433600090815260046020526040902090910180546001600160a01b0319166001600160a01b03909216919091179055611d01565b33600090815260046020526040902060020180546001600160a01b0319166001600160a01b0383161790555b5033600090815260046020819052604090912001805460ff19166001179055565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b815260040161063f906135ec565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff8116600090815260036020818152604092839020600281018054855181850281018501909652808652606095869592949390920192849190830182828015611df857602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611dc95790505b5050505050915080805480602002602001604051908101604052809291908181526020018280548015611e6857602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611e395790505b5050505050905091509150915091565b6002546001600160a01b03163314611ea25760405162461bcd60e51b815260040161063f9061360d565b63ffffffff811660009081526003602052604090206007015442118015611ee2575063ffffffff81166000908152600360205260409020600a015460ff16155b611efe5760405162461bcd60e51b815260040161063f906137cb565b60643411611f465760405162461bcd60e51b8152602060048201526015602482015274736574206d6f7265207468616e203130302077656960581b604482015260640161063f565b600080546002546001600160a01b03909116906108fc90606490611f7490600160a01b900460ff16346136fe565b611f7e919061371d565b6040518115909202916000818181858888f19350505050905080611fb45760405162461bcd60e51b815260040161063f90613780565b600254606490611fce90600160a01b900460ff16346136fe565b611fd8919061371d565b611fe2903461376d565b63ffffffff83166000908152600360205260408120600c01805490919061200a908490613812565b909155505060025460649061202990600160a01b900460ff16346136fe565b612033919061371d565b61203d903461376d565b63ffffffff83166000908152600360205260408120600b018054909190612065908490613812565b90915550505050565b63ffffffff8082166000908152600360205260408120600501546060921667ffffffffffffffff8111156120a4576120a46134a4565b6040519080825280602002602001820160405280156120cd578160200160208202803683370190505b509050600060015b63ffffffff80861660009081526003602052604090206005015461210391600160401b9091041660016136da565b63ffffffff168163ffffffff16101561218f5763ffffffff8086166000908152600360209081526040808320938516835260019093019052205460ff161561217d578063ffffffff16838363ffffffff168151811061216457612164613630565b602090810291909101015281612179816137a8565b9250505b80612187816137a8565b9150506120d5565b50909392505050565b6002546001600160a01b031633146121c25760405162461bcd60e51b815260040161063f9061360d565b80518251146122135760405162461bcd60e51b815260206004820152601f60248201527f61727261792773206c656e677468206d75737420626520657175616c20746f00604482015260640161063f565b8284106122705760405162461bcd60e51b815260206004820152602560248201527f73746172742074696d65206d757374206265206d6f7265207468616e20656e646044820152642074696d6560d81b606482015260840161063f565b60008251116122c15760405162461bcd60e51b815260206004820152601c60248201527f63686f6f73652070657263656e74616765206f662077696e6e65727300000000604482015260640161063f565b60098563ffffffff16116123235760405162461bcd60e51b8152602060048201526024808201527f7469636b65747320616d6f756e74206d757374206265206d6f7265207468616e604482015263103a32b760e11b606482015260840161063f565b606582511061236a5760405162461bcd60e51b8152602060048201526013602482015272456e7465722066657765722077696e6e65727360681b604482015260640161063f565b600080546002546001600160a01b03909116906108fc9060649061239890600160a01b900460ff16346136fe565b6123a2919061371d565b6040518115909202916000818181858888f193505050509050806123d85760405162461bcd60e51b815260040161063f90613780565b6002546064906123f290600160a01b900460ff16346136fe565b6123fc919061371d565b612406903461376d565b60055463ffffffff166000908152600360205260408120600c018054909190612430908490613812565b909155505060025460649061244f90600160a01b900460ff16346136fe565b612459919061371d565b612463903461376d565b60055463ffffffff166000908152600360205260408120600b01805490919061248d908490613812565b909155506000905080805b8451811015612619578481815181106124b3576124b3613630565b602002602001015160ff16826124c99190613825565b91508581815181106124dd576124dd613630565b602002602001015160ff16836124f39190613825565b9250600085828151811061250957612509613630565b602002602001015160ff1611801561253d5750600086828151811061253057612530613630565b602002602001015160ff16115b6125935760405162461bcd60e51b815260206004820152602160248201527f6e65656420746f207365742070657263656e746167652061626f7665207a65726044820152606f60f81b606482015260840161063f565b60648963ffffffff1610156126075760098682815181106125b6576125b6613630565b602002602001015160ff16116126075760405162461bcd60e51b81526020600482015260166024820152757365742070657263656e746167652061626f7665203960501b604482015260640161063f565b8061261181613840565b915050612498565b508061ffff166064148015612632575060658261ffff16105b6126905760405162461bcd60e51b815260206004820152602960248201527f72657175697265732074686520636f727265637420726174696f206f662070656044820152687263656e746167657360b81b606482015260840161063f565b61269a4288613812565b6005805463ffffffff908116600090815260036020908152604080832060070195909555925490911681529190912086516126dd92600290920191880190613213565b5060055463ffffffff166000908152600360208181526040909220865161270c93919092019190870190613213565b506127174287613812565b6005805463ffffffff908116600090815260036020526040808220600901949094558254821681528381206006018d9055825482168152929092208101805467ffffffff000000001916600160201b8c851602179055547f4955e695b1d11089e46de7dd7b638cb49761fcca3021035990f9de9c4993b65f911661279b428a613812565b6127a5428a613812565b6040805163ffffffff909416845260208401929092529082015260600160405180910390a16005805463ffffffff169060006127e0836137a8565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b6002546001600160a01b031633146128345760405162461bcd60e51b815260040161063f9061360d565b63ffffffff82166000908152600360205260409020600a015460ff161561288f5760405162461bcd60e51b815260206004820152600f60248201526e3637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff82166000908152600360205260409020600b8101546008909101556128b98282612f43565b5063ffffffff166000908152600360205260409020600a01805460ff19166001179055565b60008060005b8563ffffffff168163ffffffff161015612b585760008092505b8261296e5763ffffffff80861660009081526003602052604090206005015461292f91600160401b9091041661319f565b63ffffffff8616600090815260036020908152604080832060019485018085529085019092529091205490925060ff161461296957600192505b6128fe565b8560046000600360008963ffffffff1663ffffffff168152602001908152602001600020600001600085815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206003016000828254019250508190555060046000600360008863ffffffff1663ffffffff168152602001908152602001600020600001600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060010160008663ffffffff1663ffffffff168152602001908152602001600020600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506001600360008763ffffffff1663ffffffff168152602001908152602001600020600101600083815260200190815260200160002060006101000a81548160ff021916908360ff1602179055507f804a4fc048df233db0dbf5d07a270d4b107ce0b8f52e1e0026ebfcbdf2b74a6b858288604051612b479392919063ffffffff9390931683526020830191909152604082015260600190565b60405180910390a1506001016128e4565b5063ffffffff838116600090815260036020526040812060058101805463ffffffff1981169085168a0185161790556008018054928816870294909401938492909190612ba690849061376d565b90915550505050505050565b63ffffffff81166000908152600360208181526040808420600801546002546001600160a01b0316855260049092528320909101805491929091612bf7908490613812565b909155505063ffffffff16600090815260036020526040812060080155565b63ffffffff81166000908152600360205260409020600a015460ff1615612c715760405162461bcd60e51b815260206004820152600f60248201526e3637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff8082166000908152600360205260409020600d01541615612cd15760405162461bcd60e51b81526020600482015260156024820152743ab9b29039ba30b3b2b21031b7b6b83632ba34b7b760591b604482015260640161063f565b63ffffffff8082166000908152600360208181526040808420600581015493018054825181850281018501909352808352600160401b9094049095169484939192909190830182828015612d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612d335790505b50505063ffffffff8088166000908152600360205260409020600b8101546008909101559293505050831615612ee157600a8363ffffffff161015612db157612dac84601e612f43565b612eba565b60005b8151811015612eb85763ffffffff8516600090815260036020526040902060020180546064919083908110612deb57612deb613630565b90600052602060002090602091828204019190069054906101000a900460ff1660ff16850263ffffffff1681612e2357612e23613688565b04925060018363ffffffff161015612e3a57600192505b60008363ffffffff166064848481518110612e5757612e57613630565b602002602001015160ff16600360008a63ffffffff1663ffffffff168152602001908152602001600020600b01540281612e9357612e93613688565b0481612ea157612ea1613688565b049050612eaf8482886128de565b50600101612db4565b505b63ffffffff841660009081526003602052604090206008015415612ee157612ee184612bb2565b63ffffffff8416600081815260036020908152604091829020600a01805460ff19166001179055815192835242908301527f6e9e33263df7835d4a1819284f831b275aa4d7f0dba5be06913084a4d0b5fe6a910160405180910390a150505050565b63ffffffff80831660009081526003602052604081206005810154600c820154600b90920154600160401b909104909316928391612f809161376d565b612f8a919061371d565b63ffffffff8086166000908152600360205260409020600d0154919250600160201b909104165b63ffffffff8086166000908152600360205260409020600d0154600160201b900481168501811690821610156131275760046000600360008863ffffffff1663ffffffff1681526020019081526020016000206004018363ffffffff168154811061301e5761301e613630565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812063ffffffff808a168352908452828220546003909452918120600490810180549484168702949193909190861690811061308157613081613630565b60009182526020808320909101546001600160a01b0316835282810193909352604091820181206003908101805490950190945563ffffffff808a168252939092529020600401549082160360010161311f5763ffffffff8581166000908152600360205260409020600881018054838716860290039055600d018054918316600160201b0267ffffffff0000000019909216919091179055613127565b600101612fb1565b5063ffffffff8481166000908152600360205260409020600801805491841683028083039091551461315c5761315c84612bb2565b505063ffffffff9182166000908152600360205260409020600d01805467ffffffff00000000198116600160201b91829004851693909301909316909202179055565b60068054600091826131b083613840565b91905055508143600654336040516020016131f093929190928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6040516020818303038152906040528051906020012060001c61114f9190613859565b82805482825590600052602060002090601f016020900481019282156132a95791602002820160005b8382111561327a57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261323c565b80156132a75782816101000a81549060ff021916905560010160208160000104928301926001030261327a565b505b506132b59291506132b9565b5090565b5b808211156132b557600081556001016132ba565b803563ffffffff811681146132e257600080fd5b919050565b6000602082840312156132f957600080fd5b613302826132ce565b9392505050565b80356001600160a01b03811681146132e257600080fd5b60006020828403121561333257600080fd5b61330282613309565b6000806040838503121561334e57600080fd5b613357836132ce565b9150613365602084016132ce565b90509250929050565b6000806040838503121561338157600080fd5b61335783613309565b6020808252825182820181905260009190848201906040850190845b818110156133c857835163ffffffff16835292840192918401916001016133a6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156133c8578351835292840192918401916001016133f0565b803560ff811681146132e257600080fd5b60006020828403121561342f57600080fd5b6133028261340c565b600081518084526020808501945080840160005b8381101561346b57815160ff168752958201959082019060010161344c565b509495945050505050565b6040815260006134896040830185613438565b828103602084015261349b8185613438565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126134cb57600080fd5b8135602067ffffffffffffffff808311156134e8576134e86134a4565b8260051b604051601f19603f8301168101818110848211171561350d5761350d6134a4565b60405293845285810183019383810192508785111561352b57600080fd5b83870191505b84821015613551576135428261340c565b83529183019190830190613531565b979650505050505050565b60008060008060008060c0878903121561357557600080fd5b86359550613585602088016132ce565b94506040870135935060608701359250608087013567ffffffffffffffff808211156135b057600080fd5b6135bc8a838b016134ba565b935060a08901359150808211156135d257600080fd5b506135df89828a016134ba565b9150509295509295509295565b6020808252600790820152662737ba103232bb60c91b604082015260600190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168183048111821515161561367f5761367f613646565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806136b5576136b5613688565b92169190910492915050565b60ff828116828216039081111561114f5761114f613646565b63ffffffff8181168382160190808211156136f7576136f7613646565b5092915050565b600081600019048311821515161561371857613718613646565b500290565b60008261372c5761372c613688565b500490565b600060ff821660ff810361374757613747613646565b60010192915050565b63ffffffff8281168282160390808211156136f7576136f7613646565b8181038181111561114f5761114f613646565b6020808252600e908201526d14d95b99081a5cc819985a5b195960921b604082015260600190565b600063ffffffff8083168181036137c1576137c1613646565b6001019392505050565b60208082526027908201527f4c6f7474657279206469646e27742073746172746564206f7220616c726561646040820152661e48195b99195960ca1b606082015260800190565b8082018082111561114f5761114f613646565b61ffff8181168382160190808211156136f7576136f7613646565b60006001820161385257613852613646565b5060010190565b60008261386857613868613688565b50069056fea26469706673582212203171d910955c2e7f130be4acab21ebdf7f6f5791d9b7aa647c70bc53c8ff79dd64736f6c6343000810003300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000188c91f056f0000000000000000000000000000000000000000000000000000018968fb162800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000a
Deployed ByteCode
0x6080604052600436106101665760003560e01c80637b9acb21116100d1578063a511ea491161008a578063c36f383911610064578063c36f383914610576578063ca3e7e8714610596578063f5a62c34146105a9578063fafda737146105c957600080fd5b8063a511ea4914610510578063b3cea21714610523578063b5af49511461054057600080fd5b80637b9acb211461042057806387f8fc571461044a5780638da5cb5b1461046a57806391159fd8146104a257806392b46390146104c2578063a11f3a2d146104e257600080fd5b8063452aaa9911610123578063452aaa991461033a5780635e117de5146103675780635f5152261461037a57806363d0fd18146103b35780636cbfa79b146103d357806374bb9d911461040057600080fd5b80630f528f391461016b578063285e1406146101b4578063313cbd38146101d65780633259b9461461020c5780633ad5f2fd146103055780633ccfd60b14610325575b600080fd5b34801561017757600080fd5b506101a16101863660046132e7565b63ffffffff1660009081526003602052604090206009015490565b6040519081526020015b60405180910390f35b3480156101c057600080fd5b506101d46101cf366004613320565b610615565b005b3480156101e257600080fd5b506101a16101f13660046132e7565b63ffffffff1660009081526003602052604090206006015490565b34801561021857600080fd5b506102986102273660046132e7565b600360205260009081526040902060058101546006820154600783015460088401546009850154600a860154600b870154600c880154600d9098015463ffffffff80891699600160201b808b0483169a600160401b90048316999897969560ff16949391928281169291909104168c565b6040805163ffffffff9d8e1681529b8d1660208d0152998c16998b019990995260608a0197909752608089019590955260a088019390935260c0870191909152151560e08601526101008501526101208401528316610140830152909116610160820152610180016101ab565b34801561031157600080fd5b506101d461032036600461333b565b61066a565b34801561033157600080fd5b506101d4610e8b565b34801561034657600080fd5b5061035a61035536600461336e565b611016565b6040516101ab919061338a565b6101d461037536600461333b565b611155565b34801561038657600080fd5b506101a1610395366004613320565b6001600160a01b031660009081526004602052604090206003015490565b3480156103bf57600080fd5b506101d46103ce3660046132e7565b61178b565b3480156103df57600080fd5b506103f36103ee36600461336e565b61198c565b6040516101ab91906133d4565b34801561040c57600080fd5b506101d461041b36600461341d565b611aff565b34801561042c57600080fd5b50610435611b8f565b60405163ffffffff90911681526020016101ab565b34801561045657600080fd5b506101d461046536600461341d565b611bac565b34801561047657600080fd5b5060025461048a906001600160a01b031681565b6040516001600160a01b0390911681526020016101ab565b3480156104ae57600080fd5b506101d46104bd366004613320565b611c37565b3480156104ce57600080fd5b506101d46104dd366004613320565b611d22565b3480156104ee57600080fd5b506105026104fd3660046132e7565b611d6e565b6040516101ab929190613476565b6101d461051e3660046132e7565b611e78565b34801561052f57600080fd5b506005546104359063ffffffff1681565b34801561054c57600080fd5b506101a161055b3660046132e7565b63ffffffff166000908152600360205260409020600b015490565b34801561058257600080fd5b506103f36105913660046132e7565b61206e565b6101d46105a436600461355c565b612198565b3480156105b557600080fd5b506101d46105c436600461333b565b61280a565b3480156105d557600080fd5b5061048a6105e436600461333b565b63ffffffff91821660009081526003602090815260408083209390941682529190915220546001600160a01b031690565b6000546001600160a01b031633146106485760405162461bcd60e51b815260040161063f906135ec565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146106945760405162461bcd60e51b815260040161063f9061360d565b63ffffffff811660009081526003602052604090206009015442116106f75760405162461bcd60e51b81526020600482015260196024820152784c6f747465727920617265207374696c6c2072756e6e696e6760381b604482015260640161063f565b63ffffffff8082166000908152600360205260409020600d0154600160201b9004161561075b5760405162461bcd60e51b8152602060048201526012602482015271165bdd481cdd185c9d1959081c99599d5b9960721b604482015260640161063f565b63ffffffff81166000908152600360205260409020600701546107b95760405162461bcd60e51b8152602060048201526016602482015275131bdd1d195c9e48191a591b89dd081cdd185c9d195960521b604482015260640161063f565b63ffffffff81166000908152600360205260409020600a015460ff16156108145760405162461bcd60e51b815260206004820152600f60248201526e2637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff811660009081526003602052604081206002015467ffffffffffffffff811115610845576108456134a4565b60405190808252806020026020018201604052801561086e578160200160208202803683370190505b5063ffffffff83166000908152600360205260408120600201549192509067ffffffffffffffff8111156108a4576108a46134a4565b6040519080825280602002602001820160405280156108cd578160200160208202803683370190505b5063ffffffff841660009081526003602090815260408083206002018054825181850281018501909352808352949550929390929183018282801561094f57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116109205790505b50505063ffffffff80881660009081526003602052604081206005810154600d90910154959650600160401b900482169490911692508891505b86518160ff161015610bf85760ff811615610a3a576064858260ff16815181106109b5576109b5613630565b602002602001015160ff16856109cb919061365c565b6109d5919061369e565b876109e16001846136c1565b60ff16815181106109f4576109f4613630565b6020026020010151610a0691906136da565b878260ff1681518110610a1b57610a1b613630565b602002602001019063ffffffff16908163ffffffff1681525050610aa1565b6064858260ff1681518110610a5157610a51613630565b602002602001015160ff1685610a67919061365c565b610a71919061369e565b878260ff1681518110610a8657610a86613630565b602002602001019063ffffffff16908163ffffffff16815250505b6001878260ff1681518110610ab857610ab8613630565b602002602001015163ffffffff161015610afe576001878260ff1681518110610ae357610ae3613630565b602002602001019063ffffffff16908163ffffffff16815250505b6064858260ff1681518110610b1557610b15613630565b602002602001015160ff1685610b2b919061365c565b610b35919061369e565b63ffffffff166064600360008b63ffffffff1663ffffffff1681526020019081526020016000206003018360ff1681548110610b7357610b73613630565b60009182526020808320818304015463ffffffff8e16845260039091526040909220600b0154610bb292601f9092166101000a90910460ff16906136fe565b610bbc919061371d565b610bc6919061371d565b868260ff1681518110610bdb57610bdb613630565b602090810291909101015280610bf081613731565b915050610989565b5060005b86518160ff161015610e5857868160ff1681518110610c1d57610c1d613630565b602002602001015163ffffffff168363ffffffff161015610e4657868160ff1681518110610c4d57610c4d613630565b602002602001015163ffffffff168284610c6791906136da565b63ffffffff16118015610c8a5750600654610c8283856136da565b63ffffffff16115b15610d4a57610cdd83888360ff1681518110610ca857610ca8613630565b6020026020010151610cba9190613750565b878360ff1681518110610ccf57610ccf613630565b60200260200101518a6128de565b82878260ff1681518110610cf357610cf3613630565b6020026020010151610d059190613750565b610d0f9083613750565b915082878260ff1681518110610d2757610d27613630565b6020026020010151610d399190613750565b610d4390846136da565b9250610d7c565b610d6382878360ff1681518110610ccf57610ccf613630565b610d6d8280613750565b9150610d7982846136da565b92505b8660018851610d8b919061376d565b81518110610d9b57610d9b613630565b602002602001015163ffffffff168363ffffffff1603610e3d5763ffffffff881660009081526003602052604090206008015415610ddc57610ddc88612bb2565b63ffffffff8816600081815260036020908152604091829020600a01805460ff19166001179055815192835242908301527f6e9e33263df7835d4a1819284f831b275aa4d7f0dba5be06913084a4d0b5fe6a910160405180910390a1610e58565b60065415610e58575b80610e5081613731565b915050610bfc565b505063ffffffff9586166000908152600360205260409020600d01805463ffffffff191691909616179094555050505050565b33610ec75760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161063f565b33600090815260046020526040902060030154610f1c5760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015260640161063f565b3360009081526004602052604081206003018054908290556001549091906001600160a01b03166108fc610f5160148561371d565b6040518115909202916000818181858888f19350505050905080610f875760405162461bcd60e51b815260040161063f90613780565b6000336108fc610f9860148661371d565b610fa2908661376d565b6040518115909202916000818181858888f19350505050905080610fd85760405162461bcd60e51b815260040161063f90613780565b60408051338152602081018590527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a1505050565b33600090815260046020908152604080832063ffffffff80861685529252822054606092911667ffffffffffffffff811115611054576110546134a4565b60405190808252806020026020018201604052801561107d578160200160208202803683370190505b5063ffffffff80851660009081526003602052604081206005015492935091600160401b90041660015b6110b28260016136da565b63ffffffff168163ffffffff1610156111485763ffffffff8087166000908152600360209081526040808320938516835292905220546001600160a01b038089169116036111365780848463ffffffff168151811061111357611113613630565b63ffffffff9092166020928302919091019091015282611132816137a8565b9350505b80611140816137a8565b9150506110a7565b5091925050505b92915050565b63ffffffff811660009081526003602052604090206007015442118015611193575063ffffffff811660009081526003602052604090206009015442105b6111af5760405162461bcd60e51b815260040161063f906137cb565b336000908152600460208190526040909120015460ff1661120a5760405162461bcd60e51b815260206004820152601560248201527415d85b1b195d081b9bdd081c9959da5cdd195c9959605a1b604482015260640161063f565b60008263ffffffff161161126a5760405162461bcd60e51b815260206004820152602160248201527f596f75206e65656420746f20627579206174206c656173742031207469636b656044820152601d60fa1b606482015260840161063f565b63ffffffff80821660009081526003602052604090206006015461128f9184166136fe565b34146112cf5760405162461bcd60e51b815260206004820152600f60248201526e496e6e636f726563742076616c756560881b604482015260640161063f565b63ffffffff808216600090815260036020526040902060050154600160201b810482169161130591600160401b900416846136da565b63ffffffff16111561134d5760405162461bcd60e51b8152602060048201526011602482015270427579206665776572207469636b65747360781b604482015260640161063f565b33600090815260046020908152604080832063ffffffff808616855292528220541690036113ae5763ffffffff811660009081526003602090815260408220600401805460018101825590835291200180546001600160a01b031916331790555b63ffffffff80821660009081526003602052604081206005015490916113dd91600160401b90041660016136da565b90505b63ffffffff808316600090815260036020526040902060050154849161140f91600160401b90041660016136da565b61141991906136da565b63ffffffff168163ffffffff1610156114705763ffffffff808316600090815260036020908152604080832093851683529290522080546001600160a01b0319163317905580611468816137a8565b9150506113e0565b5033600090815260046020908152604080832063ffffffff8086168552925282208054859391926114a3918591166136da565b92506101000a81548163ffffffff021916908363ffffffff16021790555081600360008363ffffffff1663ffffffff16815260200190815260200160002060050160088282829054906101000a900463ffffffff1661150291906136da565b92506101000a81548163ffffffff021916908363ffffffff1602179055506064600560ff163461153291906136fe565b61153c919061371d565b606461156b60ff7f000000000000000000000000000000000000000000000000000000000000000516346136fe565b611575919061371d565b600254600160a01b900460ff1661158d60643461371d565b61159791906136fe565b6115a1903461376d565b6115ab919061376d565b6115b5919061376d565b63ffffffff82166000908152600360205260408120600b0180549091906115dd908490613812565b90915550606490506115f06005346136fe565b6115fa919061371d565b33600090815260046020526040808220600201546001600160a01b031682528120600301805490919061162e908490613812565b9091555050600080546002546001600160a01b03909116906108fc9060649061166190600160a01b900460ff16346136fe565b61166b919061371d565b6040518115909202916000818181858888f193505050509050806116a15760405162461bcd60e51b815260040161063f90613780565b60ff7f0000000000000000000000000000000000000000000000000000000000000005166116d060643461371d565b6116da91906136fe565b6002546001600160a01b031660009081526004602052604081206003018054909190611707908490613812565b90915550506040805133815263ffffffff851660208201527f8fafe0305cae7e949321ce864f4e34b282910f2f79664c8e6fe06d4304d26de5910160405180910390a163ffffffff808316600090815260036020526040902060050154600160201b81048216600160401b909104909116036117865761178682612c16565b505050565b6002546001600160a01b031633146117b55760405162461bcd60e51b815260040161063f9061360d565b63ffffffff8082166000908152600360205260409020600d0154600160201b9004161580156117fc575063ffffffff8082166000908152600360205260409020600d015416155b6118615760405162461bcd60e51b815260206004820152603060248201527f596f752073686f756c6420726566756e64206d6f6e6579206f7220736574206160448201526f6d6f756e74206f662077696e6e65727360801b606482015260840161063f565b63ffffffff811660009081526003602052604090206009015442116118c45760405162461bcd60e51b81526020600482015260196024820152784c6f747465727920617265207374696c6c2072756e6e696e6760381b604482015260640161063f565b63ffffffff81166000908152600360205260409020600701546119225760405162461bcd60e51b8152602060048201526016602482015275131bdd1d195c9e48191a591b89dd081cdd185c9d195960521b604482015260640161063f565b63ffffffff81166000908152600360205260409020600a015460ff16156119805760405162461bcd60e51b81526020600482015260126024820152714c6f7474657279206973206f7665722c676760701b604482015260640161063f565b61198981612c16565b50565b6001600160a01b038216600090815260046020908152604080832063ffffffff80861685526001909101909252822054606092911667ffffffffffffffff8111156119d9576119d96134a4565b604051908082528060200260200182016040528015611a02578160200160208202803683370190505b5063ffffffff808516600090815260036020526040812060050154929350600160401b909204169060015b611a388360016136da565b63ffffffff168163ffffffff1610156111485763ffffffff8087166000908152600360209081526040808320938516835260019093019052205460ff1615801590611ab0575063ffffffff8681166000908152600360209081526040808320938516835292905220546001600160a01b038881169116145b15611aed578063ffffffff16848363ffffffff1681518110611ad457611ad4613630565b602090810291909101015281611ae9816137a8565b9250505b80611af7816137a8565b915050611a2d565b6000546001600160a01b03163314611b295760405162461bcd60e51b815260040161063f906135ec565b60068160ff1610611b6f5760405162461bcd60e51b815260206004820152601060248201526f736574206c657373207468616e20362560801b604482015260640161063f565b6001805460ff909216600160a01b0260ff60a01b19909216919091179055565b600554600090611ba79060019063ffffffff16613750565b905090565b6000546001600160a01b03163314611bd65760405162461bcd60e51b815260040161063f906135ec565b60008160ff1611611c175760405162461bcd60e51b815260206004820152600b60248201526a07365742061626f766520360ac1b604482015260640161063f565b6002805460ff909216600160a01b0260ff60a01b19909216919091179055565b336000908152600460208190526040909120015460ff1615611c8f5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481c9959da5cdd195c99607a1b604482015260640161063f565b6001600160a01b038116611cd5576002805433600090815260046020526040902090910180546001600160a01b0319166001600160a01b03909216919091179055611d01565b33600090815260046020526040902060020180546001600160a01b0319166001600160a01b0383161790555b5033600090815260046020819052604090912001805460ff19166001179055565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b815260040161063f906135ec565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff8116600090815260036020818152604092839020600281018054855181850281018501909652808652606095869592949390920192849190830182828015611df857602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611dc95790505b5050505050915080805480602002602001604051908101604052809291908181526020018280548015611e6857602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611e395790505b5050505050905091509150915091565b6002546001600160a01b03163314611ea25760405162461bcd60e51b815260040161063f9061360d565b63ffffffff811660009081526003602052604090206007015442118015611ee2575063ffffffff81166000908152600360205260409020600a015460ff16155b611efe5760405162461bcd60e51b815260040161063f906137cb565b60643411611f465760405162461bcd60e51b8152602060048201526015602482015274736574206d6f7265207468616e203130302077656960581b604482015260640161063f565b600080546002546001600160a01b03909116906108fc90606490611f7490600160a01b900460ff16346136fe565b611f7e919061371d565b6040518115909202916000818181858888f19350505050905080611fb45760405162461bcd60e51b815260040161063f90613780565b600254606490611fce90600160a01b900460ff16346136fe565b611fd8919061371d565b611fe2903461376d565b63ffffffff83166000908152600360205260408120600c01805490919061200a908490613812565b909155505060025460649061202990600160a01b900460ff16346136fe565b612033919061371d565b61203d903461376d565b63ffffffff83166000908152600360205260408120600b018054909190612065908490613812565b90915550505050565b63ffffffff8082166000908152600360205260408120600501546060921667ffffffffffffffff8111156120a4576120a46134a4565b6040519080825280602002602001820160405280156120cd578160200160208202803683370190505b509050600060015b63ffffffff80861660009081526003602052604090206005015461210391600160401b9091041660016136da565b63ffffffff168163ffffffff16101561218f5763ffffffff8086166000908152600360209081526040808320938516835260019093019052205460ff161561217d578063ffffffff16838363ffffffff168151811061216457612164613630565b602090810291909101015281612179816137a8565b9250505b80612187816137a8565b9150506120d5565b50909392505050565b6002546001600160a01b031633146121c25760405162461bcd60e51b815260040161063f9061360d565b80518251146122135760405162461bcd60e51b815260206004820152601f60248201527f61727261792773206c656e677468206d75737420626520657175616c20746f00604482015260640161063f565b8284106122705760405162461bcd60e51b815260206004820152602560248201527f73746172742074696d65206d757374206265206d6f7265207468616e20656e646044820152642074696d6560d81b606482015260840161063f565b60008251116122c15760405162461bcd60e51b815260206004820152601c60248201527f63686f6f73652070657263656e74616765206f662077696e6e65727300000000604482015260640161063f565b60098563ffffffff16116123235760405162461bcd60e51b8152602060048201526024808201527f7469636b65747320616d6f756e74206d757374206265206d6f7265207468616e604482015263103a32b760e11b606482015260840161063f565b606582511061236a5760405162461bcd60e51b8152602060048201526013602482015272456e7465722066657765722077696e6e65727360681b604482015260640161063f565b600080546002546001600160a01b03909116906108fc9060649061239890600160a01b900460ff16346136fe565b6123a2919061371d565b6040518115909202916000818181858888f193505050509050806123d85760405162461bcd60e51b815260040161063f90613780565b6002546064906123f290600160a01b900460ff16346136fe565b6123fc919061371d565b612406903461376d565b60055463ffffffff166000908152600360205260408120600c018054909190612430908490613812565b909155505060025460649061244f90600160a01b900460ff16346136fe565b612459919061371d565b612463903461376d565b60055463ffffffff166000908152600360205260408120600b01805490919061248d908490613812565b909155506000905080805b8451811015612619578481815181106124b3576124b3613630565b602002602001015160ff16826124c99190613825565b91508581815181106124dd576124dd613630565b602002602001015160ff16836124f39190613825565b9250600085828151811061250957612509613630565b602002602001015160ff1611801561253d5750600086828151811061253057612530613630565b602002602001015160ff16115b6125935760405162461bcd60e51b815260206004820152602160248201527f6e65656420746f207365742070657263656e746167652061626f7665207a65726044820152606f60f81b606482015260840161063f565b60648963ffffffff1610156126075760098682815181106125b6576125b6613630565b602002602001015160ff16116126075760405162461bcd60e51b81526020600482015260166024820152757365742070657263656e746167652061626f7665203960501b604482015260640161063f565b8061261181613840565b915050612498565b508061ffff166064148015612632575060658261ffff16105b6126905760405162461bcd60e51b815260206004820152602960248201527f72657175697265732074686520636f727265637420726174696f206f662070656044820152687263656e746167657360b81b606482015260840161063f565b61269a4288613812565b6005805463ffffffff908116600090815260036020908152604080832060070195909555925490911681529190912086516126dd92600290920191880190613213565b5060055463ffffffff166000908152600360208181526040909220865161270c93919092019190870190613213565b506127174287613812565b6005805463ffffffff908116600090815260036020526040808220600901949094558254821681528381206006018d9055825482168152929092208101805467ffffffff000000001916600160201b8c851602179055547f4955e695b1d11089e46de7dd7b638cb49761fcca3021035990f9de9c4993b65f911661279b428a613812565b6127a5428a613812565b6040805163ffffffff909416845260208401929092529082015260600160405180910390a16005805463ffffffff169060006127e0836137a8565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b6002546001600160a01b031633146128345760405162461bcd60e51b815260040161063f9061360d565b63ffffffff82166000908152600360205260409020600a015460ff161561288f5760405162461bcd60e51b815260206004820152600f60248201526e3637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff82166000908152600360205260409020600b8101546008909101556128b98282612f43565b5063ffffffff166000908152600360205260409020600a01805460ff19166001179055565b60008060005b8563ffffffff168163ffffffff161015612b585760008092505b8261296e5763ffffffff80861660009081526003602052604090206005015461292f91600160401b9091041661319f565b63ffffffff8616600090815260036020908152604080832060019485018085529085019092529091205490925060ff161461296957600192505b6128fe565b8560046000600360008963ffffffff1663ffffffff168152602001908152602001600020600001600085815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206003016000828254019250508190555060046000600360008863ffffffff1663ffffffff168152602001908152602001600020600001600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060010160008663ffffffff1663ffffffff168152602001908152602001600020600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506001600360008763ffffffff1663ffffffff168152602001908152602001600020600101600083815260200190815260200160002060006101000a81548160ff021916908360ff1602179055507f804a4fc048df233db0dbf5d07a270d4b107ce0b8f52e1e0026ebfcbdf2b74a6b858288604051612b479392919063ffffffff9390931683526020830191909152604082015260600190565b60405180910390a1506001016128e4565b5063ffffffff838116600090815260036020526040812060058101805463ffffffff1981169085168a0185161790556008018054928816870294909401938492909190612ba690849061376d565b90915550505050505050565b63ffffffff81166000908152600360208181526040808420600801546002546001600160a01b0316855260049092528320909101805491929091612bf7908490613812565b909155505063ffffffff16600090815260036020526040812060080155565b63ffffffff81166000908152600360205260409020600a015460ff1615612c715760405162461bcd60e51b815260206004820152600f60248201526e3637ba3a32b93c9034b99037bb32b960891b604482015260640161063f565b63ffffffff8082166000908152600360205260409020600d01541615612cd15760405162461bcd60e51b81526020600482015260156024820152743ab9b29039ba30b3b2b21031b7b6b83632ba34b7b760591b604482015260640161063f565b63ffffffff8082166000908152600360208181526040808420600581015493018054825181850281018501909352808352600160401b9094049095169484939192909190830182828015612d6257602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612d335790505b50505063ffffffff8088166000908152600360205260409020600b8101546008909101559293505050831615612ee157600a8363ffffffff161015612db157612dac84601e612f43565b612eba565b60005b8151811015612eb85763ffffffff8516600090815260036020526040902060020180546064919083908110612deb57612deb613630565b90600052602060002090602091828204019190069054906101000a900460ff1660ff16850263ffffffff1681612e2357612e23613688565b04925060018363ffffffff161015612e3a57600192505b60008363ffffffff166064848481518110612e5757612e57613630565b602002602001015160ff16600360008a63ffffffff1663ffffffff168152602001908152602001600020600b01540281612e9357612e93613688565b0481612ea157612ea1613688565b049050612eaf8482886128de565b50600101612db4565b505b63ffffffff841660009081526003602052604090206008015415612ee157612ee184612bb2565b63ffffffff8416600081815260036020908152604091829020600a01805460ff19166001179055815192835242908301527f6e9e33263df7835d4a1819284f831b275aa4d7f0dba5be06913084a4d0b5fe6a910160405180910390a150505050565b63ffffffff80831660009081526003602052604081206005810154600c820154600b90920154600160401b909104909316928391612f809161376d565b612f8a919061371d565b63ffffffff8086166000908152600360205260409020600d0154919250600160201b909104165b63ffffffff8086166000908152600360205260409020600d0154600160201b900481168501811690821610156131275760046000600360008863ffffffff1663ffffffff1681526020019081526020016000206004018363ffffffff168154811061301e5761301e613630565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812063ffffffff808a168352908452828220546003909452918120600490810180549484168702949193909190861690811061308157613081613630565b60009182526020808320909101546001600160a01b0316835282810193909352604091820181206003908101805490950190945563ffffffff808a168252939092529020600401549082160360010161311f5763ffffffff8581166000908152600360205260409020600881018054838716860290039055600d018054918316600160201b0267ffffffff0000000019909216919091179055613127565b600101612fb1565b5063ffffffff8481166000908152600360205260409020600801805491841683028083039091551461315c5761315c84612bb2565b505063ffffffff9182166000908152600360205260409020600d01805467ffffffff00000000198116600160201b91829004851693909301909316909202179055565b60068054600091826131b083613840565b91905055508143600654336040516020016131f093929190928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6040516020818303038152906040528051906020012060001c61114f9190613859565b82805482825590600052602060002090601f016020900481019282156132a95791602002820160005b8382111561327a57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261323c565b80156132a75782816101000a81549060ff021916905560010160208160000104928301926001030261327a565b505b506132b59291506132b9565b5090565b5b808211156132b557600081556001016132ba565b803563ffffffff811681146132e257600080fd5b919050565b6000602082840312156132f957600080fd5b613302826132ce565b9392505050565b80356001600160a01b03811681146132e257600080fd5b60006020828403121561333257600080fd5b61330282613309565b6000806040838503121561334e57600080fd5b613357836132ce565b9150613365602084016132ce565b90509250929050565b6000806040838503121561338157600080fd5b61335783613309565b6020808252825182820181905260009190848201906040850190845b818110156133c857835163ffffffff16835292840192918401916001016133a6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156133c8578351835292840192918401916001016133f0565b803560ff811681146132e257600080fd5b60006020828403121561342f57600080fd5b6133028261340c565b600081518084526020808501945080840160005b8381101561346b57815160ff168752958201959082019060010161344c565b509495945050505050565b6040815260006134896040830185613438565b828103602084015261349b8185613438565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126134cb57600080fd5b8135602067ffffffffffffffff808311156134e8576134e86134a4565b8260051b604051601f19603f8301168101818110848211171561350d5761350d6134a4565b60405293845285810183019383810192508785111561352b57600080fd5b83870191505b84821015613551576135428261340c565b83529183019190830190613531565b979650505050505050565b60008060008060008060c0878903121561357557600080fd5b86359550613585602088016132ce565b94506040870135935060608701359250608087013567ffffffffffffffff808211156135b057600080fd5b6135bc8a838b016134ba565b935060a08901359150808211156135d257600080fd5b506135df89828a016134ba565b9150509295509295509295565b6020808252600790820152662737ba103232bb60c91b604082015260600190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168185168183048111821515161561367f5761367f613646565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff808416806136b5576136b5613688565b92169190910492915050565b60ff828116828216039081111561114f5761114f613646565b63ffffffff8181168382160190808211156136f7576136f7613646565b5092915050565b600081600019048311821515161561371857613718613646565b500290565b60008261372c5761372c613688565b500490565b600060ff821660ff810361374757613747613646565b60010192915050565b63ffffffff8281168282160390808211156136f7576136f7613646565b8181038181111561114f5761114f613646565b6020808252600e908201526d14d95b99081a5cc819985a5b195960921b604082015260600190565b600063ffffffff8083168181036137c1576137c1613646565b6001019392505050565b60208082526027908201527f4c6f7474657279206469646e27742073746172746564206f7220616c726561646040820152661e48195b99195960ca1b606082015260800190565b8082018082111561114f5761114f613646565b61ffff8181168382160190808211156136f7576136f7613646565b60006001820161385257613852613646565b5060010190565b60008261386857613868613688565b50069056fea26469706673582212203171d910955c2e7f130be4acab21ebdf7f6f5791d9b7aa647c70bc53c8ff79dd64736f6c63430008100033