41 txs
47 calls
constructor
constructor(address _rolesManager, address _usdcContract, address _nftContract, address _paymentSplitterContract, uint96 _directRewardLVPercentage, address _initialOwner, address _pauser)
functions
amountAutoBoostedByPurchase
viewfunction amountAutoBoostedByPurchase(uint96, uint96) view returns (uint256)
binaryAvailableRewards
viewfunction binaryAvailableRewards() view returns (uint256)
blockchainInfrastructureAvailableRewards
viewfunction blockchainInfrastructureAvailableRewards() view returns (uint256)
CLAIM_FEES
viewfunction CLAIM_FEES() view returns (address)
coreAvailableRewards
viewfunction coreAvailableRewards() view returns (uint256)
directRewardLVPercentage
viewfunction directRewardLVPercentage() view returns (uint96)
EMERGENCY_WITHDRAW
viewfunction EMERGENCY_WITHDRAW() view returns (bool)
getAllDirectBonus
viewfunction getAllDirectBonus(uint96 _nftId) view returns (uint256[])
getAmountAutoBoostedByPurchase
viewfunction getAmountAutoBoostedByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (uint256)
getAmountAvailableToClaimByPurchase
viewfunction getAmountAvailableToClaimByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (uint256)
getBinaryOrMatchingReward
viewfunction getBinaryOrMatchingReward(uint96 _nftId, uint8 _rewardType) view returns (uint256)
getDirectBonusByProduct
viewfunction getDirectBonusByProduct(uint96 _nftId, uint8 _productType) view returns (tuple)
getRewardByPurchase
viewfunction getRewardByPurchase(uint96 _nftId, uint96 _purchaseIndex) view returns (tuple)
isPaused
viewfunction isPaused() view returns (bool)
isPurchaseAutoBoost
viewfunction isPurchaseAutoBoost(uint96 _nftId, uint96 _purchaseIndex) view returns (bool)
lastAutoBoostToggle
viewfunction lastAutoBoostToggle(uint96, uint96) view returns (uint256)
LP_CONTRACT
viewfunction LP_CONTRACT() view returns (address)
LP_TLV_TOTAL_AMOUNT_OUT
viewfunction LP_TLV_TOTAL_AMOUNT_OUT() view returns (uint256)
matchingAvailableRewards
viewfunction matchingAvailableRewards() view returns (uint256)
NFT_CONTRACT
viewfunction NFT_CONTRACT() view returns (address)
nftBonusPoints
viewfunction nftBonusPoints(uint96) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
PAYMENT_SPLITTER_CONTRACT
viewfunction PAYMENT_SPLITTER_CONTRACT() view returns (address)
purchaseIsAutoBoost
viewfunction purchaseIsAutoBoost(uint96, uint96) view returns (bool)
ROLES_MANAGER
viewfunction ROLES_MANAGER() view returns (address)
TREASURY
viewfunction TREASURY() view returns (address)
USDC
viewfunction USDC() view returns (address)
assingAmountAvailables
nonpayablefunction assingAmountAvailables(uint256 _binaryAmount, uint256 _matchingAmount, uint256 _blockchainInfrastructureAmount, uint256 _coreAmount)
assingAutoBoostToUnClaimed
nonpayablefunction assingAutoBoostToUnClaimed(uint96 _nftId, uint96 _purchaseId)
assingLPRewards
nonpayablefunction assingLPRewards(uint96[] _nftIds, uint96[][] _nftPurchases, uint256[][] _purchasesAmounts, bool _isSys)
AssingProfitClaimed
nonpayablefunction AssingProfitClaimed(uint96[] _nftId, uint96[][] _purchaseId, uint256[][] _amountClaimed)
assingRewards
nonpayablefunction assingRewards(uint96[] _nftId, uint256 _points, uint256[] _amount, uint8 _productType, uint8 _rewardType)
autoBoostLP
nonpayablefunction autoBoostLP(uint96 _nftId, uint96 _purchaseId) returns (bool)
boostLP
nonpayablefunction boostLP(uint96 _nftId, uint96 _purchaseId) returns (uint256)
claimBinary
nonpayablefunction claimBinary(uint96 _nftId)
claimCore
nonpayablefunction claimCore(uint8 _claimType)
claimDirect
nonpayablefunction claimDirect(uint96 _nftId, uint8 _productType)
claimLV
nonpayablefunction claimLV(uint96 _nftId, uint96 _purchaseId)
claimMatching
nonpayablefunction claimMatching(uint96 _nftId)
emergencyPause
nonpayablefunction emergencyPause()
emergencyUnpause
nonpayablefunction emergencyUnpause()
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address _address)
renounceOwnership
nonpayablefunction renounceOwnership()
saveBonusDataFromPaymentSplitter
nonpayablefunction saveBonusDataFromPaymentSplitter(uint256 _amount, uint256 binaryPercentage, uint256 matchingPercentage, uint256 blockchainInfrastructurePercentage, uint256 corePercentage, uint8 _productType)
setContractAddress
nonpayablefunction setContractAddress(address _address, uint8 _option)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
DeprecatedFunctionUsed
event DeprecatedFunctionUsed(string functionName, address caller)
DirectClaimed
event DirectClaimed(uint96 indexed nftId, uint256 amount, uint8 indexed productType)
DirectRewardAssigned
event DirectRewardAssigned(uint96 indexed sponsorNFTId, uint256 sponsorPointsEarned, uint256 sponsorAmountEarned)
LVClaimed
event LVClaimed(uint96 indexed nftId, uint96 indexed purchaseIndex, uint256 amountClaimed, uint256 date)
LVRewardAssigned
event LVRewardAssigned(uint96 indexed nftId, uint96 indexed purchaseIndex, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PointsPrecisionLoss
event PointsPrecisionLoss(uint96 indexed nft, uint256 _points, uint256 pointsToAdd)
RewardAssigned
event RewardAssigned(uint96 indexed nft, uint256 amount, uint8 indexed bonusType)
RewardClaimed
event RewardClaimed(uint96 indexed nftId, uint256 amount, uint8 indexed bonusType)
RewardsAmountsSaved
event RewardsAmountsSaved(uint256 binaryEarn, uint256 matchingEarn, uint256 blockchainInfrastructureEarn, uint256 coreEarn)
TotalRewardAssigned
event TotalRewardAssigned(uint256 totalAmount, uint8 indexed bonusType)
Unpaused
event Unpaused(address account)
errors
AccessDenied
error AccessDenied()
B1
error B1()
B2
error B2()
B3
error B3()
B4
error B4()
B5
error B5()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
T1
error T1()
V1
error V1()
V2
error V2()
V3
error V3()
V4
error V4()
V5
error V5()
creation bytecode
0x608060405234801561000f575f5ffd5b5060405161638538038061638583398181016040528101906100319190610397565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610443565b60405180910390fd5b6100b18161023560201b60201c565b506001601681905550865f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600f5f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050505050505061045c565b5f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610325826102fc565b9050919050565b6103358161031b565b811461033f575f5ffd5b50565b5f815190506103508161032c565b92915050565b5f6bffffffffffffffffffffffff82169050919050565b61037681610356565b8114610380575f5ffd5b50565b5f815190506103918161036d565b92915050565b5f5f5f5f5f5f5f60e0888a0312156103b2576103b16102f8565b5b5f6103bf8a828b01610342565b97505060206103d08a828b01610342565b96505060406103e18a828b01610342565b95505060606103f28a828b01610342565b94505060806104038a828b01610383565b93505060a06104148a828b01610342565b92505060c06104258a828b01610342565b91505092959891949750929550565b61043d8161031b565b82525050565b5f6020820190506104565f830184610434565b92915050565b615f1c806104695f395ff3fe608060405234801561000f575f5ffd5b5060043610610293575f3560e01c8063715018a611610165578063afcdcdb6116100cc578063eb02599f11610085578063eb02599f146107d7578063f165921e14610807578063f2fde38b14610823578063f3c48d031461083f578063f4d334d71461086f578063f94b918c1461088d57610293565b8063afcdcdb6146106ed578063b187bd261461071d578063b98657e71461073b578063c434641214610759578063d2c75abb14610777578063d2f8df6b146107a757610293565b80639ec1b9271161011e5780639ec1b9271461062d578063a0c7864314610649578063a43adb6b14610665578063a57133e714610681578063a99fc5591461069f578063aa3b9c73146106cf57610293565b8063715018a61461057d57806375f64ccc146105875780638690e43b146105b757806389a30271146105d55780638da5cb5b146105f35780639aab1ddd1461061157610293565b80633bc40bab1161020957806351858e27116101c257806351858e27146104cd57806353544aa2146104d7578063593d9cbe146105075780635c975abb146105255780635f768a80146105435780636ff1c9bc1461056157610293565b80633bc40bab1461042157806341954c841461043d578063438e0ce11461045b578063455743e1146104775780634a4e3bd5146104935780634b5b9f381461049d57610293565b80632d2c55651161025b5780632d2c55651461033b578063378604a41461035957806339479da5146103895780633a05e9b8146103b95780633a36c902146103e95780633ba0ad3f1461040557610293565b80630bf7e48c146102975780630c8c85ed146102b35780630dabfcab146102d15780631ee76710146102ed5780631fda9a021461031d575b5f5ffd5b6102b160048036038101906102ac9190614c1a565b6108ab565b005b6102bb610e80565b6040516102c89190614c97565b60405180910390f35b6102eb60048036038101906102e69190614cfd565b610ea5565b005b61030760048036038101906103029190614c1a565b611290565b6040516103149190614d53565b60405180910390f35b6103256112b0565b6040516103329190614c97565b60405180910390f35b6103436112d5565b6040516103509190614c97565b60405180910390f35b610373600480360381019061036e9190614c1a565b6112fa565b6040516103809190614d86565b60405180910390f35b6103a3600480360381019061039e9190614c1a565b611324565b6040516103b09190614d53565b60405180910390f35b6103d360048036038101906103ce9190614d9f565b611344565b6040516103e09190614e81565b60405180910390f35b61040360048036038101906103fe9190614ecb565b611438565b005b61041f600480360381019061041a9190614f52565b61151a565b005b61043b60048036038101906104369190614d9f565b61163c565b005b610445611782565b6040516104529190614d53565b60405180910390f35b61047560048036038101906104709190614c1a565b611788565b005b610491600480360381019061048c9190615088565b6119c9565b005b61049b611c2d565b005b6104b760048036038101906104b29190614c1a565b611cef565b6040516104c4919061519e565b60405180910390f35b6104d5611d93565b005b6104f160048036038101906104ec91906151da565b611e56565b6040516104fe9190614d53565b60405180910390f35b61050f611f13565b60405161051c9190614c97565b60405180910390f35b61052d611f38565b60405161053a9190614d86565b60405180910390f35b61054b611f4e565b6040516105589190614c97565b60405180910390f35b61057b60048036038101906105769190615218565b611f73565b005b61058561223e565b005b6105a1600480360381019061059c9190614c1a565b612251565b6040516105ae9190614d53565b60405180910390f35b6105bf61226a565b6040516105cc919061529e565b60405180910390f35b6105dd61228e565b6040516105ea9190614c97565b60405180910390f35b6105fb6122b3565b6040516106089190614c97565b60405180910390f35b61062b600480360381019061062691906154e2565b6122db565b005b61064760048036038101906106429190615591565b6128eb565b005b610663600480360381019061065e9190614d9f565b612b5b565b005b61067f600480360381019061067a9190615644565b612ca1565b005b6106896131ec565b6040516106969190615717565b60405180910390f35b6106b960048036038101906106b49190614c1a565b613209565b6040516106c69190614d53565b60405180910390f35b6106d7613446565b6040516106e49190614d53565b60405180910390f35b61070760048036038101906107029190614c1a565b61344c565b6040516107149190614d86565b60405180910390f35b610725613609565b6040516107329190614d86565b60405180910390f35b610743613617565b6040516107509190614d53565b60405180910390f35b61076161361d565b60405161076e9190614d53565b60405180910390f35b610791600480360381019061078c9190614d9f565b613623565b60405161079e9190614d53565b60405180910390f35b6107c160048036038101906107bc9190614c1a565b613638565b6040516107ce9190614d86565b60405180910390f35b6107f160048036038101906107ec9190614c1a565b6136a6565b6040516107fe9190614d53565b60405180910390f35b610821600480360381019061081c9190615730565b613708565b005b61083d60048036038101906108389190615218565b61399b565b005b61085960048036038101906108549190615730565b613a1f565b604051610866919061519e565b60405180910390f35b610877613abf565b6040516108849190614d53565b60405180910390f35b610895613ac5565b6040516108a29190614d86565b60405180910390f35b816bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161092b9190614d53565b602060405180830381865afa158015610946573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096a9190615782565b73ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336109c181613ad8565b6109c9613ae4565b6109d1613b2a565b6109d9613b6b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639e1f22e186866040518363ffffffff1660e01b8152600401610a399291906157ad565b5f6040518083038186803b158015610a4f575f5ffd5b505afa158015610a61573d5f5f3e3d5ffd5b505050505f8173ffffffffffffffffffffffffffffffffffffffff1663b14feb6287876040518363ffffffff1660e01b8152600401610aa19291906157ad565b61012060405180830381865afa158015610abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae19190615928565b6060015190505f5f610af38888613b75565b915091505f8203610b30576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015610b9f578373ffffffffffffffffffffffffffffffffffffffff1663dbf80a0389896040518363ffffffff1660e01b8152600401610b719291906157ad565b5f604051808303815f87803b158015610b88575f5ffd5b505af1158015610b9a573d5f5f3e3d5ffd5b505050505b5f8290506064603285610bb29190615981565b610bbc91906159ef565b831015610c97575f6064600f5f9054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff1685610bf99190615981565b610c0391906159ef565b90508084610c119190615a1f565b91505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9557610c943060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16835f613ee4565b5b505b5f60095f8b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905083815f8b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f01541015610d2f576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f42905084825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f828254610d709190615a1f565b9250508190555084825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206001015f828254610db59190615a52565b9250508190555080825f8c6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2060030181905550610dfc3033855f613ee4565b8460145f828254610e0d9190615a52565b92505081905550896bffffffffffffffffffffffff168b6bffffffffffffffffffffffff167f19126e7cfd31aeab63ee75323f33586daec83b36c646b0ffc32d2b90debbfe6f8784604051610e63929190615a85565b60405180910390a350505050505050610e7a614247565b50505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336040518060400160405280600a81526020017f535550455241444d494e00000000000000000000000000000000000000000000815250610f075f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f6c576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f74613b6b565b5f6006811115610f8757610f86615aac565b5b836006811115610f9a57610f99615aac565b5b03610fe357835f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061128a565b60016006811115610ff757610ff6615aac565b5b83600681111561100a57611009615aac565b5b03611054578360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611289565b6002600681111561106857611067615aac565b5b83600681111561107b5761107a615aac565b5b036110c5578360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611288565b600360068111156110d9576110d8615aac565b5b8360068111156110ec576110eb615aac565b5b03611136578360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611287565b6004600681111561114a57611149615aac565b5b83600681111561115d5761115c615aac565b5b036111a7578360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611286565b600560068111156111bb576111ba615aac565b5b8360068111156111ce576111cd615aac565b5b03611218578360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611285565b60068081111561122b5761122a615aac565b5b83600681111561123e5761123d615aac565b5b03611284578360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b5b5b5b5b50505050565b6012602052815f5260405f20602052805f5260405f205f91509150505481565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6010602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b6011602052815f5260405f20602052805f5260405f205f91509150505481565b60605f600367ffffffffffffffff811115611362576113616152c7565b5b6040519080825280602002602001820160405280156113905781602001602082028036833780820191505090505b5090505f5f90505b6003816bffffffffffffffffffffffff16101561142e5760075f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8260ff1660ff1681526020019081526020015f205f015482826bffffffffffffffffffffffff168151811061141557611414615ad9565b5b6020026020010181815250508080600101915050611398565b5080915050919050565b336040518060400160405280600681526020017f53595354454d000000000000000000000000000000000000000000000000000081525061149a5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b6114a2613ae4565b6114aa613b2a565b85600b5f8282546114bb9190615a52565b9250508190555084600c5f8282546114d39190615a52565b9250508190555083600d5f8282546114eb9190615a52565b9250508190555082600e5f8282546115039190615a52565b92505081905550611512614247565b505050505050565b336040518060400160405280600481526020017f434f52450000000000000000000000000000000000000000000000000000000081525061157c5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b3361158681613ad8565b61158e613ae4565b611596613b2a565b61159e613b6b565b5f5f60018111156115b2576115b1615aac565b5b8560018111156115c5576115c4615aac565b5b036115db57600e5490505f600e819055506115e8565b600d5490505f600d819055505b5f8103611621576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61162d3033835f613ee4565b50611636614247565b50505050565b806bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016116bc9190614d53565b602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb9190615782565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361175281613ad8565b61175a613ae4565b611762613b2a565b61176a613b6b565b611775836001614261565b61177d614247565b505050565b600e5481565b3360015f5f8260ff16146117bd5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166117e0565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611847576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61184f613ae4565b611857613b2a565b5f60125f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f866bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205490505f81036118ec576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060095f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f8282546119559190615a52565b925050819055505f60125f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2081905550506119c2614247565b5050505050565b336040518060400160405280600a81526020017f535550455241444d494e00000000000000000000000000000000000000000000815250611a2b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b611a33613b2a565b611a3b613b6b565b5f5f90505b88889050816bffffffffffffffffffffffff161015611c22575f5f90505b8787836bffffffffffffffffffffffff16818110611a7f57611a7e615ad9565b5b9050602002810190611a919190615b12565b9050816bffffffffffffffffffffffff161015611c0e578585836bffffffffffffffffffffffff16818110611ac957611ac8615ad9565b5b9050602002810190611adb9190615b74565b826bffffffffffffffffffffffff16818110611afa57611af9615ad9565b5b9050602002013560095f8c8c866bffffffffffffffffffffffff16818110611b2557611b24615ad9565b5b9050602002016020810190611b3a9190614d9f565b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8a8a866bffffffffffffffffffffffff16818110611b8557611b84615ad9565b5b9050602002810190611b979190615b12565b856bffffffffffffffffffffffff16818110611bb657611bb5615ad9565b5b9050602002016020810190611bcb9190614d9f565b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20600101819055508080611c0690615bd6565b915050611a5e565b508080611c1a90615bd6565b915050611a40565b505050505050505050565b611c35613b6b565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cc3613ae4565b5f601360146101000a81548160ff021916908315150217905550611ce56144d3565b611ced614247565b565b611cf7614b9e565b60095f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206040518060a00160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905092915050565b611d9b613b6b565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e21576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e29613ae4565b6001601360146101000a81548160ff021916908315150217905550611e4c614535565b611e54614247565b565b5f5f6002811115611e6a57611e69615aac565b5b826002811115611e7d57611e7c615aac565b5b03611eb4576040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836002811115611ef557611ef4615aac565b5b60ff1660ff1681526020019081526020015f205f0154905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601560149054906101000a900460ff16905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336040518060400160405280600a81526020017f535550455241444d494e00000000000000000000000000000000000000000000815250611fd55f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b611fdd613ae4565b611fe5613b6b565b601360149054906101000a900460ff1661202b576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061209057505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156120c7576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8460045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161215f9190614c97565b602060405180830381865afa15801561217a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219e9190615c09565b6040518363ffffffff1660e01b81526004016121bb929190615c34565b6020604051808303815f875af11580156121d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fb9190615c5b565b612231576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612239614247565b505050565b612246614598565b61224f5f61461f565b565b5f5f61225d8484613b75565b5090508091505092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280600681526020017f53595354454d00000000000000000000000000000000000000000000000000008152508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561239757506123955f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633836146e2565b155b156123ce576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123d6613ae4565b6123de613b2a565b8451875114612419576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603287511115612455576040517f96cd25ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f84600281111561246d5761246c615aac565b5b90505f5f90505b8951816bffffffffffffffffffffffff1610156128a0575f8a826bffffffffffffffffffffffff16815181106124ad576124ac615ad9565b5b602002602001015190505f89836bffffffffffffffffffffffff16815181106124d9576124d8615ad9565b5b602002602001015190506402540be3ff6bffffffffffffffffffffffff16826bffffffffffffffffffffffff16101561288b575f600281111561251f5761251e615aac565b5b88600281111561253257612531615aac565b5b03612722575f60075f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f8a600281111561257b5761257a615aac565b5b905082825f8360ff1660ff1681526020019081526020015f205f015f8282546125a49190615a52565b9250508190555042825f8360ff1660ff1681526020019081526020015f20600201819055505f8d11156126d357670de0b6b3a76400008d1015612613576040517f2fb42d7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f670de0b6b3a76400008e61262891906159ef565b90505f670de0b6b3a76400008f61263f9190615c86565b111561268e57846bffffffffffffffffffffffff167fa40c56a5fd1e8eb4ed66a8bcaa56b10328137b8e1d8b6dd2d2ac30cdf2d9dc658f83604051612685929190615a85565b60405180910390a25b80600a5f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8282546126ca9190615a52565b92505081905550505b836bffffffffffffffffffffffff167ff051b25e39da97a65275eb304ec1b2f03cd7163e382fda5e4a79b61a8e9528fb8e85604051612713929190615a85565b60405180910390a2505061287c565b6001600281111561273657612735615aac565b5b88600281111561274957612748615aac565b5b1480612778575060028081111561276357612762615aac565b5b88600281111561277657612775615aac565b5b145b15612849575f60085f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905081815f8760ff1660ff1681526020019081526020015f205f015f8282546127d49190615a52565b9250508190555042815f8760ff1660ff1681526020019081526020015f20600201819055508460ff16836bffffffffffffffffffffffff167f5ac5177ff34f8f020430e7e23dbc1150f106326e8336d0b2179ce2ca8fa909108460405161283b9190614d53565b60405180910390a35061287b565b6040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b80856128889190615a52565b94505b5050808061289890615bd6565b915050612474565b505f60028111156128b4576128b3615aac565b5b8560028111156128c7576128c6615aac565b5b146128d8576128d782828761472e565b5b50506128e2614247565b50505050505050565b335f5f5f8260ff161461291f5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612942565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129a9576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129b1613ae4565b6129b9613b2a565b600160028111156129cd576129cc615aac565b5b8460028111156129e0576129df615aac565b5b03612b48575f8587898b6129f49190615a52565b6129fe9190615a52565b612a089190615a52565b90506064811115612a45576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064898b612a539190615981565b612a5d91906159ef565b600b5f828254612a6d9190615a52565b925050819055506064888b612a829190615981565b612a8c91906159ef565b600c5f828254612a9c9190615a52565b925050819055506064878b612ab19190615981565b612abb91906159ef565b600d5f828254612acb9190615a52565b925050819055506064868b612ae09190615981565b612aea91906159ef565b600e5f828254612afa9190615a52565b925050819055507fd29e2e2256eee4d115eca99db22baba672af7bca24082195a6f99896c864b773600b54600c54600d54600e54604051612b3e9493929190615cb6565b60405180910390a1505b612b50614247565b505050505050505050565b806bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401612bdb9190614d53565b602060405180830381865afa158015612bf6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1a9190615782565b73ffffffffffffffffffffffffffffffffffffffff1614612c67576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612c7181613ad8565b612c79613ae4565b612c81613b2a565b612c89613b6b565b612c94836002614261565b612c9c614247565b505050565b336040518060400160405280600681526020017f53595354454d0000000000000000000000000000000000000000000000000000815250612d035f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383614251565b612d0b613ae4565b612d13613b2a565b8686905089899050141580612d2e5750848490508989905014155b15612d65576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d6d613b6b565b5f5f90505f5f90505b8a8a9050816bffffffffffffffffffffffff1610156131c4575f8b8b836bffffffffffffffffffffffff16818110612db157612db0615ad9565b5b9050602002016020810190612dc69190614d9f565b90505f8a8a846bffffffffffffffffffffffff16818110612dea57612de9615ad9565b5b9050602002810190612dfc9190615b12565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090505f8989856bffffffffffffffffffffffff16818110612e5f57612e5e615ad9565b5b9050602002810190612e719190615b74565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505090505f5f90505b8251816bffffffffffffffffffffffff1610156131ad575f83826bffffffffffffffffffffffff1681518110612ef057612eef615ad9565b5b602002602001015190505f83836bffffffffffffffffffffffff1681518110612f1c57612f1b615ad9565b5b602002602001015190508088612f329190615a52565b97505f60095f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e1f22e188856040518363ffffffff1660e01b8152600401612fc09291906157ad565b5f6040518083038186803b158015612fd6575f5ffd5b505afa158015612fe8573d5f5f3e3d5ffd5b5050505060105f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156130c9578160125f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8282546130bd9190615a52565b92505081905550613142565b81815f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f8282546131069190615a52565b9250508190555042815f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20600201819055505b826bffffffffffffffffffffffff16876bffffffffffffffffffffffff167ffdd3b575047dba8e20225ea71ca0d0957cd0c3abb30a21800f57d6d5d9ed56088460405161318f9190614d53565b60405180910390a350505080806131a590615bd6565b915050612eb7565b5050505080806131bc90615bd6565b915050612d76565b50836131d8576131d73330836001613ee4565b5b506131e1614247565b505050505050505050565b600f5f9054906101000a90046bffffffffffffffffffffffff1681565b5f3360015f5f8260ff161461323f5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613262565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132c9576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132d1613ae4565b6132d9613b2a565b5f6132e48787613b75565b5090505f8103613320576040517fa975d0b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f20905081815f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015410156133b8576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81815f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f015f8282546133f59190615a1f565b9250508190555042815f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2060030181905550819550505061343d614247565b50505092915050565b600c5481565b5f3360015f5f8260ff16146134825760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134a5565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461350c576040517ff6bcc11800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613514613ae4565b61351c613b2a565b5f60105f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590508060105f896bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080945050613600614247565b50505092915050565b5f613612611f38565b905090565b600d5481565b600b5481565b600a602052805f5260405f205f915090505481565b5f60105f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f60125f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b816bffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1660035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016137889190614d53565b602060405180830381865afa1580156137a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c79190615782565b73ffffffffffffffffffffffffffffffffffffffff1614613814576040517f16ce049b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61381c613ae4565b613824613b2a565b61382c613b6b565b5f8260028111156138405761383f615aac565b5b90505f60075f866bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f5f6138ce835f8660ff1660ff1681526020019081526020015f206040518060a00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250506147e4565b9150915081835f8660ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506139283033835f613ee4565b8060145f8282546139399190615a52565b925050819055508360ff16876bffffffffffffffffffffffff167f89a82e076e649643c1cde69833b2f22d3385f598ffcfb4db3a6c766659304572836040516139829190614d53565b60405180910390a350505050613996614247565b505050565b6139a3614598565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613a13575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401613a0a9190614c97565b60405180910390fd5b613a1c8161461f565b50565b613a27614b9e565b60075f846bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f836002811115613a6857613a67615aac565b5b60ff1660ff1681526020019081526020015f206040518060a00160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905092915050565b60145481565b601360149054906101000a900460ff1681565b613ae181614827565b50565b600260165403613b20576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002601681905550565b613b32611f38565b15613b69576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b613b7361488f565b565b5f5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8173ffffffffffffffffffffffffffffffffffffffff1663b14feb6287876040518363ffffffff1660e01b8152600401613bd89291906157ad565b61012060405180830381865afa158015613bf4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c189190615928565b60e0015190505f60125f886bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f876bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205482613c839190615a52565b90505f81838573ffffffffffffffffffffffffffffffffffffffff1663b14feb628b8b6040518363ffffffff1660e01b8152600401613cc39291906157ad565b61012060405180830381865afa158015613cdf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d039190615928565b60600151613d119190615a52565b613d1b9190615a52565b90505f600282613d2b9190615981565b90505f60095f8b6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f205f8a6bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f206040518060a00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090505f8673ffffffffffffffffffffffffffffffffffffffff1663d3b30b756040518163ffffffff1660e01b815260040160a060405180830381865afa158015613e0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e329190615d82565b90505f42905082602001518411613e57575f6001995099505050505050505050613edd565b5f826020015184606001511015613e72578260200151613e78565b83606001515b90505f613e8e846040015183875f015186614927565b90505f5f613ea188886020015185614a31565b9150915081875f01511015613eca57865f0151819d509d50505050505050505050505050613edd565b81819d509d505050505050505050505050505b9250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613f4957505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613f80576040517f3ee569bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8203613fb9576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016140149190614c97565b602060405180830381865afa15801561402f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140539190615c09565b101561408b576040517f18383eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff160361416c5760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016140f1929190615c34565b6020604051808303815f875af115801561410d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141319190615c5b565b614167576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614241565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016141ca93929190615dad565b6020604051808303815f875af11580156141e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615c5b565b614240576040517fa11efef400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6001601681905550565b61425c838383614a8c565b505050565b5f600281111561427457614273615aac565b5b81600281111561428757614286615aac565b5b036142be576040517f9c58ee2100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160028111156142d2576142d1615aac565b5b90505f60085f856bffffffffffffffffffffffff166bffffffffffffffffffffffff1681526020019081526020015f2090505f5f614360835f8660ff1660ff1681526020019081526020015f206040518060a00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250506147e4565b915091505f810361439d576040517fdd57a76e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600160028111156143b2576143b1615aac565b5b8660028111156143c5576143c4615aac565b5b146143d257600c546143d6565b600b545b905080821115614412576040517f0c92ca1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82845f8760ff1660ff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508160145f82825461446d9190615a52565b925050819055506144803033845f613ee4565b8460ff16876bffffffffffffffffffffffff167f6fecf8ce6dabd40d2ecb7b054268fce01bd7a319c37c0dd673410b7989bcd6ca846040516144c29190614d53565b60405180910390a350505050505050565b6144db614ad2565b5f601560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61451e614b12565b60405161452b9190614c97565b60405180910390a1565b61453d613b2a565b6001601560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614581614b12565b60405161458e9190614c97565b60405180910390a1565b6145a0614b12565b73ffffffffffffffffffffffffffffffffffffffff166145be6122b3565b73ffffffffffffffffffffffffffffffffffffffff161461461d576145e1614b12565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016146149190614c97565b60405180910390fd5b565b5f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f7fa381e04ebab680939155d24deb84d393532b31de755eb4ffc2564a5d5c5adb8d336040516147129190615e3c565b60405180910390a1614725848484614b19565b90509392505050565b5f6001600281111561474357614742615aac565b5b82600281111561475657614755615aac565b5b1461476357600c54614767565b600b545b9050808411156147a3576040517f0c92ca1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff167f522bb991e510508243ba35979f10973ec1cf2e6ccb116f519429ed0df65ab3c9856040516147d69190614d53565b60405180910390a250505050565b6147ec614b9e565b5f825f015190505f835f018181525050808360200181815161480e9190615a52565b9150818152505042836060018181525050829150915091565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461488c576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f339050803b91505f8211156148d2576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff163b1115614923576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b5f84821061493757829050614a29565b838211614946575f9050614a29565b5f84836149539190615a1f565b90505f600a8261496391906159ef565b90505f600a87896149749190615a1f565b61497e91906159ef565b90505f8203614992575f9350505050614a29565b5f8183886149a09190615981565b6149aa91906159ef565b90505f6103e890505f821180156149c057508082105b156149f357605a836149d29190615981565b6064856149df9190615981565b11156149f2578095505050505050614a29565b5b605f83614a009190615981565b606485614a0d9190615981565b1115614a20578795505050505050614a29565b81955050505050505b949350505050565b5f5f838511614a46575f600191509150614a84565b5f8484614a539190615a52565b905080861015614a7a575f8587614a6a9190615a1f565b9050806001935093505050614a84565b8381871492509250505b935093915050565b614a97838383614b19565b614acd576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b614ada611f38565b614b10576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f33905090565b5f8373ffffffffffffffffffffffffffffffffffffffff16637909185184846040518363ffffffff1660e01b8152600401614b55929190615eb8565b6020604051808303815f875af1158015614b71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b959190615c5b565b90509392505050565b6040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f6bffffffffffffffffffffffff82169050919050565b614bf981614bd9565b8114614c03575f5ffd5b50565b5f81359050614c1481614bf0565b92915050565b5f5f60408385031215614c3057614c2f614bd1565b5b5f614c3d85828601614c06565b9250506020614c4e85828601614c06565b9150509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614c8182614c58565b9050919050565b614c9181614c77565b82525050565b5f602082019050614caa5f830184614c88565b92915050565b614cb981614c77565b8114614cc3575f5ffd5b50565b5f81359050614cd481614cb0565b92915050565b60078110614ce6575f5ffd5b50565b5f81359050614cf781614cda565b92915050565b5f5f60408385031215614d1357614d12614bd1565b5b5f614d2085828601614cc6565b9250506020614d3185828601614ce9565b9150509250929050565b5f819050919050565b614d4d81614d3b565b82525050565b5f602082019050614d665f830184614d44565b92915050565b5f8115159050919050565b614d8081614d6c565b82525050565b5f602082019050614d995f830184614d77565b92915050565b5f60208284031215614db457614db3614bd1565b5b5f614dc184828501614c06565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614dfc81614d3b565b82525050565b5f614e0d8383614df3565b60208301905092915050565b5f602082019050919050565b5f614e2f82614dca565b614e398185614dd4565b9350614e4483614de4565b805f5b83811015614e74578151614e5b8882614e02565b9750614e6683614e19565b925050600181019050614e47565b5085935050505092915050565b5f6020820190508181035f830152614e998184614e25565b905092915050565b614eaa81614d3b565b8114614eb4575f5ffd5b50565b5f81359050614ec581614ea1565b92915050565b5f5f5f5f60808587031215614ee357614ee2614bd1565b5b5f614ef087828801614eb7565b9450506020614f0187828801614eb7565b9350506040614f1287828801614eb7565b9250506060614f2387828801614eb7565b91505092959194509250565b60028110614f3b575f5ffd5b50565b5f81359050614f4c81614f2f565b92915050565b5f60208284031215614f6757614f66614bd1565b5b5f614f7484828501614f3e565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112614f9e57614f9d614f7d565b5b8235905067ffffffffffffffff811115614fbb57614fba614f81565b5b602083019150836020820283011115614fd757614fd6614f85565b5b9250929050565b5f5f83601f840112614ff357614ff2614f7d565b5b8235905067ffffffffffffffff8111156150105761500f614f81565b5b60208301915083602082028301111561502c5761502b614f85565b5b9250929050565b5f5f83601f84011261504857615047614f7d565b5b8235905067ffffffffffffffff81111561506557615064614f81565b5b60208301915083602082028301111561508157615080614f85565b5b9250929050565b5f5f5f5f5f5f606087890312156150a2576150a1614bd1565b5b5f87013567ffffffffffffffff8111156150bf576150be614bd5565b5b6150cb89828a01614f89565b9650965050602087013567ffffffffffffffff8111156150ee576150ed614bd5565b5b6150fa89828a01614fde565b9450945050604087013567ffffffffffffffff81111561511d5761511c614bd5565b5b61512989828a01615033565b92509250509295509295509295565b60a082015f82015161514c5f850182614df3565b50602082015161515f6020850182614df3565b5060408201516151726040850182614df3565b5060608201516151856060850182614df3565b5060808201516151986080850182614df3565b50505050565b5f60a0820190506151b15f830184615138565b92915050565b600381106151c3575f5ffd5b50565b5f813590506151d4816151b7565b92915050565b5f5f604083850312156151f0576151ef614bd1565b5b5f6151fd85828601614c06565b925050602061520e858286016151c6565b9150509250929050565b5f6020828403121561522d5761522c614bd1565b5b5f61523a84828501614cc6565b91505092915050565b5f819050919050565b5f61526661526161525c84614c58565b615243565b614c58565b9050919050565b5f6152778261524c565b9050919050565b5f6152888261526d565b9050919050565b6152988161527e565b82525050565b5f6020820190506152b15f83018461528f565b92915050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6152fd826152b7565b810181811067ffffffffffffffff8211171561531c5761531b6152c7565b5b80604052505050565b5f61532e614bc8565b905061533a82826152f4565b919050565b5f67ffffffffffffffff821115615359576153586152c7565b5b602082029050602081019050919050565b5f61537c6153778461533f565b615325565b9050808382526020820190506020840283018581111561539f5761539e614f85565b5b835b818110156153c857806153b48882614c06565b8452602084019350506020810190506153a1565b5050509392505050565b5f82601f8301126153e6576153e5614f7d565b5b81356153f684826020860161536a565b91505092915050565b5f67ffffffffffffffff821115615419576154186152c7565b5b602082029050602081019050919050565b5f61543c615437846153ff565b615325565b9050808382526020820190506020840283018581111561545f5761545e614f85565b5b835b8181101561548857806154748882614eb7565b845260208401935050602081019050615461565b5050509392505050565b5f82601f8301126154a6576154a5614f7d565b5b81356154b684826020860161542a565b91505092915050565b600381106154cb575f5ffd5b50565b5f813590506154dc816154bf565b92915050565b5f5f5f5f5f60a086880312156154fb576154fa614bd1565b5b5f86013567ffffffffffffffff81111561551857615517614bd5565b5b615524888289016153d2565b955050602061553588828901614eb7565b945050604086013567ffffffffffffffff81111561555657615555614bd5565b5b61556288828901615492565b9350506060615573888289016154ce565b9250506080615584888289016151c6565b9150509295509295909350565b5f5f5f5f5f5f60c087890312156155ab576155aa614bd1565b5b5f6155b889828a01614eb7565b96505060206155c989828a01614eb7565b95505060406155da89828a01614eb7565b94505060606155eb89828a01614eb7565b93505060806155fc89828a01614eb7565b92505060a061560d89828a016154ce565b9150509295509295509295565b61562381614d6c565b811461562d575f5ffd5b50565b5f8135905061563e8161561a565b92915050565b5f5f5f5f5f5f5f6080888a03121561565f5761565e614bd1565b5b5f88013567ffffffffffffffff81111561567c5761567b614bd5565b5b6156888a828b01614f89565b9750975050602088013567ffffffffffffffff8111156156ab576156aa614bd5565b5b6156b78a828b01614fde565b9550955050604088013567ffffffffffffffff8111156156da576156d9614bd5565b5b6156e68a828b01615033565b935093505060606156f98a828b01615630565b91505092959891949750929550565b61571181614bd9565b82525050565b5f60208201905061572a5f830184615708565b92915050565b5f5f6040838503121561574657615745614bd1565b5b5f61575385828601614c06565b9250506020615764858286016154ce565b9150509250929050565b5f8151905061577c81614cb0565b92915050565b5f6020828403121561579757615796614bd1565b5b5f6157a48482850161576e565b91505092915050565b5f6040820190506157c05f830185615708565b6157cd6020830184615708565b9392505050565b5f5ffd5b5f815190506157e681614bf0565b92915050565b5f61ffff82169050919050565b615802816157ec565b811461580c575f5ffd5b50565b5f8151905061581d816157f9565b92915050565b5f8151905061583181614ea1565b92915050565b5f815190506158458161561a565b92915050565b5f6101208284031215615861576158606157d4565b5b61586c610120615325565b90505f61587b848285016157d8565b5f83015250602061588e8482850161580f565b60208301525060406158a2848285016157d8565b60408301525060606158b684828501615823565b60608301525060806158ca84828501615823565b60808301525060a06158de84828501615823565b60a08301525060c06158f284828501615837565b60c08301525060e061590684828501615823565b60e08301525061010061591b84828501615823565b6101008301525092915050565b5f610120828403121561593e5761593d614bd1565b5b5f61594b8482850161584b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61598b82614d3b565b915061599683614d3b565b92508282026159a481614d3b565b915082820484148315176159bb576159ba615954565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6159f982614d3b565b9150615a0483614d3b565b925082615a1457615a136159c2565b5b828204905092915050565b5f615a2982614d3b565b9150615a3483614d3b565b9250828203905081811115615a4c57615a4b615954565b5b92915050565b5f615a5c82614d3b565b9150615a6783614d3b565b9250828201905080821115615a7f57615a7e615954565b5b92915050565b5f604082019050615a985f830185614d44565b615aa56020830184614d44565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83356001602003843603038112615b2e57615b2d615b06565b5b80840192508235915067ffffffffffffffff821115615b5057615b4f615b0a565b5b602083019250602082023603831315615b6c57615b6b615b0e565b5b509250929050565b5f5f83356001602003843603038112615b9057615b8f615b06565b5b80840192508235915067ffffffffffffffff821115615bb257615bb1615b0a565b5b602083019250602082023603831315615bce57615bcd615b0e565b5b509250929050565b5f615be082614bd9565b91506bffffffffffffffffffffffff8203615bfe57615bfd615954565b5b600182019050919050565b5f60208284031215615c1e57615c1d614bd1565b5b5f615c2b84828501615823565b91505092915050565b5f604082019050615c475f830185614c88565b615c546020830184614d44565b9392505050565b5f60208284031215615c7057615c6f614bd1565b5b5f615c7d84828501615837565b91505092915050565b5f615c9082614d3b565b9150615c9b83614d3b565b925082615cab57615caa6159c2565b5b828206905092915050565b5f608082019050615cc95f830187614d44565b615cd66020830186614d44565b615ce36040830185614d44565b615cf06060830184614d44565b95945050505050565b5f60a08284031215615d0e57615d0d6157d4565b5b615d1860a0615325565b90505f615d27848285016157d8565b5f830152506020615d3a84828501615823565b6020830152506040615d4e84828501615823565b6040830152506060615d6284828501615823565b6060830152506080615d7684828501615837565b60808301525092915050565b5f60a08284031215615d9757615d96614bd1565b5b5f615da484828501615cf9565b91505092915050565b5f606082019050615dc05f830186614c88565b615dcd6020830185614c88565b615dda6040830184614d44565b949350505050565b5f82825260208201905092915050565b7f76616c6964617465526f6c6557697468436f6f6c646f776e00000000000000005f82015250565b5f615e26601883615de2565b9150615e3182615df2565b602082019050919050565b5f6040820190508181035f830152615e5381615e1a565b9050615e626020830184614c88565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f615e8a82615e68565b615e948185615de2565b9350615ea4818560208601615e72565b615ead816152b7565b840191505092915050565b5f604082019050615ecb5f830185614c88565b8181036020830152615edd8184615e80565b9050939250505056fea26469706673582212202ff6bf9a90455f76f2283b8cd257156af8106cade4e7714bb52014922c3c906664736f6c634300081e0033000000000000000000000000f79641d66bf22e777f9cf74bdaf535cb253949090000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000a784aa9d9ca760a1d7973c3ad902c1d0052581dd0000000000000000000000000ac38e7334b0f14053963f4ebe2db463351c96ad000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000001bd41c988fd8807a73e79cfb465df488e73d6c0d0000000000000000000000002ee70f0585d83f523ae876f86b8df2c6c8677a99