4 txs
5 calls
constructor
constructor(uint256 initialSupply_, uint256 maxSupply_, address feeReceiver_, address swapRouter_, (bool feesInToken, uint16 buyFees, uint16 sellFees, uint16 transferFees, uint16 burnFeeRatio, uint16 liquidityFeeRatio, uint16 collectorsFeeRatio) feeConfiguration_, address[] collectors_, uint256[] shares_) payable
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
autoProcessFees
viewfunction autoProcessFees() view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
BURN_ADDRESS
viewfunction BURN_ADDRESS() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
FEE_PRECISION
viewfunction FEE_PRECISION() view returns (uint16)
feeCollectors
viewfunction feeCollectors(uint256 startIndex, uint256 count) view returns (address[])
feeCollectorShare
viewfunction feeCollectorShare(address account) view returns (uint256)
feeConfiguration
viewfunction feeConfiguration() view returns (bool feesInToken, uint16 buyFees, uint16 sellFees, uint16 transferFees, uint16 burnFeeRatio, uint16 liquidityFeeRatio, uint16 collectorsFeeRatio)
isExcludedFromAntiWhale
viewfunction isExcludedFromAntiWhale(address account) view returns (bool)
isExcludedFromFees
viewfunction isExcludedFromFees(address account) view returns (bool)
isFeeCollector
viewfunction isFeeCollector(address account) view returns (bool)
isLpPool
viewfunction isLpPool(address pairAddress) view returns (bool)
liquidityOwner
viewfunction liquidityOwner() view returns (address)
MAX_FEE
viewfunction MAX_FEE() view returns (uint16)
maxSupply
viewfunction maxSupply() view returns (uint256)
maxTokenPerWallet
viewfunction maxTokenPerWallet() view returns (uint256)
mintingFinished
viewfunction mintingFinished() view returns (bool)
name
viewfunction name() view returns (string)
numTokensToSwap
viewfunction numTokensToSwap() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
swapPair
viewfunction swapPair() view returns (address)
swapRouter
viewfunction swapRouter() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalFeeCollectorsShares
viewfunction totalFeeCollectorsShares() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
addFeeCollector
nonpayablefunction addFeeCollector(address account, uint256 share)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
distributeFees
nonpayablefunction distributeFees(uint256 amount, bool inToken)
finishMinting
nonpayablefunction finishMinting()
mint
nonpayablefunction mint(address account, uint256 amount)
pause
nonpayablefunction pause()
processFees
nonpayablefunction processFees(uint256 amount, uint256 minAmountOut)
recoverEth
nonpayablefunction recoverEth(address to, uint256 amount)
recoverTokens
nonpayablefunction recoverTokens(address tokenAddress, address to, uint256 tokenAmount)
removeFeeCollector
nonpayablefunction removeFeeCollector(address account)
renounceOwnership
nonpayablefunction renounceOwnership()
resume
nonpayablefunction resume()
setAutoprocessFees
nonpayablefunction setAutoprocessFees(bool autoProcess)
setFeeConfiguration
nonpayablefunction setFeeConfiguration(tuple configuration)
setIsExcludedFromAntiWhale
nonpayablefunction setIsExcludedFromAntiWhale(address account, bool excluded)
setIsExcludedFromFees
nonpayablefunction setIsExcludedFromFees(address account, bool excluded)
setIsLpPool
nonpayablefunction setIsLpPool(address pairAddress, bool isLp)
setLiquidityOwner
nonpayablefunction setLiquidityOwner(address newOwner)
setMaxTokenPerWallet
nonpayablefunction setMaxTokenPerWallet(uint256 amount)
setNumTokensToSwap
nonpayablefunction setNumTokensToSwap(uint256 amount)
setSwapRouter
nonpayablefunction setSwapRouter(address newRouter)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateFeeCollectorShare
nonpayablefunction updateFeeCollectorShare(address account, uint256 share)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
EthRecovered
event EthRecovered(address indexed to, uint256 amount)
ExcludedFromAntiWhale
event ExcludedFromAntiWhale(address indexed account, bool excluded)
ExcludedFromFees
event ExcludedFromFees(address indexed account, bool excluded)
FeeCollected
event FeeCollected(address indexed receiver, uint256 amount)
FeeCollectorAdded
event FeeCollectorAdded(address indexed account, uint256 share)
FeeCollectorRemoved
event FeeCollectorRemoved(address indexed account)
FeeCollectorUpdated
event FeeCollectorUpdated(address indexed account, uint256 oldShare, uint256 newShare)
FeeConfigurationUpdated
event FeeConfigurationUpdated((bool feesInToken, uint16 buyFees, uint16 sellFees, uint16 transferFees, uint16 burnFeeRatio, uint16 liquidityFeeRatio, uint16 collectorsFeeRatio) configuration)
MaxTokenPerWalletUpdated
event MaxTokenPerWalletUpdated(uint256 amount)
MintFinished
event MintFinished()
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
SetLpPool
event SetLpPool(address indexed pairAddress, bool isLp)
SwapRouterUpdated
event SwapRouterUpdated(address indexed router, address indexed pair)
TokenRecovered
event TokenRecovered(address indexed token, address indexed to, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ExpectedPause
error ExpectedPause()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
creation bytecode
0x60c06040525f60065f6101000a81548160ff021916908315150217905550604051618dce380380618dce833981810160405281019061003e91906126d0565b60016127108861004e9190612802565b8585858561006061079360201b60201c565b8c60648f61006e9190612802565b6040518060400160405280600e81526020017f5468726f7741776179546f6b656e0000000000000000000000000000000000008152506040518060400160405280600381526020017f544154000000000000000000000000000000000000000000000000000000000081525060128282818181600390816100ef9190612a36565b5080600490816100ff9190612a36565b50505050508060ff1660808160ff168152505050505080600581905550505f600660016101000a81548160ff0219169083151502179055505f8111610179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017090612b5f565b60405180910390fd5b8060a08181525050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101f2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101e99190612b8c565b60405180910390fd5b6102018161079a60201b60201c565b508051825114610246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023d90612bef565b60405180910390fd5b5f5b82518110156102a25761029583828151811061026757610266612c0d565b5b602002602001015183838151811061028257610281612c0d565b5b602002602001015161085f60201b60201c565b8080600101915050610248565b50505082600e8190555083600d60156101000a81548160ff0219169083151502179055506102d461079360201b60201c565b600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061047e600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e49190612c3a565b30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561044f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104739190612c3a565b6109b660201b60201c565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506105445f6001610a5860201b60201c565b61055761dead6001610a5860201b60201c565b610568306001610a5860201b60201c565b61058661057961079360201b60201c565b6001610a5860201b60201c565b61059581610b8d60201b60201c565b505050508473ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f193505050501580156105dc573d5f803e3d5ffd5b50600160125f6105f061079360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f8711156107875761078661077a61079360201b60201c565b88610e2a60201b60201c565b5b50505050505050613732565b5f33905090565b5f600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610873826007610eaf60201b90919060201c565b156108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90612caf565b60405180910390fd5b5f81116108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90612d17565b60405180910390fd5b610909826007610ee260201b90919060201c565b508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600a5f82825461095d9190612d35565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb23826040516109aa9190612d77565b60405180910390a25050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106109f35783856109f6565b84845b91509150858282604051602001610a0e929190612dd5565b60405160208183030381529060405280519060200120604051602001610a35929190612ec6565b604051602081830303815290604052805190602001205f1c925050509392505050565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612f51565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb82604051610b819190612f7e565b60405180910390a25050565b6107d061ffff16816020015161ffff161115610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590612fe1565b60405180910390fd5b6107d061ffff16816040015161ffff161115610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690613049565b60405180910390fd5b6107d061ffff16816060015161ffff161115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c77906130b1565b60405180910390fd5b5f8160c001518260a001518360800151610c9a91906130cf565b610ca491906130cf565b90505f8161ffff161480610cc1575061271061ffff168161ffff16145b610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf79061314e565b60405180910390fd5b81600f5f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548161ffff021916908361ffff1602179055506040820151815f0160036101000a81548161ffff021916908361ffff1602179055506060820151815f0160056101000a81548161ffff021916908361ffff1602179055506080820151815f0160076101000a81548161ffff021916908361ffff16021790555060a0820151815f0160096101000a81548161ffff021916908361ffff16021790555060c0820151815f01600b6101000a81548161ffff021916908361ffff1602179055509050507ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd82604051610e1e9190613216565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e9a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e919190612b8c565b60405180910390fd5b610eab5f8383610f1560201b60201c565b5050565b5f610eda835f018373ffffffffffffffffffffffffffffffffffffffff165f1b610f2b60201b60201c565b905092915050565b5f610f0d835f018373ffffffffffffffffffffffffffffffffffffffff165f1b610f4b60201b60201c565b905092915050565b610f26838383610fb860201b60201c565b505050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f610f5c8383610f2b60201b60201c565b610fae57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050610fb2565b5f90505b92915050565b5f8111610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190613279565b60405180910390fd5b5f80600d60149054906101000a900460ff161580156110255750600d60159054906101000a900460ff165b90505f6110378661131560201b60201c565b90505f6110498661131560201b60201c565b9050600d60149054906101000a900460ff166111df575f61106f8861136760201b60201c565b90505f6110818861136760201b60201c565b905083801561108e575082155b8015611098575080155b80156110f15750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561111457600f5f0160019054906101000a900461ffff1661ffff1695506111dc565b82801561111f575081155b8015611129575080155b1561114c57600f5f0160039054906101000a900461ffff1661ffff1695506111db565b83158015611158575082155b80156111b15750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b80156111bb575081155b156111da57600f5f0160059054906101000a900461ffff1661ffff1695505b5b5b50505b8280156111eb57505f84115b80156111f45750805b15611227575f611209306113b960201b60201c565b9050600e54811061122557611224815f6113fe60201b60201c565b5b505b5f8411156112fa575f61271061ffff1685876112439190613297565b61124d9190612802565b90505f818761125c91906132d8565b90505f61271061ffff16600f5f0160079054906101000a900461ffff1661ffff16846112889190613297565b6112929190612802565b90505f8111156112be5780836112a891906132d8565b92506112bd8a61dead836115dd60201b60201c565b5b5f8311156112d8576112d78a30856115dd60201b60201c565b5b5f8211156112f2576112f18a8a846115dd60201b60201c565b5b50505061130c565b61130b8787876115dd60201b60201c565b5b50505050505050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600d60146101000a81548160ff0219169083151502179055505f611429306113b960201b60201c565b90508281106115bd575f600f5f0160079054906101000a900461ffff16612710611453919061330b565b61ffff16600f5f0160099054906101000a900461ffff1661ffff16856114799190613297565b6114839190612802565b90505f6002826114939190612802565b90505f82866114a291906132d8565b90505f82846114b191906132d8565b9050600f5f015f9054906101000a900460ff166114d75781816114d49190612d35565b90505b5f811115611579575f611510600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113b960201b60201c565b0361151f5750505050506115bf565b5f479050611533828861168f60201b60201c565b5f814761154091906132d8565b90505f8386836115509190613297565b61155a9190612802565b90505f8111156115755761157486826118cc60201b60201c565b5b5050505b600f5f015f9054906101000a900460ff16156115a6576115a08260016119cc60201b60201c565b506115b8565b6115b6475f6119cc60201b60201c565b505b505050505b505b5f600d60146101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116795761161e611b7a60201b60201c565b8161162d611b8360201b60201c565b6116379190612d35565b1115611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f9061338a565b60405180910390fd5b5b61168a838383611b8c60201b60201c565b505050565b5f600267ffffffffffffffff8111156116ab576116aa6123b3565b5b6040519080825280602002602001820160405280156116d95781602001602082028036833780820191505090505b50905030815f815181106116f0576116ef612c0d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611794573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b89190612c3a565b816001815181106117cc576117cb612c0d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061183830600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611bf060201b60201c565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b815260040161189a95949392919061345f565b5f604051808303815f87803b1580156118b1575f80fd5b505af11580156118c3573d5f803e3d5ffd5b50505050505050565b6118fe30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bf060201b60201c565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611984969594939291906134f0565b60606040518083038185885af11580156119a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119c5919061354f565b5050505050565b5f8083036119dc575f9050611b74565b5f600a54036119ed575f9050611b74565b5f806119ff6007611c0860201b60201c565b90505f5b81811015611b6c575f611a20826007611c2160201b90919060201c565b90505f600184611a3091906132d8565b8314611a9157600a5460095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205489611a829190613297565b611a8c9190612802565b611a9e565b8488611a9d91906132d8565b5b90508615611abc57611ab7308383611c3e60201b60201c565b611b01565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611aff573d5f803e3d5ffd5b505b8173ffffffffffffffffffffffffffffffffffffffff167f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df82604051611b479190612d77565b60405180910390a28085611b5b9190612d35565b945050508080600101915050611a03565b506001925050505b92915050565b5f60a051905090565b5f600254905090565b611b9a611d3460201b60201c565b15611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906135e9565b60405180910390fd5b611beb838383611d4a60201b60201c565b505050565b611c038383836001611de360201b60201c565b505050565b5f611c1a825f01611fb260201b60201c565b9050919050565b5f611c34835f0183611fc160201b60201c565b5f1c905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cae575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ca59190612b8c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d1e575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611d159190612b8c565b60405180910390fd5b611d2f838383610f1560201b60201c565b505050565b5f600660019054906101000a900460ff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dcd5760065f9054906101000a900460ff1615611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613677565b60405180910390fd5b5b611dde838383611fe860201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e53575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611e4a9190612b8c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ec3575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611eba9190612b8c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611fac578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611fa39190612d77565b60405180910390a35b50505050565b5f815f01805490509050919050565b5f825f018281548110611fd757611fd6612c0d565b5b905f5260205f200154905092915050565b5f6005541415801561200657506120048261208060201b60201c565b155b1561206a576005548161201e846113b960201b60201c565b6120289190612d35565b1115612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906136df565b60405180910390fd5b5b61207b8383836120d260201b60201c565b505050565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6120e38383836120e860201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612138578060025f82825461212c9190612d35565b92505081905550612206565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156121c1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016121b8939291906136fd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361224d578060025f8282540392505081905550612297565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122f49190612d77565b60405180910390a3505050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61232481612312565b811461232e575f80fd5b50565b5f8151905061233f8161231b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61236e82612345565b9050919050565b61237e81612364565b8114612388575f80fd5b50565b5f8151905061239981612375565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6123e9826123a3565b810181811067ffffffffffffffff82111715612408576124076123b3565b5b80604052505050565b5f61241a612301565b905061242682826123e0565b919050565b5f8115159050919050565b61243f8161242b565b8114612449575f80fd5b50565b5f8151905061245a81612436565b92915050565b5f61ffff82169050919050565b61247681612460565b8114612480575f80fd5b50565b5f815190506124918161246d565b92915050565b5f60e082840312156124ac576124ab61239f565b5b6124b660e0612411565b90505f6124c58482850161244c565b5f8301525060206124d884828501612483565b60208301525060406124ec84828501612483565b604083015250606061250084828501612483565b606083015250608061251484828501612483565b60808301525060a061252884828501612483565b60a08301525060c061253c84828501612483565b60c08301525092915050565b5f80fd5b5f67ffffffffffffffff821115612566576125656123b3565b5b602082029050602081019050919050565b5f80fd5b5f61258d6125888461254c565b612411565b905080838252602082019050602084028301858111156125b0576125af612577565b5b835b818110156125d957806125c5888261238b565b8452602084019350506020810190506125b2565b5050509392505050565b5f82601f8301126125f7576125f6612548565b5b815161260784826020860161257b565b91505092915050565b5f67ffffffffffffffff82111561262a576126296123b3565b5b602082029050602081019050919050565b5f61264d61264884612610565b612411565b905080838252602082019050602084028301858111156126705761266f612577565b5b835b8181101561269957806126858882612331565b845260208401935050602081019050612672565b5050509392505050565b5f82601f8301126126b7576126b6612548565b5b81516126c784826020860161263b565b91505092915050565b5f805f805f805f6101a0888a0312156126ec576126eb61230a565b5b5f6126f98a828b01612331565b975050602061270a8a828b01612331565b965050604061271b8a828b0161238b565b955050606061272c8a828b0161238b565b945050608061273d8a828b01612497565b93505061016088015167ffffffffffffffff81111561275f5761275e61230e565b5b61276b8a828b016125e3565b92505061018088015167ffffffffffffffff81111561278d5761278c61230e565b5b6127998a828b016126a3565b91505092959891949750929550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61280c82612312565b915061281783612312565b925082612827576128266127a8565b5b828204905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061288057607f821691505b6020821081036128935761289261283c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026128f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826128ba565b6128ff86836128ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61293a61293561293084612312565b612917565b612312565b9050919050565b5f819050919050565b61295383612920565b61296761295f82612941565b8484546128c6565b825550505050565b5f90565b61297b61296f565b61298681848461294a565b505050565b5b818110156129a95761299e5f82612973565b60018101905061298c565b5050565b601f8211156129ee576129bf81612899565b6129c8846128ab565b810160208510156129d7578190505b6129eb6129e3856128ab565b83018261298b565b50505b505050565b5f82821c905092915050565b5f612a0e5f19846008026129f3565b1980831691505092915050565b5f612a2683836129ff565b9150826002028217905092915050565b612a3f82612832565b67ffffffffffffffff811115612a5857612a576123b3565b5b612a628254612869565b612a6d8282856129ad565b5f60209050601f831160018114612a9e575f8415612a8c578287015190505b612a968582612a1b565b865550612afd565b601f198416612aac86612899565b5f5b82811015612ad357848901518255600182019150602085019450602081019050612aae565b86831015612af05784890151612aec601f8916826129ff565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f42455032304361707065643a206d6178537570706c79206973203000000000005f82015250565b5f612b49601b83612b05565b9150612b5482612b15565b602082019050919050565b5f6020820190508181035f830152612b7681612b3d565b9050919050565b612b8681612364565b82525050565b5f602082019050612b9f5f830184612b7d565b92915050565b7f496e76616c69642066656520636f6c6c6563746f7273000000000000000000005f82015250565b5f612bd9601683612b05565b9150612be482612ba5565b602082019050919050565b5f6020820190508181035f830152612c0681612bcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215612c4f57612c4e61230a565b5b5f612c5c8482850161238b565b91505092915050565b7f416c72656164792066656520636f6c6c6563746f7200000000000000000000005f82015250565b5f612c99601583612b05565b9150612ca482612c65565b602082019050919050565b5f6020820190508181035f830152612cc681612c8d565b9050919050565b7f496e76616c6964207368617265000000000000000000000000000000000000005f82015250565b5f612d01600d83612b05565b9150612d0c82612ccd565b602082019050919050565b5f6020820190508181035f830152612d2e81612cf5565b9050919050565b5f612d3f82612312565b9150612d4a83612312565b9250828201905080821115612d6257612d616127d5565b5b92915050565b612d7181612312565b82525050565b5f602082019050612d8a5f830184612d68565b92915050565b5f8160601b9050919050565b5f612da682612d90565b9050919050565b5f612db782612d9c565b9050919050565b612dcf612dca82612364565b612dad565b82525050565b5f612de08285612dbe565b601482019150612df08284612dbe565b6014820191508190509392505050565b5f81905092915050565b7fff000000000000000000000000000000000000000000000000000000000000005f82015250565b5f612e3e600183612e00565b9150612e4982612e0a565b600182019050919050565b5f819050919050565b5f819050919050565b612e77612e7282612e54565b612e5d565b82525050565b7efb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd55f82015250565b5f612eb0602083612e00565b9150612ebb82612e7d565b602082019050919050565b5f612ed082612e32565b9150612edc8285612dbe565b601482019150612eec8284612e66565b602082019150612efb82612ea4565b91508190509392505050565b7f416c7265616479207365740000000000000000000000000000000000000000005f82015250565b5f612f3b600b83612b05565b9150612f4682612f07565b602082019050919050565b5f6020820190508181035f830152612f6881612f2f565b9050919050565b612f788161242b565b82525050565b5f602082019050612f915f830184612f6f565b92915050565b7f496e76616c6964206275792066656500000000000000000000000000000000005f82015250565b5f612fcb600f83612b05565b9150612fd682612f97565b602082019050919050565b5f6020820190508181035f830152612ff881612fbf565b9050919050565b7f496e76616c69642073656c6c20666565000000000000000000000000000000005f82015250565b5f613033601083612b05565b915061303e82612fff565b602082019050919050565b5f6020820190508181035f83015261306081613027565b9050919050565b7f496e76616c6964207472616e73666572206665650000000000000000000000005f82015250565b5f61309b601483612b05565b91506130a682613067565b602082019050919050565b5f6020820190508181035f8301526130c88161308f565b9050919050565b5f6130d982612460565b91506130e483612460565b9250828201905061ffff8111156130fe576130fd6127d5565b5b92915050565b7f496e76616c6964206665652073686172650000000000000000000000000000005f82015250565b5f613138601183612b05565b915061314382613104565b602082019050919050565b5f6020820190508181035f8301526131658161312c565b9050919050565b6131758161242b565b82525050565b61318481612460565b82525050565b60e082015f82015161319e5f85018261316c565b5060208201516131b1602085018261317b565b5060408201516131c4604085018261317b565b5060608201516131d7606085018261317b565b5060808201516131ea608085018261317b565b5060a08201516131fd60a085018261317b565b5060c082015161321060c085018261317b565b50505050565b5f60e0820190506132295f83018461318a565b92915050565b7f5472616e73666572203c3d2030000000000000000000000000000000000000005f82015250565b5f613263600d83612b05565b915061326e8261322f565b602082019050919050565b5f6020820190508181035f83015261329081613257565b9050919050565b5f6132a182612312565b91506132ac83612312565b92508282026132ba81612312565b915082820484148315176132d1576132d06127d5565b5b5092915050565b5f6132e282612312565b91506132ed83612312565b9250828203905081811115613305576133046127d5565b5b92915050565b5f61331582612460565b915061332083612460565b9250828203905061ffff81111561333a576133396127d5565b5b92915050565b7f42455032304361707065643a206d6178537570706c79206578636565646564005f82015250565b5f613374601f83612b05565b915061337f82613340565b602082019050919050565b5f6020820190508181035f8301526133a181613368565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6133da81612364565b82525050565b5f6133eb83836133d1565b60208301905092915050565b5f602082019050919050565b5f61340d826133a8565b61341781856133b2565b9350613422836133c2565b805f5b8381101561345257815161343988826133e0565b9750613444836133f7565b925050600181019050613425565b5085935050505092915050565b5f60a0820190506134725f830188612d68565b61347f6020830187612d68565b81810360408301526134918186613403565b90506134a06060830185612b7d565b6134ad6080830184612d68565b9695505050505050565b5f819050919050565b5f6134da6134d56134d0846134b7565b612917565b612312565b9050919050565b6134ea816134c0565b82525050565b5f60c0820190506135035f830189612b7d565b6135106020830188612d68565b61351d60408301876134e1565b61352a60608301866134e1565b6135376080830185612b7d565b61354460a0830184612d68565b979650505050505050565b5f805f606084860312156135665761356561230a565b5b5f61357386828701612331565b935050602061358486828701612331565b925050604061359586828701612331565b9150509250925092565b7f42455032305061757361626c653a207472616e736665722070617573656400005f82015250565b5f6135d3601e83612b05565b91506135de8261359f565b602082019050919050565b5f6020820190508181035f830152613600816135c7565b9050919050565b7f42455032304d696e7461626c653a206d696e74696e672069732066696e6973685f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f613661602283612b05565b915061366c82613607565b604082019050919050565b5f6020820190508181035f83015261368e81613655565b9050919050565b7f57616c6c65742065786365656473206d617800000000000000000000000000005f82015250565b5f6136c9601283612b05565b91506136d482613695565b602082019050919050565b5f6020820190508181035f8301526136f6816136bd565b9050919050565b5f6060820190506137105f830186612b7d565b61371d6020830185612d68565b61372a6040830184612d68565b949350505050565b60805160a05161567b6137535f395f6114c701525f610f19015261567b5ff3fe608060405260043610610302575f3560e01c8063715018a61161018f578063b3c6e9ee116100db578063e55096b011610094578063f2fde38b1161006e578063f2fde38b14610b4b578063f4232d2514610b73578063f725101d14610b9b578063fccc281314610bc357610309565b8063e55096b014610ad1578063e63a391f14610af9578063e72c571714610b2357610309565b8063b3c6e9ee146109c5578063bc063e1a146109ef578063bd82394314610a19578063c31c9c0714610a41578063d5abeb0114610a6b578063dd62ed3e14610a9557610309565b80638da5cb5b1161014857806398c47e8c1161012257806398c47e8c146109075780639b61f1d014610937578063a9059cbb14610961578063adf186931461099d57610309565b80638da5cb5b1461087757806394b8a703146108a157806395d89b41146108dd57610309565b8063715018a6146107bb57806372bc5583146107d15780637a8baf52146107f95780637d64bcb4146108235780637f5bbb2c146108395780638456cb591461086157610309565b8063313ce5671161024e5780634569c445116102075780635c975abb116101e15780635c975abb146106f15780635f3e849f1461071b5780636f741f2a1461074357806370a082311461077f57610309565b80634569c44514610665578063490e51471461068d5780634fbee193146106b557610309565b8063313ce5671461055d5780633502628a146105875780633935ebf9146105af5780633b90b9bf146105d957806340c10f1914610615578063412736571461063d57610309565b80630f569dad116102bb57806323b872dd1161029557806323b872dd1461047f57806326991cc8146104bb578063269f534c146104e55780632b46c6a41461052157610309565b80630f569dad1461040557806318160ddd1461042d5780631fa67b4d1461045757610309565b806301a6c43b1461030d578063046f7da21461033757806305d2035b1461034d57806306fdde0314610377578063095ea7b3146103a15780630a4e42ef146103dd57610309565b3661030957005b5f80fd5b348015610318575f80fd5b50610321610bed565b60405161032e9190614014565b60405180910390f35b348015610342575f80fd5b5061034b610bf3565b005b348015610358575f80fd5b50610361610c05565b60405161036e9190614047565b60405180910390f35b348015610382575f80fd5b5061038b610c1a565b60405161039891906140d0565b60405180910390f35b3480156103ac575f80fd5b506103c760048036038101906103c29190614181565b610caa565b6040516103d49190614047565b60405180910390f35b3480156103e8575f80fd5b5061040360048036038101906103fe91906141bf565b610ccc565b005b348015610410575f80fd5b5061042b600480360381019061042691906141fd565b610d2d565b005b348015610438575f80fd5b50610441610d3f565b60405161044e9190614014565b60405180910390f35b348015610462575f80fd5b5061047d60048036038101906104789190614228565b610d48565b005b34801561048a575f80fd5b506104a560048036038101906104a09190614253565b610d5c565b6040516104b29190614047565b60405180910390f35b3480156104c6575f80fd5b506104cf610d8a565b6040516104dc91906142b2565b60405180910390f35b3480156104f0575f80fd5b5061050b60048036038101906105069190614228565b610daf565b6040516105189190614047565b60405180910390f35b34801561052c575f80fd5b50610547600480360381019061054291906141bf565b610e01565b6040516105549190614382565b60405180910390f35b348015610568575f80fd5b50610571610f16565b60405161057e91906143bd565b60405180910390f35b348015610592575f80fd5b506105ad60048036038101906105a89190614181565b610f3d565b005b3480156105ba575f80fd5b506105c3610f53565b6040516105d091906142b2565b60405180910390f35b3480156105e4575f80fd5b506105ff60048036038101906105fa9190614228565b610f78565b60405161060c9190614047565b60405180910390f35b348015610620575f80fd5b5061063b60048036038101906106369190614181565b610f94565b005b348015610648575f80fd5b50610663600480360381019061065e9190614228565b610faa565b005b348015610670575f80fd5b5061068b60048036038101906106869190614400565b610fbe565b005b348015610698575f80fd5b506106b360048036038101906106ae9190614460565b61106f565b005b3480156106c0575f80fd5b506106db60048036038101906106d69190614228565b611093565b6040516106e89190614047565b60405180910390f35b3480156106fc575f80fd5b506107056110e5565b6040516107129190614047565b60405180910390f35b348015610726575f80fd5b50610741600480360381019061073c9190614253565b6110fb565b005b34801561074e575f80fd5b5061076960048036038101906107649190614228565b611113565b6040516107769190614047565b60405180910390f35b34801561078a575f80fd5b506107a560048036038101906107a09190614228565b611165565b6040516107b29190614014565b60405180910390f35b3480156107c6575f80fd5b506107cf6111aa565b005b3480156107dc575f80fd5b506107f760048036038101906107f29190614228565b6111bd565b005b348015610804575f80fd5b5061080d611208565b60405161081a9190614014565b60405180910390f35b34801561082e575f80fd5b5061083761120e565b005b348015610844575f80fd5b5061085f600480360381019061085a919061448b565b611220565b005b34801561086c575f80fd5b5061087561129a565b005b348015610882575f80fd5b5061088b6112ac565b60405161089891906142b2565b60405180910390f35b3480156108ac575f80fd5b506108c760048036038101906108c29190614228565b6112d5565b6040516108d49190614014565b60405180910390f35b3480156108e8575f80fd5b506108f161131b565b6040516108fe91906140d0565b60405180910390f35b348015610912575f80fd5b5061091b6113ab565b60405161092e97969594939291906144d2565b60405180910390f35b348015610942575f80fd5b5061094b611434565b6040516109589190614047565b60405180910390f35b34801561096c575f80fd5b5061098760048036038101906109829190614181565b611447565b6040516109949190614047565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be919061453f565b611469565b005b3480156109d0575f80fd5b506109d961147f565b6040516109e69190614014565b60405180910390f35b3480156109fa575f80fd5b50610a03611485565b604051610a10919061457d565b60405180910390f35b348015610a24575f80fd5b50610a3f6004803603810190610a3a91906141fd565b61148b565b005b348015610a4c575f80fd5b50610a5561149f565b604051610a6291906145f1565b60405180910390f35b348015610a76575f80fd5b50610a7f6114c4565b604051610a8c9190614014565b60405180910390f35b348015610aa0575f80fd5b50610abb6004803603810190610ab6919061460a565b6114eb565b604051610ac89190614014565b60405180910390f35b348015610adc575f80fd5b50610af76004803603810190610af2919061453f565b61156d565b005b348015610b04575f80fd5b50610b0d611583565b604051610b1a919061457d565b60405180910390f35b348015610b2e575f80fd5b50610b496004803603810190610b449190614683565b611589565b005b348015610b56575f80fd5b50610b716004803603810190610b6c9190614228565b61159f565b005b348015610b7e575f80fd5b50610b996004803603810190610b949190614181565b611623565b005b348015610ba6575f80fd5b50610bc16004803603810190610bbc919061453f565b611639565b005b348015610bce575f80fd5b50610bd76116e7565b604051610be491906142b2565b60405180910390f35b600e5481565b610bfb6116ed565b610c03611774565b565b5f60065f9054906101000a900460ff16905090565b606060038054610c29906146ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610c55906146ee565b8015610ca05780601f10610c7757610100808354040283529160200191610ca0565b820191905f5260205f20905b815481529060010190602001808311610c8357829003601f168201915b5050505050905090565b5f80610cb46117d6565b9050610cc18185856117dd565b600191505092915050565b610cd46116ed565b610cdd30611165565b821115610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690614768565b60405180910390fd5b610d2982826117ef565b5050565b610d356116ed565b80600e8190555050565b5f600254905090565b610d506116ed565b610d59816119aa565b50565b5f80610d666117d6565b9050610d73858285611aed565b610d7e858585611b7f565b60019150509392505050565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60605f82905083610e126007611c6f565b610e1c91906147b3565b811115610e3b5783610e2e6007611c6f565b610e3891906147b3565b90505b5f8167ffffffffffffffff811115610e5657610e556147e6565b5b604051908082528060200260200182016040528015610e845781602001602082028036833780820191505090505b5090505f5b82811015610f0a57610eb08187610ea09190614813565b6007611c8290919063ffffffff16565b828281518110610ec357610ec2614846565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610e89565b50809250505092915050565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b610f456116ed565b610f4f8282611c99565b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610f8d826007611df090919063ffffffff16565b9050919050565b610f9c6116ed565b610fa68282611e1d565b5050565b610fb26116ed565b610fbb81611e9c565b50565b610fc66116ed565b801561101c5781610fd630611165565b1015611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906148bd565b60405180910390fd5b611060565b8147101561105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906148bd565b60405180910390fd5b5b61106a82826123d2565b505050565b6110776116ed565b6110908180360381019061108b9190614a05565b612574565b50565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f600660019054906101000a900460ff16905090565b6111036116ed565b61110e838383612811565b505050565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111b26116ed565b6111bb5f6129b1565b565b6111c56116ed565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b6112166116ed565b61121e612a76565b565b6112286116ed565b801515600d60159054906101000a900460ff1615150361127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614a7a565b60405180910390fd5b80600d60156101000a81548160ff02191690831515021790555050565b6112a26116ed565b6112aa612b0d565b565b5f600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461132a906146ee565b80601f0160208091040260200160405190810160405280929190818152602001828054611356906146ee565b80156113a15780601f10611378576101008083540402835291602001916113a1565b820191905f5260205f20905b81548152906001019060200180831161138457829003601f168201915b5050505050905090565b600f805f015f9054906101000a900460ff1690805f0160019054906101000a900461ffff1690805f0160039054906101000a900461ffff1690805f0160059054906101000a900461ffff1690805f0160079054906101000a900461ffff1690805f0160099054906101000a900461ffff1690805f01600b9054906101000a900461ffff16905087565b600d60159054906101000a900460ff1681565b5f806114516117d6565b905061145e818585611b7f565b600191505092915050565b6114716116ed565b61147b8282612b70565b5050565b600a5481565b6107d081565b6114936116ed565b61149c81612ca5565b50565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6115756116ed565b61157f8282612d52565b5050565b61271081565b6115916116ed565b61159b8282612e87565b5050565b6115a76116ed565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611617575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161160e91906142b2565b60405180910390fd5b611620816129b1565b50565b61162b6116ed565b6116358282612f60565b5050565b6116416116ed565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f46e542c7dcc512f9d4c5ef6470efcb6729025d935367e1c2c8dc49d8e35eaa88826040516116db9190614047565b60405180910390a25050565b61dead81565b6116f56117d6565b73ffffffffffffffffffffffffffffffffffffffff166117136112ac565b73ffffffffffffffffffffffffffffffffffffffff1614611772576117366117d6565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161176991906142b2565b60405180910390fd5b565b61177c6130fd565b5f600660016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117bf6117d6565b6040516117cc91906142b2565b60405180910390a1565b5f33905090565b6117ea838383600161313d565b505050565b6001600d60146101000a81548160ff0219169083151502179055505f61181430611165565b905082811061198a575f600f5f0160079054906101000a900461ffff1661271061183e9190614a98565b61ffff16600f5f0160099054906101000a900461ffff1661ffff16856118649190614acd565b61186e9190614b3b565b90505f60028261187e9190614b3b565b90505f828661188d91906147b3565b90505f828461189c91906147b3565b9050600f5f015f9054906101000a900460ff166118c25781816118bf9190614813565b90505b5f811115611952575f6118f5600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611165565b0361190457505050505061198c565b5f479050611912828861330c565b5f814761191f91906147b3565b90505f83868361192f9190614acd565b6119399190614b3b565b90505f81111561194e5761194d8682613543565b5b5050505b600f5f015f9054906101000a900460ff1615611979576119738260016123d2565b50611985565b611983475f6123d2565b505b505050505b505b5f600d60146101000a81548160ff0219169083151502179055505050565b6119be816007611df090919063ffffffff16565b6119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490614bb5565b60405180910390fd5b611a1181600761363d90919063ffffffff16565b5060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600a5f828254611a6091906147b3565b9250508190555060095f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f90558073ffffffffffffffffffffffffffffffffffffffff167f904316769e154356a5e4aad5d41591b55913c7717fab281d818c1fed7d80e81460405160405180910390a250565b5f611af884846114eb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611b795781811015611b6a578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611b6193929190614bd3565b60405180910390fd5b611b7884848484035f61313d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bef575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611be691906142b2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c5f575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611c5691906142b2565b60405180910390fd5b611c6a83838361366a565b505050565b5f611c7b825f0161367a565b9050919050565b5f611c8f835f0183613689565b5f1c905092915050565b611cad826007611df090919063ffffffff16565b15611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614c52565b60405180910390fd5b5f8111611d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2690614cba565b60405180910390fd5b611d438260076136b090919063ffffffff16565b508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600a5f828254611d979190614813565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb2382604051611de49190614014565b60405180910390a25050565b5f611e15835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6136dd565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611e8491906142b2565b60405180910390fd5b611e985f838361366a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190614d22565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd99190614d54565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614dc9565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120d89190614d54565b90508173ffffffffffffffffffffffffffffffffffffffff1663e6a4390530836040518363ffffffff1660e01b8152600401612115929190614de7565b602060405180830381865afa158015612130573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121549190614d54565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff16600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036122a2578173ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b8152600401612222929190614de7565b6020604051808303815f875af115801561223e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122629190614d54565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5f73ffffffffffffffffffffffffffffffffffffffff16600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614e58565b60405180910390fd5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fca394f95d8dbf1e8b2e76b9a8da90cacce1da85181a65508dab13212dc1df53b60405160405180910390a3505050565b5f8083036123e2575f905061256e565b5f600a54036123f3575f905061256e565b5f806123ff6007611c6f565b90505f5b81811015612566575f612420826007611c8290919063ffffffff16565b90505f60018461243091906147b3565b831461249157600a5460095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054896124829190614acd565b61248c9190614b3b565b61249e565b848861249d91906147b3565b5b905086156124b6576124b1308383611b7f565b6124fb565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156124f9573d5f803e3d5ffd5b505b8173ffffffffffffffffffffffffffffffffffffffff167f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df826040516125419190614014565b60405180910390a280856125559190614813565b945050508080600101915050612403565b506001925050505b92915050565b6107d061ffff16816020015161ffff1611156125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90614ec0565b60405180910390fd5b6107d061ffff16816040015161ffff161115612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614f28565b60405180910390fd5b6107d061ffff16816060015161ffff161115612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e90614f90565b60405180910390fd5b5f8160c001518260a0015183608001516126819190614fae565b61268b9190614fae565b90505f8161ffff1614806126a8575061271061ffff168161ffff16145b6126e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126de9061502d565b60405180910390fd5b81600f5f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548161ffff021916908361ffff1602179055506040820151815f0160036101000a81548161ffff021916908361ffff1602179055506060820151815f0160056101000a81548161ffff021916908361ffff1602179055506080820151815f0160076101000a81548161ffff021916908361ffff16021790555060a0820151815f0160096101000a81548161ffff021916908361ffff16021790555060c0820151815f01600b6101000a81548161ffff021916908361ffff1602179055509050507ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd8260405161280591906150f5565b60405180910390a15050565b808373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161284b91906142b2565b602060405180830381865afa158015612866573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061288a9190615122565b10156128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290615197565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016129069291906151b5565b6020604051808303815f875af1158015612922573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294691906151f0565b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516129a49190614014565b60405180910390a3505050565b5f600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60065f9054906101000a900460ff1615612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc9061528b565b60405180910390fd5b600160065f6101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b612b156136fd565b6001600660016101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b596117d6565b604051612b6691906142b2565b60405180910390a1565b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690614a7a565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb82604051612c999190614047565b60405180910390a25050565b5f811480612cd257506103e86005612cbb610d3f565b612cc59190614acd565b612ccf9190614b3b565b81115b612d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d08906152f3565b60405180910390fd5b806005819055507f0271c3ca991d8fa13fc3df55bfd888e9347a178a375ef6e0f63afa9639d144f481604051612d479190614014565b60405180910390a150565b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503612de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd890614a7a565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f902b2ea0acdec5a260e398590d055fe29bd61ef5dd41e45db54a4cd98d5569e082604051612e7b9190614047565b60405180910390a25050565b80471015612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec190615197565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612f0d573d5f803e3d5ffd5b508173ffffffffffffffffffffffffffffffffffffffff167fd01205615e35ba1dd087bd6dac5922e0370961b3726c247c078cd59baae5770e82604051612f549190614014565b60405180910390a25050565b612f74826007611df090919063ffffffff16565b612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa90614bb5565b60405180910390fd5b5f8111612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614cba565b60405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080600a5f82825461304791906147b3565b925050819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081600a5f8282546130a19190614813565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fd350c3685bdab1285c0b97ffb6e96d96ed0ad4578a135c38250e771e7cb831aa82846040516130f0929190615311565b60405180910390a2505050565b6131056110e5565b61313b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131ad575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016131a491906142b2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361321d575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161321491906142b2565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015613306578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516132fd9190614014565b60405180910390a35b50505050565b5f600267ffffffffffffffff811115613328576133276147e6565b5b6040519080825280602002602001820160405280156133565781602001602082028036833780820191505090505b50905030815f8151811061336d5761336c614846565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613411573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134359190614d54565b8160018151811061344957613448614846565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134af30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856117dd565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b8152600401613511959493929190615338565b5f604051808303815f87803b158015613528575f80fd5b505af115801561353a573d5f803e3d5ffd5b50505050505050565b61356f30600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846117dd565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016135f5969594939291906153c9565b60606040518083038185885af1158015613611573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136369190615428565b5050505050565b5f613662835f018373ffffffffffffffffffffffffffffffffffffffff165f1b61373e565b905092915050565b61367583838361383a565b505050565b5f815f01805490509050919050565b5f825f01828154811061369f5761369e614846565b5b905f5260205f200154905092915050565b5f6136d5835f018373ffffffffffffffffffffffffffffffffffffffff165f1b613b5b565b905092915050565b5f80836001015f8481526020019081526020015f20541415905092915050565b6137056110e5565b1561373c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f80836001015f8481526020019081526020015f205490505f811461382f575f60018261376b91906147b3565b90505f6001865f018054905061378191906147b3565b90508082146137e7575f865f0182815481106137a05761379f614846565b5b905f5260205f200154905080875f0184815481106137c1576137c0614846565b5b905f5260205f20018190555083876001015f8381526020019081526020015f2081905550505b855f018054806137fa576137f9615478565b5b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050613834565b5f9150505b92915050565b5f811161387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906154ef565b60405180910390fd5b5f80600d60149054906101000a900460ff161580156138a75750600d60159054906101000a900460ff165b90505f6138b386611113565b90505f6138bf86611113565b9050600d60149054906101000a900460ff16613a49575f6138df88611093565b90505f6138eb88611093565b90508380156138f8575082155b8015613902575080155b801561395b5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561397e57600f5f0160019054906101000a900461ffff1661ffff169550613a46565b828015613989575081155b8015613993575080155b156139b657600f5f0160039054906101000a900461ffff1661ffff169550613a45565b831580156139c2575082155b8015613a1b5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b8015613a25575081155b15613a4457600f5f0160059054906101000a900461ffff1661ffff1695505b5b5b50505b828015613a5557505f84115b8015613a5e5750805b15613a85575f613a6d30611165565b9050600e548110613a8357613a82815f6117ef565b5b505b5f841115613b46575f61271061ffff168587613aa19190614acd565b613aab9190614b3b565b90505f8187613aba91906147b3565b90505f61271061ffff16600f5f0160079054906101000a900461ffff1661ffff1684613ae69190614acd565b613af09190614b3b565b90505f811115613b16578083613b0691906147b3565b9250613b158a61dead83613bc2565b5b5f831115613b2a57613b298a3085613bc2565b5b5f821115613b3e57613b3d8a8a84613bc2565b5b505050613b52565b613b51878787613bc2565b5b50505050505050565b5f613b6683836136dd565b613bb857825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f208190555060019050613bbc565b5f90505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c5257613bfd6114c4565b81613c06610d3f565b613c109190614813565b1115613c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4890615557565b60405180910390fd5b5b613c5d838383613c62565b505050565b613c6a6110e5565b15613caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca1906155bf565b60405180910390fd5b613cb5838383613cba565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613d3d5760065f9054906101000a900460ff1615613d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d339061528b565b60405180910390fd5b5b613d48838383613d4d565b505050565b5f60055414158015613d655750613d6382610daf565b155b15613dc35760055481613d7784611165565b613d819190614813565b1115613dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db990615627565b60405180910390fd5b5b613dce838383613dd3565b505050565b613dde838383613de3565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e33578060025f828254613e279190614813565b92505081905550613f01565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613ebc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401613eb393929190614bd3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613f48578060025f8282540392505081905550613f92565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fef9190614014565b60405180910390a3505050565b5f819050919050565b61400e81613ffc565b82525050565b5f6020820190506140275f830184614005565b92915050565b5f8115159050919050565b6140418161402d565b82525050565b5f60208201905061405a5f830184614038565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6140a282614060565b6140ac818561406a565b93506140bc81856020860161407a565b6140c581614088565b840191505092915050565b5f6020820190508181035f8301526140e88184614098565b905092915050565b5f604051905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614126826140fd565b9050919050565b6141368161411c565b8114614140575f80fd5b50565b5f813590506141518161412d565b92915050565b61416081613ffc565b811461416a575f80fd5b50565b5f8135905061417b81614157565b92915050565b5f8060408385031215614197576141966140f9565b5b5f6141a485828601614143565b92505060206141b58582860161416d565b9150509250929050565b5f80604083850312156141d5576141d46140f9565b5b5f6141e28582860161416d565b92505060206141f38582860161416d565b9150509250929050565b5f60208284031215614212576142116140f9565b5b5f61421f8482850161416d565b91505092915050565b5f6020828403121561423d5761423c6140f9565b5b5f61424a84828501614143565b91505092915050565b5f805f6060848603121561426a576142696140f9565b5b5f61427786828701614143565b935050602061428886828701614143565b92505060406142998682870161416d565b9150509250925092565b6142ac8161411c565b82525050565b5f6020820190506142c55f8301846142a3565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6142fd8161411c565b82525050565b5f61430e83836142f4565b60208301905092915050565b5f602082019050919050565b5f614330826142cb565b61433a81856142d5565b9350614345836142e5565b805f5b8381101561437557815161435c8882614303565b97506143678361431a565b925050600181019050614348565b5085935050505092915050565b5f6020820190508181035f83015261439a8184614326565b905092915050565b5f60ff82169050919050565b6143b7816143a2565b82525050565b5f6020820190506143d05f8301846143ae565b92915050565b6143df8161402d565b81146143e9575f80fd5b50565b5f813590506143fa816143d6565b92915050565b5f8060408385031215614416576144156140f9565b5b5f6144238582860161416d565b9250506020614434858286016143ec565b9150509250929050565b5f80fd5b5f60e082840312156144575761445661443e565b5b81905092915050565b5f60e08284031215614475576144746140f9565b5b5f61448284828501614442565b91505092915050565b5f602082840312156144a05761449f6140f9565b5b5f6144ad848285016143ec565b91505092915050565b5f61ffff82169050919050565b6144cc816144b6565b82525050565b5f60e0820190506144e55f83018a614038565b6144f260208301896144c3565b6144ff60408301886144c3565b61450c60608301876144c3565b61451960808301866144c3565b61452660a08301856144c3565b61453360c08301846144c3565b98975050505050505050565b5f8060408385031215614555576145546140f9565b5b5f61456285828601614143565b9250506020614573858286016143ec565b9150509250929050565b5f6020820190506145905f8301846144c3565b92915050565b5f819050919050565b5f6145b96145b46145af846140fd565b614596565b6140fd565b9050919050565b5f6145ca8261459f565b9050919050565b5f6145db826145c0565b9050919050565b6145eb816145d1565b82525050565b5f6020820190506146045f8301846145e2565b92915050565b5f80604083850312156146205761461f6140f9565b5b5f61462d85828601614143565b925050602061463e85828601614143565b9150509250929050565b5f614652826140fd565b9050919050565b61466281614648565b811461466c575f80fd5b50565b5f8135905061467d81614659565b92915050565b5f8060408385031215614699576146986140f9565b5b5f6146a68582860161466f565b92505060206146b78582860161416d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061470557607f821691505b602082108103614718576147176146c1565b5b50919050565b7f416d6f756e7420746f6f206869676800000000000000000000000000000000005f82015250565b5f614752600f8361406a565b915061475d8261471e565b602082019050919050565b5f6020820190508181035f83015261477f81614746565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147bd82613ffc565b91506147c883613ffc565b92508282039050818111156147e0576147df614786565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f61481d82613ffc565b915061482883613ffc565b92508282019050808211156148405761483f614786565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e6f7420656e6f7567682062616c616e636500000000000000000000000000005f82015250565b5f6148a760128361406a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b5f80fd5b6148e882614088565b810181811067ffffffffffffffff82111715614907576149066147e6565b5b80604052505050565b5f6149196140f0565b905061492582826148df565b919050565b614933816144b6565b811461493d575f80fd5b50565b5f8135905061494e8161492a565b92915050565b5f60e08284031215614969576149686148db565b5b61497360e0614910565b90505f614982848285016143ec565b5f83015250602061499584828501614940565b60208301525060406149a984828501614940565b60408301525060606149bd84828501614940565b60608301525060806149d184828501614940565b60808301525060a06149e584828501614940565b60a08301525060c06149f984828501614940565b60c08301525092915050565b5f60e08284031215614a1a57614a196140f9565b5b5f614a2784828501614954565b91505092915050565b7f416c7265616479207365740000000000000000000000000000000000000000005f82015250565b5f614a64600b8361406a565b9150614a6f82614a30565b602082019050919050565b5f6020820190508181035f830152614a9181614a58565b9050919050565b5f614aa2826144b6565b9150614aad836144b6565b9250828203905061ffff811115614ac757614ac6614786565b5b92915050565b5f614ad782613ffc565b9150614ae283613ffc565b9250828202614af081613ffc565b91508282048414831517614b0757614b06614786565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614b4582613ffc565b9150614b5083613ffc565b925082614b6057614b5f614b0e565b5b828204905092915050565b7f4e6f742066656520636f6c6c6563746f720000000000000000000000000000005f82015250565b5f614b9f60118361406a565b9150614baa82614b6b565b602082019050919050565b5f6020820190508181035f830152614bcc81614b93565b9050919050565b5f606082019050614be65f8301866142a3565b614bf36020830185614005565b614c006040830184614005565b949350505050565b7f416c72656164792066656520636f6c6c6563746f7200000000000000000000005f82015250565b5f614c3c60158361406a565b9150614c4782614c08565b602082019050919050565b5f6020820190508181035f830152614c6981614c30565b9050919050565b7f496e76616c6964207368617265000000000000000000000000000000000000005f82015250565b5f614ca4600d8361406a565b9150614caf82614c70565b602082019050919050565b5f6020820190508181035f830152614cd181614c98565b9050919050565b7f496e76616c696420726f757465720000000000000000000000000000000000005f82015250565b5f614d0c600e8361406a565b9150614d1782614cd8565b602082019050919050565b5f6020820190508181035f830152614d3981614d00565b9050919050565b5f81519050614d4e8161412d565b92915050565b5f60208284031215614d6957614d686140f9565b5b5f614d7684828501614d40565b91505092915050565b7f496e76616c696420666163746f727900000000000000000000000000000000005f82015250565b5f614db3600f8361406a565b9150614dbe82614d7f565b602082019050919050565b5f6020820190508181035f830152614de081614da7565b9050919050565b5f604082019050614dfa5f8301856142a3565b614e0760208301846142a3565b9392505050565b7f496e76616c6964207061697220616464726573732e00000000000000000000005f82015250565b5f614e4260158361406a565b9150614e4d82614e0e565b602082019050919050565b5f6020820190508181035f830152614e6f81614e36565b9050919050565b7f496e76616c6964206275792066656500000000000000000000000000000000005f82015250565b5f614eaa600f8361406a565b9150614eb582614e76565b602082019050919050565b5f6020820190508181035f830152614ed781614e9e565b9050919050565b7f496e76616c69642073656c6c20666565000000000000000000000000000000005f82015250565b5f614f1260108361406a565b9150614f1d82614ede565b602082019050919050565b5f6020820190508181035f830152614f3f81614f06565b9050919050565b7f496e76616c6964207472616e73666572206665650000000000000000000000005f82015250565b5f614f7a60148361406a565b9150614f8582614f46565b602082019050919050565b5f6020820190508181035f830152614fa781614f6e565b9050919050565b5f614fb8826144b6565b9150614fc3836144b6565b9250828201905061ffff811115614fdd57614fdc614786565b5b92915050565b7f496e76616c6964206665652073686172650000000000000000000000000000005f82015250565b5f61501760118361406a565b915061502282614fe3565b602082019050919050565b5f6020820190508181035f8301526150448161500b565b9050919050565b6150548161402d565b82525050565b615063816144b6565b82525050565b60e082015f82015161507d5f85018261504b565b506020820151615090602085018261505a565b5060408201516150a3604085018261505a565b5060608201516150b6606085018261505a565b5060808201516150c9608085018261505a565b5060a08201516150dc60a085018261505a565b5060c08201516150ef60c085018261505a565b50505050565b5f60e0820190506151085f830184615069565b92915050565b5f8151905061511c81614157565b92915050565b5f60208284031215615137576151366140f9565b5b5f6151448482850161510e565b91505092915050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f615181600e8361406a565b915061518c8261514d565b602082019050919050565b5f6020820190508181035f8301526151ae81615175565b9050919050565b5f6040820190506151c85f8301856142a3565b6151d56020830184614005565b9392505050565b5f815190506151ea816143d6565b92915050565b5f60208284031215615205576152046140f9565b5b5f615212848285016151dc565b91505092915050565b7f42455032304d696e7461626c653a206d696e74696e672069732066696e6973685f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f61527560228361406a565b91506152808261521b565b604082019050919050565b5f6020820190508181035f8301526152a281615269565b9050919050565b7f416d6f756e7420746f6f206c6f770000000000000000000000000000000000005f82015250565b5f6152dd600e8361406a565b91506152e8826152a9565b602082019050919050565b5f6020820190508181035f83015261530a816152d1565b9050919050565b5f6040820190506153245f830185614005565b6153316020830184614005565b9392505050565b5f60a08201905061534b5f830188614005565b6153586020830187614005565b818103604083015261536a8186614326565b905061537960608301856142a3565b6153866080830184614005565b9695505050505050565b5f819050919050565b5f6153b36153ae6153a984615390565b614596565b613ffc565b9050919050565b6153c381615399565b82525050565b5f60c0820190506153dc5f8301896142a3565b6153e96020830188614005565b6153f660408301876153ba565b61540360608301866153ba565b61541060808301856142a3565b61541d60a0830184614005565b979650505050505050565b5f805f6060848603121561543f5761543e6140f9565b5b5f61544c8682870161510e565b935050602061545d8682870161510e565b925050604061546e8682870161510e565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f5472616e73666572203c3d2030000000000000000000000000000000000000005f82015250565b5f6154d9600d8361406a565b91506154e4826154a5565b602082019050919050565b5f6020820190508181035f830152615506816154cd565b9050919050565b7f42455032304361707065643a206d6178537570706c79206578636565646564005f82015250565b5f615541601f8361406a565b915061554c8261550d565b602082019050919050565b5f6020820190508181035f83015261556e81615535565b9050919050565b7f42455032305061757361626c653a207472616e736665722070617573656400005f82015250565b5f6155a9601e8361406a565b91506155b482615575565b602082019050919050565b5f6020820190508181035f8301526155d68161559d565b9050919050565b7f57616c6c65742065786365656473206d617800000000000000000000000000005f82015250565b5f61561160128361406a565b915061561c826155dd565b602082019050919050565b5f6020820190508181035f83015261563e81615605565b905091905056fea2646970667358221220a84bd7a499a3b40e86be042851174ec529ce7bcbb17a550b004de8a75658a03764736f6c6343000819003300000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000002fe70ef3db7ea49b5f14b5edf6208116458fa74a00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002fe70ef3db7ea49b5f14b5edf6208116458fa74a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003