Transactions
Token Transfers
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- LotteryMutuari
- Optimization enabled
- false
- Compiler version
- v0.8.20+commit.a1b79de6
- EVM Version
- paris
- Verified at
- 2024-07-31T08:24:58.813890Z
Constructor Arguments
0x0000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b140000000000000000000000009322f26cee8d536c4bdea5c183395adc30e41e4b0000000000000000000000004237e0a5b55233d5b6d6d1d9bf421723954130d80000000000000000000000004b7708ee3ccbd3f9af68208e69ad31f611e1befe000000000000000000000000f034b3e8d608ce75a84ac90a8a6447757a596e37000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
Arg [0] (address) : 0x7fdbf4fe2dbbdf956c010b3dd83177cb86eb1b14
Arg [1] (address) : 0x9322f26cee8d536c4bdea5c183395adc30e41e4b
Arg [2] (address) : 0x4237e0a5b55233d5b6d6d1d9bf421723954130d8
Arg [3] (address) : 0x4b7708ee3ccbd3f9af68208e69ad31f611e1befe
Arg [4] (address) : 0xf034b3e8d608ce75a84ac90a8a6447757a596e37
Arg [5] (uint256) : 2100
Arg [6] (uint256) : 0
Arg [7] (uint32) : 3
contracts/LotteryMutuari.sol
// SPDX-License-Identifier: Unlicensedpragma solidity 0.8.20;import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";import "./utils/VRFConsumerBaseV2.sol";import "./interfaces/IErinaceusVRF.sol";import "hardhat/console.sol";interface IMutuari {struct supplyMarkets {address tokenAddress;address returnedTokenAddress;string sympol;uint256 decimals;uint256 totalSupplied;uint256 maxSupplyLimit;uint256 tokenRate;int256 apy;uint256 ltv;bool canBeCollateral;uint256 walletBalance;}function deposit(address token, uint256 index, uint256 amount) external payable;function withdraw(address token, uint256 index, uint256 amount) external payable;function getSupplyMarkets(address) external view returns (supplyMarkets[] memory);function getGeneralInfo() external view returns (uint256, uint256);function getSharesByPooledFtn(uint256 _ftnAmount) external view returns (uint256);function feePercentage() external view returns (uint256);}interface IRegistry {function isExistLottery(address _lottery) external returns (bool);}interface ILottery {function returnedToken() external view returns (address);function stakeTransferredFunds(address user, address token, uint256 amount) external;}
@openzeppelin/contracts/access/Ownable.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.*/constructor() {_transferOwnership(_msgSender());}/*** @dev Throws if called by any account other than the owner.*/modifier onlyOwner() {_checkOwner();_;}/*** @dev Returns the address of the current owner.
@openzeppelin/contracts/security/ReentrancyGuard.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)pragma solidity ^0.8.0;/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full// word because each write operation emits an extra SLOAD to first read the// slot's contents, replace the bits taken up by the boolean, and then write// back. This is the compiler's defense against contract upgrades and// pointer aliasing, and it cannot be disabled.// The values being non-zero value makes deployment a bit more expensive,// but in exchange the refund on every call to nonReentrant will be lower in// amount. Since refunds are capped to a percentage of the total// transaction's gas, it is best to keep them low in cases like this one, to// increase the likelihood of the full refund coming into effect.uint256 private constant _NOT_ENTERED = 1;uint256 private constant _ENTERED = 2;uint256 private _status;constructor() {_status = _NOT_ENTERED;}
@openzeppelin/contracts/token/ERC20/IERC20.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/function totalSupply() external view returns (uint256);/*** @dev Returns the amount of tokens owned by `account`.*/function balanceOf(address account) external view returns (uint256);/*** @dev Moves `amount` tokens from the caller's account to `to`.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transfer(address to, uint256 amount) external returns (bool);
@openzeppelin/contracts/utils/Context.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;}}
contracts/interfaces/IErinaceusVRF.sol
// SPDX-License-Identifier: MITpragma solidity 0.8.20;interface IErinaceusVRF {function requestRandomWords(bytes32 keyHash,uint64 subId,uint16 requestConfirmations,uint32 callbackGasLimit,uint32 numWords) external;}
contracts/utils/VRFConsumerBaseV2.sol
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/** ***************************************************************************** @notice Interface for contracts using VRF randomness* ****************************************************************************** @dev PURPOSE** @dev Reggie the Random Oracle (not his real job) wants to provide randomness* @dev to Vera the verifier in such a way that Vera can be sure he's not* @dev making his output up to suit himself. Reggie provides Vera a public key* @dev to which he knows the secret key. Each time Vera provides a seed to* @dev Reggie, he gives back a value which is computed completely* @dev deterministically from the seed and the secret key.** @dev Reggie provides a proof by which Vera can verify that the output was* @dev correctly computed once Reggie tells it to her, but without that proof,* @dev the output is indistinguishable to her from a uniform random sample* @dev from the output space.** @dev The purpose of this contract is to make it easy for unrelated contracts* @dev to talk to Vera the verifier about the work Reggie is doing, to provide* @dev simple access to a verifiable source of randomness. It ensures 2 things:* @dev 1. The fulfillment came from the ErinaceusVRF* @dev 2. The consumer contract implements fulfillRandomWords.* ****************************************************************************** @dev USAGE** @dev Calling contracts must inherit from VRFConsumerBase, and can* @dev initialize VRFConsumerBase's attributes in their constructor as* @dev shown:** @dev contract VRFConsumer {* @dev constructor(<other arguments>, address _erinaceusVRF, address _link)* @dev VRFConsumerBase(_erinaceusVRF) public {* @dev <initialization with other arguments goes here>* @dev }* @dev }** @dev The oracle will have given you an ID for the VRF keypair they have* @dev committed to (let's call it keyHash). Create subscription, fund it
hardhat/console.sol
// SPDX-License-Identifier: MITpragma solidity >=0.4.22 <0.9.0;library console {address constant CONSOLE_ADDRESS =0x000000000000000000636F6e736F6c652e6c6f67;function _sendLogPayloadImplementation(bytes memory payload) internal view {address consoleAddress = CONSOLE_ADDRESS;/// @solidity memory-safe-assemblyassembly {pop(staticcall(gas(),consoleAddress,add(payload, 32),mload(payload),0,0))}}function _castToPure(function(bytes memory) internal view fnIn) internal pure returns (function(bytes memory) pure fnOut) {assembly {fnOut := fnIn}}function _sendLogPayload(bytes memory payload) internal pure {_castToPure(_sendLogPayloadImplementation)(payload);}function log() internal pure {_sendLogPayload(abi.encodeWithSignature("log()"));}function logInt(int256 p0) internal pure {_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
Compiler Settings
{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"optimizer":{"runs":200,"enabled":false},"metadata":{"useLiteralContent":true},"libraries":{},"evmVersion":"paris"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_erinaceusVRF","internalType":"address"},{"type":"address","name":"_mutuari","internalType":"address"},{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_returnedToken","internalType":"address"},{"type":"address","name":"_registry","internalType":"address"},{"type":"uint256","name":"_duration","internalType":"uint256"},{"type":"uint256","name":"_delay","internalType":"uint256"},{"type":"uint32","name":"countOfWinners","internalType":"uint32"}]},{"type":"error","name":"OnlyErinaceusCanFulfill","inputs":[{"type":"address","name":"have","internalType":"address"},{"type":"address","name":"want","internalType":"address"}]},{"type":"event","name":"ClaimRewards","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FinalizeRequested","inputs":[{"type":"uint256","name":"rewardsForRound","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalDeposit","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoundFinalized","inputs":[{"type":"uint256[]","name":"winneingNumbers","internalType":"uint256[]","indexed":false}],"anonymous":false},{"type":"event","name":"Stake","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"uint256","name":"userTickets","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalTickets","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TeamRewardsClaimed","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"UnStake","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"IDToUser","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"winingNumbers","internalType":"uint256[]"}],"name":"check","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claim","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"claimedAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"currentUserID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"day","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IErinaceusVRF"}],"name":"erinaceusVRF","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"finalizeRound","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalDeposit","internalType":"uint256"},{"type":"uint256","name":"totalTickets","internalType":"uint256"}],"name":"flag","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"gasLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"chance","internalType":"uint256"}],"name":"getChance","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"ticketsStart","internalType":"uint256"},{"type":"uint256","name":"ticketsEnd","internalType":"uint256"}],"name":"getUsersTickets","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"getWinners","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getWinningNumbers","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"keyHash","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IMutuari"}],"name":"mutuari","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"poolStart","internalType":"uint256"},{"type":"uint32","name":"countOfWinners","internalType":"uint32"},{"type":"uint256","name":"totalCurrentDeposit","internalType":"uint256"},{"type":"uint256","name":"totalDepositAtTheEnd","internalType":"uint256"},{"type":"uint256","name":"totalTickets","internalType":"uint256"},{"type":"uint256","name":"duration","internalType":"uint256"},{"type":"uint256","name":"rewardForRound","internalType":"uint256"},{"type":"bool","name":"isFinalized","internalType":"bool"}],"name":"poolInfo","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rawFulfillRandomWords","inputs":[{"type":"uint256","name":"requestId","internalType":"uint256"},{"type":"uint256[]","name":"randomWords","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"registry","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"requestConfirmations","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"returnedToken","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"stake","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"stakeTransferredFunds","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"subID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"teamReward","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"token","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferFundsToNewPool","inputs":[{"type":"address","name":"_newLottery","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unstake","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"userID","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"depositedAssets","internalType":"uint256"},{"type":"uint256","name":"depositedAssetsAtTheEnd","internalType":"uint256"},{"type":"uint256","name":"tickets","internalType":"uint256"},{"type":"bool","name":"rewardsClaimed","internalType":"bool"}],"name":"userInfo","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]}]
Contract Creation Code
0x60a06040523480156200001157600080fd5b5060405162005ca438038062005ca483398181016040528101906200003791906200055d565b878073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200008d620000816200033a60201b60201c565b6200034260201b60201c565b87600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760098190555083600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c6001819055506002600560146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f6da22a485fc06c9bce99691a2ff5af57b7fd20b09af4a6572f6a44473d6c151460001b600781905550622625a0600660006101000a81548163ffffffff021916908363ffffffff16021790555060036005601c6101000a81548161ffff021916908361ffff16021790555082600c60050181905550814262000291919062000655565b600c6000018190555080600c60010160006101000a81548163ffffffff021916908363ffffffff1602179055508063ffffffff1667ffffffffffffffff811115620002e157620002e062000690565b5b604051908082528060200260200182016040528015620003105781602001602082028036833780820191505090505b50600c60060190805190602001906200032b92919062000406565b505050505050505050620006bf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562000445579160200282015b828111156200044457825182559160200191906001019062000427565b5b50905062000454919062000458565b5090565b5b808211156200047357600081600090555060010162000459565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004a9826200047c565b9050919050565b620004bb816200049c565b8114620004c757600080fd5b50565b600081519050620004db81620004b0565b92915050565b6000819050919050565b620004f681620004e1565b81146200050257600080fd5b50565b6000815190506200051681620004eb565b92915050565b600063ffffffff82169050919050565b62000537816200051c565b81146200054357600080fd5b50565b60008151905062000557816200052c565b92915050565b600080600080600080600080610100898b03121562000581576200058062000477565b5b6000620005918b828c01620004ca565b9850506020620005a48b828c01620004ca565b9750506040620005b78b828c01620004ca565b9650506060620005ca8b828c01620004ca565b9550506080620005dd8b828c01620004ca565b94505060a0620005f08b828c0162000505565b93505060c0620006038b828c0162000505565b92505060e0620006168b828c0162000546565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200066282620004e1565b91506200066f83620004e1565b92508282019050808211156200068a576200068962000626565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080516155c2620006e260003960008181610b4a0152610b9e01526155c26000f3fe6080604052600436106101f95760003560e01c80638da5cb5b1161010d578063c23697a8116100a0578063df15c37e1161006f578063df15c37e146106f0578063eda7794e1461071b578063f2fde38b14610758578063f68016b714610781578063fc0c546a146107ac576101f9565b8063c23697a814610634578063c41136cd14610671578063d10279241461069c578063ddca3f43146106c5576101f9565b8063a9a5b781116100dc578063a9a5b78114610575578063aec47759146105a0578063b0fb162f146105cb578063bb760a75146105f6576101f9565b80638da5cb5b146104c55780639668ceb8146104f0578063a58ce16f1461051b578063a694fc3a14610559576101f9565b80635a2f3d09116101905780637b1039991161015f5780637b103999146103f05780637b76ac911461041b5780637d8c8e1f1461044657806382f0622a1461046f57806384350e1d1461049a576101f9565b80635a2f3d091461035157806361728f391461038357806362a58fb8146103ae578063715018a6146103d9576101f9565b806334200355116101cc57806334200355146102925780633bacf26d146102cf5780634e71d92d146102fa57806351d70bc414610311576101f9565b80631e820325146101fe5780631fe543e3146102155780632def66201461023e5780633121e7d714610255575b600080fd5b34801561020a57600080fd5b506102136107d7565b005b34801561022157600080fd5b5061023c60048036038101906102379190614448565b610b48565b005b34801561024a57600080fd5b50610253610c08565b005b34801561026157600080fd5b5061027c60048036038101906102779190614502565b610c13565b604051610289919061453e565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190614559565b610e23565b6040516102c69190614595565b60405180910390f35b3480156102db57600080fd5b506102e4610e56565b6040516102f1919061460f565b60405180910390f35b34801561030657600080fd5b5061030f610e7c565b005b34801561031d57600080fd5b5061033860048036038101906103339190614559565b61130c565b6040516103489493929190614645565b60405180910390f35b34801561035d57600080fd5b50610366611349565b60405161037a9897969594939291906146a9565b60405180910390f35b34801561038f57600080fd5b5061039861139c565b6040516103a59190614740565b60405180910390f35b3480156103ba57600080fd5b506103c36113a2565b6040516103d0919061477e565b60405180910390f35b3480156103e557600080fd5b506103ee6113bc565b005b3480156103fc57600080fd5b506104056113d0565b6040516104129190614595565b60405180910390f35b34801561042757600080fd5b506104306113f6565b60405161043d919061453e565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614799565b6113fc565b005b34801561047b57600080fd5b50610484611969565b604051610491919061453e565b60405180910390f35b3480156104a657600080fd5b506104af61196f565b6040516104bc91906148aa565b60405180910390f35b3480156104d157600080fd5b506104da6119ca565b6040516104e79190614595565b60405180910390f35b3480156104fc57600080fd5b506105056119f3565b604051610512919061453e565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614502565b6119f9565b6040516105509291906148cc565b60405180910390f35b610573600480360381019061056e9190614559565b611db6565b005b34801561058157600080fd5b5061058a612475565b604051610597919061453e565b60405180910390f35b3480156105ac57600080fd5b506105b561247b565b6040516105c29190614916565b60405180910390f35b3480156105d757600080fd5b506105e06124a1565b6040516105ed919061494e565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190614559565b6124b5565b60405161062b9291906148cc565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190614502565b6124d9565b60405161066891906148aa565b60405180910390f35b34801561067d57600080fd5b506106866127d2565b604051610693919061498a565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614502565b6127f8565b005b3480156106d157600080fd5b506106da612a18565b6040516106e7919061453e565b60405180910390f35b3480156106fc57600080fd5b50610705612a1e565b6040516107129190614a63565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190614502565b612cfe565b60405161074f919061453e565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614502565b612d16565b005b34801561078d57600080fd5b50610796612d99565b6040516107a39190614a85565b60405180910390f35b3480156107b857600080fd5b506107c1612daf565b6040516107ce919061498a565b60405180910390f35b6000600c905042816005015482600001546107f29190614acf565b1115610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90614b60565b60405180910390fd5b8060080160009054906101000a900460ff1615610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90614bcc565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600754600560149054906101000a900467ffffffffffffffff166005601c9054906101000a900461ffff16600660009054906101000a900463ffffffff168660010160009054906101000a900463ffffffff166040518663ffffffff1660e01b8152600401610936959493929190614bec565b600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505080600201548160030181905550600160646015546109869190614c6e565b11156109c2576001606460155461099d9190614c6e565b6109a79190614c9f565b8160040160008282546109ba9190614acf565b925050819055505b600081600201541115610a83578060020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a2f9190614595565b602060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614ce8565b610a7a9190614c9f565b81600701819055505b600081600701541115610ae75760646009548260070154610aa49190614d15565b610aae9190614c6e565b60088190555060646009546064610ac59190614c9f565b8260070154610ad49190614d15565b610ade9190614c6e565b81600701819055505b60018160080160006101000a81548160ff0219169083151502179055507f78b1c4f4a995ee0900557ab63afc39e57dcce05ef2e622329233c0a9f0f0ef5e81600701548260020154604051610b3d9291906148cc565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bfa57337f00000000000000000000000000000000000000000000000000000000000000006040517f1cdc5ebb000000000000000000000000000000000000000000000000000000008152600401610bf1929190614d57565b60405180910390fd5b610c048282612dd5565b5050565b610c1133612ef6565b565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152505090506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610d6a57602002820191906000526020600020905b815481526020019060010190808311610d56575b50505050508152602001600782015481526020016008820160009054906101000a900460ff1615151515815250509050600060018360400151610dad9190614acf565b905060006064601554610dc09190614c6e565b1115610def5760016064601554610dd79190614c6e565b610de19190614c9f565b81610dec9190614acf565b90505b60008260800151905080670de0b6b3a764000083610e0d9190614d15565b610e179190614c6e565b95505050505050919050565b60186020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e87336124d9565b90506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610f4057602002820191906000526020600020905b815481526020019060010190808311610f2c575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090508060030160009054906101000a900460ff161561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490614dcc565b60405180910390fd5b6000845111156112ef576000836020015163ffffffff1685518560e001516110459190614d15565b61104f9190614c6e565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110d0929190614dec565b6020604051808303816000875af11580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000846040518463ffffffff1660e01b815260040161119693929190614ea9565b600060405180830381600087803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611225929190614dec565b6020604051808303816000875af1158015611244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112689190614e41565b5060018260030160006101000a81548160ff02191690831515021790555080600a60008282546112989190614acf565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc67826040516112e5919061453e565b60405180910390a2505b6000816000015411156113065761130533612ef6565b5b50505050565b60196020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b600c8060000154908060010160009054906101000a900463ffffffff16908060020154908060030154908060040154908060050154908060070154908060080160009054906101000a900460ff16905088565b60075481565b600560149054906101000a900467ffffffffffffffff1681565b6113c46135f5565b6113ce6000613673565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359063732336040518263ffffffff1660e01b81526004016114579190614595565b6020604051808303816000875af1158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190614e41565b6114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614f52565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090614fe4565b60405180910390fd5b6000600c90506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905042826000015411156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190615050565b60405180910390fd5b42600154836005015484600001546116129190614acf565b61161c9190614c9f565b1161165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906150bc565b60405180910390fd5b6000831161169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690615128565b60405180910390fd5b6000810361171757601560008154809291906116ba90615148565b91905055506015549050846018600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600060196000838152602001908152602001600020905081601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016117d193929190615190565b6020604051808303816000875af11580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190614e41565b5061182186856001613737565b6040518060800160405280858360000160008282546118409190614acf565b925050819055815260200160008152602001856001548660000154426118669190614c9f565b6118709190614c6e565b60015487600501546118829190614c6e565b61188c9190614c9f565b6118969190614d15565b83600201546118a59190614acf565b8152602001600015158152506019600084815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28285836002015486600401544260405161195994939291906151c7565b60405180910390a2505050505050565b60085481565b6060600c6006018054806020026020016040519081016040528092919081815260200182805480156119c057602002820191906000526020600020905b8154815260200190600101908083116119ac575b5050505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6000806000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152505090506000606483611aaa9190614c6e565b90506000600267ffffffffffffffff811115611ac957611ac8614305565b5b604051908082528060200260200182016040528015611af75781602001602082028036833780820191505090505b5090506000821115611be05760005b82811015611bde57600060166000838152602001908152602001600020600101541115611b845760016016600083815260200190815260200160002060010154611b509190614acf565b82600081518110611b6457611b6361520c565b5b60200260200101818151611b789190614acf565b91508181525050611bcb565b601660008281526020019081526020016000206001015482600081518110611baf57611bae61520c565b5b60200260200101818151611bc39190614acf565b915081815250505b8080611bd690615148565b915050611b06565b505b60006064601554611bf19190614c6e565b9050808303611c68576001601660008581526020019081526020016000206001015483600081518110611c2757611c2661520c565b5b6020026020010151611c399190614acf565b611c439190614c9f565b82600181518110611c5757611c5661520c565b5b602002602001018181525050611cc6565b601660008481526020019081526020016000206001015482600081518110611c9357611c9261520c565b5b6020026020010151611ca59190614acf565b82600181518110611cb957611cb861520c565b5b6020026020010181815250505b6001851115611d7b576000606484611cde9190614d15565b90505b85811015611d4c57600060196000838152602001908152602001600020600201541115611d395760016019600083815260200190815260200160002060020154611d2b9190614acf565b88611d369190614acf565b97505b8080611d4490615148565b915050611ce1565b5081600081518110611d6157611d6061520c565b5b602002602001015187611d749190614acf565b9650611d9a565b81600081518110611d8f57611d8e61520c565b5b602002602001015196505b836040015187611daa9190614acf565b95505050505050915091565b6000600c90506000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490504282600001541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90615050565b60405180910390fd5b4260015483600501548460000154611e5f9190614acf565b611e699190614c9f565b11611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906150bc565b60405180910390fd5b60008311611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615128565b60405180910390fd5b60008103611f645760156000815480929190611f0790615148565b91905055506015549050336018600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600060196000838152602001908152602001600020905081601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161201e93929190615190565b6020604051808303816000875af115801561203d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120619190614e41565b506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120bf9190614595565b602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190614ce8565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b8152600401612181929190614dec565b6020604051808303816000875af11580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630efe6a8b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000886040518463ffffffff1660e01b815260040161224793929190614ea9565b600060405180830381600087803b15801561226157600080fd5b505af1158015612275573d6000803e3d6000fd5b5050505080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122d59190614595565b602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123169190614ce8565b6123209190614c9f565b945061232e33866001613737565b60405180608001604052808684600001600082825461234d9190614acf565b925050819055815260200160008152602001866001548760000154426123739190614c9f565b61237d9190614c6e565b600154886005015461238f9190614c6e565b6123999190614c9f565b6123a39190614d15565b84600201546123b29190614acf565b8152602001600015158152506019600085815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050503373ffffffffffffffffffffffffffffffffffffffff167f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28286846002015487600401544260405161246694939291906151c7565b60405180910390a25050505050565b60155481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005601c9054906101000a900461ffff1681565b60166020528060005260406000206000915090508060000154908060010154905082565b60606000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561259257602002820191906000526020600020905b81548152602001906001019080831161257e575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000806125ce856119f9565b915091506000600c60010160009054906101000a900463ffffffff1663ffffffff1667ffffffffffffffff81111561260957612608614305565b5b6040519080825280602002602001820160405280156126375781602001602082028036833780820191505090505b5090506000805b856020015163ffffffff168163ffffffff161015612719578560c001518163ffffffff16815181106126735761267261520c565b5b602002602001015185111580156126ae5750838660c001518263ffffffff16815181106126a3576126a261520c565b5b602002602001015111155b15612706578560c001518163ffffffff16815181106126d0576126cf61520c565b5b60200260200101518383815181106126eb576126ea61520c565b5b602002602001018181525050818061270290615148565b9250505b80806127119061523b565b91505061263e565b5060008111156127c8578067ffffffffffffffff81111561273d5761273c614305565b5b60405190808252806020026020018201604052801561276b5781602001602082028036833780820191505090505b50955060005b818110156127c65782818151811061278c5761278b61520c565b5b60200260200101518782815181106127a7576127a661520c565b5b60200260200101818152505080806127be90615148565b915050612771565b505b5050505050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359063732826040518263ffffffff1660e01b81526004016128539190614595565b6020604051808303816000875af1158015612872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128969190614e41565b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc906152b3565b60405180910390fd5b60006128e033613c4e565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b815260040161293f929190614dec565b6020604051808303816000875af115801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190614e41565b508173ffffffffffffffffffffffffffffffffffffffff16637d8c8e1f33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016129e293929190615190565b600060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050505050565b60095481565b60606000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015612ad757602002820191906000526020600020905b815481526020019060010190808311612ac3575b50505050508152602001600782015481526020016008820160009054906101000a900460ff1615151515815250509050600080600c60010160009054906101000a900463ffffffff1663ffffffff1667ffffffffffffffff811115612b3f57612b3e614305565b5b604051908082528060200260200182016040528015612b6d5781602001602082028036833780820191505090505b5090506000600190505b6015548111612cf457600080612bbf6018600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f9565b9150915060005b866020015163ffffffff168163ffffffff161015612cde578660c001518163ffffffff1681518110612bfb57612bfa61520c565b5b60200260200101518311158015612c365750818760c001518263ffffffff1681518110612c2b57612c2a61520c565b5b602002602001015111155b15612ccb576018600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858781518110612c8257612c8161520c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508580612cc790615148565b9650505b8080612cd69061523b565b915050612bc6565b5050508080612cec90615148565b915050612b77565b5080935050505090565b60176020528060005260406000206000915090505481565b612d1e6135f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8490615345565b60405180910390fd5b612d9681613673565b50565b600660009054906101000a900463ffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c600401541115612ef2576000815167ffffffffffffffff811115612e0057612dff614305565b5b604051908082528060200260200182016040528015612e2e5781602001602082028036833780820191505090505b50905060005b8251811015612e9a57600c60040154838281518110612e5657612e5561520c565b5b6020026020010151612e689190615365565b828281518110612e7b57612e7a61520c565b5b6020026020010181815250508080612e9290615148565b915050612e34565b5080600c6006019080519060200190612eb492919061423b565b507f11dcc3daef1140ae4bab04a48fd57c63079ac8a4e070cfd3d7a47fe63f1194c8600c600601604051612ee8919061546c565b60405180910390a1505b5050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090506000816000015490506000600c90504260015482600501548360000154612f789190614acf565b612f829190614c9f565b1180612fa057504281600501548260000154612f9e9190614acf565b105b612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690615500565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161305e929190614dec565b6020604051808303816000875af115801561307d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a19190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040518463ffffffff1660e01b815260040161312493929190614ea9565b600060405180830381600087803b15801561313e57600080fd5b505af1158015613152573d6000803e3d6000fd5b50505050428160050154826000015461316b9190614acf565b11156131825761317d85836000613737565b61319e565b818160020160008282546131969190614c9f565b925050819055505b818360000160008282546131b29190614c9f565b92505081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b8152600401613216929190614dec565b6020604051808303816000875af1158015613235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132599190614e41565b50428160050154826000015461326f9190614acf565b101561359e5781836001018190555081600a60008282546132909190614acf565b925050819055506000600a54826007015483600301546132b09190614acf565b6132ba9190614c9f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016133159190614595565b602060405180830381865afa158015613332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133569190614ce8565b6133609190614c9f565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016133e1929190614dec565b6020604051808303816000875af1158015613400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134249190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000846040518463ffffffff1660e01b81526004016134a793929190614ea9565b600060405180830381600087803b1580156134c157600080fd5b505af11580156134d5573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613558929190614dec565b6020604051808303816000875af1158015613577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359b9190614e41565b50505b8473ffffffffffffffffffffffffffffffffffffffff167f54a9763035584fc4fcad1bc4e0e7a83f93e016f50ae32bd527530a77257393ee83426040516135e69291906148cc565b60405180910390a25050505050565b6135fd613ec3565b73ffffffffffffffffffffffffffffffffffffffff1661361b6119ca565b73ffffffffffffffffffffffffffffffffffffffff1614613671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136689061556c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c90506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060196000838152602001908152602001600020905060006064836137a79190614c6e565b90506000861115613c45578415613aa357858460020160008282546137cc9190614acf565b92505081905550856016600083815260200190815260200160002060000160008282546137f99190614acf565b9250508190555060008260020154036138f7576001866001548660000154426138229190614c9f565b61382c9190614c6e565b600154876005015461383e9190614c6e565b6138489190614c9f565b6138529190614d15565b61385c9190614acf565b84600401600082825461386f9190614acf565b9250508190555060018660015486600001544261388c9190614c9f565b6138969190614c6e565b60015487600501546138a89190614c6e565b6138b29190614c9f565b6138bc9190614d15565b6138c69190614acf565b6016600083815260200190815260200160002060010160008282546138eb9190614acf565b925050819055506139c6565b8560015485600001544261390b9190614c9f565b6139159190614c6e565b60015486600501546139279190614c6e565b6139319190614c9f565b61393b9190614d15565b84600401600082825461394e9190614acf565b92505081905550856001548560000154426139699190614c9f565b6139739190614c6e565b60015486600501546139859190614c6e565b61398f9190614c9f565b6139999190614d15565b6016600083815260200190815260200160002060010160008282546139be9190614acf565b925050819055505b606460095460646139d79190614c9f565b8560020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a379190614595565b602060405180830381865afa158015613a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a789190614ce8565b613a829190614c9f565b613a8c9190614d15565b613a969190614c6e565b8460070181905550613c44565b85846002016000828254613ab79190614c9f565b9250508190555060018260020154613acf9190614acf565b846004016000828254613ae29190614c9f565b9250508190555060018260020154613afa9190614acf565b601660008381526020019081526020016000206001016000828254613b1f9190614c9f565b9250508190555085601660008381526020019081526020016000206000016000828254613b4c9190614c9f565b9250508190555060008260020181905550600084600201541115613c435760646009546064613b7b9190614c9f565b8560020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613bdb9190614595565b602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614ce8565b613c269190614c9f565b613c309190614d15565b613c3a9190614c6e565b84600701819055505b5b5b50505050505050565b600080613c5a836124d9565b90506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015613d1357602002820191906000526020600020905b815481526020019060010190808311613cff575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090506000808260030160009054906101000a900460ff1615613df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dea90614dcc565b60405180910390fd5b600086511115613e9157846020015163ffffffff1686518660e00151613e199190614d15565b613e239190614c6e565b905060018360030160006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc6782604051613e88919061453e565b60405180910390a25b600083600001541115613eaa57613ea788613ecb565b91505b8082613eb69190614acf565b9650505050505050919050565b600033905090565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000209050806000015492506000600c90504260015482600501548360000154613f4c9190614acf565b613f569190614c9f565b1180613f7457504281600501548260000154613f729190614acf565b105b613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615500565b60405180910390fd5b4281600501548260000154613fc89190614acf565b1115613fdf57613fda85856000613737565b613ffb565b83816002016000828254613ff39190614c9f565b925050819055505b8382600001600082825461400f9190614c9f565b92505081905550428160050154826000015461402b9190614acf565b10156141e35783826001018190555083600a600082825461404c9190614acf565b925050819055506000600a548260070154836003015461406c9190614acf565b6140769190614c9f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016140d19190614595565b602060405180830381865afa1580156140ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141129190614ce8565b61411c9190614c9f565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161419d929190614dec565b6020604051808303816000875af11580156141bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e09190614e41565b50505b8473ffffffffffffffffffffffffffffffffffffffff167f54a9763035584fc4fcad1bc4e0e7a83f93e016f50ae32bd527530a77257393ee854260405161422b9291906148cc565b60405180910390a2505050919050565b828054828255906000526020600020908101928215614277579160200282015b8281111561427657825182559160200191906001019061425b565b5b5090506142849190614288565b5090565b5b808211156142a1576000816000905550600101614289565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6142cc816142b9565b81146142d757600080fd5b50565b6000813590506142e9816142c3565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61433d826142f4565b810181811067ffffffffffffffff8211171561435c5761435b614305565b5b80604052505050565b600061436f6142a5565b905061437b8282614334565b919050565b600067ffffffffffffffff82111561439b5761439a614305565b5b602082029050602081019050919050565b600080fd5b60006143c46143bf84614380565b614365565b905080838252602082019050602084028301858111156143e7576143e66143ac565b5b835b8181101561441057806143fc88826142da565b8452602084019350506020810190506143e9565b5050509392505050565b600082601f83011261442f5761442e6142ef565b5b813561443f8482602086016143b1565b91505092915050565b6000806040838503121561445f5761445e6142af565b5b600061446d858286016142da565b925050602083013567ffffffffffffffff81111561448e5761448d6142b4565b5b61449a8582860161441a565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144cf826144a4565b9050919050565b6144df816144c4565b81146144ea57600080fd5b50565b6000813590506144fc816144d6565b92915050565b600060208284031215614518576145176142af565b5b6000614526848285016144ed565b91505092915050565b614538816142b9565b82525050565b6000602082019050614553600083018461452f565b92915050565b60006020828403121561456f5761456e6142af565b5b600061457d848285016142da565b91505092915050565b61458f816144c4565b82525050565b60006020820190506145aa6000830184614586565b92915050565b6000819050919050565b60006145d56145d06145cb846144a4565b6145b0565b6144a4565b9050919050565b60006145e7826145ba565b9050919050565b60006145f9826145dc565b9050919050565b614609816145ee565b82525050565b60006020820190506146246000830184614600565b92915050565b60008115159050919050565b61463f8161462a565b82525050565b600060808201905061465a600083018761452f565b614667602083018661452f565b614674604083018561452f565b6146816060830184614636565b95945050505050565b600063ffffffff82169050919050565b6146a38161468a565b82525050565b6000610100820190506146bf600083018b61452f565b6146cc602083018a61469a565b6146d9604083018961452f565b6146e6606083018861452f565b6146f3608083018761452f565b61470060a083018661452f565b61470d60c083018561452f565b61471a60e0830184614636565b9998505050505050505050565b6000819050919050565b61473a81614727565b82525050565b60006020820190506147556000830184614731565b92915050565b600067ffffffffffffffff82169050919050565b6147788161475b565b82525050565b6000602082019050614793600083018461476f565b92915050565b6000806000606084860312156147b2576147b16142af565b5b60006147c0868287016144ed565b93505060206147d1868287016144ed565b92505060406147e2868287016142da565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614821816142b9565b82525050565b60006148338383614818565b60208301905092915050565b6000602082019050919050565b6000614857826147ec565b61486181856147f7565b935061486c83614808565b8060005b8381101561489d5781516148848882614827565b975061488f8361483f565b925050600181019050614870565b5085935050505092915050565b600060208201905081810360008301526148c4818461484c565b905092915050565b60006040820190506148e1600083018561452f565b6148ee602083018461452f565b9392505050565b6000614900826145dc565b9050919050565b614910816148f5565b82525050565b600060208201905061492b6000830184614907565b92915050565b600061ffff82169050919050565b61494881614931565b82525050565b6000602082019050614963600083018461493f565b92915050565b6000614974826145dc565b9050919050565b61498481614969565b82525050565b600060208201905061499f600083018461497b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149da816144c4565b82525050565b60006149ec83836149d1565b60208301905092915050565b6000602082019050919050565b6000614a10826149a5565b614a1a81856149b0565b9350614a25836149c1565b8060005b83811015614a56578151614a3d88826149e0565b9750614a48836149f8565b925050600181019050614a29565b5085935050505092915050565b60006020820190508181036000830152614a7d8184614a05565b905092915050565b6000602082019050614a9a600083018461469a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ada826142b9565b9150614ae5836142b9565b9250828201905080821115614afd57614afc614aa0565b5b92915050565b600082825260208201905092915050565b7f506f6f6c206973207374696c6c20616374697665000000000000000000000000600082015250565b6000614b4a601483614b03565b9150614b5582614b14565b602082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f506f6f6c20697320616c72656164792066696e616c697a656400000000000000600082015250565b6000614bb6601983614b03565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b600060a082019050614c016000830188614731565b614c0e602083018761476f565b614c1b604083018661493f565b614c28606083018561469a565b614c35608083018461469a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c79826142b9565b9150614c84836142b9565b925082614c9457614c93614c3f565b5b828204905092915050565b6000614caa826142b9565b9150614cb5836142b9565b9250828203905081811115614ccd57614ccc614aa0565b5b92915050565b600081519050614ce2816142c3565b92915050565b600060208284031215614cfe57614cfd6142af565b5b6000614d0c84828501614cd3565b91505092915050565b6000614d20826142b9565b9150614d2b836142b9565b9250828202614d39816142b9565b91508282048414831517614d5057614d4f614aa0565b5b5092915050565b6000604082019050614d6c6000830185614586565b614d796020830184614586565b9392505050565b7f526577617264732061726520616c726561647920636c61696d65640000000000600082015250565b6000614db6601b83614b03565b9150614dc182614d80565b602082019050919050565b60006020820190508181036000830152614de581614da9565b9050919050565b6000604082019050614e016000830185614586565b614e0e602083018461452f565b9392505050565b614e1e8161462a565b8114614e2957600080fd5b50565b600081519050614e3b81614e15565b92915050565b600060208284031215614e5757614e566142af565b5b6000614e6584828501614e2c565b91505092915050565b6000819050919050565b6000614e93614e8e614e8984614e6e565b6145b0565b6142b9565b9050919050565b614ea381614e78565b82525050565b6000606082019050614ebe6000830186614586565b614ecb6020830185614e9a565b614ed8604083018461452f565b949350505050565b7f43616c6c65722073686f756c64206265204c6f747465727920636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f3c602183614b03565b9150614f4782614ee0565b604082019050919050565b60006020820190508181036000830152614f6b81614f2f565b9050919050565b7f52657475726e656420746f6b656e732073686f756c642062652074686520736160008201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fce602283614b03565b9150614fd982614f72565b604082019050919050565b60006020820190508181036000830152614ffd81614fc1565b9050919050565b7f506f6f6c206973206e6f74207374617274656420796574000000000000000000600082015250565b600061503a601783614b03565b915061504582615004565b602082019050919050565b600060208201905081810360008301526150698161502d565b9050919050565b7f4e6f7420616c6c6f77656420746f207374616b65206f6e206c61737420646179600082015250565b60006150a6602083614b03565b91506150b182615070565b602082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b7f4e6f7468696e6720746f207374616b6500000000000000000000000000000000600082015250565b6000615112601083614b03565b915061511d826150dc565b602082019050919050565b6000602082019050818103600083015261514181615105565b9050919050565b6000615153826142b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361518557615184614aa0565b5b600182019050919050565b60006060820190506151a56000830186614586565b6151b26020830185614586565b6151bf604083018461452f565b949350505050565b60006080820190506151dc600083018761452f565b6151e9602083018661452f565b6151f6604083018561452f565b615203606083018461452f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006152468261468a565b915063ffffffff820361525c5761525b614aa0565b5b600182019050919050565b7f4c6f747465727920646f6573206e6f7420657869737400000000000000000000600082015250565b600061529d601683614b03565b91506152a882615267565b602082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061532f602683614b03565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b6000615370826142b9565b915061537b836142b9565b92508261538b5761538a614c3f565b5b828206905092915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006153e06153db836153b6565b6153c3565b9050919050565b60006153f382546153cd565b9050919050565b6000600182019050919050565b600061541282615396565b61541c81856147f7565b9350615427836153a1565b8060005b8381101561545f5761543c826153e7565b6154468882614827565b9750615451836153fa565b92505060018101905061542b565b5085935050505092915050565b600060208201905081810360008301526154868184615407565b905092915050565b7f4e6f7420616c6c6f77656420746f20756e7374616b65206f6e206c617374206460008201527f6179000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ea602283614b03565b91506154f58261548e565b604082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615556602083614b03565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b905091905056fea264697066735822122062ff9cc0efddc3d27be99075bdceb7586569660ee8d1c3c691124fb5e7ee0c9b64736f6c634300081400330000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b140000000000000000000000009322f26cee8d536c4bdea5c183395adc30e41e4b0000000000000000000000004237e0a5b55233d5b6d6d1d9bf421723954130d80000000000000000000000004b7708ee3ccbd3f9af68208e69ad31f611e1befe000000000000000000000000f034b3e8d608ce75a84ac90a8a6447757a596e37000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
Deployed ByteCode
0x6080604052600436106101f95760003560e01c80638da5cb5b1161010d578063c23697a8116100a0578063df15c37e1161006f578063df15c37e146106f0578063eda7794e1461071b578063f2fde38b14610758578063f68016b714610781578063fc0c546a146107ac576101f9565b8063c23697a814610634578063c41136cd14610671578063d10279241461069c578063ddca3f43146106c5576101f9565b8063a9a5b781116100dc578063a9a5b78114610575578063aec47759146105a0578063b0fb162f146105cb578063bb760a75146105f6576101f9565b80638da5cb5b146104c55780639668ceb8146104f0578063a58ce16f1461051b578063a694fc3a14610559576101f9565b80635a2f3d09116101905780637b1039991161015f5780637b103999146103f05780637b76ac911461041b5780637d8c8e1f1461044657806382f0622a1461046f57806384350e1d1461049a576101f9565b80635a2f3d091461035157806361728f391461038357806362a58fb8146103ae578063715018a6146103d9576101f9565b806334200355116101cc57806334200355146102925780633bacf26d146102cf5780634e71d92d146102fa57806351d70bc414610311576101f9565b80631e820325146101fe5780631fe543e3146102155780632def66201461023e5780633121e7d714610255575b600080fd5b34801561020a57600080fd5b506102136107d7565b005b34801561022157600080fd5b5061023c60048036038101906102379190614448565b610b48565b005b34801561024a57600080fd5b50610253610c08565b005b34801561026157600080fd5b5061027c60048036038101906102779190614502565b610c13565b604051610289919061453e565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190614559565b610e23565b6040516102c69190614595565b60405180910390f35b3480156102db57600080fd5b506102e4610e56565b6040516102f1919061460f565b60405180910390f35b34801561030657600080fd5b5061030f610e7c565b005b34801561031d57600080fd5b5061033860048036038101906103339190614559565b61130c565b6040516103489493929190614645565b60405180910390f35b34801561035d57600080fd5b50610366611349565b60405161037a9897969594939291906146a9565b60405180910390f35b34801561038f57600080fd5b5061039861139c565b6040516103a59190614740565b60405180910390f35b3480156103ba57600080fd5b506103c36113a2565b6040516103d0919061477e565b60405180910390f35b3480156103e557600080fd5b506103ee6113bc565b005b3480156103fc57600080fd5b506104056113d0565b6040516104129190614595565b60405180910390f35b34801561042757600080fd5b506104306113f6565b60405161043d919061453e565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614799565b6113fc565b005b34801561047b57600080fd5b50610484611969565b604051610491919061453e565b60405180910390f35b3480156104a657600080fd5b506104af61196f565b6040516104bc91906148aa565b60405180910390f35b3480156104d157600080fd5b506104da6119ca565b6040516104e79190614595565b60405180910390f35b3480156104fc57600080fd5b506105056119f3565b604051610512919061453e565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614502565b6119f9565b6040516105509291906148cc565b60405180910390f35b610573600480360381019061056e9190614559565b611db6565b005b34801561058157600080fd5b5061058a612475565b604051610597919061453e565b60405180910390f35b3480156105ac57600080fd5b506105b561247b565b6040516105c29190614916565b60405180910390f35b3480156105d757600080fd5b506105e06124a1565b6040516105ed919061494e565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190614559565b6124b5565b60405161062b9291906148cc565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190614502565b6124d9565b60405161066891906148aa565b60405180910390f35b34801561067d57600080fd5b506106866127d2565b604051610693919061498a565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190614502565b6127f8565b005b3480156106d157600080fd5b506106da612a18565b6040516106e7919061453e565b60405180910390f35b3480156106fc57600080fd5b50610705612a1e565b6040516107129190614a63565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190614502565b612cfe565b60405161074f919061453e565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614502565b612d16565b005b34801561078d57600080fd5b50610796612d99565b6040516107a39190614a85565b60405180910390f35b3480156107b857600080fd5b506107c1612daf565b6040516107ce919061498a565b60405180910390f35b6000600c905042816005015482600001546107f29190614acf565b1115610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90614b60565b60405180910390fd5b8060080160009054906101000a900460ff1615610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90614bcc565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600754600560149054906101000a900467ffffffffffffffff166005601c9054906101000a900461ffff16600660009054906101000a900463ffffffff168660010160009054906101000a900463ffffffff166040518663ffffffff1660e01b8152600401610936959493929190614bec565b600060405180830381600087803b15801561095057600080fd5b505af1158015610964573d6000803e3d6000fd5b5050505080600201548160030181905550600160646015546109869190614c6e565b11156109c2576001606460155461099d9190614c6e565b6109a79190614c9f565b8160040160008282546109ba9190614acf565b925050819055505b600081600201541115610a83578060020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a2f9190614595565b602060405180830381865afa158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a709190614ce8565b610a7a9190614c9f565b81600701819055505b600081600701541115610ae75760646009548260070154610aa49190614d15565b610aae9190614c6e565b60088190555060646009546064610ac59190614c9f565b8260070154610ad49190614d15565b610ade9190614c6e565b81600701819055505b60018160080160006101000a81548160ff0219169083151502179055507f78b1c4f4a995ee0900557ab63afc39e57dcce05ef2e622329233c0a9f0f0ef5e81600701548260020154604051610b3d9291906148cc565b60405180910390a150565b7f0000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b1473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bfa57337f0000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b146040517f1cdc5ebb000000000000000000000000000000000000000000000000000000008152600401610bf1929190614d57565b60405180910390fd5b610c048282612dd5565b5050565b610c1133612ef6565b565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152505090506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610d6a57602002820191906000526020600020905b815481526020019060010190808311610d56575b50505050508152602001600782015481526020016008820160009054906101000a900460ff1615151515815250509050600060018360400151610dad9190614acf565b905060006064601554610dc09190614c6e565b1115610def5760016064601554610dd79190614c6e565b610de19190614c9f565b81610dec9190614acf565b90505b60008260800151905080670de0b6b3a764000083610e0d9190614d15565b610e179190614c6e565b95505050505050919050565b60186020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610e87336124d9565b90506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610f4057602002820191906000526020600020905b815481526020019060010190808311610f2c575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090508060030160009054906101000a900460ff161561101d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101490614dcc565b60405180910390fd5b6000845111156112ef576000836020015163ffffffff1685518560e001516110459190614d15565b61104f9190614c6e565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110d0929190614dec565b6020604051808303816000875af11580156110ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000846040518463ffffffff1660e01b815260040161119693929190614ea9565b600060405180830381600087803b1580156111b057600080fd5b505af11580156111c4573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611225929190614dec565b6020604051808303816000875af1158015611244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112689190614e41565b5060018260030160006101000a81548160ff02191690831515021790555080600a60008282546112989190614acf565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc67826040516112e5919061453e565b60405180910390a2505b6000816000015411156113065761130533612ef6565b5b50505050565b60196020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b600c8060000154908060010160009054906101000a900463ffffffff16908060020154908060030154908060040154908060050154908060070154908060080160009054906101000a900460ff16905088565b60075481565b600560149054906101000a900467ffffffffffffffff1681565b6113c46135f5565b6113ce6000613673565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359063732336040518263ffffffff1660e01b81526004016114579190614595565b6020604051808303816000875af1158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190614e41565b6114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614f52565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090614fe4565b60405180910390fd5b6000600c90506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905042826000015411156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190615050565b60405180910390fd5b42600154836005015484600001546116129190614acf565b61161c9190614c9f565b1161165c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611653906150bc565b60405180910390fd5b6000831161169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690615128565b60405180910390fd5b6000810361171757601560008154809291906116ba90615148565b91905055506015549050846018600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600060196000838152602001908152602001600020905081601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016117d193929190615190565b6020604051808303816000875af11580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190614e41565b5061182186856001613737565b6040518060800160405280858360000160008282546118409190614acf565b925050819055815260200160008152602001856001548660000154426118669190614c9f565b6118709190614c6e565b60015487600501546118829190614c6e565b61188c9190614c9f565b6118969190614d15565b83600201546118a59190614acf565b8152602001600015158152506019600084815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28285836002015486600401544260405161195994939291906151c7565b60405180910390a2505050505050565b60085481565b6060600c6006018054806020026020016040519081016040528092919081815260200182805480156119c057602002820191906000526020600020905b8154815260200190600101908083116119ac575b5050505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a5481565b6000806000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16151515158152505090506000606483611aaa9190614c6e565b90506000600267ffffffffffffffff811115611ac957611ac8614305565b5b604051908082528060200260200182016040528015611af75781602001602082028036833780820191505090505b5090506000821115611be05760005b82811015611bde57600060166000838152602001908152602001600020600101541115611b845760016016600083815260200190815260200160002060010154611b509190614acf565b82600081518110611b6457611b6361520c565b5b60200260200101818151611b789190614acf565b91508181525050611bcb565b601660008281526020019081526020016000206001015482600081518110611baf57611bae61520c565b5b60200260200101818151611bc39190614acf565b915081815250505b8080611bd690615148565b915050611b06565b505b60006064601554611bf19190614c6e565b9050808303611c68576001601660008581526020019081526020016000206001015483600081518110611c2757611c2661520c565b5b6020026020010151611c399190614acf565b611c439190614c9f565b82600181518110611c5757611c5661520c565b5b602002602001018181525050611cc6565b601660008481526020019081526020016000206001015482600081518110611c9357611c9261520c565b5b6020026020010151611ca59190614acf565b82600181518110611cb957611cb861520c565b5b6020026020010181815250505b6001851115611d7b576000606484611cde9190614d15565b90505b85811015611d4c57600060196000838152602001908152602001600020600201541115611d395760016019600083815260200190815260200160002060020154611d2b9190614acf565b88611d369190614acf565b97505b8080611d4490615148565b915050611ce1565b5081600081518110611d6157611d6061520c565b5b602002602001015187611d749190614acf565b9650611d9a565b81600081518110611d8f57611d8e61520c565b5b602002602001015196505b836040015187611daa9190614acf565b95505050505050915091565b6000600c90506000601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490504282600001541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90615050565b60405180910390fd5b4260015483600501548460000154611e5f9190614acf565b611e699190614c9f565b11611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906150bc565b60405180910390fd5b60008311611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390615128565b60405180910390fd5b60008103611f645760156000815480929190611f0790615148565b91905055506015549050336018600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600060196000838152602001908152602001600020905081601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b815260040161201e93929190615190565b6020604051808303816000875af115801561203d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120619190614e41565b506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120bf9190614595565b602060405180830381865afa1580156120dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121009190614ce8565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b8152600401612181929190614dec565b6020604051808303816000875af11580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630efe6a8b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000886040518463ffffffff1660e01b815260040161224793929190614ea9565b600060405180830381600087803b15801561226157600080fd5b505af1158015612275573d6000803e3d6000fd5b5050505080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122d59190614595565b602060405180830381865afa1580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123169190614ce8565b6123209190614c9f565b945061232e33866001613737565b60405180608001604052808684600001600082825461234d9190614acf565b925050819055815260200160008152602001866001548760000154426123739190614c9f565b61237d9190614c6e565b600154886005015461238f9190614c6e565b6123999190614c9f565b6123a39190614d15565b84600201546123b29190614acf565b8152602001600015158152506019600085815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055509050503373ffffffffffffffffffffffffffffffffffffffff167f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28286846002015487600401544260405161246694939291906151c7565b60405180910390a25050505050565b60155481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005601c9054906101000a900461ffff1681565b60166020528060005260406000206000915090508060000154908060010154905082565b60606000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561259257602002820191906000526020600020905b81548152602001906001019080831161257e575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000806125ce856119f9565b915091506000600c60010160009054906101000a900463ffffffff1663ffffffff1667ffffffffffffffff81111561260957612608614305565b5b6040519080825280602002602001820160405280156126375781602001602082028036833780820191505090505b5090506000805b856020015163ffffffff168163ffffffff161015612719578560c001518163ffffffff16815181106126735761267261520c565b5b602002602001015185111580156126ae5750838660c001518263ffffffff16815181106126a3576126a261520c565b5b602002602001015111155b15612706578560c001518163ffffffff16815181106126d0576126cf61520c565b5b60200260200101518383815181106126eb576126ea61520c565b5b602002602001018181525050818061270290615148565b9250505b80806127119061523b565b91505061263e565b5060008111156127c8578067ffffffffffffffff81111561273d5761273c614305565b5b60405190808252806020026020018201604052801561276b5781602001602082028036833780820191505090505b50955060005b818110156127c65782818151811061278c5761278b61520c565b5b60200260200101518782815181106127a7576127a661520c565b5b60200260200101818152505080806127be90615148565b915050612771565b505b5050505050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359063732826040518263ffffffff1660e01b81526004016128539190614595565b6020604051808303816000875af1158015612872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128969190614e41565b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc906152b3565b60405180910390fd5b60006128e033613c4e565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b815260040161293f929190614dec565b6020604051808303816000875af115801561295e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129829190614e41565b508173ffffffffffffffffffffffffffffffffffffffff16637d8c8e1f33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016129e293929190615190565b600060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050505050565b60095481565b60606000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015612ad757602002820191906000526020600020905b815481526020019060010190808311612ac3575b50505050508152602001600782015481526020016008820160009054906101000a900460ff1615151515815250509050600080600c60010160009054906101000a900463ffffffff1663ffffffff1667ffffffffffffffff811115612b3f57612b3e614305565b5b604051908082528060200260200182016040528015612b6d5781602001602082028036833780820191505090505b5090506000600190505b6015548111612cf457600080612bbf6018600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f9565b9150915060005b866020015163ffffffff168163ffffffff161015612cde578660c001518163ffffffff1681518110612bfb57612bfa61520c565b5b60200260200101518311158015612c365750818760c001518263ffffffff1681518110612c2b57612c2a61520c565b5b602002602001015111155b15612ccb576018600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858781518110612c8257612c8161520c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508580612cc790615148565b9650505b8080612cd69061523b565b915050612bc6565b5050508080612cec90615148565b915050612b77565b5080935050505090565b60176020528060005260406000206000915090505481565b612d1e6135f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8490615345565b60405180910390fd5b612d9681613673565b50565b600660009054906101000a900463ffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c600401541115612ef2576000815167ffffffffffffffff811115612e0057612dff614305565b5b604051908082528060200260200182016040528015612e2e5781602001602082028036833780820191505090505b50905060005b8251811015612e9a57600c60040154838281518110612e5657612e5561520c565b5b6020026020010151612e689190615365565b828281518110612e7b57612e7a61520c565b5b6020026020010181815250508080612e9290615148565b915050612e34565b5080600c6006019080519060200190612eb492919061423b565b507f11dcc3daef1140ae4bab04a48fd57c63079ac8a4e070cfd3d7a47fe63f1194c8600c600601604051612ee8919061546c565b60405180910390a1505b5050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090506000816000015490506000600c90504260015482600501548360000154612f789190614acf565b612f829190614c9f565b1180612fa057504281600501548260000154612f9e9190614acf565b105b612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd690615500565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161305e929190614dec565b6020604051808303816000875af115801561307d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a19190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040518463ffffffff1660e01b815260040161312493929190614ea9565b600060405180830381600087803b15801561313e57600080fd5b505af1158015613152573d6000803e3d6000fd5b50505050428160050154826000015461316b9190614acf565b11156131825761317d85836000613737565b61319e565b818160020160008282546131969190614c9f565b925050819055505b818360000160008282546131b29190614c9f565b92505081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b8152600401613216929190614dec565b6020604051808303816000875af1158015613235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132599190614e41565b50428160050154826000015461326f9190614acf565b101561359e5781836001018190555081600a60008282546132909190614acf565b925050819055506000600a54826007015483600301546132b09190614acf565b6132ba9190614c9f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016133159190614595565b602060405180830381865afa158015613332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133569190614ce8565b6133609190614c9f565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016133e1929190614dec565b6020604051808303816000875af1158015613400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134249190614e41565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f672600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000846040518463ffffffff1660e01b81526004016134a793929190614ea9565b600060405180830381600087803b1580156134c157600080fd5b505af11580156134d5573d6000803e3d6000fd5b50505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613558929190614dec565b6020604051808303816000875af1158015613577573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359b9190614e41565b50505b8473ffffffffffffffffffffffffffffffffffffffff167f54a9763035584fc4fcad1bc4e0e7a83f93e016f50ae32bd527530a77257393ee83426040516135e69291906148cc565b60405180910390a25050505050565b6135fd613ec3565b73ffffffffffffffffffffffffffffffffffffffff1661361b6119ca565b73ffffffffffffffffffffffffffffffffffffffff1614613671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136689061556c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600c90506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060196000838152602001908152602001600020905060006064836137a79190614c6e565b90506000861115613c45578415613aa357858460020160008282546137cc9190614acf565b92505081905550856016600083815260200190815260200160002060000160008282546137f99190614acf565b9250508190555060008260020154036138f7576001866001548660000154426138229190614c9f565b61382c9190614c6e565b600154876005015461383e9190614c6e565b6138489190614c9f565b6138529190614d15565b61385c9190614acf565b84600401600082825461386f9190614acf565b9250508190555060018660015486600001544261388c9190614c9f565b6138969190614c6e565b60015487600501546138a89190614c6e565b6138b29190614c9f565b6138bc9190614d15565b6138c69190614acf565b6016600083815260200190815260200160002060010160008282546138eb9190614acf565b925050819055506139c6565b8560015485600001544261390b9190614c9f565b6139159190614c6e565b60015486600501546139279190614c6e565b6139319190614c9f565b61393b9190614d15565b84600401600082825461394e9190614acf565b92505081905550856001548560000154426139699190614c9f565b6139739190614c6e565b60015486600501546139859190614c6e565b61398f9190614c9f565b6139999190614d15565b6016600083815260200190815260200160002060010160008282546139be9190614acf565b925050819055505b606460095460646139d79190614c9f565b8560020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a379190614595565b602060405180830381865afa158015613a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a789190614ce8565b613a829190614c9f565b613a8c9190614d15565b613a969190614c6e565b8460070181905550613c44565b85846002016000828254613ab79190614c9f565b9250508190555060018260020154613acf9190614acf565b846004016000828254613ae29190614c9f565b9250508190555060018260020154613afa9190614acf565b601660008381526020019081526020016000206001016000828254613b1f9190614c9f565b9250508190555085601660008381526020019081526020016000206000016000828254613b4c9190614c9f565b9250508190555060008260020181905550600084600201541115613c435760646009546064613b7b9190614c9f565b8560020154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613bdb9190614595565b602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614ce8565b613c269190614c9f565b613c309190614d15565b613c3a9190614c6e565b84600701819055505b5b5b50505050505050565b600080613c5a836124d9565b90506000600c60405180610120016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015613d1357602002820191906000526020600020905b815481526020019060010190808311613cff575b50505050508152602001600782015481526020016008820160009054906101000a900460ff16151515158152505090506000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006019600083815260200190815260200160002090506000808260030160009054906101000a900460ff1615613df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dea90614dcc565b60405180910390fd5b600086511115613e9157846020015163ffffffff1686518660e00151613e199190614d15565b613e239190614c6e565b905060018360030160006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff167f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc6782604051613e88919061453e565b60405180910390a25b600083600001541115613eaa57613ea788613ecb565b91505b8082613eb69190614acf565b9650505050505050919050565b600033905090565b600080601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601960008381526020019081526020016000209050806000015492506000600c90504260015482600501548360000154613f4c9190614acf565b613f569190614c9f565b1180613f7457504281600501548260000154613f729190614acf565b105b613fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613faa90615500565b60405180910390fd5b4281600501548260000154613fc89190614acf565b1115613fdf57613fda85856000613737565b613ffb565b83816002016000828254613ff39190614c9f565b925050819055505b8382600001600082825461400f9190614c9f565b92505081905550428160050154826000015461402b9190614acf565b10156141e35783826001018190555083600a600082825461404c9190614acf565b925050819055506000600a548260070154836003015461406c9190614acf565b6140769190614c9f565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016140d19190614595565b602060405180830381865afa1580156140ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141129190614ce8565b61411c9190614c9f565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161419d929190614dec565b6020604051808303816000875af11580156141bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e09190614e41565b50505b8473ffffffffffffffffffffffffffffffffffffffff167f54a9763035584fc4fcad1bc4e0e7a83f93e016f50ae32bd527530a77257393ee854260405161422b9291906148cc565b60405180910390a2505050919050565b828054828255906000526020600020908101928215614277579160200282015b8281111561427657825182559160200191906001019061425b565b5b5090506142849190614288565b5090565b5b808211156142a1576000816000905550600101614289565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6142cc816142b9565b81146142d757600080fd5b50565b6000813590506142e9816142c3565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61433d826142f4565b810181811067ffffffffffffffff8211171561435c5761435b614305565b5b80604052505050565b600061436f6142a5565b905061437b8282614334565b919050565b600067ffffffffffffffff82111561439b5761439a614305565b5b602082029050602081019050919050565b600080fd5b60006143c46143bf84614380565b614365565b905080838252602082019050602084028301858111156143e7576143e66143ac565b5b835b8181101561441057806143fc88826142da565b8452602084019350506020810190506143e9565b5050509392505050565b600082601f83011261442f5761442e6142ef565b5b813561443f8482602086016143b1565b91505092915050565b6000806040838503121561445f5761445e6142af565b5b600061446d858286016142da565b925050602083013567ffffffffffffffff81111561448e5761448d6142b4565b5b61449a8582860161441a565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144cf826144a4565b9050919050565b6144df816144c4565b81146144ea57600080fd5b50565b6000813590506144fc816144d6565b92915050565b600060208284031215614518576145176142af565b5b6000614526848285016144ed565b91505092915050565b614538816142b9565b82525050565b6000602082019050614553600083018461452f565b92915050565b60006020828403121561456f5761456e6142af565b5b600061457d848285016142da565b91505092915050565b61458f816144c4565b82525050565b60006020820190506145aa6000830184614586565b92915050565b6000819050919050565b60006145d56145d06145cb846144a4565b6145b0565b6144a4565b9050919050565b60006145e7826145ba565b9050919050565b60006145f9826145dc565b9050919050565b614609816145ee565b82525050565b60006020820190506146246000830184614600565b92915050565b60008115159050919050565b61463f8161462a565b82525050565b600060808201905061465a600083018761452f565b614667602083018661452f565b614674604083018561452f565b6146816060830184614636565b95945050505050565b600063ffffffff82169050919050565b6146a38161468a565b82525050565b6000610100820190506146bf600083018b61452f565b6146cc602083018a61469a565b6146d9604083018961452f565b6146e6606083018861452f565b6146f3608083018761452f565b61470060a083018661452f565b61470d60c083018561452f565b61471a60e0830184614636565b9998505050505050505050565b6000819050919050565b61473a81614727565b82525050565b60006020820190506147556000830184614731565b92915050565b600067ffffffffffffffff82169050919050565b6147788161475b565b82525050565b6000602082019050614793600083018461476f565b92915050565b6000806000606084860312156147b2576147b16142af565b5b60006147c0868287016144ed565b93505060206147d1868287016144ed565b92505060406147e2868287016142da565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614821816142b9565b82525050565b60006148338383614818565b60208301905092915050565b6000602082019050919050565b6000614857826147ec565b61486181856147f7565b935061486c83614808565b8060005b8381101561489d5781516148848882614827565b975061488f8361483f565b925050600181019050614870565b5085935050505092915050565b600060208201905081810360008301526148c4818461484c565b905092915050565b60006040820190506148e1600083018561452f565b6148ee602083018461452f565b9392505050565b6000614900826145dc565b9050919050565b614910816148f5565b82525050565b600060208201905061492b6000830184614907565b92915050565b600061ffff82169050919050565b61494881614931565b82525050565b6000602082019050614963600083018461493f565b92915050565b6000614974826145dc565b9050919050565b61498481614969565b82525050565b600060208201905061499f600083018461497b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149da816144c4565b82525050565b60006149ec83836149d1565b60208301905092915050565b6000602082019050919050565b6000614a10826149a5565b614a1a81856149b0565b9350614a25836149c1565b8060005b83811015614a56578151614a3d88826149e0565b9750614a48836149f8565b925050600181019050614a29565b5085935050505092915050565b60006020820190508181036000830152614a7d8184614a05565b905092915050565b6000602082019050614a9a600083018461469a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ada826142b9565b9150614ae5836142b9565b9250828201905080821115614afd57614afc614aa0565b5b92915050565b600082825260208201905092915050565b7f506f6f6c206973207374696c6c20616374697665000000000000000000000000600082015250565b6000614b4a601483614b03565b9150614b5582614b14565b602082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f506f6f6c20697320616c72656164792066696e616c697a656400000000000000600082015250565b6000614bb6601983614b03565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b600060a082019050614c016000830188614731565b614c0e602083018761476f565b614c1b604083018661493f565b614c28606083018561469a565b614c35608083018461469a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c79826142b9565b9150614c84836142b9565b925082614c9457614c93614c3f565b5b828204905092915050565b6000614caa826142b9565b9150614cb5836142b9565b9250828203905081811115614ccd57614ccc614aa0565b5b92915050565b600081519050614ce2816142c3565b92915050565b600060208284031215614cfe57614cfd6142af565b5b6000614d0c84828501614cd3565b91505092915050565b6000614d20826142b9565b9150614d2b836142b9565b9250828202614d39816142b9565b91508282048414831517614d5057614d4f614aa0565b5b5092915050565b6000604082019050614d6c6000830185614586565b614d796020830184614586565b9392505050565b7f526577617264732061726520616c726561647920636c61696d65640000000000600082015250565b6000614db6601b83614b03565b9150614dc182614d80565b602082019050919050565b60006020820190508181036000830152614de581614da9565b9050919050565b6000604082019050614e016000830185614586565b614e0e602083018461452f565b9392505050565b614e1e8161462a565b8114614e2957600080fd5b50565b600081519050614e3b81614e15565b92915050565b600060208284031215614e5757614e566142af565b5b6000614e6584828501614e2c565b91505092915050565b6000819050919050565b6000614e93614e8e614e8984614e6e565b6145b0565b6142b9565b9050919050565b614ea381614e78565b82525050565b6000606082019050614ebe6000830186614586565b614ecb6020830185614e9a565b614ed8604083018461452f565b949350505050565b7f43616c6c65722073686f756c64206265204c6f747465727920636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f3c602183614b03565b9150614f4782614ee0565b604082019050919050565b60006020820190508181036000830152614f6b81614f2f565b9050919050565b7f52657475726e656420746f6b656e732073686f756c642062652074686520736160008201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fce602283614b03565b9150614fd982614f72565b604082019050919050565b60006020820190508181036000830152614ffd81614fc1565b9050919050565b7f506f6f6c206973206e6f74207374617274656420796574000000000000000000600082015250565b600061503a601783614b03565b915061504582615004565b602082019050919050565b600060208201905081810360008301526150698161502d565b9050919050565b7f4e6f7420616c6c6f77656420746f207374616b65206f6e206c61737420646179600082015250565b60006150a6602083614b03565b91506150b182615070565b602082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b7f4e6f7468696e6720746f207374616b6500000000000000000000000000000000600082015250565b6000615112601083614b03565b915061511d826150dc565b602082019050919050565b6000602082019050818103600083015261514181615105565b9050919050565b6000615153826142b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361518557615184614aa0565b5b600182019050919050565b60006060820190506151a56000830186614586565b6151b26020830185614586565b6151bf604083018461452f565b949350505050565b60006080820190506151dc600083018761452f565b6151e9602083018661452f565b6151f6604083018561452f565b615203606083018461452f565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006152468261468a565b915063ffffffff820361525c5761525b614aa0565b5b600182019050919050565b7f4c6f747465727920646f6573206e6f7420657869737400000000000000000000600082015250565b600061529d601683614b03565b91506152a882615267565b602082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061532f602683614b03565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b6000615370826142b9565b915061537b836142b9565b92508261538b5761538a614c3f565b5b828206905092915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006153e06153db836153b6565b6153c3565b9050919050565b60006153f382546153cd565b9050919050565b6000600182019050919050565b600061541282615396565b61541c81856147f7565b9350615427836153a1565b8060005b8381101561545f5761543c826153e7565b6154468882614827565b9750615451836153fa565b92505060018101905061542b565b5085935050505092915050565b600060208201905081810360008301526154868184615407565b905092915050565b7f4e6f7420616c6c6f77656420746f20756e7374616b65206f6e206c617374206460008201527f6179000000000000000000000000000000000000000000000000000000000000602082015250565b60006154ea602283614b03565b91506154f58261548e565b604082019050919050565b60006020820190508181036000830152615519816154dd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615556602083614b03565b915061556182615520565b602082019050919050565b6000602082019050818103600083015261558581615549565b905091905056fea264697066735822122062ff9cc0efddc3d27be99075bdceb7586569660ee8d1c3c691124fb5e7ee0c9b64736f6c63430008140033