Contract
0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d
2
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
LandSaleMarket
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; import "./LandSale.sol"; import "./IERC20.sol"; contract LandSaleMarket is LandSale { event PlotListed(uint256 indexed plotId, address indexed seller, uint256 price); event PlotPriceChanged(uint256 indexed plotId, address indexed seller, uint256 oldPrice, uint256 newPrice); event PlotDelisted(uint256 indexed plotId, address indexed seller); event PlotPurchased(uint256 indexed plotId, address indexed seller, address indexed buyer, uint256 price); event OfferMade(uint256 indexed plotId, address indexed buyer, uint256 price); event OfferCancelled(uint256 indexed plotId, address indexed buyer, uint256 price); event EscrowReturned(address indexed buyer, uint256 value); event PlotTransferred(uint256 indexed plotIds, address indexed oldOwner, address indexed newOwner); struct Listing { uint256 price; uint256 timestamp; } struct Offer { address buyer; uint256 price; uint256 timestamp; bool cancelled; } bool private _pausedSales; bool private _pausedTransfers; uint256 private _creatorFee; mapping(uint256 => Listing) private _listings; mapping(uint256 => Offer[]) private _offers; mapping(address => uint256) private _claimableEscrow; constructor(uint256 commonPrice, uint256 rarePrice, uint256 epicPrice, uint256 creatorFee) LandSale(commonPrice, rarePrice, epicPrice) { _creatorFee = creatorFee; _pausedSales = true; _pausedTransfers = true; } modifier notPaused () { require(!_pausedSales, "Sales are paused"); _; } // Setings function setPausedSales(bool paused) external onlyOwnerOrAdmin { _pausedSales = paused; } function setPausedTransfers(bool paused) external onlyOwnerOrAdmin { _pausedTransfers = paused; } function setCreatorFee(uint256 creatorFee) external onlyOwnerOrAdmin { _creatorFee = creatorFee; } function getPausedSales() external view returns (bool) { return _pausedSales; } function getPausedTransfers() external view returns (bool) { return _pausedTransfers; } function getCreatorFee() external view returns (uint256) { return _creatorFee; } // List - Buy - Offer function list(uint256 plotId, uint256 price) external onlyPlotOwner(plotId) notPaused { require(price > 0, "Price must be greater than 0"); require(getPlotRarity(plotId) != Rarity.Harb, "Cannot list Harberger land"); _listings[plotId] = Listing(price, block.timestamp); emit PlotListed(plotId, msg.sender, price); } function changePrice(uint256 plotId, uint256 newPrice) external onlyPlotOwner(plotId) { require(newPrice > 0, "Price must be greater than 0"); uint oldPrice = _listings[plotId].price; require(oldPrice > 0, "Not listed"); _listings[plotId].price = newPrice; emit PlotPriceChanged(plotId, msg.sender, oldPrice, newPrice); } function delist(uint256 plotId) external onlyPlotOwner(plotId) { _delist(plotId, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); emit PlotDelisted(plotId, msg.sender); } function _delist(uint256 plotId, uint256 doNotReturnIndex) private { delete _listings[plotId]; Offer[] memory offers = _offers[plotId]; uint numOffers = offers.length; for (uint i; i<numOffers;) { if (!offers[i].cancelled && i != doNotReturnIndex) { _claimableEscrow[offers[i].buyer] += offers[i].price; } unchecked { ++i; } } delete _offers[plotId]; } function buy(uint256 plotId, uint256 price) external notPaused { Listing memory listing = _listings[plotId]; require(listing.price > 0, "Not listed"); IERC20 rmrkToken = IERC20(xcRMRK); require(rmrkToken.allowance(msg.sender, address(this)) >= listing.price, "Not enough allowance"); require(price == listing.price, "Price does not match"); _delist(plotId, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); address previousOwner = getPlotOwner(plotId); setPlotOwner(msg.sender, plotId); (uint pay, uint fee) = _getPayAndFee(listing.price); rmrkToken.transferFrom(msg.sender, previousOwner, pay); rmrkToken.transferFrom(msg.sender, beneficiary, fee); emit PlotPurchased(plotId, previousOwner, msg.sender, price); } function makeOffer(uint256 plotId, uint256 price) external notPaused { require(price > 0, "Price must be higher than 0"); address plotOwner = getPlotOwner(plotId); require(plotOwner != msg.sender, "User is land owner"); require(plotOwner != address(0), "Plot not sellable"); // require(getPlotRarity(plotId) != Rarity.Harb, "Cannot offer on Harberger land"); uint listingPrice = _listings[plotId].price; // This check only applies if listed: if (listingPrice > 0) { require(price < listingPrice, "Offer over listed price"); } IERC20 rmrkToken = IERC20(xcRMRK); require(rmrkToken.allowance(msg.sender, address(this)) >= price, "Not enough allowance"); Offer memory offer = Offer(msg.sender, price, block.timestamp, false); _offers[plotId].push(offer); rmrkToken.transferFrom(msg.sender, address(this), price); emit OfferMade(plotId, msg.sender, price); } function cancelOffer(uint256 plotId, uint256 offerIndex) external { require(offerIndex < _offers[plotId].length, "Offer index out of range"); Offer memory offer = _offers[plotId][offerIndex]; require(msg.sender == offer.buyer, "User is not offer owner"); require(!offer.cancelled, "Offer already cancelled"); _claimableEscrow[offer.buyer] += offer.price; _offers[plotId][offerIndex].cancelled = true; emit OfferCancelled(plotId, msg.sender, offer.price); } function getOffers(uint256 plotId) external view returns(Offer[] memory) { return _offers[plotId]; } function acceptOffer(uint256 plotId, uint256 offerIndex, uint256 price) external onlyPlotOwner(plotId) notPaused { require(offerIndex < _offers[plotId].length, "Offer index out of range"); Offer memory offer = _offers[plotId][offerIndex]; require(!offer.cancelled, "Offer already cancelled"); require(offer.price == price, "Price does not match"); _delist(plotId, offerIndex); setPlotOwner(offer.buyer, plotId); IERC20 rmrkToken = IERC20(xcRMRK); (uint pay, uint fee) = _getPayAndFee(offer.price); rmrkToken.transfer(msg.sender, pay); rmrkToken.transfer(beneficiary, fee); emit PlotPurchased(plotId, msg.sender, offer.buyer, price); } function returnEscrowed() external { uint256 returnValue = _claimableEscrow[msg.sender]; require(returnValue > 0, "No escrow to return"); _claimableEscrow[msg.sender] = 0; IERC20(xcRMRK).transfer(msg.sender, returnValue); emit EscrowReturned(msg.sender, returnValue); } // Transfer function transfer(uint plotId, address newOwner) external onlyPlotOwner(plotId) { require(newOwner != msg.sender, "Cannot transfer to self"); require(!_pausedTransfers, "Transfers are paused"); require(_listings[plotId].price == 0, "Cannot transfer listed plot"); require(getPlotRarity(plotId) != Rarity.Harb, "Cannot transfer Harberger land"); setPlotOwner(newOwner, plotId); emit PlotTransferred(plotId, msg.sender, newOwner); } // Utilities function getIsListed(uint256 plotId) external view returns (bool) { return _listings[plotId].price > 0; } function getListedInfo(uint256 plotId) external view returns (uint256, uint256) { Listing memory listing = _listings[plotId]; require(listing.price > 0, "Not listed"); return (listing.price, listing.timestamp); } function getListedPrice(uint256 plotId) external view returns (uint256) { uint256 price = _listings[plotId].price; require(price > 0, "Not listed"); return price; } function getCurrentBid(uint256 plotId) external view returns (uint256) { Offer[] memory offers = _offers[plotId]; uint numOffers = offers.length; uint currentBid = 0; for (uint i; i<numOffers;) { if (!offers[i].cancelled && offers[i].price > currentBid) { currentBid = offers[i].price; } unchecked { ++i; } } return currentBid; } function getClaimableEscrow(address buyer) external view returns (uint256) { return _claimableEscrow[buyer]; } function _getPayAndFee(uint256 price) private view returns (uint256, uint256) { uint256 fee = uint256(price * _creatorFee) / _PRICE_PRECISION; uint256 pay = uint256(price - fee); return (pay, fee); } }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; contract AdminAccesible { address private _owner; // int as value is cheaper than boolean: mapping(address => uint) private _admins; modifier onlyOwner { require(msg.sender == _owner, "User is not owner."); _; } modifier onlyOwnerOrAdmin { require(msg.sender == _owner || isAdmin(msg.sender), "User is not owner or admin."); _; } constructor () { _owner = msg.sender; } function addAdmin(address admin) external onlyOwner { require(admin != address(0), "Admin cannot be the zero address"); _admins[admin] = 1; } function revokeAdmin(address admin) external onlyOwner { delete _admins[admin]; } function isAdmin(address admin) public view returns (bool) { return _admins[admin] == 1; } function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "Owner cannot be the zero address"); _owner = newOwner; } function getOwner() external view returns(address) { return _owner; } }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; interface IERC20 { function transfer( address to, uint256 amount ) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); function allowance( address owner, address spender ) external view returns (uint256); }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; import "./UserData.sol"; import "./Plots.sol"; import "./IERC20.sol"; contract LandSale is Plots { event PlotsBought(uint256[] plotIds, address indexed buyer, address indexed referrer, bool indexed boughtWithCredits); // All discounts should be in terms of x / 1_000_000 uint256 internal constant _PRICE_PRECISION = 1_000_000; uint256 internal constant _MAX_DISCOUNT = 500_000; // 50% uint256 internal constant _REFERRER_FEE = 50_000; // 5% uint256 private constant _LERP_PRECISION = 10_000; uint256 private constant _MIN_MASS_FOR_BIOME_DISCOUNT = 40; uint256 private immutable _commonPrice; uint256 private immutable _rarePrice; uint256 private immutable _epicPrice; uint256 private constant _XCRMRK_DECIMALS = 1*10**10; address internal xcRMRK; address internal beneficiary; address private _userDataAddress; uint256 private _whiteListPhase; uint256 private _dutchStart; uint256 private _dutchDuration; uint256 private _dutchMinMultiplier = 100_000; bool private _referralIsActive; uint256 private _referralMinCommonPlots; // Or equivalent in XCRMRK uint256 private _soldWithCredits; uint256 private _soldWithxcRMRK; mapping(address => uint) private _approvedReferrers; modifier checkWhitelist { UserData(_userDataAddress).checkWhitelist(msg.sender, _whiteListPhase); _; } constructor(uint256 commonPrice_, uint256 rarePrice_, uint256 epicPrice_) { require(commonPrice_ > _XCRMRK_DECIMALS, "Common price must be > 1 xcRMRK"); require(rarePrice_ > _XCRMRK_DECIMALS, "Rare price must be > 1 xcRMRK"); require(epicPrice_ > _XCRMRK_DECIMALS, "Epic price must be > 1 xcRMRK"); _commonPrice = commonPrice_; _rarePrice = rarePrice_; _epicPrice = epicPrice_; _referralIsActive = true; _referralMinCommonPlots = 10; } function getPricesPerRarity() external view returns (uint256, uint256, uint256) { return (_commonPrice, _rarePrice, _epicPrice); } function getReferralIsActive() external view returns (bool) { return _referralIsActive; } function setReferralIsActive(bool isActive) external onlyOwnerOrAdmin { _referralIsActive = isActive; } function getReferralMinCommonPlots() external view returns (uint256) { return _referralMinCommonPlots; } function setReferralMinCommonPlots(uint256 minCommonPlots) external onlyOwnerOrAdmin { _referralMinCommonPlots = minCommonPlots; } function addReferrer(address referrer) external onlyOwnerOrAdmin { require(referrer != address(0), "Referrer cannot be the 0 address"); _approvedReferrers[referrer] = 1; } function removeReferrer(address referrer) external onlyOwnerOrAdmin { delete _approvedReferrers[referrer]; } function isReferrer(address referrer) external view returns (bool) { return _approvedReferrers[referrer] == 1; } function getNumPlotsSold() external view returns (uint256, uint256) { return (_soldWithxcRMRK, _soldWithCredits); } function buyPlots( uint256[] calldata plotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes, address referrer ) external checkWhitelist { _buyPlots(plotIds, singleDiscountIndexes, multiDiscountIndexes, referrer); } function _buyPlots( uint256[] calldata plotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes, address referrer ) internal { require(plotIds.length > 0, "No plots to buy"); uint256 price = _getPurchasePrice(msg.sender, plotIds, singleDiscountIndexes, multiDiscountIndexes); UserData(_userDataAddress).spendDiscounts(msg.sender, singleDiscountIndexes, multiDiscountIndexes); bool success; if (_referrerApplies(referrer)) { (uint pay, uint fee) = _getPayAndReferrerFee(price); success = IERC20(xcRMRK).transferFrom(msg.sender, referrer, fee); if (success) { success = IERC20(xcRMRK).transferFrom(msg.sender, beneficiary, pay); } } else { referrer = address(0); success = IERC20(xcRMRK).transferFrom(msg.sender, beneficiary, price); } require(success, "Landsale: TransferFrom failure"); _processPlotBuy(plotIds, referrer, false); } function _referrerApplies(address referrer) internal view returns (bool) { if (referrer == address(0) || referrer == msg.sender || !_referralIsActive) { return false; } return canRefer(referrer); } function canRefer(address referrer) public view returns(bool) { if (_approvedReferrers[referrer] == 1) { return true; } (uint256 numCommon, uint256 numRare, uint256 numEpic, , ) = countPlotRarities(_allOwnedPlots[referrer]); return numCommon + numRare * 3 + numEpic * 5 >= _referralMinCommonPlots; } function _getPayAndReferrerFee(uint256 price) private pure returns (uint256, uint256) { uint256 fee = uint256(price * _REFERRER_FEE) / _PRICE_PRECISION; uint256 pay = uint256(price - fee); return (pay, fee); } function buyWithCredits(uint256[] calldata plotIds, Rarity creditRarity) external checkWhitelist { uint numPlots = plotIds.length; require(numPlots > 0, "No plots to buy"); uint256 userAvailableCredits = UserData(_userDataAddress).getUserCreditsForRarity(msg.sender, creditRarity); require(userAvailableCredits >= numPlots, "Not enough credits in account"); (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(plotIds); // There are no Harb credits, but Harb can be bought with premium. numPremium += numHarb; numHarb = 0; if (creditRarity == Rarity.Common) { require(numCommon == numPlots, "Only common lands"); UserData(_userDataAddress).spendCredits(msg.sender, numPlots, 0, 0, 0); _processPlotBuy(plotIds, address(0), true); } else if (creditRarity == Rarity.Rare) { require(numCommon + numRare == numPlots, "Only common or rare lands"); UserData(_userDataAddress).spendCredits(msg.sender, 0, numPlots, 0, 0); _processPlotBuy(plotIds, address(0), true); } else if (creditRarity == Rarity.Epic) { require(numCommon + numRare + numEpic == numPlots, "Only common, rare or epic lands"); UserData(_userDataAddress).spendCredits(msg.sender, 0, 0, numPlots, 0); _processPlotBuy(plotIds, address(0), true); } else { // These conditions could only break if the in chain plot data was corrupted: require( creditRarity == Rarity.Premium && numCommon + numRare + numEpic + numPremium == numPlots, "Unexpected credit rarity" ); UserData(_userDataAddress).spendCredits(msg.sender, 0, 0, 0, numPlots); _processPlotBuy(plotIds, address(0), true); } } function _processPlotBuy(uint256[] memory plotIds, address referrer, bool boughtWithCredits) private { uint256 numPlots = plotIds.length; for(uint i; i<numPlots;) { uint256 plotId = plotIds[i]; require(getPlotAvailability(plotId), "RMRK Landsale: Plot unavailable"); setPlotOwner(msg.sender, plotId); unchecked { ++i; } } if (boughtWithCredits) { _soldWithCredits += plotIds.length; } else { _soldWithxcRMRK += plotIds.length; } emit PlotsBought(plotIds, msg.sender, referrer, boughtWithCredits); } function smartBuyWithCredits( uint256[] calldata plotIds, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits ) external checkWhitelist { _smartBuyWithCredits(plotIds, commonCredits, rareCredits, epicCredits, premiumCredits); } function _smartBuyWithCredits( uint256[] calldata plotIds, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits ) internal { require(plotIds.length > 0, "No plots to buy"); (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(plotIds); // There are no Harb credits, but Harb can be bought with premium. numPremium += numHarb; numHarb = 0; // Pass missing to the next tier, order is critical if(numCommon > commonCredits) { numRare += (numCommon - commonCredits); numCommon -= (numCommon - commonCredits); } // Pass missing to the next tier, order is critical if(numRare > rareCredits) { numEpic += (numRare - rareCredits); numRare -= (numRare - rareCredits); } // Pass missing to the next tier, order is critical if(numEpic > epicCredits) { numPremium += (numEpic - epicCredits); numEpic -= (numEpic - epicCredits); } require( commonCredits >= numCommon && rareCredits >= numRare && epicCredits >= numEpic && premiumCredits >= numPremium, "Not enough credits set" ); UserData(_userDataAddress).spendCredits(msg.sender, numCommon, numRare, numEpic, numPremium); _processPlotBuy(plotIds, address(0), true); } function mixBuy( uint256[] calldata xcRmrkPlotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes, address referrer, uint256[] calldata creditsPlotIds, UserCredits calldata userCredits ) external checkWhitelist { _smartBuyWithCredits(creditsPlotIds, userCredits.commonCredits, userCredits.rareCredits, userCredits.epicCredits, userCredits.premiumCredits); _buyPlots(xcRmrkPlotIds, singleDiscountIndexes, multiDiscountIndexes, referrer); } function getPurchasePrice( address buyer, uint256[] memory plotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes ) external view returns (uint) { return _getPurchasePrice(buyer, plotIds, singleDiscountIndexes, multiDiscountIndexes); } function _getPurchasePrice( address buyer, uint256[] memory plotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes ) private view returns (uint) { uint numPlots = plotIds.length; require(singleDiscountIndexes.length == 0 || numPlots == 1, "Use single discounts with 1 plot"); uint256 price = 0; // We load all discounts into a single array for simplicity UserData.Discount[] memory discounts = UserData(_userDataAddress).loadDiscounts(buyer, singleDiscountIndexes, multiDiscountIndexes); for (uint i; i<numPlots;) { PlotData memory plotData = getPlotData(plotIds[i]); uint256 plotPrice = _getPriceWithDiscount(plotData, discounts); price += plotPrice; unchecked { ++i; } } if (_isDutchPhase()) { price = _getDutchPrice(price); } return price; } function _getPriceWithDiscount(PlotData memory plotData, UserData.Discount[] memory discounts) private view returns (uint) { uint256 initPrice; uint256 discountSum; if (plotData.rarity == Rarity.Common) { initPrice = _commonPrice; } else if (plotData.rarity == Rarity.Rare) { initPrice = _rarePrice; } else if (plotData.rarity == Rarity.Epic) { initPrice = _epicPrice; } else { revert("Bad land rarity"); } uint numDiscounts = discounts.length; // This should be the common case if (numDiscounts == 0){ return initPrice; } UserData.Discount memory discount; for (uint i; i < numDiscounts;) { discount = discounts[i]; if (discount.forAll) { discountSum += discount.discount; } else if (plotData.cyber > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forCyberBiome) { discountSum += discount.discount; } else if (plotData.steampunk > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forSteampunkBiome) { discountSum += discount.discount; } else if (plotData.wind > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forWindBiome) { discountSum += discount.discount; } else if (plotData.volcano > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forVolcanoBiome) { discountSum += discount.discount; } else if (plotData.fire > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forFireBiome) { discountSum += discount.discount; } else if (plotData.water > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forWaterBiome) { discountSum += discount.discount; } else if (plotData.necro > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forNecroBiome) { discountSum += discount.discount; } else if (plotData.mecha > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forMechaBiome) { discountSum += discount.discount; } else if (plotData.dragon > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forDragonBiome) { discountSum += discount.discount; } else if (plotData.meadow > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forMeadowBiome) { discountSum += discount.discount; } else if (plotData.isIsland == 1 && discount.forIsland) { discountSum += discount.discount; } else if (plotData.isShore == 1 && discount.forShore) { discountSum += discount.discount; } else if (plotData.isMountainFoot == 1 && discount.forMountainFoot) { discountSum += discount.discount; } unchecked { ++i; } } if (discountSum > _MAX_DISCOUNT) { discountSum = _MAX_DISCOUNT; } return (initPrice * (_PRICE_PRECISION - discountSum)) / _PRICE_PRECISION; } function setxcRMRK(address newAddress) external onlyOwnerOrAdmin { xcRMRK = newAddress; } function setUserDataAddress(address newAddress) external onlyOwnerOrAdmin { _userDataAddress = newAddress; } function setBeneficiary(address newAddress) external onlyOwnerOrAdmin { beneficiary = newAddress; } function setDutchConfig(uint256 start, uint256 duration, uint256 multiplier) external onlyOwnerOrAdmin { require(multiplier < 1_000_000, "Value over precision"); _dutchStart = start; _dutchDuration = duration; _dutchMinMultiplier = multiplier; } function _isDutchPhase() private view returns(bool) { return _whiteListPhase == 5; } function getXcRMRK() external view returns(address) { return xcRMRK; } function getUserDataAddress() external view returns(address) { return _userDataAddress; } function getBeneficiary() external view returns(address) { return beneficiary; } function getWhiteListPhase() external view returns(uint256) { return _whiteListPhase; } function getDutchStart() external view returns(uint256) { return _dutchStart; } function getDutchDuration() external view returns(uint256) { return _dutchDuration; } function getDutchMinMultiplier() external view returns(uint256) { return _dutchMinMultiplier; } // White list: function setWhitelistPhase(uint256 phaseId) external onlyOwnerOrAdmin { require(phaseId <= 5, "Bad phase id"); _whiteListPhase = phaseId; } function getDutchPrice(uint256 price) external view returns(uint) { return _getDutchPrice(price); } function _getDutchPrice(uint256 price) private view returns(uint) { //Clamp to prevent underflow on currentElapsedRatio calculation // elapsed must be between 0 and _dutchDuration: uint256 elapsed = _clampUpper(_getTimeElapsed(), _dutchDuration); // currentElapsedRatio is between 0 (beginning of auction) to _LERP_PRECISION (end of auction) uint256 currentElapsedRatio = _LERP_PRECISION - (_dutchDuration - elapsed) * _LERP_PRECISION / _dutchDuration; // _PRICE_PRECISION is 100% uint256 currentPriceMultipler = _lerp(_PRICE_PRECISION, _dutchMinMultiplier, currentElapsedRatio); uint256 adjustedPrice = currentPriceMultipler * price / _PRICE_PRECISION; return adjustedPrice; } function _getTimeElapsed() private view returns(uint) { return _dutchStart < block.timestamp ? (block.timestamp - _dutchStart) : 0 ; } //Linear interpellation. Position has precision of _LERP_PRECISION function _lerp(uint256 val0, uint256 val1, uint256 position) private pure returns(uint256) { uint256 res = ((((_LERP_PRECISION - position) * val0) + (position * val1)) / _LERP_PRECISION); return res; } function _clampUpper(uint256 value, uint256 clamp) private pure returns(uint) { if (value < clamp){ return value; } else { return clamp; } } }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; contract LandSaleCore { enum Rarity { None, Common, Rare, Epic, Harb, Premium } enum Entropy { None, Seldom, Infrequent, Uncommon, Common, Frequent, Constant } struct UserCredits { uint256 commonCredits; uint256 rareCredits; uint256 epicCredits; uint256 premiumCredits; } }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; import "./AdminAccessible.sol"; import "./LandSaleCore.sol"; contract Plots is AdminAccesible, LandSaleCore { event PlotResourceSet(uint256 indexed plotId, string buyer); struct PlotData { uint8 cyber; uint8 steampunk; uint8 wind; uint8 volcano; uint8 fire; uint8 water; uint8 necro; uint8 mecha; uint8 dragon; uint8 meadow; uint8 isShore; // 0 = no, 1 = yes uint8 isIsland; // 0 = mainland, 1 = island uint8 isMountainFoot; // 0 = no, 1 = yes Rarity rarity; Entropy entropy; } struct OwnedPlotRarities { uint32 common; uint32 rare; uint32 epic; uint32 harb; uint32 premium; } mapping(uint256 => PlotData) private _plotData; mapping(uint256 => address) private _plotOwners; mapping(uint256 => string) private _plotImg; mapping(address => uint256[]) internal _allOwnedPlots; bool private _plotDataLock; bool private _migrationLock; modifier onlyPlotOwner (uint256 plotId) { require(msg.sender == _plotOwners[plotId], "User is not land owner"); _; } function getPlotOwner(uint256 plotId) public view returns (address) { return _plotOwners[plotId]; } function setPlotDataLock(bool state) external onlyOwnerOrAdmin { _plotDataLock = state; } function getMigrationLock() external view returns (bool) { return _migrationLock; } function lockMigration() external onlyOwnerOrAdmin { _migrationLock = true; } function getPlotDataLock() external view returns (bool) { return _plotDataLock; } function getPlotData(uint256 plotId) public view returns(PlotData memory) { return _plotData[plotId]; } function getPlotRarity(uint256 plotId) internal view returns(Rarity) { return _plotData[plotId].rarity; } //Expects all arrays to be identical size. function setPlotDataMulti(uint256[] calldata plotIds, PlotData[] calldata plotsData) external onlyOwnerOrAdmin { require(!_plotDataLock, "Plot data setter is locked."); uint256 len = plotIds.length; require(len==plotsData.length, "Arrays must have the same length"); for(uint i; i<len;) { uint256 plotId = plotIds[i]; _plotData[plotId] = plotsData[i]; unchecked { ++i; } } } function setPlotData(uint256 plotId, PlotData calldata plotData) external onlyOwnerOrAdmin { require(!_plotDataLock, "Plot data setter is locked."); _plotData[plotId] = plotData; } function countPlotRarities(uint256[] memory plotIds) internal view returns (uint, uint, uint, uint, uint) { uint256 commons; uint256 rares; uint256 epics; uint256 harbs; uint256 premium; uint256 len = plotIds.length; for(uint i; i<len;) { uint256 plotId = plotIds[i]; if (_plotData[plotId].rarity == Rarity.Common) { commons +=1; } else if (_plotData[plotId].rarity == Rarity.Rare) { rares +=1; } else if (_plotData[plotId].rarity == Rarity.Epic) { epics +=1; } else if (_plotData[plotId].rarity == Rarity.Harb) { harbs +=1; } else { // This condition should be unreachable require(_plotData[plotId].rarity == Rarity.Premium, "Bad land rarity"); premium +=1; } unchecked { ++i; } } return (commons, rares, epics, harbs, premium); } function getOwnedPlotRarities(address user) external view returns(OwnedPlotRarities memory ownedPlotRarities) { (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(_allOwnedPlots[user]); ownedPlotRarities = OwnedPlotRarities({ common: uint32(numCommon), rare: uint32(numRare), epic: uint32(numEpic), harb: uint32(numHarb), premium: uint32(numPremium) }); } function getPlotAvailability(uint256 plotId) public view returns(bool) { require(_plotData[plotId].rarity != Rarity.None, "Plot not initialized"); return _plotOwners[plotId] == address(0); } function getPlotOwners(uint256[] memory plotIds) external view returns(address[] memory) { uint256 numPlots = plotIds.length; address[] memory owners = new address[](numPlots); for(uint i; i<numPlots;) { uint256 plotId = plotIds[i]; owners[i] = _plotOwners[plotId]; unchecked { ++i; } } return owners; } function getOwnedPlots(address user) external view returns(uint256[] memory) { return _allOwnedPlots[user]; } function migratePlotOwners( address[] memory users, uint256[] memory plotIds ) public onlyOwnerOrAdmin { // We'll lock after migration is complete so not even the owner can do it. require(!_migrationLock, "Migration is now locked"); uint numUsers = users.length; require(numUsers == plotIds.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _setPlotOwner(users[i], plotIds[i]); unchecked { ++i; } } } function setPlotOwner(address user, uint256 plotId) internal { address oldOwner = _plotOwners[plotId]; _setPlotOwner(user, plotId); // Remove plot from old owner if (oldOwner != address(0)) { uint256[] memory oldOwnerPlots = _allOwnedPlots[oldOwner]; uint256 len = oldOwnerPlots.length; uint256 oldIndex = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; for(uint i; i<len;) { if (oldOwnerPlots[i] == plotId) { oldIndex = i; break; } unchecked { ++i; } } // This condition should be unreachable require(oldIndex != 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, "Plot not found in old owner"); // No need to swap if we're removing the last element if (oldIndex != len-1) { _allOwnedPlots[oldOwner][oldIndex] = _allOwnedPlots[oldOwner][len-1]; } _allOwnedPlots[oldOwner].pop(); } } function _setPlotOwner(address user, uint256 plotId) private { _plotOwners[plotId] = user; _allOwnedPlots[user].push(plotId); } function setPlotResource(uint256 plotId, string memory imgData) external onlyPlotOwner(plotId) { _plotImg[plotId] = imgData; emit PlotResourceSet(plotId, imgData); } function getPlotResource(uint256 plotId) external view returns(string memory) { return _plotImg[plotId]; } function getPlotResourceBatch(uint256[] memory plotIds) external view returns(string[] memory) { uint256 numPlots = plotIds.length; string[] memory resources = new string[](numPlots); for(uint i; i<numPlots;) { uint256 plotId = plotIds[i]; resources[i] = _plotImg[plotId]; unchecked { ++i; } } return resources; } }
//SPDX-License-Identifier: Apache 2.0 pragma solidity ^0.8.13; import "./AdminAccessible.sol"; import "./LandSaleCore.sol"; contract UserData is AdminAccesible, LandSaleCore { event CreditsSpent(address indexed user, uint common, uint rare, uint epic, uint premium); event DiscountsSpent(address indexed user, uint256[] singleDiscountIndexes, uint256[] multiDiscountIndexes); struct UserWhiteList { bool phase1; bool phase2; bool phase3; } struct Discount { uint128 discount; bool forCyberBiome; bool forSteampunkBiome; bool forWindBiome; bool forVolcanoBiome; bool forFireBiome; bool forWaterBiome; bool forNecroBiome; bool forMechaBiome; bool forDragonBiome; bool forMeadowBiome; bool forShore; bool forIsland; bool forMountainFoot; bool forAll; } struct UserDiscounts { Discount[] single; Discount[] multi; } //getter composition struct UserDataIntake { uint256 commonCredits; uint256 rareCredits; uint256 epicCredits; uint256 premiumCredits; Discount[] singleDiscounts; Discount[] multiDiscounts; bool whiteListPhase1; bool whiteListPhase2; bool whiteListPhase3; } // Credits mapping(address => mapping(Rarity => uint256)) private _userCredits; // Whitelist address private _landSaleAddress; uint256 private _lastUpdate; mapping(address => UserWhiteList) private _userWL; // Discounts mapping(address => Discount[]) private _userDiscountsSingle; mapping(address => Discount[]) private _userDiscountsMulti; modifier onlyLandsale { require(_landSaleAddress == msg.sender, "Forbidden"); _; } function checkWhitelist(address user, uint256 whiteListPhase) external view { if (whiteListPhase == 0) { revert("Sale not open"); } else if (whiteListPhase == 1) { require( _userWL[user].phase1, "Kokopelli: Not whitelisted" ); } else if (whiteListPhase == 2) { require( _userWL[user].phase1 || _userWL[user].phase2, "Kanaria: Not whitelisted" ); } else if (whiteListPhase == 3) { require( _userWL[user].phase1 || _userWL[user].phase2 || _userWL[user].phase3, "WL: Not whitelisted"); } // 4 is public, 5 is dutch, they require no whitelist } // LandSale function setLandSaleAddress(address landSaleAddress) external onlyOwnerOrAdmin { _landSaleAddress = landSaleAddress; } function getLandSaleAddress() external view returns(address) { return _landSaleAddress; } // Credits function setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin { _setUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits); _setLastUpdate(); } function setUserCreditsBatch( address[] calldata users, uint256[] calldata commonCredits, uint256[] calldata rareCredits, uint256[] calldata epicCredits, uint256[] calldata premiumCredits ) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _setUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]); unchecked { ++i; } } _setLastUpdate(); } function _setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) private { _userCredits[user][Rarity.Common] = commonCredits; _userCredits[user][Rarity.Rare] = rareCredits; _userCredits[user][Rarity.Epic] = epicCredits; _userCredits[user][Rarity.Premium] = premiumCredits; } function addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin { _addUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits); _setLastUpdate(); } function addUserCreditsBatch( address[] calldata users, uint256[] calldata commonCredits, uint256[] calldata rareCredits, uint256[] calldata epicCredits, uint256[] calldata premiumCredits ) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _addUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]); unchecked { ++i; } } _setLastUpdate(); } function _addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) internal { _userCredits[user][Rarity.Common] += commonCredits; _userCredits[user][Rarity.Rare] += rareCredits; _userCredits[user][Rarity.Epic] += epicCredits; _userCredits[user][Rarity.Premium] += premiumCredits; } function removeAllUserCredits(address user) external onlyOwnerOrAdmin { delete _userCredits[user][Rarity.Common]; delete _userCredits[user][Rarity.Rare]; delete _userCredits[user][Rarity.Epic]; delete _userCredits[user][Rarity.Premium]; } function getUserCreditData(address user) external view returns (UserCredits memory userCreditData) { userCreditData = UserCredits ({ commonCredits: _userCredits[user][Rarity.Common], rareCredits: _userCredits[user][Rarity.Rare], epicCredits: _userCredits[user][Rarity.Epic], premiumCredits: _userCredits[user][Rarity.Premium] }); } function getUserCreditsForRarity(address user, Rarity rarity) external view returns (uint256) { return _userCredits[user][rarity]; } function spendCredits(address user, uint common, uint rare, uint epic, uint premium) external onlyLandsale { require(_userCredits[user][Rarity.Common] >= common, "Not enough common credits"); require(_userCredits[user][Rarity.Rare] >= rare, "Not enough rare credits"); require(_userCredits[user][Rarity.Epic] >= epic, "Not enough epic credits"); require(_userCredits[user][Rarity.Premium] >= premium, "Not enough premium credits"); _userCredits[user][Rarity.Common] -= common; _userCredits[user][Rarity.Rare] -= rare; _userCredits[user][Rarity.Epic] -= epic; _userCredits[user][Rarity.Premium] -= premium; emit CreditsSpent(user, common, rare, epic, premium); } function setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) external onlyOwnerOrAdmin { _setUserWhitelist(user, phase1, phase2, phase3); _setLastUpdate(); } function setUserWhitelistBatch( address[] calldata users, bool[] calldata phase1, bool[] calldata phase2, bool[] calldata phase3 ) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == phase1.length && numUsers == phase2.length && numUsers == phase3.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _setUserWhitelist(users[i], phase1[i], phase2[i], phase3[i]); unchecked { ++i; } } _setLastUpdate(); } // Specific function to save gas since we expect to call this more. function setUserWhitelistBatchPhass3( address[] calldata users, bool[] calldata phase3) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == phase3.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _userWL[users[i]].phase3 = phase3[i]; unchecked { ++i; } } _setLastUpdate(); } function _setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) private { _userWL[user] = UserWhiteList ({ phase1: phase1, phase2: phase2, phase3: phase3 }); } function removeUserWhitelist(address user) external onlyOwnerOrAdmin { delete _userWL[user]; } function getUserWhitelistStatus(address user) external view returns(UserWhiteList memory userWhitelistData) { userWhitelistData = _userWL[user]; } // Discounts function setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin { _setUserDiscounts(user, singleDiscounts, multiDiscounts); _setLastUpdate(); } function setUserDiscountsBatch( address[] calldata users, Discount[][] calldata singleDiscounts, Discount[][] calldata multiDiscounts ) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { _setUserDiscounts(users[i], singleDiscounts[i], multiDiscounts[i]); unchecked { ++i; } } _setLastUpdate(); } function _setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) private { delete _userDiscountsSingle[user]; delete _userDiscountsMulti[user]; _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts); _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts); } function _addUserDiscounts(Discount[] storage localDiscounts, Discount[] calldata newDiscounts) internal { uint numDiscounts = newDiscounts.length; for(uint i; i<numDiscounts;) { localDiscounts.push(newDiscounts[i]); unchecked { ++i; } } } function addUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin { _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts); _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts); _setLastUpdate(); } function addUserDiscountsBatch( address[] calldata users, Discount[][] calldata singleDiscounts, Discount[][] calldata multiDiscounts ) external onlyOwnerOrAdmin { uint numUsers = users.length; require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length"); for (uint i; i<numUsers;) { address user = users[i]; _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts[i]); _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts[i]); unchecked { ++i; } } _setLastUpdate(); } function removeAllUserDiscoutns(address user) external onlyOwnerOrAdmin { delete _userDiscountsSingle[user]; delete _userDiscountsMulti[user]; } function getUserDiscountData(address user) external view returns (UserDiscounts memory userDiscountData) { userDiscountData = UserDiscounts ({ single: _userDiscountsSingle[user], multi: _userDiscountsMulti[user] }); } function loadDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external view returns (Discount[] memory) { uint numSingleDiscounts = singleDiscountIndexes.length; uint numMultiDiscounts = multiDiscountIndexes.length; Discount[] memory discounts = new Discount[](numSingleDiscounts + numMultiDiscounts); if (numSingleDiscounts > 0) { for (uint i; i<numSingleDiscounts;) { require(singleDiscountIndexes[i] < _userDiscountsSingle[user].length, "Bad single discount index"); discounts[i] = _userDiscountsSingle[user][singleDiscountIndexes[i]]; unchecked { ++i; } } } if (numMultiDiscounts > 0) { for (uint i; i<numMultiDiscounts;) { require(multiDiscountIndexes[i] < _userDiscountsMulti[user].length, "Bad multi discount index"); // Mind to start from after the last index for single discounts discounts[numSingleDiscounts + i] = _userDiscountsMulti[user][multiDiscountIndexes[i]]; unchecked { ++i; } } } return discounts; } function spendDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external onlyLandsale { _removeDiscountsByIndex(_userDiscountsSingle[user], singleDiscountIndexes); _removeDiscountsByIndex(_userDiscountsMulti[user], multiDiscountIndexes); if (singleDiscountIndexes.length > 0 || multiDiscountIndexes.length > 0) { emit DiscountsSpent(user, singleDiscountIndexes, multiDiscountIndexes); } } function _removeDiscountsByIndex(Discount[] storage array, uint256[] calldata indexes) internal { uint numDiscounts = indexes.length; if (numDiscounts == 0) { return; } // Since we move the last element to a lower position on deletion // We may save gas by deleting higher indexes first, so we go last to first // and enforce order using lastIndex variable. uint lastIndex = indexes[numDiscounts - 1]; for (uint i; i<numDiscounts;) { uint index = indexes[numDiscounts - i - 1]; uint arrayLen = array.length; require(index <= lastIndex, "Discount indexes must be ordered"); // This condition should be unreachable, since discounts were already loaded. require(index < arrayLen, "Bad array index"); if (index != arrayLen - 1) { array[index] = array[arrayLen - 1]; } array.pop(); lastIndex = index; unchecked { ++i; } } } // All in one function getUserData(address user) external view returns (UserDataIntake memory userData) { UserWhiteList memory userWhitelist = _userWL[user]; userData = UserDataIntake ({ commonCredits: _userCredits[user][Rarity.Common], rareCredits: _userCredits[user][Rarity.Rare], epicCredits: _userCredits[user][Rarity.Epic], premiumCredits: _userCredits[user][Rarity.Premium], singleDiscounts: _userDiscountsSingle[user], multiDiscounts: _userDiscountsMulti[user], whiteListPhase1: userWhitelist.phase1, whiteListPhase2: userWhitelist.phase2, whiteListPhase3: userWhitelist.phase3 }); } function setUserData(address user, UserDataIntake calldata intakeData) external onlyOwnerOrAdmin { _setUserWhitelist(user, intakeData.whiteListPhase1, intakeData.whiteListPhase2, intakeData.whiteListPhase3); _setUserCredits(user, intakeData.commonCredits, intakeData.rareCredits, intakeData.epicCredits, intakeData.premiumCredits); _setUserDiscounts(user, intakeData.singleDiscounts, intakeData.multiDiscounts); _setLastUpdate(); } function setUserDataBatch(address[] calldata users, UserDataIntake[] calldata intakeData) external onlyOwnerOrAdmin { uint256 len = users.length; require(len == intakeData.length, "Arrays must have the same length"); for(uint i; i<len;) { _setUserWhitelist(users[i], intakeData[i].whiteListPhase1, intakeData[i].whiteListPhase2, intakeData[i].whiteListPhase3); _setUserCredits(users[i], intakeData[i].commonCredits, intakeData[i].rareCredits, intakeData[i].epicCredits, intakeData[i].premiumCredits); _setUserDiscounts(users[i], intakeData[i].singleDiscounts, intakeData[i].multiDiscounts); unchecked { ++i; } } _setLastUpdate(); } // Last Update function _setLastUpdate() private { _lastUpdate = block.timestamp; } function getLastUpdate() external view returns (uint256) { return _lastUpdate; } }
[{"inputs":[{"internalType":"uint256","name":"commonPrice","type":"uint256"},{"internalType":"uint256","name":"rarePrice","type":"uint256"},{"internalType":"uint256","name":"epicPrice","type":"uint256"},{"internalType":"uint256","name":"creatorFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"EscrowReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"OfferCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"OfferMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"}],"name":"PlotDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PlotListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PlotPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PlotPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":false,"internalType":"string","name":"buyer","type":"string"}],"name":"PlotResourceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotIds","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"PlotTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"bool","name":"boughtWithCredits","type":"bool"}],"name":"PlotsBought","type":"event"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"addReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyPlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"enum LandSaleCore.Rarity","name":"creditRarity","type":"uint8"}],"name":"buyWithCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"canRefer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"delist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBeneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"getClaimableEscrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getCurrentBid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchMinMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"getDutchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getIsListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getListedInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getListedPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMigrationLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumPlotsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getOffers","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct LandSaleMarket.Offer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwnedPlotRarities","outputs":[{"components":[{"internalType":"uint32","name":"common","type":"uint32"},{"internalType":"uint32","name":"rare","type":"uint32"},{"internalType":"uint32","name":"epic","type":"uint32"},{"internalType":"uint32","name":"harb","type":"uint32"},{"internalType":"uint32","name":"premium","type":"uint32"}],"internalType":"struct Plots.OwnedPlotRarities","name":"ownedPlotRarities","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwnedPlots","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPausedSales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPausedTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotAvailability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotData","outputs":[{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlotDataLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"getPlotOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotResource","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"getPlotResourceBatch","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesPerRarity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"}],"name":"getPurchasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReferralIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReferralMinCommonPlots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserDataAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhiteListPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXcRMRK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"isReferrer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"list","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"makeOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"migratePlotOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"xcRmrkPlotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256[]","name":"creditsPlotIds","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"internalType":"struct LandSaleCore.UserCredits","name":"userCredits","type":"tuple"}],"name":"mixBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"removeReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnEscrowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"creatorFee","type":"uint256"}],"name":"setCreatorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setDutchConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPausedSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPausedTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData","name":"plotData","type":"tuple"}],"name":"setPlotData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPlotDataLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData[]","name":"plotsData","type":"tuple[]"}],"name":"setPlotDataMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"string","name":"imgData","type":"string"}],"name":"setPlotResource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setReferralIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minCommonPlots","type":"uint256"}],"name":"setReferralMinCommonPlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUserDataAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"phaseId","type":"uint256"}],"name":"setWhitelistPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setxcRMRK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"name":"smartBuyWithCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052620186a0600c553480156200001857600080fd5b50604051620061b2380380620061b28339810160408190526200003b9162000191565b600080546001600160a01b031916331790558383836402540be4008311620000aa5760405162461bcd60e51b815260206004820152601f60248201527f436f6d6d6f6e207072696365206d757374206265203e2031207863524d524b0060448201526064015b60405180910390fd5b6402540be4008211620001005760405162461bcd60e51b815260206004820152601d60248201527f52617265207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b6402540be4008111620001565760405162461bcd60e51b815260206004820152601d60248201527f45706963207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b60809290925260a05260c052600d805460ff19166001179055600a600e5560135550506012805461010161ffff1990911617905550620001c8565b60008060008060808587031215620001a857600080fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c051615fa56200020d6000396000818161046601526146fc01526000818161044001526146b601526000818161041d01526146700152615fa56000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c80638708c55e11610220578063d21c694811610130578063e5e06d45116100b8578063f2fde38b11610087578063f2fde38b14610a13578063f38ced4714610a26578063f48dab7014610a31578063fefa9bb114610a44578063ff39a2ea14610a5757600080fd5b8063e5e06d45146109ba578063e63c88dc146109cd578063f0b3300f146109e0578063f2b0a55d146109f357600080fd5b8063d64d6968116100ff578063d64d696814610935578063d6febde814610961578063da4e364f14610974578063dd9e9dc814610987578063dfa49e6f1461099a57600080fd5b8063d21c6948146108f4578063d2839e79146108fc578063d3a8c4ec1461090f578063d45557cc1461092257600080fd5b8063a718d525116101b3578063b79df7e111610182578063b79df7e11461082a578063bc138fe014610853578063be0800251461086f578063c0ea1f1114610882578063c1744fd81461089557600080fd5b8063a718d525146107de578063b3de019c146107f1578063b673344014610804578063b7760c8f1461081757600080fd5b8063964bc33f116101ef578063964bc33f1461076f578063992274b114610782578063a11b6fbb14610795578063a1f45dd6146107b557600080fd5b80638708c55e14610718578063877850ef1461072b5780638927e6271461073e578063893d20e81461075e57600080fd5b80632d34567011610326578063565a2e2c116102ae578063635335231161027d57806363533523146106be57806370480275146106ce57806379bd6cf9146106e15780637a00e2e3146106f2578063864ca4851461070557600080fd5b8063565a2e2c1461067f5780635a5b0f56146106905780635c09d628146106985780635f53e077146106ab57600080fd5b806342434134116102f55780634243413414610636578063450d996a1461063e57806347831ac01461065157806350fd736714610659578063549458d41461066c57600080fd5b80632d345670146105e55780633bb9fcab146105f85780633db7a49f1461060b5780633e1042191461061657600080fd5b8063142a6fca116103a95780631e4a8116116103785780631e4a81161461057957806324d7806c1461058c57806326394dbd1461059f5780632a46841f146105ca5780632c92f9bc146105d257600080fd5b8063142a6fca14610509578063194a9716146105295780631c31f7101461055b5780631da66c271461056e57600080fd5b80630dd16fd5116103e55780630dd16fd5146104c85780630e15166e146104db5780630fc0482a146104ee57806311ea8857146104f657600080fd5b8063012a53311461041757806301d3f03b14610499578063024463c1146104ab57806305b7cdd3146104b3575b600080fd5b604080517f000000000000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091526060015b60405180910390f35b600a545b604051908152602001610490565b600c5461049d565b6104c66104c1366004614cdb565b610a67565b005b6104c66104d6366004614cfd565b610e5b565b6104c66104e9366004614d24565b610e99565b6104c6610ee5565b61049d610504366004614ea5565b610f2f565b61051c610517366004614cfd565b610f4a565b6040516104909190614f96565b61054b610537366004614cfd565b600090815260146020526040902054151590565b6040519015158152602001610490565b6104c6610569366004614fa9565b610fec565b60125460ff1661054b565b6104c6610587366004614fd1565b611047565b61054b61059a366004614fa9565b61159d565b6006546201000090046001600160a01b03165b6040516001600160a01b039091168152602001610490565b6104c66115bc565b6104c66105e0366004615027565b6116d6565b6104c66105f3366004614fa9565b611766565b6104c6610606366004615053565b6117aa565b60065460ff1661054b565b610629610624366004614fa9565b6118e2565b6040516104909190615112565b600e5461049d565b6104c661064c366004615156565b61194d565b60095461049d565b6104c6610667366004614cdb565b6119cb565b6104c661067a366004614fa9565b611b5d565b6007546001600160a01b03166105b2565b60135461049d565b6104c66106a6366004614fa9565b611bc0565b6104c66106b9366004614d24565b611c1b565b601254610100900460ff1661054b565b6104c66106dc366004614fa9565b611c6e565b6008546001600160a01b03166105b2565b6104c6610700366004614fa9565b611d0b565b6104c6610713366004614cfd565b611d5e565b6104c6610726366004614d24565b611d9c565b6104c6610739366004614cfd565b611de8565b61075161074c366004615200565b611e66565b604051610490919061523c565b6000546001600160a01b03166105b2565b6104c661077d366004614cfd565b611fae565b6104c661079036600461529e565b612023565b6107a86107a3366004615200565b61209f565b60405161049091906152ff565b6105b26107c3366004614cfd565b6000908152600360205260409020546001600160a01b031690565b6104c66107ec366004615340565b61216d565b6104c66107ff366004614cdb565b612202565b6104c66108123660046153de565b61230b565b6104c6610825366004615478565b612452565b61049d610838366004614fa9565b6001600160a01b031660009081526016602052604090205490565b601054600f545b60408051928352602083019190915201610490565b6104c661087d366004614d24565b61264d565b61054b610890366004614cfd565b612699565b6108a86108a3366004614fa9565b612727565b6040516104909190815163ffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b600b5461049d565b61054b61090a366004614fa9565b612803565b61049d61091d366004614cfd565b6128dc565b6104c6610930366004614cdb565b6128ed565b61054b610943366004614fa9565b6001600160a01b031660009081526011602052604090205460011490565b6104c661096f366004614cdb565b612b13565b61049d610982366004614cfd565b612e0b565b6104c66109953660046154bc565b612f2c565b6109ad6109a8366004614cfd565b612fbf565b60405161049091906155a5565b61085a6109c8366004614cfd565b613061565b6104c66109db366004615027565b6130bc565b6104c66109ee366004615614565b6133fd565b610a06610a01366004614cfd565b6134a3565b6040516104909190615688565b6104c6610a21366004614fa9565b61367d565b600d5460ff1661054b565b61049d610a3f366004614cfd565b61371f565b6104c6610a52366004614fa9565b61374b565b600654610100900460ff1661054b565b60125460ff1615610a935760405162461bcd60e51b8152600401610a8a9061579f565b60405180910390fd5b60008111610ae35760405162461bcd60e51b815260206004820152601b60248201527f5072696365206d75737420626520686967686572207468616e203000000000006044820152606401610a8a565b6000828152600360205260409020546001600160a01b0316338103610b3f5760405162461bcd60e51b81526020600482015260126024820152712ab9b2b91034b9903630b7321037bbb732b960711b6044820152606401610a8a565b6001600160a01b038116610b895760405162461bcd60e51b8152602060048201526011602482015270506c6f74206e6f742073656c6c61626c6560781b6044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff166005811115610bb557610bb561564e565b03610c025760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206f66666572206f6e20486172626572676572206c616e6400006044820152606401610a8a565b6000838152601460205260409020548015610c6657808310610c665760405162461bcd60e51b815260206004820152601760248201527f4f66666572206f766572206c69737465642070726963650000000000000000006044820152606401610a8a565b600654604051636eb1769f60e11b8152336004820152306024820152620100009091046001600160a01b0316908490829063dd62ed3e90604401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce191906157c9565b1015610d265760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a8a565b60408051608081018252338082526020808301888152428486019081526000606086018181528c825260158552878220805460018082018355918452959092208751600496870290910180546001600160a01b0319166001600160a01b039283161781559451928501929092559151600284015590516003909201805460ff19169215159290921790915593516323b872dd60e01b815292938516926323b872dd92610dd892909130918b91016157e2565b6020604051808303816000875af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190615811565b50604051858152339087907fbdf1e76c2ba2a5c85b93bf78678a4a3b06d63b18422612dac8d7d5249ed467149060200160405180910390a3505050505050565b6000546001600160a01b0316331480610e785750610e783361159d565b610e945760405162461bcd60e51b8152600401610a8a9061582e565b601355565b6000546001600160a01b0316331480610eb65750610eb63361159d565b610ed25760405162461bcd60e51b8152600401610a8a9061582e565b6012805460ff1916911515919091179055565b6000546001600160a01b0316331480610f025750610f023361159d565b610f1e5760405162461bcd60e51b8152600401610a8a9061582e565b6006805461ff001916610100179055565b6000610f3f8787878787876137f7565b979650505050505050565b6000818152600460205260409020805460609190610f6790615865565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9390615865565b8015610fe05780601f10610fb557610100808354040283529160200191610fe0565b820191906000526020600020905b815481529060010190602001808311610fc357829003601f168201915b50505050509050919050565b6000546001600160a01b031633148061100957506110093361159d565b6110255760405162461bcd60e51b8152600401610a8a9061582e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561109557600080fd5b505afa1580156110a9573d6000803e3d6000fd5b508492505050806110cc5760405162461bcd60e51b8152600401610a8a90615899565b600854604051637bfb039f60e11b81526000916001600160a01b03169063f7f6073e906110ff90339087906004016158c2565b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114091906157c9565b9050818110156111925760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768206372656469747320696e206163636f756e740000006044820152606401610a8a565b60008060008060006111d68a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061395592505050565b9450945094509450945081816111ec91906158f5565b60009250905060018860058111156112065761120661564e565b036112fd5786851461124e5760405162461bcd60e51b81526020600482015260116024820152704f6e6c7920636f6d6d6f6e206c616e647360781b6044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906112879033908b906000908190819060040161590d565b600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b505050506112f88a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b611591565b60028860058111156113115761131161564e565b036113a7578661132185876158f5565b1461136e5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920636f6d6d6f6e206f722072617265206c616e6473000000000000006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906112879033906000908c908290819060040161590d565b60038860058111156113bb576113bb61564e565b0361145c5786836113cc86886158f5565b6113d691906158f5565b146114235760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f6d6d6f6e2c2072617265206f722065706963206c616e6473006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed9061128790339060009081908d90829060040161590d565b60058860058111156114705761147061564e565b14801561149b575086818461148587896158f5565b61148f91906158f5565b61149991906158f5565b145b6114e75760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206372656469742072617269747900000000000000006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed90611520903390600090819081908e9060040161590d565b600060405180830381600087803b15801561153a57600080fd5b505af115801561154e573d6000803e3d6000fd5b505050506115918a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b50505050505050505050565b6001600160a01b03166000908152600160208190526040909120541490565b336000908152601660205260409020548061160f5760405162461bcd60e51b815260206004820152601360248201527227379032b9b1b937bb903a37903932ba3ab93760691b6044820152606401610a8a565b3360008181526016602052604080822091909155600654905163a9059cbb60e01b81526004810192909252602482018390526201000090046001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169d9190615811565b5060405181815233907fbf1a0ef092ef679427b427c6a95d51133522541e667b737b795a77f2b61c240d9060200160405180910390a250565b6000546001600160a01b03163314806116f357506116f33361159d565b61170f5760405162461bcd60e51b8152600401610a8a9061582e565b620f424081106117585760405162461bcd60e51b81526020600482015260146024820152732b30b63ab29037bb32b910383932b1b4b9b4b7b760611b6044820152606401610a8a565b600a92909255600b55600c55565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b0316600090815260016020526040812055565b6000546001600160a01b03163314806117c757506117c73361159d565b6117e35760405162461bcd60e51b8152600401610a8a9061582e565b600654610100900460ff161561183b5760405162461bcd60e51b815260206004820152601760248201527f4d6967726174696f6e206973206e6f77206c6f636b65640000000000000000006044820152606401610a8a565b81518151811461188d5760405162461bcd60e51b815260206004820181905260248201527f417272617973206d7573742068617665207468652073616d65206c656e6774686044820152606401610a8a565b60005b818110156118dc576118d48482815181106118ad576118ad615967565b60200260200101518483815181106118c7576118c7615967565b6020026020010151613c6a565b600101611890565b50505050565b6001600160a01b038116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610fe057602002820191906000526020600020905b81548152602001906001019080831161192e5750505050509050919050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561199b57600080fd5b505afa1580156119af573d6000803e3d6000fd5b505050506119c287878787878787613cb6565b50505050505050565b60008281526003602052604090205482906001600160a01b03163314611a035760405162461bcd60e51b8152600401610a8a9061597d565b60125460ff1615611a265760405162461bcd60e51b8152600401610a8a9061579f565b60008211611a765760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff166005811115611aa257611aa261564e565b03611aef5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206c69737420486172626572676572206c616e640000000000006044820152606401610a8a565b60408051808201825283815242602080830191825260008781526014909152839020915182555160019091015551339084907f7f5dd6779248014167a5e507bf4a6edb7c0985fd0eb2fe89412fe3783a4b133090611b509086815260200190565b60405180910390a3505050565b6000546001600160a01b0316331480611b7a5750611b7a3361159d565b611b965760405162461bcd60e51b8152600401610a8a9061582e565b600680546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b0316331480611bdd5750611bdd3361159d565b611bf95760405162461bcd60e51b8152600401610a8a9061582e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480611c385750611c383361159d565b611c545760405162461bcd60e51b8152600401610a8a9061582e565b601280549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611c985760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b038116611cee5760405162461bcd60e51b815260206004820181905260248201527f41646d696e2063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a8a565b6001600160a01b0316600090815260016020819052604090912055565b6000546001600160a01b0316331480611d285750611d283361159d565b611d445760405162461bcd60e51b8152600401610a8a9061582e565b6001600160a01b0316600090815260116020526040812055565b6000546001600160a01b0316331480611d7b5750611d7b3361159d565b611d975760405162461bcd60e51b8152600401610a8a9061582e565b600e55565b6000546001600160a01b0316331480611db95750611db93361159d565b611dd55760405162461bcd60e51b8152600401610a8a9061582e565b6006805460ff1916911515919091179055565b6000546001600160a01b0316331480611e055750611e053361159d565b611e215760405162461bcd60e51b8152600401610a8a9061582e565b6005811115611e615760405162461bcd60e51b815260206004820152600c60248201526b109859081c1a185cd9481a5960a21b6044820152606401610a8a565b600955565b80516060906000816001600160401b03811115611e8557611e85614d5d565b604051908082528060200260200182016040528015611eb857816020015b6060815260200190600190039081611ea35790505b50905060005b82811015611fa6576000858281518110611eda57611eda615967565b60200260200101519050600460008281526020019081526020016000208054611f0290615865565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2e90615865565b8015611f7b5780601f10611f5057610100808354040283529160200191611f7b565b820191906000526020600020905b815481529060010190602001808311611f5e57829003601f168201915b5050505050838381518110611f9257611f92615967565b602090810291909101015250600101611ebe565b509392505050565b60008181526003602052604090205481906001600160a01b03163314611fe65760405162461bcd60e51b8152600401610a8a9061597d565b611ff282600019613fd3565b604051339083907f731e216f3c5263def1695d416b13f97a35d25331ad11ccb640d803ebd105f4e890600090a35050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561207157600080fd5b505afa158015612085573d6000803e3d6000fd5b5050505061209786868686868661414b565b505050505050565b80516060906000816001600160401b038111156120be576120be614d5d565b6040519080825280602002602001820160405280156120e7578160200160208202803683370190505b50905060005b82811015611fa657600085828151811061210957612109615967565b602002602001015190506003600082815260200190815260200160002060009054906101000a90046001600160a01b031683838151811061214c5761214c615967565b6001600160a01b0390921660209283029190910190910152506001016120ed565b60008281526003602052604090205482906001600160a01b031633146121a55760405162461bcd60e51b8152600401610a8a9061597d565b600083815260046020908152604090912083516121c492850190614be5565b50827f98a3c3986b7677c879cb2d25ed860fa739755d655ee07fd9582d82a343200874836040516121f59190614f96565b60405180910390a2505050565b60008281526003602052604090205482906001600160a01b0316331461223a5760405162461bcd60e51b8152600401610a8a9061597d565b6000821161228a5760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a8a565b600083815260146020526040902054806122b65760405162461bcd60e51b8152600401610a8a906159ad565b6000848152601460209081526040918290208590558151838152908101859052339186917fe4e96eded0c1652afb311b4f5a4d768a48f1544ae888996bedc732c85778061e910160405180910390a350505050565b6000546001600160a01b031633148061232857506123283361159d565b6123445760405162461bcd60e51b8152600401610a8a9061582e565b60065460ff16156123975760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a8a565b828181146123e75760405162461bcd60e51b815260206004820181905260248201527f417272617973206d7573742068617665207468652073616d65206c656e6774686044820152606401610a8a565b60005b8181101561209757600086868381811061240657612406615967565b90506020020135905084848381811061242157612421615967565b90506101e002016002600083815260200190815260200160002081816124479190615a5c565b5050506001016123ea565b60008281526003602052604090205482906001600160a01b0316331461248a5760405162461bcd60e51b8152600401610a8a9061597d565b336001600160a01b038316036124e25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610a8a565b601254610100900460ff16156125315760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c9cc8185c99481c185d5cd95960621b6044820152606401610a8a565b6000838152601460205260409020541561258d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207472616e73666572206c697374656420706c6f7400000000006044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff1660058111156125b9576125b961564e565b036126065760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616e7366657220486172626572676572206c616e6400006044820152606401610a8a565b612610828461438a565b6040516001600160a01b03831690339085907f370ed8b5aeb5adcdf0f4852ad764fd28ca4cc2a9d744446d05da996594ea6aa490600090a4505050565b6000546001600160a01b031633148061266a575061266a3361159d565b6126865760405162461bcd60e51b8152600401610a8a9061582e565b600d805460ff1916911515919091179055565b600080600083815260026020526040902054600160681b900460ff1660058111156126c6576126c661564e565b0361270a5760405162461bcd60e51b8152602060048201526014602482015273141b1bdd081b9bdd081a5b9a5d1a585b1a5e995960621b6044820152606401610a8a565b506000908152600360205260409020546001600160a01b03161590565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526001600160a01b0382166000908152600560209081526040808320805482518185028101850190935280835284938493849384936127c3938301828280156127b957602002820191906000526020600020905b8154815260200190600101908083116127a5575b5050505050613955565b6040805160a08101825263ffffffff9687168152948616602086015292851692840192909252831660608301529091166080820152979650505050505050565b6001600160a01b03811660009081526011602052604081205460010361282b57506001919050565b6001600160a01b038216600090815260056020908152604080832080548251818502810185019093528083528493849361289a93909290918301828280156127b957602002820191906000526020600020908154815260200190600101908083116127a5575050505050613955565b5050925092509250600e548160056128b29190615cca565b6128bd846003615cca565b6128c790866158f5565b6128d191906158f5565b101595945050505050565b60006128e78261458c565b92915050565b60008281526015602052604090205481106129455760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a8a565b600082815260156020526040812080548390811061296557612965615967565b600091825260209182902060408051608081018252600490930290910180546001600160a01b03168084526001820154948401949094526002810154918301919091526003015460ff161515606082015291503314612a065760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f74206f66666572206f776e65720000000000000000006044820152606401610a8a565b806060015115612a525760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a8a565b60208082015182516001600160a01b03166000908152601690925260408220805491929091612a829084906158f5565b9091555050600083815260156020526040902080546001919084908110612aab57612aab615967565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550336001600160a01b0316837fe2dc0bfd2fc658db980184c3f7c091c2f886874e896043b562d5099c8d95b1dd8360200151604051611b5091815260200190565b60125460ff1615612b365760405162461bcd60e51b8152600401610a8a9061579f565b6000828152601460209081526040918290208251808401909352805480845260019091015491830191909152612b7e5760405162461bcd60e51b8152600401610a8a906159ad565b6006548151604051636eb1769f60e11b8152336004820152306024820152620100009092046001600160a01b031691829063dd62ed3e90604401602060405180830381865afa158015612bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf991906157c9565b1015612c3e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a8a565b81518314612c855760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a8a565b612c9184600019613fd3565b6000848152600360205260409020546001600160a01b0316612cb3338661438a565b600080612cc38560000151614612565b6040516323b872dd60e01b815291935091506001600160a01b038516906323b872dd90612cf8903390879087906004016157e2565b6020604051808303816000875af1158015612d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3b9190615811565b506007546040516323b872dd60e01b81526001600160a01b03808716926323b872dd92612d70923392169086906004016157e2565b6020604051808303816000875af1158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db39190615811565b50336001600160a01b0316836001600160a01b0316887f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a05322389604051612dfa91815260200190565b60405180910390a450505050505050565b600081815260156020908152604080832080548251818502810185019093528083528493849084015b82821015612e96576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612e34565b5050505090506000815190506000805b82811015612f2357838181518110612ec057612ec0615967565b602002602001015160600151158015612ef5575081848281518110612ee757612ee7615967565b602002602001015160200151115b15612f1b57838181518110612f0c57612f0c615967565b60200260200101516020015191505b600101612ea6565b50949350505050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b158015612f7a57600080fd5b505afa158015612f8e573d6000803e3d6000fd5b50505050612fb08383836000013584602001358560400135866060013561414b565b6115918a8a8a8a8a8a8a613cb6565b606060156000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015613056576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612ff4565b505050509050919050565b6000818152601460209081526040808320815180830190925280548083526001909101549282019290925282916130aa5760405162461bcd60e51b8152600401610a8a906159ad565b80516020909101519094909350915050565b60008381526003602052604090205483906001600160a01b031633146130f45760405162461bcd60e51b8152600401610a8a9061597d565b60125460ff16156131175760405162461bcd60e51b8152600401610a8a9061579f565b600084815260156020526040902054831061316f5760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a8a565b600084815260156020526040812080548590811061318f5761318f615967565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff1615801560608301529091506132285760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a8a565b828160200151146132725760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a8a565b61327c8585613fd3565b8051613288908661438a565b6000600660029054906101000a90046001600160a01b031690506000806132b28460200151614612565b60405163a9059cbb60e01b81523360048201526024810183905291935091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190615811565b5060075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529084169063a9059cbb906044016020604051808303816000875af115801561337c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a09190615811565b5083600001516001600160a01b0316336001600160a01b0316897f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a053223896040516133eb91815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633148061341a575061341a3361159d565b6134365760405162461bcd60e51b8152600401610a8a9061582e565b60065460ff16156134895760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a8a565b600082815260026020526040902081906118dc8282615a5c565b613521604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a082019081526020016000905290565b60008281526002602090815260409182902082516101e081018452815460ff80821683526101008083048216958401959095526201000082048116958301959095526301000000810485166060830152640100000000810485166080830152650100000000008104851660a083015266010000000000008104851660c08301526701000000000000008104851660e0830152680100000000000000008104851693820193909352690100000000000000000083048416610120820152600160501b83048416610140820152600160581b83048416610160820152600160601b830484166101808201529290916101a0840191600160681b90910416600581111561362d5761362d61564e565b600581111561363e5761363e61564e565b81528154602090910190600160701b900460ff1660068111156136635761366361564e565b60068111156136745761367461564e565b90525092915050565b6000546001600160a01b031633146136a75760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b0381166136fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a8a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260146020526040812054806128e75760405162461bcd60e51b8152600401610a8a906159ad565b6000546001600160a01b031633148061376857506137683361159d565b6137845760405162461bcd60e51b8152600401610a8a9061582e565b6001600160a01b0381166137da5760405162461bcd60e51b815260206004820181905260248201527f52656665727265722063616e6e6f7420626520746865203020616464726573736044820152606401610a8a565b6001600160a01b0316600090815260116020526040902060019055565b84516000908415806138095750806001145b6138555760405162461bcd60e51b815260206004820181905260248201527f5573652073696e676c6520646973636f756e74732077697468203120706c6f746044820152606401610a8a565b6008546040516315b6e8ab60e01b815260009182916001600160a01b03909116906315b6e8ab90613892908d908c908c908c908c90600401615d1f565b600060405180830381865afa1580156138af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138d79190810190615d7a565b905060005b838110156139315760006139088b83815181106138fb576138fb615967565b60200260200101516134a3565b90506000613916828561464c565b905061392281866158f5565b945082600101925050506138dc565b50600954600503613948576139458261458c565b91505b5098975050505050505050565b60008060008060008060008060008060008b51905060005b81811015613b325760008d828151811061398957613989615967565b60200260200101519050600160058111156139a6576139a661564e565b600082815260026020526040902054600160681b900460ff1660058111156139d0576139d061564e565b036139e7576139e06001896158f5565b9750613b29565b6002600082815260026020526040902054600160681b900460ff166005811115613a1357613a1361564e565b03613a2a57613a236001886158f5565b9650613b29565b6003600082815260026020526040902054600160681b900460ff166005811115613a5657613a5661564e565b03613a6d57613a666001876158f5565b9550613b29565b6004600082815260026020526040902054600160681b900460ff166005811115613a9957613a9961564e565b03613ab057613aa96001866158f5565b9450613b29565b6005600082815260026020526040902054600160681b900460ff166005811115613adc57613adc61564e565b14613b1b5760405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a8a565b613b266001856158f5565b93505b5060010161396d565b50949b939a509198509650945092505050565b825160005b81811015613bd8576000858281518110613b6657613b66615967565b60200260200101519050613b7981612699565b613bc55760405162461bcd60e51b815260206004820152601f60248201527f524d524b204c616e6473616c653a20506c6f7420756e617661696c61626c65006044820152606401610a8a565b613bcf338261438a565b50600101613b4a565b508115613bfd578351600f6000828254613bf291906158f5565b90915550613c169050565b835160106000828254613c1091906158f5565b90915550505b811515836001600160a01b0316336001600160a01b03167f8ab30b0cba3d3325d957c283bcd2f5ac70efe38245303058259d4c9dbb7d432187604051613c5c9190615112565b60405180910390a450505050565b600081815260036020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260058152928120805460018101825590825292902090910155565b85613cd35760405162461bcd60e51b8152600401610a8a90615899565b6000613d18338989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92508a9150899050886137f7565b6008546040516329523dbb60e11b81529192506001600160a01b0316906352a47b7690613d519033908a908a908a908a90600401615d1f565b600060405180830381600087803b158015613d6b57600080fd5b505af1158015613d7f573d6000803e3d6000fd5b505050506000613d8e83614b0c565b15613eb457600080613d9f84614b50565b6006546040516323b872dd60e01b81529294509092506201000090046001600160a01b0316906323b872dd90613ddd903390899086906004016157e2565b6020604051808303816000875af1158015613dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e209190615811565b92508215613ead576006546007546040516323b872dd60e01b8152620100009092046001600160a01b03908116926323b872dd92613e6792339291169087906004016157e2565b6020604051808303816000875af1158015613e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eaa9190615811565b92505b5050613f3d565b6006546007546040516323b872dd60e01b815260009550620100009092046001600160a01b03908116926323b872dd92613ef792339291169087906004016157e2565b6020604051808303816000875af1158015613f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3a9190615811565b90505b80613f8a5760405162461bcd60e51b815260206004820152601e60248201527f4c616e6473616c653a205472616e7366657246726f6d206661696c75726500006044820152606401610a8a565b613fc889898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508893509150613b459050565b505050505050505050565b60008281526014602090815260408083208381556001018390556015825280832080548251818502810185019093528083529192909190849084015b82821015614071576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff1615156060830152908352909201910161400f565b5050825192935060009150505b818110156141335782818151811061409857614098615967565b6020026020010151606001511580156140b15750838114155b1561412b578281815181106140c8576140c8615967565b602002602001015160200151601660008584815181106140ea576140ea615967565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461412591906158f5565b90915550505b60010161407e565b5060008481526015602052604081206118dc91614c69565b846141685760405162461bcd60e51b8152600401610a8a90615899565b60008060008060006141ac8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061395592505050565b9450945094509450945081816141c291906158f5565b905060009150888511156141fd576141da8986615f20565b6141e490856158f5565b93506141f08986615f20565b6141fa9086615f20565b94505b878411156142325761420f8885615f20565b61421990846158f5565b92506142258885615f20565b61422f9085615f20565b93505b86831115614267576142448784615f20565b61424e90826158f5565b905061425a8784615f20565b6142649084615f20565b92505b8489101580156142775750838810155b80156142835750828710155b801561428f5750808610155b6142d45760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da0818dc99591a5d1cc81cd95d60521b6044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed9061430c903390899089908990889060040161590d565b600060405180830381600087803b15801561432657600080fd5b505af115801561433a573d6000803e3d6000fd5b5050505061437d8b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b5050505050505050505050565b6000818152600360205260409020546001600160a01b03166143ac8383613c6a565b6001600160a01b03811615614587576001600160a01b03811660009081526005602090815260408083208054825181850281018501909352808352919290919083018282801561441b57602002820191906000526020600020905b815481526020019060010190808311614407575b50508351939450600019925060009150505b82811015614465578584828151811061444857614448615967565b60200260200101510361445d57809150614465565b60010161442d565b5080196144b45760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206e6f7420666f756e6420696e206f6c64206f776e657200000000006044820152606401610a8a565b6144bf600183615f20565b8114614546576001600160a01b03841660009081526005602052604090206144e8600184615f20565b815481106144f8576144f8615967565b906000526020600020015460056000866001600160a01b03166001600160a01b03168152602001908152602001600020828154811061453957614539615967565b6000918252602090912001555b6001600160a01b038416600090815260056020526040902080548061456d5761456d615f37565b600190038181906000526020600020016000905590555050505b505050565b6000806145a261459a614b64565b600b54614b87565b600b549091506000906127106145b88483615f20565b6145c29190615cca565b6145cc9190615f4d565b6145d890612710615f20565b905060006145ec620f4240600c5484614b9f565b90506000620f42406145fe8784615cca565b6146089190615f4d565b9695505050505050565b6000806000620f4240601354856146299190615cca565b6146339190615f4d565b905060006146418286615f20565b959194509092505050565b600080806001856101a0015160058111156146695761466961564e565b03614696577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b6002856101a0015160058111156146af576146af61564e565b036146dc577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b6003856101a0015160058111156146f5576146f561564e565b03614722577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b60405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a8a565b83516000819003614772578293505050506128e7565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101829052905b82811015614ad75786818151811061480657614806615967565b60200260200101519150816101c0015115614837578151614830906001600160801b0316856158f5565b9350614acf565b6028886000015160ff1611801561484f575081602001515b15614869578151614830906001600160801b0316856158f5565b6028886020015160ff16118015614881575081604001515b1561489b578151614830906001600160801b0316856158f5565b6028886040015160ff161180156148b3575081606001515b156148cd578151614830906001600160801b0316856158f5565b6028886060015160ff161180156148e5575081608001515b156148ff578151614830906001600160801b0316856158f5565b6028886080015160ff1611801561491757508160a001515b15614931578151614830906001600160801b0316856158f5565b60288860a0015160ff1611801561494957508160c001515b15614963578151614830906001600160801b0316856158f5565b60288860c0015160ff1611801561497b57508160e001515b15614995578151614830906001600160801b0316856158f5565b60288860e0015160ff161180156149ae57508161010001515b156149c8578151614830906001600160801b0316856158f5565b602888610100015160ff161180156149e257508161012001515b156149fc578151614830906001600160801b0316856158f5565b602888610120015160ff16118015614a1657508161014001515b15614a30578151614830906001600160801b0316856158f5565b87610160015160ff166001148015614a4a57508161018001515b15614a64578151614830906001600160801b0316856158f5565b87610140015160ff166001148015614a7e57508161016001515b15614a98578151614830906001600160801b0316856158f5565b87610180015160ff166001148015614ab25750816101a001515b15614acf578151614acc906001600160801b0316856158f5565b93505b6001016147ec565b506207a120831115614aea576207a12092505b620f4240614af88482615f20565b614b029086615cca565b610f3f9190615f4d565b60006001600160a01b0382161580614b2c57506001600160a01b03821633145b80614b3a5750600d5460ff16155b15614b4757506000919050565b6128e782612803565b60008080620f424061462961c35086615cca565b600042600a5410614b755750600090565b600a54614b829042615f20565b905090565b600081831015614b985750816128e7565b50806128e7565b600080612710614baf8585615cca565b86614bbc86612710615f20565b614bc69190615cca565b614bd091906158f5565b614bda9190615f4d565b9150505b9392505050565b828054614bf190615865565b90600052602060002090601f016020900481019282614c135760008555614c59565b82601f10614c2c57805160ff1916838001178555614c59565b82800160010185558215614c59579182015b82811115614c59578251825591602001919060010190614c3e565b50614c65929150614c8d565b5090565b5080546000825560040290600052602060002090810190614c8a9190614ca2565b50565b5b80821115614c655760008155600101614c8e565b5b80821115614c655780546001600160a01b0319168155600060018201819055600282015560038101805460ff19169055600401614ca3565b60008060408385031215614cee57600080fd5b50508035926020909101359150565b600060208284031215614d0f57600080fd5b5035919050565b8015158114614c8a57600080fd5b600060208284031215614d3657600080fd5b8135614bde81614d16565b80356001600160a01b0381168114614d5857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715614d9657614d96614d5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614dc457614dc4614d5d565b604052919050565b60006001600160401b03821115614de557614de5614d5d565b5060051b60200190565b600082601f830112614e0057600080fd5b81356020614e15614e1083614dcc565b614d9c565b82815260059290921b84018101918181019086841115614e3457600080fd5b8286015b84811015614e4f5780358352918301918301614e38565b509695505050505050565b60008083601f840112614e6c57600080fd5b5081356001600160401b03811115614e8357600080fd5b6020830191508360208260051b8501011115614e9e57600080fd5b9250929050565b60008060008060008060808789031215614ebe57600080fd5b614ec787614d41565b955060208701356001600160401b0380821115614ee357600080fd5b614eef8a838b01614def565b96506040890135915080821115614f0557600080fd5b614f118a838b01614e5a565b90965094506060890135915080821115614f2a57600080fd5b50614f3789828a01614e5a565b979a9699509497509295939492505050565b6000815180845260005b81811015614f6f57602081850181015186830182015201614f53565b81811115614f81576000602083870101525b50601f01601f19169290920160200192915050565b602081526000614bde6020830184614f49565b600060208284031215614fbb57600080fd5b614bde82614d41565b60068110614c8a57600080fd5b600080600060408486031215614fe657600080fd5b83356001600160401b03811115614ffc57600080fd5b61500886828701614e5a565b909450925050602084013561501c81614fc4565b809150509250925092565b60008060006060848603121561503c57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561506657600080fd5b82356001600160401b038082111561507d57600080fd5b818501915085601f83011261509157600080fd5b813560206150a1614e1083614dcc565b82815260059290921b840181019181810190898411156150c057600080fd5b948201945b838610156150e5576150d686614d41565b825294820194908201906150c5565b965050860135925050808211156150fb57600080fd5b5061510885828601614def565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561514a5783518352928401929184019160010161512e565b50909695505050505050565b60008060008060008060006080888a03121561517157600080fd5b87356001600160401b038082111561518857600080fd5b6151948b838c01614e5a565b909950975060208a01359150808211156151ad57600080fd5b6151b98b838c01614e5a565b909750955060408a01359150808211156151d257600080fd5b506151df8a828b01614e5a565b90945092506151f2905060608901614d41565b905092959891949750929550565b60006020828403121561521257600080fd5b81356001600160401b0381111561522857600080fd5b61523484828501614def565b949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561529157603f1988860301845261527f858351614f49565b94509285019290850190600101615263565b5092979650505050505050565b60008060008060008060a087890312156152b757600080fd5b86356001600160401b038111156152cd57600080fd5b6152d989828a01614e5a565b909a90995060208901359860408101359850606081013597506080013595509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561514a5783516001600160a01b03168352928401929184019160010161531b565b6000806040838503121561535357600080fd5b823591506020808401356001600160401b038082111561537257600080fd5b818601915086601f83011261538657600080fd5b81358181111561539857615398614d5d565b6153aa601f8201601f19168501614d9c565b915080825287848285010111156153c057600080fd5b80848401858401376000848284010152508093505050509250929050565b600080600080604085870312156153f457600080fd5b84356001600160401b038082111561540b57600080fd5b61541788838901614e5a565b9096509450602087013591508082111561543057600080fd5b818701915087601f83011261544457600080fd5b81358181111561545357600080fd5b8860206101e08302850101111561546957600080fd5b95989497505060200194505050565b6000806040838503121561548b57600080fd5b8235915061549b60208401614d41565b90509250929050565b6000608082840312156154b657600080fd5b50919050565b6000806000806000806000806000806101208b8d0312156154dc57600080fd5b8a356001600160401b03808211156154f357600080fd5b6154ff8e838f01614e5a565b909c509a5060208d013591508082111561551857600080fd5b6155248e838f01614e5a565b909a50985060408d013591508082111561553d57600080fd5b6155498e838f01614e5a565b909850965086915061555d60608e01614d41565b955060808d013591508082111561557357600080fd5b506155808d828e01614e5a565b909450925061559490508c60a08d016154a4565b90509295989b9194979a5092959850565b602080825282518282018190526000919060409081850190868401855b8281101561560757815180516001600160a01b0316855286810151878601528581015186860152606090810151151590850152608090930192908501906001016155c2565b5091979650505050505050565b60008082840361020081121561562957600080fd5b833592506101e0601f198201121561564057600080fd5b506020830190509250929050565b634e487b7160e01b600052602160045260246000fd5b600681106156745761567461564e565b9052565b600781106156745761567461564e565b815160ff1681526101e0810160208301516156a8602084018260ff169052565b5060408301516156bd604084018260ff169052565b5060608301516156d2606084018260ff169052565b5060808301516156e7608084018260ff169052565b5060a08301516156fc60a084018260ff169052565b5060c083015161571160c084018260ff169052565b5060e083015161572660e084018260ff169052565b506101008381015160ff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015182169084015261018080850151909116908301526101a08084015161578282850182615664565b50506101c08084015161579782850182615678565b505092915050565b60208082526010908201526f14d85b195cc8185c99481c185d5cd95960821b604082015260600190565b6000602082840312156157db57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8051614d5881614d16565b60006020828403121561582357600080fd5b8151614bde81614d16565b6020808252601b908201527f55736572206973206e6f74206f776e6572206f722061646d696e2e0000000000604082015260600190565b600181811c9082168061587957607f821691505b6020821081036154b657634e487b7160e01b600052602260045260246000fd5b6020808252600f908201526e4e6f20706c6f747320746f2062757960881b604082015260600190565b6001600160a01b038316815260408101614bde6020830184615664565b634e487b7160e01b600052601160045260246000fd5b60008219821115615908576159086158df565b500190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252601290820152712ab9b2b91034b9903737ba1037bbb732b91760711b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252601690820152752ab9b2b91034b9903737ba103630b7321037bbb732b960511b604082015260600190565b6020808252600a9082015269139bdd081b1a5cdd195960b21b604082015260600190565b6000813560ff811681146128e757600080fd5b600081356128e781614fc4565b60068210615a0157615a0161564e565b805460ff60681b191660689290921b60ff60681b16919091179055565b60008135600781106128e757600080fd5b60078210615a3f57615a3f61564e565b805460ff60701b191660709290921b60ff60701b16919091179055565b615a79615a68836159d1565b825460ff191660ff91909116178255565b615a9e615a88602084016159d1565b825461ff00191660089190911b61ff0016178255565b615ac5615aad604084016159d1565b825462ff0000191660109190911b62ff000016178255565b615aee615ad4606084016159d1565b825463ff000000191660189190911b63ff00000016178255565b615b19615afd608084016159d1565b825464ff00000000191660209190911b64ff0000000016178255565b615b46615b2860a084016159d1565b825465ff0000000000191660289190911b65ff000000000016178255565b615b75615b5560c084016159d1565b825466ff000000000000191660309190911b66ff00000000000016178255565b615ba6615b8460e084016159d1565b825467ff00000000000000191660389190911b67ff0000000000000016178255565b615bda615bb661010084016159d1565b825468ff0000000000000000191660409190911b68ff000000000000000016178255565b615c10615bea61012084016159d1565b825469ff000000000000000000191660489190911b69ff00000000000000000016178255565b615c3e615c2061014084016159d1565b82805460ff60501b191660509290921b60ff60501b16919091179055565b615c6c615c4e61016084016159d1565b82805460ff60581b191660589290921b60ff60581b16919091179055565b615c9a615c7c61018084016159d1565b82805460ff60601b191660609290921b60ff60601b16919091179055565b615cb0615caa6101a084016159e4565b826159f1565b615cc6615cc06101c08401615a1e565b82615a2f565b5050565b6000816000190483118215151615615ce457615ce46158df565b500290565b81835260006001600160fb1b03831115615d0257600080fd5b8260051b8083602087013760009401602001938452509192915050565b6001600160a01b0386168152606060208201819052600090615d449083018688615ce9565b8281036040840152615d57818587615ce9565b98975050505050505050565b80516001600160801b0381168114614d5857600080fd5b60006020808385031215615d8d57600080fd5b82516001600160401b03811115615da357600080fd5b8301601f81018513615db457600080fd5b8051615dc2614e1082614dcc565b8181526101e09182028301840191848201919088841115615de257600080fd5b938501935b83851015615f145780858a031215615dff5760008081fd5b615e07614d73565b615e1086615d63565b8152615e1d878701615806565b878201526040615e2e818801615806565b908201526060615e3f878201615806565b908201526080615e50878201615806565b9082015260a0615e61878201615806565b9082015260c0615e72878201615806565b9082015260e0615e83878201615806565b90820152610100615e95878201615806565b90820152610120615ea7878201615806565b90820152610140615eb9878201615806565b90820152610160615ecb878201615806565b90820152610180615edd878201615806565b908201526101a0615eef878201615806565b908201526101c0615f01878201615806565b9082015283529384019391850191615de7565b50979650505050505050565b600082821015615f3257615f326158df565b500390565b634e487b7160e01b600052603160045260246000fd5b600082615f6a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220587189e6446d9770b5882175c2d99054862a54212a1cbce1509faf08f0208b9e64736f6c634300080d0033000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000015d3ef7980000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000c350
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000015d3ef7980000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000c350
-----Decoded View---------------
Arg [0] : commonPrice (uint256): 500000000000
Arg [1] : rarePrice (uint256): 1500000000000
Arg [2] : epicPrice (uint256): 2500000000000
Arg [3] : creatorFee (uint256): 50000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000746a528800
Arg [1] : 0000000000000000000000000000000000000000000000000000015d3ef79800
Arg [2] : 00000000000000000000000000000000000000000000000000000246139ca800
Arg [3] : 000000000000000000000000000000000000000000000000000000000000c350
Deployed ByteCode Sourcemap
113:9087:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1979:142:2;;;;2077:12;216:25:7;;2091:10:2;272:2:7;257:18;;250:34;2103:10:2;300:18:7;;;293:34;;;;204:2;189:18;1979:142:2;;;;;;;;16018:91;16091:11;;16018:91;;;484:25:7;;;472:2;457:18;16018:91:2;338:177:7;16218:107:2;16299:19;;16218:107;;4617:993:4;;;;;;:::i;:::-;;:::i;:::-;;1926:110;;;;;;:::i;:::-;;:::i;1705:101::-;;;;;;:::i;:::-;;:::i;1577:89:5:-;;;:::i;10413:319:2:-;;;;;;:::i;:::-;;:::i;7023:118:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7835::4:-;;;;;;:::i;:::-;7895:4;7918:17;;;:9;:17;;;;;:23;:27;;;7835:118;;;;5350:14:7;;5343:22;5325:41;;5313:2;5298:18;7835:118:4;5185:187:7;15114:111:2;;;;;;:::i;:::-;;:::i;2042:91:4:-;2114:12;;;;2042:91;;5436:1950:2;;;;;;:::i;:::-;;:::i;784:102:0:-;;;;;;:::i;:::-;;:::i;15620:82:2:-;15689:6;;;;;-1:-1:-1;;;;;15689:6:2;15620:82;;;-1:-1:-1;;;;;6434:32:7;;;6416:51;;6404:2;6389:18;15620:82:2;6270:203:7;6992:314:4;;;:::i;15231:281:2:-;;;;;;:::i;:::-;;:::i;685:93:0:-;;;;;;:::i;:::-;;:::i;5047:519:5:-;;;;;;:::i;:::-;;:::i;1672:93::-;1745:13;;;;1672:93;;4920:121;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2355:116:2:-;2441:23;;2355:116;;3211:299;;;;;;:::i;:::-;;:::i;15913:99::-;15990:15;;15913:99;;2369:352:4;;;;;;:::i;:::-;;:::i;14881:101:2:-;;;;;;:::i;:::-;;:::i;15815:92::-;15889:11;;-1:-1:-1;;;;;15889:11:2;15815:92;;2244::4;2318:11;;2244:92;;14988:120:2;;;;;;:::i;:::-;;:::i;1811:109:4:-;;;;;;:::i;:::-;;:::i;2139:99::-;2215:16;;;;;;;2139:99;;518:161:0;;;;;;:::i;:::-;;:::i;15708:101:2:-;15786:16;;-1:-1:-1;;;;;15786:16:2;15708:101;;2822:120;;;;;;:::i;:::-;;:::i;2477:142::-;;;;;;:::i;:::-;;:::i;1369:101:5:-;;;;;;:::i;:::-;;:::i;16350:159:2:-;;;;;;:::i;:::-;;:::i;7147:395:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1073:81:0:-;1115:7;1141:6;-1:-1:-1;;;;;1141:6:0;1073:81;;3099:210:4;;;;;;:::i;:::-;;:::i;8038:319:2:-;;;;;;:::i;:::-;;:::i;4529:385:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1252:111::-;;;;;;:::i;:::-;1311:7;1337:19;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;;1252:111;6832:185;;;;;;:::i;:::-;;:::i;2727:366:4:-;;;;;;:::i;:::-;;:::i;2062:454:5:-;;;;;;:::i;:::-;;:::i;7329:483:4:-;;;;;;:::i;:::-;;:::i;8842:122::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8934:23:4;8908:7;8934:23;;;:16;:23;;;;;;;8842:122;3078:127:2;3164:15;;3181:16;;3078:127;;;;14533:25:7;;;14589:2;14574:18;;14567:34;;;;14506:18;3078:127:2;14359:248:7;2234:115:2;;;;;;:::i;:::-;;:::i;4313:210:5:-;;;;;;:::i;:::-;;:::i;3803:504::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;14880:13:7;;14839:10;14876:22;;;14858:41;;14959:4;14947:17;;;14941:24;14937:33;;14915:20;;;14908:63;15031:4;15019:17;;;15013:24;15009:33;;14987:20;;;14980:63;15103:4;15091:17;;;15085:24;15081:33;;15059:20;;;15052:63;15175:4;15163:17;;;15157:24;15153:33;15131:20;;;15124:63;;;;14816:3;14801:19;;14612:581;16115:97:2;16191:14;;16115:97;;4840:347;;;;;;:::i;:::-;;:::i;16515:111::-;;;;;;:::i;:::-;;:::i;5616:518:4:-;;;;;;:::i;:::-;;:::i;2948:124:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3032:28:2;3009:4;3032:28;;;:18;:28;;;;;;3064:1;3032:33;;2948:124;3777:834:4;;;;;;:::i;:::-;;:::i;8403:433::-;;;;;;:::i;:::-;;:::i;9862:545:2:-;;;;;;:::i;:::-;;:::i;6140:112:4:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7959:240::-;;;;;;:::i;:::-;;:::i;6258:728::-;;;;;;:::i;:::-;;:::i;2522:200:5:-;;;;;;:::i;:::-;;:::i;1771:115::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;892:175:0:-;;;;;;:::i;:::-;;:::i;2127:101:2:-;2204:17;;;;2127:101;;8205:192:4;;;;;;:::i;:::-;;:::i;2625:191:2:-;;;;;;:::i;:::-;;:::i;1476:95:5:-;1550:14;;;;;;;1476:95;;4617:993:4;1633:12;;;;1632:13;1624:42;;;;-1:-1:-1;;;1624:42:4;;;;;;;:::i;:::-;;;;;;;;;4712:1:::1;4704:5;:9;4696:49;;;::::0;-1:-1:-1;;;4696:49:4;;21404:2:7;4696:49:4::1;::::0;::::1;21386:21:7::0;21443:2;21423:18;;;21416:30;21482:29;21462:18;;;21455:57;21529:18;;4696:49:4::1;21202:351:7::0;4696:49:4::1;4755:17;1337:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;4826:10:4::1;4813:23:::0;;4805:54:::1;;;::::0;-1:-1:-1;;;4805:54:4;;21760:2:7;4805:54:4::1;::::0;::::1;21742:21:7::0;21799:2;21779:18;;;21772:30;-1:-1:-1;;;21818:18:7;;;21811:48;21876:18;;4805:54:4::1;21558:342:7::0;4805:54:4::1;-1:-1:-1::0;;;;;4877:23:4;::::1;4869:53;;;::::0;-1:-1:-1;;;4869:53:4;;22107:2:7;4869:53:4::1;::::0;::::1;22089:21:7::0;22146:2;22126:18;;;22119:30;-1:-1:-1;;;22165:18:7;;;22158:47;22222:18;;4869:53:4::1;21905:341:7::0;4869:53:4::1;4968:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;4943:36:4::1;;;;;;;;:::i;:::-;::::0;4935:79:::1;;;::::0;-1:-1:-1;;;4935:79:4;;22453:2:7;4935:79:4::1;::::0;::::1;22435:21:7::0;22492:2;22472:18;;;22465:30;22531:32;22511:18;;;22504:60;22581:18;;4935:79:4::1;22251:354:7::0;4935:79:4::1;5025:17;5045::::0;;;:9:::1;:17;::::0;;;;:23;5128:16;;5124:103:::1;;5176:12;5168:5;:20;5160:56;;;::::0;-1:-1:-1;;;5160:56:4;;22812:2:7;5160:56:4::1;::::0;::::1;22794:21:7::0;22851:2;22831:18;;;22824:30;22890:25;22870:18;;;22863:53;22933:18;;5160:56:4::1;22610:347:7::0;5160:56:4::1;5263:6;::::0;5288:46:::1;::::0;-1:-1:-1;;;5288:46:4;;5308:10:::1;5288:46;::::0;::::1;23174:34:7::0;5328:4:4::1;23224:18:7::0;;;23217:43;5263:6:4;;;::::1;-1:-1:-1::0;;;;;5263:6:4::1;::::0;5338:5;;5263:6;;5288:19:::1;::::0;23109:18:7;;5288:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;5280:88;;;::::0;-1:-1:-1;;;5280:88:4;;23662:2:7;5280:88:4::1;::::0;::::1;23644:21:7::0;23701:2;23681:18;;;23674:30;-1:-1:-1;;;23720:18:7;;;23713:50;23780:18;;5280:88:4::1;23460:344:7::0;5280:88:4::1;5400:48;::::0;;::::1;::::0;::::1;::::0;;5406:10:::1;5400:48:::0;;;::::1;::::0;;::::1;::::0;;;5425:15:::1;5400:48:::0;;;;;;-1:-1:-1;5400:48:4;;;;;;5458:15;;;:7:::1;:15:::0;;;;;:27;;5400:48;5458:27;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;5458:27:4::1;-1:-1:-1::0;;;;;5458:27:4;;::::1;;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;5458:27:4::1;::::0;::::1;;::::0;;;::::1;::::0;;;5495:56;;-1:-1:-1;;;5495:56:4;;5400:48;;5495:22;::::1;::::0;::::1;::::0;:56:::1;::::0;5406:10;;5538:4:::1;::::0;5400:48;;5495:56:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;5567:36:4::1;::::0;484:25:7;;;5585:10:4::1;::::0;5577:6;;5567:36:::1;::::0;472:2:7;457:18;5567:36:4::1;;;;;;;4686:924;;;;4617:993:::0;;:::o;1926:110::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2005:11:4::1;:24:::0;1926:110::o;1705:101::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1778:12:4::1;:21:::0;;-1:-1:-1;;1778:21:4::1;::::0;::::1;;::::0;;;::::1;::::0;;1705:101::o;1577:89:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1638:14:5::1;:21:::0;;-1:-1:-1;;1638:21:5::1;;;::::0;;1577:89::o;10413:319:2:-;10624:4;10647:78;10665:5;10672:7;10681:21;;10704:20;;10647:17;:78::i;:::-;10640:85;10413:319;-1:-1:-1;;;;;;;10413:319:2:o;7023:118:5:-;7118:16;;;;:8;:16;;;;;7111:23;;7086:13;;7118:16;7111:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7023:118;;;:::o;15114:111:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15194:11:2::1;:24:::0;;-1:-1:-1;;;;;;15194:24:2::1;-1:-1:-1::0;;;;;15194:24:2;;;::::1;::::0;;;::::1;::::0;;15114:111::o;5436:1950::-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5559:7:2;;-1:-1:-1;;;5591:12:2;5583:40:::1;;;;-1:-1:-1::0;;;5583:40:2::1;;;;;;;:::i;:::-;5673:16;::::0;5664:76:::1;::::0;-1:-1:-1;;;5664:76:2;;5633:28:::1;::::0;-1:-1:-1;;;;;5673:16:2::1;::::0;5664:50:::1;::::0;:76:::1;::::0;5715:10:::1;::::0;5727:12;;5664:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5633:107;;5782:8;5758:20;:32;;5750:74;;;::::0;-1:-1:-1;;;5750:74:2;;26446:2:7;5750:74:2::1;::::0;::::1;26428:21:7::0;26485:2;26465:18;;;26458:30;26524:31;26504:18;;;26497:59;26573:18;;5750:74:2::1;26244:353:7::0;5750:74:2::1;5836:17;5855:15:::0;5872::::1;5889::::0;5906:18:::1;5928:26;5946:7;;5928:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5928:17:2::1;::::0;-1:-1:-1;;;5928:26:2:i:1;:::-;5835:119;;;;;;;;;;6053:7;6039:21;;;;;:::i;:::-;6080:1;::::0;-1:-1:-1;6039:21:2;-1:-1:-1;6112:13:2::1;6096:12;:29;;;;;;;;:::i;:::-;::::0;6092:1288:::1;;6162:8;6149:9;:21;6141:51;;;::::0;-1:-1:-1;;;6141:51:2;;27069:2:7;6141:51:2::1;::::0;::::1;27051:21:7::0;27108:2;27088:18;;;27081:30;-1:-1:-1;;;27127:18:7;;;27120:47;27184:18;;6141:51:2::1;26867:341:7::0;6141:51:2::1;6215:16;::::0;6206:70:::1;::::0;-1:-1:-1;;;6206:70:2;;-1:-1:-1;;;;;6215:16:2;;::::1;::::0;6206:39:::1;::::0;:70:::1;::::0;6246:10:::1;::::0;6258:8;;6215:16:::1;::::0;;;;;6206:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6290:42;6306:7;;6290:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6290:42:2;-1:-1:-1;6327:4:2::1;::::0;-1:-1:-1;6290:15:2::1;::::0;-1:-1:-1;6290:42:2:i:1;:::-;6092:1288;;;6378:11;6362:12;:27;;;;;;;;:::i;:::-;::::0;6358:1022:::1;;6436:8:::0;6413:19:::1;6425:7:::0;6413:9;:19:::1;:::i;:::-;:31;6405:69;;;::::0;-1:-1:-1;;;6405:69:2;;27933:2:7;6405:69:2::1;::::0;::::1;27915:21:7::0;27972:2;27952:18;;;27945:30;28011:27;27991:18;;;27984:55;28056:18;;6405:69:2::1;27731:349:7::0;6405:69:2::1;6497:16;::::0;6488:70:::1;::::0;-1:-1:-1;;;6488:70:2;;-1:-1:-1;;;;;6497:16:2;;::::1;::::0;6488:39:::1;::::0;:70:::1;::::0;6528:10:::1;::::0;6497:16:::1;::::0;6543:8;;6497:16;;;;6488:70:::1;;;:::i;6358:1022::-;6660:11;6644:12;:27;;;;;;;;:::i;:::-;::::0;6640:740:::1;;6728:8:::0;6717:7;6695:19:::1;6707:7:::0;6695:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:41;6687:85;;;::::0;-1:-1:-1;;;6687:85:2;;28805:2:7;6687:85:2::1;::::0;::::1;28787:21:7::0;28844:2;28824:18;;;28817:30;28883:33;28863:18;;;28856:61;28934:18;;6687:85:2::1;28603:355:7::0;6687:85:2::1;6795:16;::::0;6786:70:::1;::::0;-1:-1:-1;;;6786:70:2;;-1:-1:-1;;;;;6795:16:2;;::::1;::::0;6786:39:::1;::::0;:70:::1;::::0;6826:10:::1;::::0;6795:16:::1;::::0;;;6844:8;;6795:16;;6786:70:::1;;;:::i;6640:740::-;7083:14;7067:12;:30;;;;;;;;:::i;:::-;;:104;;;;-1:-1:-1::0;7163:8:2;7149:10;7139:7;7117:19:::1;7129:7:::0;7117:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:42;;;;:::i;:::-;:54;7067:104;7042:187;;;::::0;-1:-1:-1;;;7042:187:2;;29683:2:7;7042:187:2::1;::::0;::::1;29665:21:7::0;29722:2;29702:18;;;29695:30;29761:26;29741:18;;;29734:54;29805:18;;7042:187:2::1;29481:348:7::0;7042:187:2::1;7252:16;::::0;7243:70:::1;::::0;-1:-1:-1;;;7243:70:2;;-1:-1:-1;;;;;7252:16:2;;::::1;::::0;7243:39:::1;::::0;:70:::1;::::0;7283:10:::1;::::0;7252:16:::1;::::0;;;;;7304:8;;7243:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7327:42;7343:7;;7327:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;7327:42:2;-1:-1:-1;7364:4:2::1;::::0;-1:-1:-1;7327:15:2::1;::::0;-1:-1:-1;7327:42:2:i:1;:::-;5533:1853;;;;;;;5436:1950:::0;;;:::o;784:102:0:-;-1:-1:-1;;;;;860:14:0;837:4;860:14;;;:7;:14;;;;;;;;;:19;;784:102::o;6992:314:4:-;7076:10;7037:19;7059:28;;;:16;:28;;;;;;7105:15;7097:47;;;;-1:-1:-1;;;7097:47:4;;30554:2:7;7097:47:4;;;30536:21:7;30593:2;30573:18;;;30566:30;-1:-1:-1;;;30612:18:7;;;30605:49;30671:18;;7097:47:4;30352:343:7;7097:47:4;7171:10;7185:1;7154:28;;;:16;:28;;;;;;:32;;;;7203:6;;7196:48;;-1:-1:-1;;;7196:48:4;;;;;25491:51:7;;;;25558:18;;;25551:34;;;7203:6:4;;;-1:-1:-1;;;;;7203:6:4;;7196:23;;25464:18:7;;7196:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7260:39:4;;484:25:7;;;7275:10:4;;7260:39;;472:2:7;457:18;7260:39:4;;;;;;;7027:279;6992:314::o;15231:281:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15365:9:2::1;15352:10;:22;15344:55;;;::::0;-1:-1:-1;;;15344:55:2;;30902:2:7;15344:55:2::1;::::0;::::1;30884:21:7::0;30941:2;30921:18;;;30914:30;-1:-1:-1;;;30960:18:7;;;30953:50;31020:18;;15344:55:2::1;30700:344:7::0;15344:55:2::1;15409:11;:19:::0;;;;15438:14:::1;:25:::0;15473:19:::1;:32:::0;15231:281::o;685:93:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;757:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;750:21;685:93::o;5047:519:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;5272:14:5::1;::::0;::::1;::::0;::::1;;;5271:15;5263:51;;;::::0;-1:-1:-1;;;5263:51:5;;31598:2:7;5263:51:5::1;::::0;::::1;31580:21:7::0;31637:2;31617:18;;;31610:30;31676:25;31656:18;;;31649:53;31719:18;;5263:51:5::1;31396:347:7::0;5263:51:5::1;5340:12:::0;;5382:14;;5370:26;::::1;5362:71;;;::::0;-1:-1:-1;;;5362:71:5;;31950:2:7;5362:71:5::1;::::0;::::1;31932:21:7::0;;;31969:18;;;31962:30;32028:34;32008:18;;;32001:62;32080:18;;5362:71:5::1;31748:356:7::0;5362:71:5::1;5448:6;5443:117;5458:8;5456:1;:10;5443:117;;;5483:35;5497:5;5503:1;5497:8;;;;;;;;:::i;:::-;;;;;;;5507:7;5515:1;5507:10;;;;;;;;:::i;:::-;;;;;;;5483:13;:35::i;:::-;5544:3;;5443:117;;;;5170:396;5047:519:::0;;:::o;4920:121::-;-1:-1:-1;;;;;5014:20:5;;;;;;:14;:20;;;;;;;;;5007:27;;;;;;;;;;;;;;;;;4979:16;;5007:27;;;5014:20;5007:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4920:121;;;:::o;3211:299:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3430:73:::1;3440:7;;3449:21;;3472:20;;3494:8;3430:9;:73::i;:::-;3211:299:::0;;;;;;;:::o;2369:352:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;1633:12:4::1;::::0;::::1;;1632:13;1624:42;;;;-1:-1:-1::0;;;1624:42:4::1;;;;;;;:::i;:::-;2481:1:::2;2473:5;:9;2465:50;;;::::0;-1:-1:-1;;;2465:50:4;;32794:2:7;2465:50:4::2;::::0;::::2;32776:21:7::0;32833:2;32813:18;;;32806:30;32872;32852:18;;;32845:58;32920:18;;2465:50:4::2;32592:352:7::0;2465:50:4::2;2558:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;2533:36:4::2;;;;;;;;:::i;:::-;::::0;2525:75:::2;;;::::0;-1:-1:-1;;;2525:75:4;;33151:2:7;2525:75:4::2;::::0;::::2;33133:21:7::0;33190:2;33170:18;;;33163:30;33229:28;33209:18;;;33202:56;33275:18;;2525:75:4::2;32949:350:7::0;2525:75:4::2;2630:31;::::0;;;;::::2;::::0;;;;;2645:15:::2;2630:31;::::0;;::::2;::::0;;;-1:-1:-1;2610:17:4;;;:9:::2;:17:::0;;;;;;:51;;;;;::::2;::::0;;::::2;::::0;2677:37;2696:10:::2;::::0;2620:6;;2677:37:::2;::::0;::::2;::::0;2638:5;484:25:7;;472:2;457:18;;338:177;2677:37:4::2;;;;;;;;2369:352:::0;;;:::o;14881:101:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;14956:6:2::1;:19:::0;;-1:-1:-1;;;;;14956:19:2;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;14956:19:2;;::::1;::::0;;;::::1;::::0;;14881:101::o;14988:120::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15072:16:2::1;:29:::0;;-1:-1:-1;;;;;;15072:29:2::1;-1:-1:-1::0;;;;;15072:29:2;;;::::1;::::0;;;::::1;::::0;;14988:120::o;1811:109:4:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1888:16:4::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;1888:25:4;;::::1;::::0;;;::::1;::::0;;1811:109::o;518:161:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;588:19:0;::::1;580:64;;;::::0;-1:-1:-1;;;580:64:0;;33506:2:7;580:64:0::1;::::0;::::1;33488:21:7::0;;;33525:18;;;33518:30;33584:34;33564:18;;;33557:62;33636:18;;580:64:0::1;33304:356:7::0;580:64:0::1;-1:-1:-1::0;;;;;654:14:0::1;;::::0;;;671:1:::1;654:14;::::0;;;;;;;:18;518:161::o;2822:120:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2907:28:2::1;;::::0;;;:18:::1;:28;::::0;;;;2900:35;2822:120::o;2477:142::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2572:23:2::1;:40:::0;2477:142::o;1369:101:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1442:13:5::1;:21:::0;;-1:-1:-1;;1442:21:5::1;::::0;::::1;;::::0;;;::::1;::::0;;1369:101::o;16350:159:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;16449:1:2::1;16438:7;:12;;16430:37;;;::::0;-1:-1:-1;;;16430:37:2;;33867:2:7;16430:37:2::1;::::0;::::1;33849:21:7::0;33906:2;33886:18;;;33879:30;-1:-1:-1;;;33925:18:7;;;33918:42;33977:18;;16430:37:2::1;33665:336:7::0;16430:37:2::1;16477:15;:25:::0;16350:159::o;7147:395:5:-;7271:14;;7225:15;;7252:16;7271:14;-1:-1:-1;;;;;7323:22:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7295:50;;7360:6;7356:153;7370:8;7368:1;:10;7356:153;;;7395:14;7412:7;7420:1;7412:10;;;;;;;;:::i;:::-;;;;;;;7395:27;;7451:8;:16;7460:6;7451:16;;;;;;;;;;;7436:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;7446:1;7436:12;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;7493:3:5;;7356:153;;;-1:-1:-1;7526:9:5;7147:395;-1:-1:-1;;;7147:395:5:o;3099:210:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;3172:83:4::1;3180:6;-1:-1:-1::0;;3172:7:4::1;:83::i;:::-;3270:32;::::0;3291:10:::1;::::0;3283:6;;3270:32:::1;::::0;;;::::1;3099:210:::0;;:::o;8038:319:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8264:86:::1;8285:7;;8294:13;8309:11;8322;8335:14;8264:20;:86::i;:::-;8038:319:::0;;;;;;:::o;4529:385:5:-;4647:14;;4600:16;;4628;4647:14;-1:-1:-1;;;;;4697:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4697:23:5;;4671:49;;4735:6;4731:153;4745:8;4743:1;:10;4731:153;;;4770:14;4787:7;4795:1;4787:10;;;;;;;;:::i;:::-;;;;;;;4770:27;;4823:11;:19;4835:6;4823:19;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4823:19:5;4811:6;4818:1;4811:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4811:31:5;;;:9;;;;;;;;;;;:31;-1:-1:-1;4868:3:5;;4731:153;;6832:185;1182:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;6937:16:::1;::::0;;;:8:::1;:16;::::0;;;;;;;:26;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;6994:6;6978:32;7002:7;6978:32;;;;;;:::i;:::-;;;;;;;;6832:185:::0;;;:::o;2727:366:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;2842:1:4::1;2831:8;:12;2823:53;;;::::0;-1:-1:-1;;;2823:53:4;;32794:2:7;2823:53:4::1;::::0;::::1;32776:21:7::0;32833:2;32813:18;;;32806:30;32872;32852:18;;;32845:58;32920:18;;2823:53:4::1;32592:352:7::0;2823:53:4::1;2886:13;2902:17:::0;;;:9:::1;:17;::::0;;;;:23;2943:12;2935:35:::1;;;;-1:-1:-1::0;;;2935:35:4::1;;;;;;;:::i;:::-;2980:17;::::0;;;:9:::1;:17;::::0;;;;;;;;:34;;;3030:56;;14533:25:7;;;14574:18;;;14567:34;;;3055:10:4::1;::::0;2980:17;;3030:56:::1;::::0;14506:18:7;3030:56:4::1;;;;;;;2813:280;2727:366:::0;;;:::o;2062:454:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2192:13:5::1;::::0;::::1;;2191:14;2183:54;;;::::0;-1:-1:-1;;;2183:54:5;;34547:2:7;2183:54:5::1;::::0;::::1;34529:21:7::0;34586:2;34566:18;;;34559:30;34625:29;34605:18;;;34598:57;34672:18;;2183:54:5::1;34345:351:7::0;2183:54:5::1;2261:7:::0;2293:21;;::::1;2285:66;;;::::0;-1:-1:-1;;;2285:66:5;;31950:2:7;2285:66:5::1;::::0;::::1;31932:21:7::0;;;31969:18;;;31962:30;32028:34;32008:18;;;32001:62;32080:18;;2285:66:5::1;31748:356:7::0;2285:66:5::1;2365:6;2361:149;2375:3;2373:1;:5;2361:149;;;2395:14;2412:7;;2420:1;2412:10;;;;;;;:::i;:::-;;;;;;;2395:27;;2456:9;;2466:1;2456:12;;;;;;;:::i;:::-;;;;;;2436:9;:17;2446:6;2436:17;;;;;;;;;;;:32;;;;;;:::i;:::-;-1:-1:-1::0;;;2494:3:5::1;;2361:149;;7329:483:4::0;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;7439:10:4::1;-1:-1:-1::0;;;;;7427:22:4;::::1;::::0;7419:58:::1;;;::::0;-1:-1:-1;;;7419:58:4;;40369:2:7;7419:58:4::1;::::0;::::1;40351:21:7::0;40408:2;40388:18;;;40381:30;40447:25;40427:18;;;40420:53;40490:18;;7419:58:4::1;40167:347:7::0;7419:58:4::1;7496:16;::::0;::::1;::::0;::::1;;;7495:17;7487:50;;;::::0;-1:-1:-1;;;7487:50:4;;40721:2:7;7487:50:4::1;::::0;::::1;40703:21:7::0;40760:2;40740:18;;;40733:30;-1:-1:-1;;;40779:18:7;;;40772:50;40839:18;;7487:50:4::1;40519:344:7::0;7487:50:4::1;7555:17;::::0;;;:9:::1;:17;::::0;;;;:23;:28;7547:68:::1;;;::::0;-1:-1:-1;;;7547:68:4;;41070:2:7;7547:68:4::1;::::0;::::1;41052:21:7::0;41109:2;41089:18;;;41082:30;41148:29;41128:18;;;41121:57;41195:18;;7547:68:4::1;40868:351:7::0;7547:68:4::1;7658:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;7633:36:4::1;;;;;;;;:::i;:::-;::::0;7625:79:::1;;;::::0;-1:-1:-1;;;7625:79:4;;41426:2:7;7625:79:4::1;::::0;::::1;41408:21:7::0;41465:2;41445:18;;;41438:30;41504:32;41484:18;;;41477:60;41554:18;;7625:79:4::1;41224:354:7::0;7625:79:4::1;7715:30;7728:8;7738:6;7715:12;:30::i;:::-;7760:45;::::0;-1:-1:-1;;;;;7760:45:4;::::1;::::0;7784:10:::1;::::0;7776:6;;7760:45:::1;::::0;;;::::1;7329:483:::0;;;:::o;2234:115:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2314:17:2::1;:28:::0;;-1:-1:-1;;2314:28:2::1;::::0;::::1;;::::0;;;::::1;::::0;;2234:115::o;4313:210:5:-;4378:4;;4402:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;4402:24:5;;;;:39;;;;;;;;:::i;:::-;;4394:72;;;;-1:-1:-1;;;4394:72:5;;41785:2:7;4394:72:5;;;41767:21:7;41824:2;41804:18;;;41797:30;-1:-1:-1;;;41843:18:7;;;41836:50;41903:18;;4394:72:5;41583:344:7;4394:72:5;-1:-1:-1;4514:1:5;4483:19;;;:11;:19;;;;;;-1:-1:-1;;;;;4483:19:5;:33;;4313:210::o;3803:504::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4034:20:5;;3924:17;4034:20;;;:14;:20;;;;;;;;4016:39;;;;;;;;;;;;;;;;;3924:17;;;;;;;;4016:39;;;;4034:20;4016:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:39::i;:::-;4086:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;3803:504:5:o;4840:347:2:-;-1:-1:-1;;;;;4916:28:2;;4896:4;4916:28;;;:18;:28;;;;;;4948:1;4916:33;4912:75;;-1:-1:-1;4972:4:2;;4840:347;-1:-1:-1;4840:347:2:o;4912:75::-;-1:-1:-1;;;;;5074:24:2;;4997:17;5074:24;;;:14;:24;;;;;;;;5056:43;;;;;;;;;;;;;;;;;4997:17;;;;5056:43;;;;5074:24;;5056:43;;5074:24;5056:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:43::i;:::-;4996:103;;;;;;;;5157:23;;5142:7;5152:1;5142:11;;;;:::i;:::-;5128;:7;5138:1;5128:11;:::i;:::-;5116:23;;:9;:23;:::i;:::-;:37;;;;:::i;:::-;:64;;;4840:347;-1:-1:-1;;;;;4840:347:2:o;16515:111::-;16575:4;16598:21;16613:5;16598:14;:21::i;:::-;16591:28;16515:111;-1:-1:-1;;16515:111:2:o;5616:518:4:-;5713:15;;;;:7;:15;;;;;:22;5700:35;;5692:72;;;;-1:-1:-1;;;5692:72:4;;42307:2:7;5692:72:4;;;42289:21:7;42346:2;42326:18;;;42319:30;-1:-1:-1;;;42365:18:7;;;42358:54;42429:18;;5692:72:4;42105:348:7;5692:72:4;5774:18;5795:15;;;:7;:15;;;;;:27;;5811:10;;5795:27;;;;;;:::i;:::-;;;;;;;;;;5774:48;;;;;;;;5795:27;;;;;;;5774:48;;-1:-1:-1;;;;;5774:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5840:10:4;:25;5832:61;;;;-1:-1:-1;;;5832:61:4;;42660:2:7;5832:61:4;;;42642:21:7;42699:2;42679:18;;;42672:30;42738:25;42718:18;;;42711:53;42781:18;;5832:61:4;42458:347:7;5832:61:4;5912:5;:15;;;5911:16;5903:52;;;;-1:-1:-1;;;5903:52:4;;43012:2:7;5903:52:4;;;42994:21:7;43051:2;43031:18;;;43024:30;-1:-1:-1;;;43070:18:7;;;43063:53;43133:18;;5903:52:4;42810:347:7;5903:52:4;5999:11;;;;;5983;;-1:-1:-1;;;;;5966:29:4;;;;;:16;:29;;;;;;:44;;5999:11;;5966:29;;:44;;5999:11;;5966:44;:::i;:::-;;;;-1:-1:-1;;6020:15:4;;;;:7;:15;;;;;:27;;6060:4;;6020:15;6036:10;;6020:27;;;;;;:::i;:::-;;;;;;;;;;;:37;;;:44;;;;;;;;;;;;;;;;;;6103:10;-1:-1:-1;;;;;6080:47:4;6095:6;6080:47;6115:5;:11;;;6080:47;;;;484:25:7;;472:2;457:18;;338:177;3777:834:4;1633:12;;;;1632:13;1624:42;;;;-1:-1:-1;;;1624:42:4;;;;;;;:::i;:::-;3850:22:::1;3875:17:::0;;;:9:::1;:17;::::0;;;;;;;;3850:42;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;3902:40:::1;;;;-1:-1:-1::0;;;3902:40:4::1;;;;;;;:::i;:::-;3978:6;::::0;4053:13;;4003:46:::1;::::0;-1:-1:-1;;;4003:46:4;;4023:10:::1;4003:46;::::0;::::1;23174:34:7::0;4043:4:4::1;23224:18:7::0;;;23217:43;3978:6:4;;;::::1;-1:-1:-1::0;;;;;3978:6:4::1;::::0;;;4003:19:::1;::::0;23109:18:7;;4003:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;3995:96;;;::::0;-1:-1:-1;;;3995:96:4;;23662:2:7;3995:96:4::1;::::0;::::1;23644:21:7::0;23701:2;23681:18;;;23674:30;-1:-1:-1;;;23720:18:7;;;23713:50;23780:18;;3995:96:4::1;23460:344:7::0;3995:96:4::1;4118:13:::0;;4109:22;::::1;4101:55;;;::::0;-1:-1:-1;;;4101:55:4;;43364:2:7;4101:55:4::1;::::0;::::1;43346:21:7::0;43403:2;43383:18;;;43376:30;-1:-1:-1;;;43422:18:7;;;43415:50;43482:18;;4101:55:4::1;43162:344:7::0;4101:55:4::1;4167:83;4175:6;-1:-1:-1::0;;4167:7:4::1;:83::i;:::-;4260:21;1337:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;4314:32:4::1;4327:10;1337:19:5::0;4314:12:4::1;:32::i;:::-;4357:8;4367::::0;4379:28:::1;4393:7;:13;;;4379;:28::i;:::-;4417:54;::::0;-1:-1:-1;;;4417:54:4;;4356:51;;-1:-1:-1;4356:51:4;-1:-1:-1;;;;;;4417:22:4;::::1;::::0;::::1;::::0;:54:::1;::::0;4440:10:::1;::::0;4452:13;;4356:51;;4417:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;4516:11:4::1;::::0;4481:52:::1;::::0;-1:-1:-1;;;4481:52:4;;-1:-1:-1;;;;;4481:22:4;;::::1;::::0;::::1;::::0;:52:::1;::::0;4504:10:::1;::::0;4516:11:::1;::::0;4529:3;;4481:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4586:10;-1:-1:-1::0;;;;;4549:55:4::1;4571:13;-1:-1:-1::0;;;;;4549:55:4::1;4563:6;4549:55;4598:5;4549:55;;;;484:25:7::0;;472:2;457:18;;338:177;4549:55:4::1;;;;;;;;3840:771;;;;;3777:834:::0;;:::o;8403:433::-;8465:7;8508:15;;;:7;:15;;;;;;;;8484:39;;;;;;;;;;;;;;;;;8465:7;;;;8484:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8484:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8533:14;8550:6;:13;8533:30;;8573:15;8607:6;8602:201;8617:9;8615:1;:11;8602:201;;;8648:6;8655:1;8648:9;;;;;;;;:::i;:::-;;;;;;;:19;;;8647:20;:52;;;;;8689:10;8671:6;8678:1;8671:9;;;;;;;;:::i;:::-;;;;;;;:15;;;:28;8647:52;8643:119;;;8732:6;8739:1;8732:9;;;;;;;;:::i;:::-;;;;;;;:15;;;8719:28;;8643:119;8787:3;;8602:201;;;-1:-1:-1;8819:10:4;8403:433;-1:-1:-1;;;;8403:433:4:o;9862:545:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10170:141:::1;10191:14;;10207:11;:25;;;10234:11;:23;;;10259:11;:23;;;10284:11;:26;;;10170:20;:141::i;:::-;10321:79;10331:13;;10346:21;;10369:20;;10391:8;10321:9;:79::i;6140:112:4:-:0;6197:14;6230:7;:15;6238:6;6230:15;;;;;;;;;;;6223:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6223:22:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6140:112;;;:::o;7959:240::-;8021:7;8074:17;;;:9;:17;;;;;;;;8049:42;;;;;;;;;;;;;;;;;;;;;;;;;8021:7;;8101:40;;;;-1:-1:-1;;;8101:40:4;;;;;;;:::i;:::-;8159:13;;8174:17;;;;;8159:13;;8174:17;;-1:-1:-1;7959:240:4;-1:-1:-1;;7959:240:4:o;6258:728::-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;1633:12:4::1;::::0;::::1;;1632:13;1624:42;;;;-1:-1:-1::0;;;1624:42:4::1;;;;;;;:::i;:::-;6402:15:::2;::::0;;;:7:::2;:15;::::0;;;;:22;6389:35;::::2;6381:72;;;::::0;-1:-1:-1;;;6381:72:4;;42307:2:7;6381:72:4::2;::::0;::::2;42289:21:7::0;42346:2;42326:18;;;42319:30;-1:-1:-1;;;42365:18:7;;;42358:54;42429:18;;6381:72:4::2;42105:348:7::0;6381:72:4::2;6463:18;6484:15:::0;;;:7:::2;:15;::::0;;;;:27;;6500:10;;6484:27;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;6463:48:::2;::::0;;::::2;::::0;::::2;::::0;;6484:27:::2;::::0;;::::2;::::0;;::::2;6463:48:::0;;-1:-1:-1;;;;;6463:48:4::2;::::0;;;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;::::2;;;::::0;::::2;::::0;;;;;;-1:-1:-1;6521:52:4::2;;;::::0;-1:-1:-1;;;6521:52:4;;43012:2:7;6521:52:4::2;::::0;::::2;42994:21:7::0;43051:2;43031:18;;;43024:30;-1:-1:-1;;;43070:18:7;;;43063:53;43133:18;;6521:52:4::2;42810:347:7::0;6521:52:4::2;6606:5;6591;:11;;;:20;6583:53;;;::::0;-1:-1:-1;;;6583:53:4;;43364:2:7;6583:53:4::2;::::0;::::2;43346:21:7::0;43403:2;43383:18;;;43376:30;-1:-1:-1;;;43422:18:7;;;43415:50;43482:18;;6583:53:4::2;43162:344:7::0;6583:53:4::2;6647:27;6655:6;6663:10;6647:7;:27::i;:::-;6697:11:::0;;6684:33:::2;::::0;6710:6;6684:12:::2;:33::i;:::-;6728:16;6754:6;;;;;;;;;-1:-1:-1::0;;;;;6754:6:4::2;6728:33;;6772:8;6782::::0;6794:26:::2;6808:5;:11;;;6794:13;:26::i;:::-;6830:35;::::0;-1:-1:-1;;;6830:35:4;;6849:10:::2;6830:35;::::0;::::2;25491:51:7::0;25558:18;;;25551:34;;;6771:49:4;;-1:-1:-1;6771:49:4;-1:-1:-1;;;;;;6830:18:4;::::2;::::0;::::2;::::0;25464::7;;6830:35:4::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;6894:11:4::2;::::0;6875:36:::2;::::0;-1:-1:-1;;;6875:36:4;;-1:-1:-1;;;;;6894:11:4;;::::2;6875:36;::::0;::::2;25491:51:7::0;25558:18;;;25551:34;;;6875:18:4;;::::2;::::0;::::2;::::0;25464::7;;6875:36:4::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6960:5;:11;;;-1:-1:-1::0;;;;;6926:53:4::2;6948:10;-1:-1:-1::0;;;;;6926:53:4::2;6940:6;6926:53;6973:5;6926:53;;;;484:25:7::0;;472:2;457:18;;338:177;6926:53:4::2;;;;;;;;6371:615;;;;6258:728:::0;;;;:::o;2522:200:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2632:13:5::1;::::0;::::1;;2631:14;2623:54;;;::::0;-1:-1:-1;;;2623:54:5;;34547:2:7;2623:54:5::1;::::0;::::1;34529:21:7::0;34586:2;34566:18;;;34559:30;34625:29;34605:18;;;34598:57;34672:18;;2623:54:5::1;34345:351:7::0;2623:54:5::1;2687:17;::::0;;;:9:::1;:17;::::0;;;;2707:8;;2687:28:::1;2707:8:::0;2687:17;:28:::1;:::i;1771:115::-:0;1828:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:15:5;1862:17;;;;:9;:17;;;;;;;;;1855:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;1862:17;;1855:24;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;1855:24:5;1771:115;-1:-1:-1;;1771:115:5:o;892:175:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;974:22:0;::::1;966:67;;;::::0;-1:-1:-1;;;966:67:0;;43713:2:7;966:67:0::1;::::0;::::1;43695:21:7::0;;;43732:18;;;43725:30;43791:34;43771:18;;;43764:62;43843:18;;966:67:0::1;43511:356:7::0;966:67:0::1;1043:6;:17:::0;;-1:-1:-1;;;;;;1043:17:0::1;-1:-1:-1::0;;;;;1043:17:0;;;::::1;::::0;;;::::1;::::0;;892:175::o;8205:192:4:-;8268:7;8303:17;;;:9;:17;;;;;:23;8344:9;8336:32;;;;-1:-1:-1;;;8336:32:4;;;;;;;:::i;2625:191:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2708:22:2;::::1;2700:67;;;::::0;-1:-1:-1;;;2700:67:2;;44074:2:7;2700:67:2::1;::::0;::::1;44056:21:7::0;;;44093:18;;;44086:30;44152:34;44132:18;;;44125:62;44204:18;;2700:67:2::1;43872:356:7::0;2700:67:2::1;-1:-1:-1::0;;;;;2777:28:2::1;;::::0;;;:18:::1;:28;::::0;;;;2808:1:::1;2777:32:::0;;2625:191::o;10738:965::-;10981:14;;10949:4;;11013:33;;;:50;;;11050:8;11062:1;11050:13;11013:50;11005:95;;;;-1:-1:-1;;;11005:95:2;;44435:2:7;11005:95:2;;;44417:21:7;;;44454:18;;;44447:30;44513:34;44493:18;;;44486:62;44565:18;;11005:95:2;44233:356:7;11005:95:2;11254:16;;11245:92;;-1:-1:-1;;;11245:92:2;;11111:13;;;;-1:-1:-1;;;;;11254:16:2;;;;11245:40;;:92;;11286:5;;11293:21;;;;11316:20;;;;11245:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11245:92:2;;;;;;;;;;;;:::i;:::-;11206:131;;11353:6;11348:241;11363:8;11361:1;:10;11348:241;;;11388:24;11415:23;11427:7;11435:1;11427:10;;;;;;;;:::i;:::-;;;;;;;11415:11;:23::i;:::-;11388:50;;11452:17;11472:42;11494:8;11504:9;11472:21;:42::i;:::-;11452:62;-1:-1:-1;11528:18:2;11452:62;11528:18;;:::i;:::-;;;11573:3;;;;;11374:215;;11348:241;;;-1:-1:-1;15587:15:2;;15606:1;15587:20;11599:75;;11642:21;11657:5;11642:14;:21::i;:::-;11634:29;;11599:75;-1:-1:-1;11691:5:2;10738:965;-1:-1:-1;;;;;;;;10738:965:2:o;2728:1069:5:-;2804:4;2810;2816;2822;2828;2845:15;2870:13;2893;2916;2939:15;2965:11;2979:7;:14;2965:28;;3008:6;3004:730;3018:3;3016:1;:5;3004:730;;;3038:14;3055:7;3063:1;3055:10;;;;;;;;:::i;:::-;;;;;;;3038:27;;3112:13;3084:41;;;;;;;;:::i;:::-;:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3084:24:5;;;;:41;;;;;;;;:::i;:::-;;3080:612;;3145:11;3155:1;3145:11;;:::i;:::-;;;3080:612;;;3221:11;3193:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3193:24:5;;;;:39;;;;;;;;:::i;:::-;;3189:503;;3252:9;3260:1;3252:9;;:::i;:::-;;;3189:503;;;3326:11;3298:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3298:24:5;;;;:39;;;;;;;;:::i;:::-;;3294:398;;3357:9;3365:1;3357:9;;:::i;:::-;;;3294:398;;;3431:11;3403:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3403:24:5;;;;:39;;;;;;;;:::i;:::-;;3399:293;;3462:9;3470:1;3462:9;;:::i;:::-;;;3399:293;;;3614:14;3586:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3586:24:5;;;;:42;;;;;;;;:::i;:::-;;3578:70;;;;-1:-1:-1;;;3578:70:5;;48586:2:7;3578:70:5;;;48568:21:7;48625:2;48605:18;;;48598:30;-1:-1:-1;;;48644:18:7;;;48637:45;48699:18;;3578:70:5;48384:339:7;3578:70:5;3666:11;3676:1;3666:11;;:::i;:::-;;;3399:293;-1:-1:-1;3718:3:5;;3004:730;;;-1:-1:-1;3752:7:5;;3761:5;;-1:-1:-1;3768:5:5;;-1:-1:-1;3768:5:5;-1:-1:-1;3761:5:5;-1:-1:-1;2728:1069:5;-1:-1:-1;;;2728:1069:5:o;7392:640:2:-;7522:14;;7503:16;7546:239;7560:8;7558:1;:10;7546:239;;;7585:14;7602:7;7610:1;7602:10;;;;;;;;:::i;:::-;;;;;;;7585:27;;7634;7654:6;7634:19;:27::i;:::-;7626:71;;;;-1:-1:-1;;;7626:71:2;;48930:2:7;7626:71:2;;;48912:21:7;48969:2;48949:18;;;48942:30;49008:33;48988:18;;;48981:61;49059:18;;7626:71:2;48728:355:7;7626:71:2;7711:32;7724:10;7736:6;7711:12;:32::i;:::-;-1:-1:-1;7769:3:2;;7546:239;;;;7799:17;7795:154;;;7852:7;:14;7832:16;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;7795:154:2;;-1:-1:-1;7795:154:2;;7924:7;:14;7905:15;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;7795:154:2;8007:17;7964:61;;7997:8;-1:-1:-1;;;;;7964:61:2;7985:10;-1:-1:-1;;;;;7964:61:2;;7976:7;7964:61;;;;;;:::i;:::-;;;;;;;;7493:539;7392:640;;;:::o;6679:147:5:-;6750:19;;;;:11;:19;;;;;;;;:26;;-1:-1:-1;;;;;6750:26:5;;;-1:-1:-1;;;;;;6750:26:5;;;;;;;6786:20;;;:14;:20;;;;;:33;;6750:26;6786:33;;;;;;;;;;;;;;6679:147::o;3516:1074:2:-;3729:18;3721:46;;;;-1:-1:-1;;;3721:46:2;;;;;;;:::i;:::-;3777:13;3793:83;3811:10;3823:7;;3793:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3832:21:2;;-1:-1:-1;3832:21:2;;-1:-1:-1;3855:20:2;;-1:-1:-1;3855:20:2;3793:17;:83::i;:::-;3895:16;;3886:98;;-1:-1:-1;;;3886:98:2;;3777:99;;-1:-1:-1;;;;;;3895:16:2;;3886:41;;:98;;3928:10;;3940:21;;;;3963:20;;;;3886:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3994:12;4020:26;4037:8;4020:16;:26::i;:::-;4016:455;;;4063:8;4073;4085:28;4107:5;4085:21;:28::i;:::-;4144:6;;4137:54;;-1:-1:-1;;;4137:54:2;;4062:51;;-1:-1:-1;4062:51:2;;-1:-1:-1;4144:6:2;;;-1:-1:-1;;;;;4144:6:2;;4137:27;;:54;;4165:10;;4177:8;;4062:51;;4137:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4127:64;;4209:7;4205:113;;;4253:6;;4286:11;;4246:57;;-1:-1:-1;;;4246:57:2;;4253:6;;;;-1:-1:-1;;;;;4253:6:2;;;;4246:27;;:57;;4274:10;;4286:11;;;4299:3;;4246:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4236:67;;4205:113;4048:280;;4016:455;;;4408:6;;4441:11;;4401:59;;-1:-1:-1;;;4401:59:2;;4375:1;;-1:-1:-1;4408:6:2;;;;-1:-1:-1;;;;;4408:6:2;;;;4401:27;;:59;;4429:10;;4441:11;;;4454:5;;4401:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4391:69;;4016:455;4489:7;4481:50;;;;-1:-1:-1;;;4481:50:2;;49290:2:7;4481:50:2;;;49272:21:7;49329:2;49309:18;;;49302:30;49368:32;49348:18;;;49341:60;49418:18;;4481:50:2;49088:354:7;4481:50:2;4542:41;4558:7;;4542:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4567:8:2;;-1:-1:-1;4542:41:2;-1:-1:-1;4542:15:2;;-1:-1:-1;4542:41:2:i;:::-;3711:879;;3516:1074;;;;;;;:::o;3315:456:4:-;3399:17;;;;:9;:17;;;;;;;;3392:24;;;;;;;;3450:7;:15;;;;;3426:39;;;;;;;;;;;;;;;;;;;3450:15;;3426:39;3399:17;;3426:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3426:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3492:13:4;;3426:39;;-1:-1:-1;3475:14:4;;-1:-1:-1;;3515:218:4;3530:9;3528:1;:11;3515:218;;;3561:6;3568:1;3561:9;;;;;;;;:::i;:::-;;;;;;;:19;;;3560:20;:45;;;;;3589:16;3584:1;:21;;3560:45;3556:136;;;3662:6;3669:1;3662:9;;;;;;;;:::i;:::-;;;;;;;:15;;;3625:16;:33;3642:6;3649:1;3642:9;;;;;;;;:::i;:::-;;;;;;;:15;;;-1:-1:-1;;;;;3625:33:4;-1:-1:-1;;;;;3625:33:4;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;3556:136:4;3717:3;;3515:218;;;-1:-1:-1;3749:15:4;;;;:7;:15;;;;;3742:22;;;:::i;8363:1493:2:-;8583:18;8575:46;;;;-1:-1:-1;;;8575:46:2;;;;;;;:::i;:::-;8632:17;8651:15;8668;8685;8702:18;8724:26;8742:7;;8724:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8724:17:2;;-1:-1:-1;;;8724:26:2:i;:::-;8631:119;;;;;;;;;;8850:7;8836:21;;;;;:::i;:::-;;;8877:1;8867:11;;8964:13;8952:9;:25;8949:147;;;9005:25;9017:13;9005:9;:25;:::i;:::-;8993:38;;;;:::i;:::-;;-1:-1:-1;9059:25:2;9071:13;9059:9;:25;:::i;:::-;9045:40;;;;:::i;:::-;;;8949:147;9179:11;9169:7;:21;9166:133;;;9218:21;9228:11;9218:7;:21;:::i;:::-;9206:34;;;;:::i;:::-;;-1:-1:-1;9266:21:2;9276:11;9266:7;:21;:::i;:::-;9254:34;;;;:::i;:::-;;;9166:133;9382:11;9372:7;:21;9369:136;;;9424:21;9434:11;9424:7;:21;:::i;:::-;9409:37;;;;:::i;:::-;;-1:-1:-1;9472:21:2;9482:11;9472:7;:21;:::i;:::-;9460:34;;;;:::i;:::-;;;9369:136;9553:9;9536:13;:26;;:52;;;;;9581:7;9566:11;:22;;9536:52;:78;;;;;9607:7;9592:11;:22;;9536:78;:110;;;;;9636:10;9618:14;:28;;9536:110;9515:179;;;;-1:-1:-1;;;9515:179:2;;49779:2:7;9515:179:2;;;49761:21:7;49818:2;49798:18;;;49791:30;-1:-1:-1;;;49837:18:7;;;49830:52;49899:18;;9515:179:2;49577:346:7;9515:179:2;9714:16;;9705:92;;-1:-1:-1;;;9705:92:2;;-1:-1:-1;;;;;9714:16:2;;;;9705:39;;:92;;9745:10;;9757:9;;9768:7;;9777;;9786:10;;9705:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9807:42;9823:7;;9807:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9807:42:2;-1:-1:-1;9844:4:2;;-1:-1:-1;9807:15:2;;-1:-1:-1;9807:42:2:i;:::-;8565:1291;;;;;8363:1493;;;;;;:::o;5572:1101:5:-;5643:16;5662:19;;;:11;:19;;;;;;-1:-1:-1;;;;;5662:19:5;5691:27;5705:4;5674:6;5691:13;:27::i;:::-;-1:-1:-1;;;;;5771:22:5;;;5767:900;;-1:-1:-1;;;;;5842:24:5;;5809:30;5842:24;;;:14;:24;;;;;;;;5809:57;;;;;;;;;;;;;;;;;;;5842:24;;5809:57;;;5842:24;5809:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5894:20:5;;5809:57;;-1:-1:-1;;;5947:66:5;-1:-1:-1;5880:11:5;;-1:-1:-1;;6027:199:5;6041:3;6039:1;:5;6027:199;;;6089:6;6069:13;6083:1;6069:16;;;;;;;;:::i;:::-;;;;;;;:26;6065:112;;6130:1;6119:12;;6153:5;;6065:112;6206:3;;6027:199;;;-1:-1:-1;6299:78:5;;6291:118;;;;-1:-1:-1;;;6291:118:5;;50624:2:7;6291:118:5;;;50606:21:7;50663:2;50643:18;;;50636:30;50702:29;50682:18;;;50675:57;50749:18;;6291:118:5;50422:351:7;6291:118:5;6505:5;6509:1;6505:3;:5;:::i;:::-;6493:8;:17;6489:124;;-1:-1:-1;;;;;6567:24:5;;;;;;:14;:24;;;;;6592:5;6596:1;6592:3;:5;:::i;:::-;6567:31;;;;;;;;:::i;:::-;;;;;;;;;6530:14;:24;6545:8;-1:-1:-1;;;;;6530:24:5;-1:-1:-1;;;;;6530:24:5;;;;;;;;;;;;6555:8;6530:34;;;;;;;;:::i;:::-;;;;;;;;;;:68;6489:124;-1:-1:-1;;;;;6626:24:5;;;;;;:14;:24;;;;;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5795:872;;;5767:900;5633:1040;5572:1101;;:::o;16632:753:2:-;16692:4;16837:15;16855:46;16867:17;:15;:17::i;:::-;16886:14;;16855:11;:46::i;:::-;17109:14;;16837:64;;-1:-1:-1;17014:27:2;;575:6;17063:24;16837:64;17109:14;17063:24;:::i;:::-;17062:44;;;;:::i;:::-;:61;;;;:::i;:::-;17044:79;;575:6;17044:79;:::i;:::-;17014:109;;17169:29;17201:65;395:9;17225:19;;17246;17201:5;:65::i;:::-;17169:97;-1:-1:-1;17276:21:2;395:9;17300:29;17324:5;17169:97;17300:29;:::i;:::-;:48;;;;:::i;:::-;17276:72;16632:753;-1:-1:-1;;;;;;16632:753:2:o;8970:227:4:-;9030:7;9039;9058:11;395:9:2;9088:11:4;;9080:5;:19;;;;:::i;:::-;9072:47;;;;:::i;:::-;9058:61;-1:-1:-1;9129:11:4;9151;9058:61;9151:5;:11;:::i;:::-;9129:34;9186:3;;-1:-1:-1;8970:227:4;;-1:-1:-1;;;8970:227:4:o;11709:3166:2:-;11826:4;;;11922:13;11903:8;:15;;;:32;;;;;;;;:::i;:::-;;11899:348;;11963:12;11951:24;;11899:348;;;12024:11;12005:8;:15;;;:30;;;;;;;;:::i;:::-;;12001:246;;12063:10;12051:22;;12001:246;;;12122:11;12103:8;:15;;;:30;;;;;;;;:::i;:::-;;12099:148;;12161:10;12149:22;;12099:148;;;12211:25;;-1:-1:-1;;;12211:25:2;;48586:2:7;12211:25:2;;;48568:21:7;48625:2;48605:18;;;48598:30;-1:-1:-1;;;48644:18:7;;;48637:45;48699:18;;12211:25:2;48384:339:7;12099:148:2;12277:16;;12257:17;12349;;;12345:63;;12388:9;12381:16;;;;;;;12345:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12461:2231:2;12478:12;12474:1;:16;12461:2231;;;12518:9;12528:1;12518:12;;;;;;;;:::i;:::-;;;;;;;12507:23;;12548:8;:15;;;12544:2107;;;12598:17;;12583:32;;-1:-1:-1;;;;;12583:32:2;;;:::i;:::-;;;12544:2107;;;643:2;12652:8;:14;;;:45;;;:71;;;;;12701:8;:22;;;12652:71;12648:2003;;;12758:17;;12743:32;;-1:-1:-1;;;;;12743:32:2;;;:::i;12648:2003::-;643:2;12812:8;:18;;;:49;;;:79;;;;;12865:8;:26;;;12812:79;12808:1843;;;12926:17;;12911:32;;-1:-1:-1;;;;;12911:32:2;;;:::i;12808:1843::-;643:2;12980:8;:13;;;:44;;;:69;;;;;13028:8;:21;;;12980:69;12976:1675;;;13084:17;;13069:32;;-1:-1:-1;;;;;13069:32:2;;;:::i;12976:1675::-;643:2;13138:8;:16;;;:47;;;:75;;;;;13189:8;:24;;;13138:75;13134:1517;;;13248:17;;13233:32;;-1:-1:-1;;;;;13233:32:2;;;:::i;13134:1517::-;643:2;13302:8;:13;;;:44;;;:69;;;;;13350:8;:21;;;13302:69;13298:1353;;;13406:17;;13391:32;;-1:-1:-1;;;;;13391:32:2;;;:::i;13298:1353::-;643:2;13460:8;:14;;;:45;;;:71;;;;;13509:8;:22;;;13460:71;13456:1195;;;13566:17;;13551:32;;-1:-1:-1;;;;;13551:32:2;;;:::i;13456:1195::-;643:2;13620:8;:14;;;:45;;;:71;;;;;13669:8;:22;;;13620:71;13616:1035;;;13726:17;;13711:32;;-1:-1:-1;;;;;13711:32:2;;;:::i;13616:1035::-;643:2;13780:8;:14;;;:45;;;:71;;;;;13829:8;:22;;;13780:71;13776:875;;;13886:17;;13871:32;;-1:-1:-1;;;;;13871:32:2;;;:::i;13776:875::-;643:2;13940:8;:15;;;:46;;;:73;;;;;13990:8;:23;;;13940:73;13936:715;;;14048:17;;14033:32;;-1:-1:-1;;;;;14033:32:2;;;:::i;13936:715::-;643:2;14102:8;:15;;;:46;;;:73;;;;;14152:8;:23;;;14102:73;14098:553;;;14210:17;;14195:32;;-1:-1:-1;;;;;14195:32:2;;;:::i;14098:553::-;14264:8;:17;;;:22;;14285:1;14264:22;:44;;;;;14290:8;:18;;;14264:44;14260:391;;;14343:17;;14328:32;;-1:-1:-1;;;;;14328:32:2;;;:::i;14260:391::-;14397:8;:16;;;:21;;14417:1;14397:21;:42;;;;;14422:8;:17;;;14397:42;14393:258;;;14474:17;;14459:32;;-1:-1:-1;;;;;14459:32:2;;;:::i;14393:258::-;14528:8;:23;;;:28;;14555:1;14528:28;:56;;;;;14560:8;:24;;;14528:56;14524:127;;;14619:17;;14604:32;;-1:-1:-1;;;;;14604:32:2;;;:::i;:::-;;;14524:127;14676:3;;12461:2231;;;;452:7;14706:11;:27;14702:85;;;452:7;14749:27;;14702:85;395:9;14817:30;14836:11;395:9;14817:30;:::i;:::-;14804:44;;:9;:44;:::i;:::-;14803:65;;;;:::i;4596:238::-;4663:4;-1:-1:-1;;;;;4683:22:2;;;;:48;;-1:-1:-1;;;;;;4709:22:2;;4721:10;4709:22;4683:48;:70;;;-1:-1:-1;4736:17:2;;;;4735:18;4683:70;4679:113;;;-1:-1:-1;4776:5:2;;4596:238;-1:-1:-1;4596:238:2:o;4679:113::-;4808:18;4817:8;4808;:18::i;5193:237::-;5261:7;;;395:9;5311:21;514:6;5311:5;:21;:::i;17391:146::-;17439:4;17476:15;17462:11;;:29;:67;;-1:-1:-1;17528:1:2;;17391:146::o;17462:67::-;17513:11;;17495:29;;:15;:29;:::i;:::-;17455:74;;17391:146;:::o;17841:200::-;17913:4;17941:5;17933;:13;17929:106;;;-1:-1:-1;17968:5:2;17961:12;;17929:106;-1:-1:-1;18019:5:2;18012:12;;17614:221;17696:7;;575:6;17772:15;17783:4;17772:8;:15;:::i;:::-;17763:4;17733:26;17751:8;575:6;17733:26;:::i;:::-;17732:35;;;;:::i;:::-;17731:57;;;;:::i;:::-;17730:77;;;;:::i;:::-;17715:93;-1:-1:-1;;17614:221:2;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;520:248:7;588:6;596;649:2;637:9;628:7;624:23;620:32;617:52;;;665:1;662;655:12;617:52;-1:-1:-1;;688:23:7;;;758:2;743:18;;;730:32;;-1:-1:-1;520:248:7:o;773:180::-;832:6;885:2;873:9;864:7;860:23;856:32;853:52;;;901:1;898;891:12;853:52;-1:-1:-1;924:23:7;;773:180;-1:-1:-1;773:180:7:o;958:118::-;1044:5;1037:13;1030:21;1023:5;1020:32;1010:60;;1066:1;1063;1056:12;1081:241;1137:6;1190:2;1178:9;1169:7;1165:23;1161:32;1158:52;;;1206:1;1203;1196:12;1158:52;1245:9;1232:23;1264:28;1286:5;1264:28;:::i;1327:173::-;1395:20;;-1:-1:-1;;;;;1444:31:7;;1434:42;;1424:70;;1490:1;1487;1480:12;1424:70;1327:173;;;:::o;1505:127::-;1566:10;1561:3;1557:20;1554:1;1547:31;1597:4;1594:1;1587:15;1621:4;1618:1;1611:15;1637:255;1709:2;1703:9;1751:6;1739:19;;-1:-1:-1;;;;;1773:34:7;;1809:22;;;1770:62;1767:88;;;1835:18;;:::i;:::-;1871:2;1864:22;1637:255;:::o;1897:275::-;1968:2;1962:9;2033:2;2014:13;;-1:-1:-1;;2010:27:7;1998:40;;-1:-1:-1;;;;;2053:34:7;;2089:22;;;2050:62;2047:88;;;2115:18;;:::i;:::-;2151:2;2144:22;1897:275;;-1:-1:-1;1897:275:7:o;2177:183::-;2237:4;-1:-1:-1;;;;;2262:6:7;2259:30;2256:56;;;2292:18;;:::i;:::-;-1:-1:-1;2337:1:7;2333:14;2349:4;2329:25;;2177:183::o;2365:662::-;2419:5;2472:3;2465:4;2457:6;2453:17;2449:27;2439:55;;2490:1;2487;2480:12;2439:55;2526:6;2513:20;2552:4;2576:60;2592:43;2632:2;2592:43;:::i;:::-;2576:60;:::i;:::-;2670:15;;;2756:1;2752:10;;;;2740:23;;2736:32;;;2701:12;;;;2780:15;;;2777:35;;;2808:1;2805;2798:12;2777:35;2844:2;2836:6;2832:15;2856:142;2872:6;2867:3;2864:15;2856:142;;;2938:17;;2926:30;;2976:12;;;;2889;;2856:142;;;-1:-1:-1;3016:5:7;2365:662;-1:-1:-1;;;;;;2365:662:7:o;3032:367::-;3095:8;3105:6;3159:3;3152:4;3144:6;3140:17;3136:27;3126:55;;3177:1;3174;3167:12;3126:55;-1:-1:-1;3200:20:7;;-1:-1:-1;;;;;3232:30:7;;3229:50;;;3275:1;3272;3265:12;3229:50;3312:4;3304:6;3300:17;3288:29;;3372:3;3365:4;3355:6;3352:1;3348:14;3340:6;3336:27;3332:38;3329:47;3326:67;;;3389:1;3386;3379:12;3326:67;3032:367;;;;;:::o;3404:1074::-;3569:6;3577;3585;3593;3601;3609;3662:3;3650:9;3641:7;3637:23;3633:33;3630:53;;;3679:1;3676;3669:12;3630:53;3702:29;3721:9;3702:29;:::i;:::-;3692:39;;3782:2;3771:9;3767:18;3754:32;-1:-1:-1;;;;;3846:2:7;3838:6;3835:14;3832:34;;;3862:1;3859;3852:12;3832:34;3885:61;3938:7;3929:6;3918:9;3914:22;3885:61;:::i;:::-;3875:71;;3999:2;3988:9;3984:18;3971:32;3955:48;;4028:2;4018:8;4015:16;4012:36;;;4044:1;4041;4034:12;4012:36;4083:72;4147:7;4136:8;4125:9;4121:24;4083:72;:::i;:::-;4174:8;;-1:-1:-1;4057:98:7;-1:-1:-1;4262:2:7;4247:18;;4234:32;;-1:-1:-1;4278:16:7;;;4275:36;;;4307:1;4304;4297:12;4275:36;;4346:72;4410:7;4399:8;4388:9;4384:24;4346:72;:::i;:::-;3404:1074;;;;-1:-1:-1;3404:1074:7;;-1:-1:-1;3404:1074:7;;4437:8;;3404:1074;-1:-1:-1;;;3404:1074:7:o;4483:472::-;4525:3;4563:5;4557:12;4590:6;4585:3;4578:19;4615:1;4625:162;4639:6;4636:1;4633:13;4625:162;;;4701:4;4757:13;;;4753:22;;4747:29;4729:11;;;4725:20;;4718:59;4654:12;4625:162;;;4805:6;4802:1;4799:13;4796:87;;;4871:1;4864:4;4855:6;4850:3;4846:16;4842:27;4835:38;4796:87;-1:-1:-1;4937:2:7;4916:15;-1:-1:-1;;4912:29:7;4903:39;;;;4944:4;4899:50;;4483:472;-1:-1:-1;;4483:472:7:o;4960:220::-;5109:2;5098:9;5091:21;5072:4;5129:45;5170:2;5159:9;5155:18;5147:6;5129:45;:::i;5377:186::-;5436:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:52;;;5505:1;5502;5495:12;5457:52;5528:29;5547:9;5528:29;:::i;5568:105::-;5647:1;5640:5;5637:12;5627:40;;5663:1;5660;5653:12;5678:587;5784:6;5792;5800;5853:2;5841:9;5832:7;5828:23;5824:32;5821:52;;;5869:1;5866;5859:12;5821:52;5909:9;5896:23;-1:-1:-1;;;;;5934:6:7;5931:30;5928:50;;;5974:1;5971;5964:12;5928:50;6013:70;6075:7;6066:6;6055:9;6051:22;6013:70;:::i;:::-;6102:8;;-1:-1:-1;5987:96:7;-1:-1:-1;;6187:2:7;6172:18;;6159:32;6200:35;6159:32;6200:35;:::i;:::-;6254:5;6244:15;;;5678:587;;;;;:::o;6478:316::-;6555:6;6563;6571;6624:2;6612:9;6603:7;6599:23;6595:32;6592:52;;;6640:1;6637;6630:12;6592:52;-1:-1:-1;;6663:23:7;;;6733:2;6718:18;;6705:32;;-1:-1:-1;6784:2:7;6769:18;;;6756:32;;6478:316;-1:-1:-1;6478:316:7:o;6799:1146::-;6917:6;6925;6978:2;6966:9;6957:7;6953:23;6949:32;6946:52;;;6994:1;6991;6984:12;6946:52;7034:9;7021:23;-1:-1:-1;;;;;7104:2:7;7096:6;7093:14;7090:34;;;7120:1;7117;7110:12;7090:34;7158:6;7147:9;7143:22;7133:32;;7203:7;7196:4;7192:2;7188:13;7184:27;7174:55;;7225:1;7222;7215:12;7174:55;7261:2;7248:16;7283:4;7307:60;7323:43;7363:2;7323:43;:::i;7307:60::-;7401:15;;;7483:1;7479:10;;;;7471:19;;7467:28;;;7432:12;;;;7507:19;;;7504:39;;;7539:1;7536;7529:12;7504:39;7563:11;;;;7583:148;7599:6;7594:3;7591:15;7583:148;;;7665:23;7684:3;7665:23;:::i;:::-;7653:36;;7616:12;;;;7709;;;;7583:148;;;7750:5;-1:-1:-1;;7793:18:7;;7780:32;;-1:-1:-1;;7824:16:7;;;7821:36;;;7853:1;7850;7843:12;7821:36;;7876:63;7931:7;7920:8;7909:9;7905:24;7876:63;:::i;:::-;7866:73;;;6799:1146;;;;;:::o;7950:632::-;8121:2;8173:21;;;8243:13;;8146:18;;;8265:22;;;8092:4;;8121:2;8344:15;;;;8318:2;8303:18;;;8092:4;8387:169;8401:6;8398:1;8395:13;8387:169;;;8462:13;;8450:26;;8531:15;;;;8496:12;;;;8423:1;8416:9;8387:169;;;-1:-1:-1;8573:3:7;;7950:632;-1:-1:-1;;;;;;7950:632:7:o;8587:1163::-;8754:6;8762;8770;8778;8786;8794;8802;8855:3;8843:9;8834:7;8830:23;8826:33;8823:53;;;8872:1;8869;8862:12;8823:53;8912:9;8899:23;-1:-1:-1;;;;;8982:2:7;8974:6;8971:14;8968:34;;;8998:1;8995;8988:12;8968:34;9037:70;9099:7;9090:6;9079:9;9075:22;9037:70;:::i;:::-;9126:8;;-1:-1:-1;9011:96:7;-1:-1:-1;9214:2:7;9199:18;;9186:32;;-1:-1:-1;9230:16:7;;;9227:36;;;9259:1;9256;9249:12;9227:36;9298:72;9362:7;9351:8;9340:9;9336:24;9298:72;:::i;:::-;9389:8;;-1:-1:-1;9272:98:7;-1:-1:-1;9477:2:7;9462:18;;9449:32;;-1:-1:-1;9493:16:7;;;9490:36;;;9522:1;9519;9512:12;9490:36;;9561:72;9625:7;9614:8;9603:9;9599:24;9561:72;:::i;:::-;9652:8;;-1:-1:-1;9535:98:7;-1:-1:-1;9706:38:7;;-1:-1:-1;9740:2:7;9725:18;;9706:38;:::i;:::-;9696:48;;8587:1163;;;;;;;;;;:::o;9755:348::-;9839:6;9892:2;9880:9;9871:7;9867:23;9863:32;9860:52;;;9908:1;9905;9898:12;9860:52;9948:9;9935:23;-1:-1:-1;;;;;9973:6:7;9970:30;9967:50;;;10013:1;10010;10003:12;9967:50;10036:61;10089:7;10080:6;10069:9;10065:22;10036:61;:::i;:::-;10026:71;9755:348;-1:-1:-1;;;;9755:348:7:o;10108:803::-;10270:4;10299:2;10339;10328:9;10324:18;10369:2;10358:9;10351:21;10392:6;10427;10421:13;10458:6;10450;10443:22;10496:2;10485:9;10481:18;10474:25;;10558:2;10548:6;10545:1;10541:14;10530:9;10526:30;10522:39;10508:53;;10596:2;10588:6;10584:15;10617:1;10627:255;10641:6;10638:1;10635:13;10627:255;;;10734:2;10730:7;10718:9;10710:6;10706:22;10702:36;10697:3;10690:49;10762:40;10795:6;10786;10780:13;10762:40;:::i;:::-;10752:50;-1:-1:-1;10860:12:7;;;;10825:15;;;;10663:1;10656:9;10627:255;;;-1:-1:-1;10899:6:7;;10108:803;-1:-1:-1;;;;;;;10108:803:7:o;10916:711::-;11038:6;11046;11054;11062;11070;11078;11131:3;11119:9;11110:7;11106:23;11102:33;11099:53;;;11148:1;11145;11138:12;11099:53;11188:9;11175:23;-1:-1:-1;;;;;11213:6:7;11210:30;11207:50;;;11253:1;11250;11243:12;11207:50;11292:70;11354:7;11345:6;11334:9;11330:22;11292:70;:::i;:::-;11381:8;;11266:96;;-1:-1:-1;11463:2:7;11448:18;;11435:32;;11514:2;11499:18;;11486:32;;-1:-1:-1;11565:2:7;11550:18;;11537:32;;-1:-1:-1;11616:3:7;11601:19;11588:33;;-1:-1:-1;10916:711:7;-1:-1:-1;;;;10916:711:7:o;11632:658::-;11803:2;11855:21;;;11925:13;;11828:18;;;11947:22;;;11774:4;;11803:2;12026:15;;;;12000:2;11985:18;;;11774:4;12069:195;12083:6;12080:1;12077:13;12069:195;;;12148:13;;-1:-1:-1;;;;;12144:39:7;12132:52;;12239:15;;;;12204:12;;;;12180:1;12098:9;12069:195;;12295:832;12373:6;12381;12434:2;12422:9;12413:7;12409:23;12405:32;12402:52;;;12450:1;12447;12440:12;12402:52;12486:9;12473:23;12463:33;;12515:2;12568;12557:9;12553:18;12540:32;-1:-1:-1;;;;;12632:2:7;12624:6;12621:14;12618:34;;;12648:1;12645;12638:12;12618:34;12686:6;12675:9;12671:22;12661:32;;12731:7;12724:4;12720:2;12716:13;12712:27;12702:55;;12753:1;12750;12743:12;12702:55;12789:2;12776:16;12811:2;12807;12804:10;12801:36;;;12817:18;;:::i;:::-;12859:53;12902:2;12883:13;;-1:-1:-1;;12879:27:7;12875:36;;12859:53;:::i;:::-;12846:66;;12935:2;12928:5;12921:17;12975:7;12970:2;12965;12961;12957:11;12953:20;12950:33;12947:53;;;12996:1;12993;12986:12;12947:53;13051:2;13046;13042;13038:11;13033:2;13026:5;13022:14;13009:45;13095:1;13090:2;13085;13078:5;13074:14;13070:23;13063:34;;13116:5;13106:15;;;;;12295:832;;;;;:::o;13132:963::-;13282:6;13290;13298;13306;13359:2;13347:9;13338:7;13334:23;13330:32;13327:52;;;13375:1;13372;13365:12;13327:52;13415:9;13402:23;-1:-1:-1;;;;;13485:2:7;13477:6;13474:14;13471:34;;;13501:1;13498;13491:12;13471:34;13540:70;13602:7;13593:6;13582:9;13578:22;13540:70;:::i;:::-;13629:8;;-1:-1:-1;13514:96:7;-1:-1:-1;13717:2:7;13702:18;;13689:32;;-1:-1:-1;13733:16:7;;;13730:36;;;13762:1;13759;13752:12;13730:36;13800:8;13789:9;13785:24;13775:34;;13847:7;13840:4;13836:2;13832:13;13828:27;13818:55;;13869:1;13866;13859:12;13818:55;13909:2;13896:16;13935:2;13927:6;13924:14;13921:34;;;13951:1;13948;13941:12;13921:34;14009:7;14004:2;13994:6;13986;13982:19;13978:2;13974:28;13970:37;13967:50;13964:70;;;14030:1;14027;14020:12;13964:70;13132:963;;;;-1:-1:-1;;14061:2:7;14053:11;;-1:-1:-1;;;13132:963:7:o;14100:254::-;14168:6;14176;14229:2;14217:9;14208:7;14204:23;14200:32;14197:52;;;14245:1;14242;14235:12;14197:52;14281:9;14268:23;14258:33;;14310:38;14344:2;14333:9;14329:18;14310:38;:::i;:::-;14300:48;;14100:254;;;;;:::o;15198:160::-;15262:5;15307:3;15298:6;15293:3;15289:16;15285:26;15282:46;;;15324:1;15321;15314:12;15282:46;-1:-1:-1;15346:6:7;15198:160;-1:-1:-1;15198:160:7:o;15363:1614::-;15606:6;15614;15622;15630;15638;15646;15654;15662;15670;15678;15731:3;15719:9;15710:7;15706:23;15702:33;15699:53;;;15748:1;15745;15738:12;15699:53;15788:9;15775:23;-1:-1:-1;;;;;15858:2:7;15850:6;15847:14;15844:34;;;15874:1;15871;15864:12;15844:34;15913:70;15975:7;15966:6;15955:9;15951:22;15913:70;:::i;:::-;16002:8;;-1:-1:-1;15887:96:7;-1:-1:-1;16090:2:7;16075:18;;16062:32;;-1:-1:-1;16106:16:7;;;16103:36;;;16135:1;16132;16125:12;16103:36;16174:72;16238:7;16227:8;16216:9;16212:24;16174:72;:::i;:::-;16265:8;;-1:-1:-1;16148:98:7;-1:-1:-1;16353:2:7;16338:18;;16325:32;;-1:-1:-1;16369:16:7;;;16366:36;;;16398:1;16395;16388:12;16366:36;16437:72;16501:7;16490:8;16479:9;16475:24;16437:72;:::i;:::-;16528:8;;-1:-1:-1;16411:98:7;-1:-1:-1;16411:98:7;;-1:-1:-1;16582:38:7;16616:2;16601:18;;16582:38;:::i;:::-;16572:48;;16673:3;16662:9;16658:19;16645:33;16629:49;;16703:2;16693:8;16690:16;16687:36;;;16719:1;16716;16709:12;16687:36;;16758:72;16822:7;16811:8;16800:9;16796:24;16758:72;:::i;:::-;16849:8;;-1:-1:-1;16732:98:7;-1:-1:-1;16903:68:7;;-1:-1:-1;16963:7:7;16957:3;16942:19;;16903:68;:::i;:::-;16893:78;;15363:1614;;;;;;;;;;;;;:::o;16982:961::-;17199:2;17251:21;;;17321:13;;17224:18;;;17343:22;;;17170:4;;17199:2;17384;;17402:18;;;;17443:15;;;17170:4;17486:431;17500:6;17497:1;17494:13;17486:431;;;17559:13;;17601:9;;-1:-1:-1;;;;;17597:35:7;17585:48;;17673:11;;;17667:18;17653:12;;;17646:40;17726:11;;;17720:18;17706:12;;;17699:40;17762:4;17820:11;;;17814:18;17807:26;17800:34;17786:12;;;17779:56;17864:4;17855:14;;;;17892:15;;;;17629:1;17515:9;17486:431;;;-1:-1:-1;17934:3:7;;16982:961;-1:-1:-1;;;;;;;16982:961:7:o;17948:339::-;18044:6;18052;18096:9;18087:7;18083:23;18126:3;18122:2;18118:12;18115:32;;;18143:1;18140;18133:12;18115:32;18166:23;;;-1:-1:-1;18223:3:7;-1:-1:-1;;18205:16:7;;18201:26;18198:46;;;18240:1;18237;18230:12;18198:46;;18278:2;18267:9;18263:18;18253:28;;17948:339;;;;;:::o;18372:127::-;18433:10;18428:3;18424:20;18421:1;18414:31;18464:4;18461:1;18454:15;18488:4;18485:1;18478:15;18504:137;18582:1;18575:5;18572:12;18562:46;;18588:18;;:::i;:::-;18617;;18504:137::o;18646:138::-;18725:1;18718:5;18715:12;18705:46;;18731:18;;:::i;18789:2063::-;19005:13;;18359:4;18348:16;18336:29;;18975:3;18960:19;;19077:4;19069:6;19065:17;19059:24;19092:52;19138:4;19127:9;19123:20;19109:12;18359:4;18348:16;18336:29;;18292:75;19092:52;;19193:4;19185:6;19181:17;19175:24;19208:54;19256:4;19245:9;19241:20;19225:14;18359:4;18348:16;18336:29;;18292:75;19208:54;;19311:4;19303:6;19299:17;19293:24;19326:54;19374:4;19363:9;19359:20;19343:14;18359:4;18348:16;18336:29;;18292:75;19326:54;;19429:4;19421:6;19417:17;19411:24;19444:54;19492:4;19481:9;19477:20;19461:14;18359:4;18348:16;18336:29;;18292:75;19444:54;;19547:4;19539:6;19535:17;19529:24;19562:54;19610:4;19599:9;19595:20;19579:14;18359:4;18348:16;18336:29;;18292:75;19562:54;;19665:4;19657:6;19653:17;19647:24;19680:54;19728:4;19717:9;19713:20;19697:14;18359:4;18348:16;18336:29;;18292:75;19680:54;;19783:4;19775:6;19771:17;19765:24;19798:54;19846:4;19835:9;19831:20;19815:14;18359:4;18348:16;18336:29;;18292:75;19798:54;-1:-1:-1;19871:6:7;19914:15;;;19908:22;18359:4;18348:16;;;19972:18;;;18336:29;;;;20010:6;20053:15;;;20047:22;18348:16;;20111:18;;;18336:29;20149:6;20192:15;;;20186:22;18348:16;;20250:18;;;18336:29;20288:6;20332:15;;;20326:22;18348:16;;20391:18;;;18336:29;20429:6;20473:15;;;20467:22;18348:16;;;20532:18;;;18336:29;20570:6;20614:15;;;20608:22;20639:59;20679:18;;;20608:22;20639:59;:::i;:::-;;;20717:6;20773:2;20765:6;20761:15;20755:22;20786:60;20842:2;20831:9;20827:18;20810:15;20786:60;:::i;:::-;;;18789:2063;;;;:::o;20857:340::-;21059:2;21041:21;;;21098:2;21078:18;;;21071:30;-1:-1:-1;;;21132:2:7;21117:18;;21110:46;21188:2;21173:18;;20857:340::o;23271:184::-;23341:6;23394:2;23382:9;23373:7;23369:23;23365:32;23362:52;;;23410:1;23407;23400:12;23362:52;-1:-1:-1;23433:16:7;;23271:184;-1:-1:-1;23271:184:7:o;23809:375::-;-1:-1:-1;;;;;24067:15:7;;;24049:34;;24119:15;;;;24114:2;24099:18;;24092:43;24166:2;24151:18;;24144:34;;;;23999:2;23984:18;;23809:375::o;24189:132::-;24265:13;;24287:28;24265:13;24287:28;:::i;24326:245::-;24393:6;24446:2;24434:9;24425:7;24421:23;24417:32;24414:52;;;24462:1;24459;24452:12;24414:52;24494:9;24488:16;24513:28;24535:5;24513:28;:::i;24576:351::-;24778:2;24760:21;;;24817:2;24797:18;;;24790:30;24856:29;24851:2;24836:18;;24829:57;24918:2;24903:18;;24576:351::o;24932:380::-;25011:1;25007:12;;;;25054;;;25075:61;;25129:4;25121:6;25117:17;25107:27;;25075:61;25182:2;25174:6;25171:14;25151:18;25148:38;25145:161;;25228:10;25223:3;25219:20;25216:1;25209:31;25263:4;25260:1;25253:15;25291:4;25288:1;25281:15;25596:339;25798:2;25780:21;;;25837:2;25817:18;;;25810:30;-1:-1:-1;;;25871:2:7;25856:18;;25849:45;25926:2;25911:18;;25596:339::o;25940:299::-;-1:-1:-1;;;;;26141:32:7;;26123:51;;26111:2;26096:18;;26183:50;26229:2;26214:18;;26206:6;26183:50;:::i;26602:127::-;26663:10;26658:3;26654:20;26651:1;26644:31;26694:4;26691:1;26684:15;26718:4;26715:1;26708:15;26734:128;26774:3;26805:1;26801:6;26798:1;26795:13;26792:39;;;26811:18;;:::i;:::-;-1:-1:-1;26847:9:7;;26734:128::o;27213:513::-;-1:-1:-1;;;;;27514:32:7;;;;27496:51;;27578:2;27563:18;;27556:34;;;;27621:2;27606:18;;27599:34;;;;27664:2;27649:18;;27642:34;27707:3;27692:19;;27685:35;27483:3;27468:19;;27213:513::o;31049:342::-;31251:2;31233:21;;;31290:2;31270:18;;;31263:30;-1:-1:-1;;;31324:2:7;31309:18;;31302:48;31382:2;31367:18;;31049:342::o;32109:127::-;32170:10;32165:3;32161:20;32158:1;32151:31;32201:4;32198:1;32191:15;32225:4;32222:1;32215:15;32241:346;32443:2;32425:21;;;32482:2;32462:18;;;32455:30;-1:-1:-1;;;32516:2:7;32501:18;;32494:52;32578:2;32563:18;;32241:346::o;34006:334::-;34208:2;34190:21;;;34247:2;34227:18;;;34220:30;-1:-1:-1;;;34281:2:7;34266:18;;34259:40;34331:2;34316:18;;34006:334::o;34701:198::-;34744:11;34796:3;34783:17;34840:4;34833:5;34829:16;34822:5;34819:27;34809:55;;34860:1;34857;34850:12;37517:184;37566:11;37618:3;37605:17;37631:35;37660:5;37631:35;:::i;37706:265::-;37818:1;37811:5;37808:12;37798:46;;37824:18;;:::i;:::-;37863:11;;-1:-1:-1;;;;37899:27:7;37953:3;37932:15;;;;-1:-1:-1;;;37928:35:7;37896:68;;;;37883:82;;37706:265::o;37976:190::-;38026:11;38078:3;38065:17;38111:1;38104:5;38101:12;38091:40;;38127:1;38124;38117:12;38171:267;38285:1;38278:5;38275:12;38265:46;;38291:18;;:::i;:::-;38330:11;;-1:-1:-1;;;;38366:27:7;38420:3;38399:15;;;;-1:-1:-1;;;38395:35:7;38363:68;;;;38350:82;;38171:267::o;38443:1719::-;38582:85;38634:32;38660:5;38634:32;:::i;:::-;35006:11;;-1:-1:-1;;35002:26:7;35041:4;35030:16;;;;34999:48;34986:62;;34904:150;38582:85;38676:94;38728:41;38765:2;38758:5;38754:14;38728:41;:::i;:::-;35151:11;;-1:-1:-1;;35187:19:7;35216:1;35212:13;;;;35227:5;35208:25;35184:50;35171:64;;35059:182;38676:94;38779;38831:41;38868:2;38861:5;38857:14;38831:41;:::i;:::-;35338:11;;-1:-1:-1;;35374:22:7;35406:2;35402:14;;;;35418:8;35398:29;35371:57;35358:71;;35246:189;38779:94;38882:92;38932:41;38969:2;38962:5;38958:14;38932:41;:::i;:::-;35530:11;;-1:-1:-1;;35566:24:7;35600:2;35596:14;;;;35612:10;35592:31;35563:61;35550:75;;35440:191;38882:92;38983:95;39035:42;39072:3;39065:5;39061:15;39035:42;:::i;:::-;35728:11;;-1:-1:-1;;35764:26:7;35800:2;35796:14;;;;35812:12;35792:33;35761:65;35748:79;;35636:197;38983:95;39087;39139:42;39176:3;39169:5;39165:15;39139:42;:::i;:::-;35930:11;;-1:-1:-1;;35966:28:7;36004:2;36000:14;;;;36016;35996:35;35963:69;35950:83;;35838:201;39087:95;39191;39243:42;39280:3;39273:5;39269:15;39243:42;:::i;:::-;36136:11;;-1:-1:-1;;36172:30:7;36212:2;36208:14;;;;36224:16;36204:37;36169:73;36156:87;;36044:205;39191:95;39295;39347:42;39384:3;39377:5;39373:15;39347:42;:::i;:::-;36346:11;;-1:-1:-1;;36382:32:7;36424:2;36420:14;;;;36436:18;36416:39;36379:77;36366:91;;36254:209;39295:95;39399;39451:42;39488:3;39481:5;39477:15;39451:42;:::i;:::-;36560:11;;-1:-1:-1;;36596:34:7;36640:2;36636:14;;;;36652:20;36632:41;36593:81;36580:95;;36468:213;39399:95;39503;39555:42;39592:3;39585:5;39581:15;39555:42;:::i;:::-;36778:11;;-1:-1:-1;;36814:36:7;36860:2;36856:14;;;;36872:22;36852:43;36811:85;36798:99;;36686:217;39503:95;39607:96;39660:42;39697:3;39690:5;39686:15;39660:42;:::i;:::-;39654:4;37001:11;;-1:-1:-1;;;;37037:26:7;37089:2;37069:14;;;;-1:-1:-1;;;37065:33:7;37034:65;;;;37021:79;;36908:198;39607:96;39712;39765:42;39802:3;39795:5;39791:15;39765:42;:::i;:::-;39759:4;37204:11;;-1:-1:-1;;;;37240:26:7;37292:2;37272:14;;;;-1:-1:-1;;;37268:33:7;37237:65;;;;37224:79;;37111:198;39712:96;39817;39870:42;39907:3;39900:5;39896:15;39870:42;:::i;:::-;39864:4;37407:11;;-1:-1:-1;;;;37443:26:7;37495:2;37475:14;;;;-1:-1:-1;;;37471:33:7;37440:65;;;;37427:79;;37314:198;39817:96;39922:111;39984:48;40027:3;40020:5;40016:15;39984:48;:::i;:::-;39978:4;39922:111;:::i;:::-;40042:114;40106:49;40150:3;40143:5;40139:15;40106:49;:::i;:::-;40100:4;40042:114;:::i;:::-;;;38443:1719::o;41932:168::-;41972:7;42038:1;42034;42030:6;42026:14;42023:1;42020:21;42015:1;42008:9;42001:17;41997:45;41994:71;;;42045:18;;:::i;:::-;-1:-1:-1;42085:9:7;;41932:168::o;44594:354::-;44682:19;;;44664:3;-1:-1:-1;;;;;44713:31:7;;44710:51;;;44757:1;44754;44747:12;44710:51;44793:6;44790:1;44786:14;44845:8;44838:5;44831:4;44826:3;44822:14;44809:45;44922:1;44877:18;;44897:4;44873:29;44911:13;;;-1:-1:-1;44873:29:7;;44594:354;-1:-1:-1;;44594:354:7:o;44953:616::-;-1:-1:-1;;;;;45258:32:7;;45240:51;;45327:2;45322;45307:18;;45300:30;;;-1:-1:-1;;45353:73:7;;45407:18;;45399:6;45391;45353:73;:::i;:::-;45474:9;45466:6;45462:22;45457:2;45446:9;45442:18;45435:50;45502:61;45556:6;45548;45540;45502:61;:::i;:::-;45494:69;44953:616;-1:-1:-1;;;;;;;;44953:616:7:o;45574:192::-;45653:13;;-1:-1:-1;;;;;45695:46:7;;45685:57;;45675:85;;45756:1;45753;45746:12;45771:2608;45892:6;45923:2;45966;45954:9;45945:7;45941:23;45937:32;45934:52;;;45982:1;45979;45972:12;45934:52;46015:9;46009:16;-1:-1:-1;;;;;46040:6:7;46037:30;46034:50;;;46080:1;46077;46070:12;46034:50;46103:22;;46156:4;46148:13;;46144:27;-1:-1:-1;46134:55:7;;46185:1;46182;46175:12;46134:55;46214:2;46208:9;46237:60;46253:43;46293:2;46253:43;:::i;46237:60::-;46331:15;;;46393:6;46434:11;;;46426:20;;46422:29;;;46362:12;;;;46319:3;46463:19;;;46460:39;;;46495:1;46492;46485:12;46460:39;46519:11;;;;46539:1810;46555:6;46550:3;46547:15;46539:1810;;;46635:2;46629:3;46620:7;46616:17;46612:26;46609:116;;;46679:1;46708:2;46704;46697:14;46609:116;46751:22;;:::i;:::-;46800:34;46830:3;46800:34;:::i;:::-;46793:5;46786:49;46871:40;46907:2;46902:3;46898:12;46871:40;:::i;:::-;46866:2;46859:5;46855:14;46848:64;46935:2;46973:40;47009:2;47004:3;47000:12;46973:40;:::i;:::-;46957:14;;;46950:64;47037:2;47075:40;47102:12;;;47075:40;:::i;:::-;47059:14;;;47052:64;47139:3;47178:40;47205:12;;;47178:40;:::i;:::-;47162:14;;;47155:64;47242:3;47281:40;47308:12;;;47281:40;:::i;:::-;47265:14;;;47258:64;47346:3;47386:41;47413:13;;;47386:41;:::i;:::-;47369:15;;;47362:66;47452:3;47492:41;47519:13;;;47492:41;:::i;:::-;47475:15;;;47468:66;47558:3;47598:41;47625:13;;;47598:41;:::i;:::-;47581:15;;;47574:66;47664:3;47704:41;47731:13;;;47704:41;:::i;:::-;47687:15;;;47680:66;47770:3;47810:41;47837:13;;;47810:41;:::i;:::-;47793:15;;;47786:66;47876:3;47916:41;47943:13;;;47916:41;:::i;:::-;47899:15;;;47892:66;47982:3;48022:41;48049:13;;;48022:41;:::i;:::-;48005:15;;;47998:66;48088:3;48128:41;48155:13;;;48128:41;:::i;:::-;48111:15;;;48104:66;48194:3;48234:41;48261:13;;;48234:41;:::i;:::-;48217:15;;;48210:66;48289:18;;46572:12;;;;48327;;;;46539:1810;;;-1:-1:-1;48368:5:7;45771:2608;-1:-1:-1;;;;;;;45771:2608:7:o;49447:125::-;49487:4;49515:1;49512;49509:8;49506:34;;;49520:18;;:::i;:::-;-1:-1:-1;49557:9:7;;49447:125::o;50778:127::-;50839:10;50834:3;50830:20;50827:1;50820:31;50870:4;50867:1;50860:15;50894:4;50891:1;50884:15;50910:217;50950:1;50976;50966:132;;51020:10;51015:3;51011:20;51008:1;51001:31;51055:4;51052:1;51045:15;51083:4;51080:1;51073:15;50966:132;-1:-1:-1;51112:9:7;;50910:217::o
Swarm Source
ipfs://587189e6446d9770b5882175c2d99054862a54212a1cbce1509faf08f0208b9e
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.