Address Details
contract
token

0xc8DF51073CD581902b4fb50131d31f29343131F0

Token
ChinChilla Gang (GANG)
Creator
0x755c62–cf6c31 at 0xa172db–009932
Balance
21 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
2,459 Transactions
Transfers
1,558 Transfers
Gas Used
661,684,831
Last Balance Update
26697948
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
ChinChillaGang




Optimization enabled
false
Compiler version
v0.8.7+commit.e28d00a7




EVM Version
london




Verified at
2022-02-18T21:23:09.343113Z

contracts/ChinChilla Gang.sol

// ChinChilla Gang 
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract ChinChillaGang is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 3 ether;
  uint256 public maxSupply = 8888;
  uint256 public maxMintAmount = 100;
  uint256 public nftPerAddressLimit = 6;
  bool public paused = false;
  bool public revealed = false;
  bool public onlyWhitelisted = true;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    mint(100);
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public
  function mint(uint256 _mintAmount) public payable {
    require(!paused);
    uint256 supply = totalSupply();
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
        if (onlyWhitelisted == true) {
            require(isWhitelisted(msg.sender), "User is not whitelisted");
            uint256 ownerMinterCount = addressMintedBalance[msg.sender];
            require(ownerMinterCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded");
        }
        require(msg.value >= cost * _mintAmount);
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }

  function isWhitelisted(address _user) public view returns (bool) {
      for(uint256 i = 0; i < whitelistedAddresses.length;i++) {
          if(whitelistedAddresses[i] == _user) {
              return true;
          }
      }
      return false;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }

  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }
 
  function whitelistUser(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }

  function withdraw() public payable onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_symbol","internalType":"string"},{"type":"string","name":"_initBaseURI","internalType":"string"},{"type":"string","name":"_initNotRevealedUri","internalType":"string"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"approved","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","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":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"addressMintedBalance","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approve","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"baseExtension","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"baseURI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"cost","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelisted","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxMintAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxSupply","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"mint","inputs":[{"type":"uint256","name":"_mintAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nftPerAddressLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"notRevealedUri","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"onlyWhitelisted","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pause","inputs":[{"type":"bool","name":"_state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reveal","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"revealed","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBaseExtension","inputs":[{"type":"string","name":"_newBaseExtension","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBaseURI","inputs":[{"type":"string","name":"_newBaseURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setCost","inputs":[{"type":"uint256","name":"_newCost","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNftPerAddressLimit","inputs":[{"type":"uint256","name":"_limit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNotRevealedURI","inputs":[{"type":"string","name":"_notRevealedURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOnlyWhitelisted","inputs":[{"type":"bool","name":"_state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setmaxMintAmount","inputs":[{"type":"uint256","name":"_newmaxMintAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenByIndex","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenOfOwnerByIndex","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"walletOfOwner","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistUser","inputs":[{"type":"address[]","name":"_users","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"whitelistedAddresses","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"withdraw","inputs":[]}]
              

Contract Creation Code

0x60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620010f7565b506729a2241af62c0000600e556122b8600f55606460105560066011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000cc57600080fd5b506040516200689a3803806200689a8339818101604052810190620000f291906200126e565b838381600090805190602001906200010c929190620010f7565b50806001908051906020019062000125929190620010f7565b505050620001486200013c6200018660201b60201c565b6200018e60201b60201c565b62000159826200025460201b60201c565b6200016a81620002ff60201b60201c565b6200017c6064620003aa60201b60201c565b5050505062001b86565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002646200018660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200028a6200062060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002da90620015ce565b60405180910390fd5b80600b9080519060200190620002fb929190620010f7565b5050565b6200030f6200018660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003356200062060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038590620015ce565b60405180910390fd5b80600d9080519060200190620003a6929190620010f7565b5050565b601260009054906101000a900460ff1615620003c557600080fd5b6000620003d76200064a60201b60201c565b905060008211620003e757600080fd5b601054821115620003f757600080fd5b600f5482826200040891906200169e565b11156200041457600080fd5b620004246200062060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005805760011515601260029054906101000a900460ff1615151415620005625762000485336200065760201b60201c565b620004c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004be9062001568565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826200051c91906200169e565b111562000560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055790620015f0565b60405180910390fd5b505b81600e54620005729190620016fb565b3410156200057f57600080fd5b5b6000600190505b8281116200061b57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620005e190620018a3565b919050555062000605338284620005f991906200169e565b6200070f60201b60201c565b80806200061290620018a3565b91505062000587565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b600080600090505b60138054905081101562000704578273ffffffffffffffffffffffffffffffffffffffff16601382815481106200069b576200069a6200197e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620006ee5760019150506200070a565b8080620006fb90620018a3565b9150506200065f565b50600090505b919050565b620007318282604051806020016040528060008152506200073560201b60201c565b5050565b620007478383620007a360201b60201c565b6200075c60008484846200098960201b60201c565b6200079e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007959062001524565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000816576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080d90620015ac565b60405180910390fd5b620008278162000b4360201b60201c565b156200086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008619062001546565b60405180910390fd5b6200087e6000838362000baf60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008d091906200169e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620009b78473ffffffffffffffffffffffffffffffffffffffff1662000cf660201b620021641760201c565b1562000b36578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009e96200018660201b60201c565b8786866040518563ffffffff1660e01b815260040162000a0d9493929190620014d0565b602060405180830381600087803b15801562000a2857600080fd5b505af192505050801562000a5c57506040513d601f19601f8201168201806040525081019062000a5991906200123c565b60015b62000ae5573d806000811462000a8f576040519150601f19603f3d011682016040523d82523d6000602084013e62000a94565b606091505b5060008151141562000add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad49062001524565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000b3b565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000bc783838362000d0960201b620021771760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000c145762000c0e8162000d0e60201b60201c565b62000c5c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c5b5762000c5a838262000d5760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ca95762000ca38162000ed460201b60201c565b62000cf1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000cf05762000cef828262000fb060201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000d71846200103c60201b620015731760201c565b62000d7d91906200175c565b905060006007600084815260200190815260200160002054905081811462000e63576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000eea91906200175c565b905060006009600084815260200190815260200160002054905060006008838154811062000f1d5762000f1c6200197e565b5b90600052602060002001549050806008838154811062000f425762000f416200197e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f945762000f936200194f565b5b6001900381819060005260206000200160009055905550505050565b600062000fc8836200103c60201b620015731760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620010b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010a7906200158a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620011059062001837565b90600052602060002090601f01602090048101928262001129576000855562001175565b82601f106200114457805160ff191683800117855562001175565b8280016001018555821562001175579182015b828111156200117457825182559160200191906001019062001157565b5b50905062001184919062001188565b5090565b5b80821115620011a357600081600090555060010162001189565b5090565b6000620011be620011b8846200163b565b62001612565b905082815260208101848484011115620011dd57620011dc620019e1565b5b620011ea84828562001801565b509392505050565b600081519050620012038162001b6c565b92915050565b600082601f830112620012215762001220620019dc565b5b815162001233848260208601620011a7565b91505092915050565b600060208284031215620012555762001254620019eb565b5b60006200126584828501620011f2565b91505092915050565b600080600080608085870312156200128b576200128a620019eb565b5b600085015167ffffffffffffffff811115620012ac57620012ab620019e6565b5b620012ba8782880162001209565b945050602085015167ffffffffffffffff811115620012de57620012dd620019e6565b5b620012ec8782880162001209565b935050604085015167ffffffffffffffff81111562001310576200130f620019e6565b5b6200131e8782880162001209565b925050606085015167ffffffffffffffff811115620013425762001341620019e6565b5b620013508782880162001209565b91505092959194509250565b620013678162001797565b82525050565b60006200137a8262001671565b6200138681856200167c565b93506200139881856020860162001801565b620013a381620019f0565b840191505092915050565b6000620013bd6032836200168d565b9150620013ca8262001a01565b604082019050919050565b6000620013e4601c836200168d565b9150620013f18262001a50565b602082019050919050565b60006200140b6017836200168d565b9150620014188262001a79565b602082019050919050565b600062001432602a836200168d565b91506200143f8262001aa2565b604082019050919050565b6000620014596020836200168d565b9150620014668262001af1565b602082019050919050565b6000620014806020836200168d565b91506200148d8262001b1a565b602082019050919050565b6000620014a7601c836200168d565b9150620014b48262001b43565b602082019050919050565b620014ca81620017f7565b82525050565b6000608082019050620014e760008301876200135c565b620014f660208301866200135c565b620015056040830185620014bf565b81810360608301526200151981846200136d565b905095945050505050565b600060208201905081810360008301526200153f81620013ae565b9050919050565b600060208201905081810360008301526200156181620013d5565b9050919050565b600060208201905081810360008301526200158381620013fc565b9050919050565b60006020820190508181036000830152620015a58162001423565b9050919050565b60006020820190508181036000830152620015c7816200144a565b9050919050565b60006020820190508181036000830152620015e98162001471565b9050919050565b600060208201905081810360008301526200160b8162001498565b9050919050565b60006200161e62001631565b90506200162c82826200186d565b919050565b6000604051905090565b600067ffffffffffffffff821115620016595762001658620019ad565b5b6200166482620019f0565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620016ab82620017f7565b9150620016b883620017f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620016f057620016ef620018f1565b5b828201905092915050565b60006200170882620017f7565b91506200171583620017f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620017515762001750620018f1565b5b828202905092915050565b60006200176982620017f7565b91506200177683620017f7565b9250828210156200178c576200178b620018f1565b5b828203905092915050565b6000620017a482620017d7565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200182157808201518184015260208101905062001804565b8381111562001831576000848401525b50505050565b600060028204905060018216806200185057607f821691505b6020821081141562001867576200186662001920565b5b50919050565b6200187882620019f0565b810181811067ffffffffffffffff821117156200189a5762001899620019ad565b5b80604052505050565b6000620018b082620017f7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620018e657620018e5620018f1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b62001b7781620017ab565b811462001b8357600080fd5b50565b614d048062001b966000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063a475b5dd116100c1578063d0eb26b01161007a578063d0eb26b01461095c578063d5abeb0114610985578063da3ef23f146109b0578063e985e9c5146109d9578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063a475b5dd1461084c578063b88d4fde14610863578063ba4e5c491461088c578063ba7d2c76146108c9578063c6682862146108f4578063c87b56dd1461091f57610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639b6fbf8a146107b35780639c70b512146107dc578063a0712d6814610807578063a22cb4651461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906138e9565b610a68565b6040516102ab9190613f3b565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906138bc565b610ae2565b005b3480156102e957600080fd5b506102f2610b7b565b6040516102ff9190613f56565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a919061398c565b610c0d565b60405161033c9190613eb2565b60405180910390f35b34801561035157600080fd5b5061035a610c92565b6040516103679190613f56565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061382f565b610d20565b005b3480156103a557600080fd5b506103ae610e38565b6040516103bb91906141f8565b60405180910390f35b3480156103d057600080fd5b506103d9610e3e565b6040516103e691906141f8565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906136ac565b610e4b565b60405161042391906141f8565b60405180910390f35b34801561043857600080fd5b50610441610e63565b60405161044e91906141f8565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613719565b610e69565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061382f565b610ec9565b6040516104b491906141f8565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906136ac565b610f6e565b6040516104f19190613f3b565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906138bc565b61101d565b005b61052b6110b6565b005b34801561053957600080fd5b50610554600480360381019061054f9190613719565b6111b2565b005b34801561056257600080fd5b5061057d600480360381019061057891906136ac565b6111d2565b60405161058a9190613f19565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061398c565b611280565b005b3480156105c857600080fd5b506105e360048036038101906105de919061398c565b611306565b6040516105f091906141f8565b60405180910390f35b34801561060557600080fd5b5061060e611377565b60405161061b9190613f3b565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613943565b61138a565b005b34801561065957600080fd5b50610662611420565b60405161066f9190613f3b565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061398c565b611433565b6040516106ac9190613eb2565b60405180910390f35b3480156106c157600080fd5b506106ca6114e5565b6040516106d79190613f56565b60405180910390f35b3480156106ec57600080fd5b50610707600480360381019061070291906136ac565b611573565b60405161071491906141f8565b60405180910390f35b34801561072957600080fd5b5061073261162b565b005b34801561074057600080fd5b5061075b6004803603810190610756919061398c565b6116b3565b005b34801561076957600080fd5b50610772611739565b60405161077f9190613eb2565b60405180910390f35b34801561079457600080fd5b5061079d611763565b6040516107aa9190613f56565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061386f565b6117f5565b005b3480156107e857600080fd5b506107f1611895565b6040516107fe9190613f3b565b60405180910390f35b610821600480360381019061081c919061398c565b6118a8565b005b34801561082f57600080fd5b5061084a600480360381019061084591906137ef565b611ae3565b005b34801561085857600080fd5b50610861611af9565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061376c565b611b92565b005b34801561089857600080fd5b506108b360048036038101906108ae919061398c565b611bf4565b6040516108c09190613eb2565b60405180910390f35b3480156108d557600080fd5b506108de611c33565b6040516108eb91906141f8565b60405180910390f35b34801561090057600080fd5b50610909611c39565b6040516109169190613f56565b60405180910390f35b34801561092b57600080fd5b506109466004803603810190610941919061398c565b611cc7565b6040516109539190613f56565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e919061398c565b611e20565b005b34801561099157600080fd5b5061099a611ea6565b6040516109a791906141f8565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190613943565b611eac565b005b3480156109e557600080fd5b50610a0060048036038101906109fb91906136d9565b611f42565b604051610a0d9190613f3b565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190613943565b611fd6565b005b348015610a4b57600080fd5b50610a666004803603810190610a6191906136ac565b61206c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada8261217c565b5b9050919050565b610aea61225e565b73ffffffffffffffffffffffffffffffffffffffff16610b08611739565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590614118565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b8a90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690614501565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c1882612266565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906140f8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c9f90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccb90614501565b8015610d185780601f10610ced57610100808354040283529160200191610d18565b820191906000526020600020905b815481529060010190602001808311610cfb57829003601f168201915b505050505081565b6000610d2b82611433565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390614198565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dbb61225e565b73ffffffffffffffffffffffffffffffffffffffff161480610dea5750610de981610de461225e565b611f42565b5b610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614078565b60405180910390fd5b610e3383836122d2565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e7a610e7461225e565b8261238b565b610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906141b8565b60405180910390fd5b610ec4838383612469565b505050565b6000610ed483611573565b8210610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613f78565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611012578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fae57610fad61469a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fff576001915050611018565b808061100a90614564565b915050610f76565b50600090505b919050565b61102561225e565b73ffffffffffffffffffffffffffffffffffffffff16611043611739565b73ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614118565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110be61225e565b73ffffffffffffffffffffffffffffffffffffffff166110dc611739565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614118565b60405180910390fd5b600061113c611739565b73ffffffffffffffffffffffffffffffffffffffff164760405161115f90613e9d565b60006040518083038185875af1925050503d806000811461119c576040519150601f19603f3d011682016040523d82523d6000602084013e6111a1565b606091505b50509050806111af57600080fd5b50565b6111cd83838360405180602001604052806000815250611b92565b505050565b606060006111df83611573565b905060008167ffffffffffffffff8111156111fd576111fc6146c9565b5b60405190808252806020026020018201604052801561122b5781602001602082028036833780820191505090505b50905060005b82811015611275576112438582610ec9565b8282815181106112565761125561469a565b5b602002602001018181525050808061126d90614564565b915050611231565b508092505050919050565b61128861225e565b73ffffffffffffffffffffffffffffffffffffffff166112a6611739565b73ffffffffffffffffffffffffffffffffffffffff16146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390614118565b60405180910390fd5b80600e8190555050565b6000611310610e3e565b8210611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906141d8565b60405180910390fd5b600882815481106113655761136461469a565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61139261225e565b73ffffffffffffffffffffffffffffffffffffffff166113b0611739565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90614118565b60405180910390fd5b80600b908051906020019061141c9291906133a9565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906140b8565b60405180910390fd5b80915050919050565b600b80546114f290614501565b80601f016020809104026020016040519081016040528092919081815260200182805461151e90614501565b801561156b5780601f106115405761010080835404028352916020019161156b565b820191906000526020600020905b81548152906001019060200180831161154e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614098565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163361225e565b73ffffffffffffffffffffffffffffffffffffffff16611651611739565b73ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90614118565b60405180910390fd5b6116b160006126c5565b565b6116bb61225e565b73ffffffffffffffffffffffffffffffffffffffff166116d9611739565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690614118565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461177290614501565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90614501565b80156117eb5780601f106117c0576101008083540402835291602001916117eb565b820191906000526020600020905b8154815290600101906020018083116117ce57829003601f168201915b5050505050905090565b6117fd61225e565b73ffffffffffffffffffffffffffffffffffffffff1661181b611739565b73ffffffffffffffffffffffffffffffffffffffff1614611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890614118565b60405180910390fd5b6013600061187f919061342f565b818160139190611890929190613450565b505050565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118c257600080fd5b60006118cc610e3e565b9050600082116118db57600080fd5b6010548211156118ea57600080fd5b600f5482826118f99190614336565b111561190457600080fd5b61190c611739565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a535760011515601260029054906101000a900460ff1615151415611a385761196333610f6e565b6119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614058565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826119f59190614336565b1115611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614178565b60405180910390fd5b505b81600e54611a4691906143bd565b341015611a5257600080fd5b5b6000600190505b828111611ade57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ab190614564565b9190505550611acb338284611ac69190614336565b61278b565b8080611ad690614564565b915050611a5a565b505050565b611af5611aee61225e565b83836127a9565b5050565b611b0161225e565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611739565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90614118565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611ba3611b9d61225e565b8361238b565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906141b8565b60405180910390fd5b611bee84848484612916565b50505050565b60138181548110611c0457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611c4690614501565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7290614501565b8015611cbf5780601f10611c9457610100808354040283529160200191611cbf565b820191906000526020600020905b815481529060010190602001808311611ca257829003601f168201915b505050505081565b6060611cd282612266565b611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0890614158565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611dbf57600d8054611d3a90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6690614501565b8015611db35780601f10611d8857610100808354040283529160200191611db3565b820191906000526020600020905b815481529060010190602001808311611d9657829003601f168201915b50505050509050611e1b565b6000611dc9612972565b90506000815111611de95760405180602001604052806000815250611e17565b80611df384612a04565b600c604051602001611e0793929190613e6c565b6040516020818303038152906040525b9150505b919050565b611e2861225e565b73ffffffffffffffffffffffffffffffffffffffff16611e46611739565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614118565b60405180910390fd5b8060118190555050565b600f5481565b611eb461225e565b73ffffffffffffffffffffffffffffffffffffffff16611ed2611739565b73ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614118565b60405180910390fd5b80600c9080519060200190611f3e9291906133a9565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fde61225e565b73ffffffffffffffffffffffffffffffffffffffff16611ffc611739565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990614118565b60405180910390fd5b80600d90805190602001906120689291906133a9565b5050565b61207461225e565b73ffffffffffffffffffffffffffffffffffffffff16612092611739565b73ffffffffffffffffffffffffffffffffffffffff16146120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90614118565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613fb8565b60405180910390fd5b612161816126c5565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612257575061225682612b65565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234583611433565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061239682612266565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90614038565b60405180910390fd5b60006123e083611433565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244f57508373ffffffffffffffffffffffffffffffffffffffff1661243784610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612460575061245f8185611f42565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248982611433565b73ffffffffffffffffffffffffffffffffffffffff16146124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614138565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690613ff8565b60405180910390fd5b61255a838383612bcf565b6125656000826122d2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b59190614417565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260c9190614336565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a5828260405180602001604052806000815250612ce3565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f90614018565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129099190613f3b565b60405180910390a3505050565b612921848484612469565b61292d84848484612d3e565b61296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296390613f98565b60405180910390fd5b50505050565b6060600b805461298190614501565b80601f01602080910402602001604051908101604052809291908181526020018280546129ad90614501565b80156129fa5780601f106129cf576101008083540402835291602001916129fa565b820191906000526020600020905b8154815290600101906020018083116129dd57829003601f168201915b5050505050905090565b60606000821415612a4c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b60565b600082905060005b60008214612a7e578080612a6790614564565b915050600a82612a77919061438c565b9150612a54565b60008167ffffffffffffffff811115612a9a57612a996146c9565b5b6040519080825280601f01601f191660200182016040528015612acc5781602001600182028036833780820191505090505b5090505b60008514612b5957600182612ae59190614417565b9150600a85612af491906145ad565b6030612b009190614336565b60f81b818381518110612b1657612b1561469a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b52919061438c565b9450612ad0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bda838383612177565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c1d57612c1881612ed5565b612c5c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c5b57612c5a8382612f1e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c9f57612c9a8161308b565b612cde565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cdd57612cdc828261315c565b5b5b505050565b612ced83836131db565b612cfa6000848484612d3e565b612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090613f98565b60405180910390fd5b505050565b6000612d5f8473ffffffffffffffffffffffffffffffffffffffff16612164565b15612ec8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d8861225e565b8786866040518563ffffffff1660e01b8152600401612daa9493929190613ecd565b602060405180830381600087803b158015612dc457600080fd5b505af1925050508015612df557506040513d601f19601f82011682018060405250810190612df29190613916565b60015b612e78573d8060008114612e25576040519150601f19603f3d011682016040523d82523d6000602084013e612e2a565b606091505b50600081511415612e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6790613f98565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ecd565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f2b84611573565b612f359190614417565b905060006007600084815260200190815260200160002054905081811461301a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061309f9190614417565b90506000600960008481526020019081526020016000205490506000600883815481106130cf576130ce61469a565b5b9060005260206000200154905080600883815481106130f1576130f061469a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131405761313f61466b565b5b6001900381819060005260206000200160009055905550505050565b600061316783611573565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906140d8565b60405180910390fd5b61325481612266565b15613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b90613fd8565b60405180910390fd5b6132a060008383612bcf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132f09190614336565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133b590614501565b90600052602060002090601f0160209004810192826133d7576000855561341e565b82601f106133f057805160ff191683800117855561341e565b8280016001018555821561341e579182015b8281111561341d578251825591602001919060010190613402565b5b50905061342b91906134f0565b5090565b508054600082559060005260206000209081019061344d91906134f0565b50565b8280548282559060005260206000209081019282156134df579160200282015b828111156134de57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613470565b5b5090506134ec91906134f0565b5090565b5b808211156135095760008160009055506001016134f1565b5090565b600061352061351b84614238565b614213565b90508281526020810184848401111561353c5761353b614707565b5b6135478482856144bf565b509392505050565b600061356261355d84614269565b614213565b90508281526020810184848401111561357e5761357d614707565b5b6135898482856144bf565b509392505050565b6000813590506135a081614c72565b92915050565b60008083601f8401126135bc576135bb6146fd565b5b8235905067ffffffffffffffff8111156135d9576135d86146f8565b5b6020830191508360208202830111156135f5576135f4614702565b5b9250929050565b60008135905061360b81614c89565b92915050565b60008135905061362081614ca0565b92915050565b60008151905061363581614ca0565b92915050565b600082601f8301126136505761364f6146fd565b5b813561366084826020860161350d565b91505092915050565b600082601f83011261367e5761367d6146fd565b5b813561368e84826020860161354f565b91505092915050565b6000813590506136a681614cb7565b92915050565b6000602082840312156136c2576136c1614711565b5b60006136d084828501613591565b91505092915050565b600080604083850312156136f0576136ef614711565b5b60006136fe85828601613591565b925050602061370f85828601613591565b9150509250929050565b60008060006060848603121561373257613731614711565b5b600061374086828701613591565b935050602061375186828701613591565b925050604061376286828701613697565b9150509250925092565b6000806000806080858703121561378657613785614711565b5b600061379487828801613591565b94505060206137a587828801613591565b93505060406137b687828801613697565b925050606085013567ffffffffffffffff8111156137d7576137d661470c565b5b6137e38782880161363b565b91505092959194509250565b6000806040838503121561380657613805614711565b5b600061381485828601613591565b9250506020613825858286016135fc565b9150509250929050565b6000806040838503121561384657613845614711565b5b600061385485828601613591565b925050602061386585828601613697565b9150509250929050565b6000806020838503121561388657613885614711565b5b600083013567ffffffffffffffff8111156138a4576138a361470c565b5b6138b0858286016135a6565b92509250509250929050565b6000602082840312156138d2576138d1614711565b5b60006138e0848285016135fc565b91505092915050565b6000602082840312156138ff576138fe614711565b5b600061390d84828501613611565b91505092915050565b60006020828403121561392c5761392b614711565b5b600061393a84828501613626565b91505092915050565b60006020828403121561395957613958614711565b5b600082013567ffffffffffffffff8111156139775761397661470c565b5b61398384828501613669565b91505092915050565b6000602082840312156139a2576139a1614711565b5b60006139b084828501613697565b91505092915050565b60006139c58383613e4e565b60208301905092915050565b6139da8161444b565b82525050565b60006139eb826142bf565b6139f581856142ed565b9350613a008361429a565b8060005b83811015613a31578151613a1888826139b9565b9750613a23836142e0565b925050600181019050613a04565b5085935050505092915050565b613a478161445d565b82525050565b6000613a58826142ca565b613a6281856142fe565b9350613a728185602086016144ce565b613a7b81614716565b840191505092915050565b6000613a91826142d5565b613a9b818561431a565b9350613aab8185602086016144ce565b613ab481614716565b840191505092915050565b6000613aca826142d5565b613ad4818561432b565b9350613ae48185602086016144ce565b80840191505092915050565b60008154613afd81614501565b613b07818661432b565b94506001821660008114613b225760018114613b3357613b66565b60ff19831686528186019350613b66565b613b3c856142aa565b60005b83811015613b5e57815481890152600182019150602081019050613b3f565b838801955050505b50505092915050565b6000613b7c602b8361431a565b9150613b8782614727565b604082019050919050565b6000613b9f60328361431a565b9150613baa82614776565b604082019050919050565b6000613bc260268361431a565b9150613bcd826147c5565b604082019050919050565b6000613be5601c8361431a565b9150613bf082614814565b602082019050919050565b6000613c0860248361431a565b9150613c138261483d565b604082019050919050565b6000613c2b60198361431a565b9150613c368261488c565b602082019050919050565b6000613c4e602c8361431a565b9150613c59826148b5565b604082019050919050565b6000613c7160178361431a565b9150613c7c82614904565b602082019050919050565b6000613c9460388361431a565b9150613c9f8261492d565b604082019050919050565b6000613cb7602a8361431a565b9150613cc28261497c565b604082019050919050565b6000613cda60298361431a565b9150613ce5826149cb565b604082019050919050565b6000613cfd60208361431a565b9150613d0882614a1a565b602082019050919050565b6000613d20602c8361431a565b9150613d2b82614a43565b604082019050919050565b6000613d4360208361431a565b9150613d4e82614a92565b602082019050919050565b6000613d6660298361431a565b9150613d7182614abb565b604082019050919050565b6000613d89602f8361431a565b9150613d9482614b0a565b604082019050919050565b6000613dac601c8361431a565b9150613db782614b59565b602082019050919050565b6000613dcf60218361431a565b9150613dda82614b82565b604082019050919050565b6000613df260008361430f565b9150613dfd82614bd1565b600082019050919050565b6000613e1560318361431a565b9150613e2082614bd4565b604082019050919050565b6000613e38602c8361431a565b9150613e4382614c23565b604082019050919050565b613e57816144b5565b82525050565b613e66816144b5565b82525050565b6000613e788286613abf565b9150613e848285613abf565b9150613e908284613af0565b9150819050949350505050565b6000613ea882613de5565b9150819050919050565b6000602082019050613ec760008301846139d1565b92915050565b6000608082019050613ee260008301876139d1565b613eef60208301866139d1565b613efc6040830185613e5d565b8181036060830152613f0e8184613a4d565b905095945050505050565b60006020820190508181036000830152613f3381846139e0565b905092915050565b6000602082019050613f506000830184613a3e565b92915050565b60006020820190508181036000830152613f708184613a86565b905092915050565b60006020820190508181036000830152613f9181613b6f565b9050919050565b60006020820190508181036000830152613fb181613b92565b9050919050565b60006020820190508181036000830152613fd181613bb5565b9050919050565b60006020820190508181036000830152613ff181613bd8565b9050919050565b6000602082019050818103600083015261401181613bfb565b9050919050565b6000602082019050818103600083015261403181613c1e565b9050919050565b6000602082019050818103600083015261405181613c41565b9050919050565b6000602082019050818103600083015261407181613c64565b9050919050565b6000602082019050818103600083015261409181613c87565b9050919050565b600060208201905081810360008301526140b181613caa565b9050919050565b600060208201905081810360008301526140d181613ccd565b9050919050565b600060208201905081810360008301526140f181613cf0565b9050919050565b6000602082019050818103600083015261411181613d13565b9050919050565b6000602082019050818103600083015261413181613d36565b9050919050565b6000602082019050818103600083015261415181613d59565b9050919050565b6000602082019050818103600083015261417181613d7c565b9050919050565b6000602082019050818103600083015261419181613d9f565b9050919050565b600060208201905081810360008301526141b181613dc2565b9050919050565b600060208201905081810360008301526141d181613e08565b9050919050565b600060208201905081810360008301526141f181613e2b565b9050919050565b600060208201905061420d6000830184613e5d565b92915050565b600061421d61422e565b90506142298282614533565b919050565b6000604051905090565b600067ffffffffffffffff821115614253576142526146c9565b5b61425c82614716565b9050602081019050919050565b600067ffffffffffffffff821115614284576142836146c9565b5b61428d82614716565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614341826144b5565b915061434c836144b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614381576143806145de565b5b828201905092915050565b6000614397826144b5565b91506143a2836144b5565b9250826143b2576143b161460d565b5b828204905092915050565b60006143c8826144b5565b91506143d3836144b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440c5761440b6145de565b5b828202905092915050565b6000614422826144b5565b915061442d836144b5565b9250828210156144405761443f6145de565b5b828203905092915050565b600061445682614495565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144ec5780820151818401526020810190506144d1565b838111156144fb576000848401525b50505050565b6000600282049050600182168061451957607f821691505b6020821081141561452d5761452c61463c565b5b50919050565b61453c82614716565b810181811067ffffffffffffffff8211171561455b5761455a6146c9565b5b80604052505050565b600061456f826144b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145a2576145a16145de565b5b600182019050919050565b60006145b8826144b5565b91506145c3836144b5565b9250826145d3576145d261460d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614c7b8161444b565b8114614c8657600080fd5b50565b614c928161445d565b8114614c9d57600080fd5b50565b614ca981614469565b8114614cb457600080fd5b50565b614cc0816144b5565b8114614ccb57600080fd5b5056fea26469706673582212202c5ca3fee641927239bb714bd1513674a7a15a5456d04432a74dfe8737340cb964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000f4368696e4368696c6c612047616e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447414e4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d553752794a69745765794175727a744545656e3155416b5646387a79354d70515a544d63314b3755565242552f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d65506a486d565872716b647877525a7545516d58514a4779463864614d6756336d383662343134476b3157550000000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063a475b5dd116100c1578063d0eb26b01161007a578063d0eb26b01461095c578063d5abeb0114610985578063da3ef23f146109b0578063e985e9c5146109d9578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063a475b5dd1461084c578063b88d4fde14610863578063ba4e5c491461088c578063ba7d2c76146108c9578063c6682862146108f4578063c87b56dd1461091f57610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639b6fbf8a146107b35780639c70b512146107dc578063a0712d6814610807578063a22cb4651461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906138e9565b610a68565b6040516102ab9190613f3b565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906138bc565b610ae2565b005b3480156102e957600080fd5b506102f2610b7b565b6040516102ff9190613f56565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a919061398c565b610c0d565b60405161033c9190613eb2565b60405180910390f35b34801561035157600080fd5b5061035a610c92565b6040516103679190613f56565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061382f565b610d20565b005b3480156103a557600080fd5b506103ae610e38565b6040516103bb91906141f8565b60405180910390f35b3480156103d057600080fd5b506103d9610e3e565b6040516103e691906141f8565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906136ac565b610e4b565b60405161042391906141f8565b60405180910390f35b34801561043857600080fd5b50610441610e63565b60405161044e91906141f8565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613719565b610e69565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061382f565b610ec9565b6040516104b491906141f8565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906136ac565b610f6e565b6040516104f19190613f3b565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906138bc565b61101d565b005b61052b6110b6565b005b34801561053957600080fd5b50610554600480360381019061054f9190613719565b6111b2565b005b34801561056257600080fd5b5061057d600480360381019061057891906136ac565b6111d2565b60405161058a9190613f19565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061398c565b611280565b005b3480156105c857600080fd5b506105e360048036038101906105de919061398c565b611306565b6040516105f091906141f8565b60405180910390f35b34801561060557600080fd5b5061060e611377565b60405161061b9190613f3b565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613943565b61138a565b005b34801561065957600080fd5b50610662611420565b60405161066f9190613f3b565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061398c565b611433565b6040516106ac9190613eb2565b60405180910390f35b3480156106c157600080fd5b506106ca6114e5565b6040516106d79190613f56565b60405180910390f35b3480156106ec57600080fd5b50610707600480360381019061070291906136ac565b611573565b60405161071491906141f8565b60405180910390f35b34801561072957600080fd5b5061073261162b565b005b34801561074057600080fd5b5061075b6004803603810190610756919061398c565b6116b3565b005b34801561076957600080fd5b50610772611739565b60405161077f9190613eb2565b60405180910390f35b34801561079457600080fd5b5061079d611763565b6040516107aa9190613f56565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d5919061386f565b6117f5565b005b3480156107e857600080fd5b506107f1611895565b6040516107fe9190613f3b565b60405180910390f35b610821600480360381019061081c919061398c565b6118a8565b005b34801561082f57600080fd5b5061084a600480360381019061084591906137ef565b611ae3565b005b34801561085857600080fd5b50610861611af9565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061376c565b611b92565b005b34801561089857600080fd5b506108b360048036038101906108ae919061398c565b611bf4565b6040516108c09190613eb2565b60405180910390f35b3480156108d557600080fd5b506108de611c33565b6040516108eb91906141f8565b60405180910390f35b34801561090057600080fd5b50610909611c39565b6040516109169190613f56565b60405180910390f35b34801561092b57600080fd5b506109466004803603810190610941919061398c565b611cc7565b6040516109539190613f56565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e919061398c565b611e20565b005b34801561099157600080fd5b5061099a611ea6565b6040516109a791906141f8565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190613943565b611eac565b005b3480156109e557600080fd5b50610a0060048036038101906109fb91906136d9565b611f42565b604051610a0d9190613f3b565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190613943565b611fd6565b005b348015610a4b57600080fd5b50610a666004803603810190610a6191906136ac565b61206c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada8261217c565b5b9050919050565b610aea61225e565b73ffffffffffffffffffffffffffffffffffffffff16610b08611739565b73ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590614118565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b8a90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb690614501565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b5050505050905090565b6000610c1882612266565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906140f8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c9f90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccb90614501565b8015610d185780601f10610ced57610100808354040283529160200191610d18565b820191906000526020600020905b815481529060010190602001808311610cfb57829003601f168201915b505050505081565b6000610d2b82611433565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390614198565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dbb61225e565b73ffffffffffffffffffffffffffffffffffffffff161480610dea5750610de981610de461225e565b611f42565b5b610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614078565b60405180910390fd5b610e3383836122d2565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e7a610e7461225e565b8261238b565b610eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb0906141b8565b60405180910390fd5b610ec4838383612469565b505050565b6000610ed483611573565b8210610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613f78565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611012578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fae57610fad61469a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fff576001915050611018565b808061100a90614564565b915050610f76565b50600090505b919050565b61102561225e565b73ffffffffffffffffffffffffffffffffffffffff16611043611739565b73ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614118565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110be61225e565b73ffffffffffffffffffffffffffffffffffffffff166110dc611739565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614118565b60405180910390fd5b600061113c611739565b73ffffffffffffffffffffffffffffffffffffffff164760405161115f90613e9d565b60006040518083038185875af1925050503d806000811461119c576040519150601f19603f3d011682016040523d82523d6000602084013e6111a1565b606091505b50509050806111af57600080fd5b50565b6111cd83838360405180602001604052806000815250611b92565b505050565b606060006111df83611573565b905060008167ffffffffffffffff8111156111fd576111fc6146c9565b5b60405190808252806020026020018201604052801561122b5781602001602082028036833780820191505090505b50905060005b82811015611275576112438582610ec9565b8282815181106112565761125561469a565b5b602002602001018181525050808061126d90614564565b915050611231565b508092505050919050565b61128861225e565b73ffffffffffffffffffffffffffffffffffffffff166112a6611739565b73ffffffffffffffffffffffffffffffffffffffff16146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f390614118565b60405180910390fd5b80600e8190555050565b6000611310610e3e565b8210611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906141d8565b60405180910390fd5b600882815481106113655761136461469a565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61139261225e565b73ffffffffffffffffffffffffffffffffffffffff166113b0611739565b73ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90614118565b60405180910390fd5b80600b908051906020019061141c9291906133a9565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d3906140b8565b60405180910390fd5b80915050919050565b600b80546114f290614501565b80601f016020809104026020016040519081016040528092919081815260200182805461151e90614501565b801561156b5780601f106115405761010080835404028352916020019161156b565b820191906000526020600020905b81548152906001019060200180831161154e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614098565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163361225e565b73ffffffffffffffffffffffffffffffffffffffff16611651611739565b73ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90614118565b60405180910390fd5b6116b160006126c5565b565b6116bb61225e565b73ffffffffffffffffffffffffffffffffffffffff166116d9611739565b73ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690614118565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461177290614501565b80601f016020809104026020016040519081016040528092919081815260200182805461179e90614501565b80156117eb5780601f106117c0576101008083540402835291602001916117eb565b820191906000526020600020905b8154815290600101906020018083116117ce57829003601f168201915b5050505050905090565b6117fd61225e565b73ffffffffffffffffffffffffffffffffffffffff1661181b611739565b73ffffffffffffffffffffffffffffffffffffffff1614611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890614118565b60405180910390fd5b6013600061187f919061342f565b818160139190611890929190613450565b505050565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118c257600080fd5b60006118cc610e3e565b9050600082116118db57600080fd5b6010548211156118ea57600080fd5b600f5482826118f99190614336565b111561190457600080fd5b61190c611739565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a535760011515601260029054906101000a900460ff1615151415611a385761196333610f6e565b6119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614058565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826119f59190614336565b1115611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614178565b60405180910390fd5b505b81600e54611a4691906143bd565b341015611a5257600080fd5b5b6000600190505b828111611ade57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ab190614564565b9190505550611acb338284611ac69190614336565b61278b565b8080611ad690614564565b915050611a5a565b505050565b611af5611aee61225e565b83836127a9565b5050565b611b0161225e565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611739565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90614118565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611ba3611b9d61225e565b8361238b565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906141b8565b60405180910390fd5b611bee84848484612916565b50505050565b60138181548110611c0457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611c4690614501565b80601f0160208091040260200160405190810160405280929190818152602001828054611c7290614501565b8015611cbf5780601f10611c9457610100808354040283529160200191611cbf565b820191906000526020600020905b815481529060010190602001808311611ca257829003601f168201915b505050505081565b6060611cd282612266565b611d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0890614158565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611dbf57600d8054611d3a90614501565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6690614501565b8015611db35780601f10611d8857610100808354040283529160200191611db3565b820191906000526020600020905b815481529060010190602001808311611d9657829003601f168201915b50505050509050611e1b565b6000611dc9612972565b90506000815111611de95760405180602001604052806000815250611e17565b80611df384612a04565b600c604051602001611e0793929190613e6c565b6040516020818303038152906040525b9150505b919050565b611e2861225e565b73ffffffffffffffffffffffffffffffffffffffff16611e46611739565b73ffffffffffffffffffffffffffffffffffffffff1614611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614118565b60405180910390fd5b8060118190555050565b600f5481565b611eb461225e565b73ffffffffffffffffffffffffffffffffffffffff16611ed2611739565b73ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614118565b60405180910390fd5b80600c9080519060200190611f3e9291906133a9565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fde61225e565b73ffffffffffffffffffffffffffffffffffffffff16611ffc611739565b73ffffffffffffffffffffffffffffffffffffffff1614612052576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204990614118565b60405180910390fd5b80600d90805190602001906120689291906133a9565b5050565b61207461225e565b73ffffffffffffffffffffffffffffffffffffffff16612092611739565b73ffffffffffffffffffffffffffffffffffffffff16146120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90614118565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613fb8565b60405180910390fd5b612161816126c5565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612257575061225682612b65565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234583611433565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061239682612266565b6123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc90614038565b60405180910390fd5b60006123e083611433565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244f57508373ffffffffffffffffffffffffffffffffffffffff1661243784610c0d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612460575061245f8185611f42565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248982611433565b73ffffffffffffffffffffffffffffffffffffffff16146124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614138565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690613ff8565b60405180910390fd5b61255a838383612bcf565b6125656000826122d2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b59190614417565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260c9190614336565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a5828260405180602001604052806000815250612ce3565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f90614018565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129099190613f3b565b60405180910390a3505050565b612921848484612469565b61292d84848484612d3e565b61296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296390613f98565b60405180910390fd5b50505050565b6060600b805461298190614501565b80601f01602080910402602001604051908101604052809291908181526020018280546129ad90614501565b80156129fa5780601f106129cf576101008083540402835291602001916129fa565b820191906000526020600020905b8154815290600101906020018083116129dd57829003601f168201915b5050505050905090565b60606000821415612a4c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b60565b600082905060005b60008214612a7e578080612a6790614564565b915050600a82612a77919061438c565b9150612a54565b60008167ffffffffffffffff811115612a9a57612a996146c9565b5b6040519080825280601f01601f191660200182016040528015612acc5781602001600182028036833780820191505090505b5090505b60008514612b5957600182612ae59190614417565b9150600a85612af491906145ad565b6030612b009190614336565b60f81b818381518110612b1657612b1561469a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b52919061438c565b9450612ad0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bda838383612177565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c1d57612c1881612ed5565b612c5c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c5b57612c5a8382612f1e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c9f57612c9a8161308b565b612cde565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cdd57612cdc828261315c565b5b5b505050565b612ced83836131db565b612cfa6000848484612d3e565b612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090613f98565b60405180910390fd5b505050565b6000612d5f8473ffffffffffffffffffffffffffffffffffffffff16612164565b15612ec8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d8861225e565b8786866040518563ffffffff1660e01b8152600401612daa9493929190613ecd565b602060405180830381600087803b158015612dc457600080fd5b505af1925050508015612df557506040513d601f19601f82011682018060405250810190612df29190613916565b60015b612e78573d8060008114612e25576040519150601f19603f3d011682016040523d82523d6000602084013e612e2a565b606091505b50600081511415612e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6790613f98565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ecd565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f2b84611573565b612f359190614417565b905060006007600084815260200190815260200160002054905081811461301a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061309f9190614417565b90506000600960008481526020019081526020016000205490506000600883815481106130cf576130ce61469a565b5b9060005260206000200154905080600883815481106130f1576130f061469a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131405761313f61466b565b5b6001900381819060005260206000200160009055905550505050565b600061316783611573565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561324b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613242906140d8565b60405180910390fd5b61325481612266565b15613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b90613fd8565b60405180910390fd5b6132a060008383612bcf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132f09190614336565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133b590614501565b90600052602060002090601f0160209004810192826133d7576000855561341e565b82601f106133f057805160ff191683800117855561341e565b8280016001018555821561341e579182015b8281111561341d578251825591602001919060010190613402565b5b50905061342b91906134f0565b5090565b508054600082559060005260206000209081019061344d91906134f0565b50565b8280548282559060005260206000209081019282156134df579160200282015b828111156134de57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613470565b5b5090506134ec91906134f0565b5090565b5b808211156135095760008160009055506001016134f1565b5090565b600061352061351b84614238565b614213565b90508281526020810184848401111561353c5761353b614707565b5b6135478482856144bf565b509392505050565b600061356261355d84614269565b614213565b90508281526020810184848401111561357e5761357d614707565b5b6135898482856144bf565b509392505050565b6000813590506135a081614c72565b92915050565b60008083601f8401126135bc576135bb6146fd565b5b8235905067ffffffffffffffff8111156135d9576135d86146f8565b5b6020830191508360208202830111156135f5576135f4614702565b5b9250929050565b60008135905061360b81614c89565b92915050565b60008135905061362081614ca0565b92915050565b60008151905061363581614ca0565b92915050565b600082601f8301126136505761364f6146fd565b5b813561366084826020860161350d565b91505092915050565b600082601f83011261367e5761367d6146fd565b5b813561368e84826020860161354f565b91505092915050565b6000813590506136a681614cb7565b92915050565b6000602082840312156136c2576136c1614711565b5b60006136d084828501613591565b91505092915050565b600080604083850312156136f0576136ef614711565b5b60006136fe85828601613591565b925050602061370f85828601613591565b9150509250929050565b60008060006060848603121561373257613731614711565b5b600061374086828701613591565b935050602061375186828701613591565b925050604061376286828701613697565b9150509250925092565b6000806000806080858703121561378657613785614711565b5b600061379487828801613591565b94505060206137a587828801613591565b93505060406137b687828801613697565b925050606085013567ffffffffffffffff8111156137d7576137d661470c565b5b6137e38782880161363b565b91505092959194509250565b6000806040838503121561380657613805614711565b5b600061381485828601613591565b9250506020613825858286016135fc565b9150509250929050565b6000806040838503121561384657613845614711565b5b600061385485828601613591565b925050602061386585828601613697565b9150509250929050565b6000806020838503121561388657613885614711565b5b600083013567ffffffffffffffff8111156138a4576138a361470c565b5b6138b0858286016135a6565b92509250509250929050565b6000602082840312156138d2576138d1614711565b5b60006138e0848285016135fc565b91505092915050565b6000602082840312156138ff576138fe614711565b5b600061390d84828501613611565b91505092915050565b60006020828403121561392c5761392b614711565b5b600061393a84828501613626565b91505092915050565b60006020828403121561395957613958614711565b5b600082013567ffffffffffffffff8111156139775761397661470c565b5b61398384828501613669565b91505092915050565b6000602082840312156139a2576139a1614711565b5b60006139b084828501613697565b91505092915050565b60006139c58383613e4e565b60208301905092915050565b6139da8161444b565b82525050565b60006139eb826142bf565b6139f581856142ed565b9350613a008361429a565b8060005b83811015613a31578151613a1888826139b9565b9750613a23836142e0565b925050600181019050613a04565b5085935050505092915050565b613a478161445d565b82525050565b6000613a58826142ca565b613a6281856142fe565b9350613a728185602086016144ce565b613a7b81614716565b840191505092915050565b6000613a91826142d5565b613a9b818561431a565b9350613aab8185602086016144ce565b613ab481614716565b840191505092915050565b6000613aca826142d5565b613ad4818561432b565b9350613ae48185602086016144ce565b80840191505092915050565b60008154613afd81614501565b613b07818661432b565b94506001821660008114613b225760018114613b3357613b66565b60ff19831686528186019350613b66565b613b3c856142aa565b60005b83811015613b5e57815481890152600182019150602081019050613b3f565b838801955050505b50505092915050565b6000613b7c602b8361431a565b9150613b8782614727565b604082019050919050565b6000613b9f60328361431a565b9150613baa82614776565b604082019050919050565b6000613bc260268361431a565b9150613bcd826147c5565b604082019050919050565b6000613be5601c8361431a565b9150613bf082614814565b602082019050919050565b6000613c0860248361431a565b9150613c138261483d565b604082019050919050565b6000613c2b60198361431a565b9150613c368261488c565b602082019050919050565b6000613c4e602c8361431a565b9150613c59826148b5565b604082019050919050565b6000613c7160178361431a565b9150613c7c82614904565b602082019050919050565b6000613c9460388361431a565b9150613c9f8261492d565b604082019050919050565b6000613cb7602a8361431a565b9150613cc28261497c565b604082019050919050565b6000613cda60298361431a565b9150613ce5826149cb565b604082019050919050565b6000613cfd60208361431a565b9150613d0882614a1a565b602082019050919050565b6000613d20602c8361431a565b9150613d2b82614a43565b604082019050919050565b6000613d4360208361431a565b9150613d4e82614a92565b602082019050919050565b6000613d6660298361431a565b9150613d7182614abb565b604082019050919050565b6000613d89602f8361431a565b9150613d9482614b0a565b604082019050919050565b6000613dac601c8361431a565b9150613db782614b59565b602082019050919050565b6000613dcf60218361431a565b9150613dda82614b82565b604082019050919050565b6000613df260008361430f565b9150613dfd82614bd1565b600082019050919050565b6000613e1560318361431a565b9150613e2082614bd4565b604082019050919050565b6000613e38602c8361431a565b9150613e4382614c23565b604082019050919050565b613e57816144b5565b82525050565b613e66816144b5565b82525050565b6000613e788286613abf565b9150613e848285613abf565b9150613e908284613af0565b9150819050949350505050565b6000613ea882613de5565b9150819050919050565b6000602082019050613ec760008301846139d1565b92915050565b6000608082019050613ee260008301876139d1565b613eef60208301866139d1565b613efc6040830185613e5d565b8181036060830152613f0e8184613a4d565b905095945050505050565b60006020820190508181036000830152613f3381846139e0565b905092915050565b6000602082019050613f506000830184613a3e565b92915050565b60006020820190508181036000830152613f708184613a86565b905092915050565b60006020820190508181036000830152613f9181613b6f565b9050919050565b60006020820190508181036000830152613fb181613b92565b9050919050565b60006020820190508181036000830152613fd181613bb5565b9050919050565b60006020820190508181036000830152613ff181613bd8565b9050919050565b6000602082019050818103600083015261401181613bfb565b9050919050565b6000602082019050818103600083015261403181613c1e565b9050919050565b6000602082019050818103600083015261405181613c41565b9050919050565b6000602082019050818103600083015261407181613c64565b9050919050565b6000602082019050818103600083015261409181613c87565b9050919050565b600060208201905081810360008301526140b181613caa565b9050919050565b600060208201905081810360008301526140d181613ccd565b9050919050565b600060208201905081810360008301526140f181613cf0565b9050919050565b6000602082019050818103600083015261411181613d13565b9050919050565b6000602082019050818103600083015261413181613d36565b9050919050565b6000602082019050818103600083015261415181613d59565b9050919050565b6000602082019050818103600083015261417181613d7c565b9050919050565b6000602082019050818103600083015261419181613d9f565b9050919050565b600060208201905081810360008301526141b181613dc2565b9050919050565b600060208201905081810360008301526141d181613e08565b9050919050565b600060208201905081810360008301526141f181613e2b565b9050919050565b600060208201905061420d6000830184613e5d565b92915050565b600061421d61422e565b90506142298282614533565b919050565b6000604051905090565b600067ffffffffffffffff821115614253576142526146c9565b5b61425c82614716565b9050602081019050919050565b600067ffffffffffffffff821115614284576142836146c9565b5b61428d82614716565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614341826144b5565b915061434c836144b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614381576143806145de565b5b828201905092915050565b6000614397826144b5565b91506143a2836144b5565b9250826143b2576143b161460d565b5b828204905092915050565b60006143c8826144b5565b91506143d3836144b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440c5761440b6145de565b5b828202905092915050565b6000614422826144b5565b915061442d836144b5565b9250828210156144405761443f6145de565b5b828203905092915050565b600061445682614495565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144ec5780820151818401526020810190506144d1565b838111156144fb576000848401525b50505050565b6000600282049050600182168061451957607f821691505b6020821081141561452d5761452c61463c565b5b50919050565b61453c82614716565b810181811067ffffffffffffffff8211171561455b5761455a6146c9565b5b80604052505050565b600061456f826144b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145a2576145a16145de565b5b600182019050919050565b60006145b8826144b5565b91506145c3836144b5565b9250826145d3576145d261460d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614c7b8161444b565b8114614c8657600080fd5b50565b614c928161445d565b8114614c9d57600080fd5b50565b614ca981614469565b8114614cb457600080fd5b50565b614cc0816144b5565b8114614ccb57600080fd5b5056fea26469706673582212202c5ca3fee641927239bb714bd1513674a7a15a5456d04432a74dfe8737340cb964736f6c63430008070033